Re: [PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-12 Thread Masami Hiramatsu
On Mon, 11 Dec 2017 15:25:47 -0300
Arnaldo Carvalho de Melo  wrote:

> Em Fri, Dec 08, 2017 at 08:49:46AM -0600, Paul Clarke escreveu:
> > 
> > 
> > On 12/07/2017 09:01 PM, Masami Hiramatsu wrote:
> > > On Thu, 7 Dec 2017 10:34:51 -0600
> > > Paul Clarke  wrote:
> > >> On 12/07/2017 01:20 AM, Masami Hiramatsu wrote:
> > >>> Cut off the version suffix (e.g. @GLIBC_2.2.5 etc.) from
> > >>> automatic generated event name. This fixes wildcard event
> > >>> adding like below case;
> > >>>
> > >>>   =
> > >>>   # perf probe -x /lib64/libc-2.25.so malloc*
> > >>>   Internal error: "malloc_get_state@GLIBC_2" is wrong event name.
> > >>> Error: Failed to add events.
> > >>>   =
> > >>>
> > >>> This failure was caused by a versioned suffix symbol.
> > >>> With this fix, perf probe automatically cuts the
> > >>> suffix after @ as below.
> > >>>
> > >>>   =
> > >>>   # ./perf probe -x /lib64/libc-2.25.so malloc*
> > >>>   Added new events:
> > >>> probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
> > >>> probe_libc:malloc_consolidate (on malloc* in 
> > >>> /usr/lib64/libc-2.25.so)
> > >>> probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
> > >>> probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
> > >>> probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
> > >>> probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
> > >>> probe_libc:malloc_usable_size (on malloc* in 
> > >>> /usr/lib64/libc-2.25.so)
> > >>> probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
> > >>> probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
> > >>> probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
> > >>> probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
> > >>> probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)
> > >>>
> > >>>   You can now use it in all perf tools, such as:
> > >>>
> > >>>   perf record -e probe_libc:malloc_set_state -aR sleep 1
> > >>>
> > >>>   =
> > >>
> > >> I think this will still fall over for a case where there are multiple 
> > >> versions of the same base symbol, like:
> > >>
> > >> $ nm /lib64/libc.so.6 | egrep ' sched_getaffinity'
> > >> 00134430 T sched_getaffinity@GLIBC_2.3.3
> > >> 000dcf00 T sched_getaffinity@@GLIBC_2.3.4
> > > 
> > > No, in that case perf probe adds number suffix (_1, _2...) for new events 
> > > :)
> > > 
> > > This feature (number suffix) is anyway required for the case that inlined
> > > function is spreaded in multiple places. I think this is natural for perf 
> > > probe.
> > 
> > I can live with that.
> > 
> > Is the versioning tag retained for display with "perf probe -l" display, so 
> > the probe points can be distinguished?
> > 
> > In other words, will one see:
> > # perf probe -l
> >   probe_libc:sched_getaffinity (on sched_getaffinity@GLIBC_2.3.3 in 
> > /usr/lib64/libc-2.17.so)
> >   probe_libc:sched_getaffinity_1 (on sched_getaffinity@@GLIBC_2.3.4 in 
> > /usr/lib64/libc-2.17.so)
> > or
> > # perf probe -l
> >   probe_libc:sched_getaffinity (on sched_getaffinity in 
> > /usr/lib64/libc-2.17.so)
> >   probe_libc:sched_getaffinity_1 (on sched_getaffinity in 
> > /usr/lib64/libc-2.17.so)
> 
> [root@jouet ~]# perf probe -x /lib64/libc-2.25.so malloc*
> Added new events:
>   probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)
> 
> You can now use it in all perf tools, such as:
> 
>   perf record -e probe_libc:malloc_set_state -aR sleep 1
> 
> [root@jouet ~]# perf probe -l
>   probe_libc:malloc(on 0xd22a6973 in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_check (on 0x25db6f5a in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_consolidate (on 0x88f7c44a in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_get_state (on 0xdd38eca7 in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_hook_ini (on 0x8de2b533 in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_info (on 0x8b327bde in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_printerr (on 0x8fff087c in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_set_state (on 0x861940e6 in /usr/lib64/libc-2.25.so)
>   

Re: [PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-12 Thread Masami Hiramatsu
On Mon, 11 Dec 2017 15:25:47 -0300
Arnaldo Carvalho de Melo  wrote:

> Em Fri, Dec 08, 2017 at 08:49:46AM -0600, Paul Clarke escreveu:
> > 
> > 
> > On 12/07/2017 09:01 PM, Masami Hiramatsu wrote:
> > > On Thu, 7 Dec 2017 10:34:51 -0600
> > > Paul Clarke  wrote:
> > >> On 12/07/2017 01:20 AM, Masami Hiramatsu wrote:
> > >>> Cut off the version suffix (e.g. @GLIBC_2.2.5 etc.) from
> > >>> automatic generated event name. This fixes wildcard event
> > >>> adding like below case;
> > >>>
> > >>>   =
> > >>>   # perf probe -x /lib64/libc-2.25.so malloc*
> > >>>   Internal error: "malloc_get_state@GLIBC_2" is wrong event name.
> > >>> Error: Failed to add events.
> > >>>   =
> > >>>
> > >>> This failure was caused by a versioned suffix symbol.
> > >>> With this fix, perf probe automatically cuts the
> > >>> suffix after @ as below.
> > >>>
> > >>>   =
> > >>>   # ./perf probe -x /lib64/libc-2.25.so malloc*
> > >>>   Added new events:
> > >>> probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
> > >>> probe_libc:malloc_consolidate (on malloc* in 
> > >>> /usr/lib64/libc-2.25.so)
> > >>> probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
> > >>> probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
> > >>> probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
> > >>> probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
> > >>> probe_libc:malloc_usable_size (on malloc* in 
> > >>> /usr/lib64/libc-2.25.so)
> > >>> probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
> > >>> probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
> > >>> probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
> > >>> probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
> > >>> probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)
> > >>>
> > >>>   You can now use it in all perf tools, such as:
> > >>>
> > >>>   perf record -e probe_libc:malloc_set_state -aR sleep 1
> > >>>
> > >>>   =
> > >>
> > >> I think this will still fall over for a case where there are multiple 
> > >> versions of the same base symbol, like:
> > >>
> > >> $ nm /lib64/libc.so.6 | egrep ' sched_getaffinity'
> > >> 00134430 T sched_getaffinity@GLIBC_2.3.3
> > >> 000dcf00 T sched_getaffinity@@GLIBC_2.3.4
> > > 
> > > No, in that case perf probe adds number suffix (_1, _2...) for new events 
> > > :)
> > > 
> > > This feature (number suffix) is anyway required for the case that inlined
> > > function is spreaded in multiple places. I think this is natural for perf 
> > > probe.
> > 
> > I can live with that.
> > 
> > Is the versioning tag retained for display with "perf probe -l" display, so 
> > the probe points can be distinguished?
> > 
> > In other words, will one see:
> > # perf probe -l
> >   probe_libc:sched_getaffinity (on sched_getaffinity@GLIBC_2.3.3 in 
> > /usr/lib64/libc-2.17.so)
> >   probe_libc:sched_getaffinity_1 (on sched_getaffinity@@GLIBC_2.3.4 in 
> > /usr/lib64/libc-2.17.so)
> > or
> > # perf probe -l
> >   probe_libc:sched_getaffinity (on sched_getaffinity in 
> > /usr/lib64/libc-2.17.so)
> >   probe_libc:sched_getaffinity_1 (on sched_getaffinity in 
> > /usr/lib64/libc-2.17.so)
> 
> [root@jouet ~]# perf probe -x /lib64/libc-2.25.so malloc*
> Added new events:
>   probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)
> 
> You can now use it in all perf tools, such as:
> 
>   perf record -e probe_libc:malloc_set_state -aR sleep 1
> 
> [root@jouet ~]# perf probe -l
>   probe_libc:malloc(on 0xd22a6973 in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_check (on 0x25db6f5a in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_consolidate (on 0x88f7c44a in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_get_state (on 0xdd38eca7 in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_hook_ini (on 0x8de2b533 in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_info (on 0x8b327bde in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_printerr (on 0x8fff087c in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_set_state (on 0x861940e6 in /usr/lib64/libc-2.25.so)
>   probe_libc:malloc_stats (on 0x51fa3cdc 

Re: [PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-11 Thread Arnaldo Carvalho de Melo
Em Fri, Dec 08, 2017 at 08:49:46AM -0600, Paul Clarke escreveu:
> 
> 
> On 12/07/2017 09:01 PM, Masami Hiramatsu wrote:
> > On Thu, 7 Dec 2017 10:34:51 -0600
> > Paul Clarke  wrote:
> >> On 12/07/2017 01:20 AM, Masami Hiramatsu wrote:
> >>> Cut off the version suffix (e.g. @GLIBC_2.2.5 etc.) from
> >>> automatic generated event name. This fixes wildcard event
> >>> adding like below case;
> >>>
> >>>   =
> >>>   # perf probe -x /lib64/libc-2.25.so malloc*
> >>>   Internal error: "malloc_get_state@GLIBC_2" is wrong event name.
> >>> Error: Failed to add events.
> >>>   =
> >>>
> >>> This failure was caused by a versioned suffix symbol.
> >>> With this fix, perf probe automatically cuts the
> >>> suffix after @ as below.
> >>>
> >>>   =
> >>>   # ./perf probe -x /lib64/libc-2.25.so malloc*
> >>>   Added new events:
> >>> probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)
> >>>
> >>>   You can now use it in all perf tools, such as:
> >>>
> >>> perf record -e probe_libc:malloc_set_state -aR sleep 1
> >>>
> >>>   =
> >>
> >> I think this will still fall over for a case where there are multiple 
> >> versions of the same base symbol, like:
> >>
> >> $ nm /lib64/libc.so.6 | egrep ' sched_getaffinity'
> >> 00134430 T sched_getaffinity@GLIBC_2.3.3
> >> 000dcf00 T sched_getaffinity@@GLIBC_2.3.4
> > 
> > No, in that case perf probe adds number suffix (_1, _2...) for new events :)
> > 
> > This feature (number suffix) is anyway required for the case that inlined
> > function is spreaded in multiple places. I think this is natural for perf 
> > probe.
> 
> I can live with that.
> 
> Is the versioning tag retained for display with "perf probe -l" display, so 
> the probe points can be distinguished?
> 
> In other words, will one see:
> # perf probe -l
>   probe_libc:sched_getaffinity (on sched_getaffinity@GLIBC_2.3.3 in 
> /usr/lib64/libc-2.17.so)
>   probe_libc:sched_getaffinity_1 (on sched_getaffinity@@GLIBC_2.3.4 in 
> /usr/lib64/libc-2.17.so)
> or
> # perf probe -l
>   probe_libc:sched_getaffinity (on sched_getaffinity in 
> /usr/lib64/libc-2.17.so)
>   probe_libc:sched_getaffinity_1 (on sched_getaffinity in 
> /usr/lib64/libc-2.17.so)

[root@jouet ~]# perf probe -x /lib64/libc-2.25.so malloc*
Added new events:
  probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)

You can now use it in all perf tools, such as:

perf record -e probe_libc:malloc_set_state -aR sleep 1

[root@jouet ~]# perf probe -l
  probe_libc:malloc(on 0xd22a6973 in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_check (on 0x25db6f5a in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_consolidate (on 0x88f7c44a in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_get_state (on 0xdd38eca7 in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_hook_ini (on 0x8de2b533 in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_info (on 0x8b327bde in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_printerr (on 0x8fff087c in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_set_state (on 0x861940e6 in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_stats (on 0x51fa3cdc in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_trim (on 0xa9fa4e43 in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_usable_size (on 0xceb5e090 in /usr/lib64/libc-2.25.so)
  probe_libc:mallochook (on 0x6ebc00f5 in /usr/lib64/libc-2.25.so)
[root@jouet ~]#

[acme@jouet perf]$ nm 

Re: [PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-11 Thread Arnaldo Carvalho de Melo
Em Fri, Dec 08, 2017 at 08:49:46AM -0600, Paul Clarke escreveu:
> 
> 
> On 12/07/2017 09:01 PM, Masami Hiramatsu wrote:
> > On Thu, 7 Dec 2017 10:34:51 -0600
> > Paul Clarke  wrote:
> >> On 12/07/2017 01:20 AM, Masami Hiramatsu wrote:
> >>> Cut off the version suffix (e.g. @GLIBC_2.2.5 etc.) from
> >>> automatic generated event name. This fixes wildcard event
> >>> adding like below case;
> >>>
> >>>   =
> >>>   # perf probe -x /lib64/libc-2.25.so malloc*
> >>>   Internal error: "malloc_get_state@GLIBC_2" is wrong event name.
> >>> Error: Failed to add events.
> >>>   =
> >>>
> >>> This failure was caused by a versioned suffix symbol.
> >>> With this fix, perf probe automatically cuts the
> >>> suffix after @ as below.
> >>>
> >>>   =
> >>>   # ./perf probe -x /lib64/libc-2.25.so malloc*
> >>>   Added new events:
> >>> probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)
> >>>
> >>>   You can now use it in all perf tools, such as:
> >>>
> >>> perf record -e probe_libc:malloc_set_state -aR sleep 1
> >>>
> >>>   =
> >>
> >> I think this will still fall over for a case where there are multiple 
> >> versions of the same base symbol, like:
> >>
> >> $ nm /lib64/libc.so.6 | egrep ' sched_getaffinity'
> >> 00134430 T sched_getaffinity@GLIBC_2.3.3
> >> 000dcf00 T sched_getaffinity@@GLIBC_2.3.4
> > 
> > No, in that case perf probe adds number suffix (_1, _2...) for new events :)
> > 
> > This feature (number suffix) is anyway required for the case that inlined
> > function is spreaded in multiple places. I think this is natural for perf 
> > probe.
> 
> I can live with that.
> 
> Is the versioning tag retained for display with "perf probe -l" display, so 
> the probe points can be distinguished?
> 
> In other words, will one see:
> # perf probe -l
>   probe_libc:sched_getaffinity (on sched_getaffinity@GLIBC_2.3.3 in 
> /usr/lib64/libc-2.17.so)
>   probe_libc:sched_getaffinity_1 (on sched_getaffinity@@GLIBC_2.3.4 in 
> /usr/lib64/libc-2.17.so)
> or
> # perf probe -l
>   probe_libc:sched_getaffinity (on sched_getaffinity in 
> /usr/lib64/libc-2.17.so)
>   probe_libc:sched_getaffinity_1 (on sched_getaffinity in 
> /usr/lib64/libc-2.17.so)

[root@jouet ~]# perf probe -x /lib64/libc-2.25.so malloc*
Added new events:
  probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)

You can now use it in all perf tools, such as:

perf record -e probe_libc:malloc_set_state -aR sleep 1

[root@jouet ~]# perf probe -l
  probe_libc:malloc(on 0xd22a6973 in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_check (on 0x25db6f5a in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_consolidate (on 0x88f7c44a in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_get_state (on 0xdd38eca7 in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_hook_ini (on 0x8de2b533 in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_info (on 0x8b327bde in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_printerr (on 0x8fff087c in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_set_state (on 0x861940e6 in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_stats (on 0x51fa3cdc in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_trim (on 0xa9fa4e43 in /usr/lib64/libc-2.25.so)
  probe_libc:malloc_usable_size (on 0xceb5e090 in /usr/lib64/libc-2.25.so)
  probe_libc:mallochook (on 0x6ebc00f5 in /usr/lib64/libc-2.25.so)
[root@jouet ~]#

[acme@jouet perf]$ nm /lib64/libc-2.25.so | grep 

Re: [PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-08 Thread Masami Hiramatsu
On Fri, 8 Dec 2017 08:49:46 -0600
Paul Clarke  wrote:

> 
> 
> On 12/07/2017 09:01 PM, Masami Hiramatsu wrote:
> > On Thu, 7 Dec 2017 10:34:51 -0600
> > Paul Clarke  wrote:
> >> On 12/07/2017 01:20 AM, Masami Hiramatsu wrote:
> >>> Cut off the version suffix (e.g. @GLIBC_2.2.5 etc.) from
> >>> automatic generated event name. This fixes wildcard event
> >>> adding like below case;
> >>>
> >>>   =
> >>>   # perf probe -x /lib64/libc-2.25.so malloc*
> >>>   Internal error: "malloc_get_state@GLIBC_2" is wrong event name.
> >>> Error: Failed to add events.
> >>>   =
> >>>
> >>> This failure was caused by a versioned suffix symbol.
> >>> With this fix, perf probe automatically cuts the
> >>> suffix after @ as below.
> >>>
> >>>   =
> >>>   # ./perf probe -x /lib64/libc-2.25.so malloc*
> >>>   Added new events:
> >>> probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)
> >>>
> >>>   You can now use it in all perf tools, such as:
> >>>
> >>> perf record -e probe_libc:malloc_set_state -aR sleep 1
> >>>
> >>>   =
> >>
> >> I think this will still fall over for a case where there are multiple 
> >> versions of the same base symbol, like:
> >>
> >> $ nm /lib64/libc.so.6 | egrep ' sched_getaffinity'
> >> 00134430 T sched_getaffinity@GLIBC_2.3.3
> >> 000dcf00 T sched_getaffinity@@GLIBC_2.3.4
> > 
> > No, in that case perf probe adds number suffix (_1, _2...) for new events :)
> > 
> > This feature (number suffix) is anyway required for the case that inlined
> > function is spreaded in multiple places. I think this is natural for perf 
> > probe.
> 
> I can live with that.
> 
> Is the versioning tag retained for display with "perf probe -l" display, so 
> the probe points can be distinguished?
> 
> In other words, will one see:
> # perf probe -l
>   probe_libc:sched_getaffinity (on sched_getaffinity@GLIBC_2.3.3 in 
> /usr/lib64/libc-2.17.so)
>   probe_libc:sched_getaffinity_1 (on sched_getaffinity@@GLIBC_2.3.4 in 
> /usr/lib64/libc-2.17.so)

Yes, this style, since the symbols are recorded with version suffixes.

Thank you,

> or
> # perf probe -l
>   probe_libc:sched_getaffinity (on sched_getaffinity in 
> /usr/lib64/libc-2.17.so)
>   probe_libc:sched_getaffinity_1 (on sched_getaffinity in 
> /usr/lib64/libc-2.17.so)
> 
> PC
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-perf-users" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


-- 
Masami Hiramatsu 


Re: [PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-08 Thread Masami Hiramatsu
On Fri, 8 Dec 2017 08:49:46 -0600
Paul Clarke  wrote:

> 
> 
> On 12/07/2017 09:01 PM, Masami Hiramatsu wrote:
> > On Thu, 7 Dec 2017 10:34:51 -0600
> > Paul Clarke  wrote:
> >> On 12/07/2017 01:20 AM, Masami Hiramatsu wrote:
> >>> Cut off the version suffix (e.g. @GLIBC_2.2.5 etc.) from
> >>> automatic generated event name. This fixes wildcard event
> >>> adding like below case;
> >>>
> >>>   =
> >>>   # perf probe -x /lib64/libc-2.25.so malloc*
> >>>   Internal error: "malloc_get_state@GLIBC_2" is wrong event name.
> >>> Error: Failed to add events.
> >>>   =
> >>>
> >>> This failure was caused by a versioned suffix symbol.
> >>> With this fix, perf probe automatically cuts the
> >>> suffix after @ as below.
> >>>
> >>>   =
> >>>   # ./perf probe -x /lib64/libc-2.25.so malloc*
> >>>   Added new events:
> >>> probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
> >>> probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)
> >>>
> >>>   You can now use it in all perf tools, such as:
> >>>
> >>> perf record -e probe_libc:malloc_set_state -aR sleep 1
> >>>
> >>>   =
> >>
> >> I think this will still fall over for a case where there are multiple 
> >> versions of the same base symbol, like:
> >>
> >> $ nm /lib64/libc.so.6 | egrep ' sched_getaffinity'
> >> 00134430 T sched_getaffinity@GLIBC_2.3.3
> >> 000dcf00 T sched_getaffinity@@GLIBC_2.3.4
> > 
> > No, in that case perf probe adds number suffix (_1, _2...) for new events :)
> > 
> > This feature (number suffix) is anyway required for the case that inlined
> > function is spreaded in multiple places. I think this is natural for perf 
> > probe.
> 
> I can live with that.
> 
> Is the versioning tag retained for display with "perf probe -l" display, so 
> the probe points can be distinguished?
> 
> In other words, will one see:
> # perf probe -l
>   probe_libc:sched_getaffinity (on sched_getaffinity@GLIBC_2.3.3 in 
> /usr/lib64/libc-2.17.so)
>   probe_libc:sched_getaffinity_1 (on sched_getaffinity@@GLIBC_2.3.4 in 
> /usr/lib64/libc-2.17.so)

Yes, this style, since the symbols are recorded with version suffixes.

Thank you,

> or
> # perf probe -l
>   probe_libc:sched_getaffinity (on sched_getaffinity in 
> /usr/lib64/libc-2.17.so)
>   probe_libc:sched_getaffinity_1 (on sched_getaffinity in 
> /usr/lib64/libc-2.17.so)
> 
> PC
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-perf-users" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


-- 
Masami Hiramatsu 


Re: [PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-08 Thread Paul Clarke


On 12/07/2017 09:01 PM, Masami Hiramatsu wrote:
> On Thu, 7 Dec 2017 10:34:51 -0600
> Paul Clarke  wrote:
>> On 12/07/2017 01:20 AM, Masami Hiramatsu wrote:
>>> Cut off the version suffix (e.g. @GLIBC_2.2.5 etc.) from
>>> automatic generated event name. This fixes wildcard event
>>> adding like below case;
>>>
>>>   =
>>>   # perf probe -x /lib64/libc-2.25.so malloc*
>>>   Internal error: "malloc_get_state@GLIBC_2" is wrong event name.
>>> Error: Failed to add events.
>>>   =
>>>
>>> This failure was caused by a versioned suffix symbol.
>>> With this fix, perf probe automatically cuts the
>>> suffix after @ as below.
>>>
>>>   =
>>>   # ./perf probe -x /lib64/libc-2.25.so malloc*
>>>   Added new events:
>>> probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)
>>>
>>>   You can now use it in all perf tools, such as:
>>>
>>>   perf record -e probe_libc:malloc_set_state -aR sleep 1
>>>
>>>   =
>>
>> I think this will still fall over for a case where there are multiple 
>> versions of the same base symbol, like:
>>
>> $ nm /lib64/libc.so.6 | egrep ' sched_getaffinity'
>> 00134430 T sched_getaffinity@GLIBC_2.3.3
>> 000dcf00 T sched_getaffinity@@GLIBC_2.3.4
> 
> No, in that case perf probe adds number suffix (_1, _2...) for new events :)
> 
> This feature (number suffix) is anyway required for the case that inlined
> function is spreaded in multiple places. I think this is natural for perf 
> probe.

I can live with that.

Is the versioning tag retained for display with "perf probe -l" display, so the 
probe points can be distinguished?

In other words, will one see:
# perf probe -l
  probe_libc:sched_getaffinity (on sched_getaffinity@GLIBC_2.3.3 in 
/usr/lib64/libc-2.17.so)
  probe_libc:sched_getaffinity_1 (on sched_getaffinity@@GLIBC_2.3.4 in 
/usr/lib64/libc-2.17.so)
or
# perf probe -l
  probe_libc:sched_getaffinity (on sched_getaffinity in /usr/lib64/libc-2.17.so)
  probe_libc:sched_getaffinity_1 (on sched_getaffinity in 
/usr/lib64/libc-2.17.so)

PC



Re: [PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-08 Thread Paul Clarke


On 12/07/2017 09:01 PM, Masami Hiramatsu wrote:
> On Thu, 7 Dec 2017 10:34:51 -0600
> Paul Clarke  wrote:
>> On 12/07/2017 01:20 AM, Masami Hiramatsu wrote:
>>> Cut off the version suffix (e.g. @GLIBC_2.2.5 etc.) from
>>> automatic generated event name. This fixes wildcard event
>>> adding like below case;
>>>
>>>   =
>>>   # perf probe -x /lib64/libc-2.25.so malloc*
>>>   Internal error: "malloc_get_state@GLIBC_2" is wrong event name.
>>> Error: Failed to add events.
>>>   =
>>>
>>> This failure was caused by a versioned suffix symbol.
>>> With this fix, perf probe automatically cuts the
>>> suffix after @ as below.
>>>
>>>   =
>>>   # ./perf probe -x /lib64/libc-2.25.so malloc*
>>>   Added new events:
>>> probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
>>> probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)
>>>
>>>   You can now use it in all perf tools, such as:
>>>
>>>   perf record -e probe_libc:malloc_set_state -aR sleep 1
>>>
>>>   =
>>
>> I think this will still fall over for a case where there are multiple 
>> versions of the same base symbol, like:
>>
>> $ nm /lib64/libc.so.6 | egrep ' sched_getaffinity'
>> 00134430 T sched_getaffinity@GLIBC_2.3.3
>> 000dcf00 T sched_getaffinity@@GLIBC_2.3.4
> 
> No, in that case perf probe adds number suffix (_1, _2...) for new events :)
> 
> This feature (number suffix) is anyway required for the case that inlined
> function is spreaded in multiple places. I think this is natural for perf 
> probe.

I can live with that.

Is the versioning tag retained for display with "perf probe -l" display, so the 
probe points can be distinguished?

In other words, will one see:
# perf probe -l
  probe_libc:sched_getaffinity (on sched_getaffinity@GLIBC_2.3.3 in 
/usr/lib64/libc-2.17.so)
  probe_libc:sched_getaffinity_1 (on sched_getaffinity@@GLIBC_2.3.4 in 
/usr/lib64/libc-2.17.so)
or
# perf probe -l
  probe_libc:sched_getaffinity (on sched_getaffinity in /usr/lib64/libc-2.17.so)
  probe_libc:sched_getaffinity_1 (on sched_getaffinity in 
/usr/lib64/libc-2.17.so)

PC



Re: [PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-07 Thread Masami Hiramatsu
On Thu, 7 Dec 2017 13:56:59 -0300
Arnaldo Carvalho de Melo  wrote:

> Em Thu, Dec 07, 2017 at 04:20:28PM +0900, Masami Hiramatsu escreveu:
> > Cut off the version suffix (e.g. @GLIBC_2.2.5 etc.) from
> > automatic generated event name. This fixes wildcard event
> > adding like below case;
> > 
> >   =
> >   # perf probe -x /lib64/libc-2.25.so malloc*
> >   Internal error: "malloc_get_state@GLIBC_2" is wrong event name.
> > Error: Failed to add events.
> >   =
> > 
> > This failure was caused by a versioned suffix symbol.
> > With this fix, perf probe automatically cuts the
> > suffix after @ as below.
> > 
> >   =
> >   # ./perf probe -x /lib64/libc-2.25.so malloc*
> >   Added new events:
> > probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)
> 
> Thanks for working on this! I'm now going over it, and one thing I
> noticed was that the (on malloc*) on all the entries matched by that
> wildcard, can I suggest that you expand it there as well? I.e.
> 
>  probe_libc:malloc_set_state (on malloc_set_state in 
> /usr/lib64/libc-2.25.so)
> 

Hmm, the reason why I chose it was perf probe accepted multiple
probe points at once. e.g.

./perf probe -x /lib64/libc-2.25.so -a malloc* -a free* 

So, if we specify several probe points, I guess user will like to
see which events come from which one. 


> This way we'll now when aliases are used, and also for the versioning
> case, i.e. to which version is a probe pointing?

Currently we can know that by perf probe -l. I would recommend this way,
since -l can show you more precise information (and if it take a time
to read/analyze debuginfo, user can understand the reason why).

Thank you,

> 
> See also Paul Clarke's question and suggestion, which I agree, i.e.
> instead of chopping off the version, just replace the chars with valid
> ones or better, do what Paul suggests, be more flexible in interpreting
> @, i.e. if it is a number and/or fails to point to any file, interpret
> it as versioning.
> 
> - Arnaldo
> 
> >   You can now use it in all perf tools, such as:
> > 
> >   perf record -e probe_libc:malloc_set_state -aR sleep 1
> > 
> >   =
> > 
> > Signed-off-by: Masami Hiramatsu 
> > Reported-by: Arnaldo Carvalho de Melo 
> > Reported-by: bhargavb 
> > ---
> >  tools/perf/util/probe-event.c |4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
> > index c0067950e56f..74435fb7ab7f 100644
> > --- a/tools/perf/util/probe-event.c
> > +++ b/tools/perf/util/probe-event.c
> > @@ -2584,8 +2584,8 @@ static int get_new_event_name(char *buf, size_t len, 
> > const char *base,
> > if (!nbase)
> > return -ENOMEM;
> >  
> > -   /* Cut off the dot suffixes (e.g. .const, .isra)*/
> > -   p = strchr(nbase, '.');
> > +   /* Cut off the dot suffixes (e.g. .const, .isra) and version suffixes */
> > +   p = strpbrk(nbase, ".@");
> > if (p && p != nbase)
> > *p = '\0';
> >  


-- 
Masami Hiramatsu 


Re: [PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-07 Thread Masami Hiramatsu
On Thu, 7 Dec 2017 13:56:59 -0300
Arnaldo Carvalho de Melo  wrote:

> Em Thu, Dec 07, 2017 at 04:20:28PM +0900, Masami Hiramatsu escreveu:
> > Cut off the version suffix (e.g. @GLIBC_2.2.5 etc.) from
> > automatic generated event name. This fixes wildcard event
> > adding like below case;
> > 
> >   =
> >   # perf probe -x /lib64/libc-2.25.so malloc*
> >   Internal error: "malloc_get_state@GLIBC_2" is wrong event name.
> > Error: Failed to add events.
> >   =
> > 
> > This failure was caused by a versioned suffix symbol.
> > With this fix, perf probe automatically cuts the
> > suffix after @ as below.
> > 
> >   =
> >   # ./perf probe -x /lib64/libc-2.25.so malloc*
> >   Added new events:
> > probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)
> 
> Thanks for working on this! I'm now going over it, and one thing I
> noticed was that the (on malloc*) on all the entries matched by that
> wildcard, can I suggest that you expand it there as well? I.e.
> 
>  probe_libc:malloc_set_state (on malloc_set_state in 
> /usr/lib64/libc-2.25.so)
> 

Hmm, the reason why I chose it was perf probe accepted multiple
probe points at once. e.g.

./perf probe -x /lib64/libc-2.25.so -a malloc* -a free* 

So, if we specify several probe points, I guess user will like to
see which events come from which one. 


> This way we'll now when aliases are used, and also for the versioning
> case, i.e. to which version is a probe pointing?

Currently we can know that by perf probe -l. I would recommend this way,
since -l can show you more precise information (and if it take a time
to read/analyze debuginfo, user can understand the reason why).

Thank you,

> 
> See also Paul Clarke's question and suggestion, which I agree, i.e.
> instead of chopping off the version, just replace the chars with valid
> ones or better, do what Paul suggests, be more flexible in interpreting
> @, i.e. if it is a number and/or fails to point to any file, interpret
> it as versioning.
> 
> - Arnaldo
> 
> >   You can now use it in all perf tools, such as:
> > 
> >   perf record -e probe_libc:malloc_set_state -aR sleep 1
> > 
> >   =
> > 
> > Signed-off-by: Masami Hiramatsu 
> > Reported-by: Arnaldo Carvalho de Melo 
> > Reported-by: bhargavb 
> > ---
> >  tools/perf/util/probe-event.c |4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
> > index c0067950e56f..74435fb7ab7f 100644
> > --- a/tools/perf/util/probe-event.c
> > +++ b/tools/perf/util/probe-event.c
> > @@ -2584,8 +2584,8 @@ static int get_new_event_name(char *buf, size_t len, 
> > const char *base,
> > if (!nbase)
> > return -ENOMEM;
> >  
> > -   /* Cut off the dot suffixes (e.g. .const, .isra)*/
> > -   p = strchr(nbase, '.');
> > +   /* Cut off the dot suffixes (e.g. .const, .isra) and version suffixes */
> > +   p = strpbrk(nbase, ".@");
> > if (p && p != nbase)
> > *p = '\0';
> >  


-- 
Masami Hiramatsu 


Re: [PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-07 Thread Masami Hiramatsu
On Thu, 7 Dec 2017 10:34:51 -0600
Paul Clarke  wrote:

> 
> 
> On 12/07/2017 01:20 AM, Masami Hiramatsu wrote:
> > Cut off the version suffix (e.g. @GLIBC_2.2.5 etc.) from
> > automatic generated event name. This fixes wildcard event
> > adding like below case;
> > 
> >   =
> >   # perf probe -x /lib64/libc-2.25.so malloc*
> >   Internal error: "malloc_get_state@GLIBC_2" is wrong event name.
> > Error: Failed to add events.
> >   =
> > 
> > This failure was caused by a versioned suffix symbol.
> > With this fix, perf probe automatically cuts the
> > suffix after @ as below.
> > 
> >   =
> >   # ./perf probe -x /lib64/libc-2.25.so malloc*
> >   Added new events:
> > probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)
> > 
> >   You can now use it in all perf tools, such as:
> > 
> >   perf record -e probe_libc:malloc_set_state -aR sleep 1
> > 
> >   =
> 
> I think this will still fall over for a case where there are multiple 
> versions of the same base symbol, like:
> 
> $ nm /lib64/libc.so.6 | egrep ' sched_getaffinity'
> 00134430 T sched_getaffinity@GLIBC_2.3.3
> 000dcf00 T sched_getaffinity@@GLIBC_2.3.4

No, in that case perf probe adds number suffix (_1, _2...) for new events :)

This feature (number suffix) is anyway required for the case that inlined
function is spreaded in multiple places. I think this is natural for perf probe.

Thank you,

> 
> Should we retain the versioning string in some form?  
> "sched_getaffinity--GLIBC_2.3.4"?  Should we instead interpret the '@' symbol 
> more flexibly, so maybe first assume it is a version string, and if not 
> found, try to see if it's a valid "@SRC" specification?
> 
> PC
> 


-- 
Masami Hiramatsu 


Re: [PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-07 Thread Masami Hiramatsu
On Thu, 7 Dec 2017 10:34:51 -0600
Paul Clarke  wrote:

> 
> 
> On 12/07/2017 01:20 AM, Masami Hiramatsu wrote:
> > Cut off the version suffix (e.g. @GLIBC_2.2.5 etc.) from
> > automatic generated event name. This fixes wildcard event
> > adding like below case;
> > 
> >   =
> >   # perf probe -x /lib64/libc-2.25.so malloc*
> >   Internal error: "malloc_get_state@GLIBC_2" is wrong event name.
> > Error: Failed to add events.
> >   =
> > 
> > This failure was caused by a versioned suffix symbol.
> > With this fix, perf probe automatically cuts the
> > suffix after @ as below.
> > 
> >   =
> >   # ./perf probe -x /lib64/libc-2.25.so malloc*
> >   Added new events:
> > probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
> > probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)
> > 
> >   You can now use it in all perf tools, such as:
> > 
> >   perf record -e probe_libc:malloc_set_state -aR sleep 1
> > 
> >   =
> 
> I think this will still fall over for a case where there are multiple 
> versions of the same base symbol, like:
> 
> $ nm /lib64/libc.so.6 | egrep ' sched_getaffinity'
> 00134430 T sched_getaffinity@GLIBC_2.3.3
> 000dcf00 T sched_getaffinity@@GLIBC_2.3.4

No, in that case perf probe adds number suffix (_1, _2...) for new events :)

This feature (number suffix) is anyway required for the case that inlined
function is spreaded in multiple places. I think this is natural for perf probe.

Thank you,

> 
> Should we retain the versioning string in some form?  
> "sched_getaffinity--GLIBC_2.3.4"?  Should we instead interpret the '@' symbol 
> more flexibly, so maybe first assume it is a version string, and if not 
> found, try to see if it's a valid "@SRC" specification?
> 
> PC
> 


-- 
Masami Hiramatsu 


Re: [PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-07 Thread Arnaldo Carvalho de Melo
Em Thu, Dec 07, 2017 at 11:24:47AM -0600, Paul Clarke escreveu:
> On 12/07/2017 10:56 AM, Arnaldo Carvalho de Melo wrote:
> > Em Thu, Dec 07, 2017 at 04:20:28PM +0900, Masami Hiramatsu escreveu:
> > See also Paul Clarke's question and suggestion, which I agree, i.e.
> > instead of chopping off the version, just replace the chars with valid
> > ones or better, do what Paul suggests, be more flexible in interpreting
> > @, i.e. if it is a number and/or fails to point to any file, interpret
> > it as versioning.
 
> It's a nit, and subjective, but I'd favor checking for versioning
> first, then file.  The namespaces are very unlikely to intersect, but
> I could foresee symbols like "sym@implA.c" and "sym@implB.c" more
> likely than a symbol in a file "GLIBC_2.2.5".
 
> Perhaps straying toward bikeshedding...

Nah, those are valid concerns, and I share them.

- Arnaldo


Re: [PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-07 Thread Arnaldo Carvalho de Melo
Em Thu, Dec 07, 2017 at 11:24:47AM -0600, Paul Clarke escreveu:
> On 12/07/2017 10:56 AM, Arnaldo Carvalho de Melo wrote:
> > Em Thu, Dec 07, 2017 at 04:20:28PM +0900, Masami Hiramatsu escreveu:
> > See also Paul Clarke's question and suggestion, which I agree, i.e.
> > instead of chopping off the version, just replace the chars with valid
> > ones or better, do what Paul suggests, be more flexible in interpreting
> > @, i.e. if it is a number and/or fails to point to any file, interpret
> > it as versioning.
 
> It's a nit, and subjective, but I'd favor checking for versioning
> first, then file.  The namespaces are very unlikely to intersect, but
> I could foresee symbols like "sym@implA.c" and "sym@implB.c" more
> likely than a symbol in a file "GLIBC_2.2.5".
 
> Perhaps straying toward bikeshedding...

Nah, those are valid concerns, and I share them.

- Arnaldo


Re: [PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-07 Thread Paul Clarke


On 12/07/2017 10:56 AM, Arnaldo Carvalho de Melo wrote:
> Em Thu, Dec 07, 2017 at 04:20:28PM +0900, Masami Hiramatsu escreveu:
>> Cut off the version suffix (e.g. @GLIBC_2.2.5 etc.) from
>> automatic generated event name. This fixes wildcard event
>> adding like below case;
>>
>>   =
>>   # perf probe -x /lib64/libc-2.25.so malloc*
>>   Internal error: "malloc_get_state@GLIBC_2" is wrong event name.
>> Error: Failed to add events.
>>   =
>>
>> This failure was caused by a versioned suffix symbol.
>> With this fix, perf probe automatically cuts the
>> suffix after @ as below.
>>
>>   =
>>   # ./perf probe -x /lib64/libc-2.25.so malloc*
>>   Added new events:
>> probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)
> 
> Thanks for working on this! I'm now going over it, and one thing I
> noticed was that the (on malloc*) on all the entries matched by that
> wildcard, can I suggest that you expand it there as well? I.e.
> 
>  probe_libc:malloc_set_state (on malloc_set_state in 
> /usr/lib64/libc-2.25.so)
> 
> This way we'll now when aliases are used, and also for the versioning
> case, i.e. to which version is a probe pointing?
> 
> See also Paul Clarke's question and suggestion, which I agree, i.e.
> instead of chopping off the version, just replace the chars with valid
> ones or better, do what Paul suggests, be more flexible in interpreting
> @, i.e. if it is a number and/or fails to point to any file, interpret
> it as versioning.

It's a nit, and subjective, but I'd favor checking for versioning first, then 
file.  The namespaces are very unlikely to intersect, but I could foresee 
symbols like "sym@implA.c" and "sym@implB.c" more likely than a symbol in a 
file "GLIBC_2.2.5".

Perhaps straying toward bikeshedding...

PC



Re: [PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-07 Thread Paul Clarke


On 12/07/2017 10:56 AM, Arnaldo Carvalho de Melo wrote:
> Em Thu, Dec 07, 2017 at 04:20:28PM +0900, Masami Hiramatsu escreveu:
>> Cut off the version suffix (e.g. @GLIBC_2.2.5 etc.) from
>> automatic generated event name. This fixes wildcard event
>> adding like below case;
>>
>>   =
>>   # perf probe -x /lib64/libc-2.25.so malloc*
>>   Internal error: "malloc_get_state@GLIBC_2" is wrong event name.
>> Error: Failed to add events.
>>   =
>>
>> This failure was caused by a versioned suffix symbol.
>> With this fix, perf probe automatically cuts the
>> suffix after @ as below.
>>
>>   =
>>   # ./perf probe -x /lib64/libc-2.25.so malloc*
>>   Added new events:
>> probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
>> probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)
> 
> Thanks for working on this! I'm now going over it, and one thing I
> noticed was that the (on malloc*) on all the entries matched by that
> wildcard, can I suggest that you expand it there as well? I.e.
> 
>  probe_libc:malloc_set_state (on malloc_set_state in 
> /usr/lib64/libc-2.25.so)
> 
> This way we'll now when aliases are used, and also for the versioning
> case, i.e. to which version is a probe pointing?
> 
> See also Paul Clarke's question and suggestion, which I agree, i.e.
> instead of chopping off the version, just replace the chars with valid
> ones or better, do what Paul suggests, be more flexible in interpreting
> @, i.e. if it is a number and/or fails to point to any file, interpret
> it as versioning.

It's a nit, and subjective, but I'd favor checking for versioning first, then 
file.  The namespaces are very unlikely to intersect, but I could foresee 
symbols like "sym@implA.c" and "sym@implB.c" more likely than a symbol in a 
file "GLIBC_2.2.5".

Perhaps straying toward bikeshedding...

PC



Re: [PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-07 Thread Arnaldo Carvalho de Melo
Em Thu, Dec 07, 2017 at 04:20:28PM +0900, Masami Hiramatsu escreveu:
> Cut off the version suffix (e.g. @GLIBC_2.2.5 etc.) from
> automatic generated event name. This fixes wildcard event
> adding like below case;
> 
>   =
>   # perf probe -x /lib64/libc-2.25.so malloc*
>   Internal error: "malloc_get_state@GLIBC_2" is wrong event name.
> Error: Failed to add events.
>   =
> 
> This failure was caused by a versioned suffix symbol.
> With this fix, perf probe automatically cuts the
> suffix after @ as below.
> 
>   =
>   # ./perf probe -x /lib64/libc-2.25.so malloc*
>   Added new events:
> probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)

Thanks for working on this! I'm now going over it, and one thing I
noticed was that the (on malloc*) on all the entries matched by that
wildcard, can I suggest that you expand it there as well? I.e.

 probe_libc:malloc_set_state (on malloc_set_state in 
/usr/lib64/libc-2.25.so)

This way we'll now when aliases are used, and also for the versioning
case, i.e. to which version is a probe pointing?

See also Paul Clarke's question and suggestion, which I agree, i.e.
instead of chopping off the version, just replace the chars with valid
ones or better, do what Paul suggests, be more flexible in interpreting
@, i.e. if it is a number and/or fails to point to any file, interpret
it as versioning.

- Arnaldo

>   You can now use it in all perf tools, such as:
> 
> perf record -e probe_libc:malloc_set_state -aR sleep 1
> 
>   =
> 
> Signed-off-by: Masami Hiramatsu 
> Reported-by: Arnaldo Carvalho de Melo 
> Reported-by: bhargavb 
> ---
>  tools/perf/util/probe-event.c |4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
> index c0067950e56f..74435fb7ab7f 100644
> --- a/tools/perf/util/probe-event.c
> +++ b/tools/perf/util/probe-event.c
> @@ -2584,8 +2584,8 @@ static int get_new_event_name(char *buf, size_t len, 
> const char *base,
>   if (!nbase)
>   return -ENOMEM;
>  
> - /* Cut off the dot suffixes (e.g. .const, .isra)*/
> - p = strchr(nbase, '.');
> + /* Cut off the dot suffixes (e.g. .const, .isra) and version suffixes */
> + p = strpbrk(nbase, ".@");
>   if (p && p != nbase)
>   *p = '\0';
>  


Re: [PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-07 Thread Arnaldo Carvalho de Melo
Em Thu, Dec 07, 2017 at 04:20:28PM +0900, Masami Hiramatsu escreveu:
> Cut off the version suffix (e.g. @GLIBC_2.2.5 etc.) from
> automatic generated event name. This fixes wildcard event
> adding like below case;
> 
>   =
>   # perf probe -x /lib64/libc-2.25.so malloc*
>   Internal error: "malloc_get_state@GLIBC_2" is wrong event name.
> Error: Failed to add events.
>   =
> 
> This failure was caused by a versioned suffix symbol.
> With this fix, perf probe automatically cuts the
> suffix after @ as below.
> 
>   =
>   # ./perf probe -x /lib64/libc-2.25.so malloc*
>   Added new events:
> probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)

Thanks for working on this! I'm now going over it, and one thing I
noticed was that the (on malloc*) on all the entries matched by that
wildcard, can I suggest that you expand it there as well? I.e.

 probe_libc:malloc_set_state (on malloc_set_state in 
/usr/lib64/libc-2.25.so)

This way we'll now when aliases are used, and also for the versioning
case, i.e. to which version is a probe pointing?

See also Paul Clarke's question and suggestion, which I agree, i.e.
instead of chopping off the version, just replace the chars with valid
ones or better, do what Paul suggests, be more flexible in interpreting
@, i.e. if it is a number and/or fails to point to any file, interpret
it as versioning.

- Arnaldo

>   You can now use it in all perf tools, such as:
> 
> perf record -e probe_libc:malloc_set_state -aR sleep 1
> 
>   =
> 
> Signed-off-by: Masami Hiramatsu 
> Reported-by: Arnaldo Carvalho de Melo 
> Reported-by: bhargavb 
> ---
>  tools/perf/util/probe-event.c |4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
> index c0067950e56f..74435fb7ab7f 100644
> --- a/tools/perf/util/probe-event.c
> +++ b/tools/perf/util/probe-event.c
> @@ -2584,8 +2584,8 @@ static int get_new_event_name(char *buf, size_t len, 
> const char *base,
>   if (!nbase)
>   return -ENOMEM;
>  
> - /* Cut off the dot suffixes (e.g. .const, .isra)*/
> - p = strchr(nbase, '.');
> + /* Cut off the dot suffixes (e.g. .const, .isra) and version suffixes */
> + p = strpbrk(nbase, ".@");
>   if (p && p != nbase)
>   *p = '\0';
>  


Re: [PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-07 Thread Paul Clarke


On 12/07/2017 01:20 AM, Masami Hiramatsu wrote:
> Cut off the version suffix (e.g. @GLIBC_2.2.5 etc.) from
> automatic generated event name. This fixes wildcard event
> adding like below case;
> 
>   =
>   # perf probe -x /lib64/libc-2.25.so malloc*
>   Internal error: "malloc_get_state@GLIBC_2" is wrong event name.
> Error: Failed to add events.
>   =
> 
> This failure was caused by a versioned suffix symbol.
> With this fix, perf probe automatically cuts the
> suffix after @ as below.
> 
>   =
>   # ./perf probe -x /lib64/libc-2.25.so malloc*
>   Added new events:
> probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)
> 
>   You can now use it in all perf tools, such as:
> 
> perf record -e probe_libc:malloc_set_state -aR sleep 1
> 
>   =

I think this will still fall over for a case where there are multiple versions 
of the same base symbol, like:

$ nm /lib64/libc.so.6 | egrep ' sched_getaffinity'
00134430 T sched_getaffinity@GLIBC_2.3.3
000dcf00 T sched_getaffinity@@GLIBC_2.3.4

Should we retain the versioning string in some form?  
"sched_getaffinity--GLIBC_2.3.4"?  Should we instead interpret the '@' symbol 
more flexibly, so maybe first assume it is a version string, and if not found, 
try to see if it's a valid "@SRC" specification?

PC



Re: [PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-07 Thread Paul Clarke


On 12/07/2017 01:20 AM, Masami Hiramatsu wrote:
> Cut off the version suffix (e.g. @GLIBC_2.2.5 etc.) from
> automatic generated event name. This fixes wildcard event
> adding like below case;
> 
>   =
>   # perf probe -x /lib64/libc-2.25.so malloc*
>   Internal error: "malloc_get_state@GLIBC_2" is wrong event name.
> Error: Failed to add events.
>   =
> 
> This failure was caused by a versioned suffix symbol.
> With this fix, perf probe automatically cuts the
> suffix after @ as below.
> 
>   =
>   # ./perf probe -x /lib64/libc-2.25.so malloc*
>   Added new events:
> probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
> probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)
> 
>   You can now use it in all perf tools, such as:
> 
> perf record -e probe_libc:malloc_set_state -aR sleep 1
> 
>   =

I think this will still fall over for a case where there are multiple versions 
of the same base symbol, like:

$ nm /lib64/libc.so.6 | egrep ' sched_getaffinity'
00134430 T sched_getaffinity@GLIBC_2.3.3
000dcf00 T sched_getaffinity@@GLIBC_2.3.4

Should we retain the versioning string in some form?  
"sched_getaffinity--GLIBC_2.3.4"?  Should we instead interpret the '@' symbol 
more flexibly, so maybe first assume it is a version string, and if not found, 
try to see if it's a valid "@SRC" specification?

PC



[PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-06 Thread Masami Hiramatsu
Cut off the version suffix (e.g. @GLIBC_2.2.5 etc.) from
automatic generated event name. This fixes wildcard event
adding like below case;

  =
  # perf probe -x /lib64/libc-2.25.so malloc*
  Internal error: "malloc_get_state@GLIBC_2" is wrong event name.
Error: Failed to add events.
  =

This failure was caused by a versioned suffix symbol.
With this fix, perf probe automatically cuts the
suffix after @ as below.

  =
  # ./perf probe -x /lib64/libc-2.25.so malloc*
  Added new events:
probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)

  You can now use it in all perf tools, such as:

  perf record -e probe_libc:malloc_set_state -aR sleep 1

  =

Signed-off-by: Masami Hiramatsu 
Reported-by: Arnaldo Carvalho de Melo 
Reported-by: bhargavb 
---
 tools/perf/util/probe-event.c |4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index c0067950e56f..74435fb7ab7f 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -2584,8 +2584,8 @@ static int get_new_event_name(char *buf, size_t len, 
const char *base,
if (!nbase)
return -ENOMEM;
 
-   /* Cut off the dot suffixes (e.g. .const, .isra)*/
-   p = strchr(nbase, '.');
+   /* Cut off the dot suffixes (e.g. .const, .isra) and version suffixes */
+   p = strpbrk(nbase, ".@");
if (p && p != nbase)
*p = '\0';
 



[PATCH v2 2/5] perf-probe: Cut off the version suffix from event name

2017-12-06 Thread Masami Hiramatsu
Cut off the version suffix (e.g. @GLIBC_2.2.5 etc.) from
automatic generated event name. This fixes wildcard event
adding like below case;

  =
  # perf probe -x /lib64/libc-2.25.so malloc*
  Internal error: "malloc_get_state@GLIBC_2" is wrong event name.
Error: Failed to add events.
  =

This failure was caused by a versioned suffix symbol.
With this fix, perf probe automatically cuts the
suffix after @ as below.

  =
  # ./perf probe -x /lib64/libc-2.25.so malloc*
  Added new events:
probe_libc:malloc_printerr (on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:malloc_consolidate (on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:malloc_check (on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:malloc_hook_ini (on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:malloc(on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:malloc_trim (on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:malloc_usable_size (on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:malloc_stats (on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:malloc_info (on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:mallochook (on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:malloc_get_state (on malloc* in /usr/lib64/libc-2.25.so)
probe_libc:malloc_set_state (on malloc* in /usr/lib64/libc-2.25.so)

  You can now use it in all perf tools, such as:

  perf record -e probe_libc:malloc_set_state -aR sleep 1

  =

Signed-off-by: Masami Hiramatsu 
Reported-by: Arnaldo Carvalho de Melo 
Reported-by: bhargavb 
---
 tools/perf/util/probe-event.c |4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index c0067950e56f..74435fb7ab7f 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -2584,8 +2584,8 @@ static int get_new_event_name(char *buf, size_t len, 
const char *base,
if (!nbase)
return -ENOMEM;
 
-   /* Cut off the dot suffixes (e.g. .const, .isra)*/
-   p = strchr(nbase, '.');
+   /* Cut off the dot suffixes (e.g. .const, .isra) and version suffixes */
+   p = strpbrk(nbase, ".@");
if (p && p != nbase)
*p = '\0';