From: Martin Kletzander Date: Wed, 22 May 2019 08:40:58 +0000 (+0200) Subject: qemu: Set emulator thread scheduler only after QEMU starts X-Git-Tag: v5.4.0-rc1~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c67a3c0fc3dbb5848cf889817f8a04d7965c18f7;p=thirdparty%2Flibvirt.git 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 --- 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;