* Yury Kotov (yury-ko...@yandex-team.ru) wrote: > 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.
Hi Yury, There have been a few similar patch series around from people wanting to do similar things. In particular Lai Jiangshan's https://lists.nongnu.org/archive/html/qemu-devel/2018-03/msg07511.html and Cédric Le Goater wanted to skip regions for a different reason. We merged some of Cédric's code last year so that we now have the qemu_ram_is_migratable() function - and we should be reusing that to skip things rather than adding a new check that we have to add everywhere. Also, ypu're skipping 'external' things, I think the other suggestion was to skip 'shared' things (i.e. anything with share=0); skipping share=on cases sounds easier to me. Dave > 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 > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK