qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v4 24/47] Allow savevm handlers to state whether


From: Dr. David Alan Gilbert
Subject: Re: [Qemu-devel] [PATCH v4 24/47] Allow savevm handlers to state whether they could go into postcopy
Date: Tue, 25 Nov 2014 19:58:13 +0000
User-agent: Mutt/1.5.23 (2014-03-12)

* David Gibson (address@hidden) wrote:
> On Wed, Nov 19, 2014 at 05:53:54PM +0000, Dr. David Alan Gilbert wrote:
> > * David Gibson (address@hidden) wrote:
> > > On Fri, Oct 03, 2014 at 06:47:30PM +0100, Dr. David Alan Gilbert (git) 
> > > wrote:
> > > > From: "Dr. David Alan Gilbert" <address@hidden>
> > > > 
> > > > Use that to split the qemu_savevm_state_pending counts into postcopiable
> > > > and non-postcopiable amounts
> > > > 
> > > > Signed-off-by: Dr. David Alan Gilbert <address@hidden>
> > > > ---
> > > >  arch_init.c                 |  7 +++++++
> > > >  include/migration/vmstate.h |  2 +-
> > > >  include/sysemu/sysemu.h     |  4 +++-
> > > >  migration.c                 |  9 ++++++++-
> > > >  savevm.c                    | 23 +++++++++++++++++++----
> > > >  5 files changed, 38 insertions(+), 7 deletions(-)
> > > > 
> > > > diff --git a/arch_init.c b/arch_init.c
> > > > index 6970733..44072d8 100644
> > > > --- a/arch_init.c
> > > > +++ b/arch_init.c
> > > > @@ -1192,6 +1192,12 @@ static int ram_load(QEMUFile *f, void *opaque, 
> > > > int version_id)
> > > >      return ret;
> > > >  }
> > > >  
> > > > +/* RAM's always up for postcopying */
> > > > +static bool ram_can_postcopy(void *opaque)
> > > > +{
> > > > +    return true;
> > > > +}
> > > > +
> > > >  static SaveVMHandlers savevm_ram_handlers = {
> > > >      .save_live_setup = ram_save_setup,
> > > >      .save_live_iterate = ram_save_iterate,
> > > > @@ -1199,6 +1205,7 @@ static SaveVMHandlers savevm_ram_handlers = {
> > > >      .save_live_pending = ram_save_pending,
> > > >      .load_state = ram_load,
> > > >      .cancel = ram_migration_cancel,
> > > > +    .can_postcopy = ram_can_postcopy,
> > > 
> > > Is there actually any plausible device for which you'd need a callback
> > > here, rather than just having a static bool?
> > > 
> > > On the other hand, it does seem kind of plausible that there might be
> > > situations in which some data from a device must be pre-copied, but
> > > more can be post-copied, which would necessitate extending the
> > > per-handler callback to return quantities for both.
> > 
> > It's cheap enough and I couldn't make a strong argument about
> > any possible device, so I just used the function.
> 
> Ok.  I still wonder if it might be better to instead extend
> the save_live_pending callback in order to return both
> non-postcopyable and postcopyable quantites.  It allows for the case
> of a postcopyable device which has some non-postcopyable data - and
> with any postcopyable device other than RAM, it seems likely that
> there will need to be some precopied metadata at least.  Plus it
> avoids adding another callback.

There are two separate suggestions there - which I'll address in opposite order:
  1) Extending save_live_pending callback to avoid a new callback
    can_postcopy is used for a few diferent decisions; not just where
    to add the pending value to; so I don't think extending s_l_p saves
    the need for the other callback

  2) Allowing a device to do both pre and postcopy
    Yeh I can see you could theoretically have a device where that would be
    useful; but for reasonably small chunks of metadata it already gets
    the chance to send those during the _begin call.  I'll make the change
    to save_live_pending's parameters to let this work.

Dave

> 
> -- 
> David Gibson                  | I'll have my music baroque, and my code
> david AT gibson.dropbear.id.au        | minimalist, thank you.  NOT _the_ 
> _other_
>                               | _way_ _around_!
> http://www.ozlabs.org/~dgibson


--
Dr. David Alan Gilbert / address@hidden / Manchester, UK



reply via email to

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