From: Robin Murphy <robin.murphy@arm.com>
To: Jing Zhang <renyu.zj@linux.alibaba.com>,
John Garry <john.g.garry@oracle.com>,
Ian Rogers <irogers@google.com>
Cc: Will Deacon <will@kernel.org>, James Clark <james.clark@arm.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Mike Leach <mike.leach@linaro.org>, Leo Yan <leo.yan@linaro.org>,
Namhyung Kim <namhyung@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@kernel.org>,
Adrian Hunter <adrian.hunter@intel.com>,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-perf-users@vger.kernel.org, linux-doc@vger.kernel.org,
Zhuo Song <zhuo.song@linux.alibaba.com>,
Shuai Xue <xueshuai@linux.alibaba.com>
Subject: Re: [PATCH v7 4/8] perf jevents: Support more event fields
Date: Wed, 23 Aug 2023 10:12:40 +0100 [thread overview]
Message-ID: <166d2a93-0d86-b106-e996-d74fb4521aa2@arm.com> (raw)
In-Reply-To: <1692606977-92009-5-git-send-email-renyu.zj@linux.alibaba.com>
On 2023-08-21 09:36, Jing Zhang wrote:
> The previous code assumes an event has either an "event=" or "config"
> field at the beginning. For CMN neither of these may be present, as an
> event is typically "type=xx,eventid=xxx".
>
> If EventCode and ConfigCode is not added in the alias JSON file, the
> event description will add "event=0" by default. So, even if the event
> field is added "eventid=xxx" and "type=xxx", the CMN events final
> parsing result will be "event=0, eventid=xxx, type=xxx".
>
> Therefore, when EventCode and ConfigCode are missing in JSON, "event=0"
> is no longer added by default. And add EventIdCode and Type to the event
> field.
>
> I compared pmu_event.c before and after compiling with JEVENT_ARCH=all,
> they are consistent.
>
> Signed-off-by: Jing Zhang <renyu.zj@linux.alibaba.com>
> ---
> tools/perf/pmu-events/jevents.py | 20 ++++++++++++++++----
> 1 file changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/tools/perf/pmu-events/jevents.py b/tools/perf/pmu-events/jevents.py
> index f57a8f2..369c8bf 100755
> --- a/tools/perf/pmu-events/jevents.py
> +++ b/tools/perf/pmu-events/jevents.py
> @@ -275,11 +275,14 @@ class JsonEvent:
> }
> return table[unit] if unit in table else f'uncore_{unit.lower()}'
>
> - eventcode = 0
> + eventcode = None
> if 'EventCode' in jd:
> eventcode = int(jd['EventCode'].split(',', 1)[0], 0)
> if 'ExtSel' in jd:
> - eventcode |= int(jd['ExtSel']) << 8
> + if eventcode is None:
> + eventcode = int(jd['ExtSel']) << 8
> + else:
> + eventcode |= int(jd['ExtSel']) << 8
> configcode = int(jd['ConfigCode'], 0) if 'ConfigCode' in jd else None
> self.name = jd['EventName'].lower() if 'EventName' in jd else None
> self.topic = ''
> @@ -317,7 +320,11 @@ class JsonEvent:
> if precise and self.desc and '(Precise Event)' not in self.desc:
> extra_desc += ' (Must be precise)' if precise == '2' else (' (Precise '
> 'event)')
> - event = f'config={llx(configcode)}' if configcode is not None else f'event={llx(eventcode)}'
> + event = None
> + if eventcode is not None:
> + event = f'event={llx(eventcode)}'
> + elif configcode is not None:
> + event = f'config={llx(configcode)}'
> event_fields = [
> ('AnyThread', 'any='),
> ('PortMask', 'ch_mask='),
> @@ -327,10 +334,15 @@ class JsonEvent:
> ('Invert', 'inv='),
> ('SampleAfterValue', 'period='),
> ('UMask', 'umask='),
> + ('NodeType', 'type='),
> + ('EventIdCode', 'eventid='),
FWIW, this smells like another brewing scalability problem, given that
these are entirely driver-specific. Not sure off-hand how feasible it
might be, but my instinct says that a neat solution would be to encode
them right in the JSON, e.g.:
"FormatAttr": { "type": 0x5 }
such that jevents should then only really need to consider whether an
event is defined in terms of a raw "ConfigCode", one or more
"FormatAttr"s which it can then parse dynamically, or reasonable special
cases like "EventCode" (given how "event" is one of the most commonly
used formats).
Thanks,
Robin.
> ]
> for key, value in event_fields:
> if key in jd and jd[key] != '0':
> - event += ',' + value + jd[key]
> + if event:
> + event += ',' + value + jd[key]
> + else:
> + event = value + jd[key]
> if filter:
> event += f',{filter}'
> if msr:
next prev parent reply other threads:[~2023-08-23 9:29 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-21 8:36 [PATCH v7 0/8] perf vendor events: Add JSON metrics for Arm CMN Jing Zhang
2023-08-21 8:36 ` [PATCH v7 1/8] perf pmu: "Compat" supports matching multiple identifiers Jing Zhang
2023-08-24 15:05 ` Robin Murphy
2023-08-25 8:40 ` Jing Zhang
2023-08-25 4:11 ` Ian Rogers
2023-08-25 6:12 ` Jing Zhang
2023-08-21 8:36 ` [PATCH v7 2/8] perf metric: " Jing Zhang
2023-08-25 4:16 ` Ian Rogers
2023-08-21 8:36 ` [PATCH v7 3/8] perf vendor events: Supplement the omitted EventCode Jing Zhang
2023-08-25 4:24 ` Ian Rogers
2023-08-25 6:28 ` Jing Zhang
2023-08-21 8:36 ` [PATCH v7 4/8] perf jevents: Support more event fields Jing Zhang
2023-08-23 9:12 ` Robin Murphy [this message]
2023-08-25 4:42 ` Ian Rogers
2023-08-21 8:36 ` [PATCH v7 5/8] perf test: Make matching_pmu effective Jing Zhang
2023-08-25 4:27 ` Ian Rogers
2023-08-25 6:30 ` Jing Zhang
2023-08-21 8:36 ` [PATCH v7 6/8] perf test: Add pmu-event test for "Compat" and new event_field Jing Zhang
2023-08-25 4:30 ` Ian Rogers
2023-08-25 6:30 ` Jing Zhang
2023-08-21 8:36 ` [PATCH v7 7/8] perf jevents: Add support for Arm CMN PMU aliasing Jing Zhang
2023-08-23 9:33 ` Robin Murphy
2023-08-24 2:12 ` Jing Zhang
2023-08-21 8:36 ` [PATCH v7 8/8] perf vendor events: Add JSON metrics for Arm CMN Jing Zhang
2023-08-25 4:13 ` Ian Rogers
2023-08-25 6:47 ` Jing Zhang
2023-08-23 8:12 ` [PATCH v7 0/8] " John Garry
2023-08-24 2:33 ` Jing Zhang
2023-09-06 16:05 ` Arnaldo Carvalho de Melo
2023-09-07 2:42 ` Jing Zhang
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=166d2a93-0d86-b106-e996-d74fb4521aa2@arm.com \
--to=robin.murphy@arm.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=irogers@google.com \
--cc=james.clark@arm.com \
--cc=john.g.garry@oracle.com \
--cc=jolsa@kernel.org \
--cc=leo.yan@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mike.leach@linaro.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=renyu.zj@linux.alibaba.com \
--cc=will@kernel.org \
--cc=xueshuai@linux.alibaba.com \
--cc=zhuo.song@linux.alibaba.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
all inboxes | Powered by JetHome®