[libvirt RFCv6 00/27] multifd save restore prototype

Claudio Fontana cfontana at suse.de
Fri May 6 11:32:19 UTC 2022


Hi Daniel,

will repost a v7 today with many more improvements, in terms of split
and in terms of multifd-compression.

Thanks!

Claudio

On 5/5/22 2:52 PM, Claudio Fontana wrote:
> This a respin of the multifd save prototype,
> rebased on post 8.3.0 release.
> 
> There are still quite a few rough edges:
> 
> KNOWN ISSUES:
> 
> 1) this applies only to virsh save and virsh restore for now
>    (no managed save etc).
> 
> 2) error handling is not good yet, especially during resume,
>    errors may leave behind a qemu process and such.
>    May need some help find all of these cases
> 
> 3) the compression part is demonstrative only, there needs
>    to be more attention to compression options, and detecting
>    the compression used to store the multifd saves.
> 
> ...
> 
> changes from v4:
> 
> * runIO renamed to virFileDiskCopy and rethought arguments
> 
> * renamed new APIs from ...ParametersFlags to ...Params
> 
> * introduce the new virDomainSaveParams and virDomainRestoreParams
>   without any additional parameters, so they can be upstreamed first.
> 
> * solved the issue in the gendispatch.pl script generating code that
>   was missing the conn parameter.
> 
> ---
> 
> changes from v3:
> 
> * reordered series to have all helper-related change at the start
> 
> * solved all reported issues from ninja test, including documentation
> 
> * fixed most broken migration capabilities code (still imperfect likely)
> 
> * added G_GNUC_UNUSED as needed
> 
> * after multifd restore, added what I think were the missing operations:
> 
>   qemuProcessRefreshState(),
>   qemuProcessStartCPUs() - most importantly,
>   virDomainObjSave()
> 
>   The domain now starts running after restore without further encouragement
> 
> * removed the sleep(10) from the multifd-helper
> 
> 
> changes from v2:
> 
> * 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 :-)
> 
> 
> Thanks for your thoughts,
> 
> Claudio
> 
> 
> Claudio Fontana (27):
>   iohelper: introduce new struct to carry copy operation parameters
>   iohelper: refactor copy operation as a separate function
>   iohelper: move runIO function to virfile.c
>   virfile: rename runIO to virFileDiskCopy
>   virfile: change virFileDiskCopy arguments to extend beyond stdin,
>     stdout
>   virfile: add comment about the use of SEEK_END in virFileDiskCopy
>   multifd-helper: new helper for parallel save/restore
>   libvirt: introduce virDomainSaveParams public API
>   libvirt: introduce virDomainRestoreParams public API
>   remote: Add RPC support for the virDomainSaveParams API
>   gendispatch: add DomainRestoreParams as requiring conn argument
>   remote: Add RPC support for the virDomainRestoreParams API
>   qemu: add implementation for virDomainSaveParams API
>   qemu: add implementation for virDomainRestoreParams API
>   libvirt: add new VIR_DOMAIN_SAVE_PARALLEL flag and parameter
>   qemu: add stub support for VIR_DOMAIN_SAVE_PARALLEL in save
>   qemu: add stub support for VIR_DOMAIN_SAVE_PARALLEL in restore
>   qemu: saveimage: introduce virQEMUSaveFd
>   qemu: wire up saveimage code with the multifd helper
>   qemu: capabilities: add multifd to the probed migration capabilities
>   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
>   docs: update refs to virDomainSaveParams and virDomainRestoreParams
>   qemu: add migration parameter multifd-compression
> 
>  docs/formatsnapshot.rst                       |   5 +-
>  docs/manpages/virsh.rst                       |  34 +-
>  include/libvirt/libvirt-domain.h              |  49 ++
>  po/POTFILES.in                                |   1 +
>  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                  |   6 +
>  src/qemu/qemu_capabilities.h                  |   4 +
>  src/qemu/qemu_driver.c                        | 239 +++++++--
>  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                     | 496 ++++++++++++++----
>  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/rpc/gendispatch.pl                        |   5 +-
>  src/util/iohelper.c                           | 162 +-----
>  src/util/meson.build                          |  19 +
>  src/util/multifd-helper.c                     | 249 +++++++++
>  src/util/virfile.c                            | 218 ++++++++
>  src/util/virfile.h                            |   2 +
>  src/util/virthread.c                          |   5 +
>  src/util/virthread.h                          |   1 +
>  .../caps_4.0.0.aarch64.xml                    |   1 +
>  .../qemucapabilitiesdata/caps_4.0.0.ppc64.xml |   1 +
>  .../caps_4.0.0.riscv32.xml                    |   1 +
>  .../caps_4.0.0.riscv64.xml                    |   1 +
>  .../qemucapabilitiesdata/caps_4.0.0.s390x.xml |   1 +
>  .../caps_4.0.0.x86_64.xml                     |   1 +
>  .../caps_4.1.0.x86_64.xml                     |   1 +
>  .../caps_4.2.0.aarch64.xml                    |   1 +
>  .../qemucapabilitiesdata/caps_4.2.0.ppc64.xml |   1 +
>  .../qemucapabilitiesdata/caps_4.2.0.s390x.xml |   1 +
>  .../caps_4.2.0.x86_64.xml                     |   1 +
>  .../caps_5.0.0.aarch64.xml                    |   2 +
>  .../qemucapabilitiesdata/caps_5.0.0.ppc64.xml |   2 +
>  .../caps_5.0.0.riscv64.xml                    |   2 +
>  .../caps_5.0.0.x86_64.xml                     |   2 +
>  .../qemucapabilitiesdata/caps_5.1.0.sparc.xml |   2 +
>  .../caps_5.1.0.x86_64.xml                     |   2 +
>  .../caps_5.2.0.aarch64.xml                    |   2 +
>  .../qemucapabilitiesdata/caps_5.2.0.ppc64.xml |   2 +
>  .../caps_5.2.0.riscv64.xml                    |   2 +
>  .../qemucapabilitiesdata/caps_5.2.0.s390x.xml |   2 +
>  .../caps_5.2.0.x86_64.xml                     |   2 +
>  .../caps_6.0.0.aarch64.xml                    |   2 +
>  .../qemucapabilitiesdata/caps_6.0.0.s390x.xml |   2 +
>  .../caps_6.0.0.x86_64.xml                     |   2 +
>  .../caps_6.1.0.x86_64.xml                     |   2 +
>  .../caps_6.2.0.aarch64.xml                    |   2 +
>  .../qemucapabilitiesdata/caps_6.2.0.ppc64.xml |   2 +
>  .../caps_6.2.0.x86_64.xml                     |   2 +
>  .../caps_7.0.0.aarch64.xml                    |   2 +
>  .../qemucapabilitiesdata/caps_7.0.0.ppc64.xml |   2 +
>  .../caps_7.0.0.x86_64.xml                     |   2 +
>  tools/virsh-domain.c                          |  96 +++-
>  64 files changed, 1686 insertions(+), 446 deletions(-)
>  create mode 100644 src/util/multifd-helper.c
> 



More information about the libvir-list mailing list