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