qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v7 22/42] migrate_start_postcopy: Command to tri


From: Juan Quintela
Subject: Re: [Qemu-devel] [PATCH v7 22/42] migrate_start_postcopy: Command to trigger transition to postcopy
Date: Mon, 13 Jul 2015 20:07:52 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux)

"Dr. David Alan Gilbert" <address@hidden> wrote:
> * Juan Quintela (address@hidden) wrote:
>> "Dr. David Alan Gilbert (git)" <address@hidden> wrote:
>> > From: "Dr. David Alan Gilbert" <address@hidden>
>> >
>> > Once postcopy is enabled (with migrate_set_capability), the migration
>> > will still start on precopy mode.  To cause a transition into postcopy
>> > the:
>> >
>> >   migrate_start_postcopy
>> >
>> > command must be issued.  Postcopy will start sometime after this
>> > (when it's next checked in the migration loop).
>> >
>> > Issuing the command before migration has started will error,
>> > and issuing after it has finished is ignored.
>> >
>> > Signed-off-by: Dr. David Alan Gilbert <address@hidden>
>> > Reviewed-by: Eric Blake <address@hidden>
>> 
>> > diff --git a/include/migration/migration.h b/include/migration/migration.h
>> > index a5951ac..e973490 100644
>> > --- a/include/migration/migration.h
>> > +++ b/include/migration/migration.h
>> > @@ -111,6 +111,9 @@ struct MigrationState
>> >      int64_t xbzrle_cache_size;
>> >      int64_t setup_time;
>> >      int64_t dirty_sync_count;
>> > +
>> > +    /* Flag set once the migration has been asked to enter postcopy */
>> > +    bool start_postcopy;
>> >  };
>> >  
>> >  void process_incoming_migration(QEMUFile *f);
>> > diff --git a/migration/migration.c b/migration/migration.c
>> > index e77b8b4..6fc47f9 100644
>> > --- a/migration/migration.c
>> > +++ b/migration/migration.c
>> > @@ -465,6 +465,28 @@ void qmp_migrate_set_parameters(bool 
>> > has_compress_level,
>> >      }
>> >  }
>> >  
>> > +void qmp_migrate_start_postcopy(Error **errp)
>> > +{
>> > +    MigrationState *s = migrate_get_current();
>> > +
>> > +    if (!migrate_postcopy_ram()) {
>> > +        error_setg(errp, "Enable postcopy with migration_set_capability 
>> > before"
>> > +                         " the start of migration");
>> > +        return;
>> > +    }
>> > +
>> > +    if (s->state == MIGRATION_STATUS_NONE) {
>> 
>> I would claim that this check should be:
>> 
>>     if (s->state != MIGRATION_STATUS_ACTIVE) {
>> ??
>> 
>> FAILED, COMPLETED, CANCELL* don't make sense, right?
>
> What I'm trying to catch here is people doing:
>      migrate_start_postcopy
>      migrate tcp:pppp:whereever
>
>   which wont work, because migrate_init reinitialises
> the flag that start previously set.
>
> However, I also don't want to create a race, since what you do is
> typically:
>      migrate  tcp:pppp:whereever
>    <wait some time, get bored>
>      migrate_start_postcopy
>
> if you're unlucky, and the migration finishes just
> at the same time you do the migrate_start_postcopy, do you
> want migrate_start_postcopy to fail?  My guess was it
> was best for it not to fail, in this case.

Change the order, if it is ACTIVE: do the postcopy thing, otherwise, do
the clause that is protected now?  Moving to postcopy only make sense if
we are in active.

Later, Juan.


>
> Dave
>
>> 
>> Thanks, Juan.
> --
> Dr. David Alan Gilbert / address@hidden / Manchester, UK



reply via email to

[Prev in Thread] Current Thread [Next in Thread]