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>,
Michael Petlan <mpetlan@redhat.com>
Subject: [PATCH 17/20] perf stat: Add perf_stat_process_shadow_stats()
Date: Mon, 17 Oct 2022 19:02:24 -0700 [thread overview]
Message-ID: <20221018020227.85905-18-namhyung@kernel.org> (raw)
In-Reply-To: <20221018020227.85905-1-namhyung@kernel.org>
This function updates the shadow stats using the aggregated counts
uniformly since it uses the aggr_counts for the every aggr mode.
It'd have duplicate shadow stats for each items for now since the
display routines will update them once again. But that'd be fine
as it shows the average values and it'd be gone eventually.
Acked-by: Ian Rogers <irogers@google.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
tools/perf/builtin-stat.c | 1 +
tools/perf/util/stat.c | 50 ++++++++++++++++++++-------------------
tools/perf/util/stat.h | 1 +
3 files changed, 28 insertions(+), 24 deletions(-)
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index d6a006e41da0..d7c52cef70a3 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -489,6 +489,7 @@ static void process_counters(void)
perf_stat_merge_counters(&stat_config, evsel_list);
perf_stat_process_percore(&stat_config, evsel_list);
+ perf_stat_process_shadow_stats(&stat_config, evsel_list);
}
static void process_interval(void)
diff --git a/tools/perf/util/stat.c b/tools/perf/util/stat.c
index 26c48ef7ca92..c0955a0427ab 100644
--- a/tools/perf/util/stat.c
+++ b/tools/perf/util/stat.c
@@ -474,7 +474,7 @@ process_counter_values(struct perf_stat_config *config, struct evsel *evsel,
aggr_counts->val += count->val;
aggr_counts->ena += count->ena;
aggr_counts->run += count->run;
- goto update;
+ return 0;
}
if (ps->aggr) {
@@ -511,32 +511,10 @@ process_counter_values(struct perf_stat_config *config, struct evsel *evsel,
}
}
-update:
- switch (config->aggr_mode) {
- case AGGR_THREAD:
- case AGGR_CORE:
- case AGGR_DIE:
- case AGGR_SOCKET:
- case AGGR_NODE:
- case AGGR_NONE:
- if ((config->aggr_mode == AGGR_NONE) && (!evsel->percore)) {
- perf_stat__update_shadow_stats(evsel, count->val,
- cpu_map_idx, &rt_stat);
- }
-
- if (config->aggr_mode == AGGR_THREAD) {
- perf_stat__update_shadow_stats(evsel, count->val,
- thread, &rt_stat);
- }
- break;
- case AGGR_GLOBAL:
+ if (config->aggr_mode == AGGR_GLOBAL) {
aggr->val += count->val;
aggr->ena += count->ena;
aggr->run += count->run;
- case AGGR_UNSET:
- case AGGR_MAX:
- default:
- break;
}
return 0;
@@ -762,6 +740,30 @@ void perf_stat_process_percore(struct perf_stat_config *config, struct evlist *e
evsel__process_percore(evsel);
}
+static void evsel__update_shadow_stats(struct evsel *evsel)
+{
+ struct perf_stat_evsel *ps = evsel->stats;
+ int i;
+
+ if (ps->aggr == NULL)
+ return;
+
+ for (i = 0; i < ps->nr_aggr; i++) {
+ struct perf_counts_values *aggr_counts = &ps->aggr[i].counts;
+
+ perf_stat__update_shadow_stats(evsel, aggr_counts->val, i, &rt_stat);
+ }
+}
+
+void perf_stat_process_shadow_stats(struct perf_stat_config *config __maybe_unused,
+ struct evlist *evlist)
+{
+ struct evsel *evsel;
+
+ evlist__for_each_entry(evlist, evsel)
+ evsel__update_shadow_stats(evsel);
+}
+
int perf_event__process_stat_event(struct perf_session *session,
union perf_event *event)
{
diff --git a/tools/perf/util/stat.h b/tools/perf/util/stat.h
index d23f8743e442..3d413ba8c68a 100644
--- a/tools/perf/util/stat.h
+++ b/tools/perf/util/stat.h
@@ -284,6 +284,7 @@ int perf_stat_process_counter(struct perf_stat_config *config,
struct evsel *counter);
void perf_stat_merge_counters(struct perf_stat_config *config, struct evlist *evlist);
void perf_stat_process_percore(struct perf_stat_config *config, struct evlist *evlist);
+void perf_stat_process_shadow_stats(struct perf_stat_config *config, struct evlist *evlist);
struct perf_tool;
union perf_event;
--
2.38.0.413.g74048e4d9e-goog
next prev parent reply other threads:[~2022-10-18 2:04 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-18 2:02 [PATCHSET 00/20] perf stat: Cleanup counter aggregation (v3) Namhyung Kim
2022-10-18 2:02 ` [PATCH 01/20] perf tools: Save evsel->pmu in parse_events() Namhyung Kim
2022-10-18 2:02 ` [PATCH 02/20] perf tools: Use pmu info in evsel__is_hybrid() Namhyung Kim
2022-10-18 2:02 ` [PATCH 03/20] perf stat: Use evsel__is_hybrid() more Namhyung Kim
2022-10-18 2:02 ` [PATCH 04/20] perf stat: Add aggr id for global mode Namhyung Kim
2022-10-18 2:02 ` [PATCH 05/20] perf stat: Add cpu aggr id for no aggregation mode Namhyung Kim
2022-10-18 2:02 ` [PATCH 06/20] perf stat: Add 'needs_sort' argument to cpu_aggr_map__new() Namhyung Kim
2022-10-18 2:02 ` [PATCH 07/20] perf stat: Add struct perf_stat_aggr to perf_stat_evsel Namhyung Kim
2022-10-18 2:02 ` [PATCH 08/20] perf stat: Allocate evsel->stats->aggr properly Namhyung Kim
2022-10-18 2:02 ` [PATCH 09/20] perf stat: Aggregate events using evsel->stats->aggr Namhyung Kim
2022-10-18 2:02 ` [PATCH 10/20] perf stat: Factor out evsel__count_has_error() Namhyung Kim
2022-10-18 2:02 ` [PATCH 11/20] perf stat: Aggregate per-thread stats using evsel->stats->aggr Namhyung Kim
2022-10-18 2:02 ` [PATCH 12/20] perf stat: Allocate aggr counts for recorded data Namhyung Kim
2022-10-18 2:02 ` [PATCH 13/20] perf stat: Reset aggr counts for each interval Namhyung Kim
2022-10-18 2:02 ` [PATCH 14/20] perf stat: Split process_counters() Namhyung Kim
2022-10-18 2:02 ` [PATCH 15/20] perf stat: Add perf_stat_merge_counters() Namhyung Kim
2022-10-18 2:02 ` [PATCH 16/20] perf stat: Add perf_stat_process_percore() Namhyung Kim
2022-10-18 2:02 ` Namhyung Kim [this message]
2022-10-18 2:02 ` [PATCH 18/20] perf stat: Display event stats using aggr counts Namhyung Kim
2022-12-05 10:51 ` Athira Rajeev
2022-12-05 19:00 ` Namhyung Kim
2022-12-06 13:39 ` Athira Rajeev
2023-06-14 13:40 ` Jiri Olsa
2023-06-14 16:20 ` Ian Rogers
2023-06-15 8:10 ` Jiri Olsa
2023-06-15 17:31 ` Namhyung Kim
2022-10-18 2:02 ` [PATCH 19/20] perf stat: Display percore events properly Namhyung Kim
2022-10-18 2:02 ` [PATCH 20/20] perf stat: Remove unused perf_counts.aggr field 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=20221018020227.85905-18-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=mpetlan@redhat.com \
--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).