Messages in this thread |  | | Subject | Re: [PATCH 1/3] perf, tools: Handle events including .c and .o | From | "Wangnan (F)" <> | Date | Sat, 8 Oct 2016 12:02:40 +0800 |
| |
On 2016/10/7 4:18, Arnaldo Carvalho de Melo wrote: > Em Wed, Oct 05, 2016 at 12:47:10PM -0700, Andi Kleen escreveu: >> From: Andi Kleen <ak@linux.intel.com> >> >> This is a generic bug fix, but it helps with Sukadev's JSON event tree >> where such events can happen. >> >> Any event inclduing a .c/.o/.bpf currently triggers BPF compilation or loading >> and then an error. This can happen for some Intel JSON events, which cannot >> be used. >> >> Fix the scanner to only match for .o or .c or .bpf at the end. >> This will prevent loading multiple BPF scripts separated with comma, >> but I assume this is acceptable. > So, I tried it with the example provided in the thread for a previous > version of this patch (IIRC) and it still fails: > > > [acme@jouet linux]$ perf stat -e '{unc_p_clockticks,unc_p_power_state_occupancy.cores_c0}' -a -I 1000 > ERROR: problems with path {unc_p_clockticks,unc_p_power_state_occupancy.c: No such file or directory > event syntax error: '{unc_p_clockticks,unc_p_power_state_occupancy.cores_c0}' > \___ Failed to load {unc_p_clockticks,unc_p_power_state_occupancy.c from source: Error when compiling BPF scriptlet > > (add -v to see detail) > 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 > [acme@jouet linux]$ > > And with another event that for sure is available on this machine: > > > > [acme@jouet linux]$ perf stat -e '{uops_executed.core_cycles_ge_2}' -I 1000 usleep 10 > ERROR: problems with path {uops_executed.c: No such file or directory > event syntax error: '{uops_executed.core_cycles_ge_2}' > \___ Failed to load {uops_executed.c from source: Error when compiling BPF scriptlet > > (add -v to see detail) > 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 > [acme@jouet linux]$ > > > I thought this was due to the Makefile not noticing the change in the .l files, but I made > sure I deleted the build dir and rebuilt from scratch, same problem. > > - Arnaldo >
Tested again, and thank you for giving us another chance for fixing this :)
The key problem here is not the ending '$' but the leading '{'. Flex's greedy maching policy makes this problem.
According to the design of parse-events.l, when it see something like '...{...}...', it first matches a 'group' in '<event>' scope, then rewind to INITIAL scope to match events in the group. In INITIAL scope, when it see a '{', flex consume this char and goes back to '<event>' scope to match next event. It works well before match BPF file path using unlimited '.*\.c' because '.*' will match the leading '{' in INITIAL scope without consuming it.
The simplest method for this problem is fixing the '.*' part: like what we define for 'event', don't match ',', '{' and '}'. Doesn't like 'event', '/' is required because this is a path.
Will post a patch for it. Please test it again.
Thank you.
|  |