perf stat: Fix --no-scale
tip-bot for Andi Kleen
merge botCommit-ID: 75998bb263bf48c1c85d78cd2d2f3a97d3747cab Gitweb: https://git.kernel.org/tip/75998bb263bf48c1c85d78cd2d2f3a97d3747cab Author: Andi Kleen <[email protected]> AuthorDate: Thu, 14 Mar 2019 15:50:01 -0700 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Tue, 19 Mar 2019 16:52:03 -0300
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 elapsedLPU-Reference: [email protected]
--- tools/perf/Documentation/perf-stat.txt | 5 ++--- tools/perf/builtin-stat.c | 3 ++- tools/perf/util/evsel.c | 3 +-- tools/perf/util/stat.c | 12 ++++-------- 4 files changed, 9 insertions(+), 14 deletions(-)
tools/perf/Documentation/perf-stat.txt +2 -3
@@ -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::
tools/perf/builtin-stat.c +2 -1
@@ -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,
tools/perf/util/evsel.c +1 -2
@@ -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;
tools/perf/util/stat.c +4 -8
@@ -291,10 +291,8 @@ process_counter_values(struct perf_stat_config *config, struct perf_evsel *evselbreak ;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