Em Mon, Jan 25, 2021 at 07:27:50AM +0800, Jin Yao escreveu: > Other perf tool builtins have already supported dso filter. > > For example, > perf report --dso, which only considers symbols in these dsos. > > Now dso filter is supported for perf-script. > > root@kbl-ppc:~# ./perf script --dso "[kernel.kallsyms]" > perf 18123 [000] 6142863.075104: 1 cycles: > ffffffff9ca77308 native_write_msr+0x8 ([kernel.kallsyms]) > perf 18123 [000] 6142863.075107: 1 cycles: > ffffffff9ca77308 native_write_msr+0x8 ([kernel.kallsyms]) > perf 18123 [000] 6142863.075108: 10 cycles: > ffffffff9ca77308 native_write_msr+0x8 ([kernel.kallsyms]) > perf 18123 [000] 6142863.075109: 273 cycles: > ffffffff9ca7730a native_write_msr+0xa ([kernel.kallsyms]) > perf 18123 [000] 6142863.075110: 7684 cycles: > ffffffff9ca3c9c0 native_sched_clock+0x50 ([kernel.kallsyms]) > perf 18123 [000] 6142863.075112: 213017 cycles: > ffffffff9d765a92 syscall_exit_to_user_mode+0x32 ([kernel.kallsyms]) > perf 18123 [001] 6142863.075156: 1 cycles: > ffffffff9ca77308 native_write_msr+0x8 ([kernel.kallsyms]) > perf 18123 [001] 6142863.075158: 1 cycles: > ffffffff9ca77308 native_write_msr+0x8 ([kernel.kallsyms]) > perf 18123 [001] 6142863.075159: 17 cycles: > ffffffff9ca77308 native_write_msr+0x8 ([kernel.kallsyms])
Applied, and in testing it I noticed this fix was also needed, added just before it, please ack :-) - Arnaldo commit d4b6078bd58b799a8ea2a57842193504c867bee5 Author: Arnaldo Carvalho de Melo <[email protected]> Date: Thu Jan 28 09:52:47 2021 -0300 perf tools: Fix DSO filtering when not finding a map for a sampled address When we lookup an address and don't find a map we should filter that sample if the user specified a list of --dso entries to filter on, fix it. Before: $ perf script sleep 274800 2843.556162: 1 cycles:u: ffffffffbb26bff4 [unknown] ([unknown]) sleep 274800 2843.556168: 1 cycles:u: ffffffffbb2b047d [unknown] ([unknown]) sleep 274800 2843.556171: 1 cycles:u: ffffffffbb2706b2 [unknown] ([unknown]) sleep 274800 2843.556174: 6 cycles:u: ffffffffbb2b0267 [unknown] ([unknown]) sleep 274800 2843.556176: 59 cycles:u: ffffffffbb2b03b1 [unknown] ([unknown]) sleep 274800 2843.556180: 691 cycles:u: ffffffffbb26bff4 [unknown] ([unknown]) sleep 274800 2843.556189: 9160 cycles:u: 7fa9550eeaa3 __GI___tunables_init+0xf3 (/usr/lib64/ld-2.32.so) sleep 274800 2843.556312: 86937 cycles:u: 7fa9550e157b _dl_lookup_symbol_x+0x4b (/usr/lib64/ld-2.32.so) $ So we have some samples we somehow didn't find in a map for, if we now do: $ perf report --stdio --dso /usr/lib64/ld-2.32.so # dso: /usr/lib64/ld-2.32.so # # Total Lost Samples: 0 # # Samples: 8 of event 'cycles:u' # Event count (approx.): 96856 # # Overhead Command Symbol # ........ ....... ........................ # 89.76% sleep [.] _dl_lookup_symbol_x 9.46% sleep [.] __GI___tunables_init 0.71% sleep [k] 0xffffffffbb26bff4 0.06% sleep [k] 0xffffffffbb2b03b1 0.01% sleep [k] 0xffffffffbb2b0267 0.00% sleep [k] 0xffffffffbb2706b2 0.00% sleep [k] 0xffffffffbb2b047d $ After this patch we get the right output with just entries for the DSOs specified in --dso: $ perf report --stdio --dso /usr/lib64/ld-2.32.so # dso: /usr/lib64/ld-2.32.so # # Total Lost Samples: 0 # # Samples: 8 of event 'cycles:u' # Event count (approx.): 96856 # # Overhead Command Symbol # ........ ....... ........................ # 89.76% sleep [.] _dl_lookup_symbol_x 9.46% sleep [.] __GI___tunables_init $ # To display the perf.data header info, please use --header/--header-only options. # Cc: Alexander Shishkin <[email protected]> Cc: Andi Kleen <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Jin Yao <[email protected]> Cc: Jiri Olsa <[email protected]> Cc: Kan Liang <[email protected]> Cc: Namhyung Kim <[email protected]> Cc: Peter Zijlstra <[email protected]> Fixes: 96415e4d3f5fdf9c ("perf symbols: Avoid unnecessary symbol loading when dso list is specified") Signed-off-by: Arnaldo Carvalho de Melo <[email protected]> diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index fbe8578e4c475773..208b6c141d98bb5d 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c @@ -692,6 +692,8 @@ int machine__resolve(struct machine *machine, struct addr_location *al, } al->sym = map__find_symbol(al->map, al->addr); + } else if (symbol_conf.dso_list) { + al->filtered |= (1 << HIST_FILTER__DSO); } if (symbol_conf.sym_list) {

