[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 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. For my part: Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> > > --- > 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |