From: Uladzislau Rezki <urezki@gmail.com>
To: Neeraj Upadhyay <Neeraj.Upadhyay@amd.com>
Cc: Uladzislau Rezki <urezki@gmail.com>,
"Paul E . McKenney" <paulmck@kernel.org>,
Joel Fernandes <joel@joelfernandes.org>,
RCU <rcu@vger.kernel.org>, LKML <linux-kernel@vger.kernel.org>,
Frederic Weisbecker <frederic@kernel.org>,
Joel Fernandes <joelagnelf@nvidia.com>
Subject: Re: [PATCH v3 1/2] rcu: Enable rcu_normal_wake_from_gp on small systems
Date: Mon, 7 Jul 2025 15:15:12 +0200 [thread overview]
Message-ID: <aGvIYMBJsOpNx7-9@pc636> (raw)
In-Reply-To: <ccca5cb2-0d41-4fe1-a4a5-4344b4116770@amd.com>
On Mon, Jul 07, 2025 at 09:19:03AM +0530, Neeraj Upadhyay wrote:
>
>
> On 7/3/2025 9:05 PM, Uladzislau Rezki wrote:
> > On Wed, Jul 02, 2025 at 04:59:36PM +0200, Uladzislau Rezki (Sony) wrote:
> >> Automatically enable the rcu_normal_wake_from_gp parameter on
> >> systems with a small number of CPUs. The activation threshold
> >> is set to 16 CPUs.
> >>
> >> This helps to reduce a latency of normal synchronize_rcu() API
> >> by waking up GP-waiters earlier and decoupling synchronize_rcu()
> >> callers from regular callback handling.
> >>
> >> A benchmark running 64 parallel jobs(system with 64 CPUs) invoking
> >> synchronize_rcu() demonstrates a notable latency reduction with the
> >> setting enabled.
> >>
> >> Latency distribution (microseconds):
> >>
> >> <default>
> >> 0 - 9999 : 1
> >> 10000 - 19999 : 4
> >> 20000 - 29999 : 399
> >> 30000 - 39999 : 3197
> >> 40000 - 49999 : 10428
> >> 50000 - 59999 : 17363
> >> 60000 - 69999 : 15529
> >> 70000 - 79999 : 9287
> >> 80000 - 89999 : 4249
> >> 90000 - 99999 : 1915
> >> 100000 - 109999 : 922
> >> 110000 - 119999 : 390
> >> 120000 - 129999 : 187
> >> ...
> >> <default>
> >>
> >> <rcu_normal_wake_from_gp>
> >> 0 - 9999 : 1
> >> 10000 - 19999 : 234
> >> 20000 - 29999 : 6678
> >> 30000 - 39999 : 33463
> >> 40000 - 49999 : 20669
> >> 50000 - 59999 : 2766
> >> 60000 - 69999 : 183
> >> ...
> >> <rcu_normal_wake_from_gp>
> >>
> >> Reviewed-by: Joel Fernandes <joelagnelf@nvidia.com>
> >> Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
> >> ---
> >> kernel/rcu/tree.c | 14 +++++++++++---
> >> 1 file changed, 11 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
> >> index e8a4b720d7d2..b88ceb35cebd 100644
> >> --- a/kernel/rcu/tree.c
> >> +++ b/kernel/rcu/tree.c
> >> @@ -1625,8 +1625,10 @@ static void rcu_sr_put_wait_head(struct llist_node *node)
> >> atomic_set_release(&sr_wn->inuse, 0);
> >> }
> >>
> >> -/* Disabled by default. */
> >> -static int rcu_normal_wake_from_gp;
> >> +/* Enable rcu_normal_wake_from_gp automatically on small systems. */
> >> +#define WAKE_FROM_GP_CPU_THRESHOLD 16
> >> +
> >> +static int rcu_normal_wake_from_gp = -1;
> >> module_param(rcu_normal_wake_from_gp, int, 0644);
> >> static struct workqueue_struct *sync_wq;
> >>
> >> @@ -3239,7 +3241,7 @@ static void synchronize_rcu_normal(void)
> >>
> >> trace_rcu_sr_normal(rcu_state.name, &rs.head, TPS("request"));
> >>
> >> - if (!READ_ONCE(rcu_normal_wake_from_gp)) {
> >> + if (READ_ONCE(rcu_normal_wake_from_gp) < 1) {
> >> wait_rcu_gp(call_rcu_hurry);
> >> goto trace_complete_out;
> >> }
> >> @@ -4843,6 +4845,12 @@ void __init rcu_init(void)
> >> sync_wq = alloc_workqueue("sync_wq", WQ_MEM_RECLAIM, 0);
> >> WARN_ON(!sync_wq);
> >>
> >> + /* Respect if explicitly disabled via a boot parameter. */
> >> + if (rcu_normal_wake_from_gp < 0) {
> >> + if (num_possible_cpus() <= WAKE_FROM_GP_CPU_THRESHOLD)
> >> + rcu_normal_wake_from_gp = 1;
> >> + }
> >> +
> >> /* Fill in default value for rcutree.qovld boot parameter. */
> >> /* -After- the rcu_node ->lock fields are initialized! */
> >> if (qovld < 0)
> >> --
> >> 2.39.5
> >>
> > Neeraj, are you planning to take this for next merge window?
> >
>
> Yes, I have queued v2 of these for testing here:
>
> https://git.kernel.org/pub/scm/linux/kernel/git/neeraj.upadhyay/linux-rcu.git/log/?h=dev.01.07.2025
>
> Will include them in PR for next merge window.
>
Thank you! I asked because i did not see both in our common RCU tree.
--
Uladzislau Rezki
prev parent reply other threads:[~2025-07-07 13:15 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-02 14:59 [PATCH v3 1/2] rcu: Enable rcu_normal_wake_from_gp on small systems Uladzislau Rezki (Sony)
2025-07-02 14:59 ` [PATCH v3 2/2] Documentation/kernel-parameters: Update rcu_normal_wake_from_gp doc Uladzislau Rezki (Sony)
2025-07-03 15:36 ` Uladzislau Rezki
2025-07-07 3:49 ` Neeraj Upadhyay
2025-07-07 13:15 ` Uladzislau Rezki
2025-07-03 15:35 ` [PATCH v3 1/2] rcu: Enable rcu_normal_wake_from_gp on small systems Uladzislau Rezki
2025-07-07 3:49 ` Neeraj Upadhyay
2025-07-07 13:15 ` Uladzislau Rezki [this message]
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=aGvIYMBJsOpNx7-9@pc636 \
--to=urezki@gmail.com \
--cc=Neeraj.Upadhyay@amd.com \
--cc=frederic@kernel.org \
--cc=joel@joelfernandes.org \
--cc=joelagnelf@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=paulmck@kernel.org \
--cc=rcu@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.