]> Git Repo - linux.git/commitdiff
perf stat: Avoid merging/aggregating metric counts twice
authorIan Rogers <[email protected]>
Thu, 9 Feb 2023 06:44:47 +0000 (22:44 -0800)
committerArnaldo Carvalho de Melo <[email protected]>
Thu, 9 Feb 2023 21:28:08 +0000 (18:28 -0300)
The added perf_stat_merge_counters combines uncore counters. When
metrics are enabled, the counts are merged into a metric_leader via the
stat-shadow saved_value logic. As the leader now is passed an aggregated
count, it leads to all counters being added together twice and counts
appearing approximately doubled in metrics.

This change disables the saved_value merging of counts for evsels that
are merged. It is recommended that later changes remove the saved_value
entirely as the two layers of aggregation in the code is confusing.

Fixes: 942c5593393d9418 ("perf stat: Add perf_stat_merge_counters()")
Reported-by: Perry Taylor <[email protected]>
Signed-off-by: Ian Rogers <[email protected]>
Acked-by: Namhyung Kim <[email protected]>
Cc: Alexander Shishkin <[email protected]>
Cc: Eduard Zingerman <[email protected]>
Cc: Florian Fischer <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: James Clark <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Mark Rutland <[email protected]>
Cc: Namhyung Kim <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Stephane Eranian <[email protected]>
Cc: Xing Zhengjun <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
tools/perf/util/stat-shadow.c

index 35ea4813f468d75f3ecab5de826e745f05332fd7..806b32156459a6305591f2d7ae2c374798527eab 100644 (file)
@@ -311,7 +311,7 @@ void perf_stat__update_shadow_stats(struct evsel *counter, u64 count,
                update_stats(&v->stats, count);
                if (counter->metric_leader)
                        v->metric_total += count;
-       } else if (counter->metric_leader) {
+       } else if (counter->metric_leader && !counter->merged_stat) {
                v = saved_value_lookup(counter->metric_leader,
                                       map_idx, true, STAT_NONE, 0, st, rsd.cgrp);
                v->metric_total += count;
This page took 0.063832 seconds and 4 git commands to generate.