rcu: Reduce leaf fanout for strict RCU grace periods
authorPaul E. McKenney <paulmck@kernel.org>
Wed, 5 Aug 2020 23:52:17 +0000 (16:52 -0700)
committerPaul E. McKenney <paulmck@kernel.org>
Tue, 25 Aug 2020 01:40:23 +0000 (18:40 -0700)
Because strict RCU grace periods will complete more quickly, they will
experience greater lock contention on each leaf rcu_node structure's
->lock.  This commit therefore reduces the leaf fanout in order to reduce
this lock contention.

Note that this also has the effect of reducing the number of CPUs
supported to 16 in the case of CONFIG_RCU_FANOUT_LEAF=2 or 81 in the
case of CONFIG_RCU_FANOUT_LEAF=3.  However, greater numbers of CPUs are
probably a bad idea when using CONFIG_RCU_STRICT_GRACE_PERIOD=y.  Those
wishing to live dangerously are free to edit their kernel/rcu/Kconfig
files accordingly.

Reported-by Jann Horn <jannh@google.com>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
kernel/rcu/Kconfig

index 0ebe15a..b71e21f 100644 (file)
@@ -135,10 +135,12 @@ config RCU_FANOUT
 
 config RCU_FANOUT_LEAF
        int "Tree-based hierarchical RCU leaf-level fanout value"
-       range 2 64 if 64BIT
-       range 2 32 if !64BIT
+       range 2 64 if 64BIT && !RCU_STRICT_GRACE_PERIOD
+       range 2 32 if !64BIT && !RCU_STRICT_GRACE_PERIOD
+       range 2 3 if RCU_STRICT_GRACE_PERIOD
        depends on TREE_RCU && RCU_EXPERT
-       default 16
+       default 16 if !RCU_STRICT_GRACE_PERIOD
+       default 2 if RCU_STRICT_GRACE_PERIOD
        help
          This option controls the leaf-level fanout of hierarchical
          implementations of RCU, and allows trading off cache misses