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