
On Tue, Aug 16, 2011 at 11:53:04PM +0200, Jiri Denemark wrote:
Hi all,
Currently when we start a non-tunneled migration, data go straight from source qemu to destination qemu. This is nice in that there is no additional overhead but it also has several disadvantages. If the communication between source and destination qemu breaks, we only get unexpected error message from qemu with no glue about what happened. Another issue is that if qemu cannot send migration data, we cannot cancel the migration because migrate_cancel blocks until all buffers with migration data queued up for transmission are written into the socket.
That said, I think we should act as a proxy between source and destination qemu so that we can detect and report normal errors (such as connection reset by peer) and cancel migration at any time. Since we have virNetSocket and we already use that for connecting to destination qemu, we should use it for proxying migration data as well. This approach also has some disadvantages, e.g., a single libvirt thread instead of several qemu processes will now send migration data from all domains that are being migrated. However, I feel like the gain is bigger than the downside. And we already do the same for tunneled migration anyway.
Any objections?
Adding libvirt into the mix introduces extra data copies on both the source and destination libvirt. This is non-trivial extra overhead when you are migrating guests that have multiple-GB of RAM and have very heavy workloads. These already push the boundaries of what is possible todo with QEMU having a direct TCP connection. So I don't think we should go down the route of making libvirt do copies itself by default. Ideally, I'd actually like QEMU to gain direct TLS/x509/SASL support for migration, so you can do secure migration without tunnelling over libvirtd. Daniel -- |: 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 :|