]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
perf stat: Fix false NMI watchdog warning in aggregation modes
authorChun-Tse Shao <ctshao@google.com>
Thu, 11 Jun 2026 21:56:32 +0000 (14:56 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 12 Jun 2026 00:21:37 +0000 (21:21 -0300)
In aggregation modes (e.g. --per-socket, --per-die, etc.), a counter
might not be scheduled or counted on specific aggregate groups if it was
not assigned to the CPUs belonging to those groups. However, the
printout() check triggers the "print_free_counters_hint" logic
unconditionally for any supported counter with a missing count. This
results in a false "Some events weren't counted. Try disabling the NMI
watchdog" warning.

Furthermore, the NMI watchdog only reserves performance counters on core
PMUs. Uncore PMU events (e.g. CHA, IMC) are not affected by the NMI
watchdog, but their failures also falsely triggered this warning.

This warning was originally introduced in commit 02d492e5dcb72c00 ("perf
stat: Issue a HW watchdog disable hint")

To fix this, restrict setting of print_free_counters_hint to only
trigger for core PMU events by checking counter->pmu and
counter->pmu->is_core.

Example before/after:

$ perf stat -M lpm_miss_lat --metric-only --per-socket -a -- sleep 1

Before:

 Performance counter stats for 'system wide':

       ns  lpm_miss_lat_rem ns  lpm_miss_lat_loc
S0      126                202.3               207.9
S1      126                231.9               259.3

       1.006029831 seconds time elapsed

Some events weren't counted. Try disabling the NMI watchdog:
        echo 0 > /proc/sys/kernel/nmi_watchdog
        perf stat ...
        echo 1 > /proc/sys/kernel/nmi_watchdog

After:

 Performance counter stats for 'system wide':

       ns  lpm_miss_lat_rem ns  lpm_miss_lat_loc
S0      126                202.3               207.9
S1      126                231.9               259.3

       1.006029831 seconds time elapsed

Assisted-by: Gemini:gemini-next
Reviewed-by: Ian Rogers <irogers@google.com>
Signed-off-by: Chun-Tse Shao <ctshao@google.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/stat-display.c

index 2b69d238858cf49db61b4d25a81977a79c7cd153..0a5750bb59fa3b750ac9e3726b65039a9f96efea 100644 (file)
@@ -821,9 +821,9 @@ static void printout(struct perf_stat_config *config, struct outstate *os,
                ok = false;
 
                if (counter->supported) {
-                       if (!evlist__has_hybrid_pmus(counter->evlist)) {
+                       if (!evlist__has_hybrid_pmus(counter->evlist) &&
+                           counter->pmu && counter->pmu->is_core)
                                config->print_free_counters_hint = 1;
-                       }
                }
        }