From nobody Sat Jun 13 12:31:09 2026 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (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 7AF0236C5AC for ; Thu, 7 May 2026 13:56:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778162208; cv=none; b=ezVZ6UxLPTYJ9+0erMTaICE8KDFGtv0UzDjRDkkYfPa0W16623Itd9S95fXfvQJiBxhOYto679P5JocQorMhjJM1wuwOTkJNTBoUyuI2WygdreG6zMmz5rzaVhGBcXz5M3wfHoJhJ80yTJz3MjAdhGHrr/HroLHUV87xfN2cJrY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778162208; c=relaxed/simple; bh=0Uz08EOiRZbPLrOkGO9cg8SA7BlEaIDSmzE81+x9+DM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Z6RaKFcg/ZUaLPKisZ5tHBwGHcP+ihsq9n6nHpR07ClZCBRDFznyEUOP+kteg2bvUlQKNdt0uejTQHfkrKD+x261im0BTMmSaYDlcWebbCXA0s+KttAUNdzV6RSLH901UTwfPtspYdXE0ln9grm8wJCvR/eYuDPDEh4fW/PVLnQ= 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=XC3M5M3c; arc=none smtp.client-ip=209.85.216.50 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="XC3M5M3c" Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-36523acb0c1so581916a91.0 for ; Thu, 07 May 2026 06:56:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778162206; x=1778767006; 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=X3Qr57ukZypi33nSm2ObZXFVuk4IjL3Tpso5FTV8rEc=; b=XC3M5M3c+R5qx1Y4y0Nqq6uIACNUzOCC3DyuRr17Qxh1xdtc9AKjobJgJPr3eHbhnU ghneFWm+cLe2VDdofHUO5RAya2x6f/OvDfuEukBLpgJByNj5bmEK+OiIznh4ay48ARRg OkccTrgDvCd37VL/zkAGxhY4m7FK3mAAZkQrp0QS3omycN9yAU+CK9sspL67U2wgaf9H NXXKIzk9/EXe5e0dz7kFvIrSlF2aiFvnAdVE30w8ct2tCSJ6fPAGClW1/e7y7pWf9frs +mLTdZbZb3heOdhMPcIziyBPpTbdLzujnk+PXMbOf4ThTngOVzy2fJD3yCVnoI96n42C /mwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778162206; x=1778767006; 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=X3Qr57ukZypi33nSm2ObZXFVuk4IjL3Tpso5FTV8rEc=; b=OTAHCZ6UxL4poYXxBwVGnKbDnhdgbwxnp3KSopN5gOusGqsrCvmMH4VcG9LQAer/EU YCcyEjcYxnsRkt46lN2GWXdujJtMq8fBdagrD1RlNdv7ViCzD3WO6OFsmljW9V1mmjE5 M5u4w5LO7EaqsmP63FHIcGsmLXzk2cJpy1V12tbae1NZBxr5YuDELi7MEs607MF1/p+m Nayj0t25kGC5Fw3lweeVNVItbb94L5l0hmB4vKbFSm8pdq8GR15UZoox9vcHt7Yl4P0G GD3YgLBG6yJUzklniLTwtz1+8xZ9uSeC+taNq+11ADebqs6oahaqsrJIQ0Wo86h2hKuL AmtA== X-Forwarded-Encrypted: i=1; AFNElJ+fZbQjwhcLx5x7YfUdet6SvhL6/29as6oloiZ33TSRUMtMxkWwX6ka09Gn52USN4jKMKJQPk4kRP/vgoE=@vger.kernel.org X-Gm-Message-State: AOJu0YxMnNa3apkcOE3/umVecyWYWE9k11eZUinQKukYBGUIO+QF3XRZ cOXbv1K8anx3a547yQh+ZS6PCowZsufx6pfkxURJK8I+HYIoSD9fVQn3 X-Gm-Gg: AeBDietw8ujaiwejBfKQyfuYP1Ha995XduINcMjAJdXiiozqtA9JFCFybaW+doe620j zZE0rva5ZIV2grAa7WCD3aMvvixWD3G82reE4v3x11cxFgul+1BAJIIRQApdnqux451c5zd5lCW uls6wvHqnYipZEOLuqUgREbNEJjf4G9+/SMG/UxM1Dt6TkKW4INGxU+OU/XeJ9AHJUUATB4WFf3 RgmLzzzyHxbFOVJvM6lEaTIqTVqbAZuBl/B6JDjeKh+KyOkxd5dXD8F1tc1k1/juyrfuglB+/BF 9btGT1vkFI+SrgPefmNclJWwR40qszEG1uPgdprFUzICQh2e30IJYFiIxODz78Tdvf4dSz0WDP4 tCxGSvqFBiADO/nqPj0jj9Wsn2EfDsckfNu7n+8kYb4SAKJqV5C7Aq93ncbS65kjtUtSiIdvbA5 TZ8+X/JfBHKnuKqBBzH+ZQTiSLHTnO27v9tQ9/35gS+4h2s31rg11KPsfUolyA4ZryWgqFdbNf X-Received: by 2002:a17:90b:3d0b:b0:35b:952c:43b9 with SMTP id 98e67ed59e1d1-365abcf0698mr8536399a91.10.1778162205809; Thu, 07 May 2026 06:56:45 -0700 (PDT) Received: from huyi9-HP-ProDesk-680-G4-MT.mioffice.cn ([43.224.245.178]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36633ffdb52sm327818a91.1.2026.05.07.06.56.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 May 2026 06:56:44 -0700 (PDT) From: Zhan Xusheng X-Google-Original-From: Zhan Xusheng To: peterz@infradead.org Cc: hannes@cmpxchg.org, mingo@redhat.com, Suren Baghdasaryan , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , K Prateek Nayak , linux-kernel@vger.kernel.org, Zhan Xusheng Subject: [PATCH v5] sched/psi: Skip CPUs with zero non-idle delta in per-CPU aggregation Date: Thu, 7 May 2026 21:56:37 +0800 Message-ID: <20260507135637.1245777-1-zhanxusheng@xiaomi.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260504080434.GN3126523@noisy.programming.kicks-ass.net> References: <20260504080434.GN3126523@noisy.programming.kicks-ass.net> 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 and the PSI_NONIDLE * u64 mul-adds that follow. No functional change: on the skipped path the old code adds zero to deltas[] and zero to nonidle_total, which is exactly the result of not iterating. Measured on i7-8700 (6C/12T), same mainline base and same build flags for both kernels. Reader is a pinned userspace loop of open()+read()+close() on /proc/pressure/cpu, 100k iterations inside a KVM guest with -smp matching the host LCPU count (12): baseline patched diff idle p50 2438 ns 2270 ns -6.9% idle p99 2598 ns 2449 ns -5.7% 1 busy / 12 p50 2479 ns 2281 ns -8.0% all 12 busy p50 3738 ns 3537 ns -5.4% The all-busy improvement shows the skip also kicks in when the box is hot: between two samples, many CPUs record no PSI_NONIDLE state transition even if they've been 100% utilised. Suggested-by: Johannes Weiner Signed-off-by: Zhan Xusheng --- kernel/sched/psi.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kernel/sched/psi.c b/kernel/sched/psi.c index d9c9d9480a45..f220debc3fe0 100644 --- a/kernel/sched/psi.c +++ b/kernel/sched/psi.c @@ -386,6 +386,9 @@ static void collect_percpu_times(struct psi_group *grou= p, &cpu_changed_states); changed_states |=3D cpu_changed_states; =20 + if (!(cpu_changed_states & (1 << PSI_NONIDLE))) + continue; + nonidle =3D nsecs_to_jiffies(times[PSI_NONIDLE]); nonidle_total +=3D nonidle; =20 --=20 2.43.0