From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-14.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A929FC433FE for ; Mon, 7 Dec 2020 17:24:18 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6252F23731 for ; Mon, 7 Dec 2020 17:24:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6252F23731 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=mML2h2006zNQ0cWKOGdk5cVytvd45E1KSEpsHcghets=; b=helLwY3Ib7ipxtZDaG/xTuQ4z pHXTFRqCZgKESvKDGhb6r+BTE4dqAFme6iBGVqEq3kIrgmeUqXKJa4pBqP+3QDSiHD/fl05ke/uiC yg1fWiPnWBdFL3a01KACcYfjIOpaXtWgzbsHjR0BMiSUbDq3dhYcEGDYkVXheM31Cmvt6o+WdvgfO eAuwn4dnBC+wD3XLZOEI68VovFmHRXYKjmCyVaw6oi9pGf0/2Zlfn9eSIvB4vSxj3m2tXLpR1fNNz AXLFMi7l7J297NNhJuENdFshPKy72V/FMvUQc9TEev3e/M6CB0vCoKxAKAb3vsOJDDV01eUD2hYmT GDbA+lyrQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kmKEC-0001Kl-Sn; Mon, 07 Dec 2020 17:23:12 +0000 Received: from [179.97.37.151] (helo=quaco.ghostprotocols.net) by merlin.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1kmKEB-0001KF-A3; Mon, 07 Dec 2020 17:23:11 +0000 Received: by quaco.ghostprotocols.net (Postfix, from userid 1000) id EDEF84079D; Mon, 7 Dec 2020 14:23:19 -0300 (-03) Date: Mon, 7 Dec 2020 14:23:19 -0300 From: Arnaldo Carvalho de Melo To: John Garry Subject: Re: [PATCH v6 08/10] perf metricgroup: Support printing metric groups for system PMUs Message-ID: <20201207172319.GD129853@kernel.org> References: <1607080216-36968-1-git-send-email-john.garry@huawei.com> <1607080216-36968-9-git-send-email-john.garry@huawei.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1607080216-36968-9-git-send-email-john.garry@huawei.com> X-Url: http://acmel.wordpress.com X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org 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 > Acked-by: Kajol Jain > --- > 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