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

Claudio Fontana posted 19 patches 2 years ago
Failed in applying to current master (apply log)
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
[libvirt RFC v3 00/19] multifd save restore prototype
Posted by Claudio Fontana 2 years ago
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)


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

-- 
2.34.1
Re: [libvirt RFC v3 00/19] multifd save restore prototype
Posted by Claudio Fontana 2 years ago
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
>