• C
    perf stat: Add JSON output option · df936cad
    Claire Jensen 提交于
    CSV output is tricky to format and column layout changes are susceptible
    to breaking parsers. New JSON-formatted output has variable names to
    identify fields that are consistent and informative, making the output
    parseable.
    
    CSV output example:
    
      1.20,msec,task-clock:u,1204272,100.00,0.697,CPUs utilized
      0,,context-switches:u,1204272,100.00,0.000,/sec
      0,,cpu-migrations:u,1204272,100.00,0.000,/sec
      70,,page-faults:u,1204272,100.00,58.126,K/sec
    
    JSON output example:
    
      {"counter-value" : "3805.723968", "unit" : "msec", "event" :
      "cpu-clock", "event-runtime" : 3805731510100.00, "pcnt-running"
      : 100.00, "metric-value" : 4.007571, "metric-unit" : "CPUs utilized"}
      {"counter-value" : "6166.000000", "unit" : "", "event" :
      "context-switches", "event-runtime" : 3805723045100.00, "pcnt-running"
      : 100.00, "metric-value" : 1.620191, "metric-unit" : "K/sec"}
      {"counter-value" : "466.000000", "unit" : "", "event" :
      "cpu-migrations", "event-runtime" : 3805727613100.00, "pcnt-running"
      : 100.00, "metric-value" : 122.447136, "metric-unit" : "/sec"}
      {"counter-value" : "208.000000", "unit" : "", "event" :
      "page-faults", "event-runtime" : 3805726799100.00, "pcnt-running"
      : 100.00, "metric-value" : 54.654516, "metric-unit" : "/sec"}
    
    Also added documentation for JSON option.
    
    There is some tidy up of CSV code including a potential memory over run
    in the os.nfields set up. To facilitate this an AGGR_MAX value is added.
    
    Committer notes:
    
    Fixed up using PRIu64 to format u64 values, not %lu.
    
    Committer testing:
    
      ⬢[acme@toolbox perf]$ perf stat -j sleep 1
      {"counter-value" : "0.731750", "unit" : "msec", "event" : "task-clock:u", "event-runtime" : 731750, "pcnt-running" : 100.00, "metric-value" : 0.000731, "metric-unit" : "CPUs utilized"}
      {"counter-value" : "0.000000", "unit" : "", "event" : "context-switches:u", "event-runtime" : 731750, "pcnt-running" : 100.00, "metric-value" : 0.000000, "metric-unit" : "/sec"}
      {"counter-value" : "0.000000", "unit" : "", "event" : "cpu-migrations:u", "event-runtime" : 731750, "pcnt-running" : 100.00, "metric-value" : 0.000000, "metric-unit" : "/sec"}
      {"counter-value" : "75.000000", "unit" : "", "event" : "page-faults:u", "event-runtime" : 731750, "pcnt-running" : 100.00, "metric-value" : 102.494021, "metric-unit" : "K/sec"}
      {"counter-value" : "578765.000000", "unit" : "", "event" : "cycles:u", "event-runtime" : 379366, "pcnt-running" : 49.00, "metric-value" : 0.790933, "metric-unit" : "GHz"}
      {"counter-value" : "1298.000000", "unit" : "", "event" : "stalled-cycles-frontend:u", "event-runtime" : 768020, "pcnt-running" : 100.00, "metric-value" : 0.224271, "metric-unit" : "frontend cycles idle"}
      {"counter-value" : "21984.000000", "unit" : "", "event" : "stalled-cycles-backend:u", "event-runtime" : 768020, "pcnt-running" : 100.00, "metric-value" : 3.798433, "metric-unit" : "backend cycles idle"}
      {"counter-value" : "468197.000000", "unit" : "", "event" : "instructions:u", "event-runtime" : 768020, "pcnt-running" : 100.00, "metric-value" : 0.808959, "metric-unit" : "insn per cycle"}
      {"metric-value" : 0.046955, "metric-unit" : "stalled cycles per insn"}
      {"counter-value" : "103335.000000", "unit" : "", "event" : "branches:u", "event-runtime" : 768020, "pcnt-running" : 100.00, "metric-value" : 141.216262, "metric-unit" : "M/sec"}
      {"counter-value" : "2381.000000", "unit" : "", "event" : "branch-misses:u", "event-runtime" : 388654, "pcnt-running" : 50.00, "metric-value" : 2.304156, "metric-unit" : "of all branches"}
      ⬢[acme@toolbox perf]$
    Signed-off-by: NClaire Jensen <cjense@google.com>
    Acked-by: NNamhyung Kim <namhyung@kernel.org>
    Tested-by: NArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Alyssa Ross <hi@alyssa.is>
    Cc: Claire Jensen <clairej735@gmail.com>
    Cc: Florian Fischer <florian.fischer@muhq.space>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: James Clark <james.clark@arm.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Like Xu <likexu@tencent.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Sandipan Das <sandipan.das@amd.com>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Xing Zhengjun <zhengjun.xing@linux.intel.com>
    Link: https://lore.kernel.org/r/20220805200105.2020995-2-irogers@google.comSigned-off-by: NIan Rogers <irogers@google.com>
    Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
    df936cad
stat-display.c 38.1 KB