diff mbox

[27/31] perf record: Support custom vmlinux path

Message ID 1440822125-52691-28-git-send-email-wangnan0@huawei.com
State New
Headers show

Commit Message

Wang Nan Aug. 29, 2015, 4:22 a.m. UTC
From: He Kuang <hekuang@huawei.com>

Make perf-record command support --vmlinux option if BPF_PROLOGUE is on.

'perf record' needs vmlinux as the source of DWARF info to generate
prologue for BPF programs, so path of vmlinux should be specified.

Short name 'k' has been taken by 'clockid'. This patch skips the short
option name and use '--vmlinux' for vmlinux path.

Signed-off-by: He Kuang <hekuang@huawei.com>
Signed-off-by: Wang Nan <wangnan0@huawei.com>
Cc: Alexei Starovoitov <ast@plumgrid.com>
Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: David Ahern <dsahern@gmail.com>
Cc: He Kuang <hekuang@huawei.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kaixu Xia <xiakaixu@huawei.com>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Link: http://lkml.kernel.org/n/1436445342-1402-38-git-send-email-wangnan0@huawei.com
---
 tools/perf/builtin-record.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Arnaldo Carvalho de Melo Sept. 1, 2015, 8:19 p.m. UTC | #1
Em Sat, Aug 29, 2015 at 04:22:01AM +0000, Wang Nan escreveu:
> From: He Kuang <hekuang@huawei.com>
> 
> Make perf-record command support --vmlinux option if BPF_PROLOGUE is on.

Ok, this should be supported, i.e. letting the user specify a vmlinux
path to use.

But it shouldn't be _required_, i.e. we have things like vmlinux_path to
try to find it in well known places.

Right now it will search for it in the process of trying to load its
symtab, but I think we should have a function that tries to find a
vmlinux that matches the build-id of the running kernel, for things that
want to have access directly to the ELF file with debuginfo without
having to load the symtab in a struct dso, etc.

I'll look at the next patches to check how you make use of this info...

- Arnaldo

> 'perf record' needs vmlinux as the source of DWARF info to generate
> prologue for BPF programs, so path of vmlinux should be specified.
> 
> Short name 'k' has been taken by 'clockid'. This patch skips the short
> option name and use '--vmlinux' for vmlinux path.
> 
> Signed-off-by: He Kuang <hekuang@huawei.com>
> Signed-off-by: Wang Nan <wangnan0@huawei.com>
> Cc: Alexei Starovoitov <ast@plumgrid.com>
> Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
> Cc: Daniel Borkmann <daniel@iogearbox.net>
> Cc: David Ahern <dsahern@gmail.com>
> Cc: He Kuang <hekuang@huawei.com>
> Cc: Jiri Olsa <jolsa@kernel.org>
> Cc: Kaixu Xia <xiakaixu@huawei.com>
> Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
> Cc: Namhyung Kim <namhyung@kernel.org>
> Cc: Paul Mackerras <paulus@samba.org>
> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
> Cc: Zefan Li <lizefan@huawei.com>
> Cc: pi3orama@163.com
> Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
> Link: http://lkml.kernel.org/n/1436445342-1402-38-git-send-email-wangnan0@huawei.com
> ---
>  tools/perf/builtin-record.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
> index 212718c..8eb39d5 100644
> --- a/tools/perf/builtin-record.c
> +++ b/tools/perf/builtin-record.c
> @@ -1100,6 +1100,10 @@ struct option __record_options[] = {
>  		   "clang binary to use for compiling BPF scriptlets"),
>  	OPT_STRING(0, "clang-opt", &llvm_param.clang_opt, "clang options",
>  		   "options passed to clang when compiling BPF scriptlets"),
> +#ifdef HAVE_BPF_PROLOGUE
> +	OPT_STRING(0, "vmlinux", &symbol_conf.vmlinux_name,
> +		   "file", "vmlinux pathname"),
> +#endif
>  #endif
>  	OPT_END()
>  };
> -- 
> 2.1.0
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
Arnaldo Carvalho de Melo Sept. 1, 2015, 8:21 p.m. UTC | #2
Em Tue, Sep 01, 2015 at 05:19:17PM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Sat, Aug 29, 2015 at 04:22:01AM +0000, Wang Nan escreveu:
> > From: He Kuang <hekuang@huawei.com>
> > 
> > Make perf-record command support --vmlinux option if BPF_PROLOGUE is on.
> 
> Ok, this should be supported, i.e. letting the user specify a vmlinux
> path to use.
> 
> But it shouldn't be _required_, i.e. we have things like vmlinux_path to
> try to find it in well known places.
> 
> Right now it will search for it in the process of trying to load its
> symtab, but I think we should have a function that tries to find a
> vmlinux that matches the build-id of the running kernel, for things that
> want to have access directly to the ELF file with debuginfo without
> having to load the symtab in a struct dso, etc.
> 
> I'll look at the next patches to check how you make use of this info...

So, the do it all from 'perf record' is in not yet in this patchkit,
right? At least not in [ N/31 ] with N > 27, can you point me to it?

- Arnaldo
 
> - Arnaldo
> 
> > 'perf record' needs vmlinux as the source of DWARF info to generate
> > prologue for BPF programs, so path of vmlinux should be specified.
> > 
> > Short name 'k' has been taken by 'clockid'. This patch skips the short
> > option name and use '--vmlinux' for vmlinux path.
> > 
> > Signed-off-by: He Kuang <hekuang@huawei.com>
> > Signed-off-by: Wang Nan <wangnan0@huawei.com>
> > Cc: Alexei Starovoitov <ast@plumgrid.com>
> > Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
> > Cc: Daniel Borkmann <daniel@iogearbox.net>
> > Cc: David Ahern <dsahern@gmail.com>
> > Cc: He Kuang <hekuang@huawei.com>
> > Cc: Jiri Olsa <jolsa@kernel.org>
> > Cc: Kaixu Xia <xiakaixu@huawei.com>
> > Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
> > Cc: Namhyung Kim <namhyung@kernel.org>
> > Cc: Paul Mackerras <paulus@samba.org>
> > Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
> > Cc: Zefan Li <lizefan@huawei.com>
> > Cc: pi3orama@163.com
> > Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
> > Link: http://lkml.kernel.org/n/1436445342-1402-38-git-send-email-wangnan0@huawei.com
> > ---
> >  tools/perf/builtin-record.c | 4 ++++
> >  1 file changed, 4 insertions(+)
> > 
> > diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
> > index 212718c..8eb39d5 100644
> > --- a/tools/perf/builtin-record.c
> > +++ b/tools/perf/builtin-record.c
> > @@ -1100,6 +1100,10 @@ struct option __record_options[] = {
> >  		   "clang binary to use for compiling BPF scriptlets"),
> >  	OPT_STRING(0, "clang-opt", &llvm_param.clang_opt, "clang options",
> >  		   "options passed to clang when compiling BPF scriptlets"),
> > +#ifdef HAVE_BPF_PROLOGUE
> > +	OPT_STRING(0, "vmlinux", &symbol_conf.vmlinux_name,
> > +		   "file", "vmlinux pathname"),
> > +#endif
> >  #endif
> >  	OPT_END()
> >  };
> > -- 
> > 2.1.0
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
pi3orama Sept. 1, 2015, 9 p.m. UTC | #3
发自我的 iPhone

> 在 2015年9月2日,上午4:21,Arnaldo Carvalho de Melo <acme@redhat.com> 写道:
> 
> Em Tue, Sep 01, 2015 at 05:19:17PM -0300, Arnaldo Carvalho de Melo escreveu:
>> Em Sat, Aug 29, 2015 at 04:22:01AM +0000, Wang Nan escreveu:
>>> From: He Kuang <hekuang@huawei.com>
>>> 
>>> Make perf-record command support --vmlinux option if BPF_PROLOGUE is on.
>> 
>> Ok, this should be supported, i.e. letting the user specify a vmlinux
>> path to use.
>> 
>> But it shouldn't be _required_, i.e. we have things like vmlinux_path to
>> try to find it in well known places.
>> 
>> Right now it will search for it in the process of trying to load its
>> symtab, but I think we should have a function that tries to find a
>> vmlinux that matches the build-id of the running kernel, for things that
>> want to have access directly to the ELF file with debuginfo without
>> having to load the symtab in a struct dso, etc.
>> 
>> I'll look at the next patches to check how you make use of this info...
> 
> So, the do it all from 'perf record' is in not yet in this patchkit,
> right? At least not in [ N/31 ] with N > 27, can you point me to it?
> 

It is for patch 8/31, which create kprobe points using add_perf_probe_events().

Before this patch it won't search debug info, prevent us use argument like this:

SEC("lock_page=lock_page page->flags")

or probe at line number, expect it finds a valid vmlinux from the default path.

Thank you.

> - Arnaldo
> 
>> - Arnaldo
>> 
>>> 'perf record' needs vmlinux as the source of DWARF info to generate
>>> prologue for BPF programs, so path of vmlinux should be specified.
>>> 
>>> Short name 'k' has been taken by 'clockid'. This patch skips the short
>>> option name and use '--vmlinux' for vmlinux path.
>>> 
>>> Signed-off-by: He Kuang <hekuang@huawei.com>
>>> Signed-off-by: Wang Nan <wangnan0@huawei.com>
>>> Cc: Alexei Starovoitov <ast@plumgrid.com>
>>> Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
>>> Cc: Daniel Borkmann <daniel@iogearbox.net>
>>> Cc: David Ahern <dsahern@gmail.com>
>>> Cc: He Kuang <hekuang@huawei.com>
>>> Cc: Jiri Olsa <jolsa@kernel.org>
>>> Cc: Kaixu Xia <xiakaixu@huawei.com>
>>> Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
>>> Cc: Namhyung Kim <namhyung@kernel.org>
>>> Cc: Paul Mackerras <paulus@samba.org>
>>> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
>>> Cc: Zefan Li <lizefan@huawei.com>
>>> Cc: pi3orama@163.com
>>> Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
>>> Link: http://lkml.kernel.org/n/1436445342-1402-38-git-send-email-wangnan0@huawei.com
>>> ---
>>> tools/perf/builtin-record.c | 4 ++++
>>> 1 file changed, 4 insertions(+)
>>> 
>>> diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
>>> index 212718c..8eb39d5 100644
>>> --- a/tools/perf/builtin-record.c
>>> +++ b/tools/perf/builtin-record.c
>>> @@ -1100,6 +1100,10 @@ struct option __record_options[] = {
>>>           "clang binary to use for compiling BPF scriptlets"),
>>>    OPT_STRING(0, "clang-opt", &llvm_param.clang_opt, "clang options",
>>>           "options passed to clang when compiling BPF scriptlets"),
>>> +#ifdef HAVE_BPF_PROLOGUE
>>> +    OPT_STRING(0, "vmlinux", &symbol_conf.vmlinux_name,
>>> +           "file", "vmlinux pathname"),
>>> +#endif
>>> #endif
>>>    OPT_END()
>>> };
>>> -- 
>>> 2.1.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
Arnaldo Carvalho de Melo Sept. 1, 2015, 9:33 p.m. UTC | #4
Em Wed, Sep 02, 2015 at 05:00:39AM +0800, pi3orama escreveu:
> 发自我的 iPhone
> > 在 2015年9月2日,上午4:21,Arnaldo Carvalho de Melo <acme@redhat.com> 写道:
> > Em Tue, Sep 01, 2015 at 05:19:17PM -0300, Arnaldo Carvalho de Melo escreveu:
> >> Em Sat, Aug 29, 2015 at 04:22:01AM +0000, Wang Nan escreveu:
> >>> From: He Kuang <hekuang@huawei.com>

> >>> Make perf-record command support --vmlinux option if BPF_PROLOGUE is on.

> >> Ok, this should be supported, i.e. letting the user specify a vmlinux
> >> path to use.

> >> But it shouldn't be _required_, i.e. we have things like vmlinux_path to
> >> try to find it in well known places.

> >> Right now it will search for it in the process of trying to load its
> >> symtab, but I think we should have a function that tries to find a
> >> vmlinux that matches the build-id of the running kernel, for things that
> >> want to have access directly to the ELF file with debuginfo without
> >> having to load the symtab in a struct dso, etc.

> >> I'll look at the next patches to check how you make use of this info...
> > 
> > So, the do it all from 'perf record' is in not yet in this patchkit,
> > right? At least not in [ N/31 ] with N > 27, can you point me to it?
 
> It is for patch 8/31, which create kprobe points using add_perf_probe_events().
> 
> Before this patch it won't search debug info, prevent us use argument like this:
> 
> SEC("lock_page=lock_page page->flags")
> 
> or probe at line number, expect it finds a valid vmlinux from the default path.

Argh, that is because init_symbol_maps() uses symbol__init() that is
also being used in 'perf record' by now... I.e. it was designed to be
called just once, at tool start :-\

Will have to get my head around how this is being used to try to
untangle this mess...

- Arnaldo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
diff mbox

Patch

diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index 212718c..8eb39d5 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -1100,6 +1100,10 @@  struct option __record_options[] = {
 		   "clang binary to use for compiling BPF scriptlets"),
 	OPT_STRING(0, "clang-opt", &llvm_param.clang_opt, "clang options",
 		   "options passed to clang when compiling BPF scriptlets"),
+#ifdef HAVE_BPF_PROLOGUE
+	OPT_STRING(0, "vmlinux", &symbol_conf.vmlinux_name,
+		   "file", "vmlinux pathname"),
+#endif
 #endif
 	OPT_END()
 };