Linux Documentation
 help / color / mirror / Atom feed
* [PATCH v4 00/11] Dynamic Housekeeping Management (DHM) via CPUSets
@ 2026-07-10  3:28 Jing Wu
  2026-07-10  3:28 ` [PATCH v4 01/11] sched/isolation: Add runtime housekeeping mask updates with boot snapshots Jing Wu
                   ` (10 more replies)
  0 siblings, 11 replies; 12+ messages in thread
From: Jing Wu @ 2026-07-10  3:28 UTC (permalink / raw)
  To: Ingo Molnar, Peter Zijlstra, Juri Lelli, Vincent Guittot,
	Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman,
	Valentin Schneider, Paul E. McKenney, Frederic Weisbecker,
	Neeraj Upadhyay, Joel Fernandes, Josh Triplett, Boqun Feng,
	Uladzislau Rezki, Mathieu Desnoyers, Lai Jiangshan, Zqiang,
	Anna-Maria Behnsen, Tejun Heo, Jonathan Corbet, Shuah Khan,
	Shuah Khan, Thomas Gleixner
  Cc: Waiman Long, linux-kernel, rcu, cgroups, linux-doc,
	linux-kselftest, Jing Wu, Qiliang Yuan

This series introduces Dynamic Housekeeping Management (DHM) to the Linux
kernel, enabling runtime reconfiguration of kernel-noise housekeeping
(nohz_full tick suppression, RCU NOCB offloading, and managed IRQ
migration) through the existing cgroup v2 cpuset isolated partition
mechanism — no new kernel ABI required.

When a cpuset partition is set to isolated mode, DHM cycles each CPU in
that partition offline, reconfigures the housekeeping masks (removing the
CPU from HK_TYPE_KERNEL_NOISE and related types), and brings it back
online.  The subsystems (tick/nohz, RCU NOCB, genirq) pick up the new
masks through their existing CPU hotplug callbacks.  Destroying the
partition reverses the cycle: each CPU is taken offline, restored to all
housekeeping masks, and brought back online.

Housekeeping cpumask pointers are RCU-protected to allow lock-free readers
during updates.  A global dhm_cycling_cpus mask suppresses transient
cpuset partition invalidation while CPUs are being cycled.

This work is related to Waiman Long's [PATCH-next 00/23] series
(20260421030351.281436-1-longman@redhat.com), which also targets runtime
cpuset housekeeping control.  DHM's distinguishing feature is zero-boot-
parameter activation: nohz_full+nocb isolation can be achieved at runtime
without any boot-time nohz_full= or rcu_nocbs= parameters.

Signed-off-by: Jing Wu <realwujing@gmail.com>
Signed-off-by: Qiliang Yuan <yuanql9@chinatelecom.cn>
---
V3 -> V4:
- Drop apply() callback architecture entirely (struct housekeeping_cbs,
  pre_validate/apply hooks, housekeeping_update_types() notification).
  Thomas Gleixner identified concurrent in-kernel mask apply as
  fundamentally unsafe ("broken beyond repair") and endorsed CPU-by-CPU
  hotplug cycling as the correct approach.
- Track A prerequisites (housekeeping boot type isolation, RCU reader
  protection, cpuset trigger) submitted upstream separately; v4 builds
  on top of those three committed patches.
- Fix rcu/nocb lazy_init: remove __init from rcu_organize_nocb_kthreads()
  forward declaration (tree.h) to prevent GCC from placing the function in
  .init.text, which caused an NX-protected page fault when
  rcu_nocb_cpu_isolate() was called at runtime.  Add noinline to
  rcu_nocb_lazy_init() to preserve the GCC IPA call chain.
- Fix cpuset remote partition cycling suppression: extend dhm_cycling_cpus
  guard to the remote-partition disable path in cpuset_hotplug_update_tasks(),
  preventing false partition invalidation during hotplug cycling steps.
  Fixes selftest TEST_MATRIX[69] (A2: expected 1-2, got 1-3).

V2 -> V3:
- Replace notifier chain with explicit per-type callback interface
  (struct housekeeping_cbs with .name, .pre_validate, .apply fields).
- RCU-protect all housekeeping cpumask pointers; callers must hold
  rcu_read_lock() or use housekeeping_cpumask_rcu() in apply() callbacks.
- Drop 5 patches from v2: HK_TYPE enum separation (upstream aliases are
  already correct), no-op timer/hrtimer patches, kthread dead code, and
  workqueue double-update.
- Fix deadlock in rcu_hk_workfn(): remove cpus_read_lock() wrapper around
  remove_cpu()/add_cpu() which take cpu_hotplug_lock write side.
- Fix UAF in rcu_hk_apply(): snapshot the housekeeping cpumask inside the
  work function under rcu_read_lock(), not at apply() time where the old
  pointer may be freed by synchronize_rcu() before the work runs.
- Fix tick apply(): snapshot housekeeping_cpumask_rcu() under
  rcu_read_lock() as required by lockdep for runtime-mutable types.
- Activate context_tracking dynamically via ct_cpu_track_user() /
  ct_cpu_untrack_user() in tick apply(), eliminating the dependency on
  CONFIG_CONTEXT_TRACKING_USER_FORCE flagged by tglx.
- Fix genirq apply(): snapshot HK_TYPE_MANAGED_IRQ mask under
  rcu_read_lock() before the IRQ iteration loop.
- Simplify cpuset noise_types to BIT(HK_TYPE_KERNEL_NOISE) |
  BIT(HK_TYPE_MANAGED_IRQ), replacing the redundant per-alias bitmask.
- housekeeping_update_types(): always use cpu_possible_mask as base
  for HK_TYPE_KERNEL_NOISE, so de-isolation restores the mask to all
  possible CPUs rather than leaving it at its last non-trivial value.
- Initialize watchdog_cpumask from HK_TYPE_KERNEL_NOISE (not
  HK_TYPE_TIMER) at boot; keep it in sync at runtime via a new
  housekeeping_cbs callback.
- Add kernel-noise selftest to test_cpuset_prs.sh, including
  cpu_in_cpulist() for correct cpulist range membership detection and
  nohz_full sysfs verification when CONFIG_NO_HZ_FULL is active.
- Add RCU caller fixes: sched/core (HK_TYPE_KERNEL_NOISE) and
  drivers/hv (HK_TYPE_MANAGED_IRQ) are required because those types
  are updated at runtime; hrtimer (HK_TYPE_TIMER) and arm64/topology
  (HK_TYPE_TICK) are defensive fixes.
- Reorder patches so all subsystem callbacks are registered before the
  cpuset patch that triggers housekeeping_update_types().

V1 -> V2:
- Rebrand series from DHEI to DHM (Dynamic Housekeeping Management).
- Drop custom sysfs interface entirely.
- Integrate housekeeping control into cgroup v2 cpuset isolated partition
  mechanism.
- Add SMT-aware isolation constraints to prevent splitting SMT siblings.
- Add comprehensive documentation and cgroup functional selftests.
- Refactor mask transition logic to use RCU-safe handover.

v3: https://lore.kernel.org/r/20260618-wujing-dhm-v3-0-28f1a4d83b68@gmail.com
v2: https://lore.kernel.org/r/20260413-wujing-dhm-v2-0-06df21caba5d@gmail.com
v1: https://lore.kernel.org/all/20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com

---
Jing Wu (11):
      sched/isolation: Add runtime housekeeping mask updates with boot snapshots
      sched/isolation: RCU-protect runtime-mutable housekeeping cpumask readers
      cgroup/cpuset: Drive kernel-noise housekeeping updates from isolated partitions
      context_tracking: allow runtime per-CPU user tracking enable/disable
      rcu/nocb: support lazy init for runtime CPU isolation
      watchdog: sync watchdog_cpumask with HK_TYPE_KERNEL_NOISE on isolation
      tick/nohz: add runtime tick_nohz_full_mask update for CPU isolation
      cpuset: add dhm_cycling_cpus mask to suppress transient invalidation
      cpuset: drive kernel-noise isolation via per-CPU hotplug cycling
      docs: cgroup-v2: document kernel-noise isolation via isolated partitions
      selftests/cgroup: add kernel-noise isolation test to cpuset selftest

 Documentation/admin-guide/cgroup-v2.rst           |  17 +
 arch/arm64/kernel/topology.c                      |   9 +-
 drivers/base/cpu.c                                |  20 +-
 drivers/hv/channel_mgmt.c                         |  50 +-
 include/linux/context_tracking.h                  |   2 +
 include/linux/nmi.h                               |   2 +
 include/linux/rcupdate.h                          |   2 +
 include/linux/sched/isolation.h                   |  32 +-
 include/linux/tick.h                              |   4 +
 kernel/cgroup/cpuset.c                            | 161 +++++-
 kernel/context_tracking.c                         |  38 +-
 kernel/rcu/tree.h                                 |   2 +-
 kernel/rcu/tree_nocb.h                            |  43 +-
 kernel/sched/core.c                               |   7 +-
 kernel/sched/isolation.c                          | 197 +++++++-
 kernel/sched/sched.h                              |   2 +-
 kernel/time/hrtimer.c                             |   5 +-
 kernel/time/tick-sched.c                          |  47 +-
 kernel/watchdog.c                                 |  26 +-
 tools/testing/selftests/cgroup/test_cpuset_prs.sh | 580 +++++++++++++++++++++-
 20 files changed, 1181 insertions(+), 65 deletions(-)
---
base-commit: eb3f4b7426cfd2b79d65b7d37155480b32259a11
change-id: 20260408-wujing-dhm-8f43e2d49cd8

Best regards,
-- 
Jing Wu <realwujing@gmail.com>


^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2026-07-10  3:30 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-10  3:28 [PATCH v4 00/11] Dynamic Housekeeping Management (DHM) via CPUSets Jing Wu
2026-07-10  3:28 ` [PATCH v4 01/11] sched/isolation: Add runtime housekeeping mask updates with boot snapshots Jing Wu
2026-07-10  3:28 ` [PATCH v4 02/11] sched/isolation: RCU-protect runtime-mutable housekeeping cpumask readers Jing Wu
2026-07-10  3:28 ` [PATCH v4 03/11] cgroup/cpuset: Drive kernel-noise housekeeping updates from isolated partitions Jing Wu
2026-07-10  3:28 ` [PATCH v4 04/11] context_tracking: allow runtime per-CPU user tracking enable/disable Jing Wu
2026-07-10  3:28 ` [PATCH v4 05/11] rcu/nocb: support lazy init for runtime CPU isolation Jing Wu
2026-07-10  3:28 ` [PATCH v4 06/11] watchdog: sync watchdog_cpumask with HK_TYPE_KERNEL_NOISE on isolation Jing Wu
2026-07-10  3:28 ` [PATCH v4 07/11] tick/nohz: add runtime tick_nohz_full_mask update for CPU isolation Jing Wu
2026-07-10  3:28 ` [PATCH v4 08/11] cpuset: add dhm_cycling_cpus mask to suppress transient invalidation Jing Wu
2026-07-10  3:28 ` [PATCH v4 09/11] cpuset: drive kernel-noise isolation via per-CPU hotplug cycling Jing Wu
2026-07-10  3:28 ` [PATCH v4 10/11] docs: cgroup-v2: document kernel-noise isolation via isolated partitions Jing Wu
2026-07-10  3:28 ` [PATCH v4 11/11] selftests/cgroup: add kernel-noise isolation test to cpuset selftest Jing Wu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox