Provide a config option for users to enable the driver. Since the feature works for paravirtualized case and make sense only with SMP, enforce those dependencies. Driver is going to select CONFIG_PREFERRED_CPU=y for scheduler mechanisms to work.
It is recommended to build the driver as module instead of yes due to below reasons. - Module parameters are read only after init. If one wants to change them having as module allows that. - Driver can be disabled if it is built as module. - If it is module, admin user has to enable it. Since this feature works best when all VMs work in co-operative manner, admin will likely enable it in all VMs. Signed-off-by: Shrikanth Hegde <[email protected]> --- drivers/virt/Kconfig | 2 ++ drivers/virt/Makefile | 1 + drivers/virt/steal_governor/Kconfig | 18 ++++++++++++++++++ drivers/virt/steal_governor/Makefile | 6 ++++++ 4 files changed, 27 insertions(+) create mode 100644 drivers/virt/steal_governor/Kconfig create mode 100644 drivers/virt/steal_governor/Makefile diff --git a/drivers/virt/Kconfig b/drivers/virt/Kconfig index 52eb7e4ba71f..4fbc928022a4 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_governor/Kconfig" + endif source "drivers/virt/coco/Kconfig" diff --git a/drivers/virt/Makefile b/drivers/virt/Makefile index f29901bd7820..512dcfd6c73e 100644 --- a/drivers/virt/Makefile +++ b/drivers/virt/Makefile @@ -10,3 +10,4 @@ obj-y += vboxguest/ obj-$(CONFIG_NITRO_ENCLAVES) += nitro_enclaves/ obj-$(CONFIG_ACRN_HSM) += acrn/ obj-y += coco/ +obj-$(CONFIG_STEAL_GOVERNOR) += steal_governor/ diff --git a/drivers/virt/steal_governor/Kconfig b/drivers/virt/steal_governor/Kconfig new file mode 100644 index 000000000000..926bb351db4f --- /dev/null +++ b/drivers/virt/steal_governor/Kconfig @@ -0,0 +1,18 @@ +# SPDX-License-Identifier: GPL-2.0-only +config STEAL_GOVERNOR + tristate "Dynamic vCPU management based on steal time" + depends on PARAVIRT && SMP + select PREFERRED_CPU + default m + help + This driver 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 in the host. + + By default preferred CPUs will be same as active CPUs. Depending + on the steal time when steal_governor driver is enabled, + preferred CPUs could become subset of active CPUs. + + It is recommended to build it as module and load the module + to enable it. diff --git a/drivers/virt/steal_governor/Makefile b/drivers/virt/steal_governor/Makefile new file mode 100644 index 000000000000..eb90ed6b94d7 --- /dev/null +++ b/drivers/virt/steal_governor/Makefile @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: GPL-2.0-only +# +# Steal time governor to alter preferred CPU state. +obj-$(CONFIG_STEAL_GOVERNOR) += steal_governor.o + +steal_governor-y := core.o -- 2.47.3

