mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-04 12:16:41 +00:00
perf stat: Show average value on multiple runs
When -r option is used, perf stat runs the command multiple times and update stats in the evsel->stats.res_stats for global aggregation. But the value is never used and the value it prints at the end is just the value from the last run. I think we should print the average number of multiple runs. Add evlist__copy_res_stats() to update the aggr counter (for display) using the values in the evsel->stats.res_stats. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Ian Rogers <irogers@google.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Peter Zijlstra <peterz@infradead.org> Link: https://lore.kernel.org/r/20230616073211.1057936-2-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
ed4090a22c
commit
dada1a1f5f
@ -2831,8 +2831,11 @@ int cmd_stat(int argc, const char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
if (!forever && status != -1 && (!interval || stat_config.summary))
|
||||
if (!forever && status != -1 && (!interval || stat_config.summary)) {
|
||||
if (stat_config.run_count > 1)
|
||||
evlist__copy_res_stats(&stat_config, evsel_list);
|
||||
print_counters(NULL, argc, argv);
|
||||
}
|
||||
|
||||
evlist__finalize_ctlfd(evsel_list);
|
||||
|
||||
|
@ -264,6 +264,28 @@ void evlist__copy_prev_raw_counts(struct evlist *evlist)
|
||||
evsel__copy_prev_raw_counts(evsel);
|
||||
}
|
||||
|
||||
static void evsel__copy_res_stats(struct evsel *evsel)
|
||||
{
|
||||
struct perf_stat_evsel *ps = evsel->stats;
|
||||
|
||||
/*
|
||||
* For GLOBAL aggregation mode, it updates the counts for each run
|
||||
* in the evsel->stats.res_stats. See perf_stat_process_counter().
|
||||
*/
|
||||
*ps->aggr[0].counts.values = avg_stats(&ps->res_stats);
|
||||
}
|
||||
|
||||
void evlist__copy_res_stats(struct perf_stat_config *config, struct evlist *evlist)
|
||||
{
|
||||
struct evsel *evsel;
|
||||
|
||||
if (config->aggr_mode != AGGR_GLOBAL)
|
||||
return;
|
||||
|
||||
evlist__for_each_entry(evlist, evsel)
|
||||
evsel__copy_res_stats(evsel);
|
||||
}
|
||||
|
||||
static size_t pkg_id_hash(long __key, void *ctx __maybe_unused)
|
||||
{
|
||||
uint64_t *key = (uint64_t *) __key;
|
||||
|
@ -197,6 +197,7 @@ void evlist__save_aggr_prev_raw_counts(struct evlist *evlist);
|
||||
|
||||
int evlist__alloc_aggr_stats(struct evlist *evlist, int nr_aggr);
|
||||
void evlist__reset_aggr_stats(struct evlist *evlist);
|
||||
void evlist__copy_res_stats(struct perf_stat_config *config, struct evlist *evlist);
|
||||
|
||||
int perf_stat_process_counter(struct perf_stat_config *config,
|
||||
struct evsel *counter);
|
||||
|
Loading…
Reference in New Issue
Block a user