• Jin Yao's avatar
    perf annotate: Support to display the IPC/Cycle in TUI mode · bb848c14
    Jin Yao authored
    Unlike the perf report interactive annotate mode, the perf annotate
    doesn't display the IPC/Cycle even if branch info is recorded in perf
    data file.
    
    perf record -b ...
    perf annotate function
    
    It should show IPC/cycle, but it doesn't.
    
    This patch lets perf annotate support the displaying of IPC/Cycle if
    branch info is in perf data.
    
    For example,
    
      perf annotate compute_flag
    
      Percent│ IPC Cycle
             │
             │
             │                Disassembly of section .text:
             │
             │                0000000000400640 <compute_flag>:
             │                compute_flag():
             │                volatile int count;
             │                static unsigned int s_randseed;
             │
             │                __attribute__((noinline))
             │                int compute_flag()
             │                {
       22.96 │1.18   584        sub    $0x8,%rsp
             │                        int i;
             │
             │                        i = rand() % 2;
       23.02 │1.18     1      → callq  rand@plt
             │
             │                        return i;
       27.05 │3.37              mov    %eax,%edx
             │                }
             │3.37              add    $0x8,%rsp
             │                {
             │                        int i;
             │
             │                        i = rand() % 2;
             │
             │                        return i;
             │3.37              shr    $0x1f,%edx
             │3.37              add    %edx,%eax
             │3.37              and    $0x1,%eax
             │3.37              sub    %edx,%eax
             │                }
       26.97 │3.37     2      ← retq
    
    Note that, this patch only supports TUI mode. For stdio, now it just keeps
    original behavior. Will support it in a follow-up patch.
    
      $ perf annotate compute_flag --stdio
    
       Percent |      Source code & Disassembly of div for cycles:ppp (7993 samples)
      ------------------------------------------------------------------------------
               :
               :
               :
               :            Disassembly of section .text:
               :
               :            0000000000400640 <compute_flag>:
               :            compute_flag():
               :            volatile int count;
               :            static unsigned int s_randseed;
               :
               :            __attribute__((noinline))
               :            int compute_flag()
               :            {
          0.29 :   400640:       sub    $0x8,%rsp     # +100.00%
               :                    int i;
               :
               :                    i = rand() % 2;
         42.93 :   400644:       callq  400490 <rand@plt>     # -100.00% (p:100.00%)
               :
               :                    return i;
          0.10 :   400649:       mov    %eax,%edx     # +100.00%
               :            }
          0.94 :   40064b:       add    $0x8,%rsp
               :            {
               :                    int i;
               :
               :                    i = rand() % 2;
               :
               :                    return i;
         27.02 :   40064f:       shr    $0x1f,%edx
          0.15 :   400652:       add    %edx,%eax
          1.24 :   400654:       and    $0x1,%eax
          2.08 :   400657:       sub    %edx,%eax
               :            }
         25.26 :   400659:       retq # -100.00% (p:100.00%)
    Signed-off-by: default avatarJin Yao <yao.jin@linux.intel.com>
    Acked-by: default avatarAndi Kleen <ak@linux.intel.com>
    Link: http://lkml.kernel.org/r/20180223170210.GC7045@tassilo.jf.intel.com
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lkml.kernel.org/r/1519724327-7773-1-git-send-email-yao.jin@linux.intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    bb848c14
builtin-annotate.c 15.4 KB