[libvirt] [PATCH] qemu: move setting emulatorpin ahead of monitor showing up

From: Zhou yimin <zhouyimin@huawei.com> If VM is configured with many devices(including passthrough devices) and large memory, libvirtd will take seconds(in the worst case) to wait for monitor. In this period the qemu process may run on any PCPU though I intend to pin emulator to the specified PCPU in xml configuration. Actually qemu process takes high cpu usage during vm startup. So this is not the strict CPU isolation in this case. Signed-off-by: Zhou yimin <zhouyimin@huawei.com> --- src/qemu/qemu_process.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 95548aa..ef258cf 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4553,6 +4553,14 @@ int qemuProcessStart(virConnectPtr conn, if (ret == -1) /* The VM failed to start */ goto cleanup; + VIR_DEBUG("Setting cgroup for emulator (if required)"); + if (qemuSetupCgroupForEmulator(driver, vm, nodemask) < 0) + goto cleanup; + + VIR_DEBUG("Setting affinity of emulator threads"); + if (qemuProcessSetEmulatorAffinity(vm) < 0) + goto cleanup; + VIR_DEBUG("Waiting for monitor to show up"); if (qemuProcessWaitForMonitor(driver, vm, asyncJob, priv->qemuCaps, pos) < 0) goto cleanup; @@ -4588,10 +4596,6 @@ int qemuProcessStart(virConnectPtr conn, if (qemuSetupCgroupForVcpu(vm) < 0) goto cleanup; - VIR_DEBUG("Setting cgroup for emulator (if required)"); - if (qemuSetupCgroupForEmulator(driver, vm, nodemask) < 0) - goto cleanup; - VIR_DEBUG("Setting cgroup for each IOThread (if required)"); if (qemuSetupCgroupForIOThreads(vm) < 0) goto cleanup; @@ -4600,10 +4604,6 @@ int qemuProcessStart(virConnectPtr conn, if (qemuProcessSetVcpuAffinities(vm) < 0) goto cleanup; - VIR_DEBUG("Setting affinity of emulator threads"); - if (qemuProcessSetEmulatorAffinity(vm) < 0) - goto cleanup; - VIR_DEBUG("Setting affinity of IOThread threads"); if (qemuProcessSetIOThreadsAffinity(vm) < 0) goto cleanup; -- 1.7.12.4

On Thu, Oct 16, 2014 at 10:18:48PM +0800, Wang Rui wrote:
From: Zhou yimin <zhouyimin@huawei.com>
If VM is configured with many devices(including passthrough devices) and large memory, libvirtd will take seconds(in the worst case) to wait for monitor. In this period the qemu process may run on any PCPU though I intend to pin emulator to the specified PCPU in xml configuration.
Actually qemu process takes high cpu usage during vm startup. So this is not the strict CPU isolation in this case.
This makes sense and it's also the only TID we can pin before accessing the monitor. I worried about this patch breaking other pinnings, but whatever I tried it just works. ACK and I'll push it shortly. Martin
participants (2)
-
Martin Kletzander
-
Wang Rui