[PATCH 0/6] sched: Expose writable interface for preferred CPUs mask
From: Yury Norov
Date: Sun Nov 01 2026 - 14:25:37 EST
The preferred CPU mask currently lets the steal governor reduce vCPU
demand when physical CPUs are contended. This series adds manual control,
opening more use cases.
For example, setting CPUs aside for selected fair tasks at runtime while
steering other fair tasks toward the remaining CPUs.
A user can mark a CPU non-preferred and pin a workload to it. Fair tasks
whose affinity includes preferred CPUs are steered away, while tasks
whose allowed CPUs contain no preferred CPU can still run there. The CPU
stays online, task affinity is preserved, and the selection can be
reversed without rebooting:
# rmmod steal_governor
# echo 0 > /sys/devices/system/cpu/cpu3/preferred
# taskset -c 3 ./my_workload
# echo 1 > /sys/devices/system/cpu/cpu3/preferred
The current preferred list is still readable from:
/sys/devices/system/cpu/preferred
This provides task-placement isolation similar to a use of
isolcpus=domain, with a runtime interface. Scheduling domains remain
intact, tick suppression, RCU offloading, and managed-IRQ avoidance
can be configured separately when needed.
Different preferred cpumask governors may coexist; all update the
same mask under common locking. Manual settings are not privileged,
and later governor updates may override them.
The first patch relaxes preferred cpumask dependency on config PARAVIRT,
because the manual control has a broader use. Even if preferred cpumask
is intended to be used by steal governor, it doesn't require config
PARAVIRT because s390/LPAR doesn't enable the config for their
hardware assisted virtualization. Thus, patch #1 may be applied
separately from the rest of the series.
Yury Norov (6):
sched: decouple PREFERRED_CPU from PARAVIRT in Kconfig.preempt
cpumask: Add reset_preferred_cpumask() helper
sched: Restore preferred CPUs when hotplug removes the last one
sched: serialize preferred cpumask update better
virt: steal_governor: Warn on unexpected preferred mask states
cpu: Add per-CPU preferred sysfs control
.../ABI/testing/sysfs-devices-system-cpu | 14 ++---
.../sysfs-devices-system-cpu-preferred | 37 +++++++++++++
Documentation/scheduler/sched-paravirt.rst | 26 +++++++--
drivers/base/cpu.c | 55 +++++++++++++++++++
drivers/virt/Kconfig | 8 ++-
drivers/virt/steal_governor.c | 36 +++++++-----
include/linux/cpumask.h | 20 +++++++
kernel/Kconfig.preempt | 19 ++++++-
kernel/cpu.c | 4 ++
kernel/sched/core.c | 8 +++
10 files changed, 196 insertions(+), 31 deletions(-)
create mode 100644 Documentation/ABI/testing/sysfs-devices-system-cpu-preferred
--
2.53.0