• Taeung Song's avatar
    perf annotate: Fix a bug of division by zero when calculating percent · 2e933b12
    Taeung Song authored
    Currently perf-annotate with --print-line can print
    -nan(0x8000000000000) because of division by zero when calculating
    percent. The division by zero happens when a sum of samples is zero in
    symbol__get_source_line(), so fix it.
    
    For example:
    
    After running 'perf record' like below,
    
        $ perf record -e "{cycles,page-faults,branch-misses}" ./a.out
    
    Before:
    
        $ perf annotate --stdio -l
    
      Sorted summary for file /home/taeung/workspace/a.out
      ----------------------------------------------
    
       32.89    -nan    7.04 a.c:38
       25.14    -nan    0.00 a.c:34
       16.26    -nan   56.34 a.c:31
       15.88    -nan    1.41 a.c:37
        5.67    -nan    0.00 a.c:39
        1.13    -nan   35.21 a.c:26
        0.95    -nan    0.00 a.c:44
        0.57    -nan    0.00 a.c:32
       Percent                 |      Source code & Disassembly of a.out for cycles (529 samples)
      -----------------------------------------------------------------------------------------
                             :
      ...
    
       a.c:26    0.57    -nan    4.23 :         40081a:       mov    %edi,-0x24(%rbp)
       a.c:26    0.00    -nan    9.86 :         40081d:       mov    %rsi,-0x30(%rbp)
    
      ...
    
    However, if a sum of samples is zero (e.g. 'page-faults'),
    skip calculating percent.
    
    After:
    
        $ perf annotate --stdio -l
    
      Sorted summary for file /home/taeung/workspace/a.out
      ----------------------------------------------
    
       32.89    0.00    7.04 a.c:38
       25.14    0.00    0.00 a.c:34
       16.26    0.00   56.34 a.c:31
       15.88    0.00    1.41 a.c:37
        5.67    0.00    0.00 a.c:39
        1.13    0.00   35.21 a.c:26
        0.95    0.00    0.00 a.c:44
        0.57    0.00    0.00 a.c:32
       Percent                 |      Source code & Disassembly of old for cycles (529 samples)
      -----------------------------------------------------------------------------------------
                             :
      ...
    
      a.c:26    0.57    0.00    4.23 :         40081a:       mov    %edi,-0x24(%rbp)
      a.c:26    0.00    0.00    9.86 :         40081d:       mov    %rsi,-0x30(%rbp)
    
      ...
    Signed-off-by: default avatarTaeung Song <treeze.taeung@gmail.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Wang Nan <wangnan0@huawei.com>
    Link: http://lkml.kernel.org/r/1490598638-13947-3-git-send-email-treeze.taeung@gmail.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    2e933b12
annotate.c 43.8 KB