From 6d876be04aada7a592610b6d3d05de40c6ac44aa Mon Sep 17 00:00:00 2001 From: Jiri Denemark Date: Mon, 31 Jul 2023 16:14:35 +0200 Subject: [PATCH] libvirt-8.0.0-22.el8 - lib: Set up cpuset controller for restrictive numatune (rhbz#2223464) Resolves: rhbz#2223464 --- ...-controller-for-restrictive-numatune.patch | 77 +++++++++++++++++++ libvirt.spec | 6 +- 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 libvirt-lib-Set-up-cpuset-controller-for-restrictive-numatune.patch diff --git a/libvirt-lib-Set-up-cpuset-controller-for-restrictive-numatune.patch b/libvirt-lib-Set-up-cpuset-controller-for-restrictive-numatune.patch new file mode 100644 index 0000000..e9e7bc6 --- /dev/null +++ b/libvirt-lib-Set-up-cpuset-controller-for-restrictive-numatune.patch @@ -0,0 +1,77 @@ +From 08ddc711a2e6d94a0fce55fec8e012a434655d2c Mon Sep 17 00:00:00 2001 +Message-ID: <08ddc711a2e6d94a0fce55fec8e012a434655d2c.1690812875.git.jdenemar@redhat.com> +From: Michal Privoznik +Date: Fri, 1 Apr 2022 14:30:05 +0200 +Subject: [PATCH] lib: Set up cpuset controller for restrictive numatune +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The aim of 'restrictive' numatune mode is to rely solely on +CGroups to have QEMU running on configured NUMA nodes. However, +we were never setting the cpuset controller when a domain was +starting up. We are doing so only when +virDomainSetNumaParameters() is called (aka live pinning). + +This is obviously wrong. Fortunately, fix is simple as +'restrictive' is similar to 'strict' - every location where +VIR_DOMAIN_NUMATUNE_MEM_STRICT occurs can be audited and +VIR_DOMAIN_NUMATUNE_MEM_RESTRICTIVE case can be added. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2070380 +Signed-off-by: Michal Privoznik +Reviewed-by: Ján Tomko +(cherry picked from commit 629282d8845407c1aff9a26f5dc026e15121f8cd) + +Conflicts: +- src/ch/ch_process.c: The CH driver diverged because it's + unsupported downstream. Just drop the conflicting hunk from + there. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2223464 +Signed-off-by: Michal Privoznik +--- + src/lxc/lxc_controller.c | 3 ++- + src/qemu/qemu_process.c | 6 ++++-- + 2 files changed, 6 insertions(+), 3 deletions(-) + +diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c +index 3c930eaacd..6fd8373256 100644 +--- a/src/lxc/lxc_controller.c ++++ b/src/lxc/lxc_controller.c +@@ -812,7 +812,8 @@ static int virLXCControllerSetupResourceLimits(virLXCController *ctrl) + virDomainNumatuneMemMode mode; + + if (virDomainNumatuneGetMode(ctrl->def->numa, -1, &mode) == 0) { +- if (mode == VIR_DOMAIN_NUMATUNE_MEM_STRICT && ++ if ((mode == VIR_DOMAIN_NUMATUNE_MEM_STRICT || ++ mode == VIR_DOMAIN_NUMATUNE_MEM_RESTRICTIVE) && + virCgroupControllerAvailable(VIR_CGROUP_CONTROLLER_CPUSET)) { + /* Use virNuma* API iff necessary. Once set and child is exec()-ed, + * there's no way for us to change it. Rely on cgroups (if available +diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c +index 0fb665bc82..73d54f01cd 100644 +--- a/src/qemu/qemu_process.c ++++ b/src/qemu/qemu_process.c +@@ -2645,7 +2645,8 @@ qemuProcessSetupPid(virDomainObj *vm, + virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) { + + if (virDomainNumatuneGetMode(vm->def->numa, -1, &mem_mode) == 0 && +- mem_mode == VIR_DOMAIN_NUMATUNE_MEM_STRICT && ++ (mem_mode == VIR_DOMAIN_NUMATUNE_MEM_STRICT || ++ mem_mode == VIR_DOMAIN_NUMATUNE_MEM_RESTRICTIVE) && + virDomainNumatuneMaybeFormatNodeset(vm->def->numa, + priv->autoNodeset, + &mem_mask, -1) < 0) +@@ -3162,7 +3163,8 @@ static int qemuProcessHook(void *data) + goto cleanup; + + if (virDomainNumatuneGetMode(h->vm->def->numa, -1, &mode) == 0) { +- if (mode == VIR_DOMAIN_NUMATUNE_MEM_STRICT && ++ if ((mode == VIR_DOMAIN_NUMATUNE_MEM_STRICT || ++ mode == VIR_DOMAIN_NUMATUNE_MEM_RESTRICTIVE) && + h->cfg->cgroupControllers & (1 << VIR_CGROUP_CONTROLLER_CPUSET) && + virCgroupControllerAvailable(VIR_CGROUP_CONTROLLER_CPUSET)) { + /* Use virNuma* API iff necessary. Once set and child is exec()-ed, +-- +2.41.0 diff --git a/libvirt.spec b/libvirt.spec index 45e59d2..e2d6779 100644 --- a/libvirt.spec +++ b/libvirt.spec @@ -210,7 +210,7 @@ Summary: Library providing a simple virtualization API Name: libvirt Version: 8.0.0 -Release: 21%{?dist}%{?extra_release} +Release: 22%{?dist}%{?extra_release} License: LGPLv2+ URL: https://libvirt.org/ @@ -316,6 +316,7 @@ Patch93: libvirt-qemu-relax-shared-memory-check-for-vhostuser-daemons.patch Patch94: libvirt-virpci-Resolve-leak-in-virPCIVirtualFunctionList-cleanup.patch Patch95: libvirt-node_device_conf-Avoid-memleak-in-virNodeDeviceGetPCIVPDDynamicCap.patch Patch96: libvirt-nodedev-update-transient-mdevs.patch +Patch97: libvirt-lib-Set-up-cpuset-controller-for-restrictive-numatune.patch Requires: libvirt-daemon = %{version}-%{release} Requires: libvirt-daemon-config-network = %{version}-%{release} @@ -2195,6 +2196,9 @@ exit 0 %changelog +* Mon Jul 31 2023 Jiri Denemark - 8.0.0-22 +- lib: Set up cpuset controller for restrictive numatune (rhbz#2223464) + * Thu Jun 22 2023 Jiri Denemark - 8.0.0-21 - nodedev: update transient mdevs (rhbz#2143160)