Messages in this thread | | | Date | Wed, 9 Mar 2011 16:30:56 -0800 | From | "Paul E. McKenney" <> | Subject | Re: [PATCH] An RCU for SMP with a single CPU garbage collector |
| |
On Tue, Mar 08, 2011 at 05:53:55PM -0500, Joe Korty wrote: > On Tue, Mar 08, 2011 at 10:57:10AM -0500, Joe Korty wrote: > > On Tue, Mar 08, 2011 at 04:07:42AM -0500, Paul E. McKenney wrote: > >>> Thinking about it some more, the tap-into-syscall approach might > >>> work in my implementation, in which case the tap-into-preempt-enable > >>> code could go away. > > > > >> OK, please let me know how that goes! > >> > >>> Nice thing about RCU, the algorithms are infinitely mallable :) > >> > >> Just trying to keep the code size finite. ;-) > > > > I hope to get to it this afternoon! I especially like > > the lockless nature of JRCU, and that the dedicated cpus > > are not loaded down with callback inovcations either. > > Not sure how to support the PREEMPT_RCU mode though; so > > if Fredrick is planning to support that, that alone would > > make his approach the very best. > > > > Hi Paul, > I had a brainstorm. It _seems_ that JRCU might work fine if > all I did was remove the expensive preempt_enable() tap. > No new taps on system calls or anywhere else. That would > leave only the context switch tap plus the batch start/end > sampling that is remotely performed on each cpu by the > garbage collector. Not even rcu_read_unlock has a tap -- > it is just a plain-jane preempt_enable() now. > > And indeed it works! I am able to turn off the local > timer interrupt on one (of 15) cpus and the batches > keep flowing on. I have two user 100% use test apps > (one of them does no system calls), when I run that > on the timer-disabled cpu the batches still advance. > Admittedly the batches do not advance as fast as before > .. they used to advance at the max rate of 50 msecs/batch. > Now I regularly see batch lengths approaching 400 msecs. > > I plan to put some taps into some other low overhead places > -- at all the voluntary preemption points, at might_sleep, > at rcu_read_unlock, for safety purposes. But it is nice > to see a zero overhead approach that works fine without > any of that.
If you had a user-level process that never did system calls and never entered the scheduler, what do you do to force forward progress of the RCU grace periods? (This is force_quiescent_state()'s job in TREE_RCU, FYI.)
Thanx, Paul
| |