Commit bd3846d0 authored by Ian Rogers's avatar Ian Rogers Committed by Arnaldo Carvalho de Melo

perf metrics: Be PMU specific for referenced metrics.

Hybrid systems may define the same metric for different PMUs, this can
cause confusion of events. To avoid this make the referenced metric
searches PMU specific, matching that in the table.
Signed-off-by: default avatarIan Rogers <irogers@google.com>
Tested-by: default avatarKan Liang <kan.liang@linux.intel.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ahmad Yasin <ahmad.yasin@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Caleb Biggers <caleb.biggers@intel.com>
Cc: Edward Baker <edward.baker@intel.com>
Cc: Florian Fischer <florian.fischer@muhq.space>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@arm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: John Garry <john.g.garry@oracle.com>
Cc: Kajol Jain <kjain@linux.ibm.com>
Cc: Kang Minchul <tegongkang@gmail.com>
Cc: Leo Yan <leo.yan@linaro.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Perry Taylor <perry.taylor@intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ravi Bangoria <ravi.bangoria@amd.com>
Cc: Rob Herring <robh@kernel.org>
Cc: Samantha Alt <samantha.alt@intel.com>
Cc: Stephane Eranian <eranian@google.com>
Cc: Sumanth Korikkar <sumanthk@linux.ibm.com>
Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
Cc: Thomas Richter <tmricht@linux.ibm.com>
Cc: Tiezhu Yang <yangtiezhu@loongson.cn>
Cc: Weilin Wang <weilin.wang@intel.com>
Cc: Xing Zhengjun <zhengjun.xing@linux.intel.com>
Cc: Yang Jihong <yangjihong1@huawei.com>
Link: https://lore.kernel.org/r/20230502223851.2234828-39-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 5136e43c
...@@ -1794,7 +1794,7 @@ static int add_default_attributes(void) ...@@ -1794,7 +1794,7 @@ static int add_default_attributes(void)
* will use this approach. To determine transaction support * will use this approach. To determine transaction support
* on an architecture test for such a metric name. * on an architecture test for such a metric name.
*/ */
if (!metricgroup__has_metric("transaction")) { if (!metricgroup__has_metric("all", "transaction")) {
pr_err("Missing transaction metrics"); pr_err("Missing transaction metrics");
return -1; return -1;
} }
...@@ -1823,7 +1823,7 @@ static int add_default_attributes(void) ...@@ -1823,7 +1823,7 @@ static int add_default_attributes(void)
smi_reset = true; smi_reset = true;
} }
if (!metricgroup__has_metric("smi")) { if (!metricgroup__has_metric("all", "smi")) {
pr_err("Missing smi metrics"); pr_err("Missing smi metrics");
return -1; return -1;
} }
...@@ -1903,7 +1903,7 @@ static int add_default_attributes(void) ...@@ -1903,7 +1903,7 @@ static int add_default_attributes(void)
* caused by exposing latent bugs. This is fixed properly in: * caused by exposing latent bugs. This is fixed properly in:
* https://lore.kernel.org/lkml/bff481ba-e60a-763f-0aa0-3ee53302c480@linux.intel.com/ * https://lore.kernel.org/lkml/bff481ba-e60a-763f-0aa0-3ee53302c480@linux.intel.com/
*/ */
if (metricgroup__has_metric("TopdownL1") && !perf_pmu__has_hybrid()) { if (metricgroup__has_metric("all", "TopdownL1") && !perf_pmu__has_hybrid()) {
struct evlist *metric_evlist = evlist__new(); struct evlist *metric_evlist = evlist__new();
struct evsel *metric_evsel; struct evsel *metric_evsel;
......
...@@ -51,8 +51,8 @@ _json_event_attributes = [ ...@@ -51,8 +51,8 @@ _json_event_attributes = [
# Attributes that are in pmu_metric rather than pmu_event. # Attributes that are in pmu_metric rather than pmu_event.
_json_metric_attributes = [ _json_metric_attributes = [
'metric_name', 'metric_group', 'metric_expr', 'metric_threshold', 'desc', 'pmu', 'metric_name', 'metric_group', 'metric_expr', 'metric_threshold',
'long_desc', 'unit', 'compat', 'metricgroup_no_group', 'aggr_mode', 'desc', 'long_desc', 'unit', 'compat', 'metricgroup_no_group', 'aggr_mode',
'event_grouping' 'event_grouping'
] ]
# Attributes that are bools or enum int values, encoded as '0', '1',... # Attributes that are bools or enum int values, encoded as '0', '1',...
......
...@@ -51,6 +51,7 @@ struct pmu_event { ...@@ -51,6 +51,7 @@ struct pmu_event {
}; };
struct pmu_metric { struct pmu_metric {
const char *pmu;
const char *metric_name; const char *metric_name;
const char *metric_group; const char *metric_group;
const char *metric_expr; const char *metric_expr;
......
This diff is collapsed.
...@@ -80,7 +80,7 @@ int metricgroup__parse_groups_test(struct evlist *evlist, ...@@ -80,7 +80,7 @@ int metricgroup__parse_groups_test(struct evlist *evlist,
struct rblist *metric_events); struct rblist *metric_events);
void metricgroup__print(const struct print_callbacks *print_cb, void *print_state); void metricgroup__print(const struct print_callbacks *print_cb, void *print_state);
bool metricgroup__has_metric(const char *metric); bool metricgroup__has_metric(const char *pmu, const char *metric);
unsigned int metricgroups__topdown_max_level(void); unsigned int metricgroups__topdown_max_level(void);
int arch_get_runtimeparam(const struct pmu_metric *pm); int arch_get_runtimeparam(const struct pmu_metric *pm);
void metricgroup__rblist_exit(struct rblist *metric_events); void metricgroup__rblist_exit(struct rblist *metric_events);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment