All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Paul Clarke <pc@us.ibm.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>,
	bhargavb <bhargavaramudu@gmail.com>,
	linux-kernel@vger.kernel.org,
	Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>,
	linux-rt-users@vger.kernel.org, linux-perf-users@vger.kernel.org
Subject: Re: [PATCH v2 2/5] perf-probe: Cut off the version suffix from event name
Date: Mon, 11 Dec 2017 15:25:47 -0300	[thread overview]
Message-ID: <20171211182547.GH3958@kernel.org> (raw)
In-Reply-To: <3cfc7d95-0956-3e7b-9d36-db5bda9dc753@us.ibm.com>

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 <pc@us.ibm.com> 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'
> >> 0000000000134430 T sched_getaffinity@GLIBC_2.3.3
> >> 00000000000dcf00 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 malloc_get_state
0000000000151ba0 T malloc_get_state@GLIBC_2.2.5
[acme@jouet perf]$

For your example it finds two symbols, adds two but I couldn't find a
simple way of mapping one to the other, would be nice if 'perf probe -l'
showed them like 'nm' does.

[root@jouet ~]# nm /lib64/libc-2.25.so | grep ' sched_getaffinity'
0000000000151cd0 T sched_getaffinity@GLIBC_2.3.3
00000000000f3c10 T sched_getaffinity@@GLIBC_2.3.4
[root@jouet ~]#

[root@jouet ~]# perf probe -x /lib64/libc-2.25.so sched_getaffinity*
Added new events:
  probe_libc:sched_getaffinity (on sched_getaffinity* in /usr/lib64/libc-2.25.so)
  probe_libc:sched_getaffinity_1 (on sched_getaffinity* in /usr/lib64/libc-2.25.so)

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

	perf record -e probe_libc:sched_getaffinity_1 -aR sleep 1

[root@jouet ~]# perf probe -l
  probe_libc:sched_getaffinity (on 0x5fd95e7c in /usr/lib64/libc-2.25.so)
  probe_libc:sched_getaffinity_1 (on 0xd8d51601 in /usr/lib64/libc-2.25.so)
[root@jouet ~]#

  parent reply	other threads:[~2017-12-11 18:27 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-07  7:19 [PATCH v2 0/5] perf-probe: Improve probing on versioned symbols Masami Hiramatsu
2017-12-07  7:19 ` [PATCH v2 1/5] perf-probe: Add warning message if there is unexpected event name Masami Hiramatsu
2017-12-07 15:53   ` Arnaldo Carvalho de Melo
2017-12-08  2:48     ` Masami Hiramatsu
2017-12-07  7:20 ` [PATCH v2 2/5] perf-probe: Cut off the version suffix from " Masami Hiramatsu
2017-12-07 16:34   ` Paul Clarke
2017-12-08  3:01     ` Masami Hiramatsu
2017-12-08 14:49       ` Paul Clarke
2017-12-08 16:12         ` Masami Hiramatsu
2017-12-11 18:25         ` Arnaldo Carvalho de Melo [this message]
2017-12-12 15:02           ` Masami Hiramatsu
2017-12-07 16:56   ` Arnaldo Carvalho de Melo
2017-12-07 17:24     ` Paul Clarke
2017-12-07 17:55       ` Arnaldo Carvalho de Melo
2017-12-08  3:15     ` Masami Hiramatsu
2017-12-07  7:20 ` [PATCH v2 3/5] perf-probe: Add __return suffix for return events Masami Hiramatsu
2017-12-07  7:21 ` [PATCH v2 4/5] perf-probe: Find versioned symbols from map Masami Hiramatsu
2017-12-08 11:08   ` Thomas-Mich Richter
2017-12-08 14:22     ` Masami Hiramatsu
2017-12-07  7:21 ` [PATCH v2 5/5] perf-probe: Support escaped character in parser Masami Hiramatsu
2017-12-08 11:45   ` Thomas-Mich Richter
2017-12-08 15:54     ` Masami Hiramatsu
2017-12-07 12:47 ` [PATCH v2 0/5] perf-probe: Improve probing on versioned symbols Ravi Bangoria
2017-12-08 16:24   ` Masami Hiramatsu
2017-12-08 17:13     ` Ravi Bangoria
2017-12-08 11:56 ` Thomas-Mich Richter
2017-12-08 16:12   ` Masami Hiramatsu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171211182547.GH3958@kernel.org \
    --to=acme@kernel.org \
    --cc=bhargavaramudu@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=linux-rt-users@vger.kernel.org \
    --cc=mhiramat@kernel.org \
    --cc=pc@us.ibm.com \
    --cc=ravi.bangoria@linux.vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.