From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: John Garry <john.garry@huawei.com>
Cc: mark.rutland@arm.com, irogers@google.com, ak@linux.intel.com,
mathieu.poirier@linaro.org, peterz@infradead.org,
will@kernel.org, linuxarm@huawei.com, qiangqing.zhang@nxp.com,
linux-kernel@vger.kernel.org, zhangshaokun@hisilicon.com,
alexander.shishkin@linux.intel.com, kjain@linux.ibm.com,
mingo@redhat.com, leo.yan@linaro.org, namhyung@kernel.org,
kim.phillips@amd.com, jolsa@redhat.com,
linux-arm-kernel@lists.infradead.org, kan.liang@linux.intel.com
Subject: Re: [PATCH v6 08/10] perf metricgroup: Support printing metric groups for system PMUs
Date: Mon, 7 Dec 2020 14:23:19 -0300 [thread overview]
Message-ID: <20201207172319.GD129853@kernel.org> (raw)
In-Reply-To: <1607080216-36968-9-git-send-email-john.garry@huawei.com>
Em Fri, Dec 04, 2020 at 07:10:14PM +0800, John Garry escreveu:
> Currently printing metricgroups for core- or uncore-based events matched
> by CPUID is supported.
>
> Extend this for system events.
>
> Signed-off-by: John Garry <john.garry@huawei.com>
> Acked-by: Kajol Jain <kjain@linux.ibm.com>
> ---
> tools/perf/util/metricgroup.c | 64 ++++++++++++++++++++++++++++++++---
> 1 file changed, 60 insertions(+), 4 deletions(-)
>
> diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c
> index 4c6a686b08eb..abc5d0e28d0f 100644
> --- a/tools/perf/util/metricgroup.c
> +++ b/tools/perf/util/metricgroup.c
> @@ -559,6 +559,49 @@ static int metricgroup__print_pmu_event(struct pmu_event *pe,
> return 0;
> }
>
> +struct metricgroup_print_sys_idata {
> + struct strlist *metriclist;
> + bool metricgroups;
> + char *filter;
> + bool raw;
> + bool details;
> + struct rblist *groups;
> +};
I'm doing some reorg to avoid these holes:
[acme@five perf]$ pahole -C metricgroup_print_sys_idata ~/bin/perf
struct metricgroup_print_sys_idata {
struct strlist * metriclist; /* 0 8 */
_Bool metricgroups; /* 8 1 */
/* XXX 7 bytes hole, try to pack */
char * filter; /* 16 8 */
_Bool raw; /* 24 1 */
_Bool details; /* 25 1 */
/* XXX 6 bytes hole, try to pack */
struct rblist * groups; /* 32 8 */
/* size: 40, cachelines: 1, members: 6 */
/* sum members: 27, holes: 2, sum holes: 13 */
/* last cacheline: 40 bytes */
};
[acme@five perf]$
It ended up as:
[acme@five perf]$ pahole -C metricgroup_print_sys_idata ~/bin/perf
struct metricgroup_print_sys_idata {
struct strlist * metriclist; /* 0 8 */
char * filter; /* 8 8 */
struct rblist * groups; /* 16 8 */
_Bool metricgroups; /* 24 1 */
_Bool raw; /* 25 1 */
_Bool details; /* 26 1 */
/* size: 32, cachelines: 1, members: 6 */
/* padding: 5 */
/* last cacheline: 32 bytes */
};
[acme@five perf]$o
- Arnaldo
> +typedef int (*metricgroup_sys_event_iter_fn)(struct pmu_event *pe, void *);
> +
> +struct metricgroup_iter_data {
> + metricgroup_sys_event_iter_fn fn;
> + void *data;
> +};
> +
> +static int metricgroup__sys_event_iter(struct pmu_event *pe, void *data)
> +{
> + struct metricgroup_iter_data *d = data;
> + struct perf_pmu *pmu = NULL;
> +
> + if (!pe->metric_expr || !pe->compat)
> + return 0;
> +
> + while ((pmu = perf_pmu__scan(pmu))) {
> +
> + if (!pmu->id || strcmp(pmu->id, pe->compat))
> + continue;
> +
> + return d->fn(pe, d->data);
> + }
> +
> + return 0;
> +}
> +
> +static int metricgroup__print_sys_event_iter(struct pmu_event *pe, void *data)
> +{
> + struct metricgroup_print_sys_idata *d = data;
> +
> + return metricgroup__print_pmu_event(pe, d->metricgroups, d->filter, d->raw,
> + d->details, d->groups, d->metriclist);
> +}
> +
> void metricgroup__print(bool metrics, bool metricgroups, char *filter,
> bool raw, bool details)
> {
> @@ -569,9 +612,6 @@ void metricgroup__print(bool metrics, bool metricgroups, char *filter,
> struct rb_node *node, *next;
> struct strlist *metriclist = NULL;
>
> - if (!map)
> - return;
> -
> if (!metricgroups) {
> metriclist = strlist__new(NULL, NULL);
> if (!metriclist)
> @@ -582,7 +622,7 @@ void metricgroup__print(bool metrics, bool metricgroups, char *filter,
> groups.node_new = mep_new;
> groups.node_cmp = mep_cmp;
> groups.node_delete = mep_delete;
> - for (i = 0; ; i++) {
> + for (i = 0; map; i++) {
> pe = &map->table[i];
>
> if (!pe->name && !pe->metric_group && !pe->metric_name)
> @@ -595,6 +635,22 @@ void metricgroup__print(bool metrics, bool metricgroups, char *filter,
> return;
> }
>
> + {
> + struct metricgroup_iter_data data = {
> + .fn = metricgroup__print_sys_event_iter,
> + .data = (void *) &(struct metricgroup_print_sys_idata){
> + .metriclist = metriclist,
> + .metricgroups = metricgroups,
> + .filter = filter,
> + .raw = raw,
> + .details = details,
> + .groups = &groups,
> + },
> + };
> +
> + pmu_for_each_sys_event(metricgroup__sys_event_iter, &data);
> + }
> +
> if (!filter || !rblist__empty(&groups)) {
> if (metricgroups && !raw)
> printf("\nMetric Groups:\n\n");
> --
> 2.26.2
>
--
- Arnaldo
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-12-07 17:24 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-04 11:10 [PATCH v6 00/10] perf pmu-events: Support event aliasing for system PMUs John Garry
2020-12-04 11:10 ` [PATCH v6 01/10] perf jevents: Add support for an extra directory level John Garry
2020-12-04 11:10 ` [PATCH v6 02/10] perf jevents: Add support for system events tables John Garry
2020-12-04 11:10 ` [PATCH v6 03/10] perf pmu: Add pmu_id() John Garry
2020-12-04 11:10 ` [PATCH v6 04/10] perf pmu: Add pmu_add_sys_aliases() John Garry
2020-12-04 11:10 ` [PATCH v6 05/10] perf evlist: Change perf_evlist__splice_list_tail() ordering John Garry
2020-12-04 11:10 ` [PATCH v6 06/10] perf metricgroup: Fix metrics using aliases covering multiple PMUs John Garry
2020-12-07 17:19 ` Arnaldo Carvalho de Melo
2020-12-07 18:02 ` John Garry
2020-12-04 11:10 ` [PATCH v6 07/10] perf metricgroup: Split up metricgroup__print() John Garry
2020-12-04 11:10 ` [PATCH v6 08/10] perf metricgroup: Support printing metric groups for system PMUs John Garry
2020-12-07 17:23 ` Arnaldo Carvalho de Melo [this message]
2020-12-07 18:04 ` John Garry
2020-12-04 11:10 ` [PATCH v6 09/10] perf metricgroup: Support adding metrics " John Garry
2020-12-04 11:10 ` [PATCH v6 10/10] perf vendor events: Add JSON metrics for imx8mm DDR Perf John Garry
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201207172319.GD129853@kernel.org \
--to=acme@kernel.org \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=irogers@google.com \
--cc=john.garry@huawei.com \
--cc=jolsa@redhat.com \
--cc=kan.liang@linux.intel.com \
--cc=kim.phillips@amd.com \
--cc=kjain@linux.ibm.com \
--cc=leo.yan@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxarm@huawei.com \
--cc=mark.rutland@arm.com \
--cc=mathieu.poirier@linaro.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=qiangqing.zhang@nxp.com \
--cc=will@kernel.org \
--cc=zhangshaokun@hisilicon.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).