mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
perf pmu: Recognize 'default_core' as a core PMU and document matching
The is_pmu_core function checks if a PMU name corresponds to a core CPU PMU. However, it currently fails to recognize "default_core" as a core PMU. When "default_core" is used, the PMU scanning fallback in pmus.c scans the "other_pmus" list. This scan is slow and always misses because "default_core" is a core PMU, leading to unnecessary overhead. Update is_pmu_core to recognize "default_core" directly. Additionally, document the different matching approaches (exact name for x86/s390, sysfs-based cpus file check for ARM/hybrid) to clarify how core PMUs are classified. Also, explicitly treat "default_core" as `all_pmus` in `setup_metric_events()` to preserve the original metric resolution behavior for this pseudo-PMU. Assisted-by: Gemini-CLI:Google Gemini 3.1 Pro Signed-off-by: Ian Rogers <irogers@google.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: James Clark <james.clark@linaro.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
536e81f074
commit
be694c488a
|
|
@ -295,7 +295,8 @@ static int setup_metric_events(const char *pmu, struct hashmap *ids,
|
|||
const char *metric_id;
|
||||
struct evsel *ev;
|
||||
size_t ids_size, matched_events, i;
|
||||
bool all_pmus = !strcmp(pmu, "all") || perf_pmus__num_core_pmus() == 1 || !is_pmu_core(pmu);
|
||||
bool all_pmus = !strcmp(pmu, "all") || !strcmp(pmu, "default_core") ||
|
||||
perf_pmus__num_core_pmus() == 1 || !is_pmu_core(pmu);
|
||||
|
||||
*out_metric_events = NULL;
|
||||
ids_size = hashmap__size(ids);
|
||||
|
|
|
|||
|
|
@ -2029,9 +2029,26 @@ int perf_pmu__for_each_format(struct perf_pmu *pmu, void *state, pmu_format_call
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* is_pmu_core() - Check if the given PMU name corresponds to a core CPU PMU.
|
||||
* @name: The PMU name to check.
|
||||
*
|
||||
* Core PMUs can be identified by:
|
||||
* 1. Exact name match:
|
||||
* - "cpu": Typically used on x86 architectures.
|
||||
* - "cpum_cf": Typically used on s390 architectures (CPU Measurement Counter Facility).
|
||||
* - "default_core": A generic name used to refer to the default core PMU.
|
||||
* 2. Sysfs file existence check (is_sysfs_pmu_core):
|
||||
* - Typically used on ARM systems or Intel hybrid architectures (e.g., "cpu_atom",
|
||||
* "cpu_core"). This approach checks if the sysfs directory for the PMU
|
||||
* contains a "cpus" file.
|
||||
*/
|
||||
bool is_pmu_core(const char *name)
|
||||
{
|
||||
return !strcmp(name, "cpu") || !strcmp(name, "cpum_cf") || is_sysfs_pmu_core(name);
|
||||
return !strcmp(name, "cpu") ||
|
||||
!strcmp(name, "cpum_cf") ||
|
||||
!strcmp(name, "default_core") ||
|
||||
is_sysfs_pmu_core(name);
|
||||
}
|
||||
|
||||
bool perf_pmu__supports_legacy_cache(const struct perf_pmu *pmu)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user