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