• Jin Yao's avatar
    perf stat: Align CSV output for summary mode · 0bdad978
    Jin Yao authored
    The 'perf stat' subcommand supports the request for a summary of the
    interval counter readings.  But the summary lines break the CSV output
    so it's hard for scripts to parse the result.
    
    Before:
    
      # perf stat -x, -I1000 --interval-count 1 --summary
           1.001323097,8013.48,msec,cpu-clock,8013483384,100.00,8.013,CPUs utilized
           1.001323097,270,,context-switches,8013513297,100.00,0.034,K/sec
           1.001323097,13,,cpu-migrations,8013530032,100.00,0.002,K/sec
           1.001323097,184,,page-faults,8013546992,100.00,0.023,K/sec
           1.001323097,20574191,,cycles,8013551506,100.00,0.003,GHz
           1.001323097,10562267,,instructions,8013564958,100.00,0.51,insn per cycle
           1.001323097,2019244,,branches,8013575673,100.00,0.252,M/sec
           1.001323097,106152,,branch-misses,8013585776,100.00,5.26,of all branches
      8013.48,msec,cpu-clock,8013483384,100.00,7.984,CPUs utilized
      270,,context-switches,8013513297,100.00,0.034,K/sec
      13,,cpu-migrations,8013530032,100.00,0.002,K/sec
      184,,page-faults,8013546992,100.00,0.023,K/sec
      20574191,,cycles,8013551506,100.00,0.003,GHz
      10562267,,instructions,8013564958,100.00,0.51,insn per cycle
      2019244,,branches,8013575673,100.00,0.252,M/sec
      106152,,branch-misses,8013585776,100.00,5.26,of all branches
    
    The summary line loses the timestamp column, which breaks the CSV
    output.
    
    We add a column at the original 'timestamp' position and it just says
    'summary' for the summary line.
    
    After:
    
      # perf stat -x, -I1000 --interval-count 1 --summary
           1.001196053,8012.72,msec,cpu-clock,8012722903,100.00,8.013,CPUs utilized
           1.001196053,218,,context-switches,8012753271,100.00,0.027,K/sec
           1.001196053,9,,cpu-migrations,8012769767,100.00,0.001,K/sec
           1.001196053,0,,page-faults,8012786257,100.00,0.000,K/sec
           1.001196053,15004518,,cycles,8012790637,100.00,0.002,GHz
           1.001196053,7954691,,instructions,8012804027,100.00,0.53,insn per cycle
           1.001196053,1590259,,branches,8012814766,100.00,0.198,M/sec
           1.001196053,82601,,branch-misses,8012824365,100.00,5.19,of all branches
               summary,8012.72,msec,cpu-clock,8012722903,100.00,7.986,CPUs utilized
               summary,218,,context-switches,8012753271,100.00,0.027,K/sec
               summary,9,,cpu-migrations,8012769767,100.00,0.001,K/sec
               summary,0,,page-faults,8012786257,100.00,0.000,K/sec
               summary,15004518,,cycles,8012790637,100.00,0.002,GHz
               summary,7954691,,instructions,8012804027,100.00,0.53,insn per cycle
               summary,1590259,,branches,8012814766,100.00,0.198,M/sec
               summary,82601,,branch-misses,8012824365,100.00,5.19,of all branches
    
    Now it's easy for script to analyse the summary lines.
    
    Of course, we also consider not to break possible existing scripts which
    can continue to use the broken CSV format by using a new '--no-csv-summary.'
    option.
    
      # perf stat -x, -I1000 --interval-count 1 --summary --no-csv-summary
           1.001213261,8012.67,msec,cpu-clock,8012672327,100.00,8.013,CPUs utilized
           1.001213261,197,,context-switches,8012703742,100.00,24.586,/sec
           1.001213261,9,,cpu-migrations,8012720902,100.00,1.123,/sec
           1.001213261,644,,page-faults,8012738266,100.00,80.373,/sec
           1.001213261,18350698,,cycles,8012744109,100.00,0.002,GHz
           1.001213261,12745021,,instructions,8012759001,100.00,0.69,insn per cycle
           1.001213261,2458033,,branches,8012770864,100.00,306.768,K/sec
           1.001213261,102107,,branch-misses,8012781751,100.00,4.15,of all branches
      8012.67,msec,cpu-clock,8012672327,100.00,7.985,CPUs utilized
      197,,context-switches,8012703742,100.00,24.586,/sec
      9,,cpu-migrations,8012720902,100.00,1.123,/sec
      644,,page-faults,8012738266,100.00,80.373,/sec
      18350698,,cycles,8012744109,100.00,0.002,GHz
      12745021,,instructions,8012759001,100.00,0.69,insn per cycle
      2458033,,branches,8012770864,100.00,306.768,K/sec
      102107,,branch-misses,8012781751,100.00,4.15,of all branches
    
    This option can be enabled in perf config by setting the variable
    'stat.no-csv-summary'.
    
      # perf config stat.no-csv-summary=true
    
      # perf config -l
      stat.no-csv-summary=true
    
      # perf stat -x, -I1000 --interval-count 1 --summary
           1.001330198,8013.28,msec,cpu-clock,8013279201,100.00,8.013,CPUs utilized
           1.001330198,205,,context-switches,8013308394,100.00,25.583,/sec
           1.001330198,10,,cpu-migrations,8013324681,100.00,1.248,/sec
           1.001330198,0,,page-faults,8013340926,100.00,0.000,/sec
           1.001330198,8027742,,cycles,8013344503,100.00,0.001,GHz
           1.001330198,2871717,,instructions,8013356501,100.00,0.36,insn per cycle
           1.001330198,553564,,branches,8013366204,100.00,69.081,K/sec
           1.001330198,54021,,branch-misses,8013375952,100.00,9.76,of all branches
      8013.28,msec,cpu-clock,8013279201,100.00,7.985,CPUs utilized
      205,,context-switches,8013308394,100.00,25.583,/sec
      10,,cpu-migrations,8013324681,100.00,1.248,/sec
      0,,page-faults,8013340926,100.00,0.000,/sec
      8027742,,cycles,8013344503,100.00,0.001,GHz
      2871717,,instructions,8013356501,100.00,0.36,insn per cycle
      553564,,branches,8013366204,100.00,69.081,K/sec
      54021,,branch-misses,8013375952,100.00,9.76,of all branches
    Signed-off-by: default avatarJin Yao <yao.jin@linux.intel.com>
    Acked-by: default avatarAndi Kleen <ak@linux.intel.com>
    Acked-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: 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/20210319070156.20394-1-yao.jin@linux.intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    0bdad978
builtin-stat.c 67.3 KB