summaryrefslogtreecommitdiff
path: root/src/ch
diff options
context:
space:
mode:
authorMartin Kletzander <mkletzan@redhat.com>2023-04-14 12:08:59 +0200
committerMartin Kletzander <mkletzan@redhat.com>2023-04-20 12:39:49 +0200
commit383caddea103eaab7bb495ec446b43748677f749 (patch)
tree6b387321f6ec9a881c0718c648bc6a6cd4bbb2a7 /src/ch
parentd2af152d1fb5560bc7c9ad94c1c93179d62f9270 (diff)
downloadlibvirt-383caddea103eaab7bb495ec446b43748677f749.tar.gz
qemu, ch: Move threads to cgroup dir before changing parameters
With cgroupv2 this has better effect on the resource allocation. An excerpt from Documentation/admin-guide/cgroup-v2.rst explains is this way: Migrating a process across cgroups is a relatively expensive operation and stateful resources such as memory are not moved together with the process. This is an explicit design decision as there often exist inherent trade-offs between migration and various hot paths in terms of synchronization cost. [...] Setting a non-empty value to "cpuset.mems" causes memory of tasks within the cgroup to be migrated to the designated nodes if they are currently using memory outside of the designated nodes. Signed-off-by: Martin Kletzander <mkletzan@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Diffstat (limited to 'src/ch')
-rw-r--r--src/ch/ch_process.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/ch/ch_process.c b/src/ch/ch_process.c
index c145a78496..44c5b0611e 100644
--- a/src/ch/ch_process.c
+++ b/src/ch/ch_process.c
@@ -262,6 +262,12 @@ virCHProcessSetupPid(virDomainObj *vm,
if (virCgroupNewThread(priv->cgroup, nameval, id, true, &cgroup) < 0)
goto cleanup;
+ /* Move the thread to the sub dir before changing the settings so that
+ * all take effect even with cgroupv2. */
+ VIR_INFO("Adding pid %d to cgroup", pid);
+ if (virCgroupAddThread(cgroup, pid) < 0)
+ goto cleanup;
+
if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) {
if (use_cpumask &&
virDomainCgroupSetupCpusetCpus(cgroup, use_cpumask) < 0)
@@ -274,12 +280,6 @@ virCHProcessSetupPid(virDomainObj *vm,
if (virDomainCgroupSetupVcpuBW(cgroup, period, quota) < 0)
goto cleanup;
-
- /* Move the thread to the sub dir */
- VIR_INFO("Adding pid %d to cgroup", pid);
- if (virCgroupAddThread(cgroup, pid) < 0)
- goto cleanup;
-
}
if (!affinity_cpumask)