From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: linux-kernel@vger.kernel.org
Cc: mingo@kernel.org, laijs@cn.fujitsu.com, dipankar@in.ibm.com,
akpm@linux-foundation.org, mathieu.desnoyers@efficios.com,
josh@joshtriplett.org, 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 12:12:36 -0700 [thread overview]
Message-ID: <20140620191236.GA10340@linux.vnet.ibm.com> (raw)
In-Reply-To: <20140620183249.GA6325@linux.vnet.ibm.com>
On Fri, Jun 20, 2014 at 11:32:49AM -0700, Paul E. McKenney wrote:
> Hello!
>
> This series contains changes to address the performance regressions
> introduced by commit ac1bea85781e (Make cond_resched() report RCU
> quiescent states), which was in turn fixing a problem where tasks looping
> in the kernel could delay RCU grace periods. The changes in this series
> are as follows:
>
> 1. Reduce the overhead of checking added to cond_resched() and friends.
>
> 2. Add a new cond_resched_rcu_qs() to provide RCU quiescent states
> even if cond_resched() should stop doing so.
>
> 3. Add a new RCU_COND_RESCHED_QS to prevent cond_resched() from
> reporting RCU quiescent states.
>
> 4. Prevent rcutorture testing from reporting spurious RCU CPU stall
> warnings, and also to test RCU_COND_RESCHED_QS.
>
> 5. Provides a boot/sysfs rcutree.jiffies_till_cond_resched_qs
> parameter to replace the magic "7".
And alternatives considered thus far:
o Just revert commit ac1bea85781e (Make cond_resched() report RCU
quiescent states). This would bring back the RCU CPU stalls
and OOMs that this commit was designed to fix.
o Just have cond_resched_rcu_qs() provide RCU quiescent states,
and leave cond_resched() unchanged. This is in fact what
the default RCU_COND_RESCHED_QS=y does, but the advantage
of allowing RCU_COND_RESCHED_QS=y is that it provides a good
workaround for cases where cond_resched() calls need to change
to cond_resched_rcu_qs().
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.
o Remove cond_resched() calls from various fastpaths. These were
presumably put there for a reason, and there might be situations
where that reason still holds.
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.
o Other thoughts?
Thanx, Paul
next prev parent reply other threads:[~2014-06-20 19:12 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 [this message]
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
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=20140620191236.GA10340@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--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=josh@joshtriplett.org \
--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=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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).