• Arnaldo Carvalho de Melo's avatar
    perf tools: Fix DSO filtering when not finding a map for a sampled address · c69bf11a
    Arnaldo Carvalho de Melo authored
    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
      $
      #
    
    Fixes: 96415e4d ("perf symbols: Avoid unnecessary symbol loading when dso list is specified")
    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>
    Link: http://lore.kernel.org/lkml/20210128131209.GD775562@kernel.org
    
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    c69bf11a
event.c 21.3 KB