time: Move CONTEXT_TRACKING to kernel/time/Kconfig
[sfrench/cifs-2.6.git] / kernel / rcu / Kconfig
1 #
2 # RCU-related configuration options
3 #
4
5 menu "RCU Subsystem"
6
7 config TREE_RCU
8         bool
9         default y if !PREEMPT && SMP
10         help
11           This option selects the RCU implementation that is
12           designed for very large SMP system with hundreds or
13           thousands of CPUs.  It also scales down nicely to
14           smaller systems.
15
16 config PREEMPT_RCU
17         bool
18         default y if PREEMPT
19         help
20           This option selects the RCU implementation that is
21           designed for very large SMP systems with hundreds or
22           thousands of CPUs, but for which real-time response
23           is also required.  It also scales down nicely to
24           smaller systems.
25
26           Select this option if you are unsure.
27
28 config TINY_RCU
29         bool
30         default y if !PREEMPT && !SMP
31         help
32           This option selects the RCU implementation that is
33           designed for UP systems from which real-time response
34           is not required.  This option greatly reduces the
35           memory footprint of RCU.
36
37 config RCU_EXPERT
38         bool "Make expert-level adjustments to RCU configuration"
39         default n
40         help
41           This option needs to be enabled if you wish to make
42           expert-level adjustments to RCU configuration.  By default,
43           no such adjustments can be made, which has the often-beneficial
44           side-effect of preventing "make oldconfig" from asking you all
45           sorts of detailed questions about how you would like numerous
46           obscure RCU options to be set up.
47
48           Say Y if you need to make expert-level adjustments to RCU.
49
50           Say N if you are unsure.
51
52 config SRCU
53         bool
54         help
55           This option selects the sleepable version of RCU. This version
56           permits arbitrary sleeping or blocking within RCU read-side critical
57           sections.
58
59 config TINY_SRCU
60         bool
61         default y if SRCU && TINY_RCU
62         help
63           This option selects the single-CPU non-preemptible version of SRCU.
64
65 config TREE_SRCU
66         bool
67         default y if SRCU && !TINY_RCU
68         help
69           This option selects the full-fledged version of SRCU.
70
71 config TASKS_RCU
72         def_bool PREEMPT
73         select SRCU
74         help
75           This option enables a task-based RCU implementation that uses
76           only voluntary context switch (not preemption!), idle, and
77           user-mode execution as quiescent states.
78
79 config RCU_STALL_COMMON
80         def_bool ( TREE_RCU || PREEMPT_RCU )
81         help
82           This option enables RCU CPU stall code that is common between
83           the TINY and TREE variants of RCU.  The purpose is to allow
84           the tiny variants to disable RCU CPU stall warnings, while
85           making these warnings mandatory for the tree variants.
86
87 config RCU_NEED_SEGCBLIST
88         def_bool ( TREE_RCU || PREEMPT_RCU || TREE_SRCU )
89
90 config RCU_FANOUT
91         int "Tree-based hierarchical RCU fanout value"
92         range 2 64 if 64BIT
93         range 2 32 if !64BIT
94         depends on (TREE_RCU || PREEMPT_RCU) && RCU_EXPERT
95         default 64 if 64BIT
96         default 32 if !64BIT
97         help
98           This option controls the fanout of hierarchical implementations
99           of RCU, allowing RCU to work efficiently on machines with
100           large numbers of CPUs.  This value must be at least the fourth
101           root of NR_CPUS, which allows NR_CPUS to be insanely large.
102           The default value of RCU_FANOUT should be used for production
103           systems, but if you are stress-testing the RCU implementation
104           itself, small RCU_FANOUT values allow you to test large-system
105           code paths on small(er) systems.
106
107           Select a specific number if testing RCU itself.
108           Take the default if unsure.
109
110 config RCU_FANOUT_LEAF
111         int "Tree-based hierarchical RCU leaf-level fanout value"
112         range 2 64 if 64BIT
113         range 2 32 if !64BIT
114         depends on (TREE_RCU || PREEMPT_RCU) && RCU_EXPERT
115         default 16
116         help
117           This option controls the leaf-level fanout of hierarchical
118           implementations of RCU, and allows trading off cache misses
119           against lock contention.  Systems that synchronize their
120           scheduling-clock interrupts for energy-efficiency reasons will
121           want the default because the smaller leaf-level fanout keeps
122           lock contention levels acceptably low.  Very large systems
123           (hundreds or thousands of CPUs) will instead want to set this
124           value to the maximum value possible in order to reduce the
125           number of cache misses incurred during RCU's grace-period
126           initialization.  These systems tend to run CPU-bound, and thus
127           are not helped by synchronized interrupts, and thus tend to
128           skew them, which reduces lock contention enough that large
129           leaf-level fanouts work well.  That said, setting leaf-level
130           fanout to a large number will likely cause problematic
131           lock contention on the leaf-level rcu_node structures unless
132           you boot with the skew_tick kernel parameter.
133
134           Select a specific number if testing RCU itself.
135
136           Select the maximum permissible value for large systems, but
137           please understand that you may also need to set the skew_tick
138           kernel boot parameter to avoid contention on the rcu_node
139           structure's locks.
140
141           Take the default if unsure.
142
143 config RCU_FAST_NO_HZ
144         bool "Accelerate last non-dyntick-idle CPU's grace periods"
145         depends on NO_HZ_COMMON && SMP && RCU_EXPERT
146         default n
147         help
148           This option permits CPUs to enter dynticks-idle state even if
149           they have RCU callbacks queued, and prevents RCU from waking
150           these CPUs up more than roughly once every four jiffies (by
151           default, you can adjust this using the rcutree.rcu_idle_gp_delay
152           parameter), thus improving energy efficiency.  On the other
153           hand, this option increases the duration of RCU grace periods,
154           for example, slowing down synchronize_rcu().
155
156           Say Y if energy efficiency is critically important, and you
157                 don't care about increased grace-period durations.
158
159           Say N if you are unsure.
160
161 config RCU_BOOST
162         bool "Enable RCU priority boosting"
163         depends on RT_MUTEXES && PREEMPT_RCU && RCU_EXPERT
164         default n
165         help
166           This option boosts the priority of preempted RCU readers that
167           block the current preemptible RCU grace period for too long.
168           This option also prevents heavy loads from blocking RCU
169           callback invocation.
170
171           Say Y here if you are working with real-time apps or heavy loads
172           Say N here if you are unsure.
173
174 config RCU_BOOST_DELAY
175         int "Milliseconds to delay boosting after RCU grace-period start"
176         range 0 3000
177         depends on RCU_BOOST
178         default 500
179         help
180           This option specifies the time to wait after the beginning of
181           a given grace period before priority-boosting preempted RCU
182           readers blocking that grace period.  Note that any RCU reader
183           blocking an expedited RCU grace period is boosted immediately.
184
185           Accept the default if unsure.
186
187 config RCU_NOCB_CPU
188         bool "Offload RCU callback processing from boot-selected CPUs"
189         depends on TREE_RCU || PREEMPT_RCU
190         depends on RCU_EXPERT || NO_HZ_FULL
191         default n
192         help
193           Use this option to reduce OS jitter for aggressive HPC or
194           real-time workloads.  It can also be used to offload RCU
195           callback invocation to energy-efficient CPUs in battery-powered
196           asymmetric multiprocessors.
197
198           This option offloads callback invocation from the set of CPUs
199           specified at boot time by the rcu_nocbs parameter.  For each
200           such CPU, a kthread ("rcuox/N") will be created to invoke
201           callbacks, where the "N" is the CPU being offloaded, and where
202           the "p" for RCU-preempt (PREEMPT kernels) and "s" for RCU-sched
203           (!PREEMPT kernels).  Nothing prevents this kthread from running
204           on the specified CPUs, but (1) the kthreads may be preempted
205           between each callback, and (2) affinity or cgroups can be used
206           to force the kthreads to run on whatever set of CPUs is desired.
207
208           Say Y here if you want to help to debug reduced OS jitter.
209           Say N here if you are unsure.
210
211 endmenu # "RCU Subsystem"