diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2010-12-14 19:07:52 -0500 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2010-12-17 15:34:20 -0500 |
commit | 0209f6490b030f35349a2bb71294f3fd75b0f36d (patch) | |
tree | 159e233c6fcaf63fbb1a18f5db54af38a8336ee3 /kernel/rcutree.c | |
parent | 121dfc4b3eba9e2f3c42d35205a3510cc65b9931 (diff) |
rcu: limit rcu_node leaf-level fanout
Some recent benchmarks have indicated possible lock contention on the
leaf-level rcu_node locks. This commit therefore limits the number of
CPUs per leaf-level rcu_node structure to 16, in other words, there
can be at most 16 rcu_data structures fanning into a given rcu_node
structure. Prior to this, the limit was 32 on 32-bit systems and 64 on
64-bit systems.
Note that the fanout of non-leaf rcu_node structures is unchanged. The
organization of accesses to the rcu_node tree is such that references
to non-leaf rcu_node structures are much less frequent than to the
leaf structures.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcutree.c')
-rw-r--r-- | kernel/rcutree.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/rcutree.c b/kernel/rcutree.c index c39ec5b4ae82..01c8ad33c510 100644 --- a/kernel/rcutree.c +++ b/kernel/rcutree.c | |||
@@ -1869,8 +1869,9 @@ static void __init rcu_init_levelspread(struct rcu_state *rsp) | |||
1869 | { | 1869 | { |
1870 | int i; | 1870 | int i; |
1871 | 1871 | ||
1872 | for (i = NUM_RCU_LVLS - 1; i >= 0; i--) | 1872 | for (i = NUM_RCU_LVLS - 1; i > 0; i--) |
1873 | rsp->levelspread[i] = CONFIG_RCU_FANOUT; | 1873 | rsp->levelspread[i] = CONFIG_RCU_FANOUT; |
1874 | rsp->levelspread[0] = RCU_FANOUT_LEAF; | ||
1874 | } | 1875 | } |
1875 | #else /* #ifdef CONFIG_RCU_FANOUT_EXACT */ | 1876 | #else /* #ifdef CONFIG_RCU_FANOUT_EXACT */ |
1876 | static void __init rcu_init_levelspread(struct rcu_state *rsp) | 1877 | static void __init rcu_init_levelspread(struct rcu_state *rsp) |