• Namhyung Kim's avatar
    perf annotate: Fix --group behavior when leader has no samples · 336989d0
    Namhyung Kim authored
    When --group option is used, it should display all events together.  But
    the current logic only checks if the first (leader) event has samples or
    not.  Let's check the member events as well.
    
    Also it missed to put the linked samples from member evsels to the
    output RB-tree so that it can be displayed in the output.
    
    For example, take a look at this example.
    
      $ ./perf evlist
      cpu/mem-loads,ldlat=30/P
      cpu/mem-stores/P
      dummy:u
    
    It has three events but 'path_put' function has samples only for
    mem-stores (second) event.
    
      $ sudo ./perf annotate --stdio -f path_put
       Percent |      Source code & Disassembly of kcore for cpu/mem-stores/P (2 samples, percent: local period)
      ----------------------------------------------------------------------------------------------------------
               : 0                0xffffffffae600020 <path_put>:
          0.00 :   ffffffffae600020:       endbr64
          0.00 :   ffffffffae600024:       nopl    (%rax, %rax)
         91.22 :   ffffffffae600029:       pushq   %rbx
          0.00 :   ffffffffae60002a:       movq    %rdi, %rbx
          0.00 :   ffffffffae60002d:       movq    8(%rdi), %rdi
          8.78 :   ffffffffae600031:       callq   0xffffffffae614aa0
          0.00 :   ffffffffae600036:       movq    (%rbx), %rdi
          0.00 :   ffffffffae600039:       popq    %rbx
          0.00 :   ffffffffae60003a:       jmp     0xffffffffae620670
          0.00 :   ffffffffae60003f:       nop
    
    Therefore, it didn't show up when --group option is used since the
    leader ("mem-loads") event has no samples.  But now it checks both
    events.
    
    Before:
      $ sudo ./perf annotate --stdio -f --group path_put
      (no output)
    
    After:
      $ sudo ./perf annotate --stdio -f --group path_put
       Percent                 |      Source code & Disassembly of kcore for cpu/mem-loads,ldlat=30/P, cpu/mem-stores/P, dummy:u (0 samples, percent: local period)
      -------------------------------------------------------------------------------------------------------------------------------------------------------------
                               : 0                0xffffffffae600020 <path_put>:
          0.00    0.00    0.00 :   ffffffffae600020:       endbr64
          0.00    0.00    0.00 :   ffffffffae600024:       nopl    (%rax, %rax)
          0.00   91.22    0.00 :   ffffffffae600029:       pushq   %rbx
          0.00    0.00    0.00 :   ffffffffae60002a:       movq    %rdi, %rbx
          0.00    0.00    0.00 :   ffffffffae60002d:       movq    8(%rdi), %rdi
          0.00    8.78    0.00 :   ffffffffae600031:       callq   0xffffffffae614aa0
          0.00    0.00    0.00 :   ffffffffae600036:       movq    (%rbx), %rdi
          0.00    0.00    0.00 :   ffffffffae600039:       popq    %rbx
          0.00    0.00    0.00 :   ffffffffae60003a:       jmp     0xffffffffae620670
          0.00    0.00    0.00 :   ffffffffae60003f:       nop
    
    Committer testing:
    
    Before:
    
      root@number:~# perf annotate --group --stdio2 clear_page_erms
      root@number:~#
    
    After:
    
      root@number:~# perf annotate --group --stdio2 clear_page_erms
      Samples: 125  of events 'cpu_atom/mem-loads,ldlat=30/P, cpu_atom/mem-stores/P, dummy:u', 4000 Hz, Event count (approx.): 13198416, [percent: local period]
      clear_page_erms() /proc/kcore
      Percent                      0xffffffff990c6cc0 <clear_page_erms>:
                                     endbr64
                                     movl    $0x1000,%ecx
                                     xorl    %eax,%eax
         0.00  100.00    0.00        rep     stosb %al, (%rdi)
                                   ← retq
                                     int3
                                     int3
                                     int3
                                     int3
                                     nop
                                     nop
      root@number:~#
    Reported-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lore.kernel.org/lkml/20240807061555.1642669-1-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    336989d0
builtin-annotate.c 24.6 KB