2023-02-09 06:45:04

by Ian Rogers

[permalink] [raw]
Subject: [PATCH v1] perf stat: Avoid merging/aggregating metric counts twice

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: 942c5593393d ("perf stat: Add perf_stat_merge_counters()")
Reported-by: Perry Taylor <[email protected]>
Signed-off-by: Ian Rogers <[email protected]>
---
tools/perf/util/stat-shadow.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/perf/util/stat-shadow.c b/tools/perf/util/stat-shadow.c
index cadb2df23c87..4cd05d9205e3 100644
--- a/tools/perf/util/stat-shadow.c
+++ b/tools/perf/util/stat-shadow.c
@@ -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;
--
2.39.1.519.gcb327c4b5f-goog



2023-02-09 19:06:50

by Namhyung Kim

[permalink] [raw]
Subject: Re: [PATCH v1] perf stat: Avoid merging/aggregating metric counts twice

Hi Ian,

On Wed, Feb 8, 2023 at 10:45 PM Ian Rogers <[email protected]> wrote:
>
> 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.

+1

>
> Fixes: 942c5593393d ("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]>

Thanks,
Namhyung


> ---
> tools/perf/util/stat-shadow.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/tools/perf/util/stat-shadow.c b/tools/perf/util/stat-shadow.c
> index cadb2df23c87..4cd05d9205e3 100644
> --- a/tools/perf/util/stat-shadow.c
> +++ b/tools/perf/util/stat-shadow.c
> @@ -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;
> --
> 2.39.1.519.gcb327c4b5f-goog
>

2023-02-09 21:29:55

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [PATCH v1] perf stat: Avoid merging/aggregating metric counts twice

Em Thu, Feb 09, 2023 at 11:06:22AM -0800, Namhyung Kim escreveu:
> On Wed, Feb 8, 2023 at 10:45 PM Ian Rogers <[email protected]> wrote:

> > 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.

> +1

'perf stat' code needs help, that I'm sure, its great that you guys are
looking/working at/on it, please continue.

> >
> > Fixes: 942c5593393d ("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]>

Thanks, applied.

- Arnaldo