From nobody Tue Sep 9 22:46:27 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 84F60C0015E for ; Fri, 28 Jul 2023 06:17:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233496AbjG1GRp (ORCPT ); Fri, 28 Jul 2023 02:17:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42866 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233418AbjG1GRh (ORCPT ); Fri, 28 Jul 2023 02:17:37 -0400 Received: from out30-112.freemail.mail.aliyun.com (out30-112.freemail.mail.aliyun.com [115.124.30.112]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 13230272C; Thu, 27 Jul 2023 23:17:34 -0700 (PDT) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R171e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018045176;MF=renyu.zj@linux.alibaba.com;NM=1;PH=DS;RN=15;SR=0;TI=SMTPD_---0VoOxEHt_1690525049; Received: from srmbuffer011165236051.sqa.net(mailfrom:renyu.zj@linux.alibaba.com fp:SMTPD_---0VoOxEHt_1690525049) by smtp.aliyun-inc.com; Fri, 28 Jul 2023 14:17:30 +0800 From: Jing Zhang To: John Garry , Ian Rogers Cc: Will Deacon , Mark Rutland , Robin Murphy , Ilkka Koskinen , Namhyung Kim , Arnaldo Carvalho de Melo , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org, linux-doc@vger.kernel.org, Zhuo Song , Jing Zhang , Shuai Xue Subject: [PATCH v5 1/5] perf metric: Event "Compat" value supports matching multiple identifiers Date: Fri, 28 Jul 2023 14:17:16 +0800 Message-Id: <1690525040-77423-2-git-send-email-renyu.zj@linux.alibaba.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1690525040-77423-1-git-send-email-renyu.zj@linux.alibaba.com> References: <1690525040-77423-1-git-send-email-renyu.zj@linux.alibaba.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The jevent "Compat" is used for uncore PMU alias or metric definitions. The same PMU driver has different PMU identifiers due to different hardware versions and types, but they may have some common PMU event/metric. Since a Compat value can only match one identifier, when adding the same event alias and metric to PMUs with different identifiers, each identifier needs to be defined once, which is not streamlined enough. So let "Compat" value supports matching multiple identifiers. For example, the Compat value {abcde;123*} can match the PMU identifier "abcde" and the the PMU identifier with the prefix "123", where "*" is a wildcard. Tokens in Unit field are delimited by ';' with no spaces. Signed-off-by: Jing Zhang --- tools/perf/util/metricgroup.c | 2 +- tools/perf/util/pmu.c | 27 ++++++++++++++++++++++++++- tools/perf/util/pmu.h | 1 + 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c index 5e9c657..ff81bc5 100644 --- a/tools/perf/util/metricgroup.c +++ b/tools/perf/util/metricgroup.c @@ -477,7 +477,7 @@ static int metricgroup__sys_event_iter(const struct pmu= _metric *pm, =20 while ((pmu =3D perf_pmu__scan(pmu))) { =20 - if (!pmu->id || strcmp(pmu->id, pm->compat)) + if (!pmu->id || !pmu_uncore_identifier_match(pmu->id, pm->compat)) continue; =20 return d->fn(pm, table, d->data); diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index ad209c8..3ae249b 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -776,6 +776,31 @@ static bool pmu_uncore_alias_match(const char *pmu_nam= e, const char *name) return res; } =20 +bool pmu_uncore_identifier_match(const char *id, const char *compat) +{ + char *tmp =3D NULL, *tok, *str; + bool res; + int n; + + str =3D strdup(compat); + if (!str) + return false; + + tok =3D strtok_r(str, ";", &tmp); + for (; tok; tok =3D strtok_r(NULL, ";", &tmp)) { + n =3D strlen(tok); + if ((tok[n - 1] =3D=3D '*' && !strncmp(id, tok, n - 1)) || + !strcmp(id, tok)) { + res =3D true; + goto out; + } + } + res =3D false; +out: + free(str); + return res; +} + struct pmu_add_cpu_aliases_map_data { struct list_head *head; const char *name; @@ -847,7 +872,7 @@ static int pmu_add_sys_aliases_iter_fn(const struct pmu= _event *pe, if (!pe->compat || !pe->pmu) return 0; =20 - if (!strcmp(pmu->id, pe->compat) && + if (pmu_uncore_identifier_match(pmu->id, pe->compat) && pmu_uncore_alias_match(pe->pmu, pmu->name)) { __perf_pmu__new_alias(idata->head, -1, (char *)pe->name, diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h index b9a02de..9d4385d 100644 --- a/tools/perf/util/pmu.h +++ b/tools/perf/util/pmu.h @@ -241,6 +241,7 @@ void pmu_add_cpu_aliases_table(struct list_head *head, = struct perf_pmu *pmu, char *perf_pmu__getcpuid(struct perf_pmu *pmu); const struct pmu_events_table *pmu_events_table__find(void); const struct pmu_metrics_table *pmu_metrics_table__find(void); +bool pmu_uncore_identifier_match(const char *id, const char *compat); void perf_pmu_free_alias(struct perf_pmu_alias *alias); =20 int perf_pmu__convert_scale(const char *scale, char **end, double *sval); --=20 1.8.3.1 From nobody Tue Sep 9 22:46:27 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D9D42C04FE1 for ; Fri, 28 Jul 2023 06:17:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233466AbjG1GRl (ORCPT ); Fri, 28 Jul 2023 02:17:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42864 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233395AbjG1GRg (ORCPT ); Fri, 28 Jul 2023 02:17:36 -0400 Received: from out30-132.freemail.mail.aliyun.com (out30-132.freemail.mail.aliyun.com [115.124.30.132]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 14BE8272D; Thu, 27 Jul 2023 23:17:34 -0700 (PDT) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R281e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018046056;MF=renyu.zj@linux.alibaba.com;NM=1;PH=DS;RN=15;SR=0;TI=SMTPD_---0VoOxEIG_1690525050; Received: from srmbuffer011165236051.sqa.net(mailfrom:renyu.zj@linux.alibaba.com fp:SMTPD_---0VoOxEIG_1690525050) by smtp.aliyun-inc.com; Fri, 28 Jul 2023 14:17:30 +0800 From: Jing Zhang To: John Garry , Ian Rogers Cc: Will Deacon , Mark Rutland , Robin Murphy , Ilkka Koskinen , Namhyung Kim , Arnaldo Carvalho de Melo , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org, linux-doc@vger.kernel.org, Zhuo Song , Jing Zhang , Shuai Xue Subject: [PATCH v5 2/5] perf jevents: Support more event fields Date: Fri, 28 Jul 2023 14:17:17 +0800 Message-Id: <1690525040-77423-3-git-send-email-renyu.zj@linux.alibaba.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1690525040-77423-1-git-send-email-renyu.zj@linux.alibaba.com> References: <1690525040-77423-1-git-send-email-renyu.zj@linux.alibaba.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The usual event descriptions are "event=3Dxxx" or "config=3Dxxx", while the event descriptions of CMN are "type=3Dxxx, eventid=3Dxxx" or more complex. $cat /sys/bus/event_source/devices/arm_cmn_0/events/hnf_cache_fill type=3D0x5,eventid=3D0x3 When adding aliases for events described as "event=3Dxxx" or "config=3Dxxx", EventCode or ConfigCode can be used in the JSON files to describe the events. But "eventid=3Dxxx, type=3Dxxx" cannot be supported at present. If EventCode and ConfigCode is not added in the alias JSON file, the event description will add "event=3D0" by default. So, even if the event field is added to supplement "eventid=3Dxxx" and "type=3Dxxx", the final parsing result will be "event=3D0, eventid=3Dxxx, type=3Dxxx". Therefore, when EventCode and ConfigCode are missing in JSON, "event=3D0" is no longer added by default. EventIdCode and Type are added to the event field, and ConfigCode is moved into the event_field array which can also guarantee its original function. Signed-off-by: Jing Zhang --- tools/perf/pmu-events/jevents.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/tools/perf/pmu-events/jevents.py b/tools/perf/pmu-events/jeven= ts.py index f57a8f2..9c0f63a 100755 --- a/tools/perf/pmu-events/jevents.py +++ b/tools/perf/pmu-events/jevents.py @@ -275,12 +275,6 @@ class JsonEvent: } return table[unit] if unit in table else f'uncore_{unit.lower()}' =20 - eventcode =3D 0 - if 'EventCode' in jd: - eventcode =3D int(jd['EventCode'].split(',', 1)[0], 0) - if 'ExtSel' in jd: - eventcode |=3D int(jd['ExtSel']) << 8 - configcode =3D int(jd['ConfigCode'], 0) if 'ConfigCode' in jd else None self.name =3D jd['EventName'].lower() if 'EventName' in jd else None self.topic =3D '' self.compat =3D jd.get('Compat') @@ -317,7 +311,15 @@ class JsonEvent: if precise and self.desc and '(Precise Event)' not in self.desc: extra_desc +=3D ' (Must be precise)' if precise =3D=3D '2' else (' (= Precise ' 'event)') - event =3D f'config=3D{llx(configcode)}' if configcode is not None else= f'event=3D{llx(eventcode)}' + eventcode =3D None + if 'EventCode' in jd: + eventcode =3D int(jd['EventCode'].split(',', 1)[0], 0) + if 'ExtSel' in jd: + if eventcode is None: + eventcode =3D int(jd['ExtSel']) << 8 + else: + eventcode |=3D int(jd['ExtSel']) << 8 + event =3D f'event=3D{llx(eventcode)}' if eventcode is not None else No= ne event_fields =3D [ ('AnyThread', 'any=3D'), ('PortMask', 'ch_mask=3D'), @@ -327,10 +329,13 @@ class JsonEvent: ('Invert', 'inv=3D'), ('SampleAfterValue', 'period=3D'), ('UMask', 'umask=3D'), + ('ConfigCode', 'config=3D'), + ('Type', 'type=3D'), + ('EventIdCode', 'eventid=3D'), ] for key, value in event_fields: if key in jd and jd[key] !=3D '0': - event +=3D ',' + value + jd[key] + event =3D event + ',' + value + jd[key] if event is not None else = value + jd[key] if filter: event +=3D f',{filter}' if msr: --=20 1.8.3.1 From nobody Tue Sep 9 22:46:27 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id BDB7DC0015E for ; Fri, 28 Jul 2023 06:17:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233418AbjG1GRw (ORCPT ); Fri, 28 Jul 2023 02:17:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42876 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233437AbjG1GRi (ORCPT ); Fri, 28 Jul 2023 02:17:38 -0400 Received: from out30-124.freemail.mail.aliyun.com (out30-124.freemail.mail.aliyun.com [115.124.30.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8A8351FF5; Thu, 27 Jul 2023 23:17:36 -0700 (PDT) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R791e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018045192;MF=renyu.zj@linux.alibaba.com;NM=1;PH=DS;RN=15;SR=0;TI=SMTPD_---0VoOxEIp_1690525051; Received: from srmbuffer011165236051.sqa.net(mailfrom:renyu.zj@linux.alibaba.com fp:SMTPD_---0VoOxEIp_1690525051) by smtp.aliyun-inc.com; Fri, 28 Jul 2023 14:17:31 +0800 From: Jing Zhang To: John Garry , Ian Rogers Cc: Will Deacon , Mark Rutland , Robin Murphy , Ilkka Koskinen , Namhyung Kim , Arnaldo Carvalho de Melo , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org, linux-doc@vger.kernel.org, Zhuo Song , Jing Zhang , Shuai Xue Subject: [PATCH v5 3/5] perf test: Add pmu-event test for "Compat" and new event_field. Date: Fri, 28 Jul 2023 14:17:18 +0800 Message-Id: <1690525040-77423-4-git-send-email-renyu.zj@linux.alibaba.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1690525040-77423-1-git-send-email-renyu.zj@linux.alibaba.com> References: <1690525040-77423-1-git-send-email-renyu.zj@linux.alibaba.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add new event test for uncore system event which is used to verify the functionality of "Compat" matching multiple identifiers and the new event fields "EventIdCode" and "Type". Signed-off-by: Jing Zhang --- .../pmu-events/arch/test/test_soc/sys/uncore.json | 8 ++++ tools/perf/tests/pmu-events.c | 55 ++++++++++++++++++= ++++ 2 files changed, 63 insertions(+) diff --git a/tools/perf/pmu-events/arch/test/test_soc/sys/uncore.json b/too= ls/perf/pmu-events/arch/test/test_soc/sys/uncore.json index c7e7528..879a0ae 100644 --- a/tools/perf/pmu-events/arch/test/test_soc/sys/uncore.json +++ b/tools/perf/pmu-events/arch/test/test_soc/sys/uncore.json @@ -12,5 +12,13 @@ "EventName": "sys_ccn_pmu.read_cycles", "Unit": "sys_ccn_pmu", "Compat": "0x01" + }, + { + "BriefDescription": "Counts total cache misses in first lookup = result (high priority).", + "Type": "0x05", + "EventIdCode": "0x01", + "EventName": "sys_cmn_pmu.hnf_cache_miss", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a01" } ] diff --git a/tools/perf/tests/pmu-events.c b/tools/perf/tests/pmu-events.c index 1dff863b..e227dcd 100644 --- a/tools/perf/tests/pmu-events.c +++ b/tools/perf/tests/pmu-events.c @@ -255,9 +255,24 @@ struct perf_pmu_test_pmu { .matching_pmu =3D "uncore_sys_ccn_pmu", }; =20 +static const struct perf_pmu_test_event sys_cmn_pmu_hnf_cache_miss =3D { + .event =3D { + .name =3D "sys_cmn_pmu.hnf_cache_miss", + .event =3D "type=3D0x05,eventid=3D0x01", + .desc =3D "Counts total cache misses in first lookup result (high priori= ty). Unit: uncore_arm_cmn ", + .topic =3D "uncore", + .pmu =3D "uncore_arm_cmn", + .compat =3D "434*;436*;43c*;43a01", + }, + .alias_str =3D "type=3D0x5,eventid=3D0x1", + .alias_long_desc =3D "Counts total cache misses in first lookup result (h= igh priority). Unit: uncore_arm_cmn ", + .matching_pmu =3D "uncore_arm_cmn_0", +}; + static const struct perf_pmu_test_event *sys_events[] =3D { &sys_ddr_pmu_write_cycles, &sys_ccn_pmu_read_cycles, + &sys_cmn_pmu_hnf_cache_miss, NULL }; =20 @@ -699,6 +714,46 @@ static int __test_uncore_pmu_event_aliases(struct perf= _pmu_test_pmu *test_pmu) &sys_ccn_pmu_read_cycles, }, }, + { + .pmu =3D { + .name =3D (char *)"uncore_arm_cmn_0", + .is_uncore =3D 1, + .id =3D (char *)"43401", + }, + .aliases =3D { + &sys_cmn_pmu_hnf_cache_miss, + }, + }, + { + .pmu =3D { + .name =3D (char *)"uncore_arm_cmn_0", + .is_uncore =3D 1, + .id =3D (char *)"43602", + }, + .aliases =3D { + &sys_cmn_pmu_hnf_cache_miss, + }, + }, + { + .pmu =3D { + .name =3D (char *)"uncore_arm_cmn_1", + .is_uncore =3D 1, + .id =3D (char *)"43c03", + }, + .aliases =3D { + &sys_cmn_pmu_hnf_cache_miss, + }, + }, + { + .pmu =3D { + .name =3D (char *)"uncore_arm_cmn_1", + .is_uncore =3D 1, + .id =3D (char *)"43a01", + }, + .aliases =3D { + &sys_cmn_pmu_hnf_cache_miss, + }, + } }; =20 /* Test that aliases generated are as expected */ --=20 1.8.3.1 From nobody Tue Sep 9 22:46:27 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 06927C001DF for ; Fri, 28 Jul 2023 06:18:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233486AbjG1GRy (ORCPT ); Fri, 28 Jul 2023 02:17:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42888 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233453AbjG1GRk (ORCPT ); Fri, 28 Jul 2023 02:17:40 -0400 Received: from out30-119.freemail.mail.aliyun.com (out30-119.freemail.mail.aliyun.com [115.124.30.119]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CDEB9272D; Thu, 27 Jul 2023 23:17:37 -0700 (PDT) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R151e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018046051;MF=renyu.zj@linux.alibaba.com;NM=1;PH=DS;RN=15;SR=0;TI=SMTPD_---0VoOxEJI_1690525052; Received: from srmbuffer011165236051.sqa.net(mailfrom:renyu.zj@linux.alibaba.com fp:SMTPD_---0VoOxEJI_1690525052) by smtp.aliyun-inc.com; Fri, 28 Jul 2023 14:17:32 +0800 From: Jing Zhang To: John Garry , Ian Rogers Cc: Will Deacon , Mark Rutland , Robin Murphy , Ilkka Koskinen , Namhyung Kim , Arnaldo Carvalho de Melo , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org, linux-doc@vger.kernel.org, Zhuo Song , Jing Zhang , Shuai Xue Subject: [PATCH v5 4/5] perf jevents: Add support for Arm CMN PMU aliasing Date: Fri, 28 Jul 2023 14:17:19 +0800 Message-Id: <1690525040-77423-5-git-send-email-renyu.zj@linux.alibaba.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1690525040-77423-1-git-send-email-renyu.zj@linux.alibaba.com> References: <1690525040-77423-1-git-send-email-renyu.zj@linux.alibaba.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently just add aliases for part of Arm CMN PMU events which are general and compatible for any SoC and CMN-ANY. "Compat" value "434*;436*;43c*;43a*" means it is compatible with all CMN600/CMN650/CMN700/Ci700. Signed-off-by: Jing Zhang Reviewed-by: John Garry --- .../pmu-events/arch/arm64/arm/cmn/sys/cmn.json | 266 +++++++++++++++++= ++++ tools/perf/pmu-events/jevents.py | 1 + 2 files changed, 267 insertions(+) create mode 100644 tools/perf/pmu-events/arch/arm64/arm/cmn/sys/cmn.json diff --git a/tools/perf/pmu-events/arch/arm64/arm/cmn/sys/cmn.json b/tools/= perf/pmu-events/arch/arm64/arm/cmn/sys/cmn.json new file mode 100644 index 0000000..e54036c --- /dev/null +++ b/tools/perf/pmu-events/arch/arm64/arm/cmn/sys/cmn.json @@ -0,0 +1,266 @@ +[ + { + "EventName": "hnf_cache_miss", + "EventIdCode": "0x1", + "Type": "0x5", + "BriefDescription": "Counts total cache misses in first lookup result (h= igh priority).", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "hnf_slc_sf_cache_access", + "EventIdCode": "0x2", + "Type": "0x5", + "BriefDescription": "Counts number of cache accesses in first access (hi= gh priority).", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "hnf_cache_fill", + "EventIdCode": "0x3", + "Type": "0x5", + "BriefDescription": "Counts total allocations in HN SLC (all cache line = allocations to SLC).", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "hnf_pocq_retry", + "EventIdCode": "0x4", + "Type": "0x5", + "BriefDescription": "Counts number of retried requests.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "hnf_pocq_reqs_recvd", + "EventIdCode": "0x5", + "Type": "0x5", + "BriefDescription": "Counts number of requests that HN receives.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "hnf_sf_hit", + "EventIdCode": "0x6", + "Type": "0x5", + "BriefDescription": "Counts number of SF hits.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "hnf_sf_evictions", + "EventIdCode": "0x7", + "Type": "0x5", + "BriefDescription": "Counts number of SF eviction cache invalidations in= itiated.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "hnf_dir_snoops_sent", + "EventIdCode": "0x8", + "Type": "0x5", + "BriefDescription": "Counts number of directed snoops sent (not includin= g SF back invalidation).", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "hnf_brd_snoops_sent", + "EventIdCode": "0x9", + "Type": "0x5", + "BriefDescription": "Counts number of multicast snoops sent (not includi= ng SF back invalidation).", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "hnf_slc_eviction", + "EventIdCode": "0xa", + "Type": "0x5", + "BriefDescription": "Counts number of SLC evictions (dirty only).", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "hnf_slc_fill_invalid_way", + "EventIdCode": "0xb", + "Type": "0x5", + "BriefDescription": "Counts number of SLC fills to an invalid way.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "hnf_mc_retries", + "EventIdCode": "0xc", + "Type": "0x5", + "BriefDescription": "Counts number of retried transactions by the MC.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "hnf_mc_reqs", + "EventIdCode": "0xd", + "Type": "0x5", + "BriefDescription": "Counts number of requests that are sent to MC.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "hnf_qos_hh_retry", + "EventIdCode": "0xe", + "Type": "0x5", + "BriefDescription": "Counts number of times a HighHigh priority request = is protocolretried at the HN=E2=80=91F.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "rnid_s0_rdata_beats", + "EventIdCode": "0x1", + "Type": "0xa", + "BriefDescription": "Number of RData beats (RVALID and RREADY) dispatche= d on port 0. This event measures the read bandwidth, including CMO response= s.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "rnid_s1_rdata_beats", + "EventIdCode": "0x2", + "Type": "0xa", + "BriefDescription": "Number of RData beats (RVALID and RREADY) dispatche= d on port 1. This event measures the read bandwidth, including CMO response= s.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "rnid_s2_rdata_beats", + "EventIdCode": "0x3", + "Type": "0xa", + "BriefDescription": "Number of RData beats (RVALID and RREADY) dispatche= d on port 2. This event measures the read bandwidth, including CMO response= s.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "rnid_rxdat_flits", + "EventIdCode": "0x4", + "Type": "0xa", + "BriefDescription": "Number of RXDAT flits received. This event measures= the true read data bandwidth, excluding CMOs.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "rnid_txdat_flits", + "EventIdCode": "0x5", + "Type": "0xa", + "BriefDescription": "Number of TXDAT flits dispatched. This event measur= es the write bandwidth.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "rnid_txreq_flits_total", + "EventIdCode": "0x6", + "Type": "0xa", + "BriefDescription": "Number of TXREQ flits dispatched. This event measur= es the total request bandwidth.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "rnid_txreq_flits_retried", + "EventIdCode": "0x7", + "Type": "0xa", + "BriefDescription": "Number of retried TXREQ flits dispatched. This even= t measures the retry rate.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "sbsx_txrsp_retryack", + "EventIdCode": "0x4", + "Type": "0x7", + "BriefDescription": "Number of RXREQ flits dispatched. This event is a m= easure of the retry rate.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "sbsx_txdat_flitv", + "EventIdCode": "0x5", + "Type": "0x7", + "BriefDescription": "Number of TXDAT flits dispatched from XP to SBSX. T= his event is a measure of the write bandwidth.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "sbsx_arvalid_no_arready", + "EventIdCode": "0x21", + "Type": "0x7", + "BriefDescription": "Number of cycles the SBSX bridge is stalled because= of backpressure on AR channel.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "sbsx_awvalid_no_awready", + "EventIdCode": "0x22", + "Type": "0x7", + "BriefDescription": "Number of cycles the SBSX bridge is stalled because= of backpressure on AW channel.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "sbsx_wvalid_no_wready", + "EventIdCode": "0x23", + "Type": "0x7", + "BriefDescription": "Number of cycles the SBSX bridge is stalled because= of backpressure on W channel.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "hni_txrsp_retryack", + "EventIdCode": "0x2a", + "Type": "0x4", + "BriefDescription": "Number of RXREQ flits dispatched. This event is a m= easure of the retry rate.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "hni_arvalid_no_arready", + "EventIdCode": "0x2b", + "Type": "0x4", + "BriefDescription": "Number of cycles the HN-I bridge is stalled because= of backpressure on AR channel.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "hni_arready_no_arvalid", + "EventIdCode": "0x2c", + "Type": "0x4", + "BriefDescription": "Number of cycles the AR channel is waiting for new = requests from HN-I bridge.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "hni_awvalid_no_awready", + "EventIdCode": "0x2d", + "Type": "0x4", + "BriefDescription": "Number of cycles the HN-I bridge is stalled because= of backpressure on AW channel.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "hni_awready_no_awvalid", + "EventIdCode": "0x2e", + "Type": "0x4", + "BriefDescription": "Number of cycles the AW channel is waiting for new = requests from HN-I bridge.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "hni_wvalid_no_wready", + "EventIdCode": "0x2f", + "Type": "0x4", + "BriefDescription": "Number of cycles the HN-I bridge is stalled because= of backpressure on W channel.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "EventName": "hni_txdat_stall", + "EventIdCode": "0x30", + "Type": "0x4", + "BriefDescription": "TXDAT valid but no link credit available.", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + } +] diff --git a/tools/perf/pmu-events/jevents.py b/tools/perf/pmu-events/jeven= ts.py index 9c0f63a..bfdfb67 100755 --- a/tools/perf/pmu-events/jevents.py +++ b/tools/perf/pmu-events/jevents.py @@ -272,6 +272,7 @@ class JsonEvent: 'DFPMC': 'amd_df', 'cpu_core': 'cpu_core', 'cpu_atom': 'cpu_atom', + 'arm_cmn': 'arm_cmn', } return table[unit] if unit in table else f'uncore_{unit.lower()}' =20 --=20 1.8.3.1 From nobody Tue Sep 9 22:46:27 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5F2FFC0015E for ; Fri, 28 Jul 2023 06:17:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233492AbjG1GRu (ORCPT ); Fri, 28 Jul 2023 02:17:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42878 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232575AbjG1GRi (ORCPT ); Fri, 28 Jul 2023 02:17:38 -0400 Received: from out30-132.freemail.mail.aliyun.com (out30-132.freemail.mail.aliyun.com [115.124.30.132]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EF323273D; Thu, 27 Jul 2023 23:17:36 -0700 (PDT) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R111e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018045170;MF=renyu.zj@linux.alibaba.com;NM=1;PH=DS;RN=15;SR=0;TI=SMTPD_---0VoOxEJY_1690525052; Received: from srmbuffer011165236051.sqa.net(mailfrom:renyu.zj@linux.alibaba.com fp:SMTPD_---0VoOxEJY_1690525052) by smtp.aliyun-inc.com; Fri, 28 Jul 2023 14:17:33 +0800 From: Jing Zhang To: John Garry , Ian Rogers Cc: Will Deacon , Mark Rutland , Robin Murphy , Ilkka Koskinen , Namhyung Kim , Arnaldo Carvalho de Melo , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org, linux-doc@vger.kernel.org, Zhuo Song , Jing Zhang , Shuai Xue Subject: [PATCH v5 5/5] perf vendor events: Add JSON metrics for Arm CMN Date: Fri, 28 Jul 2023 14:17:20 +0800 Message-Id: <1690525040-77423-6-git-send-email-renyu.zj@linux.alibaba.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1690525040-77423-1-git-send-email-renyu.zj@linux.alibaba.com> References: <1690525040-77423-1-git-send-email-renyu.zj@linux.alibaba.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add JSON metrics for Arm CMN. Currently just add part of CMN PMU metrics which are general and compatible for any SoC with CMN-ANY. Signed-off-by: Jing Zhang Reviewed-by: John Garry --- .../pmu-events/arch/arm64/arm/cmn/sys/metric.json | 74 ++++++++++++++++++= ++++ 1 file changed, 74 insertions(+) create mode 100644 tools/perf/pmu-events/arch/arm64/arm/cmn/sys/metric.json diff --git a/tools/perf/pmu-events/arch/arm64/arm/cmn/sys/metric.json b/too= ls/perf/pmu-events/arch/arm64/arm/cmn/sys/metric.json new file mode 100644 index 0000000..64db534 --- /dev/null +++ b/tools/perf/pmu-events/arch/arm64/arm/cmn/sys/metric.json @@ -0,0 +1,74 @@ +[ + { + "MetricName": "slc_miss_rate", + "BriefDescription": "The system level cache miss rate.", + "MetricGroup": "cmn", + "MetricExpr": "hnf_cache_miss / hnf_slc_sf_cache_access", + "ScaleUnit": "100%", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "MetricName": "hnf_message_retry_rate", + "BriefDescription": "HN-F message retry rate indicates whether a lack of= credits is causing the bottlenecks.", + "MetricGroup": "cmn", + "MetricExpr": "hnf_pocq_retry / hnf_pocq_reqs_recvd", + "ScaleUnit": "100%", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "MetricName": "sf_hit_rate", + "BriefDescription": "Snoop filter hit rate can be used to measure the sn= oop filter efficiency.", + "MetricGroup": "cmn", + "MetricExpr": "hnf_sf_hit / hnf_slc_sf_cache_access", + "ScaleUnit": "100%", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "MetricName": "mc_message_retry_rate", + "BriefDescription": "The memory controller request retries rate indicate= s whether the memory controller is the bottleneck.", + "MetricGroup": "cmn", + "MetricExpr": "hnf_mc_retries / hnf_mc_reqs", + "ScaleUnit": "100%", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "MetricName": "rni_actual_read_bandwidth.all", + "BriefDescription": "This event measure the actual bandwidth that RN-I b= ridge sends to the interconnect.", + "MetricGroup": "cmn", + "MetricExpr": "rnid_rxdat_flits * 32 / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "MetricName": "rni_actual_write_bandwidth.all", + "BriefDescription": "This event measures the actual write bandwidth at R= N-I bridges.", + "MetricGroup": "cmn", + "MetricExpr": "rnid_txdat_flits * 32 / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "MetricName": "rni_retry_rate", + "BriefDescription": "RN-I bridge retry rate indicates whether the memory= controller is the bottleneck.", + "MetricGroup": "cmn", + "MetricExpr": "rnid_txreq_flits_retried / rnid_txreq_flits_total", + "ScaleUnit": "100%", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + }, + { + "MetricName": "sbsx_actual_write_bandwidth.all", + "BriefDescription": "sbsx actual write bandwidth.", + "MetricGroup": "cmn", + "MetricExpr": "sbsx_txdat_flitv * 32 / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "Unit": "arm_cmn", + "Compat": "434*;436*;43c*;43a*" + } +] --=20 1.8.3.1