Re: RFC on fixing mutex spinning on owner

From: Nicholas Mc Guire
Date: Thu Mar 17 2016 - 05:09:23 EST


On Thu, Mar 17, 2016 at 08:36:05AM +0100, Peter Zijlstra wrote:
> On Wed, Mar 16, 2016 at 10:17:51PM -0400, Steven Rostedt wrote:
> > Actually, the preempt off section here is not really an issue:
> >
> > rcu_read_lock();
> > while (owner_running(lock, owner)) {
> > if (need_resched())
> > break;
> >
> > cpu_relax_lowlatency();
> > }
> > rcu_read_unlock();
> >
> > Although preemption may be disabled, that "need_resched()" check will
> > break out of the loop if a higher priority task were to want to run on
> > this CPU.
> >
> > I probably should add a hook there to let the preemptoff tracer know
> > that this is not an issue.
>
> Urgh, there's a lot of such spin loops all over, that's going to be a
> pain to annotate all.

scanning for that patter with a quite relaxed spatch did not
turn up more than a hand full:

@resched_spin exists@
position p;
@@

(
* while@p (...) {
...
if (need_resched() || ...)
break;
...
\(cpu_relax\|cpu_relax_lowlatency\)();
}
|
* while@p (!need_resched()) {
...
\(cpu_relax\|cpu_relax_lowlatency\)();
}
)

@script:python@
p << resched_spin.p;
@@
print "%s:%s " % (p[0].file,p[0].line)


is this making some wrong assumptions here or is this
really so infrequent ?

thx!
hofrat