Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1496015 > unrolled thread

[PATCH 1/3] perf, tools: Handle events including .c and .o

Started byAndi Kleen <andi@firstfloor.org>
First post2016-10-05 21:50 +0200
Last post2016-10-08 06:20 +0200
Articles 7 — 4 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH 1/3] perf, tools: Handle events including .c and .o Andi Kleen <andi@firstfloor.org> - 2016-10-05 21:50 +0200
    Re: [PATCH 1/3] perf, tools: Handle events including .c and .o Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-06 00:50 +0200
      Re: [PATCH 1/3] perf, tools: Handle events including .c and .o Andi Kleen <andi@firstfloor.org> - 2016-10-06 19:00 +0200
        Re: [PATCH 1/3] perf, tools: Handle events including .c and .o Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-06 22:20 +0200
    Re: [PATCH 1/3] perf, tools: Handle events including .c and .o Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-06 22:20 +0200
      Re: [PATCH 1/3] perf, tools: Handle events including .c and .o "Wangnan (F)" <wangnan0@huawei.com> - 2016-10-08 06:10 +0200
      [PATCH] perf, tools: Handle events including .c and .o Wang Nan <wangnan0@huawei.com> - 2016-10-08 06:20 +0200

#1496015 — [PATCH 1/3] perf, tools: Handle events including .c and .o

FromAndi Kleen <andi@firstfloor.org>
Date2016-10-05 21:50 +0200
Subject[PATCH 1/3] perf, tools: Handle events including .c and .o
Message-ID<sp0mu-6bE-3@gated-at.bofh.it>
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.

Cc: wangnan0@huawei.com
Cc: sukadev@linux.vnet.ibm.com
Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
 tools/perf/util/parse-events.l | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
index 9f43fda2570f..377147088a46 100644
--- a/tools/perf/util/parse-events.l
+++ b/tools/perf/util/parse-events.l
@@ -183,8 +183,8 @@ modifier_bp	[rwx]{1,3}
 		}
 
 {event_pmu}	|
-{bpf_object}	|
-{bpf_source}	|
+({bpf_object}$)	|
+({bpf_source}$)	|
 {event}		{
 			BEGIN(INITIAL);
 			REWIND(1);
-- 
2.5.5

[toc] | [next] | [standalone]


#1496108

FromArnaldo Carvalho de Melo <acme@kernel.org>
Date2016-10-06 00:50 +0200
Message-ID<sp3aF-8kc-3@gated-at.bofh.it>
In reply to#1496015
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.

Wang, may I have your Acked-by, please?

- Arnaldo
 
> Cc: wangnan0@huawei.com
> Cc: sukadev@linux.vnet.ibm.com
> Signed-off-by: Andi Kleen <ak@linux.intel.com>
> ---
>  tools/perf/util/parse-events.l | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
> index 9f43fda2570f..377147088a46 100644
> --- a/tools/perf/util/parse-events.l
> +++ b/tools/perf/util/parse-events.l
> @@ -183,8 +183,8 @@ modifier_bp	[rwx]{1,3}
>  		}
>  
>  {event_pmu}	|
> -{bpf_object}	|
> -{bpf_source}	|
> +({bpf_object}$)	|
> +({bpf_source}$)	|
>  {event}		{
>  			BEGIN(INITIAL);
>  			REWIND(1);
> -- 
> 2.5.5

[toc] | [prev] | [next] | [standalone]


#1496769

FromAndi Kleen <andi@firstfloor.org>
Date2016-10-06 19:00 +0200
Message-ID<spkbx-35y-97@gated-at.bofh.it>
In reply to#1496108
On Wed, Oct 05, 2016 at 07:47:06PM -0300, 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.
> 
> Wang, may I have your Acked-by, please?

He acked it earlier here

https://patchwork.kernel.org/patch/9337721/

Tested-by: Wang Nan <wangnan0@huawei.com>

-Andi

[toc] | [prev] | [next] | [standalone]


#1496845

FromArnaldo Carvalho de Melo <acme@kernel.org>
Date2016-10-06 22:20 +0200
Message-ID<spnj3-5PE-13@gated-at.bofh.it>
In reply to#1496769
Em Thu, Oct 06, 2016 at 09:55:05AM -0700, Andi Kleen escreveu:
> On Wed, Oct 05, 2016 at 07:47:06PM -0300, 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.
> > 
> > Wang, may I have your Acked-by, please?
> 
> He acked it earlier here
> 
> https://patchwork.kernel.org/patch/9337721/
> 
> Tested-by: Wang Nan <wangnan0@huawei.com>

Ok, will add the example where it breaks in the commit message,

Thanks,

- Arnaldo

[toc] | [prev] | [next] | [standalone]


#1496846

FromArnaldo Carvalho de Melo <acme@kernel.org>
Date2016-10-06 22:20 +0200
Message-ID<spnj3-5PE-15@gated-at.bofh.it>
In reply to#1496015
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
 
> Cc: wangnan0@huawei.com
> Cc: sukadev@linux.vnet.ibm.com
> Signed-off-by: Andi Kleen <ak@linux.intel.com>
> ---
>  tools/perf/util/parse-events.l | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
> index 9f43fda2570f..377147088a46 100644
> --- a/tools/perf/util/parse-events.l
> +++ b/tools/perf/util/parse-events.l
> @@ -183,8 +183,8 @@ modifier_bp	[rwx]{1,3}
>  		}
>  
>  {event_pmu}	|
> -{bpf_object}	|
> -{bpf_source}	|
> +({bpf_object}$)	|
> +({bpf_source}$)	|
>  {event}		{
>  			BEGIN(INITIAL);
>  			REWIND(1);
> -- 
> 2.5.5

[toc] | [prev] | [next] | [standalone]


#1497655

From"Wangnan (F)" <wangnan0@huawei.com>
Date2016-10-08 06:10 +0200
Message-ID<spR7r-22y-3@gated-at.bofh.it>
In reply to#1496846

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.

[toc] | [prev] | [next] | [standalone]


#1497656 — [PATCH] perf, tools: Handle events including .c and .o

FromWang Nan <wangnan0@huawei.com>
Date2016-10-08 06:20 +0200
Subject[PATCH] perf, tools: Handle events including .c and .o
Message-ID<spRh7-28C-5@gated-at.bofh.it>
In reply to#1496846
This patch helps with Sukadev's JSON event tree where such events can happen.

From Andi Kleen:
 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.

This patch fixes this problem by forbidding BPF file patch containing '{', '}'
and ',', make sure flex consumes the leading '{', instead of matcing it using
a BPF file path.

Tested result:

  $ perf stat -e '{unc_p_clockticks,unc_p_power_state_occupancy.cores_c0}' -a -I 1000
  invalid or unsupported event: '{unc_p_clockticks,unc_p_power_state_occupancy.cores_c0}'
  Run 'perf list' for a list of valid events
  (as expected, interperted as event)

  $ perf stat -e 'aaa.c' -a -I 1000
  ERROR: problems with path aaa.c: No such file or directory
  (as expected, interperted as BPF source)

  $ perf stat -e 'aaa.ccc' -a -I 1000
  invalid or unsupported event: 'aaa.ccc'
  (as expected, interperted as event)

  $ perf stat -e '{aaa.c}' -a -I 1000
  ERROR: problems with path aaa.c: No such file or directory
  event syntax error: '{aaa.c}'
  <SKIP>
  (as expected, interperted as BPF source)

  $ perf stat -e '{cycles,aaa.c}' -a -I 1000
  ERROR: problems with path aaa.c: No such file or directory
  event syntax error: '{cycles,aaa.c}'
  (as expected, interperted as BPF source)

Signed-off-by: Wang Nan <wangnan0@huawei.com>
Cc: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
---
 tools/perf/util/parse-events.l | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
index 9f43fda..660fca0 100644
--- a/tools/perf/util/parse-events.l
+++ b/tools/perf/util/parse-events.l
@@ -136,8 +136,8 @@ do {							\
 group		[^,{}/]*[{][^}]*[}][^,{}/]*
 event_pmu	[^,{}/]+[/][^/]*[/][^,{}/]*
 event		[^,{}/]+
-bpf_object	.*\.(o|bpf)
-bpf_source	.*\.c
+bpf_object	[^,{}]+\.(o|bpf)
+bpf_source	[^,{}]+\.c
 
 num_dec		[0-9]+
 num_hex		0x[a-fA-F0-9]+
-- 
1.8.3.4

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web