]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
perf script: Fix output type for dynamically allocated core PMU's
authorThomas Falcon <thomas.falcon@intel.com>
Wed, 5 Mar 2025 16:39:35 +0000 (10:39 -0600)
committerNamhyung Kim <namhyung@kernel.org>
Wed, 5 Mar 2025 19:46:00 +0000 (11:46 -0800)
This patch was originally posted here:

https://lore.kernel.org/all/20241213215421.661139-1-thomas.falcon@intel.com/

I have rebased on top of Arnaldo's patch here:

https://lore.kernel.org/all/Z2XCi3PgstSrV0SE@x1/

The original commit message:
"
perf script output may show different fields on different core PMU's
that exist on heterogeneous platforms. For example,

perf record -e "{cpu_core/mem-loads-aux/,cpu_core/event=0xcd,\
umask=0x01,ldlat=3,name=MEM_UOPS_RETIRED.LOAD_LATENCY/}:upp"\
-c10000 -W -d -a -- sleep 1

perf script:

chromium-browse   46572 [002] 544966.882384:      10000  cpu_core/MEM_UOPS_RETIRED.LOAD_LATENCY/: 7ffdf1391b0c     10268100142 \
 |OP LOAD|LVL L1 hit|SNP None|TLB L1 or L2 hit|LCK No|BLK    N/A    5   7    0   7fad7c47425d [unknown] (/usr/lib64/libglib-2.0.so.0.8000.3)

perf record -e cpu_atom/event=0xd0,umask=0x05,ldlat=3,\
name=MEM_UOPS_RETIRED.LOAD_LATENCY/upp -c10000 -W -d -a -- sleep 1

perf script:

gnome-control-c  534224 [023] 544951.816227:      10000 cpu_atom/MEM_UOPS_RETIRED.LOAD_LATENCY/:   7f0aaaa0aae0  [unknown] (/usr/lib64/libglib-2.0.so.0.8000.3)

Some fields, such as data_src, are not included by default.

The cause is that while one PMU may be assigned a type such as
PERF_TYPE_RAW, other core PMU's are dynamically allocated at boot time.
If this value does not match an existing PERF_TYPE_X value,
output_type(perf_event_attr.type) will return OUTPUT_TYPE_OTHER.

Instead search for a core PMU with a matching perf_event_attr type
and, if one is found, return PERF_TYPE_RAW to match output of other
core PMU's.
"

Suggested-by: Kan Liang <kan.liang@intel.com>
Suggested-by: Ian Rogers <irogers@google.com>
Signed-off-by: Thomas Falcon <thomas.falcon@intel.com>
Reviewed-by: Ian Rogers <irogers@google.com>
Link: https://lore.kernel.org/r/20250305163935.1605312-1-thomas.falcon@intel.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/builtin-script.c

index d931c971a100100e4651ff7691da6e9ff438a7c6..9b16df881af8c80e4b987bbe0b9d044ae06d4df2 100644 (file)
@@ -400,10 +400,20 @@ static inline int output_type(unsigned int type)
 
 static inline int evsel__output_type(struct evsel *evsel)
 {
-       if (evsel->script_output_type == OUTPUT_TYPE_UNSET)
-               evsel->script_output_type = output_type(evsel->core.attr.type);
+       int type = evsel->script_output_type;
 
-       return evsel->script_output_type;
+       if (type == OUTPUT_TYPE_UNSET) {
+               type = output_type(evsel->core.attr.type);
+               if (type == OUTPUT_TYPE_OTHER) {
+                       struct perf_pmu *pmu = evsel__find_pmu(evsel);
+
+                       if (pmu && pmu->is_core)
+                               type = PERF_TYPE_RAW;
+               }
+               evsel->script_output_type = type;
+       }
+
+       return type;
 }
 
 static bool output_set_by_user(void)