linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Namhyung Kim <namhyung@kernel.org>
To: Arnaldo Carvalho de Melo <acme@kernel.org>, Jiri Olsa <jolsa@kernel.org>
Cc: Ingo Molnar <mingo@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Ian Rogers <irogers@google.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	linux-perf-users@vger.kernel.org,
	Kan Liang <kan.liang@linux.intel.com>,
	Leo Yan <leo.yan@linaro.org>, Andi Kleen <ak@linux.intel.com>,
	Athira Rajeev <atrajeev@linux.vnet.ibm.com>,
	James Clark <james.clark@arm.com>,
	Xing Zhengjun <zhengjun.xing@linux.intel.com>
Subject: [PATCH 18/19] perf stat: Display percore events properly
Date: Sun,  9 Oct 2022 22:35:59 -0700	[thread overview]
Message-ID: <20221010053600.272854-19-namhyung@kernel.org> (raw)
In-Reply-To: <20221010053600.272854-1-namhyung@kernel.org>

The recent change in the perf stat broke the percore event display.
Note that the aggr counts are already processed so that the every
sibling thread in the same core will get the per-core counter values.

Check percore evsels and skip the sibling threads in the display.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/builtin-stat.c      | 16 ----------------
 tools/perf/util/stat-display.c | 27 +++++++++++++++++++++++++--
 2 files changed, 25 insertions(+), 18 deletions(-)

diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index d92815f4eae0..b3a39d4c86a7 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -1403,18 +1403,6 @@ static struct aggr_cpu_id perf_stat__get_cpu_cached(struct perf_stat_config *con
 	return perf_stat__get_aggr(config, perf_stat__get_cpu, cpu);
 }
 
-static bool term_percore_set(void)
-{
-	struct evsel *counter;
-
-	evlist__for_each_entry(evsel_list, counter) {
-		if (counter->percore)
-			return true;
-	}
-
-	return false;
-}
-
 static aggr_cpu_id_get_t aggr_mode__get_aggr(enum aggr_mode aggr_mode)
 {
 	switch (aggr_mode) {
@@ -1427,8 +1415,6 @@ static aggr_cpu_id_get_t aggr_mode__get_aggr(enum aggr_mode aggr_mode)
 	case AGGR_NODE:
 		return aggr_cpu_id__node;
 	case AGGR_NONE:
-		if (term_percore_set())
-			return aggr_cpu_id__core;
 		return aggr_cpu_id__cpu;;
 	case AGGR_GLOBAL:
 		return aggr_cpu_id__global;
@@ -1452,8 +1438,6 @@ static aggr_get_id_t aggr_mode__get_id(enum aggr_mode aggr_mode)
 	case AGGR_NODE:
 		return perf_stat__get_node_cached;
 	case AGGR_NONE:
-		if (term_percore_set())
-			return perf_stat__get_core_cached;
 		return perf_stat__get_cpu_cached;
 	case AGGR_GLOBAL:
 		return perf_stat__get_global_cached;
diff --git a/tools/perf/util/stat-display.c b/tools/perf/util/stat-display.c
index 0c0e22c175a1..e0c0df99d40d 100644
--- a/tools/perf/util/stat-display.c
+++ b/tools/perf/util/stat-display.c
@@ -1094,7 +1094,8 @@ static void print_percore(struct perf_stat_config *config,
 {
 	bool metric_only = config->metric_only;
 	FILE *output = config->output;
-	int s;
+	struct cpu_aggr_map *core_map;
+	int s, c, i;
 	bool first = true;
 
 	if (!config->aggr_map || !config->aggr_get_id)
@@ -1103,13 +1104,35 @@ static void print_percore(struct perf_stat_config *config,
 	if (config->percore_show_thread)
 		return print_counter(config, counter, prefix);
 
-	for (s = 0; s < config->aggr_map->nr; s++) {
+	core_map = cpu_aggr_map__empty_new(config->aggr_map->nr);
+	if (core_map == NULL) {
+		fprintf(output, "Cannot allocate per-core aggr map for display\n");
+		return;
+	}
+
+	for (s = 0, c = 0; s < config->aggr_map->nr; s++) {
+		struct perf_cpu curr_cpu = config->aggr_map->map[s].cpu;
+		struct aggr_cpu_id core_id = aggr_cpu_id__core(curr_cpu, NULL);
+		bool found = false;
+
+		for (i = 0; i < c; i++) {
+			if (aggr_cpu_id__equal(&core_map->map[i], &core_id)) {
+				found = true;
+				break;
+			}
+		}
+		if (found)
+			continue;
+
 		if (prefix && metric_only)
 			fprintf(output, "%s", prefix);
 
 		print_counter_aggrdata(config, counter, s,
 				       prefix, metric_only, &first);
+
+		core_map->map[c++] = core_id;
 	}
+	free(core_map);
 
 	if (metric_only)
 		fputc('\n', output);
-- 
2.38.0.rc1.362.ged0d419d3c-goog


  parent reply	other threads:[~2022-10-10  5:37 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-10  5:35 [RFC/PATCHSET 00/19] perf stat: Cleanup counter aggregation (v1) Namhyung Kim
2022-10-10  5:35 ` [PATCH 01/19] perf tools: Save evsel->pmu in parse_events() Namhyung Kim
2022-10-10 22:21   ` Ian Rogers
2022-10-10  5:35 ` [PATCH 02/19] perf tools: Use pmu info in evsel__is_hybrid() Namhyung Kim
2022-10-10 22:31   ` Ian Rogers
2022-10-11  5:10     ` Namhyung Kim
2022-10-10  5:35 ` [PATCH 03/19] perf stat: Use evsel__is_hybrid() more Namhyung Kim
2022-10-10 22:32   ` Ian Rogers
2022-10-10  5:35 ` [PATCH 04/19] perf stat: Add aggr id for global mode Namhyung Kim
2022-10-10 22:46   ` Ian Rogers
2022-10-11 23:08     ` Namhyung Kim
2022-10-12 10:55   ` Jiri Olsa
2022-10-12 16:31     ` Namhyung Kim
2022-10-10  5:35 ` [PATCH 05/19] perf stat: Add cpu aggr id for no aggregation mode Namhyung Kim
2022-10-10 22:49   ` Ian Rogers
2022-10-12 10:40   ` Jiri Olsa
2022-10-12 16:27     ` Namhyung Kim
2022-10-10  5:35 ` [PATCH 06/19] perf stat: Add 'needs_sort' argument to cpu_aggr_map__new() Namhyung Kim
2022-10-10 22:53   ` Ian Rogers
2022-10-11 23:32     ` Namhyung Kim
2022-10-10  5:35 ` [PATCH 07/19] perf stat: Add struct perf_stat_aggr to perf_stat_evsel Namhyung Kim
2022-10-10 23:00   ` Ian Rogers
2022-10-11 23:37     ` Namhyung Kim
2022-10-10  5:35 ` [PATCH 08/19] perf stat: Allocate evsel->stats->aggr properly Namhyung Kim
2022-10-10 23:03   ` Ian Rogers
2022-10-11 23:38     ` Namhyung Kim
2022-10-10  5:35 ` [PATCH 09/19] perf stat: Aggregate events using evsel->stats->aggr Namhyung Kim
2022-10-10 23:11   ` Ian Rogers
2022-10-11 23:44     ` Namhyung Kim
2022-10-10  5:35 ` [PATCH 10/19] perf stat: Aggregate per-thread stats " Namhyung Kim
2022-10-10 23:17   ` Ian Rogers
2022-10-11 23:46     ` Namhyung Kim
2022-10-10  5:35 ` [PATCH 11/19] perf stat: Allocate aggr counts for recorded data Namhyung Kim
2022-10-10 23:18   ` Ian Rogers
2022-10-10  5:35 ` [PATCH 12/19] perf stat: Reset aggr counts for each interval Namhyung Kim
2022-10-10 23:20   ` Ian Rogers
2022-10-11 23:48     ` Namhyung Kim
2022-10-10  5:35 ` [PATCH 13/19] perf stat: Split process_counters() Namhyung Kim
2022-10-10 23:21   ` Ian Rogers
2022-10-10  5:35 ` [PATCH 14/19] perf stat: Add perf_stat_merge_counters() Namhyung Kim
2022-10-10 23:31   ` Ian Rogers
2022-10-11 23:55     ` Namhyung Kim
2022-10-10  5:35 ` [PATCH 15/19] perf stat: Add perf_stat_process_percore() Namhyung Kim
2022-10-10 23:32   ` Ian Rogers
2022-10-11 23:59     ` Namhyung Kim
2022-10-10  5:35 ` [PATCH 16/19] perf stat: Add perf_stat_process_shadow_stats() Namhyung Kim
2022-10-10 23:36   ` Ian Rogers
2022-10-10  5:35 ` [PATCH 17/19] perf stat: Display event stats using aggr counts Namhyung Kim
2022-10-10 23:38   ` Ian Rogers
2022-10-10  5:35 ` Namhyung Kim [this message]
2022-10-10 23:39   ` [PATCH 18/19] perf stat: Display percore events properly Ian Rogers
2022-10-10  5:36 ` [PATCH 19/19] perf stat: Remove unused perf_counts.aggr field Namhyung Kim
2022-10-10 23:40   ` Ian Rogers
2022-10-12  8:41   ` Jiri Olsa
2022-10-12 16:26     ` Namhyung Kim
2022-10-13 20:56       ` [PATCH] perf stat: Init aggr_map when reporting per-process stat Namhyung Kim
2022-10-11  0:25 ` [RFC/PATCHSET 00/19] perf stat: Cleanup counter aggregation (v1) Andi Kleen
2022-10-11  5:38   ` Namhyung Kim
2022-10-11  6:13     ` Ian Rogers
2022-10-12  3:55       ` Namhyung Kim
2022-10-11 11:57     ` Andi Kleen
2022-10-12  3:58       ` Namhyung Kim
  -- strict thread matches above, loose matches on Subject: below --
2022-10-14  6:15 [PATCHSET 00/19] perf stat: Cleanup counter aggregation (v2) Namhyung Kim
2022-10-14  6:15 ` [PATCH 18/19] perf stat: Display percore events properly Namhyung Kim

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221010053600.272854-19-namhyung@kernel.org \
    --to=namhyung@kernel.org \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=ak@linux.intel.com \
    --cc=atrajeev@linux.vnet.ibm.com \
    --cc=irogers@google.com \
    --cc=james.clark@arm.com \
    --cc=jolsa@kernel.org \
    --cc=kan.liang@linux.intel.com \
    --cc=leo.yan@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=peterz@infradead.org \
    --cc=zhengjun.xing@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).