• Mike Galbraith's avatar
    perf_counter tools: Fix/resurrect perf top annotation in a simple interactive form · 923c42c1
    Mike Galbraith authored
    perf top used to have annotation support, but it has bitrotted and
    removed.
    
    This patch restores that: it allows the user to select any symbol
    in kernel space for source level annotation on the fly, switch
    between event counters and alter display variables. When symbol
    details are being displayed, stopping annotation reverts to normal.
    
    known keys:
            [d]     select display delay.
            [e]     select display entries (lines).
            [E]     select annotation event counter.
            [f]     select normal display count filter.
            [F]     select annotation display count filter (percentage).
            [qQ]    quit.
            [s]     select annotation symbol and start annotation.
            [S]     stop annotation, revert to normal display.
            [z]     toggle event count zeroing.
    
    Sample:
    ------------------------------------------------------------------------------
       PerfTop:   16719 irqs/sec  kernel:78.7% [cache-misses/cache-references/instructions/cycles],  (all, 4 CPUs)
    ------------------------------------------------------------------------------
    
    Showing cache-misses for e1000_clean_rx_irq
      Events  Pcnt (>=3%)
           0  0.0%                  /* adjust length to remove Ethernet CRC */
           0  0.0%                  if (!(adapter->flags2 & FLAG2_CRC_STRIPPING))
           0  0.0%                          length -= 4;
         436  5.0%      f039:       41 f6 84 24 5c 29 00    testb  $0x1,0x295c(%r12)
           0  0.0%      f089:       8b 4d 84                mov    -0x7c(%rbp),%ecx
           0  0.0%      f08c:       48 83 ef 02             sub    $0x2,%rdi
           0  0.0%      f090:       48 83 ee 02             sub    $0x2,%rsi
         811  9.3%      f094:       f3 a4                   rep movsb %ds:(%rsi),%es:(%rdi)
           0  0.0%
           0  0.0%          while (rx_desc->status & E1000_RXD_STAT_DD) {
           0  0.0%      f114:       41 f6 47 0c 01          testb  $0x1,0xc(%r15)
        7226 82.6%      f119:       0f 85 24 fe ff ff       jne    ef43 <e1000_clean_rx_irq+0x84>
    
    Available events:
            0 cache-misses
            1 cache-references
            2 instructions
            3 cycles
    Enter details event counter: 2
    ------------------------------------------------------------------------------
       PerfTop:   15035 irqs/sec  kernel:79.0% [cache-misses/cache-references/instructions/cycles],  (all, 4 CPUs)
    ------------------------------------------------------------------------------
    
    Showing instructions for e1000_clean_rx_irq
      Events  Pcnt (>=3%)
           0  0.0%                                 int *work_done, int work_to_do)
           0  0.0%  {
         175  0.9%      eebf:       55                      push   %rbp
        1898  9.8%      eec0:       48 89 e5                mov    %rsp,%rbp
           0  0.0%
           0  0.0%          i = rx_ring->next_to_clean;
         140  0.7%      ef0a:       0f b7 41 1a             movzwl 0x1a(%rcx),%eax
         670  3.4%      ef0e:       89 45 ac                mov    %eax,-0x54(%rbp)
           0  0.0%  {
           0  0.0%          memcpy(skb->data + offset, from, len);
          91  0.5%      f07b:       49 8b b6 e8 00 00 00    mov    0xe8(%r14),%rsi
        1153  5.9%      f082:       48 8b b8 e8 00 00 00    mov    0xe8(%rax),%rdi
          42  0.2%      f089:       8b 4d 84                mov    -0x7c(%rbp),%ecx
          14  0.1%      f08c:       48 83 ef 02             sub    $0x2,%rdi
           0  0.0%      f090:       48 83 ee 02             sub    $0x2,%rsi
        1618  8.3%      f094:       f3 a4                   rep movsb %ds:(%rsi),%es:(%rdi)
           0  0.0%
           0  0.0%                  /* return some buffers to hardware, one at a time is too slow */
           0  0.0%                  if (cleaned_count >= E1000_RX_BUFFER_WRITE) {
         867  4.5%      f0e7:       83 7d b0 0f             cmpl   $0xf,-0x50(%rbp)
           0  0.0%
           0  0.0%          while (rx_desc->status & E1000_RXD_STAT_DD) {
          37  0.2%      f114:       41 f6 47 0c 01          testb  $0x1,0xc(%r15)
        4047 20.8%      f119:       0f 85 24 fe ff ff       jne    ef43 <e1000_clean_rx_irq+0x84>
    Signed-off-by: default avatarMike Galbraith <efault@gmx.de>
    Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Paul Mackerras <paulus@samba.org>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    923c42c1
builtin-top.c 25.7 KB