1 # SPDX-License-Identifier: GPL-2.0-only
3 # RCU-related configuration options
11 # Dynticks-idle tracking
12 select CONTEXT_TRACKING_IDLE
14 This option selects the RCU implementation that is
15 designed for very large SMP system with hundreds or
16 thousands of CPUs. It also scales down nicely to
21 default y if PREEMPTION
24 This option selects the RCU implementation that is
25 designed for very large SMP systems with hundreds or
26 thousands of CPUs, but for which real-time response
27 is also required. It also scales down nicely to
30 Select this option if you are unsure.
34 default y if !PREEMPTION && !SMP
36 This option selects the RCU implementation that is
37 designed for UP systems from which real-time response
38 is not required. This option greatly reduces the
39 memory footprint of RCU.
42 bool "Make expert-level adjustments to RCU configuration"
45 This option needs to be enabled if you wish to make
46 expert-level adjustments to RCU configuration. By default,
47 no such adjustments can be made, which has the often-beneficial
48 side-effect of preventing "make oldconfig" from asking you all
49 sorts of detailed questions about how you would like numerous
50 obscure RCU options to be set up.
52 Say Y if you need to make expert-level adjustments to RCU.
54 Say N if you are unsure.
59 This option selects the sleepable version of RCU. This version
60 permits arbitrary sleeping or blocking within RCU read-side critical
65 default y if SRCU && TINY_RCU
67 This option selects the single-CPU non-preemptible version of SRCU.
71 default y if SRCU && !TINY_RCU
73 This option selects the full-fledged version of SRCU.
75 config TASKS_RCU_GENERIC
76 def_bool TASKS_RCU || TASKS_RUDE_RCU || TASKS_TRACE_RCU
79 This option enables generic infrastructure code supporting
80 task-based RCU implementations. Not for manual selection.
82 config FORCE_TASKS_RCU
83 bool "Force selection of TASKS_RCU"
88 This option force-enables a task-based RCU implementation
89 that uses only voluntary context switch (not preemption!),
90 idle, and user-mode execution as quiescent states. Not for
91 manual selection in most cases.
98 config FORCE_TASKS_RUDE_RCU
99 bool "Force selection of Tasks Rude RCU"
100 depends on RCU_EXPERT
101 select TASKS_RUDE_RCU
104 This option force-enables a task-based RCU implementation
105 that uses only context switch (including preemption) and
106 user-mode execution as quiescent states. It forces IPIs and
107 context switches on all online CPUs, including idle ones,
108 so use with caution. Not for manual selection in most cases.
110 config TASKS_RUDE_RCU
115 config FORCE_TASKS_TRACE_RCU
116 bool "Force selection of Tasks Trace RCU"
117 depends on RCU_EXPERT
118 select TASKS_TRACE_RCU
121 This option enables a task-based RCU implementation that uses
122 explicit rcu_read_lock_trace() read-side markers, and allows
123 these readers to appear in the idle loop as well as on the
124 CPU hotplug code paths. It can force IPIs on online CPUs,
125 including idle ones, so use with caution. Not for manual
126 selection in most cases.
128 config TASKS_TRACE_RCU
133 config RCU_STALL_COMMON
136 This option enables RCU CPU stall code that is common between
137 the TINY and TREE variants of RCU. The purpose is to allow
138 the tiny variants to disable RCU CPU stall warnings, while
139 making these warnings mandatory for the tree variants.
141 config RCU_NEED_SEGCBLIST
142 def_bool ( TREE_RCU || TREE_SRCU || TASKS_RCU_GENERIC )
145 int "Tree-based hierarchical RCU fanout value"
148 depends on TREE_RCU && RCU_EXPERT
152 This option controls the fanout of hierarchical implementations
153 of RCU, allowing RCU to work efficiently on machines with
154 large numbers of CPUs. This value must be at least the fourth
155 root of NR_CPUS, which allows NR_CPUS to be insanely large.
156 The default value of RCU_FANOUT should be used for production
157 systems, but if you are stress-testing the RCU implementation
158 itself, small RCU_FANOUT values allow you to test large-system
159 code paths on small(er) systems.
161 Select a specific number if testing RCU itself.
162 Take the default if unsure.
164 config RCU_FANOUT_LEAF
165 int "Tree-based hierarchical RCU leaf-level fanout value"
166 range 2 64 if 64BIT && !RCU_STRICT_GRACE_PERIOD
167 range 2 32 if !64BIT && !RCU_STRICT_GRACE_PERIOD
168 range 2 3 if RCU_STRICT_GRACE_PERIOD
169 depends on TREE_RCU && RCU_EXPERT
170 default 16 if !RCU_STRICT_GRACE_PERIOD
171 default 2 if RCU_STRICT_GRACE_PERIOD
173 This option controls the leaf-level fanout of hierarchical
174 implementations of RCU, and allows trading off cache misses
175 against lock contention. Systems that synchronize their
176 scheduling-clock interrupts for energy-efficiency reasons will
177 want the default because the smaller leaf-level fanout keeps
178 lock contention levels acceptably low. Very large systems
179 (hundreds or thousands of CPUs) will instead want to set this
180 value to the maximum value possible in order to reduce the
181 number of cache misses incurred during RCU's grace-period
182 initialization. These systems tend to run CPU-bound, and thus
183 are not helped by synchronized interrupts, and thus tend to
184 skew them, which reduces lock contention enough that large
185 leaf-level fanouts work well. That said, setting leaf-level
186 fanout to a large number will likely cause problematic
187 lock contention on the leaf-level rcu_node structures unless
188 you boot with the skew_tick kernel parameter.
190 Select a specific number if testing RCU itself.
192 Select the maximum permissible value for large systems, but
193 please understand that you may also need to set the skew_tick
194 kernel boot parameter to avoid contention on the rcu_node
197 Take the default if unsure.
200 bool "Enable RCU priority boosting"
201 depends on (RT_MUTEXES && PREEMPT_RCU && RCU_EXPERT) || PREEMPT_RT
202 default y if PREEMPT_RT
204 This option boosts the priority of preempted RCU readers that
205 block the current preemptible RCU grace period for too long.
206 This option also prevents heavy loads from blocking RCU
209 Say Y here if you are working with real-time apps or heavy loads
210 Say N here if you are unsure.
212 config RCU_BOOST_DELAY
213 int "Milliseconds to delay boosting after RCU grace-period start"
218 This option specifies the time to wait after the beginning of
219 a given grace period before priority-boosting preempted RCU
220 readers blocking that grace period. Note that any RCU reader
221 blocking an expedited RCU grace period is boosted immediately.
223 Accept the default if unsure.
225 config RCU_EXP_KTHREAD
226 bool "Perform RCU expedited work in a real-time kthread"
227 depends on RCU_BOOST && RCU_EXPERT
228 default !PREEMPT_RT && NR_CPUS <= 32
230 Use this option to further reduce the latencies of expedited
231 grace periods at the expense of being more disruptive.
233 This option is disabled by default on PREEMPT_RT=y kernels which
234 disable expedited grace periods after boot by unconditionally
235 setting rcupdate.rcu_normal_after_boot=1.
237 Accept the default if unsure.
240 bool "Offload RCU callback processing from boot-selected CPUs"
242 depends on RCU_EXPERT || NO_HZ_FULL
245 Use this option to reduce OS jitter for aggressive HPC or
246 real-time workloads. It can also be used to offload RCU
247 callback invocation to energy-efficient CPUs in battery-powered
248 asymmetric multiprocessors. The price of this reduced jitter
249 is that the overhead of call_rcu() increases and that some
250 workloads will incur significant increases in context-switch
253 This option offloads callback invocation from the set of CPUs
254 specified at boot time by the rcu_nocbs parameter. For each
255 such CPU, a kthread ("rcuox/N") will be created to invoke
256 callbacks, where the "N" is the CPU being offloaded, and where
257 the "x" is "p" for RCU-preempt (PREEMPTION kernels) and "s" for
258 RCU-sched (!PREEMPTION kernels). Nothing prevents this kthread
259 from running on the specified CPUs, but (1) the kthreads may be
260 preempted between each callback, and (2) affinity or cgroups can
261 be used to force the kthreads to run on whatever set of CPUs is
264 Say Y here if you need reduced OS jitter, despite added overhead.
265 Say N here if you are unsure.
267 config RCU_NOCB_CPU_DEFAULT_ALL
268 bool "Offload RCU callback processing from all CPUs by default"
269 depends on RCU_NOCB_CPU
272 Use this option to offload callback processing from all CPUs
273 by default, in the absence of the rcu_nocbs or nohz_full boot
274 parameter. This also avoids the need to use any boot parameters
275 to achieve the effect of offloading all CPUs on boot.
277 Say Y here if you want offload all CPUs by default on boot.
278 Say N here if you are unsure.
280 config RCU_NOCB_CPU_CB_BOOST
281 bool "Offload RCU callback from real-time kthread"
282 depends on RCU_NOCB_CPU && RCU_BOOST
283 default y if PREEMPT_RT
285 Use this option to invoke offloaded callbacks as SCHED_FIFO
286 to avoid starvation by heavy SCHED_OTHER background load.
287 Of course, running as SCHED_FIFO during callback floods will
288 cause the rcuo[ps] kthreads to monopolize the CPU for hundreds
289 of milliseconds or more. Therefore, when enabling this option,
290 it is your responsibility to ensure that latency-sensitive
291 tasks either run with higher priority or run on some other CPU.
293 Say Y here if you want to set RT priority for offloading kthreads.
294 Say N here if you are building a !PREEMPT_RT kernel and are unsure.
296 config TASKS_TRACE_RCU_READ_MB
297 bool "Tasks Trace RCU readers use memory barriers in user and idle"
298 depends on RCU_EXPERT && TASKS_TRACE_RCU
299 default PREEMPT_RT || NR_CPUS < 8
301 Use this option to further reduce the number of IPIs sent
302 to CPUs executing in userspace or idle during tasks trace
303 RCU grace periods. Given that a reasonable setting of
304 the rcupdate.rcu_task_ipi_delay kernel boot parameter
305 eliminates such IPIs for many workloads, proper setting
306 of this Kconfig option is important mostly for aggressive
307 real-time installations and for battery-powered devices,
308 hence the default chosen above.
310 Say Y here if you hate IPIs.
311 Say N here if you hate read-side memory barriers.
312 Take the default if you are unsure.
314 endmenu # "RCU Subsystem"