Commit 462f57db authored by Namhyung Kim's avatar Namhyung Kim Committed by Arnaldo Carvalho de Melo
Browse files

perf report: Print percentage of each event statistics



It's sometimes useful to see how many samples vs other events in the
data file with percent values.

  $ perf report --stat

  Aggregated stats:
             TOTAL events:      20064
              MMAP events:        239  ( 1.2%)
              COMM events:       1518  ( 7.6%)
              EXIT events:          1  ( 0.0%)
              FORK events:       1517  ( 7.6%)
            SAMPLE events:       4015  (20.0%)
             MMAP2 events:      12769  (63.6%)
    FINISHED_ROUND events:          2  ( 0.0%)
        THREAD_MAP events:          1  ( 0.0%)
           CPU_MAP events:          1  ( 0.0%)
         TIME_CONV events:          1  ( 0.0%)
  cycles stats:
            SAMPLE events:       2475
  instructions stats:
            SAMPLE events:       1540

Suggested-by: default avatarAndi Kleen <ak@linux.intel.com>
Reviewed-by: default avatarAndi Kleen <ak@linux.intel.com>
Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/20210427013717.1651674-7-namhyung@kernel.org


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 8f08cf33
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -902,6 +902,7 @@ size_t events_stats__fprintf(struct events_stats *stats, FILE *fp,
{
	int i;
	size_t ret = 0;
	u32 total = stats->nr_events[0];

	for (i = 0; i < PERF_RECORD_HEADER_MAX; ++i) {
		const char *name;
@@ -912,7 +913,14 @@ size_t events_stats__fprintf(struct events_stats *stats, FILE *fp,
		if (skip_empty && !stats->nr_events[i])
			continue;

		ret += fprintf(fp, "%16s events: %10d\n", name, stats->nr_events[i]);
		if (i && total) {
			ret += fprintf(fp, "%16s events: %10d  (%4.1f%%)\n",
				       name, stats->nr_events[i],
				       100.0 * stats->nr_events[i] / total);
		} else {
			ret += fprintf(fp, "%16s events: %10d\n",
				       name, stats->nr_events[i]);
		}
	}

	return ret;