perf stat: Fix --no-scale
The -c option to enable multiplex scaling has been useless for quite some time because scaling is default. It's only useful as --no-scale to disable scaling. But the non scaling code path has bitrotted and doesn't print anything because perf output code relies on value run/ena information. Also even when we don't want to scale a value it's still useful to show its multiplex percentage. This patch: - Fixes help and documentation to show --no-scale instead of -c - Removes -c, only keeps the long option because -c doesn't support negatives. - Enables running/enabled even with --no-scale - And fixes some other problems in the no-scale output. Before: $ perf stat --no-scale -e cycles true Performance counter stats for 'true': <not counted> cycles 0.000984154 seconds time elapsed After: $ ./perf stat --no-scale -e cycles true Performance counter stats for 'true': 706,070 cycles 0.001219821 seconds time elapsed Signed-off-by: Andi Kleen <ak@linux.intel.com> Acked-by: Jiri Olsa <jolsa@kernel.org> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> LPU-Reference: 20190314225002.30108-9-andi@firstfloor.org Link: https://lkml.kernel.org/n/tip-xggjvwcdaj2aqy8ib3i4b1g6@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
90b10f47c0
commit
75998bb263
|
@ -72,9 +72,8 @@ report::
|
|||
--all-cpus::
|
||||
system-wide collection from all CPUs (default if no target is specified)
|
||||
|
||||
-c::
|
||||
--scale::
|
||||
scale/normalize counter values
|
||||
--no-scale::
|
||||
Don't scale/normalize counter values
|
||||
|
||||
-d::
|
||||
--detailed::
|
||||
|
|
|
@ -718,7 +718,8 @@ static struct option stat_options[] = {
|
|||
"system-wide collection from all CPUs"),
|
||||
OPT_BOOLEAN('g', "group", &group,
|
||||
"put the counters into a counter group"),
|
||||
OPT_BOOLEAN('c', "scale", &stat_config.scale, "scale/normalize counters"),
|
||||
OPT_BOOLEAN(0, "scale", &stat_config.scale,
|
||||
"Use --no-scale to disable counter scaling for multiplexing"),
|
||||
OPT_INCR('v', "verbose", &verbose,
|
||||
"be more verbose (show counter open errors, etc)"),
|
||||
OPT_INTEGER('r', "repeat", &stat_config.run_count,
|
||||
|
|
|
@ -1344,8 +1344,7 @@ void perf_counts_values__scale(struct perf_counts_values *count,
|
|||
scaled = 1;
|
||||
count->val = (u64)((double) count->val * count->ena / count->run + 0.5);
|
||||
}
|
||||
} else
|
||||
count->ena = count->run = 0;
|
||||
}
|
||||
|
||||
if (pscaled)
|
||||
*pscaled = scaled;
|
||||
|
|
|
@ -291,10 +291,8 @@ process_counter_values(struct perf_stat_config *config, struct perf_evsel *evsel
|
|||
break;
|
||||
case AGGR_GLOBAL:
|
||||
aggr->val += count->val;
|
||||
if (config->scale) {
|
||||
aggr->ena += count->ena;
|
||||
aggr->run += count->run;
|
||||
}
|
||||
aggr->ena += count->ena;
|
||||
aggr->run += count->run;
|
||||
case AGGR_UNSET:
|
||||
default:
|
||||
break;
|
||||
|
@ -442,10 +440,8 @@ int create_perf_stat_counter(struct perf_evsel *evsel,
|
|||
struct perf_event_attr *attr = &evsel->attr;
|
||||
struct perf_evsel *leader = evsel->leader;
|
||||
|
||||
if (config->scale) {
|
||||
attr->read_format = PERF_FORMAT_TOTAL_TIME_ENABLED |
|
||||
PERF_FORMAT_TOTAL_TIME_RUNNING;
|
||||
}
|
||||
attr->read_format = PERF_FORMAT_TOTAL_TIME_ENABLED |
|
||||
PERF_FORMAT_TOTAL_TIME_RUNNING;
|
||||
|
||||
/*
|
||||
* The event is part of non trivial group, let's enable
|
||||
|
|
Loading…
Reference in New Issue