From c67a3c0fc3dbb5848cf889817f8a04d7965c18f7 Mon Sep 17 00:00:00 2001 From: Martin Kletzander Date: Wed, 22 May 2019 10:40:58 +0200 Subject: [PATCH] qemu: Set emulator thread scheduler only after QEMU starts If the scheduler is set before vCPU0 cannot be moved into its cpu,cpuacct cgroup. While it is not yet known whether this is a bug or not, it makes sense for us to do that later as otherwise the scheduler would be inherited by vCPU and I/O Threads even when they do not have any such setting specified. Signed-off-by: Martin Kletzander --- src/qemu/qemu_process.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 90466771cd..fa5909e9be 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -2658,8 +2658,9 @@ qemuProcessSetupPid(virDomainObjPtr vm, if (use_cpumask && virProcessSetAffinity(pid, use_cpumask) < 0) goto cleanup; - /* Set scheduler type and priority. */ + /* Set scheduler type and priority, but not for the main thread. */ if (sched && + nameval != VIR_CGROUP_THREAD_EMULATOR && virProcessSetScheduler(pid, sched->policy, sched->priority) < 0) goto cleanup; @@ -6773,6 +6774,13 @@ qemuProcessLaunch(virConnectPtr conn, if (qemuProcessSetupIOThreads(vm) < 0) goto cleanup; + VIR_DEBUG("Setting emulator scheduler"); + if (vm->def->cputune.emulatorsched && + virProcessSetScheduler(vm->pid, + vm->def->cputune.emulatorsched->policy, + vm->def->cputune.emulatorsched->priority) < 0) + goto cleanup; + VIR_DEBUG("Setting any required VM passwords"); if (qemuProcessInitPasswords(driver, vm, asyncJob) < 0) goto cleanup; -- GitLab