diff options
| author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2010-02-22 17:04:59 -0800 | 
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2010-02-25 10:34:55 +0100 | 
| commit | 8bd93a2c5d4cab2ae17d06350daa7dbf546a4634 (patch) | |
| tree | 3facbdbfbcc1b169fad20f456b0a2521adadfb25 /init/Kconfig | |
| parent | 998f2ac3fea93bfa8b55c279fff68f7c5b9ab93d (diff) | |
| download | linux-8bd93a2c5d4cab2ae17d06350daa7dbf546a4634.tar.bz2 | |
rcu: Accelerate grace period if last non-dynticked CPU
Currently, rcu_needs_cpu() simply checks whether the current CPU
has an outstanding RCU callback, which means that the last CPU
to go into dyntick-idle mode might wait a few ticks for the
relevant grace periods to complete.  However, if all the other
CPUs are in dyntick-idle mode, and if this CPU is in a quiescent
state (which it is for RCU-bh and RCU-sched any time that we are
considering going into dyntick-idle mode), then the grace period
is instantly complete.
This patch therefore repeatedly invokes the RCU grace-period
machinery in order to force any needed grace periods to complete
quickly.  It does so a limited number of times in order to
prevent starvation by an RCU callback function that might pass
itself to call_rcu().
However, if any CPU other than the current one is not in
dyntick-idle mode, fall back to simply checking (with fix to bug
noted by Lai Jiangshan).  Also, take advantage of last
grace-period forcing, the opportunity to do so noted by Steve
Rostedt.  And apply simplified #ifdef condition suggested by
Frederic Weisbecker.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: laijs@cn.fujitsu.com
Cc: dipankar@in.ibm.com
Cc: mathieu.desnoyers@polymtl.ca
Cc: josh@joshtriplett.org
Cc: dvhltc@us.ibm.com
Cc: niv@us.ibm.com
Cc: peterz@infradead.org
Cc: rostedt@goodmis.org
Cc: Valdis.Kletnieks@vt.edu
Cc: dhowells@redhat.com
LKML-Reference: <1266887105-1528-15-git-send-email-paulmck@linux.vnet.ibm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'init/Kconfig')
| -rw-r--r-- | init/Kconfig | 16 | 
1 files changed, 16 insertions, 0 deletions
diff --git a/init/Kconfig b/init/Kconfig index d95ca7cd5d45..42bf914b325a 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -396,6 +396,22 @@ config RCU_FANOUT_EXACT  	  Say N if unsure. +config RCU_FAST_NO_HZ +	bool "Accelerate last non-dyntick-idle CPU's grace periods" +	depends on TREE_RCU && NO_HZ && SMP +	default n +	help +	  This option causes RCU to attempt to accelerate grace periods +	  in order to allow the final CPU to enter dynticks-idle state +	  more quickly.  On the other hand, this option increases the +	  overhead of the dynticks-idle checking, particularly on systems +	  with large numbers of CPUs. + +	  Say Y if energy efficiency is critically important, particularly +	  	if you have relatively few CPUs. + +	  Say N if you are unsure. +  config TREE_RCU_TRACE  	def_bool RCU_TRACE && ( TREE_RCU || TREE_PREEMPT_RCU )  	select DEBUG_FS  |