rcu/nocb: De-offload and re-offload support v2
From: | Frederic Weisbecker <frederic-AT-kernel.org> | |
To: | "Paul E . McKenney" <paulmck-AT-kernel.org> | |
Subject: | [RFC PATCH 00/12] rcu/nocb: De-offload and re-offload support v2 | |
Date: | Mon, 21 Sep 2020 14:43:39 +0200 | |
Message-ID: | <20200921124351.24035-1-frederic@kernel.org> | |
Cc: | LKML <linux-kernel-AT-vger.kernel.org>, Frederic Weisbecker <frederic-AT-kernel.org>, Steven Rostedt <rostedt-AT-goodmis.org>, Mathieu Desnoyers <mathieu.desnoyers-AT-efficios.com>, Lai Jiangshan <jiangshanlai-AT-gmail.com>, Joel Fernandes <joel-AT-joelfernandes.org>, Josh Triplett <josh-AT-joshtriplett.org> | |
Archive-link: | Article |
Hi, This is the second attempt to make rcu-nocb mutable at runtime. See v1 there: https://lwn.net/Articles/820544/ This time a new approach, as per Paul's suggestion, is to ensure that callbacks are still served locally until nocb kthreads are fully ready or fully asleep. This is using a state machine implemented with a mask (see patch 3/12 for details). There is still some small polishing to do, as can be seen in the last patches, to make sure that local callbacks processing is correctly handled outside of strict softirq (or rcuc) mode. Thanks. git://git.kernel.org/pub/scm/linux/kernel/git/frederic/linux-dynticks.git rcu/nocb HEAD: 6abe8408307eaeb03b4a0470945943c1decbc4b3 Thanks, Frederic --- Frederic Weisbecker (12): rcu: Implement rcu_segcblist_is_offloaded() config dependent rcu: Turn enabled/offload states into a common flag rcu: Provide basic callback offloading state machine bits rcu: De-offloading CB kthread rcu: De-offloading GP kthread rcu: Re-offload support rcu: Shutdown nocb timer on de-offloading rcu: Flush bypass before setting SEGCBLIST_SOFTIRQ_ONLY rcu: Set SEGCBLIST_SOFTIRQ_ONLY at the very last stage of de-offloading rcu: Process batch locally as long as offloading isn't complete rcu: Locally accelerate callbacks as long as offloading isn't complete rcu: Nocb (de)activate through sysfs include/linux/rcu_segcblist.h | 119 ++++++++++++++++- include/linux/rcupdate.h | 4 + kernel/cpu.c | 23 ++++ kernel/rcu/rcu_segcblist.c | 13 +- kernel/rcu/rcu_segcblist.h | 45 ++++++- kernel/rcu/tree.c | 32 ++--- kernel/rcu/tree.h | 2 + kernel/rcu/tree_plugin.h | 297 +++++++++++++++++++++++++++++++++++++++--- 8 files changed, 491 insertions(+), 44 deletions(-)