Hi, The series adds migration capability which allows to skip 'external' RAM blocks during migration. External block is a RAMBlock which available from the outside of current QEMU process (e.g. file in /dev/shm). It's useful for fast local migration to update QEMU for the running guests.
Patches: 1. Add offset validation to make sure that external RAM block has the same physical offset on target side, 2. Add RAM_EXTERNAL flag to determine external RAM blocks, 3. Add ignore-external migration capability, 4. Add a test. Usage example: 1. Start source VM: qemu-system-x86 \ -m 4G \ -object memory-backend-file,id=mem0,size=4G,share=on,mem-path=/dev/shm/mem0 \ -numa node,memdev=mem0 \ -qmp unix:/tmp/qemu-qmp-1.sock,server,nowait \ 2. Start target VM: qemu-system-x86 \ -m 4G \ -object memory-backend-file,id=mem0,size=4G,share=on,mem-path=/dev/shm/mem0 \ -numa node,memdev=mem0 \ -qmp unix:/tmp/qemu-qmp-2.sock,server,nowait \ -incoming defer 3. Enable ignore-external capability on both VMs: { "execute": "migrate-set-capabilities" , "arguments": { "capabilities": [ { "capability": "x-ignore-external", "state": true } ] } } 4. Start migration. Regards, Yury Yury Kotov (4): migration: add RAMBlock's offset validation exec: add RAM_EXTERNAL flag to mark non-QEMU allocated blocks migration: introduce ignore-external capability tests/migration-test: Add a test for ignore-external capability backends/hostmem-file.c | 3 +- exec.c | 7 ++- include/exec/cpu-common.h | 1 + include/exec/memory.h | 3 ++ migration/migration.c | 9 ++++ migration/migration.h | 1 + migration/ram.c | 52 ++++++++++++++++-- numa.c | 4 +- qapi/migration.json | 6 ++- tests/migration-test.c | 109 +++++++++++++++++++++++++++++++------- 10 files changed, 165 insertions(+), 30 deletions(-) -- 2.20.1