linux/init
Paul E. McKenney 8932a63d5e rcu: Reduce cache-miss initialization latencies for large systems
Commit #0209f649 (rcu: limit rcu_node leaf-level fanout) set an upper
limit of 16 on the leaf-level fanout for the rcu_node tree.  This was
needed to reduce lock contention that was induced by the synchronization
of scheduling-clock interrupts, which was in turn needed to improve
energy efficiency for moderate-sized lightly loaded servers.

However, reducing the leaf-level fanout means that there are more
leaf-level rcu_node structures in the tree, which in turn means that
RCU's grace-period initialization incurs more cache misses.  This is
not a problem on moderate-sized servers with only a few tens of CPUs,
but becomes a major source of real-time latency spikes on systems with
many hundreds of CPUs.  In addition, the workloads running on these large
systems tend to be CPU-bound, which eliminates the energy-efficiency
advantages of synchronizing scheduling-clock interrupts.  Therefore,
these systems need maximal values for the rcu_node leaf-level fanout.

This commit addresses this problem by introducing a new kernel parameter
named RCU_FANOUT_LEAF that directly controls the leaf-level fanout.
This parameter defaults to 16 to handle the common case of a moderate
sized lightly loaded servers, but may be set higher on larger systems.

Reported-by: Mike Galbraith <efault@gmx.de>
Reported-by: Dimitri Sivanich <sivanich@sgi.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
2012-04-24 20:54:52 -07:00
..
calibrate.c init: check printed flag to skip printing message 2012-03-23 16:58:38 -07:00
do_mounts_initrd.c get rid of pointless includes of ext2_fs.h 2012-03-31 16:03:15 -04:00
do_mounts_md.c init: mark __user address space on string literals 2010-10-26 16:52:15 -07:00
do_mounts_rd.c new helper: ext2_image_size() 2012-03-31 16:03:16 -04:00
do_mounts.c init/do_mounts.c: print error code on mount failure 2012-03-23 16:58:38 -07:00
do_mounts.h md: move lots of #include lines out of .h files and into .c 2009-03-31 14:33:13 +11:00
initramfs.c init/initramfs.c: should use umode_t 2012-01-03 22:55:14 -05:00
Kconfig rcu: Reduce cache-miss initialization latencies for large systems 2012-04-24 20:54:52 -07:00
main.c Disintegrate and delete asm/system.h 2012-03-28 15:58:21 -07:00
Makefile kbuild: move compile.h to include/generated 2009-12-12 13:08:14 +01:00
noinitramfs.c init: mark __user address space on string literals 2010-10-26 16:52:15 -07:00
version.c userns: add a user_namespace as creator/owner of uts_namespace 2011-03-23 19:46:59 -07:00