From: Vishal Chourasia <vishalc@linux.ibm.com>
To: rcu@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: paulmck@kernel.org, frederic@kernel.org,
neeraj.upadhyay@kernel.org, joelagnelf@nvidia.com,
josh@joshtriplett.org, boqun.feng@gmail.com, urezki@gmail.com,
rostedt@goodmis.org, tglx@linutronix.de, peterz@infradead.org,
sshegde@linux.ibm.com, srikar@linux.ibm.com,
Vishal Chourasia <vishalc@linux.ibm.com>
Subject: [PATCH] cpuhp: Expedite synchronize_rcu during CPU hotplug operations
Date: Mon, 12 Jan 2026 15:13:33 +0530 [thread overview]
Message-ID: <20260112094332.66006-2-vishalc@linux.ibm.com> (raw)
Bulk CPU hotplug operations—such as switching SMT modes across all
cores—require hotplugging multiple CPUs in rapid succession. On large
systems, this process takes significant time, increasing as the number
of CPUs grows, leading to substantial delays on high-core-count
machines. Analysis [1] reveals that the majority of this time is spent
waiting for synchronize_rcu().
Expedite synchronize_rcu() during the hotplug path to accelerate the
operation. Since CPU hotplug is a user-initiated administrative task,
it should complete as quickly as possible.
Performance data on a PPC64 system with 400 CPUs:
+ ppc64_cpu --smt=1 (SMT8 to SMT1)
Before: real 1m14.792s
After: real 0m03.205s # ~23x improvement
+ ppc64_cpu --smt=8 (SMT1 to SMT8)
Before: real 2m27.695s
After: real 0m02.510s # ~58x improvement
Above numbers were collected on Linux 6.19.0-rc4-00310-g755bc1335e3b
[1] https://lore.kernel.org/all/5f2ab8a44d685701fe36cdaa8042a1aef215d10d.camel@linux.vnet.ibm.com
Signed-off-by: Vishal Chourasia <vishalc@linux.ibm.com>
---
include/linux/rcupdate.h | 3 +++
kernel/cpu.c | 2 ++
2 files changed, 5 insertions(+)
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
index c5b30054cd01..03c06cfb2b6d 100644
--- a/include/linux/rcupdate.h
+++ b/include/linux/rcupdate.h
@@ -1192,6 +1192,9 @@ rcu_head_after_call_rcu(struct rcu_head *rhp, rcu_callback_t f)
extern int rcu_expedited;
extern int rcu_normal;
+extern void rcu_expedite_gp(void);
+extern void rcu_unexpedite_gp(void);
+
DEFINE_LOCK_GUARD_0(rcu,
do {
rcu_read_lock();
diff --git a/kernel/cpu.c b/kernel/cpu.c
index 8df2d773fe3b..6b0d491d73f4 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -506,12 +506,14 @@ EXPORT_SYMBOL_GPL(cpus_read_unlock);
void cpus_write_lock(void)
{
+ rcu_expedite_gp();
percpu_down_write(&cpu_hotplug_lock);
}
void cpus_write_unlock(void)
{
percpu_up_write(&cpu_hotplug_lock);
+ rcu_unexpedite_gp();
}
void lockdep_assert_cpus_held(void)
--
2.52.0
next reply other threads:[~2026-01-12 9:44 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-12 9:43 Vishal Chourasia [this message]
2026-01-12 10:08 ` Uladzislau Rezki
2026-01-12 10:43 ` Vishal Chourasia
2026-01-12 11:07 ` Uladzislau Rezki
2026-01-12 12:02 ` Shrikanth Hegde
2026-01-12 12:57 ` Uladzislau Rezki
2026-01-12 16:09 ` Joel Fernandes
2026-01-12 16:48 ` Paul E. McKenney
2026-01-12 17:05 ` Uladzislau Rezki
2026-01-12 18:27 ` Vishal Chourasia
2026-01-13 0:03 ` Paul E. McKenney
2026-01-12 22:24 ` Joel Fernandes
2026-01-13 0:01 ` Paul E. McKenney
2026-01-13 2:46 ` Joel Fernandes
2026-01-13 4:53 ` Shrikanth Hegde
2026-01-13 8:57 ` Joel Fernandes
2026-01-14 4:00 ` Paul E. McKenney
2026-01-14 8:54 ` Joel Fernandes
2026-01-16 19:02 ` Paul E. McKenney
2026-01-14 3:59 ` Paul E. McKenney
2026-01-12 17:09 ` Uladzislau Rezki
2026-01-12 17:36 ` Joel Fernandes
2026-01-13 12:18 ` Uladzislau Rezki
2026-01-13 12:44 ` Joel Fernandes
2026-01-13 14:17 ` Uladzislau Rezki
2026-01-13 14:32 ` Joel Fernandes
2026-01-13 14:53 ` Shrikanth Hegde
2026-01-13 18:17 ` Uladzislau Rezki
2026-01-13 17:58 ` Uladzislau Rezki
2026-01-12 12:21 ` Shrikanth Hegde
2026-01-12 12:46 ` Vishal Chourasia
2026-01-12 14:03 ` Joel Fernandes
2026-01-12 14:20 ` Joel Fernandes
2026-01-12 14:23 ` Peter Zijlstra
2026-01-12 14:37 ` Joel Fernandes
2026-01-12 17:52 ` Vishal Chourasia
2026-01-12 14:24 ` Peter Zijlstra
2026-01-12 18:00 ` Vishal Chourasia
2026-01-13 9:01 ` Peter Zijlstra
2026-01-19 10:47 ` [PATCH] cpuhp: Expedite synchronize_rcu during SMT switch Vishal Chourasia
2026-01-19 11:43 ` Peter Zijlstra
2026-01-19 13:45 ` Shrikanth Hegde
2026-01-19 14:11 ` Peter Zijlstra
2026-01-19 14:45 ` Joel Fernandes
2026-01-19 14:59 ` Peter Zijlstra
2026-01-27 17:48 ` Samir M
2026-01-29 7:05 ` Samir M
2026-02-03 6:31 ` Samir M
2026-01-19 10:54 ` [RESEND] " Vishal Chourasia
2026-01-18 11:38 ` [PATCH] cpuhp: Expedite synchronize_rcu during CPU hotplug operations Samir M
2026-01-19 5:18 ` Joel Fernandes
2026-01-19 13:53 ` Shrikanth Hegde
2026-01-19 21:10 ` joelagnelf
2026-02-02 8:46 ` Vishal Chourasia
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260112094332.66006-2-vishalc@linux.ibm.com \
--to=vishalc@linux.ibm.com \
--cc=boqun.feng@gmail.com \
--cc=frederic@kernel.org \
--cc=joelagnelf@nvidia.com \
--cc=josh@joshtriplett.org \
--cc=linux-kernel@vger.kernel.org \
--cc=neeraj.upadhyay@kernel.org \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=rcu@vger.kernel.org \
--cc=rostedt@goodmis.org \
--cc=srikar@linux.ibm.com \
--cc=sshegde@linux.ibm.com \
--cc=tglx@linutronix.de \
--cc=urezki@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome