| From ad1c03ddef2c8ddd972d489a2db01111ddaa5954 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 4 Feb 2022 17:09:41 -0800 |
| Subject: perf stat: Fix display of grouped aliased events |
| |
| From: Ian Rogers <irogers@google.com> |
| |
| [ Upstream commit b2b1aa73ade982c175ac926a1fd34e76ad628b94 ] |
| |
| An event may have a number of uncore aliases that when added to the |
| evlist are consecutive. |
| |
| If there are multiple uncore events in a group then |
| parse_events__set_leader_for_uncore_aliase will reorder the evlist so |
| that events on the same PMU are adjacent. |
| |
| The collect_all_aliases function assumes that aliases are in blocks so |
| that only the first counter is printed and all others are marked merged. |
| |
| The reordering for groups breaks the assumption and so all counts are |
| printed. |
| |
| This change removes the assumption from collect_all_aliases |
| that the events are in blocks and instead processes the entire evlist. |
| |
| Before: |
| |
| ``` |
| $ perf stat -e '{UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE,UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE},duration_time' -a -A -- sleep 1 |
| |
| Performance counter stats for 'system wide': |
| |
| CPU0 256,866 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 494,413 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 967 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,738 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 285,161 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 429,920 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 955 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,443 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 310,753 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 416,657 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,231 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,573 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 416,067 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 405,966 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,481 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,447 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 312,911 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 408,154 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,086 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,380 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 333,994 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 370,349 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,287 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,335 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 188,107 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 302,423 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 701 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,070 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 307,221 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 383,642 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,036 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,158 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 318,479 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 821,545 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,028 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 2,550 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 227,618 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 372,272 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 903 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,456 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 376,783 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 419,827 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,406 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,453 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 286,583 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 429,956 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 999 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,436 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 313,867 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 370,159 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,114 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,291 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 342,083 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 409,111 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,399 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,684 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 365,828 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 376,037 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,378 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,411 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 382,456 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 621,743 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,232 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,955 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 342,316 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 385,067 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,176 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,268 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 373,588 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 386,163 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,394 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,464 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 381,206 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 546,891 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,266 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,712 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 221,176 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 392,069 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 831 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,456 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 355,401 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 705,595 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,235 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 2,216 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 371,436 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 428,103 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,306 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,442 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 384,352 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 504,200 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,468 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,860 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 228,856 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 287,976 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 832 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,060 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 215,121 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 334,162 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 681 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,026 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 296,179 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 436,083 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,084 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,525 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 262,296 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 416,573 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 986 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,533 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 285,852 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 359,842 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,073 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,326 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 303,379 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 367,222 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,008 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,156 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 273,487 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 425,449 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 932 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,367 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 297,596 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 414,793 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,140 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,601 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 342,365 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 360,422 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,291 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,342 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 327,196 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 580,858 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,122 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 2,014 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 296,564 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 452,817 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,087 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,694 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 375,002 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 389,393 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,478 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 1,540 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 365,213 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 594,685 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 1,401 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 2,222 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 1,000,749,060 ns duration_time |
| |
| 1.000749060 seconds time elapsed |
| ``` |
| |
| After: |
| |
| ``` |
| Performance counter stats for 'system wide': |
| |
| CPU0 20,547,434 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU36 45,202,862 UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOTE |
| CPU0 82,001 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU36 159,688 UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE |
| CPU0 1,000,464,828 ns duration_time |
| |
| 1.000464828 seconds time elapsed |
| ``` |
| |
| Fixes: 3cdc5c2cb924acb4 ("perf parse-events: Handle uncore event aliases in small groups properly") |
| Reviewed-by: Andi Kleen <ak@linux.intel.com> |
| Signed-off-by: Ian Rogers <irogers@google.com> |
| Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> |
| Cc: Alexandre Torgue <alexandre.torgue@foss.st.com> |
| Cc: Asaf Yaffe <asaf.yaffe@intel.com> |
| Cc: Caleb Biggers <caleb.biggers@intel.com> |
| Cc: Ingo Molnar <mingo@redhat.com> |
| Cc: James Clark <james.clark@arm.com> |
| Cc: Jiri Olsa <jolsa@redhat.com> |
| Cc: John Garry <john.garry@huawei.com> |
| Cc: Kan Liang <kan.liang@linux.intel.com> |
| Cc: Kshipra Bopardikar <kshipra.bopardikar@intel.com> |
| Cc: Mark Rutland <mark.rutland@arm.com> |
| Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com> |
| Cc: Namhyung Kim <namhyung@kernel.org> |
| Cc: Perry Taylor <perry.taylor@intel.com> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Stephane Eranian <eranian@google.com> |
| Cc: Vineet Singh <vineet.singh@intel.com> |
| Cc: Zhengjun Xing <zhengjun.xing@linux.intel.com> |
| Link: https://lore.kernel.org/r/20220205010941.1065469-1-irogers@google.com |
| Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| tools/perf/util/stat-display.c | 19 ++++++++++--------- |
| 1 file changed, 10 insertions(+), 9 deletions(-) |
| |
| diff --git a/tools/perf/util/stat-display.c b/tools/perf/util/stat-display.c |
| index a963b5b8eb724..96fe9c1af3364 100644 |
| --- a/tools/perf/util/stat-display.c |
| +++ b/tools/perf/util/stat-display.c |
| @@ -555,15 +555,16 @@ static void collect_all_aliases(struct perf_stat_config *config, struct evsel *c |
| |
| alias = list_prepare_entry(counter, &(evlist->core.entries), core.node); |
| list_for_each_entry_continue (alias, &evlist->core.entries, core.node) { |
| - if (strcmp(evsel__name(alias), evsel__name(counter)) || |
| - alias->scale != counter->scale || |
| - alias->cgrp != counter->cgrp || |
| - strcmp(alias->unit, counter->unit) || |
| - evsel__is_clock(alias) != evsel__is_clock(counter) || |
| - !strcmp(alias->pmu_name, counter->pmu_name)) |
| - break; |
| - alias->merged_stat = true; |
| - cb(config, alias, data, false); |
| + /* Merge events with the same name, etc. but on different PMUs. */ |
| + if (!strcmp(evsel__name(alias), evsel__name(counter)) && |
| + alias->scale == counter->scale && |
| + alias->cgrp == counter->cgrp && |
| + !strcmp(alias->unit, counter->unit) && |
| + evsel__is_clock(alias) == evsel__is_clock(counter) && |
| + strcmp(alias->pmu_name, counter->pmu_name)) { |
| + alias->merged_stat = true; |
| + cb(config, alias, data, false); |
| + } |
| } |
| } |
| |
| -- |
| 2.34.1 |
| |