tools/perf/util/stat-display.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
Currently, perf stat is omitting the pmu name for legacy events
on hybrid systems. git bisect indicated commit 357b965deba9 as the cause:
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[357b965deba9fb71467413e473764ec4e1694d8d] perf stat: Changes to event
name uniquification
Include an additional check for hybrid architectures when determining
whether to uniquify legacy events.
Before:
$ sudo ./perf stat -e cycles -a sleep 1
Performance counter stats for 'system wide':
173,903,751 cycles
666,423,950 cycles
1.006615048 seconds time elapsed
After:
$ sudo ./perf stat -e cycles -a sleep 1
Performance counter stats for 'system wide':
841,496,603 cpu_atom/cycles/
3,308,929,412 cpu_core/cycles/
1.002483283 seconds time elapsed
Fixes: 357b965deba9 ("perf stat: Changes to event name uniquification")
Signed-off-by: Thomas Falcon <thomas.falcon@intel.com>
---
tools/perf/util/stat-display.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/tools/perf/util/stat-display.c b/tools/perf/util/stat-display.c
index e65c7e9f15d1..df9f68080ec9 100644
--- a/tools/perf/util/stat-display.c
+++ b/tools/perf/util/stat-display.c
@@ -1676,6 +1676,7 @@ static bool evlist__disable_uniquify(const struct evlist *evlist)
static void evsel__set_needs_uniquify(struct evsel *counter, const struct perf_stat_config *config)
{
+ bool hybrid = (!config->hybrid_merge && evsel__is_hybrid(counter));
struct evsel *evsel;
if (counter->merged_stat) {
@@ -1688,7 +1689,8 @@ static void evsel__set_needs_uniquify(struct evsel *counter, const struct perf_s
return;
}
- if (counter->core.attr.type < PERF_TYPE_MAX && counter->core.attr.type != PERF_TYPE_RAW) {
+ if (!hybrid && counter->core.attr.type < PERF_TYPE_MAX &&
+ counter->core.attr.type != PERF_TYPE_RAW) {
/* Legacy event, don't uniquify. */
return;
}
@@ -1705,7 +1707,7 @@ static void evsel__set_needs_uniquify(struct evsel *counter, const struct perf_s
return;
}
- if (!config->hybrid_merge && evsel__is_hybrid(counter)) {
+ if (hybrid) {
/* Unique hybrid counters necessary. */
counter->needs_uniquify = true;
return;
--
2.48.1
Hello,
On Fri, Feb 28, 2025 at 01:53:51PM -0600, Thomas Falcon wrote:
> Currently, perf stat is omitting the pmu name for legacy events
> on hybrid systems. git bisect indicated commit 357b965deba9 as the cause:
>
> Bisecting: 0 revisions left to test after this (roughly 0 steps)
> [357b965deba9fb71467413e473764ec4e1694d8d] perf stat: Changes to event
> name uniquification
>
> Include an additional check for hybrid architectures when determining
> whether to uniquify legacy events.
>
> Before:
>
> $ sudo ./perf stat -e cycles -a sleep 1
>
> Performance counter stats for 'system wide':
>
> 173,903,751 cycles
> 666,423,950 cycles
>
> 1.006615048 seconds time elapsed
>
> After:
>
> $ sudo ./perf stat -e cycles -a sleep 1
>
> Performance counter stats for 'system wide':
>
> 841,496,603 cpu_atom/cycles/
> 3,308,929,412 cpu_core/cycles/
>
> 1.002483283 seconds time elapsed
>
> Fixes: 357b965deba9 ("perf stat: Changes to event name uniquification")
> Signed-off-by: Thomas Falcon <thomas.falcon@intel.com>
Thanks for the fix, but there's a similar patch in the list.
Please take a look.
https://lore.kernel.org/r/20250226145526.632380-1-james.clark@linaro.org
Thanks,
Namhyung
> ---
> tools/perf/util/stat-display.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/tools/perf/util/stat-display.c b/tools/perf/util/stat-display.c
> index e65c7e9f15d1..df9f68080ec9 100644
> --- a/tools/perf/util/stat-display.c
> +++ b/tools/perf/util/stat-display.c
> @@ -1676,6 +1676,7 @@ static bool evlist__disable_uniquify(const struct evlist *evlist)
>
> static void evsel__set_needs_uniquify(struct evsel *counter, const struct perf_stat_config *config)
> {
> + bool hybrid = (!config->hybrid_merge && evsel__is_hybrid(counter));
> struct evsel *evsel;
>
> if (counter->merged_stat) {
> @@ -1688,7 +1689,8 @@ static void evsel__set_needs_uniquify(struct evsel *counter, const struct perf_s
> return;
> }
>
> - if (counter->core.attr.type < PERF_TYPE_MAX && counter->core.attr.type != PERF_TYPE_RAW) {
> + if (!hybrid && counter->core.attr.type < PERF_TYPE_MAX &&
> + counter->core.attr.type != PERF_TYPE_RAW) {
> /* Legacy event, don't uniquify. */
> return;
> }
> @@ -1705,7 +1707,7 @@ static void evsel__set_needs_uniquify(struct evsel *counter, const struct perf_s
> return;
> }
>
> - if (!config->hybrid_merge && evsel__is_hybrid(counter)) {
> + if (hybrid) {
> /* Unique hybrid counters necessary. */
> counter->needs_uniquify = true;
> return;
> --
> 2.48.1
>
On Fri, 2025-02-28 at 16:09 -0800, Namhyung Kim wrote:
> Hello,
>
> On Fri, Feb 28, 2025 at 01:53:51PM -0600, Thomas Falcon wrote:
> > Currently, perf stat is omitting the pmu name for legacy events
> > on hybrid systems. git bisect indicated commit 357b965deba9 as the
> > cause:
> >
> > Bisecting: 0 revisions left to test after this (roughly 0 steps)
> > [357b965deba9fb71467413e473764ec4e1694d8d] perf stat: Changes to
> > event
> > name uniquification
> >
> > Include an additional check for hybrid architectures when
> > determining
> > whether to uniquify legacy events.
> >
> > Before:
> >
> > $ sudo ./perf stat -e cycles -a sleep 1
> >
> > Performance counter stats for 'system wide':
> >
> > 173,903,751 cycles
> > 666,423,950 cycles
> >
> > 1.006615048 seconds time elapsed
> >
> > After:
> >
> > $ sudo ./perf stat -e cycles -a sleep 1
> >
> > Performance counter stats for 'system wide':
> >
> > 841,496,603 cpu_atom/cycles/
> > 3,308,929,412 cpu_core/cycles/
> >
> > 1.002483283 seconds time elapsed
> >
> > Fixes: 357b965deba9 ("perf stat: Changes to event name
> > uniquification")
> > Signed-off-by: Thomas Falcon <thomas.falcon@intel.com>
>
> Thanks for the fix, but there's a similar patch in the list.
> Please take a look.
>
> https://lore.kernel.org/r/20250226145526.632380-1-james.clark@linaro.org
>
Will do, thanks!
Tom
> Thanks,
> Namhyung
>
> > ---
> > tools/perf/util/stat-display.c | 6 ++++--
> > 1 file changed, 4 insertions(+), 2 deletions(-)
> >
> > diff --git a/tools/perf/util/stat-display.c b/tools/perf/util/stat-
> > display.c
> > index e65c7e9f15d1..df9f68080ec9 100644
> > --- a/tools/perf/util/stat-display.c
> > +++ b/tools/perf/util/stat-display.c
> > @@ -1676,6 +1676,7 @@ static bool evlist__disable_uniquify(const
> > struct evlist *evlist)
> >
> > static void evsel__set_needs_uniquify(struct evsel *counter, const
> > struct perf_stat_config *config)
> > {
> > + bool hybrid = (!config->hybrid_merge &&
> > evsel__is_hybrid(counter));
> > struct evsel *evsel;
> >
> > if (counter->merged_stat) {
> > @@ -1688,7 +1689,8 @@ static void evsel__set_needs_uniquify(struct
> > evsel *counter, const struct perf_s
> > return;
> > }
> >
> > - if (counter->core.attr.type < PERF_TYPE_MAX && counter-
> > >core.attr.type != PERF_TYPE_RAW) {
> > + if (!hybrid && counter->core.attr.type < PERF_TYPE_MAX &&
> > + counter->core.attr.type != PERF_TYPE_RAW) {
> > /* Legacy event, don't uniquify. */
> > return;
> > }
> > @@ -1705,7 +1707,7 @@ static void evsel__set_needs_uniquify(struct
> > evsel *counter, const struct perf_s
> > return;
> > }
> >
> > - if (!config->hybrid_merge && evsel__is_hybrid(counter)) {
> > + if (hybrid) {
> > /* Unique hybrid counters necessary. */
> > counter->needs_uniquify = true;
> > return;
> > --
> > 2.48.1
> >
© 2016 - 2026 Red Hat, Inc.