From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org,
pbonzini@redhat.com, armbru@redhat.com, eblake@redhat.com,
famz@redhat.com, stefanha@redhat.com, amit.shah@redhat.com,
quintela@redhat.com, mreitz@redhat.com, kwolf@redhat.com,
peter.maydell@linaro.org, den@openvz.org, jsnow@redhat.com,
lirans@il.ibm.com
Subject: Re: [Qemu-devel] [PATCH 00/18] Dirty bitmaps postcopy migration
Date: Wed, 17 Aug 2016 13:35:29 +0100 [thread overview]
Message-ID: <20160817123528.GC2018@work-vm> (raw)
In-Reply-To: <1471343175-14945-1-git-send-email-vsementsov@virtuozzo.com>
* Vladimir Sementsov-Ogievskiy (vsementsov@virtuozzo.com) wrote:
> v2:
> some bugs fixed, iotests a bit changed and merged into one test.
> based on block-next (https://github.com/XanClic/qemu/commits/block-next)
> clone: tag postcopy-v2 from https://src.openvz.org/scm/~vsementsov/qemu.git
> online: https://src.openvz.org/users/vsementsov/repos/qemu/browse?at=refs%2Ftags%2Fpostcopy-v2
>
> v1:
>
> These series are derived from my 'Dirty bitmaps migration' series. The
> core idea is switch to postcopy migration and drop usage of meta
> bitmaps.
>
> These patches provide dirty bitmap postcopy migration feature. Only
> named dirty bitmaps are to be migrated. Migration may be enabled using
> migration capabilities.
>
> The overall method (thanks to John Snow):
>
> 1. migrate bitmaps meta data in .save_live_setup
> - create/find related bitmaps on target
> - disable them
> - create successors (anonimous children) only for enabled migrated
> bitmaps
> 2. do nothing in precopy stage
> 3. just before target vm start: enable successors, created in (1)
> 4. migrate bitmap data
> 5. reclaime bitmaps (merge successors to their parents)
> 6. enable bitmaps (only bitmaps, which was enabled in source)
I'd like to just understand a little bit more about the structure;
a)I don't see anything where the destination asks the source for data;
am I right or just missing that?
b)If I'm right about (a) is the only reason it's called 'postcopy'
because it's done when the destination is already running?
c)How does it play together with ram postcopy; do they get in each
others way?
Dave
>
> 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
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2016-08-17 12:35 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-16 10:25 [Qemu-devel] [PATCH 00/18] Dirty bitmaps postcopy migration Vladimir Sementsov-Ogievskiy
2016-08-16 10:25 ` [Qemu-devel] [PATCH 01/18] migration: add has_postcopy savevm handler Vladimir Sementsov-Ogievskiy
2016-11-04 12:32 ` Juan Quintela
2016-08-16 10:25 ` [Qemu-devel] [PATCH 02/18] migration: fix ram_save_pending Vladimir Sementsov-Ogievskiy
2016-08-17 12:12 ` Dr. David Alan Gilbert
2016-11-04 12:32 ` Juan Quintela
2016-08-16 10:26 ` [Qemu-devel] [PATCH 03/18] migration: split common postcopy out of ram postcopy Vladimir Sementsov-Ogievskiy
2016-11-04 12:49 ` Juan Quintela
2016-08-16 10:26 ` [Qemu-devel] [PATCH 04/18] migration: introduce postcopy-only pending Vladimir Sementsov-Ogievskiy
2016-11-04 12:46 ` Juan Quintela
2016-11-21 11:05 ` Vladimir Sementsov-Ogievskiy
2016-08-16 10:26 ` [Qemu-devel] [PATCH 05/18] block: add bdrv_next_dirty_bitmap() Vladimir Sementsov-Ogievskiy
2016-08-16 10:26 ` [Qemu-devel] [PATCH 06/18] block: add bdrv_dirty_bitmap_enable_successor() Vladimir Sementsov-Ogievskiy
2016-08-16 10:26 ` [Qemu-devel] [PATCH 07/18] qapi: add dirty-bitmaps migration capability Vladimir Sementsov-Ogievskiy
2016-08-17 9:06 ` Fam Zheng
2016-08-16 10:26 ` [Qemu-devel] [PATCH 08/18] block/dirty-bitmap: add bdrv_dirty_bitmap_release_successor Vladimir Sementsov-Ogievskiy
2016-08-16 10:26 ` [Qemu-devel] [PATCH 09/18] migration: include migrate_dirty_bitmaps in migrate_postcopy Vladimir Sementsov-Ogievskiy
2016-08-16 10:26 ` [Qemu-devel] [PATCH 10/18] migration/qemu-file: add qemu_put_counted_string() Vladimir Sementsov-Ogievskiy
2016-08-17 9:09 ` Fam Zheng
2016-11-21 5:23 ` Vladimir Sementsov-Ogievskiy
2016-08-16 10:26 ` [Qemu-devel] [PATCH 11/18] migration: add is_active_iterate handler Vladimir Sementsov-Ogievskiy
2016-08-16 10:26 ` [Qemu-devel] [PATCH 12/18] migration: add postcopy migration of dirty bitmaps Vladimir Sementsov-Ogievskiy
2016-11-04 13:09 ` Juan Quintela
2016-11-21 6:35 ` Vladimir Sementsov-Ogievskiy
2016-08-16 10:26 ` [Qemu-devel] [PATCH 13/18] iotests: maintain several vms in test Vladimir Sementsov-Ogievskiy
2016-08-16 10:26 ` [Qemu-devel] [PATCH 14/18] iotests: add add_incoming_migration to VM class Vladimir Sementsov-Ogievskiy
2016-08-16 10:26 ` [Qemu-devel] [PATCH 15/18] qapi: add md5 checksum of last dirty bitmap level to query-block Vladimir Sementsov-Ogievskiy
2016-08-16 10:37 ` Daniel P. Berrange
2016-08-16 10:42 ` Daniel P. Berrange
2016-08-16 10:26 ` [Qemu-devel] [PATCH 16/18] iotests: add default node-name Vladimir Sementsov-Ogievskiy
2016-08-17 9:19 ` Fam Zheng
2016-08-16 10:26 ` [Qemu-devel] [PATCH 17/18] iotests: add dirty bitmap migration test 169 Vladimir Sementsov-Ogievskiy
2016-08-17 11:35 ` Fam Zheng
2016-08-16 10:26 ` [Qemu-devel] [PATCH 18/18] iotests: add dirty bitmap postcopy test Vladimir Sementsov-Ogievskiy
2016-08-17 11:47 ` [Qemu-devel] [PATCH 00/18] Dirty bitmaps postcopy migration Fam Zheng
2016-08-17 12:15 ` Vladimir Sementsov-Ogievskiy
2016-08-20 11:21 ` Fam Zheng
2016-08-17 12:35 ` Dr. David Alan Gilbert [this message]
2016-08-17 13:54 ` Vladimir Sementsov-Ogievskiy
2016-09-30 11:00 ` Vladimir Sementsov-Ogievskiy
2016-10-12 11:32 ` Vladimir Sementsov-Ogievskiy
2016-10-25 13:04 ` [Qemu-devel] ping " Vladimir Sementsov-Ogievskiy
2016-11-02 11:13 ` Stefan Hajnoczi
2016-11-02 12:05 ` Denis V. Lunev
2016-11-04 13:12 ` Juan Quintela
2016-11-04 13:27 ` Denis V. Lunev
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160817123528.GC2018@work-vm \
--to=dgilbert@redhat.com \
--cc=amit.shah@redhat.com \
--cc=armbru@redhat.com \
--cc=den@openvz.org \
--cc=eblake@redhat.com \
--cc=famz@redhat.com \
--cc=jsnow@redhat.com \
--cc=kwolf@redhat.com \
--cc=lirans@il.ibm.com \
--cc=mreitz@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=stefanha@redhat.com \
--cc=vsementsov@virtuozzo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).