public inbox for rcu@vger.kernel.org
 help / color / mirror / Atom feed
From: Vishal Chourasia <vishalc@linux.ibm.com>
To: peterz@infradead.org
Cc: boqun.feng@gmail.com, frederic@kernel.org, joelagnelf@nvidia.com,
	josh@joshtriplett.org, linux-kernel@vger.kernel.org,
	neeraj.upadhyay@kernel.org, paulmck@kernel.org,
	rcu@vger.kernel.org, rostedt@goodmis.org, srikar@linux.ibm.com,
	sshegde@linux.ibm.com, tglx@linutronix.de, urezki@gmail.com,
	samir@linux.ibm.com, vishalc@linux.ibm.com
Subject: [RESEND] [PATCH] cpuhp: Expedite synchronize_rcu during SMT switch
Date: Mon, 19 Jan 2026 16:24:08 +0530	[thread overview]
Message-ID: <20260119105407.440558-2-vishalc@linux.ibm.com> (raw)
In-Reply-To: <20260113090153.GS830755@noisy.programming.kicks-ass.net>

[Edits] Added Suggested-by tag

Expedite synchronize_rcu() during the cpuhp_smt_[enable|disable] path to
accelerate the operation.

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 to hotplug during SMT switch 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().

SMT switch is a user-initiated administrative task, it should complete
as quickly as possible.

Performance data on a PPC64 system with 2048 CPUs:

+ ppc64_cpu --smt=1 (SMT8 to SMT1)
Before: real 30m53.194s
After:  real 6m4.678s  # ~5x improvement

+ ppc64_cpu --smt=8 (SMT1 to SMT8)
Before: real 49m5.920s
After:  real 36m47.798s  # ~1.3x improvement

[1] https://lore.kernel.org/all/5f2ab8a44d685701fe36cdaa8042a1aef215d10d.camel@linux.vnet.ibm.com
[2] https://lore.kernel.org/all/20260113090153.GS830755@noisy.programming.kicks-ass.net/

Suggested-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Vishal Chourasia <vishalc@linux.ibm.com>
Tested-by: Samir M <samir@linux.ibm.com>

---
 include/linux/rcupdate.h | 3 +++
 kernel/cpu.c             | 4 ++++
 2 files changed, 7 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..a264d7170842 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -2669,6 +2669,7 @@ int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval)
 	int cpu, ret = 0;
 
 	cpu_maps_update_begin();
+	rcu_expedite_gp();
 	for_each_online_cpu(cpu) {
 		if (topology_is_primary_thread(cpu))
 			continue;
@@ -2698,6 +2699,7 @@ int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval)
 	}
 	if (!ret)
 		cpu_smt_control = ctrlval;
+	rcu_unexpedite_gp();
 	cpu_maps_update_done();
 	return ret;
 }
@@ -2716,6 +2718,7 @@ int cpuhp_smt_enable(void)
 
 	cpu_maps_update_begin();
 	cpu_smt_control = CPU_SMT_ENABLED;
+	rcu_expedite_gp();
 	for_each_present_cpu(cpu) {
 		/* Skip online CPUs and CPUs on offline nodes */
 		if (cpu_online(cpu) || !node_online(cpu_to_node(cpu)))
@@ -2728,6 +2731,7 @@ int cpuhp_smt_enable(void)
 		/* See comment in cpuhp_smt_disable() */
 		cpuhp_online_cpu_device(cpu);
 	}
+	rcu_unexpedite_gp();
 	cpu_maps_update_done();
 	return ret;
 }
-- 
2.52.0


  parent reply	other threads:[~2026-01-19 10:57 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-01-12  9:43 [PATCH] cpuhp: Expedite synchronize_rcu during CPU hotplug operations Vishal Chourasia
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       ` Vishal Chourasia [this message]
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=20260119105407.440558-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=samir@linux.ibm.com \
    --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