linux/kernel/rcu/Kconfig
<<
>>
Prefs
   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_GENERIC
  74        def_bool TASKS_RCU || TASKS_RUDE_RCU || TASKS_TRACE_RCU
  75        select SRCU
  76        help
  77          This option enables generic infrastructure code supporting
  78          task-based RCU implementations.  Not for manual selection.
  79
  80config TASKS_RCU
  81        def_bool PREEMPTION
  82        help
  83          This option enables a task-based RCU implementation that uses
  84          only voluntary context switch (not preemption!), idle, and
  85          user-mode execution as quiescent states.  Not for manual selection.
  86
  87config TASKS_RUDE_RCU
  88        def_bool 0
  89        help
  90          This option enables a task-based RCU implementation that uses
  91          only context switch (including preemption) and user-mode
  92          execution as quiescent states.  It forces IPIs and context
  93          switches on all online CPUs, including idle ones, so use
  94          with caution.
  95
  96config TASKS_TRACE_RCU
  97        def_bool 0
  98        select IRQ_WORK
  99        help
 100          This option enables a task-based RCU implementation that uses
 101          explicit rcu_read_lock_trace() read-side markers, and allows
 102          these readers to appear in the idle loop as well as on the CPU
 103          hotplug code paths.  It can force IPIs on online CPUs, including
 104          idle ones, so use with caution.
 105
 106config RCU_STALL_COMMON
 107        def_bool TREE_RCU
 108        help
 109          This option enables RCU CPU stall code that is common between
 110          the TINY and TREE variants of RCU.  The purpose is to allow
 111          the tiny variants to disable RCU CPU stall warnings, while
 112          making these warnings mandatory for the tree variants.
 113
 114config RCU_NEED_SEGCBLIST
 115        def_bool ( TREE_RCU || TREE_SRCU )
 116
 117config RCU_FANOUT
 118        int "Tree-based hierarchical RCU fanout value"
 119        range 2 64 if 64BIT
 120        range 2 32 if !64BIT
 121        depends on TREE_RCU && RCU_EXPERT
 122        default 64 if 64BIT
 123        default 32 if !64BIT
 124        help
 125          This option controls the fanout of hierarchical implementations
 126          of RCU, allowing RCU to work efficiently on machines with
 127          large numbers of CPUs.  This value must be at least the fourth
 128          root of NR_CPUS, which allows NR_CPUS to be insanely large.
 129          The default value of RCU_FANOUT should be used for production
 130          systems, but if you are stress-testing the RCU implementation
 131          itself, small RCU_FANOUT values allow you to test large-system
 132          code paths on small(er) systems.
 133
 134          Select a specific number if testing RCU itself.
 135          Take the default if unsure.
 136
 137config RCU_FANOUT_LEAF
 138        int "Tree-based hierarchical RCU leaf-level fanout value"
 139        range 2 64 if 64BIT && !RCU_STRICT_GRACE_PERIOD
 140        range 2 32 if !64BIT && !RCU_STRICT_GRACE_PERIOD
 141        range 2 3 if RCU_STRICT_GRACE_PERIOD
 142        depends on TREE_RCU && RCU_EXPERT
 143        default 16 if !RCU_STRICT_GRACE_PERIOD
 144        default 2 if RCU_STRICT_GRACE_PERIOD
 145        help
 146          This option controls the leaf-level fanout of hierarchical
 147          implementations of RCU, and allows trading off cache misses
 148          against lock contention.  Systems that synchronize their
 149          scheduling-clock interrupts for energy-efficiency reasons will
 150          want the default because the smaller leaf-level fanout keeps
 151          lock contention levels acceptably low.  Very large systems
 152          (hundreds or thousands of CPUs) will instead want to set this
 153          value to the maximum value possible in order to reduce the
 154          number of cache misses incurred during RCU's grace-period
 155          initialization.  These systems tend to run CPU-bound, and thus
 156          are not helped by synchronized interrupts, and thus tend to
 157          skew them, which reduces lock contention enough that large
 158          leaf-level fanouts work well.  That said, setting leaf-level
 159          fanout to a large number will likely cause problematic
 160          lock contention on the leaf-level rcu_node structures unless
 161          you boot with the skew_tick kernel parameter.
 162
 163          Select a specific number if testing RCU itself.
 164
 165          Select the maximum permissible value for large systems, but
 166          please understand that you may also need to set the skew_tick
 167          kernel boot parameter to avoid contention on the rcu_node
 168          structure's locks.
 169
 170          Take the default if unsure.
 171
 172config RCU_FAST_NO_HZ
 173        bool "Accelerate last non-dyntick-idle CPU's grace periods"
 174        depends on NO_HZ_COMMON && SMP && RCU_EXPERT
 175        default n
 176        help
 177          This option permits CPUs to enter dynticks-idle state even if
 178          they have RCU callbacks queued, and prevents RCU from waking
 179          these CPUs up more than roughly once every four jiffies (by
 180          default, you can adjust this using the rcutree.rcu_idle_gp_delay
 181          parameter), thus improving energy efficiency.  On the other
 182          hand, this option increases the duration of RCU grace periods,
 183          for example, slowing down synchronize_rcu().
 184
 185          Say Y if energy efficiency is critically important, and you
 186                don't care about increased grace-period durations.
 187
 188          Say N if you are unsure.
 189
 190config RCU_BOOST
 191        bool "Enable RCU priority boosting"
 192        depends on (RT_MUTEXES && PREEMPT_RCU && RCU_EXPERT) || PREEMPT_RT
 193        default y if PREEMPT_RT
 194        help
 195          This option boosts the priority of preempted RCU readers that
 196          block the current preemptible RCU grace period for too long.
 197          This option also prevents heavy loads from blocking RCU
 198          callback invocation.
 199
 200          Say Y here if you are working with real-time apps or heavy loads
 201          Say N here if you are unsure.
 202
 203config RCU_BOOST_DELAY
 204        int "Milliseconds to delay boosting after RCU grace-period start"
 205        range 0 3000
 206        depends on RCU_BOOST
 207        default 500
 208        help
 209          This option specifies the time to wait after the beginning of
 210          a given grace period before priority-boosting preempted RCU
 211          readers blocking that grace period.  Note that any RCU reader
 212          blocking an expedited RCU grace period is boosted immediately.
 213
 214          Accept the default if unsure.
 215
 216config RCU_NOCB_CPU
 217        bool "Offload RCU callback processing from boot-selected CPUs"
 218        depends on TREE_RCU
 219        depends on RCU_EXPERT || NO_HZ_FULL
 220        default n
 221        help
 222          Use this option to reduce OS jitter for aggressive HPC or
 223          real-time workloads.  It can also be used to offload RCU
 224          callback invocation to energy-efficient CPUs in battery-powered
 225          asymmetric multiprocessors.  The price of this reduced jitter
 226          is that the overhead of call_rcu() increases and that some
 227          workloads will incur significant increases in context-switch
 228          rates.
 229
 230          This option offloads callback invocation from the set of CPUs
 231          specified at boot time by the rcu_nocbs parameter.  For each
 232          such CPU, a kthread ("rcuox/N") will be created to invoke
 233          callbacks, where the "N" is the CPU being offloaded, and where
 234          the "x" is "p" for RCU-preempt (PREEMPTION kernels) and "s" for
 235          RCU-sched (!PREEMPTION kernels).  Nothing prevents this kthread
 236          from running on the specified CPUs, but (1) the kthreads may be
 237          preempted between each callback, and (2) affinity or cgroups can
 238          be used to force the kthreads to run on whatever set of CPUs is
 239          desired.
 240
 241          Say Y here if you need reduced OS jitter, despite added overhead.
 242          Say N here if you are unsure.
 243
 244config TASKS_TRACE_RCU_READ_MB
 245        bool "Tasks Trace RCU readers use memory barriers in user and idle"
 246        depends on RCU_EXPERT
 247        default PREEMPT_RT || NR_CPUS < 8
 248        help
 249          Use this option to further reduce the number of IPIs sent
 250          to CPUs executing in userspace or idle during tasks trace
 251          RCU grace periods.  Given that a reasonable setting of
 252          the rcupdate.rcu_task_ipi_delay kernel boot parameter
 253          eliminates such IPIs for many workloads, proper setting
 254          of this Kconfig option is important mostly for aggressive
 255          real-time installations and for battery-powered devices,
 256          hence the default chosen above.
 257
 258          Say Y here if you hate IPIs.
 259          Say N here if you hate read-side memory barriers.
 260          Take the default if you are unsure.
 261
 262endmenu # "RCU Subsystem"
 263