mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 20:48:49 +08:00
perf diff: Add --percentage option
The --percentage option is for controlling overhead percentage displayed. It can only receive either of "relative" or "absolute" and affects -c delta output only. For more information, please see previous commit same thing done to "perf report". Signed-off-by: Namhyung Kim <namhyung@kernel.org> Link: http://lkml.kernel.org/r/1397145720-8063-5-git-send-email-namhyung@kernel.org Signed-off-by: Jiri Olsa <jolsa@redhat.com>
This commit is contained in:
parent
33db4568e1
commit
8810f6ced7
@ -33,17 +33,20 @@ OPTIONS
|
||||
-d::
|
||||
--dsos=::
|
||||
Only consider symbols in these dsos. CSV that understands
|
||||
file://filename entries.
|
||||
file://filename entries. This option will affect the percentage
|
||||
of the Baseline/Delta column. See --percentage for more info.
|
||||
|
||||
-C::
|
||||
--comms=::
|
||||
Only consider symbols in these comms. CSV that understands
|
||||
file://filename entries.
|
||||
file://filename entries. This option will affect the percentage
|
||||
of the Baseline/Delta column. See --percentage for more info.
|
||||
|
||||
-S::
|
||||
--symbols=::
|
||||
Only consider these symbols. CSV that understands
|
||||
file://filename entries.
|
||||
file://filename entries. This option will affect the percentage
|
||||
of the Baseline/Delta column. See --percentage for more info.
|
||||
|
||||
-s::
|
||||
--sort=::
|
||||
@ -89,6 +92,14 @@ OPTIONS
|
||||
--order::
|
||||
Specify compute sorting column number.
|
||||
|
||||
--percentage::
|
||||
Determine how to display the overhead percentage of filtered entries.
|
||||
Filters can be applied by --comms, --dsos and/or --symbols options.
|
||||
|
||||
"relative" means it's relative to filtered entries only so that the
|
||||
sum of shown entries will be always 100%. "absolute" means it retains
|
||||
the original value before and after the filter is applied.
|
||||
|
||||
COMPARISON
|
||||
----------
|
||||
The comparison is governed by the baseline file. The baseline perf.data
|
||||
@ -157,6 +168,10 @@ with:
|
||||
- period_percent being the % of the hist entry period value within
|
||||
single data file
|
||||
|
||||
- with filtering by -C, -d and/or -S, period_percent might be changed
|
||||
relative to how entries are filtered. Use --percentage=absolute to
|
||||
prevent such fluctuation.
|
||||
|
||||
ratio
|
||||
~~~~~
|
||||
If specified the 'Ratio' column is displayed with value 'r' computed as:
|
||||
|
@ -220,7 +220,8 @@ static int setup_compute(const struct option *opt, const char *str,
|
||||
|
||||
static double period_percent(struct hist_entry *he, u64 period)
|
||||
{
|
||||
u64 total = he->hists->stats.total_period;
|
||||
u64 total = hists__total_period(he->hists);
|
||||
|
||||
return (period * 100.0) / total;
|
||||
}
|
||||
|
||||
@ -259,11 +260,18 @@ static s64 compute_wdiff(struct hist_entry *he, struct hist_entry *pair)
|
||||
static int formula_delta(struct hist_entry *he, struct hist_entry *pair,
|
||||
char *buf, size_t size)
|
||||
{
|
||||
u64 he_total = he->hists->stats.total_period;
|
||||
u64 pair_total = pair->hists->stats.total_period;
|
||||
|
||||
if (symbol_conf.filter_relative) {
|
||||
he_total = he->hists->stats.total_non_filtered_period;
|
||||
pair_total = pair->hists->stats.total_non_filtered_period;
|
||||
}
|
||||
return scnprintf(buf, size,
|
||||
"(%" PRIu64 " * 100 / %" PRIu64 ") - "
|
||||
"(%" PRIu64 " * 100 / %" PRIu64 ")",
|
||||
pair->stat.period, pair->hists->stats.total_period,
|
||||
he->stat.period, he->hists->stats.total_period);
|
||||
pair->stat.period, pair_total,
|
||||
he->stat.period, he_total);
|
||||
}
|
||||
|
||||
static int formula_ratio(struct hist_entry *he, struct hist_entry *pair,
|
||||
@ -327,15 +335,16 @@ static int diff__process_sample_event(struct perf_tool *tool __maybe_unused,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (al.filtered)
|
||||
return 0;
|
||||
|
||||
if (hists__add_entry(&evsel->hists, &al, sample->period,
|
||||
sample->weight, sample->transaction)) {
|
||||
pr_warning("problem incrementing symbol period, skipping event\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (al.filtered == 0) {
|
||||
evsel->hists.stats.total_non_filtered_period += sample->period;
|
||||
evsel->hists.nr_non_filtered_entries++;
|
||||
}
|
||||
evsel->hists.stats.total_period += sample->period;
|
||||
return 0;
|
||||
}
|
||||
@ -565,7 +574,9 @@ static void hists__compute_resort(struct hists *hists)
|
||||
next = rb_first(root);
|
||||
|
||||
hists->nr_entries = 0;
|
||||
hists->nr_non_filtered_entries = 0;
|
||||
hists->stats.total_period = 0;
|
||||
hists->stats.total_non_filtered_period = 0;
|
||||
hists__reset_col_len(hists);
|
||||
|
||||
while (next != NULL) {
|
||||
@ -732,13 +743,16 @@ static const struct option options[] = {
|
||||
OPT_STRING(0, "symfs", &symbol_conf.symfs, "directory",
|
||||
"Look for files with symbols relative to this directory"),
|
||||
OPT_UINTEGER('o', "order", &sort_compute, "Specify compute sorting."),
|
||||
OPT_CALLBACK(0, "percentage", NULL, "relative|absolute",
|
||||
"How to display percentage of filtered entries", parse_filter_percentage),
|
||||
OPT_END()
|
||||
};
|
||||
|
||||
static double baseline_percent(struct hist_entry *he)
|
||||
{
|
||||
struct hists *hists = he->hists;
|
||||
return 100.0 * he->stat.period / hists->stats.total_period;
|
||||
u64 total = hists__total_period(he->hists);
|
||||
|
||||
return 100.0 * he->stat.period / total;
|
||||
}
|
||||
|
||||
static int hpp__color_baseline(struct perf_hpp_fmt *fmt,
|
||||
|
Loading…
Reference in New Issue
Block a user