• Jin Yao's avatar
    perf report: Fix wrong jump arrow · b40982e8
    Jin Yao authored
    When we use perf report interactive annotate view, we can see
    the position of jump arrow is not correct. For example,
    
    1. perf record -b ...
    2. perf report
    3. In interactive mode, select Annotate 'function'
    
    Percent│ IPC Cycle
           │                                if (flag)
      1.37 │0.4┌──   1      ↓ je     82
           │   │                                    x += x / y + y / x;
      0.00 │0.4│  1310        movsd  (%rsp),%xmm0
      0.00 │0.4│   565        movsd  0x8(%rsp),%xmm4
           │0.4│              movsd  0x8(%rsp),%xmm1
           │0.4│              movsd  (%rsp),%xmm3
           │0.4│              divsd  %xmm4,%xmm0
      0.00 │0.4│   579        divsd  %xmm3,%xmm1
           │0.4│              movsd  (%rsp),%xmm2
           │0.4│              addsd  %xmm1,%xmm0
           │0.4│              addsd  %xmm2,%xmm0
      0.00 │0.4│              movsd  %xmm0,(%rsp)
           │   │                    volatile double x = 1212121212, y = 121212;
           │   │
           │   │                    s_randseed = time(0);
           │   │                    srand(s_randseed);
           │   │
           │   │                    for (i = 0; i < 2000000000; i++) {
      1.37 │0.4└─→      82:   sub    $0x1,%ebx
     28.21 │0.48    17      ↑ jne    38
    
    The jump arrow in above example is not correct. It should add the
    width of IPC and Cycle.
    
    With this patch, the result is:
    
    Percent│ IPC Cycle
           │                                if (flag)
      1.37 │0.48     1     ┌──je     82
           │               │                        x += x / y + y / x;
      0.00 │0.48  1310     │  movsd  (%rsp),%xmm0
      0.00 │0.48   565     │  movsd  0x8(%rsp),%xmm4
           │0.48           │  movsd  0x8(%rsp),%xmm1
           │0.48           │  movsd  (%rsp),%xmm3
           │0.48           │  divsd  %xmm4,%xmm0
      0.00 │0.48   579     │  divsd  %xmm3,%xmm1
           │0.48           │  movsd  (%rsp),%xmm2
           │0.48           │  addsd  %xmm1,%xmm0
           │0.48           │  addsd  %xmm2,%xmm0
      0.00 │0.48           │  movsd  %xmm0,(%rsp)
           │               │        volatile double x = 1212121212, y = 121212;
           │               │
           │               │        s_randseed = time(0);
           │               │        srand(s_randseed);
           │               │
           │               │        for (i = 0; i < 2000000000; i++) {
      1.37 │0.48        82:└─→sub    $0x1,%ebx
     28.21 │0.48    17      ↑ jne    38
    
    Committer notes:
    
    Please note that only from LBRv5 (according to Jiri) onwards, i.e. >=
    Skylake is that we'll have the cycles counts in each branch record
    entry, so to see the Cycles and IPC columns, and be able to test this
    patch, one need a capable hardware.
    
    While applying this I first tested it on a Broadwell class machine and
    couldn't get those columns, will add code to the annotate browser to
    warn the user about that, i.e. you have branch records, but no cycles,
    use a more recent hardware to get the cycles and IPC columns.
    Signed-off-by: default avatarJin Yao <yao.jin@linux.intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Jin Yao <yao.jin@intel.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Kan Liang <kan.liang@intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lkml.kernel.org/r/1517223473-14750-1-git-send-email-yao.jin@linux.intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    b40982e8
annotate.c 31.9 KB