[libvirt] [PATCH] cgroup: Fix start VMs coincidently failed
Michal Privoznik
mprivozn at redhat.com
Fri Mar 21 13:00:51 UTC 2014
On 21.03.2014 01:20, Wangyufei (James) wrote:
> Yes, it's just a race condition here. It's not LXC, it's just qemu-driver, and it's not using systemd for cgroup management.
> (Running hypervisor: QEMU 1.5.1)
>
> We can run these two command to clear cgroup dirctory 'machine' first:
> service cgconfig restart
> service cgred restart
>
> Then we start multi VMs with 'virsh start' at the same time.
>
> Stack 1:
> #0 qemuInitCgroup (driver=0x7f13a0d01570, vm=0x7f138c0116a0, startup=true)
> at qemu/qemu_cgroup.c:742
> #1 0x00007f1394595b7d in qemuSetupCgroup (driver=0x7f13a0d01570,
> vm=0x7f138c0116a0, nodemask=0x0) at qemu/qemu_cgroup.c:857
> #2 0x00007f13945b40c5 in qemuProcessStart (conn=0x7f13a0d92870,
> driver=0x7f13a0d01570, vm=0x7f138c0116a0, migrateFrom=0x0, stdin_fd=-1,
> stdin_path=0x0, snapshot=0x0, vmop=VIR_NETDEV_VPORT_PROFILE_OP_CREATE,
> flags=1) at qemu/qemu_process.c:3828
> #3 0x00007f1394606c2c in qemuDomainObjStart (conn=0x7f13a0d92870,
> driver=0x7f13a0d01570, vm=0x7f138c0116a0, flags=0)
> at qemu/qemu_driver.c:5852
> #4 0x00007f1394606e82 in qemuDomainCreateWithFlags (dom=0x7f138c01c490,
> flags=0) at qemu/qemu_driver.c:5904
> #5 0x00007f1394606f0b in qemuDomainCreate (dom=0x7f138c01c490)
> at qemu/qemu_driver.c:5922
> #6 0x00007f139ffc6e51 in virDomainCreate (domain=0x7f138c01c490)
> at libvirt.c:9357
> #7 0x00007f13a0a46ca2 in remoteDispatchDomainCreate (server=0x7f13a0cd9500,
> client=0x7f138c01b060, msg=0x7f138c014920, rerr=0x7f13995d0b10,
> args=0x7f138c01c4d0) at remote_dispatch.h:2931
> #8 0x00007f13a0a46da4 in remoteDispatchDomainCreateHelper (
>
>
> Stack 2:
> #0 virCgroupMakeGroup (parent=0x7f138c01e1a0, group=0x7f138c0080f0,
> create=true, flags=0) at util/vircgroup.c:751
> #1 0x00007f139fec4f89 in virCgroupNewPartition (
> path=0x7f138c008ee0 "/machine", create=true, controllers=-1,
> group=0x7f13995d00f8) at util/vircgroup.c:1286
> #2 0x00007f1394593888 in qemuInitCgroup (driver=0x7f13a0d01570,
> vm=0x7f138c0116a0, startup=true) at qemu/qemu_cgroup.c:779
>
> Thread A and Thread B start VMs at the same time.
> In virCgroupMakeGroup:
>
> if (!virFileExists(path)) {// Thread A and Thread B do the test at the same time and both passed.
> if (!create ||
> mkdir(path, 0755) < 0) {//If thread A succeed here, then B will fail, and B will do clear to remove the 'machine' directory, then A may fail to find the dirctory removed by B.
>
Okay, ACKed and pushed then.
Michal
More information about the libvir-list
mailing list