Merge tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux
[platform/kernel/linux-starfive.git] / kernel / rcu / Kconfig
1 # SPDX-License-Identifier: GPL-2.0-only
2 #
3 # RCU-related configuration options
4 #
5
6 menu "RCU Subsystem"
7
8 config TREE_RCU
9         bool
10         default y if SMP
11         # Dynticks-idle tracking
12         select CONTEXT_TRACKING_IDLE
13         help
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
17           smaller systems.
18
19 config PREEMPT_RCU
20         bool
21         default y if PREEMPTION
22         select TREE_RCU
23         help
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
28           smaller systems.
29
30           Select this option if you are unsure.
31
32 config TINY_RCU
33         bool
34         default y if !PREEMPTION && !SMP
35         help
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.
40
41 config RCU_EXPERT
42         bool "Make expert-level adjustments to RCU configuration"
43         default n
44         help
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.
51
52           Say Y if you need to make expert-level adjustments to RCU.
53
54           Say N if you are unsure.
55
56 config SRCU
57         bool
58         help
59           This option selects the sleepable version of RCU. This version
60           permits arbitrary sleeping or blocking within RCU read-side critical
61           sections.
62
63 config TINY_SRCU
64         bool
65         default y if SRCU && TINY_RCU
66         help
67           This option selects the single-CPU non-preemptible version of SRCU.
68
69 config TREE_SRCU
70         bool
71         default y if SRCU && !TINY_RCU
72         help
73           This option selects the full-fledged version of SRCU.
74
75 config TASKS_RCU_GENERIC
76         def_bool TASKS_RCU || TASKS_RUDE_RCU || TASKS_TRACE_RCU
77         select SRCU
78         help
79           This option enables generic infrastructure code supporting
80           task-based RCU implementations.  Not for manual selection.
81
82 config FORCE_TASKS_RCU
83         bool "Force selection of TASKS_RCU"
84         depends on RCU_EXPERT
85         select TASKS_RCU
86         default n
87         help
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.
92
93 config TASKS_RCU
94         bool
95         default n
96         select IRQ_WORK
97
98 config FORCE_TASKS_RUDE_RCU
99         bool "Force selection of Tasks Rude RCU"
100         depends on RCU_EXPERT
101         select TASKS_RUDE_RCU
102         default n
103         help
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.
109
110 config TASKS_RUDE_RCU
111         bool
112         default n
113         select IRQ_WORK
114
115 config FORCE_TASKS_TRACE_RCU
116         bool "Force selection of Tasks Trace RCU"
117         depends on RCU_EXPERT
118         select TASKS_TRACE_RCU
119         default n
120         help
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.
127
128 config TASKS_TRACE_RCU
129         bool
130         default n
131         select IRQ_WORK
132
133 config RCU_STALL_COMMON
134         def_bool TREE_RCU
135         help
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.
140
141 config RCU_NEED_SEGCBLIST
142         def_bool ( TREE_RCU || TREE_SRCU || TASKS_RCU_GENERIC )
143
144 config RCU_FANOUT
145         int "Tree-based hierarchical RCU fanout value"
146         range 2 64 if 64BIT
147         range 2 32 if !64BIT
148         depends on TREE_RCU && RCU_EXPERT
149         default 64 if 64BIT
150         default 32 if !64BIT
151         help
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.
160
161           Select a specific number if testing RCU itself.
162           Take the default if unsure.
163
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
172         help
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.
189
190           Select a specific number if testing RCU itself.
191
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
195           structure's locks.
196
197           Take the default if unsure.
198
199 config RCU_BOOST
200         bool "Enable RCU priority boosting"
201         depends on (RT_MUTEXES && PREEMPT_RCU && RCU_EXPERT) || PREEMPT_RT
202         default y if PREEMPT_RT
203         help
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
207           callback invocation.
208
209           Say Y here if you are working with real-time apps or heavy loads
210           Say N here if you are unsure.
211
212 config RCU_BOOST_DELAY
213         int "Milliseconds to delay boosting after RCU grace-period start"
214         range 0 3000
215         depends on RCU_BOOST
216         default 500
217         help
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.
222
223           Accept the default if unsure.
224
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
229         help
230           Use this option to further reduce the latencies of expedited
231           grace periods at the expense of being more disruptive.
232
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.
236
237           Accept the default if unsure.
238
239 config RCU_NOCB_CPU
240         bool "Offload RCU callback processing from boot-selected CPUs"
241         depends on TREE_RCU
242         depends on RCU_EXPERT || NO_HZ_FULL
243         default n
244         help
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
251           rates.
252
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
262           desired.
263
264           Say Y here if you need reduced OS jitter, despite added overhead.
265           Say N here if you are unsure.
266
267 config RCU_NOCB_CPU_DEFAULT_ALL
268         bool "Offload RCU callback processing from all CPUs by default"
269         depends on RCU_NOCB_CPU
270         default n
271         help
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.
276
277           Say Y here if you want offload all CPUs by default on boot.
278           Say N here if you are unsure.
279
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
284         help
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.
292
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.
295
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
300         help
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.
309
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.
313
314 endmenu # "RCU Subsystem"