perf stat,jevents: Introduce Default tags for the default mode
authorKan Liang <kan.liang@linux.intel.com>
Thu, 15 Jun 2023 13:53:10 +0000 (06:53 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 16 Jun 2023 01:16:48 +0000 (22:16 -0300)
Introduce a new metricgroup, Default, to tag all the metric groups which
will be collected in the default mode.

Add a new field, DefaultMetricgroupName, in the JSON file to indicate
the real metric group name. It will be printed in the default output
to replace the event names.

There is nothing changed for the output format.

On SPR, both TopdownL1 and TopdownL2 are displayed in the default
output.

On ARM, Intel ICL and later platforms (before SPR), only TopdownL1 is
displayed in the default output.

Suggested-by: Stephane Eranian <eranian@google.com>
Reviewed-by: Ian Rogers <irogers@google.com>
Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ahmad Yasin <ahmad.yasin@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/20230615135315.3662428-4-kan.liang@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-stat.c
tools/perf/pmu-events/jevents.py
tools/perf/pmu-events/pmu-events.h
tools/perf/util/metricgroup.c

index fc615bdeed4f7266fb679ec57c635116760ed726..55601b4b5c343dd5baadd724707e9a660357a75d 100644 (file)
@@ -2154,14 +2154,14 @@ static int add_default_attributes(void)
                 * Add TopdownL1 metrics if they exist. To minimize
                 * multiplexing, don't request threshold computation.
                 */
-               if (metricgroup__has_metric(pmu, "TopdownL1")) {
+               if (metricgroup__has_metric(pmu, "Default")) {
                        struct evlist *metric_evlist = evlist__new();
                        struct evsel *metric_evsel;
 
                        if (!metric_evlist)
                                return -1;
 
-                       if (metricgroup__parse_groups(metric_evlist, pmu, "TopdownL1",
+                       if (metricgroup__parse_groups(metric_evlist, pmu, "Default",
                                                        /*metric_no_group=*/false,
                                                        /*metric_no_merge=*/false,
                                                        /*metric_no_threshold=*/true,
index 7ed258be182922418f2a83c40cae6a62d39ead09..12e80bb7939be158dbc8db4fb9ddb74230c79b8c 100755 (executable)
@@ -54,8 +54,8 @@ _json_event_attributes = [
 # Attributes that are in pmu_metric rather than pmu_event.
 _json_metric_attributes = [
     'pmu', 'metric_name', 'metric_group', 'metric_expr', 'metric_threshold',
-    'desc', 'long_desc', 'unit', 'compat', 'metricgroup_no_group', 'aggr_mode',
-    'event_grouping'
+    'desc', 'long_desc', 'unit', 'compat', 'metricgroup_no_group',
+    'default_metricgroup_name', 'aggr_mode', 'event_grouping'
 ]
 # Attributes that are bools or enum int values, encoded as '0', '1',...
 _json_enum_attributes = ['aggr_mode', 'deprecated', 'event_grouping', 'perpkg']
@@ -307,6 +307,7 @@ class JsonEvent:
     self.metric_name = jd.get('MetricName')
     self.metric_group = jd.get('MetricGroup')
     self.metricgroup_no_group = jd.get('MetricgroupNoGroup')
+    self.default_metricgroup_name = jd.get('DefaultMetricgroupName')
     self.event_grouping = convert_metric_constraint(jd.get('MetricConstraint'))
     self.metric_expr = None
     if 'MetricExpr' in jd:
index 8cd23d656a5dc612f921982b8dcc21eb78eb7544..caf59f23cd6405f0e869ca3472aed18965c5cb63 100644 (file)
@@ -61,6 +61,7 @@ struct pmu_metric {
        const char *desc;
        const char *long_desc;
        const char *metricgroup_no_group;
+       const char *default_metricgroup_name;
        enum aggr_mode_class aggr_mode;
        enum metric_event_groups event_grouping;
 };
index 74f2d8efc02d20e0e1999f4d542453b62bd22b1b..8b19644ade7dfbf6152e214aba55412adc89cf18 100644 (file)
@@ -137,6 +137,11 @@ struct metric {
         * output.
         */
        const char *metric_unit;
+       /**
+        * Optional name of the metric group reported
+        * if the Default metric group is being processed.
+        */
+       const char *default_metricgroup_name;
        /** Optional null terminated array of referenced metrics. */
        struct metric_ref *metric_refs;
        /**
@@ -219,6 +224,7 @@ static struct metric *metric__new(const struct pmu_metric *pm,
 
        m->pmu = pm->pmu ?: "cpu";
        m->metric_name = pm->metric_name;
+       m->default_metricgroup_name = pm->default_metricgroup_name;
        m->modifier = NULL;
        if (modifier) {
                m->modifier = strdup(modifier);