mirror of
https://github.com/torvalds/linux.git
synced 2025-04-09 14:45:27 +00:00
perf script: Fix output type for dynamically allocated core PMU's
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>
This commit is contained in:
parent
957d194163
commit
74fb903b21
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user