Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf record: Support custom vmlinux path

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 uses '--vmlinux' for vmlinux path.

Documentation is also updated.

Test result:

In a production (or broken) environment:
(by:
# rm -rf ~/.debug/
# mv /lib/modules/`uname -r`/build/vmlinux /tmp/
)

# ./perf record -e ./test_bpf_base.c ls
Failed to find the path for kernel: No such file or directory
event syntax error: './test_bpf_base.c'
\___ You need to check probing points in BPF file
...

# ./perf record --vmlinux /tmp/vmlinux -e ./test_bpf_base.c ls
...
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.011 MB perf.data ]

Help messages when build with NO_LIBBPF:

# ./perf record -h
--transaction sample transaction flags (special events only)
--vmlinux <file> vmlinux pathname
(not built-in because NO_LIBBPF=1)
# ./perf record --vmlinux /tmp/vmlinux ls /
Warning: option `vmlinux' is being ignored because NO_LIBBPF=1
...
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.011 MB perf.data (11 samples) ]

Help messages when build with NO_DWARF:

# ./perf record -h
--transaction sample transaction flags (special events only)
--vmlinux <file> vmlinux pathname
(not built-in because NO_DWARF=1)

Signed-off-by: He Kuang <hekuang@huawei.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
Link: http://lkml.kernel.org/r/1450089563-122430-15-git-send-email-wangnan0@huawei.com
Signed-off-by: Wang Nan <wangnan0@huawei.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

He Kuang and committed by
Arnaldo Carvalho de Melo
7efe0e03 48e1cab1

+24 -2
+8 -2
tools/perf/Documentation/perf-record.txt
··· 314 314 Record context switch events i.e. events of type PERF_RECORD_SWITCH or 315 315 PERF_RECORD_SWITCH_CPU_WIDE. 316 316 317 - --clang-path:: 317 + --clang-path=PATH:: 318 318 Path to clang binary to use for compiling BPF scriptlets. 319 + (enabled when BPF support is on) 319 320 320 - --clang-opt:: 321 + --clang-opt=OPTIONS:: 321 322 Options passed to clang when compiling BPF scriptlets. 323 + (enabled when BPF support is on) 324 + 325 + --vmlinux=PATH:: 326 + Specify vmlinux path which has debuginfo. 327 + (enabled when BPF prologue is on) 322 328 323 329 SEE ALSO 324 330 --------
+16
tools/perf/builtin-record.c
··· 1117 1117 "clang binary to use for compiling BPF scriptlets"), 1118 1118 OPT_STRING(0, "clang-opt", &llvm_param.clang_opt, "clang options", 1119 1119 "options passed to clang when compiling BPF scriptlets"), 1120 + OPT_STRING(0, "vmlinux", &symbol_conf.vmlinux_name, 1121 + "file", "vmlinux pathname"), 1120 1122 OPT_END() 1121 1123 }; 1122 1124 ··· 1135 1133 set_nobuild('\0', "clang-path", true); 1136 1134 set_nobuild('\0', "clang-opt", true); 1137 1135 # undef set_nobuild 1136 + #endif 1137 + 1138 + #ifndef HAVE_BPF_PROLOGUE 1139 + # if !defined (HAVE_DWARF_SUPPORT) 1140 + # define REASON "NO_DWARF=1" 1141 + # elif !defined (HAVE_LIBBPF_SUPPORT) 1142 + # define REASON "NO_LIBBPF=1" 1143 + # else 1144 + # define REASON "this architecture doesn't support BPF prologue" 1145 + # endif 1146 + # define set_nobuild(s, l, c) set_option_nobuild(record_options, s, l, REASON, c) 1147 + set_nobuild('\0', "vmlinux", true); 1148 + # undef set_nobuild 1149 + # undef REASON 1138 1150 #endif 1139 1151 1140 1152 rec->evlist = perf_evlist__new();