[libvirt RFC v3 00/19] multifd save restore prototype

Claudio Fontana cfontana at suse.de
Tue Apr 26 17:05:40 UTC 2022


On 4/26/22 6:47 PM, Claudio Fontana wrote:
> This is the multifd save prototype in its first semi-functional state,
> now with both save and restore minimally functional.
> 
> Still as mentioned before, likely there are quite a few rough edges,
> 
> let me know what you think about this possible option.
> 
> changes from v2 are many, mainly:
> 
> * added ability to restore the VM from disk using multifd
> 
> * fixed the multifd-helper to work in both directions,
>   assuming the need to listen for save, and connect for restore.
> 
> * fixed a large number of bugs, and probably introduced some :-)
> 
> 
> KNOWN ISSUES:
> 
> 1) this applies only to virsh save and virsh restore for now
>    (no managed save etc).
> 
> 2) the .pl scripts to generate the headers for the new APIs
>    do not reliably work for me, for the Restore case. I get:
>    
> src/remote/remote_daemon_dispatch_stubs.h:10080:9:
> error: too few arguments to function ‘virDomainRestoreParametersFlags’
> 
> if (virDomainRestoreParametersFlags(params, nparams, args->flags) < 0)
> 
> To work around this I had to fixup the header manually to look like:
> 
> ...(conn, params, nparams, args->flags) < 0)
> 
> 

3) after the restore the cpus are still paused, need to investigate.
   Requires a "kick" via QMP "cont" command to get moving currently.

> Thanks for your thoughts,
> 
> Claudio
> 
> Claudio Fontana (19):
>   iohelper: introduce new struct to carry copy operation parameters
>   iohelper: refactor copy operation as a separate function
>   libvirt: introduce virDomainSaveParametersFlags public API
>   libvirt: introduce virDomainRestoreParametersFlags public API
>   remote: Add RPC support for the virDomainSaveParametersFlags API
>   remote: Add RPC support for the virDomainRestoreParametersFlags API
>   qemu: add a stub for virDomainSaveParametersFlags API
>   qemu: add a stub for virDomainRestoreParametersFlags API
>   qemu: saveimage: introduce virQEMUSaveFd
>   iohelper: move runIO function to a separate module
>   runio: add arguments to extend use beyond just stdin and stdout
>   multifd-helper: new helper for parallel save/restore
>   qemu: wire up saveimage code with the multifd helper
>   qemu: implement qemuMigrationSrcToFilesMultiFd
>   qemu: add parameter to qemuMigrationDstRun to skip waiting
>   qemu: implement qemuSaveImageLoadMultiFd
>   tools: add parallel parameter to virsh save command
>   tools: add parallel parameter to virsh restore command
>   qemu: add migration parameter multifd-compression
> 
>  docs/manpages/virsh.rst          |  34 ++-
>  include/libvirt/libvirt-domain.h |  13 +
>  src/driver-hypervisor.h          |  14 +
>  src/libvirt-domain.c             |  99 +++++++
>  src/libvirt_private.syms         |   1 +
>  src/libvirt_public.syms          |   6 +
>  src/qemu/qemu_capabilities.c     |   5 +
>  src/qemu/qemu_capabilities.h     |   3 +
>  src/qemu/qemu_driver.c           | 233 +++++++++++----
>  src/qemu/qemu_migration.c        | 155 ++++++----
>  src/qemu/qemu_migration.h        |  16 +-
>  src/qemu/qemu_migration_params.c |  71 +++--
>  src/qemu/qemu_migration_params.h |  15 +
>  src/qemu/qemu_process.c          |   3 +-
>  src/qemu/qemu_process.h          |   5 +-
>  src/qemu/qemu_saveimage.c        | 480 ++++++++++++++++++++++++-------
>  src/qemu/qemu_saveimage.h        |  49 +++-
>  src/qemu/qemu_snapshot.c         |   6 +-
>  src/remote/remote_driver.c       |   2 +
>  src/remote/remote_protocol.x     |  29 +-
>  src/remote_protocol-structs      |  17 ++
>  src/util/iohelper.c              | 150 +---------
>  src/util/meson.build             |  15 +
>  src/util/multifd-helper.c        | 250 ++++++++++++++++
>  src/util/runio.c                 | 214 ++++++++++++++
>  src/util/runio.h                 |  38 +++
>  src/util/virthread.c             |   5 +
>  src/util/virthread.h             |   1 +
>  tools/virsh-domain.c             |  96 +++++--
>  29 files changed, 1599 insertions(+), 426 deletions(-)
>  create mode 100644 src/util/multifd-helper.c
>  create mode 100644 src/util/runio.c
>  create mode 100644 src/util/runio.h
> 



More information about the libvir-list mailing list