MIGRATION_STATUS_POSTCOPY_ACTIVE: Add new migration state
'MIGRATION_STATUS_POSTCOPY_ACTIVE' is entered after migrate_start_postcopy 'migration_in_postcopy' is provided for other sections to know if they're in postcopy. Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Reviewed-by: Amit Shah <amit.shah@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
parent
36f48567b8
commit
9ec055ae29
@ -170,6 +170,8 @@ MigrationState *migrate_init(const MigrationParams *params);
|
||||
bool migration_in_setup(MigrationState *);
|
||||
bool migration_has_finished(MigrationState *);
|
||||
bool migration_has_failed(MigrationState *);
|
||||
/* True if outgoing migration has entered postcopy phase */
|
||||
bool migration_in_postcopy(MigrationState *);
|
||||
MigrationState *migrate_get_current(void);
|
||||
|
||||
void migrate_compress_threads_create(void);
|
||||
|
@ -462,6 +462,7 @@ static bool migration_is_setup_or_active(int state)
|
||||
{
|
||||
switch (state) {
|
||||
case MIGRATION_STATUS_ACTIVE:
|
||||
case MIGRATION_STATUS_POSTCOPY_ACTIVE:
|
||||
case MIGRATION_STATUS_SETUP:
|
||||
return true;
|
||||
|
||||
@ -535,6 +536,39 @@ MigrationInfo *qmp_query_migrate(Error **errp)
|
||||
info->x_cpu_throttle_percentage = cpu_throttle_get_percentage();
|
||||
}
|
||||
|
||||
get_xbzrle_cache_stats(info);
|
||||
break;
|
||||
case MIGRATION_STATUS_POSTCOPY_ACTIVE:
|
||||
/* Mostly the same as active; TODO add some postcopy stats */
|
||||
info->has_status = true;
|
||||
info->has_total_time = true;
|
||||
info->total_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME)
|
||||
- s->total_time;
|
||||
info->has_expected_downtime = true;
|
||||
info->expected_downtime = s->expected_downtime;
|
||||
info->has_setup_time = true;
|
||||
info->setup_time = s->setup_time;
|
||||
|
||||
info->has_ram = true;
|
||||
info->ram = g_malloc0(sizeof(*info->ram));
|
||||
info->ram->transferred = ram_bytes_transferred();
|
||||
info->ram->remaining = ram_bytes_remaining();
|
||||
info->ram->total = ram_bytes_total();
|
||||
info->ram->duplicate = dup_mig_pages_transferred();
|
||||
info->ram->skipped = skipped_mig_pages_transferred();
|
||||
info->ram->normal = norm_mig_pages_transferred();
|
||||
info->ram->normal_bytes = norm_mig_bytes_transferred();
|
||||
info->ram->dirty_pages_rate = s->dirty_pages_rate;
|
||||
info->ram->mbps = s->mbps;
|
||||
|
||||
if (blk_mig_active()) {
|
||||
info->has_disk = true;
|
||||
info->disk = g_malloc0(sizeof(*info->disk));
|
||||
info->disk->transferred = blk_mig_bytes_transferred();
|
||||
info->disk->remaining = blk_mig_bytes_remaining();
|
||||
info->disk->total = blk_mig_bytes_total();
|
||||
}
|
||||
|
||||
get_xbzrle_cache_stats(info);
|
||||
break;
|
||||
case MIGRATION_STATUS_COMPLETED:
|
||||
@ -718,7 +752,8 @@ static void migrate_fd_cleanup(void *opaque)
|
||||
s->file = NULL;
|
||||
}
|
||||
|
||||
assert(s->state != MIGRATION_STATUS_ACTIVE);
|
||||
assert((s->state != MIGRATION_STATUS_ACTIVE) &&
|
||||
(s->state != MIGRATION_STATUS_POSTCOPY_ACTIVE));
|
||||
|
||||
if (s->state == MIGRATION_STATUS_CANCELLING) {
|
||||
migrate_set_state(s, MIGRATION_STATUS_CANCELLING,
|
||||
@ -793,6 +828,11 @@ bool migration_has_failed(MigrationState *s)
|
||||
s->state == MIGRATION_STATUS_FAILED);
|
||||
}
|
||||
|
||||
bool migration_in_postcopy(MigrationState *s)
|
||||
{
|
||||
return (s->state == MIGRATION_STATUS_POSTCOPY_ACTIVE);
|
||||
}
|
||||
|
||||
MigrationState *migrate_init(const MigrationParams *params)
|
||||
{
|
||||
MigrationState *s = migrate_get_current();
|
||||
@ -1307,7 +1347,10 @@ static void *migration_thread(void *opaque)
|
||||
s->setup_time = qemu_clock_get_ms(QEMU_CLOCK_HOST) - setup_start;
|
||||
migrate_set_state(s, MIGRATION_STATUS_SETUP, MIGRATION_STATUS_ACTIVE);
|
||||
|
||||
while (s->state == MIGRATION_STATUS_ACTIVE) {
|
||||
trace_migration_thread_setup_complete();
|
||||
|
||||
while (s->state == MIGRATION_STATUS_ACTIVE ||
|
||||
s->state == MIGRATION_STATUS_POSTCOPY_ACTIVE) {
|
||||
int64_t current_time;
|
||||
uint64_t pending_size;
|
||||
|
||||
|
@ -430,6 +430,8 @@
|
||||
#
|
||||
# @active: in the process of doing migration.
|
||||
#
|
||||
# @postcopy-active: like active, but now in postcopy mode. (since 2.5)
|
||||
#
|
||||
# @completed: migration is finished.
|
||||
#
|
||||
# @failed: some error occurred during migration process.
|
||||
@ -439,7 +441,7 @@
|
||||
##
|
||||
{ 'enum': 'MigrationStatus',
|
||||
'data': [ 'none', 'setup', 'cancelling', 'cancelled',
|
||||
'active', 'completed', 'failed' ] }
|
||||
'active', 'postcopy-active', 'completed', 'failed' ] }
|
||||
|
||||
##
|
||||
# @MigrationInfo
|
||||
|
@ -1452,6 +1452,7 @@ migrate_fd_error(void) ""
|
||||
migrate_fd_cancel(void) ""
|
||||
migrate_pending(uint64_t size, uint64_t max, uint64_t post, uint64_t nonpost) "pending size %" PRIu64 " max %" PRIu64 " (post=%" PRIu64 " nonpost=%" PRIu64 ")"
|
||||
migrate_send_rp_message(int msg_type, uint16_t len) "%d: len %d"
|
||||
migration_thread_setup_complete(void) ""
|
||||
open_return_path_on_source(void) ""
|
||||
open_return_path_on_source_continue(void) ""
|
||||
source_return_path_thread_bad_end(void) ""
|
||||
|
Loading…
Reference in New Issue
Block a user