From nobody Mon May 25 04:34:30 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 730DD19E819 for ; Mon, 18 May 2026 23:12:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779145923; cv=none; b=YHkildEff5pcs1te9SCUDBciewClqCz4Q9z9oxLGdkRAGsTP9fTUDfXpTlz7MKAdJvzEK9nY0ltIJrh5bxPELks8AOy1AgRV+mY4z/yxjamJmOcNrQNzGTGHy5SXyOE/c+B2zeGY1VCeL4Okm79fUUyHyWftofoq+mKbDkirf2M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779145923; c=relaxed/simple; bh=37pWV75xwxCZRuxck3GG4Qk3pk7xQdd7WWjsZvdBp2o=; h=Date:Mime-Version:Message-ID:Subject:From:To:Cc:Content-Type; b=KAhvsAuo8d1N9f6sSZ/bvJuIWeYYeTyZYz/FEyBZPAvIRMds81hNK5TGwdFk71KWIUleoDLnY72RUb6w3mxJac73XI9wbmNUXow+eNNZ4dRMibv+Q8Rxu+vaOsNh0rNbjjJeyCHral3kchChyLxwtLRkV7of/SS9+tVVmYBdR3U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ctshao.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=dn1Uti8u; arc=none smtp.client-ip=74.125.82.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ctshao.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="dn1Uti8u" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-1353ac304f3so5202822c88.0 for ; Mon, 18 May 2026 16:12:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1779145922; x=1779750722; darn=vger.kernel.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=484+LBDmFYyjmS1QZ8UO0N0Y8++tVhi0RvQ5mEJUoYc=; b=dn1Uti8ubTYDaYhUsWyVN5OpV0LUaMyJJY9i2bUV47/IHwPAVNA/+YQ/qQwgkIAvJ5 1NSg79Pl2XtNUZGWx56lk1a1PcduJjps/FJpXrvA89Z+Cd+3meQrYNg1b5/o+xGocVXk C4AKHRRwO6+fZQmGrclrMbhLLR6rrAwRBrtwLjD4hQNfmAhzd3xKukGhucRH7eEqIuKf DTEH7d7uZ1urh2d2RMGph708IORmbFxq2rRrTlGCg6OEbJp+iNH4xmu8JTyKUwfrDlgi ffqfTxzRH8ff1OJD1eNcuA46l5QEIMbBRhuoapxyVUuv2nE0StiTYi5P4rfAvY7AvsNM GHxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779145922; x=1779750722; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=484+LBDmFYyjmS1QZ8UO0N0Y8++tVhi0RvQ5mEJUoYc=; b=L+hA5ZB10shlXmNqP1s1lNQfnTU9Af+fXRY2xrfS9/zNVGcOMytA3iv3WqBu4PIuAl LdlBqQyx+jvCpOL4jp9OlTMOqxmp6YE9y3/iWpLB2/mCA7jDQSsTnzCk4688NcFGMvRq FVKoBLrnZ3oQ6sVLhsPcDclmnh/Q1ufFFSm78pJOhW5gKfAsp/O+CUujVoOrJzUAvY5I i0kHh2/fWAKxL0flm7oyZ1W4k1bd2p/4rvd6zSlPxzreWeZw9TbWcVBPoDRrreVtkAmV 844lndr6wOvg2QOVIBtCwYmrfExOk26KRsuBUI0A7JoKfngN50+EhbmnElKING77KMLl DaeA== X-Gm-Message-State: AOJu0YwjqSQg9OfUW7XgBFPY33FB7hmDM6AmfM59M2two8qIkOjdcAbO Tgz0Ksrc6FeMPqdhOOCnwp1lkzJO5bzTHTDVvdjsfR002EHFntEwbNhVPX/NhzB+hEpYzNiHzNZ 3zO5VJ1Y64AVh6EhYNGa7kvVTcCC36XJhLqR+fnehxSdySxy5dJYDe+6KsCxWjnDCmKAPUEHQgK YmBZJWtacWT9Lolkj+5wSuHqPcVu12KwIHEA6A5F51nAaA X-Received: from dlboy14.prod.google.com ([2002:a05:7022:128e:b0:12d:bf5c:266]) (user=ctshao job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:505:b0:128:d7a7:5271 with SMTP id a92af1059eb24-1350483f3b9mr7134341c88.28.1779145920806; Mon, 18 May 2026 16:12:00 -0700 (PDT) Date: Mon, 18 May 2026 16:11:30 -0700 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-Mailer: git-send-email 2.54.0.746.g67dd491aae-goog Message-ID: <20260518231150.1252420-1-ctshao@google.com> Subject: [PATCH] perf stat: Fix uncore metric scaling bug across sockets and nodes From: Chun-Tse Shao To: linux-kernel@vger.kernel.org Cc: Chun-Tse Shao , peterz@infradead.org, mingo@redhat.com, acme@kernel.org, namhyung@kernel.org, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, irogers@google.com, adrian.hunter@intel.com, james.clark@linaro.org, yang.lee@linux.alibaba.com, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In multi-socket or Sub-NUMA Clustering (SNC) configurations, uncore metrics (such as lpm_miss_lat) calculate incorrect values because they divide by a static socket CHA count rather than the aggregation target. Fix this by dynamically utilizing the aggregation count (`aggr->nr`) on the metric's leader event. In standard aggregation modes, `aggr->nr` is already automatically populated with the correct number of active hardware units contributing to that stats bucket. Before the fix: perf stat -M lpm_miss_lat --per-socket --metric-only -a -j -- sleep 1 {"socket" : "S0", "counters" : 28, "ns lpm_miss_lat_rem" : "163.4", "ns = lpm_miss_lat_loc" : "27.5"} {"socket" : "S1", "counters" : 28, "ns lpm_miss_lat_rem" : "170.5", "ns = lpm_miss_lat_loc" : "25.5"} perf stat -M lpm_miss_lat --metric-only -a -j -- sleep 1 {"ns lpm_miss_lat_rem" : "90.4", "ns lpm_miss_lat_loc" : "12.6"} `lpm_miss_lat` on global aggr is 0.5x the actual value. After the fix: perf stat -M lpm_miss_lat --per-socket --metric-only -a -j -- sleep 1 {"socket" : "S0", "counters" : 28, "ns lpm_miss_lat_rem" : "174.8", "ns = lpm_miss_lat_loc" : "34.8"} {"socket" : "S1", "counters" : 28, "ns lpm_miss_lat_rem" : "170.4", "ns = lpm_miss_lat_loc" : "23.9"} perf stat -M lpm_miss_lat --metric-only -a -j -- sleep 1 {"ns lpm_miss_lat_rem" : "174.5", "ns lpm_miss_lat_loc" : "26.2"} Signed-off-by: Chun-Tse Shao --- tools/perf/util/stat-shadow.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/util/stat-shadow.c b/tools/perf/util/stat-shadow.c index bc2d44df7baf..60fdf26c5bb0 100644 --- a/tools/perf/util/stat-shadow.c +++ b/tools/perf/util/stat-shadow.c @@ -103,7 +103,7 @@ static int prepare_metric(struct perf_stat_config *conf= ig, val *=3D 1e-9; } if (!source_count) - source_count =3D evsel__source_count(metric_events[i]); + source_count =3D aggr->nr; } } n =3D strdup(evsel__metric_id(metric_events[i])); --=20 2.54.0.746.g67dd491aae-goog