]>
Commit | Line | Data |
---|---|---|
0af92d46 PM |
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 | |
7e42776d | 72 | def_bool PREEMPT |
0af92d46 PM |
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 | |
6d48152e | 80 | def_bool ( TREE_RCU || PREEMPT_RCU ) |
0af92d46 PM |
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 CONTEXT_TRACKING | |
91 | bool | |
92 | ||
93 | config CONTEXT_TRACKING_FORCE | |
94 | bool "Force context tracking" | |
95 | depends on CONTEXT_TRACKING | |
96 | default y if !NO_HZ_FULL | |
97 | help | |
98 | The major pre-requirement for full dynticks to work is to | |
99 | support the context tracking subsystem. But there are also | |
100 | other dependencies to provide in order to make the full | |
101 | dynticks working. | |
102 | ||
103 | This option stands for testing when an arch implements the | |
104 | context tracking backend but doesn't yet fullfill all the | |
105 | requirements to make the full dynticks feature working. | |
106 | Without the full dynticks, there is no way to test the support | |
107 | for context tracking and the subsystems that rely on it: RCU | |
108 | userspace extended quiescent state and tickless cputime | |
109 | accounting. This option copes with the absence of the full | |
110 | dynticks subsystem by forcing the context tracking on all | |
111 | CPUs in the system. | |
112 | ||
113 | Say Y only if you're working on the development of an | |
114 | architecture backend for the context tracking. | |
115 | ||
116 | Say N otherwise, this option brings an overhead that you | |
117 | don't want in production. | |
118 | ||
119 | ||
120 | config RCU_FANOUT | |
121 | int "Tree-based hierarchical RCU fanout value" | |
122 | range 2 64 if 64BIT | |
123 | range 2 32 if !64BIT | |
124 | depends on (TREE_RCU || PREEMPT_RCU) && RCU_EXPERT | |
125 | default 64 if 64BIT | |
126 | default 32 if !64BIT | |
127 | help | |
128 | This option controls the fanout of hierarchical implementations | |
129 | of RCU, allowing RCU to work efficiently on machines with | |
130 | large numbers of CPUs. This value must be at least the fourth | |
131 | root of NR_CPUS, which allows NR_CPUS to be insanely large. | |
132 | The default value of RCU_FANOUT should be used for production | |
133 | systems, but if you are stress-testing the RCU implementation | |
134 | itself, small RCU_FANOUT values allow you to test large-system | |
135 | code paths on small(er) systems. | |
136 | ||
137 | Select a specific number if testing RCU itself. | |
138 | Take the default if unsure. | |
139 | ||
140 | config RCU_FANOUT_LEAF | |
141 | int "Tree-based hierarchical RCU leaf-level fanout value" | |
142 | range 2 64 if 64BIT | |
143 | range 2 32 if !64BIT | |
144 | depends on (TREE_RCU || PREEMPT_RCU) && RCU_EXPERT | |
145 | default 16 | |
146 | help | |
147 | This option controls the leaf-level fanout of hierarchical | |
148 | implementations of RCU, and allows trading off cache misses | |
149 | against lock contention. Systems that synchronize their | |
150 | scheduling-clock interrupts for energy-efficiency reasons will | |
151 | want the default because the smaller leaf-level fanout keeps | |
152 | lock contention levels acceptably low. Very large systems | |
153 | (hundreds or thousands of CPUs) will instead want to set this | |
154 | value to the maximum value possible in order to reduce the | |
155 | number of cache misses incurred during RCU's grace-period | |
156 | initialization. These systems tend to run CPU-bound, and thus | |
157 | are not helped by synchronized interrupts, and thus tend to | |
158 | skew them, which reduces lock contention enough that large | |
159 | leaf-level fanouts work well. That said, setting leaf-level | |
160 | fanout to a large number will likely cause problematic | |
161 | lock contention on the leaf-level rcu_node structures unless | |
162 | you boot with the skew_tick kernel parameter. | |
163 | ||
164 | Select a specific number if testing RCU itself. | |
165 | ||
166 | Select the maximum permissible value for large systems, but | |
167 | please understand that you may also need to set the skew_tick | |
168 | kernel boot parameter to avoid contention on the rcu_node | |
169 | structure's locks. | |
170 | ||
171 | Take the default if unsure. | |
172 | ||
173 | config RCU_FAST_NO_HZ | |
174 | bool "Accelerate last non-dyntick-idle CPU's grace periods" | |
175 | depends on NO_HZ_COMMON && SMP && RCU_EXPERT | |
176 | default n | |
177 | help | |
178 | This option permits CPUs to enter dynticks-idle state even if | |
179 | they have RCU callbacks queued, and prevents RCU from waking | |
180 | these CPUs up more than roughly once every four jiffies (by | |
181 | default, you can adjust this using the rcutree.rcu_idle_gp_delay | |
182 | parameter), thus improving energy efficiency. On the other | |
183 | hand, this option increases the duration of RCU grace periods, | |
184 | for example, slowing down synchronize_rcu(). | |
185 | ||
186 | Say Y if energy efficiency is critically important, and you | |
187 | don't care about increased grace-period durations. | |
188 | ||
189 | Say N if you are unsure. | |
190 | ||
191 | config RCU_BOOST | |
192 | bool "Enable RCU priority boosting" | |
193 | depends on RT_MUTEXES && PREEMPT_RCU && RCU_EXPERT | |
194 | default n | |
195 | help | |
196 | This option boosts the priority of preempted RCU readers that | |
197 | block the current preemptible RCU grace period for too long. | |
198 | This option also prevents heavy loads from blocking RCU | |
199 | callback invocation for all flavors of RCU. | |
200 | ||
201 | Say Y here if you are working with real-time apps or heavy loads | |
202 | Say N here if you are unsure. | |
203 | ||
204 | config RCU_BOOST_DELAY | |
205 | int "Milliseconds to delay boosting after RCU grace-period start" | |
206 | range 0 3000 | |
207 | depends on RCU_BOOST | |
208 | default 500 | |
209 | help | |
210 | This option specifies the time to wait after the beginning of | |
211 | a given grace period before priority-boosting preempted RCU | |
212 | readers blocking that grace period. Note that any RCU reader | |
213 | blocking an expedited RCU grace period is boosted immediately. | |
214 | ||
215 | Accept the default if unsure. | |
216 | ||
217 | config RCU_NOCB_CPU | |
218 | bool "Offload RCU callback processing from boot-selected CPUs" | |
219 | depends on TREE_RCU || PREEMPT_RCU | |
220 | depends on RCU_EXPERT || NO_HZ_FULL | |
221 | default n | |
222 | help | |
223 | Use this option to reduce OS jitter for aggressive HPC or | |
224 | real-time workloads. It can also be used to offload RCU | |
225 | callback invocation to energy-efficient CPUs in battery-powered | |
226 | asymmetric multiprocessors. | |
227 | ||
228 | This option offloads callback invocation from the set of | |
229 | CPUs specified at boot time by the rcu_nocbs parameter. | |
230 | For each such CPU, a kthread ("rcuox/N") will be created to | |
231 | invoke callbacks, where the "N" is the CPU being offloaded, | |
232 | and where the "x" is "b" for RCU-bh, "p" for RCU-preempt, and | |
233 | "s" for RCU-sched. Nothing prevents this kthread from running | |
234 | on the specified CPUs, but (1) the kthreads may be preempted | |
235 | between each callback, and (2) affinity or cgroups can be used | |
236 | to force the kthreads to run on whatever set of CPUs is desired. | |
237 | ||
238 | Say Y here if you want to help to debug reduced OS jitter. | |
239 | Say N here if you are unsure. | |
240 | ||
241 | endmenu # "RCU Subsystem" |