From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753026AbbCaIEb (ORCPT ); Tue, 31 Mar 2015 04:04:31 -0400 Received: from mail7.hitachi.co.jp ([133.145.228.42]:38130 "EHLO mail7.hitachi.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750781AbbCaIEY (ORCPT ); Tue, 31 Mar 2015 04:04:24 -0400 Message-ID: <551A5502.4070905@hitachi.com> Date: Tue, 31 Mar 2015 17:04:18 +0900 From: Masami Hiramatsu Organization: Hitachi, Ltd., Japan User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20120614 Thunderbird/13.0.1 MIME-Version: 1.0 To: Arnaldo Carvalho de Melo CC: Jiri Olsa , Ingo Molnar , Namhyung Kim , Peter Zijlstra , David Ahern , linux-kernel@vger.kernel.org, Martin Cermak Subject: Re: [RFC] perf probe: -x option position issue References: <20150330174655.GA27546@krava.redhat.com> <20150330194849.GH32560@kernel.org> In-Reply-To: <20150330194849.GH32560@kernel.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org (2015/03/31 4:48), Arnaldo Carvalho de Melo wrote: > Em Mon, Mar 30, 2015 at 07:46:55PM +0200, Jiri Olsa escreveu: >> hi, >> Martin found out following issue.. having following ex binary: >> >> --- >> int main(void) >> { >> return 0; >> } >> --- >> >> following will create uprobe on main: >> >> [root@dell-per510-01 perf]# gcc -g -o ex ex.c >> [root@dell-per510-01 perf]# ./perf probe -x ./ex -a main >> Added new event: >> probe_ex:main (on main in /root/linux/tools/perf/ex) >> >> You can now use it in all perf tools, such as: >> >> perf record -e probe_ex:main -aR sleep 1 >> >> [root@dell-per510-01 perf]# cat /sys/kernel/debug/tracing/uprobe_events >> p:probe_ex/main /root/linux/tools/perf/ex:0x00000000000004f6 >> >> >> while following will create (?) kprobe with complain in dmesg: > > Right, it looks like it will create the probe on the currently selected > DSO, which, if you have none, will be the kernel, thus the kprobe > (probe:main), while if you do a '-x ./ex -a main' you are selecting the > 'ex' DSO and then asking for the probe to be added to a function named > 'main', on that DSO, that 'perf probe' realizes is a userspace binary, > thus creates a uprobe: probe_%DSONAME:%FUNCTIONAME. Right, but this looks strange and not easy to expect. > > I wonder if I can do: > > [root@ssdandy acme]# perf probe -a icmp_rcv -x ./ex -a main > Probe point 'icmp_rcv' not found. > Error: Failed to add events. Ah, this should be fixed. Even with multiple -x, it fails. # ./perf probe -x /usr/lib64/libc-2.17.so -a malloc -x ./perf -a main usage: perf probe [] 'PROBEDEF' ['PROBEDEF' ...] or: perf probe [] --add 'PROBEDEF' [--add 'PROBEDEF' ...] or: perf probe [] --del '[GROUP:]EVENT' ... or: perf probe --list or: perf probe [] --line 'LINEDESC' or: perf probe [] --vars 'PROBEPOINT' -x, --exec target executable name or path ... I'd like to start with setting up the event only on single binary, and showing appropriate error message. > No, I can't, I'd say we should support that, i.e. inserting multiple > probes per command line, for different DSOs, etc. I.e. the above would > be equivalent to these two calls: > > [root@ssdandy acme]# perf probe -a icmp_rcv > Added new event: > probe:icmp_rcv (on icmp_rcv) > > You can now use it in all perf tools, such as: > > perf record -e probe:icmp_rcv -aR sleep 1 > > [root@ssdandy acme]# perf probe -x ./ex -a main > Added new event: > probe_ex:main (on main in /home/acme/ex) > > You can now use it in all perf tools, such as: > > perf record -e probe_ex:main -aR sleep 1 > > [root@ssdandy acme]# OK, finally we should support that. > But it isn't like that, so, yes, what you report is a bug, both for your > expectation (that I think is that it should put a uprobes with both your > examples) and for mine (that it would add the first to the kernel, and > the second to the selected DSO via -x). Yes, both are bugs. I'll fix that. BTW, let me check that the below behaviors are OK for you. perf probe -x BIN -a XXX -> setup XXX on BIN perf probe -a XXX -x BIN -> setup XXX on BIN perf probe -a XXX -x BIN -a YYY -> setup XXX on kernel and YYY on BIN perf probe -x BIN -a XXX -x BIN2 -a YYY -> setup XXX on BIN and YYY on BIN2 Thank you, > > - Arnaldo > >> [root@dell-per510-01 perf]# gcc -g -o ex ex.c >> [root@dell-per510-01 perf]# ./perf probe -a main -x ./ex >> Added new event: >> probe:main (on main in ex) >> >> You can now use it in all perf tools, such as: >> >> perf record -e probe:main -aR sleep 1 >> >> [root@dell-per510-01 perf]# dmesg | tail -2 >> [16986.182159] Could not insert probe at ex:main+0: -2 >> [16986.187030] This probe might be able to register aftertarget module is loaded. Continue. >> >> >> that does not seem as an expected behaviour, or am I missing something? >> >> thanks, >> jirka > -- Masami HIRAMATSU Software Platform Research Dept. Linux Technology Research Center Hitachi, Ltd., Yokohama Research Laboratory E-mail: masami.hiramatsu.pt@hitachi.com