perf parse-events: Add debug dump of evlist if reordered
authorIan Rogers <irogers@google.com>
Wed, 2 Apr 2025 20:15:49 +0000 (13:15 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 8 May 2025 15:53:51 +0000 (12:53 -0300)
Add debug verbose output to show how evsels were reordered by
parse_events__sort_events_and_fix_groups(). For example:

```
$ perf record -v -e '{instructions,cycles}' true
Using CPUID GenuineIntel-6-B7-1
WARNING: events were regrouped to match PMUs
evlist after sorting/fixing: '{cpu_atom/instructions/,cpu_atom/cycles/},{cpu_core/instructions/,cpu_core/cycles/}'
```

Reviewed-by: Kan Liang <kan.liang@linux.intel.com>
Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Dominique Martinet <asmadeus@codewreck.org>
Cc: Dr. David Alan Gilbert <linux@treblig.org>
Cc: Howard Chu <howardchu95@gmail.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Levi Yun <yeoreum.yun@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Weilin Wang <weilin.wang@intel.com>
Link: https://lore.kernel.org/r/20250402201549.4090305-6-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/parse-events.c

index 89708d1769c87f353ea73048e36716d616769cc6..7297ca3a4eec18925f64c3cf7bf73387b12361f3 100644 (file)
@@ -28,6 +28,7 @@
 #include "util/evsel_config.h"
 #include "util/event.h"
 #include "util/bpf-filter.h"
+#include "util/stat.h"
 #include "util/util.h"
 #include "tracepoint.h"
 
@@ -2200,14 +2201,23 @@ int __parse_events(struct evlist *evlist, const char *str, const char *pmu_filte
        if (ret2 < 0)
                return ret;
 
-       if (ret2 && warn_if_reordered && !parse_state.wild_card_pmus)
-               pr_warning("WARNING: events were regrouped to match PMUs\n");
-
        /*
         * Add list to the evlist even with errors to allow callers to clean up.
         */
        evlist__splice_list_tail(evlist, &parse_state.list);
 
+       if (ret2 && warn_if_reordered && !parse_state.wild_card_pmus) {
+               pr_warning("WARNING: events were regrouped to match PMUs\n");
+
+               if (verbose > 0) {
+                       struct strbuf sb = STRBUF_INIT;
+
+                       evlist__uniquify_name(evlist);
+                       evlist__format_evsels(evlist, &sb, 2048);
+                       pr_debug("evlist after sorting/fixing: '%s'\n", sb.buf);
+                       strbuf_release(&sb);
+               }
+       }
        if (!ret) {
                struct evsel *last;