On Wed, Jul 12, 2017 at 07:57:32PM +0200, Peter Zijlstra wrote:
> On Wed, Jul 12, 2017 at 07:17:56PM +0200, Peter Zijlstra wrote:
> > Could be I'm just not remembering how all that works.. But I was
> > wondering if we can do the expensive bits if we've decided to actually
> > go NOHZ and avoid doing it on every idle entry.
> > 
> > IIRC the RCU fast NOHZ bits try and flush the callback list (or paw it
> > off to another CPU?) such that we can go NOHZ sooner. Having a !empty
> > callback list avoid NOHZ from happening.
> > 
> > Now if we've already decided we can't in fact go NOHZ due to other
> > concerns, flushing the callback list is pointless work. So I'm thinking
> > we can find a better place to do this.
> 
> I'm a wee bit confused by the split between rcu_prepare_for_idle() and
> rcu_needs_cpu().
> 
> There's a fair amount overlap there.. that said, I'm thinking we should
> be calling rcu_needs_cpu() as the very last test, not the very first,
> such that we can bail out of tick_nohz_stop_sched_tick() without having
> to incur the penalty of flushing callbacks.

Maybe or maybe not, please see my earlier email for more details.

TL;DR:  No, callbacks are no longer flushed.  Yes, there is dependency.
Not hard to make rcu_prepare_for_idle() deal with rcu_needs_cpu() not
having been called, but it does need to happen.  Putting rcu_needs_cpu()
last is not necessarily a good thing.  If CPUs going idle normally
don't have callbacks, it won't help.  So we need hard evidence that
rcu_needs_cpu() is consuming significant time before hacking.

                                                Thanx, Paul

Reply via email to