[libvirt] [PATCH] qemu: lock: unlock vm during qemuBuildCommandLine

Daniel P. Berrange berrange at redhat.com
Thu Apr 23 11:06:27 UTC 2015

On Thu, Apr 23, 2015 at 07:00:21PM +0800, zhang bo wrote:
> The reason for the problem is that:
> 1 guestA locks vm while creating each tapDev(virNetDevTapCreate) in qemuBuildCommandLine(), for 10seconds
> 2 guestB calls qemuMigrationPrepareAny->*virDomainObjListAdd* to get its vm object, which locks 'doms'
>   and waits for the vm lock.
> 3 doms will be locked until guestA unlock its vm, we say that's 10 seconds.
> 4 guestC calls qemuDomainMigrateFinish3->virDomainObjListFindByName, which tries to lock doms. because it's

Ok, this is the real core problem - FindByName has a bad impl that requires
iterating over every single guest. Unfortunately due to the design of the
migration API we can't avoid this call, but we could add a second hash table
of name -> virDomainObj so we make it O(1) and lock-less.

>   now locked by guestB, guestC blocks here, and it can't be unpaused for at least 10 seconds.
> 5 then comes to guestD, guestE, guestF, etc, the downtime will be added up, to even 50 seconds or more.
> 6 the command 'virsh list' is blocked as well.
> Thus, we think the problem must be solved.

|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|

More information about the libvir-list mailing list