Re: [PATCH v1] perf parse-events: Tidy name token matching

From: Ian Rogers
Date: Wed Feb 19 2025 - 17:12:10 EST


On Wed, Feb 19, 2025 at 12:49 PM Namhyung Kim <namhyung@xxxxxxxxxx> wrote:
>
> Hi Ian,
>
> On Wed, Feb 19, 2025 at 11:02:40AM -0800, Ian Rogers wrote:
> > On Mon, Feb 10, 2025 at 11:23 AM Ian Rogers <irogers@xxxxxxxxxx> wrote:
> > >
> > > On Thu, Jan 9, 2025 at 9:54 AM Ian Rogers <irogers@xxxxxxxxxx> wrote:
> > > >
> > > > Prior to commit 70c90e4a6b2f ("perf parse-events: Avoid scanning PMUs
> > > > before parsing") names (generally event names) excluded hyphen (minus)
> > > > symbols as the formation of legacy names with hyphens was handled in
> > > > the yacc code. That commit allowed hyphens supposedly making
> > > > name_minus unnecessary. However, changing name_minus to name has
> > > > issues in the term config tokens as then name ends up having priority
> > > > over numbers and name allows matching numbers since commit
> > > > 5ceb57990bf4 ("perf parse: Allow tracepoint names to start with digits
> > > > "). It is also permissable for a name to match with a colon (':') in
> > > > it when its in a config term list. To address this rename name_minus
> > > > to term_name, make the pattern match name's except for the colon, add
> > > > number matching into the config term region with a higher priority
> > > > than name matching. This addresses an inconsistency and allows greater
> > > > matching for names inside of term lists, for example, they may start
> > > > with a number.
> > > >
> > > > Rename name_tag to quoted_name and update comments and helper
> > > > functions to avoid str detecting quoted strings which was already done
> > > > by the lexer.
> > > >
> > > > Signed-off-by: Ian Rogers <irogers@xxxxxxxxxx>
> > >
> > > Ping. This patch addresses name parsing inconsistencies, in particular
> > > events may start with a number without a PMU, but not with. It also
> > > aims to give better names to patterns than name_minus and name_tag
> > > (with term_name and quoted_name respectively) that have drifted from
> > > their original meaning and become to me less than intention revealing.
> >
> > Ping.
>
> Sorry for the delay. Can you please give an example for better
> understanding if there's a change in the behavior?

The example in:
https://lore.kernel.org/r/20240510-perf_digit-v4-3-db1553f3233b@xxxxxxxxxxxxx
is `perf trace -e '9p:*'` which allows the number to start a
tracepoint name, but what is true for tracepoint names is also true
for event names. I lack the tracepoint but the patch here is making
that work if the event/tracepoint is specified with a PMU, so:

Before the input is just seen as broken:
```
$ perf stat -e 'tracepoint/9p:9p/' true
event syntax error: 'tracepoint/9p:9p/'
\___ Unrecognized input
Run 'perf list' for a list of valid events

Usage: perf stat [<options>] [<command>]

-e, --event <event> event selector. use 'perf list' to list
available events
```

After the input fails because the event wasn't found:
```
$ perf stat -e 'tracepoint/9p:9p/' true
event syntax error: 'tracepoint/9p:9p/'
\___ Bad event or PMU

Unable to find PMU or event on a PMU of 'tracepoint'

event syntax error: 'tracepoint/9p:9p/'
\___ unknown term '9p:9p' for pmu 'tracepoint'

valid terms: config,config1,config2,config3,name,period,percore,metric-id

event syntax error: 'tracepoint/9p:9p/'
\___ unknown term '9p:9p' for pmu 'tracepoint'

valid terms: config,config1,config2,config3,name,period,percore,metric-id
Run 'perf list' for a list of valid events

Usage: perf stat [<options>] [<command>]

-e, --event <event> event selector. use 'perf list' to list
available events
```

But the patch is just about making the name term more consistent and
cleaner, the weirdness above wasn't its main point, I want the code to
be easy to read and understand.

Thanks,
Ian