summaryrefslogtreecommitdiffstats
path: root/tools/perf/util/stat-display.c
diff options
context:
space:
mode:
authorNamhyung Kim <namhyung@kernel.org>2022-12-06 18:58:04 +0100
committerArnaldo Carvalho de Melo <acme@redhat.com>2022-12-14 15:16:12 +0100
commitb897613510890d6e92b6a276a20f6c3d96fe90e8 (patch)
tree53620205bd48bf467aa340ad5a81d071ac62356d /tools/perf/util/stat-display.c
parentperf build: Fixes for LIBTRACEEVENT_DYNAMIC (diff)
downloadlinux-b897613510890d6e92b6a276a20f6c3d96fe90e8.tar.xz
linux-b897613510890d6e92b6a276a20f6c3d96fe90e8.zip
perf stat: Update event skip condition for system-wide per-thread mode and merged uncore and hybrid events
In print_counter_aggrdata(), it skips some events that has no aggregate count. It's actually for system-wide per-thread mode and merged uncore and hybrid events. Let's update the condition to check them explicitly. Fixes: 91f85f98da7ab8c3 ("perf stat: Display event stats using aggr counts") Reported-by: Athira Jajeev <atrajeev@linux.vnet.ibm.com> Signed-off-by: Namhyung Kim <namhyung@kernel.org> Acked-by: Athira Jajeev <atrajeev@linux.vnet.ibm.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Ian Rogers <irogers@google.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: James Clark <james.clark@arm.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Leo Yan <leo.yan@linaro.org> Cc: Michael Petlan <mpetlan@redhat.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Xing Zhengjun <zhengjun.xing@linux.intel.com> Link: https://lore.kernel.org/r/20221206175804.391387-1-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/stat-display.c')
-rw-r--r--tools/perf/util/stat-display.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/tools/perf/util/stat-display.c b/tools/perf/util/stat-display.c
index ead4915c4a03..8bd8b0142630 100644
--- a/tools/perf/util/stat-display.c
+++ b/tools/perf/util/stat-display.c
@@ -804,7 +804,8 @@ static void print_counter_aggrdata(struct perf_stat_config *config,
os->nr = aggr->nr;
os->evsel = counter;
- if (counter->supported && aggr->nr == 0)
+ /* Skip already merged uncore/hybrid events */
+ if (counter->merged_stat)
return;
uniquify_counter(config, counter);
@@ -813,6 +814,13 @@ static void print_counter_aggrdata(struct perf_stat_config *config,
ena = aggr->counts.ena;
run = aggr->counts.run;
+ /*
+ * Skip value 0 when enabling --per-thread globally, otherwise it will
+ * have too many 0 output.
+ */
+ if (val == 0 && config->aggr_mode == AGGR_THREAD && config->system_wide)
+ return;
+
if (!metric_only) {
if (config->json_output)
fputc('{', output);
@@ -889,9 +897,6 @@ static void print_aggr(struct perf_stat_config *config,
print_metric_begin(config, evlist, os, s);
evlist__for_each_entry(evlist, counter) {
- if (counter->merged_stat)
- continue;
-
print_counter_aggrdata(config, counter, s, os);
}
print_metric_end(config, os);
@@ -918,9 +923,6 @@ static void print_aggr_cgroup(struct perf_stat_config *config,
print_metric_begin(config, evlist, os, s);
evlist__for_each_entry(evlist, counter) {
- if (counter->merged_stat)
- continue;
-
if (counter->cgrp != os->cgrp)
continue;
@@ -940,9 +942,6 @@ static void print_counter(struct perf_stat_config *config,
if (!config->aggr_map)
return;
- if (counter->merged_stat)
- return;
-
for (s = 0; s < config->aggr_map->nr; s++) {
print_counter_aggrdata(config, counter, s, os);
}