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