[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <Z7gegNG5_pX2gQ9O@google.com>
Date: Thu, 20 Feb 2025 22:34:40 -0800
From: Namhyung Kim <namhyung@...nel.org>
To: Ian Rogers <irogers@...gle.com>
Cc: Peter Zijlstra <peterz@...radead.org>, Ingo Molnar <mingo@...hat.com>,
Arnaldo Carvalho de Melo <acme@...nel.org>,
Mark Rutland <mark.rutland@....com>,
Alexander Shishkin <alexander.shishkin@...ux.intel.com>,
Jiri Olsa <jolsa@...nel.org>,
Adrian Hunter <adrian.hunter@...el.com>,
Kan Liang <kan.liang@...ux.intel.com>,
Andi Kleen <ak@...ux.intel.com>,
Dominique Martinet <asmadeus@...ewreck.org>,
linux-perf-users@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v1] perf parse-events: Tidy name token matching
On Wed, Feb 19, 2025 at 02:43:10PM -0800, Ian Rogers wrote:
> On Wed, Feb 19, 2025 at 2:27 PM Namhyung Kim <namhyung@...nel.org> wrote:
> >
> > On Wed, Feb 19, 2025 at 02:11:43PM -0800, Ian Rogers wrote:
> > > On Wed, Feb 19, 2025 at 12:49 PM Namhyung Kim <namhyung@...nel.org> 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@...gle.com> wrote:
> > > > > >
> > > > > > On Thu, Jan 9, 2025 at 9:54 AM Ian Rogers <irogers@...gle.com> 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@...gle.com>
> > > > > >
> > > > > > 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@codewreck.org
> > > 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.
> >
> > Ok, so I guess there's no behavior change from the users perspective in
> > this patchset. Do you plan to add support for the tracepoint name in
> > the config term (like tracepoint/9p:9p/) later?
>
> I think we treat tracepoints much as we do regular PMU perf events
> except in the encoding of the config. There is also a sysfs PMU:
> ```
> $ ls -al /sys/bus/event_source/devices/tracepoint
> /
> total 0
> drwxr-xr-x 3 root root 0 Feb 19 14:35 .
> drwxr-xr-x 78 root root 0 Feb 19 08:13 ..
> -rw-r--r-- 1 root root 4096 Feb 19 14:34 perf_event_mux_interval_ms
> drwxr-xr-x 2 root root 0 Feb 19 08:13 power
> lrwxrwxrwx 1 root root 0 Feb 19 08:13 subsystem -> ../../bus/event_source
> -r--r--r-- 1 root root 4096 Feb 19 10:53 type
> -rw-r--r-- 1 root root 4096 Feb 19 08:13 uevent
> ```
> with the type reflecting the perf_event_attr type (3 aka
> PERF_TYPE_TRACEPOINT). So I think much like with the hwmon_pmu.c it
> makes sense to have a tracepoint_pmu.c and move logic like
> parse-events add_tracepoint in there:
> https://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next.git/tree/tools/perf/util/parse-events.c?h=perf-tools-next#n523
> in that case tracepoint/9p:9p/ would be a valid tracepoint event name.
> For now this code is cleaning up that if you had a 9p on say the cpu
> PMU, 9p would wildcard match with it but cpu/9p/ would be a parse
> error - as the event name currently doesn't allow a number to start it
> when it is part of the term list, what this patch fixes as part of
> tidying up the code.
Ok, the change itself looks fine to me.
Thanks,
Namhyung
Powered by blists - more mailing lists