1#
2# RCU-related configuration options
3#
4
5menu "RCU Subsystem"
6
7config 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
16config 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
28config 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
37config 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
52config 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
59config 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
65config TREE_SRCU
66	bool
67	default y if SRCU && !TINY_RCU
68	help
69	  This option selects the full-fledged version of SRCU.
70
71config TASKS_RCU
72	def_bool PREEMPT
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
79config RCU_STALL_COMMON
80	def_bool ( TREE_RCU || PREEMPT_RCU )
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
87config RCU_NEED_SEGCBLIST
88	def_bool ( TREE_RCU || PREEMPT_RCU || TREE_SRCU )
89
90config CONTEXT_TRACKING
91       bool
92
93config 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
120config 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
140config 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
173config 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
191config 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
204config 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
217config 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
241endmenu # "RCU Subsystem"
242