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