mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
lib: Set up cpuset controller for restrictive numatune
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 <mprivozn@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
5c6622eff7
commit
629282d884
@ -254,7 +254,8 @@ virCHProcessSetupPid(virDomainObj *vm,
|
|||||||
virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) {
|
virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) {
|
||||||
|
|
||||||
if (virDomainNumatuneGetMode(vm->def->numa, -1, &mem_mode) == 0 &&
|
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,
|
virDomainNumatuneMaybeFormatNodeset(vm->def->numa,
|
||||||
priv->autoNodeset,
|
priv->autoNodeset,
|
||||||
&mem_mask, -1) < 0)
|
&mem_mask, -1) < 0)
|
||||||
|
@ -811,7 +811,8 @@ static int virLXCControllerSetupResourceLimits(virLXCController *ctrl)
|
|||||||
virDomainNumatuneMemMode mode;
|
virDomainNumatuneMemMode mode;
|
||||||
|
|
||||||
if (virDomainNumatuneGetMode(ctrl->def->numa, -1, &mode) == 0) {
|
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)) {
|
virCgroupControllerAvailable(VIR_CGROUP_CONTROLLER_CPUSET)) {
|
||||||
/* Use virNuma* API iff necessary. Once set and child is exec()-ed,
|
/* 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
|
* there's no way for us to change it. Rely on cgroups (if available
|
||||||
|
@ -2646,7 +2646,8 @@ qemuProcessSetupPid(virDomainObj *vm,
|
|||||||
virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) {
|
virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) {
|
||||||
|
|
||||||
if (virDomainNumatuneGetMode(vm->def->numa, -1, &mem_mode) == 0 &&
|
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,
|
virDomainNumatuneMaybeFormatNodeset(vm->def->numa,
|
||||||
priv->autoNodeset,
|
priv->autoNodeset,
|
||||||
&mem_mask, -1) < 0)
|
&mem_mask, -1) < 0)
|
||||||
@ -3162,7 +3163,8 @@ static int qemuProcessHook(void *data)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (virDomainNumatuneGetMode(h->vm->def->numa, -1, &mode) == 0) {
|
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) &&
|
h->cfg->cgroupControllers & (1 << VIR_CGROUP_CONTROLLER_CPUSET) &&
|
||||||
virCgroupControllerAvailable(VIR_CGROUP_CONTROLLER_CPUSET)) {
|
virCgroupControllerAvailable(VIR_CGROUP_CONTROLLER_CPUSET)) {
|
||||||
/* Use virNuma* API iff necessary. Once set and child is exec()-ed,
|
/* Use virNuma* API iff necessary. Once set and child is exec()-ed,
|
||||||
|
Loading…
Reference in New Issue
Block a user