[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20231018134107.1941dcf5@gandalf.local.home>
Date: Wed, 18 Oct 2023 13:41:07 -0400
From: Steven Rostedt <rostedt@...dmis.org>
To: "Paul E. McKenney" <paulmck@...nel.org>
Cc: Thomas Gleixner <tglx@...utronix.de>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Peter Zijlstra <peterz@...radead.org>,
Ankur Arora <ankur.a.arora@...cle.com>,
linux-kernel@...r.kernel.org, linux-mm@...ck.org, x86@...nel.org,
akpm@...ux-foundation.org, luto@...nel.org, bp@...en8.de,
dave.hansen@...ux.intel.com, hpa@...or.com, mingo@...hat.com,
juri.lelli@...hat.com, vincent.guittot@...aro.org,
willy@...radead.org, mgorman@...e.de, jon.grimm@....com,
bharata@....com, raghavendra.kt@....com,
boris.ostrovsky@...cle.com, konrad.wilk@...cle.com,
jgross@...e.com, andrew.cooper3@...rix.com,
Frederic Weisbecker <fweisbec@...il.com>
Subject: Re: [PATCH v2 7/9] sched: define TIF_ALLOW_RESCHED
On Wed, 18 Oct 2023 10:19:53 -0700
"Paul E. McKenney" <paulmck@...nel.org> wrote:
>
> Isn't rcu_read_lock() defined as preempt_disable() and rcu_read_unlock()
> as preempt_enable() in this approach? I certainly hope so, as RCU
> priority boosting would be a most unwelcome addition to many datacenter
> workloads.
>
> > With this approach the kernel is by definition fully preemptible, which
> > means means rcu_read_lock() is preemptible too. That's pretty much the
> > same situation as with PREEMPT_DYNAMIC.
>
> Please, just no!!!
Note, when I first read Thomas's proposal, I figured that Paul would no
longer get to brag that:
"In CONFIG_PREEMPT_NONE, rcu_read_lock() and rcu_read_unlock() are simply
nops!"
But instead, they would be:
static void rcu_read_lock(void)
{
preempt_disable();
}
static void rcu_read_unlock(void)
{
preempt_enable();
}
as it was mentioned that today's preempt_disable() is fast and not an issue
like it was in older kernels.
That would mean that there will still be a "non preempt" version of RCU.
As the preempt version of RCU adds a lot more logic when scheduling out in
an RCU critical section, that I can envision not all workloads would want
around. Adding "preempt_disable()" is now low overhead, but adding the RCU
logic to handle preemption isn't as lightweight as that.
Not to mention the logic to boost those threads that were preempted and
being starved for some time.
> > > 6. You might think that RCU Tasks (as opposed to RCU Tasks Trace
> > > or RCU Tasks Rude) would need those pesky cond_resched() calls
> > > to stick around. The reason is that RCU Tasks readers are ended
> > > only by voluntary context switches. This means that although a
> > > preemptible infinite loop in the kernel won't inconvenience a
> > > real-time task (nor an non-real-time task for all that long),
> > > and won't delay grace periods for the other flavors of RCU,
> > > it would indefinitely delay an RCU Tasks grace period.
> > >
> > > However, RCU Tasks grace periods seem to be finite in preemptible
> > > kernels today, so they should remain finite in limited-preemptible
> > > kernels tomorrow. Famous last words...
> >
> > That's an issue which you have today with preempt FULL, right? So if it
> > turns out to be a problem then it's not a problem of the new model.
>
> Agreed, and hence my last three lines of text above. Plus the guy who
> requested RCU Tasks said that it was OK for its grace periods to take
> a long time, and I am holding Steven Rostedt to that. ;-)
Matters what your definition of "long time" is ;-)
-- Steve
Powered by blists - more mailing lists