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