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

[Xen-devel] Re: [PATCH 2/5] xen/balloon: account for pages released during memory setup



On Fri, Aug 19, 2011 at 03:57:17PM +0100, David Vrabel wrote:
> In xen_memory_setup() pages that occur in gaps in the memory map are
> released back to Xen.  This reduces the domain's current page count.

You might want to add: "in the hypervisor."

> The Xen balloon driver does not correctly decrease its initial
> current_pages count to reflect this.  If 'delta' pages are released
> and the target is adjusted the resulting reservation is always 'delta'
> less than the requested target.

Might want to add:

Wherein delta is reported as (for example):
[    0.000000] released 261886 pages of unused memory

> 
> This affects dom0 if the initial allocation of pages overlaps the PCI
> memory region but won't affect most domU guests that have been setup
> with pseudo-physical memory maps that don't have gaps.
> 
> Fix this by asking the hypervisor what the current reservation is when
> starting the balloon driver.
> 
> If the domain's targets are managed by xapi, the domain may eventually
> run out of memory and die because xapi currently gets its target
> calculations wrong and whenever it is restarted it always reduces the
> target by 'delta'.
> 
> Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx>
> ---
>  drivers/xen/balloon.c |    7 ++++++-
>  1 files changed, 6 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
> index 5dfd8f8..5814022 100644
> --- a/drivers/xen/balloon.c
> +++ b/drivers/xen/balloon.c
> @@ -557,15 +557,20 @@ EXPORT_SYMBOL(free_xenballooned_pages);
>  
>  static int __init balloon_init(void)
>  {
> +     domid_t domid = DOMID_SELF;
>       unsigned long pfn, extra_pfn_end;
>       struct page *page;
> +     int ret;

long int?
>  
>       if (!xen_domain())
>               return -ENODEV;
>  
>       pr_info("xen/balloon: Initialising balloon driver.\n");
>  
> -     balloon_stats.current_pages = xen_pv_domain() ? 
> min(xen_start_info->nr_pages, max_pfn) : max_pfn;
> +     ret = HYPERVISOR_memory_op(XENMEM_current_reservation, &domid);
> +     if (ret < 0)
> +             return ret;
> +     balloon_stats.current_pages = ret;
>       balloon_stats.target_pages  = balloon_stats.current_pages;
>       balloon_stats.balloon_low   = 0;
>       balloon_stats.balloon_high  = 0;
> -- 
> 1.7.2.5

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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