mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
migration: add postcopy migration of dirty bitmaps
Postcopy migration of dirty bitmaps. Only named dirty bitmaps are migrated. If destination qemu is already containing a dirty bitmap with the same name as a migrated bitmap (for the same node), then, if their granularities are the same the migration will be done, otherwise the error will be generated. If destination qemu doesn't contain such bitmap it will be created. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Message-id: 20180313180320.339796-12-vsementsov@virtuozzo.com [Changed '+' to '*' as per list discussion. --js] Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
committed by
John Snow
parent
16b0fd3252
commit
b35ebdf076
@@ -56,4 +56,7 @@ bool migration_has_failed(MigrationState *);
|
||||
bool migration_in_postcopy_after_devices(MigrationState *);
|
||||
void migration_global_dump(Monitor *mon);
|
||||
|
||||
/* migration/block-dirty-bitmap.c */
|
||||
void dirty_bitmap_mig_init(void);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -6,6 +6,7 @@ common-obj-y += qemu-file.o global_state.o
|
||||
common-obj-y += qemu-file-channel.o
|
||||
common-obj-y += xbzrle.o postcopy-ram.o
|
||||
common-obj-y += qjson.o
|
||||
common-obj-y += block-dirty-bitmap.o
|
||||
|
||||
common-obj-$(CONFIG_RDMA) += rdma.o
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -157,6 +157,9 @@ MigrationIncomingState *migration_incoming_get_current(void)
|
||||
memset(&mis_current, 0, sizeof(MigrationIncomingState));
|
||||
qemu_mutex_init(&mis_current.rp_mutex);
|
||||
qemu_event_init(&mis_current.main_thread_load_event, false);
|
||||
|
||||
init_dirty_bitmap_incoming_migration();
|
||||
|
||||
once = true;
|
||||
}
|
||||
return &mis_current;
|
||||
@@ -320,6 +323,8 @@ static void process_incoming_migration_bh(void *opaque)
|
||||
state, we need to obey autostart. Any other state is set with
|
||||
runstate_set. */
|
||||
|
||||
dirty_bitmap_mig_before_vm_start();
|
||||
|
||||
if (!global_state_received() ||
|
||||
global_state_get_runstate() == RUN_STATE_RUNNING) {
|
||||
if (autostart) {
|
||||
|
||||
@@ -235,4 +235,7 @@ void migrate_send_rp_pong(MigrationIncomingState *mis,
|
||||
int migrate_send_rp_req_pages(MigrationIncomingState *mis, const char* rbname,
|
||||
ram_addr_t start, size_t len);
|
||||
|
||||
void dirty_bitmap_mig_before_vm_start(void);
|
||||
void init_dirty_bitmap_incoming_migration(void);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1693,6 +1693,8 @@ static void loadvm_postcopy_handle_run_bh(void *opaque)
|
||||
|
||||
trace_loadvm_postcopy_handle_run_vmstart();
|
||||
|
||||
dirty_bitmap_mig_before_vm_start();
|
||||
|
||||
if (autostart) {
|
||||
/* Hold onto your hats, starting the CPU */
|
||||
vm_start();
|
||||
|
||||
@@ -227,3 +227,17 @@ colo_vm_state_change(const char *old, const char *new) "Change '%s' => '%s'"
|
||||
colo_send_message(const char *msg) "Send '%s' message"
|
||||
colo_receive_message(const char *msg) "Receive '%s' message"
|
||||
colo_failover_set_state(const char *new_state) "new state %s"
|
||||
|
||||
# migration/block-dirty-bitmap.c
|
||||
send_bitmap_header_enter(void) ""
|
||||
send_bitmap_bits(uint32_t flags, uint64_t start_sector, uint32_t nr_sectors, uint64_t data_size) "flags: 0x%x, start_sector: %" PRIu64 ", nr_sectors: %" PRIu32 ", data_size: %" PRIu64
|
||||
dirty_bitmap_save_iterate(int in_postcopy) "in postcopy: %d"
|
||||
dirty_bitmap_save_complete_enter(void) ""
|
||||
dirty_bitmap_save_complete_finish(void) ""
|
||||
dirty_bitmap_save_pending(uint64_t pending, uint64_t max_size) "pending %" PRIu64 " max: %" PRIu64
|
||||
dirty_bitmap_load_complete(void) ""
|
||||
dirty_bitmap_load_bits_enter(uint64_t first_sector, uint32_t nr_sectors) "chunk: %" PRIu64 " %" PRIu32
|
||||
dirty_bitmap_load_bits_zeroes(void) ""
|
||||
dirty_bitmap_load_header(uint32_t flags) "flags 0x%x"
|
||||
dirty_bitmap_load_enter(void) ""
|
||||
dirty_bitmap_load_success(void) ""
|
||||
|
||||
Reference in New Issue
Block a user