[PATCH tip/core/rcu 0/14] No-CBs bypass addition for v5.4

From: Paul E. McKenney
Date: Fri Aug 02 2019 - 11:15:27 EST


Hello!

This series is a sneak preview of additional work for the move of no-CBs
CPUs to the ->cblist segmented RCU callback list. This work adds
a ->nocb_bypass list with its own lock to further reduce contention.
This series also includes some nascent work to turn the scheduling-clock
interrupt back on for nohz_full CPUs doing heavy rcutorture work or RCU
callback invocation, both of which can remain in the kernel for long
time periods, which in turn can impede CPU hotplug removals. (On some
systems "impede" means up to seven minutes for stop-machine to actually
get things to stop, a problem that has not yet been observed on no-CBs
CPUs that are not also nohz_full CPUs.)

1. Atomic ->len field in rcu_segcblist structure.

2. Add bypass callback queueing in ->nocb_bypass with its own
->nocb_bypass_lock.

3. (Experimental) Check use and usefulness of ->nocb_lock_contended.

4. Print no-CBs diagnostics when rcutorture writer unduly delayed.

5. Avoid synchronous wakeup in __call_rcu_nocb_wake().

6. Advance CBs after merge in rcutree_migrate_callbacks() to
avoid unnecessary invocation delays.

7. Reduce nocb_cb_wait() leaf rcu_node ->lock contention.

8. Reduce __call_rcu_nocb_wake() leaf rcu_node ->lock contention.

9. Don't wake no-CBs GP kthread if timer posted under overload,
thus reducing overhead in the overload case.

10. Allow rcu_do_batch() to dynamically adjust batch sizes, courtesy
of Eric Dumazet.

11. (Experimental) Add TICK_DEP_BIT_RCU, courtesy of Frederic Weisbecker.

12. Force on tick when invoking lots of callbacks to reduce the
probability of long stop-machine delays.

13. Force on tick for readers and callback flooders, again to reduce
the probability of long stop-machine delays.

14. (Experimental and likely quite imperfect) Make multi_cpu_stop()
enable tick on all online CPUs, yet again to reduce the
probability of long stop-machine delays.

Thanx, Paul

------------------------------------------------------------------------

include/linux/rcu_segcblist.h | 4
include/linux/tick.h | 7
kernel/rcu/rcu_segcblist.c | 116 +++++++++-
kernel/rcu/rcu_segcblist.h | 17 +
kernel/rcu/rcutorture.c | 25 +-
kernel/rcu/tree.c | 41 +++
kernel/rcu/tree.h | 35 ++-
kernel/rcu/tree_plugin.h | 486 +++++++++++++++++++++++++++++++++++++-----
kernel/rcu/tree_stall.h | 5
kernel/stop_machine.c | 9
kernel/time/tick-sched.c | 2
11 files changed, 667 insertions(+), 80 deletions(-)