Some patches are unchnaged from (v7) of 'Dirty bitmaps migration'
(DBMv7). I've left Reviewed-by's for them, if you don't like it, say me
and I'll drop them in the following version.
So, relatively to last DBMv7:
01-04: new patches, splitting common postcopy migration out of ram
postcopy migration
05: equal to DBMv7.05
06: new
07: equal to DBMv7.06
08: new
09: equal to DBMv7.07
10: new
11: derived from DBMv7.08, see below
12-15: equal to DBMv7.09-12
16: derived from DBMv7.13
- switch from fifo to socket, as postcopy don't work with fifo
for now
- change parameters: size, granularity, regions
- add time.sleep, to wait for postcopy migration phase (bad
temporary solution.
- drop Reviewed-by
17: new
11: the core patch of the series, it is derived from
[DBMv7.08: migration: add migration_block-dirty-bitmap.c]
There are a lot of changes related to switching from precopy to
postcopy, but functions related to migration stream itself
(structs, send/load sequences) are mostly unchnaged.
So, changes, to switch from precopy to postcopy:
- removed all staff related to meta bitmaps and dirty phase!!!
- add dirty_bitmap_mig_enable_successors, and call it before
target vm start in loadvm_postcopy_handle_run
- add enabled_bitmaps list of bitmaps for
dirty_bitmap_mig_enable_successors
- enabled flag is send with start bitmap chunk instead of
completion chunk
- sectors_per_chunk is calculated directly from CHUNK_SIZE, not
using meta bitmap granularity
- dirty_bitmap_save_iterate: remove dirty_phase, move bulk_phase
to postcopy stage
- dirty_bitmap_save_pending: remove dirty phase related pending,
switch pending to non-postcopyable
- dirty_bitmap_load_start: get enabled flag and prepare
successors for enabled bitmaps, also add them to
enabled_bitmaps list
- dirty_bitmap_load_complete: for enabled bitmaps: merge them
with successors and enable
- savevm handlers:
* remove separate savevm_dirty_bitmap_live_iterate_handlers state
(it was bad idea, any way), and move its save_live_iterate to
savevm_dirty_bitmap_handlers
* add is_active_iterate savevm handler, which allows iterations
only in postcopy stage (after stopping source vm)
* add has_postcopy savevm handler. (ofcourse, just returning true)
* use save_live_complete_postcopy instead of
save_live_complete_precopy
Other changes:
- some debug output changed
- remove MIN_LIVE_SIZE, is_live_iterative and related staff (it
was needed to omit iterations if bitmap data is small, possibly
this should be reimplemented)
Vladimir Sementsov-Ogievskiy (18):
migration: add has_postcopy savevm handler
migration: fix ram_save_pending
migration: split common postcopy out of ram postcopy
migration: introduce postcopy-only pending
block: add bdrv_next_dirty_bitmap()
block: add bdrv_dirty_bitmap_enable_successor()
qapi: add dirty-bitmaps migration capability
block/dirty-bitmap: add bdrv_dirty_bitmap_release_successor
migration: include migrate_dirty_bitmaps in migrate_postcopy
migration/qemu-file: add qemu_put_counted_string()
migration: add is_active_iterate handler
migration: add postcopy migration of dirty bitmaps
iotests: maintain several vms in test
iotests: add add_incoming_migration to VM class
qapi: add md5 checksum of last dirty bitmap level to query-block
iotests: add default node-name
iotests: add dirty bitmap migration test 117
iotests: add dirty bitmap postcopy test
block/dirty-bitmap.c | 26 ++
include/block/dirty-bitmap.h | 6 +
include/migration/block.h | 1 +
include/migration/migration.h | 6 +
include/migration/qemu-file.h | 2 +
include/migration/vmstate.h | 7 +-
include/qemu/hbitmap.h | 8 +
include/sysemu/sysemu.h | 5 +-
migration/Makefile.objs | 2 +-
migration/block-dirty-bitmap.c | 699 +++++++++++++++++++++++++++++++++++++++++
migration/block.c | 7 +-
migration/migration.c | 66 ++--
migration/postcopy-ram.c | 4 +-
migration/qemu-file.c | 13 +
migration/ram.c | 19 +-
migration/savevm.c | 56 +++-
migration/trace-events | 2 +-
qapi-schema.json | 4 +-
qapi/block-core.json | 5 +-
tests/qemu-iotests/169 | 134 ++++++++
tests/qemu-iotests/169.out | 5 +
tests/qemu-iotests/group | 2 +
tests/qemu-iotests/iotests.py | 21 +-
util/hbitmap.c | 8 +
vl.c | 1 +
25 files changed, 1055 insertions(+), 54 deletions(-)
create mode 100644 migration/block-dirty-bitmap.c
create mode 100755 tests/qemu-iotests/169
create mode 100644 tests/qemu-iotests/169.out
--
1.8.3.1