perf pmu: Add PMU alias support
A perf uncore PMU may have two PMU names, a real name and an alias. The alias is exported at /sys/bus/event_source/devices/uncore_*/alias. The perf tool should support the alias as well. Add alias_name in the struct perf_pmu to store the alias. For the PMU which doesn't have an alias. It's NULL. Introduce two X86 specific functions to retrieve the real name and the alias separately. Only go through the sysfs to retrieve the mapping between the real name and the alias once. The result is cached in a list, uncore_pmu_list. Nothing changed for the other ARCHs. With the patch, the perf tool can monitor the PMU with either the real name or the alias. Use the real name, $ perf stat -e uncore_cha_2/event=1/ -x, 4044879584,,uncore_cha_2/event=1/,2528059205,100.00,, Use the alias, $ perf stat -e uncore_type_0_2/event=1/ -x, 3659675336,,uncore_type_0_2/event=1/,2287306455,100.00,, Committer notes: Rename 'struct perf_pmu_alias_name' to 'pmu_alias', the 'perf_' prefix should be used for libperf, things inside just tools/perf/ are being moved away from that prefix. Also 'pmu_alias' is shorter and reflects the abstraction. Also don't use 'pmu' as the name for variables for that type, we should use that for the 'struct perf_pmu' variables, avoiding confusion. Use 'pmu_alias' for 'struct pmu_alias' variables. Co-developed-by: Jin Yao <yao.jin@linux.intel.com> Co-developed-by: Arnaldo Carvalho de Melo <acme@kernel.org> Signed-off-by: Kan Liang <kan.liang@linux.intel.com> Reviewed-by: Andi Kleen <ak@linux.intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: John Garry <john.garry@huawei.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Riccardo Mancini <rickyman7@gmail.com> Link: http://lore.kernel.org/lkml/20210902065955.1299-2-yao.jin@linux.intel.com Signed-off-by: Jin Yao <yao.jin@linux.intel.com> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
c68b421d8e
commit
13d60ba073
@@ -22,6 +22,7 @@ enum {
|
||||
#define PERF_PMU_FORMAT_BITS 64
|
||||
#define EVENT_SOURCE_DEVICE_PATH "/bus/event_source/devices/"
|
||||
#define CPUS_TEMPLATE_CPU "%s/bus/event_source/devices/%s/cpus"
|
||||
#define MAX_PMU_NAME_LEN 128
|
||||
|
||||
struct perf_event_attr;
|
||||
|
||||
@@ -33,6 +34,7 @@ struct perf_pmu_caps {
|
||||
|
||||
struct perf_pmu {
|
||||
char *name;
|
||||
char *alias_name;
|
||||
char *id;
|
||||
__u32 type;
|
||||
bool selectable;
|
||||
@@ -140,4 +142,7 @@ int perf_pmu__match(char *pattern, char *name, char *tok);
|
||||
int perf_pmu__cpus_match(struct perf_pmu *pmu, struct perf_cpu_map *cpus,
|
||||
struct perf_cpu_map **mcpus_ptr,
|
||||
struct perf_cpu_map **ucpus_ptr);
|
||||
|
||||
char *pmu_find_real_name(const char *name);
|
||||
char *pmu_find_alias_name(const char *name);
|
||||
#endif /* __PMU_H */
|
||||
|
||||
Reference in New Issue
Block a user