• Jin Yao's avatar
    perf stat: Fix wrong per-thread runtime stat for interval mode · 72f02a94
    Jin Yao authored
      root@kbl-ppc:~# perf stat --per-thread -e cycles,instructions -I1000 --interval-count 2
           1.004171683             perf-3696              8,747,311      cycles
              ...
           1.004171683             perf-3696                691,730      instructions              #    0.08  insn per cycle
              ...
           2.006490373             perf-3696              1,749,936      cycles
              ...
           2.006490373             perf-3696              1,484,582      instructions              #    0.28  insn per cycle
              ...
    
    Let's see interval 2.006490373
    
      perf-3696              1,749,936      cycles
      perf-3696              1,484,582      instructions              #    0.28  insn per cycle
    
    insn per cycle = 1,484,582 / 1,749,936 = 0.85.
    
    But now it's 0.28, that's not correct.
    
    stat_config.stats[] records the per-thread runtime stat. But for
    interval mode, it should be reset for each interval.
    
    So now, with this patch,
    
      root@kbl-ppc:~# perf stat --per-thread -e cycles,instructions -I1000 --interval-count 2
           1.005818121             perf-8633              9,898,045      cycles
              ...
           1.005818121             perf-8633                693,298      instructions              #    0.07  insn per cycle
              ...
           2.007863743             perf-8633              1,551,619      cycles
              ...
           2.007863743             perf-8633              1,317,514      instructions              #    0.85  insn per cycle
              ...
    
    Let's check interval 2.007863743.
    
    insn per cycle = 1,317,514 / 1,551,619 = 0.85. It's correct.
    
    This patch creates runtime_stat_reset, places it next to
    untime_stat_new/runtime_stat_delete and moves all runtime_stat
    functions before process_interval.
    
    Committer testing:
    
    After the patch:
    
      # perf stat --per-thread -e cycles,instructions -I1000 --interval-count 2  |& grep sssd_nss-1130
         2.011309774  sssd_nss-1130   56,585  cycles
         2.011309774  sssd_nss-1130   13,121  instructions  # 0.23 insn per cycle
      # python
      >>> 13121.0 / 56585
      0.23188124061146947
      >>>
    
    Fixes: commit 14e72a21 ("perf stat: Update or print per-thread stats")
    Signed-off-by: default avatarJin Yao <yao.jin@linux.intel.com>
    Reviewed-by: default avatarJiri Olsa <jolsa@redhat.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Jin Yao <yao.jin@intel.com>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lore.kernel.org/lkml/20200520042737.24160-2-yao.jin@linux.intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    72f02a94
builtin-stat.c 58.4 KB