This series adds support for live migration without shared storage, means copy the storage while migrating. It was tested with KVM. Supports 2 ways to replicate the storage during migration: 1. Complete copy of storage to destination 2. Assuming the storage is cow based, copy only the allocated data, time of the migration will be linear with the amount of allocated data (user responsibility to verify that the same backend file reside on src and destination).
Live migration will work as follows: (qemu) migrate -d tcp:0:4444 # for ordinary live migration (qemu) migrate -d blk tcp:0:4444 # for live migration with complete storage copy (qemu) migrate -d blk inc tcp:0:4444 # for live migration with incremental storage copy, storage is cow based. Changes from v4: - Register block dirty tracking for each block device. - Block.c will now manage a dirty bitmap per device once bdrv_set_dirty_tracking() is called. Bitmap is polled by the upper layer (block-migration.c). - Global variabels moved to a global state structure allocated dynamically. - Coding style issues. Patch summary: Makefile | 1 + block-migration.c | 558 +++++++++++++++++++++++++++++++++++++++++++++++++++++ block-migration.h | 29 +++ block.c | 78 ++++++++- block.h | 8 +- block_int.h | 2 + buffered_file.c | 10 +- hw/hw.h | 9 +- migration-exec.c | 9 +- migration-fd.c | 7 +- migration-tcp.c | 7 +- migration-unix.c | 7 +- migration.c | 23 ++- migration.h | 20 ++- monitor.c | 36 +++- qemu-monitor.hx | 19 ++- savevm.c | 62 +++++-- sysemu.h | 2 +- vl.c | 9 +- 19 files changed, 841 insertions(+), 55 deletions(-) Signed-off-by: Liran Schour <lir...@il.ibm.com>