* zhanghailiang (zhang.zhanghaili...@huawei.com) wrote: > For COLO FT, both the PVM and SVM run at the same time, > only sync the state while it needs. > > So here, let SVM runs while not doing checkpoint, > Besides, change DEFAULT_MIGRATE_X_CHECKPOINT_DELAY to 200*100. > > Cc: Jason Wang <jasow...@redhat.com> > Signed-off-by: zhanghailiang <zhang.zhanghaili...@huawei.com>
Reviewed-by: Dr. David Alan Gilbert <dgilb...@redhat.com> > --- > migration/colo.c | 25 +++++++++++++++++++++++++ > migration/migration.c | 2 +- > 2 files changed, 26 insertions(+), 1 deletion(-) > > diff --git a/migration/colo.c b/migration/colo.c > index 712308e..fb8d8fd 100644 > --- a/migration/colo.c > +++ b/migration/colo.c > @@ -19,8 +19,11 @@ > #include "qemu/error-report.h" > #include "qapi/error.h" > #include "migration/failover.h" > +#include "net/colo-compare.h" > +#include "net/colo.h" > > static bool vmstate_loading; > +static Notifier packets_compare_notifier; > > #define COLO_BUFFER_BASE_SIZE (4 * 1024 * 1024) > > @@ -263,6 +266,7 @@ static int colo_do_checkpoint_transaction(MigrationState > *s, > if (local_err) { > goto out; > } > + > /* Reset channel-buffer directly */ > qio_channel_io_seek(QIO_CHANNEL(bioc), 0, 0, NULL); > bioc->usage = 0; > @@ -283,6 +287,11 @@ static int colo_do_checkpoint_transaction(MigrationState > *s, > goto out; > } > > + colo_notify_compares_event(NULL, COLO_CHECKPOINT, &local_err); > + if (local_err) { > + goto out; > + } > + > /* Disable block migration */ > s->params.blk = 0; > s->params.shared = 0; > @@ -341,6 +350,11 @@ out: > return ret; > } > > +static void colo_compare_notify_checkpoint(Notifier *notifier, void *data) > +{ > + colo_checkpoint_notify(data); > +} > + > static void colo_process_checkpoint(MigrationState *s) > { > QIOChannelBuffer *bioc; > @@ -357,6 +371,9 @@ static void colo_process_checkpoint(MigrationState *s) > goto out; > } > > + packets_compare_notifier.notify = colo_compare_notify_checkpoint; > + colo_compare_register_notifier(&packets_compare_notifier); > + > /* > * Wait for Secondary finish loading VM states and enter COLO > * restore. > @@ -402,6 +419,7 @@ out: > qemu_fclose(fb); > } > > + colo_compare_unregister_notifier(&packets_compare_notifier); > timer_del(s->colo_delay_timer); > > /* Hope this not to be too long to wait here */ > @@ -518,6 +536,11 @@ void *colo_process_incoming_thread(void *opaque) > goto out; > } > > + qemu_mutex_lock_iothread(); > + vm_stop_force_state(RUN_STATE_COLO); > + trace_colo_vm_state_change("run", "stop"); > + qemu_mutex_unlock_iothread(); > + > /* FIXME: This is unnecessary for periodic checkpoint mode */ > colo_send_message(mis->to_src_file, COLO_MESSAGE_CHECKPOINT_REPLY, > &local_err); > @@ -571,6 +594,8 @@ void *colo_process_incoming_thread(void *opaque) > } > > vmstate_loading = false; > + vm_start(); > + trace_colo_vm_state_change("stop", "run"); > qemu_mutex_unlock_iothread(); > > if (failover_get_state() == FAILOVER_STATUS_RELAUNCH) { > diff --git a/migration/migration.c b/migration/migration.c > index c6ae69d..2339be7 100644 > --- a/migration/migration.c > +++ b/migration/migration.c > @@ -66,7 +66,7 @@ > /* The delay time (in ms) between two COLO checkpoints > * Note: Please change this default value to 10000 when we support hybrid > mode. > */ > -#define DEFAULT_MIGRATE_X_CHECKPOINT_DELAY 200 > +#define DEFAULT_MIGRATE_X_CHECKPOINT_DELAY (200 * 100) > > static NotifierList migration_state_notifiers = > NOTIFIER_LIST_INITIALIZER(migration_state_notifiers); > -- > 1.8.3.1 > > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK