]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
perf stat: Reduce scope of walltime_nsecs_stats
authorIan Rogers <irogers@google.com>
Thu, 13 Nov 2025 18:05:12 +0000 (10:05 -0800)
committerNamhyung Kim <namhyung@kernel.org>
Tue, 18 Nov 2025 02:43:09 +0000 (18:43 -0800)
walltime_nsecs_stats is no longer used for counter values, move into
that stat_config where it controls certain things like noise
measurement.

Signed-off-by: Ian Rogers <irogers@google.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/builtin-stat.c
tools/perf/tests/parse-metric.c
tools/perf/tests/pmu-events.c
tools/perf/util/config.c
tools/perf/util/stat-shadow.c
tools/perf/util/stat.h

index d6f4c84f7d7e5c17cf4be5b9adbb3973febc12c5..ca1c80c141b65879a37d8778d933ddfbd4ffc064 100644 (file)
@@ -239,7 +239,7 @@ static inline void diff_timespec(struct timespec *r, struct timespec *a,
 static void perf_stat__reset_stats(void)
 {
        evlist__reset_stats(evsel_list);
-       perf_stat__reset_shadow_stats();
+       memset(stat_config.walltime_nsecs_stats, 0, sizeof(*stat_config.walltime_nsecs_stats));
 }
 
 static int process_synthesized_event(const struct perf_tool *tool __maybe_unused,
@@ -455,8 +455,8 @@ static void process_interval(void)
                        pr_err("failed to write stat round event\n");
        }
 
-       init_stats(&walltime_nsecs_stats);
-       update_stats(&walltime_nsecs_stats, stat_config.interval * 1000000ULL);
+       init_stats(stat_config.walltime_nsecs_stats);
+       update_stats(stat_config.walltime_nsecs_stats, stat_config.interval * 1000000ULL);
        print_counters(&rs, 0, NULL);
 }
 
@@ -988,14 +988,14 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx)
        if (interval && stat_config.summary) {
                stat_config.interval = 0;
                stat_config.stop_read_counter = true;
-               init_stats(&walltime_nsecs_stats);
-               update_stats(&walltime_nsecs_stats, t1 - t0);
+               init_stats(stat_config.walltime_nsecs_stats);
+               update_stats(stat_config.walltime_nsecs_stats, t1 - t0);
 
                evlist__copy_prev_raw_counts(evsel_list);
                evlist__reset_prev_raw_counts(evsel_list);
                evlist__reset_aggr_stats(evsel_list);
        } else {
-               update_stats(&walltime_nsecs_stats, t1 - t0);
+               update_stats(stat_config.walltime_nsecs_stats, t1 - t0);
                update_rusage_stats(&stat_config.ru_data);
        }
 
@@ -2167,7 +2167,7 @@ static int process_stat_round_event(const struct perf_tool *tool __maybe_unused,
        process_counters();
 
        if (stat_round->type == PERF_STAT_ROUND_TYPE__FINAL)
-               update_stats(&walltime_nsecs_stats, stat_round->time);
+               update_stats(stat_config.walltime_nsecs_stats, stat_round->time);
 
        if (stat_config.interval && stat_round->time) {
                tsh.tv_sec  = stat_round->time / NSEC_PER_SEC;
@@ -2975,7 +2975,7 @@ int cmd_stat(int argc, const char **argv)
                }
 
                if (!interval) {
-                       if (WRITE_STAT_ROUND_EVENT(walltime_nsecs_stats.max, FINAL))
+                       if (WRITE_STAT_ROUND_EVENT(stat_config.walltime_nsecs_stats->max, FINAL))
                                pr_err("failed to write stat round event\n");
                }
 
index 9b1df1eb455a7d3a8fd1305af852969f4ff1f305..6bbc209a5c6af82d98b049bdef3d1bcc9aaac0ce 100644 (file)
@@ -41,8 +41,6 @@ static void load_runtime_stat(struct evlist *evlist, struct value *vals)
                count = find_value(evsel->name, vals);
                evsel->supported = true;
                evsel->stats->aggr->counts.val = count;
-               if (evsel__name_is(evsel, "duration_time"))
-                       update_stats(&walltime_nsecs_stats, count);
        }
 }
 
index f40a828c9861af267ba065456d7a2ca30554a974..a997168621688007c85495e2d9f6f459c2471516 100644 (file)
@@ -872,8 +872,6 @@ static int test__parsing_callback(const struct pmu_metric *pm,
        evlist__alloc_aggr_stats(evlist, 1);
        evlist__for_each_entry(evlist, evsel) {
                evsel->stats->aggr->counts.val = k;
-               if (evsel__name_is(evsel, "duration_time"))
-                       update_stats(&walltime_nsecs_stats, k);
                k++;
        }
        evlist__for_each_entry(evlist, evsel) {
index cc0746f494f48cd1c179a07f8aef9166585a5015..e0219bc6330ae8554b2b95e7fc9e58ad61cad2f3 100644 (file)
@@ -37,6 +37,8 @@
 
 #define METRIC_ONLY_LEN 20
 
+static struct stats walltime_nsecs_stats;
+
 struct perf_stat_config stat_config = {
        .aggr_mode              = AGGR_GLOBAL,
        .aggr_level             = MAX_CACHE_LVL + 1,
index 337a8aa547c3d5b11a1dc144e2e123c792e0a2b5..9c83f7d96caa4eaede8a47b9027012add1aa1f46 100644 (file)
 #include "util/hashmap.h"
 #include "tool_pmu.h"
 
-struct stats walltime_nsecs_stats;
-
-void perf_stat__reset_shadow_stats(void)
-{
-       memset(&walltime_nsecs_stats, 0, sizeof(walltime_nsecs_stats));
-}
-
 static bool tool_pmu__is_time_event(const struct perf_stat_config *config,
                                   const struct evsel *evsel, int *tool_aggr_idx)
 {
index 055b95d18106a820ae9641315deb3e12bdb7686c..f986911c9296e788f22f05b5ea27e9757fae79ec 100644 (file)
@@ -129,8 +129,6 @@ static inline void init_stats(struct stats *stats)
 struct evsel;
 struct evlist;
 
-extern struct stats walltime_nsecs_stats;
-
 enum metric_threshold_classify {
        METRIC_THRESHOLD_UNKNOWN,
        METRIC_THRESHOLD_BAD,