qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [RFC v2 21/33] migration: new cmd MIG_CMD_POSTCOPY_RESU


From: Peter Xu
Subject: Re: [Qemu-devel] [RFC v2 21/33] migration: new cmd MIG_CMD_POSTCOPY_RESUME
Date: Wed, 27 Sep 2017 18:11:41 +0800
User-agent: Mutt/1.5.24 (2015-08-30)

On Fri, Sep 22, 2017 at 12:08:06PM +0100, Dr. David Alan Gilbert wrote:
> * Peter Xu (address@hidden) wrote:
> > Introducing this new command to be sent when the source VM is ready to
> > resume the paused migration.  What the destination does here is
> > basically release the fault thread to continue service page faults.
> > 
> > Signed-off-by: Peter Xu <address@hidden>
> > ---
> >  migration/savevm.c     | 33 +++++++++++++++++++++++++++++++++
> >  migration/savevm.h     |  1 +
> >  migration/trace-events |  1 +
> >  3 files changed, 35 insertions(+)
> > 
> > diff --git a/migration/savevm.c b/migration/savevm.c
> > index 7f77a31..e914346 100644
> > --- a/migration/savevm.c
> > +++ b/migration/savevm.c
> > @@ -77,6 +77,7 @@ enum qemu_vm_cmd {
> >      MIG_CMD_POSTCOPY_RAM_DISCARD,  /* A list of pages to discard that
> >                                        were previously sent during
> >                                        precopy but are dirty. */
> > +    MIG_CMD_POSTCOPY_RESUME,       /* resume postcopy on dest */
> >      MIG_CMD_PACKAGED,          /* Send a wrapped stream within this stream 
> > */
> >      MIG_CMD_RECV_BITMAP,       /* Request for recved bitmap on dst */
> >      MIG_CMD_MAX
> > @@ -95,6 +96,7 @@ static struct mig_cmd_args {
> >      [MIG_CMD_POSTCOPY_RUN]     = { .len =  0, .name = "POSTCOPY_RUN" },
> >      [MIG_CMD_POSTCOPY_RAM_DISCARD] = {
> >                                     .len = -1, .name = 
> > "POSTCOPY_RAM_DISCARD" },
> > +    [MIG_CMD_POSTCOPY_RESUME]  = { .len =  0, .name = "POSTCOPY_RESUME" },
> >      [MIG_CMD_PACKAGED]         = { .len =  4, .name = "PACKAGED" },
> >      [MIG_CMD_RECV_BITMAP]      = { .len = -1, .name = "RECV_BITMAP" },
> >      [MIG_CMD_MAX]              = { .len = -1, .name = "MAX" },
> > @@ -931,6 +933,12 @@ void qemu_savevm_send_postcopy_run(QEMUFile *f)
> >      qemu_savevm_command_send(f, MIG_CMD_POSTCOPY_RUN, 0, NULL);
> >  }
> >  
> > +void qemu_savevm_send_postcopy_resume(QEMUFile *f)
> > +{
> > +    trace_savevm_send_postcopy_resume();
> > +    qemu_savevm_command_send(f, MIG_CMD_POSTCOPY_RESUME, 0, NULL);
> > +}
> > +
> >  void qemu_savevm_send_recv_bitmap(QEMUFile *f, char *block_name)
> >  {
> >      size_t len;
> > @@ -1682,6 +1690,28 @@ static int 
> > loadvm_postcopy_handle_run(MigrationIncomingState *mis)
> >      return LOADVM_QUIT;
> >  }
> >  
> > +static int loadvm_postcopy_handle_resume(MigrationIncomingState *mis)
> > +{
> > +    if (mis->state != MIGRATION_STATUS_POSTCOPY_RECOVER) {
> > +        error_report("%s: illegal resume received", __func__);
> > +        /* Don't fail the load, only for this. */
> > +        return 0;
> > +    }
> > +
> > +    /*
> > +     * This means source VM is ready to resume the postcopy migration.
> > +     * It's time to switch state and release the fault thread to
> > +     * continue service page faults.
> > +     */
> > +    migrate_set_state(&mis->state, MIGRATION_STATUS_POSTCOPY_RECOVER,
> > +                      MIGRATION_STATUS_POSTCOPY_ACTIVE);
> > +    qemu_sem_post(&mis->postcopy_pause_sem_fault);
> > +
> > +    /* TODO: Tell source that "we are ready" */
> > +
> 
> You might want to add a trace in here; however,

Added.

> 
> 
> Reviewed-by: Dr. David Alan Gilbert <address@hidden>

Thanks!

-- 
Peter Xu



reply via email to

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