[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251028104255.1892485-2-srikar@linux.ibm.com>
Date: Tue, 28 Oct 2025 16:12:55 +0530
From: Srikar Dronamraju <srikar@...ux.ibm.com>
To: linux-kernel@...r.kernel.org
Cc: Michael Ellerman <mpe@...erman.id.au>,
Madhavan Srinivasan <maddy@...ux.ibm.com>,
linuxppc-dev@...ts.ozlabs.org, Ben Segall <bsegall@...gle.com>,
Christophe Leroy <christophe.leroy@...roup.eu>,
Dietmar Eggemann <dietmar.eggemann@....com>,
Ingo Molnar <mingo@...hat.com>, Juri Lelli <juri.lelli@...hat.com>,
Mel Gorman <mgorman@...e.de>, Nicholas Piggin <npiggin@...il.com>,
Peter Zijlstra <peterz@...radead.org>,
Steven Rostedt <rostedt@...dmis.org>,
Thomas Gleixner <tglx@...utronix.de>,
Valentin Schneider <vschneid@...hat.com>,
Vincent Guittot <vincent.guittot@...aro.org>,
Srikar Dronamraju <srikar@...ux.ibm.com>
Subject: [PATCH 2/2] powerpc/smp: Disable ACCT_STEAL for shared LPARs
In a shared LPAR with SMT enabled, it has been observed that when a CPU
experiences steal time, it can trigger task migrations between sibling
CPUs. The idle CPU pulls a runnable task from its sibling that is
impacted by steal, making the previously busy CPU go idle. This reversal
can repeat continuously, resulting in ping-pong behavior between SMT
siblings.
To avoid migrations solely triggered by steal time, disable the
ACCT_STEAL scheduling feature when running in shared processor mode.
lparstat
System Configuration
type=Shared mode=Uncapped smt=8 lcpu=72 mem=2139693696 kB cpus=64 ent=24.00
Noise case: (Ebizzy on 2 LPARs with similar configuration as above)
nr-ebizzy-threads baseline std-deviation +patch std-deviation
36 1 (0.0345589) 1.02358 (0.0346247)
72 1 (0.0387066) 1.11729 (0.0215052)
96 1 (0.013317) 1.07751 (0.014656)
128 1 (0.028087) 1.0585 (0.0173575)
144 1 (0.0103478) 1.11785 (0.0472121)
192 1 (0.0164666) 1.0212 (0.0226717)
256 1 (0.0241208) 0.969056 (0.0169747)
288 1 (0.0121516) 0.971862 (0.0190453)
scaled perf stats for 72 thread case.
event baseline +patch
cycles 1 1.16475
instructions 1 1.13198
cs 1 0.914774
migrations 1 0.116058
faults 1 0.94104
cache-misses 1 1.75184
Observations:
- We see a drop in context-switches and migrations resulting in an
improvement in the records per second.
No-noise case: (Ebizzy on 1 LPARs with other LPAR being idle)
nr-ebizzy-threads baseline std-deviation +patch std-deviation
36 1 (0.0451482) 0.985758 (0.0204456)
72 1 (0.0308503) 1.0288 (0.065893)
96 1 (0.0500514) 1.07178 (0.0376889)
128 1 (0.0602872) 0.986705 (0.0467856)
144 1 (0.0843502) 1.04157 (0.0626338)
192 1 (0.0255402) 1.03327 (0.0975257)
256 1 (0.00653372) 1.04572 (0.00576901)
288 1 (0.00318369) 1.04578 (0.0115398)
Signed-off-by: Srikar Dronamraju <srikar@...ux.ibm.com>
---
arch/powerpc/kernel/smp.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index 5ac7084eebc0..d80053f0a05e 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -1694,8 +1694,11 @@ static void __init build_sched_topology(void)
{
int i = 0;
- if (is_shared_processor() && has_big_cores)
- static_branch_enable(&splpar_asym_pack);
+ if (is_shared_processor()) {
+ if (has_big_cores)
+ static_branch_enable(&splpar_asym_pack);
+ steal_updates_cpu_capacity(false);
+ }
#ifdef CONFIG_SCHED_SMT
if (has_big_cores) {
--
2.47.3
Powered by blists - more mailing lists