lkml.org 
[lkml]   [2021]   [Jan]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH 2/2] perf script: Support dso filter
From
Date
Hi Arnaldo,

On 1/28/2021 9:12 PM, Arnaldo Carvalho de Melo wrote:
> 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 <acme@redhat.com>
> 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 <alexander.shishkin@linux.intel.com>
> Cc: Andi Kleen <ak@linux.intel.com>
> Cc: Ingo Molnar <mingo@redhat.com>
> Cc: Jin Yao <yao.jin@linux.intel.com>
> Cc: Jiri Olsa <jolsa@kernel.org>
> Cc: Kan Liang <kan.liang@intel.com>
> Cc: Namhyung Kim <namhyung@kernel.org>
> Cc: Peter Zijlstra <peterz@infradead.org>
> Fixes: 96415e4d3f5fdf9c ("perf symbols: Avoid unnecessary symbol loading when dso list is specified")
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
>
> 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) {
>

This fix guarantees the "[unknown]" dso is filtered when we enable "--dso" option (whatever the dso
list in --dso).

Acked-by: Jin Yao (yao.jin@linux.intel.com>

Thanks
Jin Yao

\
 
 \ /
  Last update: 2021-01-29 01:42    [W:0.062 / U:0.452 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site