2023-07-23 09:13:38

by Jing Zhang

[permalink] [raw]
Subject: [PATCH v4 2/4] perf jevents: Support more event fields

The usual event descriptions are "event=xxx" or "config=xxx", while the
event descriptions of CMN are "type=xxx, eventid=xxx" or more complex.

$cat /sys/bus/event_source/devices/arm_cmn_0/events/hnf_cache_fill
type=0x5,eventid=0x3

When adding aliases for events described as "event=xxx" or "config=xxx",
EventCode or ConfigCode can be used in the JSON files to describe the
events. But "eventid=xxx, type=xxx" cannot be supported at present.

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 to supplement "eventid=xxx" and "type=xxx", the 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. EventidCode and Type are added to the event
field, and ConfigCode is moved into the event field.

Signed-off-by: Jing Zhang <[email protected]>
---
tools/perf/pmu-events/jevents.py | 22 ++++++++++++++--------
1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/tools/perf/pmu-events/jevents.py b/tools/perf/pmu-events/jevents.py
index 2bcd07c..79c3cfa 100755
--- a/tools/perf/pmu-events/jevents.py
+++ b/tools/perf/pmu-events/jevents.py
@@ -259,12 +259,6 @@ class JsonEvent:
}
return table[unit] if unit in table else f'uncore_{unit.lower()}'

- eventcode = 0
- if 'EventCode' in jd:
- eventcode = int(jd['EventCode'].split(',', 1)[0], 0)
- if 'ExtSel' in jd:
- 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 = ''
self.compat = jd.get('Compat')
@@ -297,7 +291,15 @@ 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)}'
+ eventcode = None
+ if 'EventCode' in jd:
+ eventcode = int(jd['EventCode'].split(',', 1)[0], 0)
+ if 'ExtSel' in jd:
+ if eventcode is None:
+ eventcode = int(jd['ExtSel']) << 8
+ else:
+ eventcode |= int(jd['ExtSel']) << 8
+ event = f'event={llx(eventcode)}' if eventcode is not None else None
event_fields = [
('AnyThread', 'any='),
('PortMask', 'ch_mask='),
@@ -307,10 +309,14 @@ class JsonEvent:
('Invert', 'inv='),
('SampleAfterValue', 'period='),
('UMask', 'umask='),
+ ('ConfigCode', 'config='),
+ ('EventIdCode', 'eventid='),
+ ('Type', 'type='),
+ ('OccupId', 'occupid='),
]
for key, value in event_fields:
if key in jd and jd[key] != '0':
- event += ',' + value + jd[key]
+ event = event + ',' + value + jd[key] if event is not None else value + jd[key]
if filter:
event += f',{filter}'
if msr:
--
1.8.3.1



2023-07-25 10:50:21

by John Garry

[permalink] [raw]
Subject: Re: [PATCH v4 2/4] perf jevents: Support more event fields

On 23/07/2023 09:21, Jing Zhang wrote:
> The usual event descriptions are "event=xxx" or "config=xxx", while the
> event descriptions of CMN are "type=xxx, eventid=xxx" or more complex.
>
> $cat /sys/bus/event_source/devices/arm_cmn_0/events/hnf_cache_fill
> type=0x5,eventid=0x3
>
> When adding aliases for events described as "event=xxx" or "config=xxx",
> EventCode or ConfigCode can be used in the JSON files to describe the
> events. But "eventid=xxx, type=xxx" cannot be supported at present.
>
> 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 to supplement "eventid=xxx" and "type=xxx", the 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. EventidCode and Type are added to the event
> field, and ConfigCode is moved into the event field.

What does "ConfigCode is moved into the event field" mean?

>

There should be perf tool self-tests cases for this, see
tests/pmu-events.c and tests/parse-events.c, like "umask" is tested

> Signed-off-by: Jing Zhang <[email protected]>
> ---
> tools/perf/pmu-events/jevents.py | 22 ++++++++++++++--------
> 1 file changed, 14 insertions(+), 8 deletions(-)
>
> diff --git a/tools/perf/pmu-events/jevents.py b/tools/perf/pmu-events/jevents.py
> index 2bcd07c..79c3cfa 100755
> --- a/tools/perf/pmu-events/jevents.py
> +++ b/tools/perf/pmu-events/jevents.py
> @@ -259,12 +259,6 @@ class JsonEvent:
> }
> return table[unit] if unit in table else f'uncore_{unit.lower()}'


2023-07-26 06:51:10

by Jing Zhang

[permalink] [raw]
Subject: Re: [PATCH v4 2/4] perf jevents: Support more event fields



在 2023/7/25 下午5:41, John Garry 写道:
> On 23/07/2023 09:21, Jing Zhang wrote:
>> The usual event descriptions are "event=xxx" or "config=xxx", while the
>> event descriptions of CMN are "type=xxx, eventid=xxx" or more complex.
>>
>> $cat /sys/bus/event_source/devices/arm_cmn_0/events/hnf_cache_fill
>> type=0x5,eventid=0x3
>>
>> When adding aliases for events described as "event=xxx" or "config=xxx",
>> EventCode or ConfigCode can be used in the JSON files to describe the
>> events. But "eventid=xxx, type=xxx" cannot be supported at present.
>>
>> 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 to supplement "eventid=xxx" and "type=xxx", the 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. EventidCode and Type are added to the event
>> field, and ConfigCode is moved into the event field.
>
> What does "ConfigCode is moved into the event field" mean?
>

What I want to express is to move "ConfigCode" into the event_filed array which can also guarantee its original function. like this:
event_fields = [
...
('AnyThread', 'any='),
('PortMask', 'ch_mask='),
('ConfigCode', 'config='),
...
]

Haha, my English language proficiency still needs improvement, please forgive me.

>>
>
> There should be perf tool self-tests cases for this, see tests/pmu-events.c and tests/parse-events.c, like "umask" is tested
>

Ok, will do.


Thanks,
Jing