xref: /openbmc/linux/kernel/rcu/Kconfig (revision be709d48)
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 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
110config 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
143config 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
161config 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
169	  callback invocation.
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
174config 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
187config 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
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.
207
208	  Say Y here if you want to help to debug reduced OS jitter.
209	  Say N here if you are unsure.
210
211endmenu # "RCU Subsystem"
212