Re: [PATCH v6 12/23] virt: Introduce steal monitor driver

From: Shrikanth Hegde

Date: Tue Jul 07 2026 - 02:54:09 EST


Hi Yury,

On 7/7/26 12:19 AM, Yury Norov wrote:
On Mon, Jul 06, 2026 at 01:54:05PM +0530, Shrikanth Hegde wrote:


On 7/3/26 11:57 PM, Yury Norov wrote:
On Fri, Jul 03, 2026 at 02:20:32PM -0400, Yury Norov wrote:
On Wed, Jul 01, 2026 at 07:46:43PM +0530, Shrikanth Hegde wrote:
Introduce a new driver in virt named steal_monitor. This driver
will compute the steal time and drive the policy decisions of preferred
CPU state.

More on it can be found in the Documentation/driver-api/steal-monitor.rst
Introduce the skeleton code first.

There is no new kconfig. It depends on CONFIG_PREFERRED_CPU.
- If CONFIG_PREFERRED_CPU=y, it gets compiled as a module. It is not
loaded by default.

What if I've got my own monitor, and don't need this one? Please add a
way to not compile it, even if CONFIG_PREFERRED_CPU is enabled.


You mean make a new config like VIRT_MONITOR depend on CONFIG_PREFERRED_CPU and
make it as default n?

Can we defer this until such a new monitor is needed?
We will in state where CONFIG_PREFERRED_CPU=y & VIRT_MONITOR=n.

I think the VIRT_MONITOR should select PREFERRED_CPU. Whether
PREFERRED_CPU should be enabled without an in-tree driver using it -
IDK. Probably yes.


That's good idea too. User has to enable VIRT_MONITOR, that will select
PREFERRED_CPU. If any other driver wants this feature, it will have to do the
same. Assumption is whichever driver selects PREFERRED_CPU, it has to ensure that
design constrains are met.

I did below. I think this is what you meant. Let me know if i got it wrong.

---

diff --git a/drivers/virt/Kconfig b/drivers/virt/Kconfig
index 52eb7e4ba71f..a52233b2502e 100644
--- a/drivers/virt/Kconfig
+++ b/drivers/virt/Kconfig
@@ -47,6 +47,8 @@ source "drivers/virt/nitro_enclaves/Kconfig"
source "drivers/virt/acrn/Kconfig"
+source "drivers/virt/steal_monitor/Kconfig"
+
endif
source "drivers/virt/coco/Kconfig"
diff --git a/drivers/virt/Makefile b/drivers/virt/Makefile
index aff715cea42d..b67fd8968ec3 100644
--- a/drivers/virt/Makefile
+++ b/drivers/virt/Makefile
@@ -9,5 +9,5 @@ obj-y += vboxguest/
obj-$(CONFIG_NITRO_ENCLAVES) += nitro_enclaves/
obj-$(CONFIG_ACRN_HSM) += acrn/
-obj-$(CONFIG_PREFERRED_CPU) += steal_monitor/
+obj-$(CONFIG_STEAL_MONITOR) += steal_monitor/
obj-y += coco/
diff --git a/drivers/virt/steal_monitor/Kconfig b/drivers/virt/steal_monitor/Kconfig
new file mode 100644
index 000000000000..efb94b3a60e4
--- /dev/null
+++ b/drivers/virt/steal_monitor/Kconfig
@@ -0,0 +1,15 @@
+# SPDX-License-Identifier: GPL-2.0-only
+config STEAL_MONITOR
+ tristate "Dynamic vCPU management based on steal time"
+ depends on PARAVIRT && SMP
+ select PREFERRED_CPU
+ default m
+ help
+ This feature helps to reduce the steal time in paravirtualised
+ environment, there by reducing vCPU preemption. Reducing vCPU
+ preemption provides improved lock holder preemption and reduces
+ cost of vCPU preemption in the host.
+
+ By default preferred CPUs will be same as active CPUs. Depending
+ on the steal time when steal_monitor driver is enabled,
+ preferred CPUs could become subset of active CPUs.
diff --git a/drivers/virt/steal_monitor/Makefile b/drivers/virt/steal_monitor/Makefile
index 7c16f8cf9583..d206e048a9ea 100644
--- a/drivers/virt/steal_monitor/Makefile
+++ b/drivers/virt/steal_monitor/Makefile
@@ -9,6 +9,6 @@
# It is always compiled as module if CONFIG_PREFERRED_CPU=y
# One has to enable the module.
#
-obj-$(subst y,m,$(CONFIG_PREFERRED_CPU)) += steal_monitor.o
+obj-$(CONFIG_STEAL_MONITOR) += steal_monitor.o
steal_monitor-y := sm_core.o defaults.o
diff --git a/kernel/Kconfig.preempt b/kernel/Kconfig.preempt
index 01b908ff1740..ed02e4431230 100644
--- a/kernel/Kconfig.preempt
+++ b/kernel/Kconfig.preempt
@@ -194,15 +194,4 @@ config SCHED_CLASS_EXT
https://github.com/sched-ext/scx
config PREFERRED_CPU
- bool "Dynamic vCPU management based on steal time"
- depends on PARAVIRT && SMP
- default y
- help
- This feature helps to reduce the steal time in paravirtualised
- environment, thereby reducing vCPU preemption. Reducing vCPU
- preemption provides improved lock holder preemption and reduces
- cost of vCPU preemption.
-
- By default preferred CPUs will be same as active CPUs. Depending
- on the steal time when steal_monitor driver is enabled,
- preferred CPUs could become subset of active CPUs.
+ bool


Enabling some random driver, and even worse overriding user
preferences looks questionable, at least.

I'm one of those who build VMs with the localyes config, particularly
because it decouples me from rootfs headache. So please let me just
compile-in your monitor, if I want.