Currently, cpr-exec requires a file to save and load VM/device state. Introduce a diskless approach so cpr-exec no longer relies on disk storage for this state. The main idea is to add a new memfd-based migration transport: instead of using a file, VM/device state is saved to and loaded from an inherited memfd.
I tested this with virtio-blk, NVMe VFIO, and virtio-net. /home/opc/ext4/qemu/build/qemu-system-x86_64 \ -machine q35,dump-guest-core=off,memory-backend=ram0,aux-ram-share=on \ -accel kvm -cpu host \ -name debug-threads=on \ -m 8G -smp 4 \ -object memory-backend-memfd,id=ram0,size=8G,share=on \ -device virtio-blk-pci,drive=drive0,id=virtblk0,num-queues=4 \ -drive file=ol89.qcow2,if=none,id=drive0 \ -object iommufd,id=iommufd0 \ -device vfio-pci,host=0000:82:00.0,iommufd=iommufd0,id=vfio0,x-no-mmap=on \ -device virtio-net-pci,netdev=tapnet,mq=true,vectors=9,mac=52:54:11:22:14:49 \ -netdev tap,id=tapnet,script=qemu-ifup,downscript=no,queues=2,vhost=off \ -vnc :8 -monitor stdio (qemu) migrate_set_parameter mode cpr-exec (qemu) migrate_set_parameter cpr-exec-command /home/opc/ext4/qemu/build/qemu-system-x86_64 -machine q35,dump-guest-core=off,memory-backend=ram0,aux-ram-share=on -accel kvm -cpu host -name debug-threads=on -m 8G -smp 4 -object memory-backend-memfd,id=ram0,size=8G,share=on -device virtio-blk-pci,drive=drive0,id=virtblk0,num-queues=4 -drive file=ol89.qcow2,if=none,id=drive0 -object iommufd,id=iommufd0 -device vfio-pci,host=0000:82:00.0,iommufd=iommufd0,id=vfio0,x-no-mmap=on -device virtio-net-pci,netdev=tapnet,mq=true,vectors=9,mac=52:54:11:22:14:49 -netdev tap,id=tapnet,script=qemu-ifup,downscript=no,queues=2,vhost=off -vnc :8 -monitor stdio -incoming defer (qemu) migrate -d memfd: QEMU 11.1.50 monitor - type 'help' for more information (qemu) info status VM status: paused (inmigrate) (qemu) migrate_incoming memfd: (qemu) info status VM status: running Dongli Zhang (5): migration/qapi: Add memfd migration transport migration: Add generic memfd channel helpers migration/cpr-exec: Add memfd helpers migration/cpr-exec: Support diskless memfd transport migration: cpr-exec memfd transport documentation docs/devel/migration/CPR.rst | 24 +++++++++++ migration/channel.c | 7 +++ migration/cpr-exec-memfd.c | 90 +++++++++++++++++++++++++++++++++++++++ migration/cpr-exec-memfd.h | 18 ++++++++ migration/cpr-exec.c | 9 ++++ migration/memfd.c | 90 +++++++++++++++++++++++++++++++++++++++ migration/memfd.h | 19 +++++++++ migration/meson.build | 2 + migration/migration.c | 9 ++++ qapi/migration.json | 32 +++++++++++--- 10 files changed, 295 insertions(+), 5 deletions(-) base-commit: e8d693e12af9cbb89d724baadfcc08559669e279 Thank you very much! Dongli Zhang
