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 >