[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3 7/7] migration: pause-before-switchover for p
From: |
Peter Xu |
Subject: |
Re: [Qemu-devel] [PATCH v3 7/7] migration: pause-before-switchover for postcopy |
Date: |
Thu, 19 Oct 2017 13:08:09 +0800 |
User-agent: |
Mutt/1.5.24 (2015-08-30) |
On Wed, Oct 18, 2017 at 06:40:13PM +0100, Dr. David Alan Gilbert (git) wrote:
> From: "Dr. David Alan Gilbert" <address@hidden>
>
> Add pause-before-switchover support for postcopy.
> After starting postcopy it will transition
> active->pre-switchover->postcopy_active
>
> Signed-off-by: Dr. David Alan Gilbert <address@hidden>
> ---
> migration/migration.c | 29 ++++++++++++++++++++++-------
> 1 file changed, 22 insertions(+), 7 deletions(-)
>
> diff --git a/migration/migration.c b/migration/migration.c
> index 756deb3e2c..af587377e9 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -104,6 +104,9 @@ enum mig_rp_message_type {
> static MigrationState *current_migration;
>
> static bool migration_object_check(MigrationState *ms, Error **errp);
> +static int migration_maybe_pause(MigrationState *s,
> + int *current_active_state,
> + int new_state);
>
> void migration_object_init(void)
> {
> @@ -1830,8 +1833,11 @@ static int postcopy_start(MigrationState *ms, bool
> *old_vm_running)
> QEMUFile *fb;
> int64_t time_at_stop = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
> bool restart_block = false;
> - migrate_set_state(&ms->state, MIGRATION_STATUS_ACTIVE,
> - MIGRATION_STATUS_POSTCOPY_ACTIVE);
> + int cur_state = MIGRATION_STATUS_ACTIVE;
> + if (!migrate_pause_before_switchover()) {
> + migrate_set_state(&ms->state, MIGRATION_STATUS_ACTIVE,
> + MIGRATION_STATUS_POSTCOPY_ACTIVE);
(Note: so we are sending device data during
MIGRATION_STATUS_POSTCOPY_ACTIVE state if "pause-before-switchover"
is not set, and MIGRATION_STATUS_DEVICE state if that is set)
> + }
>
> trace_postcopy_start();
> qemu_mutex_lock_iothread();
> @@ -1845,6 +1851,12 @@ static int postcopy_start(MigrationState *ms, bool
> *old_vm_running)
> goto fail;
> }
>
> + ret = migration_maybe_pause(ms, &cur_state,
> + MIGRATION_STATUS_POSTCOPY_ACTIVE);
> + if (ret < 0) {
> + goto fail;
> + }
> +
I think it works, so:
Reviewed-by: Peter Xu <address@hidden>
About the unification of state change I mentioned in cover letter,
what I proposed would look like this for postcopy (I would avoid
fiddling with cur_state and related, and for precopy it should be
similar):
migration_pre_switchover (ms)
{
migrate_set_state(ms, MIGRATION_STATUS_PRE_SWITCHOVER);
qemu_mutex_unlock_iothread();
qemu_sem_wait();
qemu_mutex_lock_iothread();
}
postcopy_start ()
{
...
/* Whether we need extra pre-switchover state transition */
if (migrate_pause_before_switchover ()) {
migration_pre_switchover (ms);
}
/*
* To "switchover" state to send device states, etc., no matter
* whether "pause-before-switchover" is enabled
*/
migration_set_state (ms, MIGRATION_STATUS_SWITCHOVER);
/* send device states and the rest postcopy work... */
migration_set_state (ms, MIGRATION_STATUS_POSTCOPY_ACTIVE)
}
I proposed this only for readability and cleaness of state transition.
At least then we'll know that we are always sending the device data
during SWITCHOVER state (or say, DEVICE state). Again, either way is
fine to me. Thanks,
--
Peter Xu
- Re: [Qemu-devel] [PATCH v3 3/7] migration: Wait for semaphore before completing migration, (continued)
- [Qemu-devel] [PATCH v3 4/7] migration: migrate-continue, Dr. David Alan Gilbert (git), 2017/10/18
- [Qemu-devel] [PATCH v3 5/7] migrate: HMP migate_continue, Dr. David Alan Gilbert (git), 2017/10/18
- [Qemu-devel] [PATCH v3 6/7] migration: allow cancel to unpause, Dr. David Alan Gilbert (git), 2017/10/18
- [Qemu-devel] [PATCH v3 7/7] migration: pause-before-switchover for postcopy, Dr. David Alan Gilbert (git), 2017/10/18
- Re: [Qemu-devel] [PATCH v3 7/7] migration: pause-before-switchover for postcopy,
Peter Xu <=
- Re: [Qemu-devel] [PATCH v3 0/7] migration: pause-before-switchover, Peter Xu, 2017/10/19
- Re: [Qemu-devel] [PATCH v3 0/7] migration: pause-before-switchover, Jiri Denemark, 2017/10/19