From nobody Tue Jun 16 20:53:40 2026 Received: from mail-pj1-f47.google.com (mail-pj1-f47.google.com [209.85.216.47]) (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 6B456242D97 for ; Wed, 29 Apr 2026 10:06:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777457163; cv=none; b=NTIpn2G9lx29uyLw1EKHF7tWrZ1zS1+Rj3VeZxjQVGwb9wj5ivCN1JiqGSfOBIvFp2Ri/ZDAeYOQos/EYfCqV39/F19hRGb5LYSCAXE2gViRedkAoP98tXKtOLCOW+V0BSGrA34cpAipJnoAhlnXuFUuvMjvdQ8Rp2/23rZtP1U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777457163; c=relaxed/simple; bh=rcjyuC046rrVIbYVPsxe/pwrxVRQRd+Exnidz4SoLQw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=h0qfJwpj4pZuFMpykyMB1d571ew7wTMnJL5yBviEq0Y5H9Np8YgDRI5fVeiBUP1vMaNny3xLCd6Y0a964FyNYYcT0u68yXyAgSGd3XmnWAF5WBloGxhWiDd1pt1Tq1RhQHmH/3WUvw5daXcHdEiHPunYfIhac2sdSHjH59dRkYI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dRD4O66d; arc=none smtp.client-ip=209.85.216.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dRD4O66d" Received: by mail-pj1-f47.google.com with SMTP id 98e67ed59e1d1-35dac556bb2so7551950a91.1 for ; Wed, 29 Apr 2026 03:06:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777457162; x=1778061962; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Mnda5NXdSHRh5Zhq8Z4TPsZxWxTMBDJTdTiXHkGwnZ0=; b=dRD4O66dfONUFkOB8N2BUl0MDMIlhZXR4Qr6Nc/HzG+E8DQoHxe60t/BaO/fL1b8U6 oStpa1DTZU3nTIUGSHS57HiqODaK/0leLHjFWybcJp6P5RvuDv1830+qxUyq2YdS9G3K hvRbzy7C1FbUMWJHe1diMw4bwK1lp8brHUqfP6iR8PPxp4otK4JCy4sf28zmP2dbERCg Ee/6+U50o8WeLsh0j89YFZF83CFOiD/Ey/549aJmOUHO9i44wOa3nK6yE1FKYijFWfx4 HoDJYmURyfB09BVzrf0WjReZ9WcYwMg9JNeuxTUPNYTupYTKxtRdbyFlPgth1ZhB8m4n JWWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777457162; x=1778061962; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Mnda5NXdSHRh5Zhq8Z4TPsZxWxTMBDJTdTiXHkGwnZ0=; b=LFbEsl4Npzus+KdsNpCN5W3MyPCliDqq01ahZmC2Me4IV49M2bpi3sIdGF3TibuFCy koombyjVxsM2PcUlm1mdodPHe1HL1p1Sdd0HvxPAQbJNr4EEPjzOdqU4tRrma3vf2YJB l6gRlotIbqwQA+O88sjfM422iA6TMoCc15oOco4RCWOY/OJVrbh6xBdR4M8ET57ePTzK 781S+cumrFTWCIzgiehwDC8GFcbbbkGDOwE571c4idlOJmcB1t4H5QNvS//K00WGRryV PKrvJsGm/PN7/KE5X57fSvsaRlSucyCTH20uqOTgJ2d+No6lQWrQ0Wtki8boZ9rWK7a7 GsXw== X-Forwarded-Encrypted: i=1; AFNElJ+TECGHxm9/Pyq0jOnz6vlvYqRQto2WNr8mZC2GUTrqilksOFypfzCRrw4+sk9vxg1SrKh7XX9VyLZvQr4=@vger.kernel.org X-Gm-Message-State: AOJu0YzMCkIuNMoIAQoqEc9xu/dAKsPUmp9o+tAa25E1CGfMj/qAQEKg Hwfg1uFihiQeELZlOKc17I1YmEH03b+drENTQOC4jpQY36aXO7a/Onb/ X-Gm-Gg: AeBDietAM7G3/74rX930nUTVsXeGgSFzJADKjdCAR8hj+jX0ClUW1vPMUxwy/Mdw4hq 8zfU0WFpw10Q8mqYAvRmsZIUpre2p09tagJXVUSWBUwysh5d8Sd5r7vADMVMOvBnYam52HsTeRp fTKAiyBdvRS5isYgL43dKqPMa1+ipuZy+pwnh9pp7+J8gqFC7sEM1uhvcnspNZp2cMhkTSw7tU7 Zvex77l6uUIpIbzQSisGMe9//zFzZ+3GOn0kPxoq/c0J63CeRcBCCN3vWqqLm/m0eHqG2nqZgsx TZ/cDlb7wF4wEZOtOKME2ObxB7mZ0HJudVsFiyGFKvDeCVkz/fEa5WzryfCMD69a7ahapk7/Pg2 Olmc4LPqMf5BzXioZx5HBinkt8V2PQoDI5omW7hrAEFtO1n1A8aH/x2FNyc17Zz3l96rffe/y0c 7wDBMELk4f9ICYeFbAWJvG3dS8BOlD0CHs+dJFBLAfZisXY9LOQ+tUVh+9uA== X-Received: by 2002:a17:90b:5828:b0:35b:97ba:acee with SMTP id 98e67ed59e1d1-364a0d2ca8emr3232124a91.17.1777457161659; Wed, 29 Apr 2026 03:06:01 -0700 (PDT) Received: from DESKTOP-MOQC9AF.mioffice.cn ([43.224.245.246]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b988772e9csm17018625ad.9.2026.04.29.03.05.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 03:06:01 -0700 (PDT) From: Zhan Xusheng X-Google-Original-From: Zhan Xusheng To: Johannes Weiner , Peter Zijlstra Cc: Ingo Molnar , linux-kernel@vger.kernel.org, Zhan Xusheng Subject: [PATCH v4] sched/psi: Skip CPUs with zero non-idle delta in per-CPU aggregation Date: Wed, 29 Apr 2026 18:05:55 +0800 Message-ID: <20260429100555.179348-1-zhanxusheng@xiaomi.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" collect_percpu_times() iterates over every possible CPU to build a non-idle-weighted average of the PSI state times. When a CPU has no PSI_NONIDLE delta for the current sampling interval: nonidle =3D nsecs_to_jiffies(times[PSI_NONIDLE]) =3D 0 deltas[s] +=3D times[s] * nonidle /* +=3D 0 */ so the weighted accumulation contributes nothing. get_recent_times() already sets the PSI_NONIDLE bit in cpu_changed_states iff the PSI_NONIDLE delta is non-zero. Use that bit to skip such CPUs early, as suggested by Johannes, avoiding the nsecs_to_jiffies() call. No functional change intended. Suggested-by: Johannes Weiner Signed-off-by: Zhan Xusheng --- v4: - Drop the incorrect Reviewed-by added in v2/v3; replace with Suggested-by. Johannes' "Makes sense." on v1 was an acknowledgement and an implementation suggestion, not a review tag. - Rebase commit message wording to describe "PSI_NONIDLE delta" rather than "non-idle jiffies", matching the actual check. v3: https://lore.kernel.org/all/20260313034847.1422-1-zhanxusheng@xiaomi.co= m/ - Resend of v2. v2: https://lore.kernel.org/all/20260204022328.23938-1-zhanxusheng@xiaomi.c= om/ - Use cpu_changed_states & (1 << PSI_NONIDLE) per Johannes' suggestion, saving the nsecs_to_jiffies() call. v1: https://lore.kernel.org/all/20260203100007.22044-1-zhanxusheng@xiaomi.c= om/ --- kernel/sched/psi.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/kernel/sched/psi.c b/kernel/sched/psi.c index d9c9d9480a45..cd1174f0b5e5 100644 --- a/kernel/sched/psi.c +++ b/kernel/sched/psi.c @@ -384,6 +384,13 @@ static void collect_percpu_times(struct psi_group *gro= up, =20 get_recent_times(group, cpu, aggregator, times, &cpu_changed_states); + /* + * If this CPU's PSI_NONIDLE delta is zero, it contributes + * nothing to nonidle_total or to any deltas[] entry below, + * so skip it early. + */ + if (!(cpu_changed_states & (1 << PSI_NONIDLE))) + continue; changed_states |=3D cpu_changed_states; =20 nonidle =3D nsecs_to_jiffies(times[PSI_NONIDLE]); --=20 2.43.0