Re: [PATCH V2 3/8] perf stat,jevents: Introduce Default tags for the default mode

From: Ian Rogers
Date: Thu Jun 15 2023 - 01:51:35 EST


On Wed, Jun 14, 2023 at 5:18 PM <kan.liang@xxxxxxxxxxxxxxx> wrote:
>
> From: Kan Liang <kan.liang@xxxxxxxxxxxxxxx>
>
> 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@xxxxxxxxxx>
> Signed-off-by: Kan Liang <kan.liang@xxxxxxxxxxxxxxx>

Reviewed-by: Ian Rogers <irogers@xxxxxxxxxx>

Thanks,
Ian

> ---
> tools/perf/builtin-stat.c | 4 ++--
> tools/perf/pmu-events/jevents.py | 5 +++--
> tools/perf/pmu-events/pmu-events.h | 1 +
> tools/perf/util/metricgroup.c | 6 ++++++
> 4 files changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
> index fc615bdeed4f..55601b4b5c34 100644
> --- a/tools/perf/builtin-stat.c
> +++ b/tools/perf/builtin-stat.c
> @@ -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,
> diff --git a/tools/perf/pmu-events/jevents.py b/tools/perf/pmu-events/jevents.py
> index 7ed258be1829..12e80bb7939b 100755
> --- a/tools/perf/pmu-events/jevents.py
> +++ b/tools/perf/pmu-events/jevents.py
> @@ -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:
> diff --git a/tools/perf/pmu-events/pmu-events.h b/tools/perf/pmu-events/pmu-events.h
> index 8cd23d656a5d..caf59f23cd64 100644
> --- a/tools/perf/pmu-events/pmu-events.h
> +++ b/tools/perf/pmu-events/pmu-events.h
> @@ -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;
> };
> diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c
> index 74f2d8efc02d..8b19644ade7d 100644
> --- a/tools/perf/util/metricgroup.c
> +++ b/tools/perf/util/metricgroup.c
> @@ -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);
> --
> 2.35.1
>