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

Re: [Xen-devel] [PATCH v3] libxl: Wait for ballooning if free memory is increasing



On Monday, February 02, 2015 02:35:39 PM Ian Campbell wrote:
> On Fri, 2015-01-30 at 14:01 -0700, Mike Latimer wrote:
> > During domain startup, all required memory ballooning must complete
> > within a maximum window of 33 seconds (3 retries, 11 seconds of delay).
> > If not, domain creation is aborted with a 'failed to free memory' error.
> > 
> > In order to accommodate large domains or slower hardware (which require
> > substantially longer to balloon memory) the free memory process should
> > continue retrying if the amount of free memory is increasing on each
> > iteration of the loop.
> 
> Sorry for not spotting this earlier, but to accept a patch into the Xen
> code base we need a Signed-off-by:
> http://wiki.xen.org/wiki/Submitting_Xen_Patches#Signing_off_a_patch
> 
> You can provide one in this thread rather than resending if that is more
> convenient.

Sorry, I should have caught that myself.  If's it's okay to provide it here:

Signed-off-by: Mike Latimer <mlatimer@xxxxxxxx>

> For my part: Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

Thanks,
Mike

> > ---
> > 
> >  tools/libxl/xl_cmdimpl.c | 17 ++++++++++++++---
> >  1 file changed, 14 insertions(+), 3 deletions(-)
> > 
> > diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
> > index 0b02a6c..9ff3c4f 100644
> > --- a/tools/libxl/xl_cmdimpl.c
> > +++ b/tools/libxl/xl_cmdimpl.c
> > @@ -2194,8 +2194,9 @@ static int preserve_domain(uint32_t *r_domid,
> > libxl_event *event,> 
> >  static int freemem(uint32_t domid, libxl_domain_build_info *b_info)
> >  {
> > 
> > -    int rc, retries = 3;
> > -    uint32_t need_memkb, free_memkb;
> > +    int rc, retries;
> > +    const int MAX_RETRIES = 3;
> > +    uint32_t need_memkb, free_memkb, free_memkb_prev = 0;
> > 
> >      if (!autoballoon)
> >      
> >          return 0;
> > 
> > @@ -2204,6 +2205,7 @@ static int freemem(uint32_t domid,
> > libxl_domain_build_info *b_info)> 
> >      if (rc < 0)
> >      
> >          return rc;
> > 
> > +    retries = MAX_RETRIES;
> > 
> >      do {
> >      
> >          rc = libxl_get_free_memory(ctx, &free_memkb);
> >          if (rc < 0)
> > 
> > @@ -2228,7 +2230,16 @@ static int freemem(uint32_t domid,
> > libxl_domain_build_info *b_info)> 
> >          if (rc < 0)
> >          
> >              return rc;
> > 
> > -        retries--;
> > +        /*
> > +         * If the amount of free mem has increased on this iteration
> > (i.e.
> > +         * some progress has been made) then reset the retry counter.
> > +         */
> > +        if (free_memkb > free_memkb_prev) {
> > +            retries = MAX_RETRIES;
> > +            free_memkb_prev = free_memkb;
> > +        } else {
> > +            retries--;
> > +        }
> > 
> >      } while (retries > 0);
> >      
> >      return ERROR_NOMEM;


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.