From: josh@joshtriplett.org
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: linux-kernel@vger.kernel.org, mingo@kernel.org,
laijs@cn.fujitsu.com, dipankar@in.ibm.com,
akpm@linux-foundation.org, mathieu.desnoyers@efficios.com,
niv@us.ibm.com, tglx@linutronix.de, peterz@infradead.org,
rostedt@goodmis.org, dhowells@redhat.com, edumazet@google.com,
dvhart@linux.intel.com, fweisbec@gmail.com, oleg@redhat.com,
sbw@mit.edu
Subject: Re: [PATCH tip/core/rcu 0/5] Fix for cond_resched performance regression
Date: Fri, 20 Jun 2014 16:52:15 -0700 [thread overview]
Message-ID: <20140620235215.GA24026@cloud> (raw)
In-Reply-To: <20140620233033.GE4615@linux.vnet.ibm.com>
On Fri, Jun 20, 2014 at 04:30:33PM -0700, Paul E. McKenney wrote:
> On Fri, Jun 20, 2014 at 03:39:51PM -0700, josh@joshtriplett.org wrote:
> > On Fri, Jun 20, 2014 at 03:11:20PM -0700, Paul E. McKenney wrote:
> > > On Fri, Jun 20, 2014 at 02:24:23PM -0700, josh@joshtriplett.org wrote:
> > > > On Fri, Jun 20, 2014 at 12:12:36PM -0700, Paul E. McKenney wrote:
> > > > > o Make cond_resched() a no-op for PREEMPT=y. This might well turn
> > > > > out to be a good thing, but it doesn't help give RCU the quiescent
> > > > > states that it needs.
> > > >
> > > > What about doing this, together with letting the fqs logic poke
> > > > un-quiesced kernel code as needed? That way, rather than having
> > > > cond_resched do any work, you have the fqs logic recognize that a
> > > > particular CPU has gone too long without quiescing, without disturbing
> > > > that CPU at all if it hasn't gone too long.
> > >
> > > My next stop is to post the previous series, but with a couple of
> > > exports and one bug fix uncovered by testing thus far, but after
> > > another round of testing. Then I am going to take a close look at
> > > this one:
> > >
> > > o Push the checks further into cond_resched(), so that the
> > > fastpath does the same sequence of instructions that the original
> > > did. This might work well, but requires IPIs, which are not so
> > > good for latencies on the remote CPU. It nevertheless might be a
> > > decent long-term solution given that if your CPU is spending many
> > > jiffies looping in the kernel, you aren't getting good latencies
> > > anyway. It also has the benefit of allowing RCU to take advantage
> > > of the implicit quiescent states of all cond_resched() calls,
> > > and of eliminating the need for a separate cond_resched_rcu_qs()
> > > and for RCU_COND_RESCHED_QS.
> > >
> > > The one you call out is of course interesting as well. But there are
> > > a couple of questions:
> > >
> > > 1. Why wasn't cond_resched() a no-op in CONFIG_PREEMPT to start
> > > with? It just seems to obvious a thing to do for it to possibly
> > > be an oversight. (What, me paranoid?)
> > >
> > > 2. When RCU recognizes that a particular CPU has gone too long,
> > > exactly what are you suggesting that RCU do about it? When
> > > formulating your answer, please give due consideration to the
> > > implications of that CPU being a NO_HZ_FULL CPU. ;-)
> >
> > Send it an IPI that either causes it to flag a quiescent state
> > immediately if currently quiesced or causes it to quiesce at the next
> > opportunity if not.
>
> OK. But if we are in a !PREEMPT kernel,
That's not the case I was suggesting. *If* the kernel is fully
preemptible, then it makes little sense to put any code in cond_resched,
when instead another thread can simply cause a preemption if it needs a
quiescent state. That has the advantage of not imposing any unnecessary
polling on code running in the kernel.
In a !PREEMPT kernel, it makes a bit more sense to have cond_resched as
a voluntary preemption point. But voluntary preemption points don't
make as much sense in a kernel prepared to preempt a thread anywhere.
- Josh Triplett
next prev parent reply other threads:[~2014-06-20 23:52 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-20 18:32 [PATCH tip/core/rcu 0/5] Fix for cond_resched performance regression Paul E. McKenney
2014-06-20 18:33 ` [PATCH RFC tip/core/rcu 1/5] rcu: Reduce overhead of cond_resched() checks for RCU Paul E. McKenney
2014-06-20 18:33 ` [PATCH RFC tip/core/rcu 2/5] rcu: Provide cond_resched_rcu_qs() to force quiescent states in long loops Paul E. McKenney
2014-06-20 18:33 ` [PATCH RFC tip/core/rcu 3/5] rcu: Add RCU_COND_RESCHED_QS for large systems Paul E. McKenney
2014-06-20 18:33 ` [PATCH RFC tip/core/rcu 4/5] rcutorture: Suppress spurious RCU CPU stall warnings Paul E. McKenney
2014-06-20 18:33 ` [PATCH RFC tip/core/rcu 5/5] rcu: Add boot/sysfs control for RCU cond_resched() help solicitation Paul E. McKenney
2014-06-23 16:43 ` [PATCH RFC tip/core/rcu 1/5] rcu: Reduce overhead of cond_resched() checks for RCU Oleg Nesterov
2014-06-23 17:36 ` Paul E. McKenney
2014-06-23 18:35 ` Oleg Nesterov
2014-06-24 0:18 ` Paul E. McKenney
2014-07-22 4:35 ` Pranith Kumar
2014-07-22 4:52 ` Pranith Kumar
2014-07-22 11:07 ` Paul E. McKenney
2014-07-22 11:06 ` Paul E. McKenney
2014-06-20 19:04 ` [PATCH tip/core/rcu 0/5] Fix for cond_resched performance regression josh
2014-06-20 22:04 ` Paul E. McKenney
2014-06-20 19:12 ` Paul E. McKenney
2014-06-20 21:24 ` josh
2014-06-20 22:11 ` Paul E. McKenney
2014-06-20 22:39 ` josh
2014-06-20 23:30 ` Paul E. McKenney
2014-06-20 23:52 ` josh [this message]
2014-06-21 0:14 ` Paul E. McKenney
2014-06-21 0:36 ` Paul E. McKenney
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=20140620235215.GA24026@cloud \
--to=josh@joshtriplett.org \
--cc=akpm@linux-foundation.org \
--cc=dhowells@redhat.com \
--cc=dipankar@in.ibm.com \
--cc=dvhart@linux.intel.com \
--cc=edumazet@google.com \
--cc=fweisbec@gmail.com \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mingo@kernel.org \
--cc=niv@us.ibm.com \
--cc=oleg@redhat.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=sbw@mit.edu \
--cc=tglx@linutronix.de \
/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.