migration/colo: Optimize COLO primary node start code path

Optimize COLO primary start path from:
MIGRATION_STATUS_XXX --> MIGRATION_STATUS_ACTIVE --> MIGRATION_STATUS_COLO --> MIGRATION_STATUS_COMPLETED
To:
MIGRATION_STATUS_XXX --> MIGRATION_STATUS_COLO --> MIGRATION_STATUS_COMPLETED
No need to start primary COLO through "MIGRATION_STATUS_ACTIVE".

Signed-off-by: Zhang Chen <chen.zhang@intel.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
Zhang Chen 2021-11-17 16:30:02 +08:00 committed by Juan Quintela
parent 795969ab1f
commit 751fe4c608
2 changed files with 7 additions and 8 deletions

View File

@ -666,8 +666,6 @@ void migrate_start_colo_process(MigrationState *s)
colo_checkpoint_notify, s); colo_checkpoint_notify, s);
qemu_sem_init(&s->colo_exit_sem, 0); qemu_sem_init(&s->colo_exit_sem, 0);
migrate_set_state(&s->state, MIGRATION_STATUS_ACTIVE,
MIGRATION_STATUS_COLO);
colo_process_checkpoint(s); colo_process_checkpoint(s);
qemu_mutex_lock_iothread(); qemu_mutex_lock_iothread();
} }

View File

@ -3613,12 +3613,7 @@ static void migration_iteration_finish(MigrationState *s)
migration_calculate_complete(s); migration_calculate_complete(s);
runstate_set(RUN_STATE_POSTMIGRATE); runstate_set(RUN_STATE_POSTMIGRATE);
break; break;
case MIGRATION_STATUS_COLO:
case MIGRATION_STATUS_ACTIVE:
/*
* We should really assert here, but since it's during
* migration, let's try to reduce the usage of assertions.
*/
if (!migrate_colo_enabled()) { if (!migrate_colo_enabled()) {
error_report("%s: critical error: calling COLO code without " error_report("%s: critical error: calling COLO code without "
"COLO enabled", __func__); "COLO enabled", __func__);
@ -3628,6 +3623,12 @@ static void migration_iteration_finish(MigrationState *s)
* Fixme: we will run VM in COLO no matter its old running state. * Fixme: we will run VM in COLO no matter its old running state.
* After exited COLO, we will keep running. * After exited COLO, we will keep running.
*/ */
/* Fallthrough */
case MIGRATION_STATUS_ACTIVE:
/*
* We should really assert here, but since it's during
* migration, let's try to reduce the usage of assertions.
*/
s->vm_was_running = true; s->vm_was_running = true;
/* Fallthrough */ /* Fallthrough */
case MIGRATION_STATUS_FAILED: case MIGRATION_STATUS_FAILED: