Merge tag 'ntb-6.6' of https://github.com/jonmason/ntb
[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 TINY_SRCU
57         bool
58         default y if TINY_RCU
59         help
60           This option selects the single-CPU non-preemptible version of SRCU.
61
62 config TREE_SRCU
63         bool
64         default y if !TINY_RCU
65         help
66           This option selects the full-fledged version of SRCU.
67
68 config NEED_SRCU_NMI_SAFE
69         def_bool HAVE_NMI && !ARCH_HAS_NMI_SAFE_THIS_CPU_OPS && !TINY_SRCU
70
71 config TASKS_RCU_GENERIC
72         def_bool TASKS_RCU || TASKS_RUDE_RCU || TASKS_TRACE_RCU
73         help
74           This option enables generic infrastructure code supporting
75           task-based RCU implementations.  Not for manual selection.
76
77 config FORCE_TASKS_RCU
78         bool "Force selection of TASKS_RCU"
79         depends on RCU_EXPERT
80         select TASKS_RCU
81         default n
82         help
83           This option force-enables a task-based RCU implementation
84           that uses only voluntary context switch (not preemption!),
85           idle, and user-mode execution as quiescent states.  Not for
86           manual selection in most cases.
87
88 config TASKS_RCU
89         bool
90         default n
91         select IRQ_WORK
92
93 config FORCE_TASKS_RUDE_RCU
94         bool "Force selection of Tasks Rude RCU"
95         depends on RCU_EXPERT
96         select TASKS_RUDE_RCU
97         default n
98         help
99           This option force-enables a task-based RCU implementation
100           that uses only context switch (including preemption) and
101           user-mode execution as quiescent states.  It forces IPIs and
102           context switches on all online CPUs, including idle ones,
103           so use with caution.  Not for manual selection in most cases.
104
105 config TASKS_RUDE_RCU
106         bool
107         default n
108         select IRQ_WORK
109
110 config FORCE_TASKS_TRACE_RCU
111         bool "Force selection of Tasks Trace RCU"
112         depends on RCU_EXPERT
113         select TASKS_TRACE_RCU
114         default n
115         help
116           This option enables a task-based RCU implementation that uses
117           explicit rcu_read_lock_trace() read-side markers, and allows
118           these readers to appear in the idle loop as well as on the
119           CPU hotplug code paths.  It can force IPIs on online CPUs,
120           including idle ones, so use with caution.  Not for manual
121           selection in most cases.
122
123 config TASKS_TRACE_RCU
124         bool
125         default n
126         select IRQ_WORK
127
128 config RCU_STALL_COMMON
129         def_bool TREE_RCU
130         help
131           This option enables RCU CPU stall code that is common between
132           the TINY and TREE variants of RCU.  The purpose is to allow
133           the tiny variants to disable RCU CPU stall warnings, while
134           making these warnings mandatory for the tree variants.
135
136 config RCU_NEED_SEGCBLIST
137         def_bool ( TREE_RCU || TREE_SRCU || TASKS_RCU_GENERIC )
138
139 config RCU_FANOUT
140         int "Tree-based hierarchical RCU fanout value"
141         range 2 64 if 64BIT
142         range 2 32 if !64BIT
143         depends on TREE_RCU && RCU_EXPERT
144         default 64 if 64BIT
145         default 32 if !64BIT
146         help
147           This option controls the fanout of hierarchical implementations
148           of RCU, allowing RCU to work efficiently on machines with
149           large numbers of CPUs.  This value must be at least the fourth
150           root of NR_CPUS, which allows NR_CPUS to be insanely large.
151           The default value of RCU_FANOUT should be used for production
152           systems, but if you are stress-testing the RCU implementation
153           itself, small RCU_FANOUT values allow you to test large-system
154           code paths on small(er) systems.
155
156           Select a specific number if testing RCU itself.
157           Take the default if unsure.
158
159 config RCU_FANOUT_LEAF
160         int "Tree-based hierarchical RCU leaf-level fanout value"
161         range 2 64 if 64BIT && !RCU_STRICT_GRACE_PERIOD
162         range 2 32 if !64BIT && !RCU_STRICT_GRACE_PERIOD
163         range 2 3 if RCU_STRICT_GRACE_PERIOD
164         depends on TREE_RCU && RCU_EXPERT
165         default 16 if !RCU_STRICT_GRACE_PERIOD
166         default 2 if RCU_STRICT_GRACE_PERIOD
167         help
168           This option controls the leaf-level fanout of hierarchical
169           implementations of RCU, and allows trading off cache misses
170           against lock contention.  Systems that synchronize their
171           scheduling-clock interrupts for energy-efficiency reasons will
172           want the default because the smaller leaf-level fanout keeps
173           lock contention levels acceptably low.  Very large systems
174           (hundreds or thousands of CPUs) will instead want to set this
175           value to the maximum value possible in order to reduce the
176           number of cache misses incurred during RCU's grace-period
177           initialization.  These systems tend to run CPU-bound, and thus
178           are not helped by synchronized interrupts, and thus tend to
179           skew them, which reduces lock contention enough that large
180           leaf-level fanouts work well.  That said, setting leaf-level
181           fanout to a large number will likely cause problematic
182           lock contention on the leaf-level rcu_node structures unless
183           you boot with the skew_tick kernel parameter.
184
185           Select a specific number if testing RCU itself.
186
187           Select the maximum permissible value for large systems, but
188           please understand that you may also need to set the skew_tick
189           kernel boot parameter to avoid contention on the rcu_node
190           structure's locks.
191
192           Take the default if unsure.
193
194 config RCU_BOOST
195         bool "Enable RCU priority boosting"
196         depends on (RT_MUTEXES && PREEMPT_RCU && RCU_EXPERT) || PREEMPT_RT
197         default y if PREEMPT_RT
198         help
199           This option boosts the priority of preempted RCU readers that
200           block the current preemptible RCU grace period for too long.
201           This option also prevents heavy loads from blocking RCU
202           callback invocation.
203
204           Say Y here if you are working with real-time apps or heavy loads
205           Say N here if you are unsure.
206
207 config RCU_BOOST_DELAY
208         int "Milliseconds to delay boosting after RCU grace-period start"
209         range 0 3000
210         depends on RCU_BOOST
211         default 500
212         help
213           This option specifies the time to wait after the beginning of
214           a given grace period before priority-boosting preempted RCU
215           readers blocking that grace period.  Note that any RCU reader
216           blocking an expedited RCU grace period is boosted immediately.
217
218           Accept the default if unsure.
219
220 config RCU_EXP_KTHREAD
221         bool "Perform RCU expedited work in a real-time kthread"
222         depends on RCU_BOOST && RCU_EXPERT
223         default !PREEMPT_RT && NR_CPUS <= 32
224         help
225           Use this option to further reduce the latencies of expedited
226           grace periods at the expense of being more disruptive.
227
228           This option is disabled by default on PREEMPT_RT=y kernels which
229           disable expedited grace periods after boot by unconditionally
230           setting rcupdate.rcu_normal_after_boot=1.
231
232           Accept the default if unsure.
233
234 config RCU_NOCB_CPU
235         bool "Offload RCU callback processing from boot-selected CPUs"
236         depends on TREE_RCU
237         depends on RCU_EXPERT || NO_HZ_FULL
238         default n
239         help
240           Use this option to reduce OS jitter for aggressive HPC or
241           real-time workloads.  It can also be used to offload RCU
242           callback invocation to energy-efficient CPUs in battery-powered
243           asymmetric multiprocessors.  The price of this reduced jitter
244           is that the overhead of call_rcu() increases and that some
245           workloads will incur significant increases in context-switch
246           rates.
247
248           This option offloads callback invocation from the set of CPUs
249           specified at boot time by the rcu_nocbs parameter.  For each
250           such CPU, a kthread ("rcuox/N") will be created to invoke
251           callbacks, where the "N" is the CPU being offloaded, and where
252           the "x" is "p" for RCU-preempt (PREEMPTION kernels) and "s" for
253           RCU-sched (!PREEMPTION kernels).  Nothing prevents this kthread
254           from running on the specified CPUs, but (1) the kthreads may be
255           preempted between each callback, and (2) affinity or cgroups can
256           be used to force the kthreads to run on whatever set of CPUs is
257           desired.
258
259           Say Y here if you need reduced OS jitter, despite added overhead.
260           Say N here if you are unsure.
261
262 config RCU_NOCB_CPU_DEFAULT_ALL
263         bool "Offload RCU callback processing from all CPUs by default"
264         depends on RCU_NOCB_CPU
265         default n
266         help
267           Use this option to offload callback processing from all CPUs
268           by default, in the absence of the rcu_nocbs or nohz_full boot
269           parameter. This also avoids the need to use any boot parameters
270           to achieve the effect of offloading all CPUs on boot.
271
272           Say Y here if you want offload all CPUs by default on boot.
273           Say N here if you are unsure.
274
275 config RCU_NOCB_CPU_CB_BOOST
276         bool "Offload RCU callback from real-time kthread"
277         depends on RCU_NOCB_CPU && RCU_BOOST
278         default y if PREEMPT_RT
279         help
280           Use this option to invoke offloaded callbacks as SCHED_FIFO
281           to avoid starvation by heavy SCHED_OTHER background load.
282           Of course, running as SCHED_FIFO during callback floods will
283           cause the rcuo[ps] kthreads to monopolize the CPU for hundreds
284           of milliseconds or more.  Therefore, when enabling this option,
285           it is your responsibility to ensure that latency-sensitive
286           tasks either run with higher priority or run on some other CPU.
287
288           Say Y here if you want to set RT priority for offloading kthreads.
289           Say N here if you are building a !PREEMPT_RT kernel and are unsure.
290
291 config TASKS_TRACE_RCU_READ_MB
292         bool "Tasks Trace RCU readers use memory barriers in user and idle"
293         depends on RCU_EXPERT && TASKS_TRACE_RCU
294         default PREEMPT_RT || NR_CPUS < 8
295         help
296           Use this option to further reduce the number of IPIs sent
297           to CPUs executing in userspace or idle during tasks trace
298           RCU grace periods.  Given that a reasonable setting of
299           the rcupdate.rcu_task_ipi_delay kernel boot parameter
300           eliminates such IPIs for many workloads, proper setting
301           of this Kconfig option is important mostly for aggressive
302           real-time installations and for battery-powered devices,
303           hence the default chosen above.
304
305           Say Y here if you hate IPIs.
306           Say N here if you hate read-side memory barriers.
307           Take the default if you are unsure.
308
309 config RCU_LAZY
310         bool "RCU callback lazy invocation functionality"
311         depends on RCU_NOCB_CPU
312         default n
313         help
314           To save power, batch RCU callbacks and flush after delay, memory
315           pressure, or callback list growing too big.
316
317 config RCU_DOUBLE_CHECK_CB_TIME
318         bool "RCU callback-batch backup time check"
319         depends on RCU_EXPERT
320         default n
321         help
322           Use this option to provide more precise enforcement of the
323           rcutree.rcu_resched_ns module parameter in situations where
324           a single RCU callback might run for hundreds of microseconds,
325           thus defeating the 32-callback batching used to amortize the
326           cost of the fine-grained but expensive local_clock() function.
327
328           This option rounds rcutree.rcu_resched_ns up to the next
329           jiffy, and overrides the 32-callback batching if this limit
330           is exceeded.
331
332           Say Y here if you need tighter callback-limit enforcement.
333           Say N here if you are unsure.
334
335 endmenu # "RCU Subsystem"