rcu: Add a TINY_PREEMPT_RCU
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Tue, 29 Jun 2010 23:49:16 +0000 (16:49 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Fri, 20 Aug 2010 15:55:00 +0000 (08:55 -0700)
commita57eb940d130477a799dfb24a570ee04979c0f7f
tree5add1c135a302cf1c1a454b0620ed17eb802923b
parent4d87ffadbba88105f33271bef5f2c79366c6a4e1
rcu: Add a TINY_PREEMPT_RCU

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: Loïc Minier <loic.minier@canonical.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
include/linux/hardirq.h
include/linux/init_task.h
include/linux/rcupdate.h
include/linux/rcutiny.h
include/linux/rcutree.h
include/linux/sched.h
init/Kconfig
kernel/Makefile
kernel/rcutiny.c
kernel/rcutiny_plugin.h