From: Peter Zijlstra <peterz@infradead.org>
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: mingo@elte.hu, josh@joshtriplett.org, laijs@cn.fujitsu.com,
linux-kernel@vger.kernel.org
Subject: Re: cond_resched() and RCU CPU stall warnings
Date: Mon, 17 Mar 2014 11:13:00 +0100 [thread overview]
Message-ID: <20140317101300.GA27965@twins.programming.kicks-ass.net> (raw)
In-Reply-To: <20140316015914.GA22102@linux.vnet.ibm.com>
On Sat, Mar 15, 2014 at 06:59:14PM -0700, Paul E. McKenney wrote:
> So I have been tightening up rcutorture a bit over the past year.
> The other day, I came across what looked like a great opportunity for
> further tightening, namely the schedule() in rcu_torture_reader().
> Why not turn this into a cond_resched(), speeding up the readers a bit
> and placing more stress on RCU?
>
> And boy does it increase stress!
>
> Unfortunately, this increased stress sometimes shows up in the form of
> lots of RCU CPU stall warnings. These can appear when an instance of
> rcu_torture_reader() gets a CPU to itself, in which case it won't ever
> enter the scheduler, and RCU will never see a quiescent state from that
> CPU, which means the grace period never ends.
>
> So I am taking a more measured approach to cond_resched() in
> rcu_torture_reader() for the moment.
>
> But longer term, should cond_resched() imply a set of RCU
> quiescent states? One way to do this would be to add calls to
> rcu_note_context_switch() in each of the various cond_resched() functions.
> Easy change, but of course adds some overhead. On the other hand,
> there might be more than a few of the 500+ calls to cond_resched() that
> expect that RCU CPU stalls will be prevented (to say nothing of
> might_sleep() and cond_resched_lock()).
>
> Thoughts?
I share Mike's concern. Some of those functions might be too expensive
to do in the loops where we have the cond_resched()s. And while its only
strictly required when nr_running==1, keying off off that seems
unfortunate in that it makes things behave differently with a single
running task.
I suppose your proposed per-cpu counter is the best option; even though
its still an extra cacheline hit in cond_resched().
As to the other cond_resched() variants; they might be a little more
tricky, eg. cond_resched_lock() would have you drop the lock in order to
note the QS, etc.
So one thing that might make sense is to have something like
rcu_should_qs() which will indicate RCUs need for a grace period end.
Then we can augment the various should_resched()/spin_needbreak() etc.
with that condition.
That also gets rid of the counter (or at least hides it in the
implementation if RCU really can't do anything better).
next prev parent reply other threads:[~2014-03-17 10:13 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-16 1:59 cond_resched() and RCU CPU stall warnings Paul E. McKenney
2014-03-16 6:09 ` Mike Galbraith
2014-03-16 6:14 ` Mike Galbraith
2014-03-16 6:27 ` Paul E. McKenney
2014-03-16 6:25 ` Paul E. McKenney
2014-03-16 7:30 ` Mike Galbraith
2014-03-17 10:13 ` Peter Zijlstra [this message]
2014-03-17 16:58 ` Paul E. McKenney
2014-03-17 17:14 ` Peter Zijlstra
2014-03-18 2:17 ` Paul E. McKenney
2014-03-18 8:51 ` Peter Zijlstra
2014-03-18 12:49 ` Paul E. McKenney
2014-03-18 13:45 ` Peter Zijlstra
2014-03-18 15:15 ` 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=20140317101300.GA27965@twins.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=josh@joshtriplett.org \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=paulmck@linux.vnet.ibm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox