From: Frederic Weisbecker <frederic@kernel.org>
To: "Paul E. McKenney" <paulmck@kernel.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
Uladzislau Rezki <urezki@gmail.com>,
Neeraj Upadhyay <quic_neeraju@quicinc.com>,
Boqun Feng <boqun.feng@gmail.com>,
Josh Triplett <josh@joshtriplett.org>,
Joel Fernandes <joel@joelfernandes.org>,
rcu@vger.kernel.org
Subject: Re: [PATCH 4/6] rcu/nocb: Create nocb kthreads on all CPUs as long as the "rcu_nocb=" is passed
Date: Wed, 17 Nov 2021 22:57:53 +0100 [thread overview]
Message-ID: <20211117215753.GB365507@lothringen> (raw)
In-Reply-To: <20211117192710.GK641268@paulmck-ThinkPad-P17-Gen-1>
On Wed, Nov 17, 2021 at 11:27:10AM -0800, Paul E. McKenney wrote:
> On Wed, Nov 17, 2021 at 04:56:35PM +0100, Frederic Weisbecker wrote:
> > In order to be able to (de-)offload any CPU using cpuset in the future,
> > create a NOCB kthread for all possible CPUs. For now this is done only
> > as long as the "rcu_nocb=" kernel parameter is passed to avoid
> > the unnecessary overhead for most users.
>
> The "nohz_full=" kernel parameter would also cause these kthreads to
> be created, correct? (Yeah, a nit, but...)
>
> And some fallout of my forgetfulness below. :-/
Ah right, that too!
> >
> > @@ -1268,7 +1265,7 @@ static void __init rcu_spawn_nocb_kthreads(void)
> > int cpu;
> >
> > if (rcu_nocb_is_setup) {
> > - for_each_online_cpu(cpu)
> > + for_each_possible_cpu(cpu)
>
> Gah... I had forgotten. :-/
>
> Some firmware lies about the OS instance's age. Other firmware lies
> about the number of CPUs, sometimes claiming large multiples of the
> actual number of CPUs.
>
> So this needs to stay "for_each_online_cpu". Otherwise, Paul Gortmaker
> will once again be afflicted with hundreds of unnecessary rcuo kthreads.
>
> The later calls to rcutree_prepare_cpu() from rcutree_prepare_cpu()
> will take care of any CPUs that first come online later.
Ok that makes sense.
>
> > rcu_spawn_cpu_nocb_kthread(cpu);
> > }
> > }
> > @@ -1303,7 +1300,7 @@ static void __init rcu_organize_nocb_kthreads(void)
> > * Should the corresponding CPU come online in the future, then
> > * we will spawn the needed set of rcu_nocb_kthread() kthreads.
> > */
> > - for_each_cpu(cpu, rcu_nocb_mask) {
> > + for_each_possible_cpu(cpu) {
>
> This needs to change, but to for_each_online_cpu() instead of
> for_each_possible_cpu(). That handles the case where the boot CPU is
> not initially offloaded, but where the sysadm later needs to offload it.
I'm less sure about that one. This is called early from rcu_init_nohz(). Only
the boot CPU should be online at that point. We really need to integrate all
possible CPUs within the nocb groups.
Thanks.
>
> > rdp = per_cpu_ptr(&rcu_data, cpu);
> > if (rdp->cpu >= nl) {
> > /* New GP kthread, set up for CBs & next GP. */
> > @@ -1327,7 +1324,8 @@ static void __init rcu_organize_nocb_kthreads(void)
> > pr_cont(" %d", cpu);
> > }
> > rdp->nocb_gp_rdp = rdp_gp;
> > - list_add_tail(&rdp->nocb_entry_rdp, &rdp_gp->nocb_head_rdp);
> > + if (cpumask_test_cpu(cpu, rcu_nocb_mask))
> > + list_add_tail(&rdp->nocb_entry_rdp, &rdp_gp->nocb_head_rdp);
> > }
> > if (gotnocbs && dump_tree)
> > pr_cont("%s\n", gotnocbscbs ? "" : " (self only)");
> > --
> > 2.25.1
> >
next prev parent reply other threads:[~2021-11-17 21:58 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-17 15:56 [PATCH 0/6] rcu/nocb: Last prep work before cpuset interface Frederic Weisbecker
2021-11-17 15:56 ` [PATCH 1/6] rcu/nocb: Remove rdp from nocb list when de-offloaded Frederic Weisbecker
2021-11-17 18:53 ` Paul E. McKenney
2021-11-17 21:47 ` Frederic Weisbecker
2021-11-17 22:25 ` Paul E. McKenney
2021-11-17 15:56 ` [PATCH 2/6] rcu/nocb: Prepare nocb_cb_wait() to start with a non-offloaded rdp Frederic Weisbecker
2021-11-17 15:56 ` [PATCH 3/6] rcu/nocb: Optimize kthreads and rdp initialization Frederic Weisbecker
2021-11-17 15:56 ` [PATCH 4/6] rcu/nocb: Create nocb kthreads on all CPUs as long as the "rcu_nocb=" is passed Frederic Weisbecker
2021-11-17 19:27 ` Paul E. McKenney
2021-11-17 21:57 ` Frederic Weisbecker [this message]
2021-11-17 22:28 ` Paul E. McKenney
2021-11-17 15:56 ` [PATCH 5/6] rcu/nocb: Allow empty "rcu_nocbs" kernel parameter Frederic Weisbecker
2021-11-17 19:46 ` Paul E. McKenney
2021-11-17 22:02 ` Frederic Weisbecker
2021-11-17 22:33 ` Paul E. McKenney
2021-11-17 15:56 ` [PATCH 6/6] rcu/nocb: Merge rcu_spawn_cpu_nocb_kthread() and rcu_spawn_one_nocb_kthread() Frederic Weisbecker
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=20211117215753.GB365507@lothringen \
--to=frederic@kernel.org \
--cc=boqun.feng@gmail.com \
--cc=joel@joelfernandes.org \
--cc=josh@joshtriplett.org \
--cc=linux-kernel@vger.kernel.org \
--cc=paulmck@kernel.org \
--cc=quic_neeraju@quicinc.com \
--cc=rcu@vger.kernel.org \
--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 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.