]> asedeno.scripts.mit.edu Git - linux.git/commit
rcu: Enable elimination of Tree-RCU softirq processing
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Wed, 20 Mar 2019 21:13:33 +0000 (22:13 +0100)
committerPaul E. McKenney <paulmck@linux.ibm.com>
Sat, 25 May 2019 21:50:46 +0000 (14:50 -0700)
commit48d07c04b4cc1dc1221965312f58fd84926212fe
treef70300d26abc17bca3602990cca44f309a2120af
parenta188339ca5a396acc588e5851ed7e19f66b0ebd9
rcu: Enable elimination of Tree-RCU softirq processing

Some workloads need to change kthread priority for RCU core processing
without affecting other softirq work.  This commit therefore introduces
the rcutree.use_softirq kernel boot parameter, which moves the RCU core
work from softirq to a per-CPU SCHED_OTHER kthread named rcuc.  Use of
SCHED_OTHER approach avoids the scalability problems that appeared
with the earlier attempt to move RCU core processing to from softirq
to kthreads.  That said, kernels built with RCU_BOOST=y will run the
rcuc kthreads at the RCU-boosting priority.

Note that rcutree.use_softirq=0 must be specified to move RCU core
processing to the rcuc kthreads: rcutree.use_softirq=1 is the default.

Reported-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Mike Galbraith <efault@gmx.de>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
[ paulmck: Adjust for invoke_rcu_callbacks() only ever being invoked
  from RCU core processing, in contrast to softirq->rcuc transition
  in old mainline RCU priority boosting. ]
[ paulmck: Avoid wakeups when scheduler might have invoked rcu_read_unlock()
  while holding rq or pi locks, also possibly fixing a pre-existing latent
  bug involving raise_softirq()-induced wakeups. ]
Signed-off-by: Paul E. McKenney <paulmck@linux.ibm.com>
Documentation/admin-guide/kernel-parameters.txt
kernel/rcu/tree.c
kernel/rcu/tree.h
kernel/rcu/tree_plugin.h