[libvirt] understanding managedsave

Eric Blake eblake at redhat.com
Wed Mar 13 14:40:07 UTC 2013


On 03/13/2013 05:32 AM, Nicolas Sebrecht wrote:
> 
> Hi,
> 
> I'm trying to understand how the managedsave and restoration features
> work at the libvirt/qemu level.
> 
> I'd like to write a little python script to reproduce the feature to
> learn how it works. So, I start a kvm guest by hand with
> 
>   qemu-kvm [...] -qmp tcp:localhost:4444,server
> 
> and connect to the QMP with telnet or the qemu qmp-shell for my tests.

TCP QMP connections don't allow you to pass an fd via SCM_RIGHTS; that
is only possible with a Unix socket.  If you insist on controlling your
qemu with TCP instead of using libvirt, you'll have to use a slightly
different approach (such as the exec: protocol instead of the fd:
protocol as the destination for the qemu migration).

> 
>>From what I've read, libvirt internally does a migration to a file:
> qemuDomainSaveMemory() -> qemuMonitorToFile() -> qemuMonitorMigrateToFd(). 
> 
> 
> Why do a migration instead of QMP stop/memsave?

Because memsave doesn't save enough information - to restore a guest
from the same point, qemu needs to save device state in addition to
memory contents.  The only qemu commands that do this are migration and
savevm; but savevm has some severe limitations on usability, so our only
option was to use migration to file.

> 
> What whould be the whole QMP/Monitor sequence of commands to handle the
> process?

You can ask libvirt to trace the exact sequence of QMP monitor commands
that it issues, if that helps.  Run libvirtd with
LIBVIRT_LOG_FILTERS=1:monitor set in the environment, or with
log_filters defined in /etc/libvirt/libvirtd.conf (restart libvirtd to
pick up on conf file changes), and the logs will then include details.

But in short, libvirt is using 'addfd' to pass a named fd to qemu, then
using 'migrate' with type 'fd:name' to use that named fd as the target,
on the save side.  On the restore side, libvirt uses the -incoming
fd:nnn argument to tell qemu to read the incoming data from a stream.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 621 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20130313/57e5e75d/attachment-0001.sig>


More information about the libvir-list mailing list