[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