Skip to content
  • Paul E. McKenney's avatar
    rcu: Add a TINY_PREEMPT_RCU · a57eb940
    Paul E. McKenney authored
    Implement a small-memory-footprint uniprocessor-only implementation of
    preemptible RCU.  This implementation uses but a single blocked-tasks
    list rather than the combinatorial number used per leaf rcu_node by
    TREE_PREEMPT_RCU, which reduces memory consumption and greatly simplifies
    processing.  This version also takes advantage of uniprocessor execution
    to accelerate grace periods in the case where there are no readers.
    
    The general design is otherwise broadly similar to that of TREE_PREEMPT_RCU.
    
    This implementation is a step towards having RCU implementation driven
    off of the SMP and PREEMPT kernel configuration variables, which can
    happen once this implementation has accumulated sufficient experience.
    
    Removed ACCESS_ONCE() from __rcu_read_unlock() and added barrier() as
    suggested by Steve Rostedt in order to avoid the compiler-reordering
    issue noted by Mathieu Desnoyers (http://lkml.org/lkml/2010/8/16/183
    
    ).
    
    As can be seen below, CONFIG_TINY_PREEMPT_RCU represents almost 5Kbyte
    savings compared to CONFIG_TREE_PREEMPT_RCU.  Of course, for non-real-time
    workloads, CONFIG_TINY_RCU is even better.
    
    	CONFIG_TREE_PREEMPT_RCU
    
    	   text	   data	    bss	    dec	   filename
    	     13	      0	      0	     13	   kernel/rcupdate.o
    	   6170	    825	     28	   7023	   kernel/rcutree.o
    				   ----
    				   7026    Total
    
    	CONFIG_TINY_PREEMPT_RCU
    
    	   text	   data	    bss	    dec	   filename
    	     13	      0	      0	     13	   kernel/rcupdate.o
    	   2081	     81	      8	   2170	   kernel/rcutiny.o
    				   ----
    				   2183    Total
    
    	CONFIG_TINY_RCU (non-preemptible)
    
    	   text	   data	    bss	    dec	   filename
    	     13	      0	      0	     13	   kernel/rcupdate.o
    	    719	     25	      0	    744	   kernel/rcutiny.o
    				    ---
    				    757    Total
    
    Requested-by: default avatarLoïc Minier <loic.minier@canonical.com>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    a57eb940