Ian Campbell
2013-Jul-23 17:12 UTC
[PATCH] xen: arm: reduce the size of the xen heap to max 1/8 RAM size
From: Ian Campbell <ian.campbell@citrix.com> When building a 1GB dom0 on a system with 2GB RAM we are running out of domheap pages, while there are still plenty of xenheap pages spare. I would have sworn that when the domheap was exhausted we would fall back to allocating xenheap pages but this doesn''t appear to be the case. It''s possible that we have setup something incorrectly on ARM but alloc_domheap_pages pretty clearly tries to allocate memory from MEMZONE_XEN+1..zone_hi. Without the fallback from domheap to xenheap taking 1GB of any system with >1GB of RAM for xenheap is excessive so instead set a limit of 1/8 of the total amount of RAM. By way of comparison x86_32 used to have a static 12MB xenheap (which also included .text etc) and in theory supported up to 16GB RAM, by that measure 1/8 is plenty. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Cc: keir@xen.org --- xen/arch/arm/setup.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c index 2f9fdc8..195c28e 100644 --- a/xen/arch/arm/setup.c +++ b/xen/arch/arm/setup.c @@ -316,14 +316,14 @@ static void __init setup_mm(unsigned long dtb_paddr, size_t dtb_size) * * - must be 32 MiB aligned * - must not include Xen itself or the boot modules - * - must be at most 1 GiB + * - must be at most 1/8 the total RAM in the system * - must be at least 128M * * We try to allocate the largest xenheap possible within these * constraints. */ heap_pages = (ram_size >> PAGE_SHIFT); - xenheap_pages = min(1ul << (30 - PAGE_SHIFT), heap_pages); + xenheap_pages = max(heap_pages/8, 128UL<<(20-PAGE_SHIFT)); do { -- 1.8.3.2
Ian Campbell
2013-Jul-23 17:15 UTC
Re: [PATCH] xen: arm: reduce the size of the xen heap to max 1/8 RAM size
Hi Keir, Was I mistaken about the domheap->xenheap fallback or have we cocked something up on ARM? Cheers, Ian. On Tue, 2013-07-23 at 18:12 +0100, Ian Campbell wrote:> From: Ian Campbell <ian.campbell@citrix.com> > > When building a 1GB dom0 on a system with 2GB RAM we are running out of domheap > pages, while there are still plenty of xenheap pages spare. > > I would have sworn that when the domheap was exhausted we would fall back to > allocating xenheap pages but this doesn''t appear to be the case. It''s possible > that we have setup something incorrectly on ARM but alloc_domheap_pages pretty > clearly tries to allocate memory from MEMZONE_XEN+1..zone_hi. > > Without the fallback from domheap to xenheap taking 1GB of any system with >1GB > of RAM for xenheap is excessive so instead set a limit of 1/8 of the total > amount of RAM. By way of comparison x86_32 used to have a static 12MB xenheap > (which also included .text etc) and in theory supported up to 16GB RAM, by that > measure 1/8 is plenty. > > Signed-off-by: Ian Campbell <ian.campbell@citrix.com> > Cc: keir@xen.org > --- > xen/arch/arm/setup.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c > index 2f9fdc8..195c28e 100644 > --- a/xen/arch/arm/setup.c > +++ b/xen/arch/arm/setup.c > @@ -316,14 +316,14 @@ static void __init setup_mm(unsigned long dtb_paddr, size_t dtb_size) > * > * - must be 32 MiB aligned > * - must not include Xen itself or the boot modules > - * - must be at most 1 GiB > + * - must be at most 1/8 the total RAM in the system > * - must be at least 128M > * > * We try to allocate the largest xenheap possible within these > * constraints. > */ > heap_pages = (ram_size >> PAGE_SHIFT); > - xenheap_pages = min(1ul << (30 - PAGE_SHIFT), heap_pages); > + xenheap_pages = max(heap_pages/8, 128UL<<(20-PAGE_SHIFT)); > > do > {
Ian Campbell
2013-Aug-08 11:01 UTC
Re: [PATCH] xen: arm: reduce the size of the xen heap to max 1/8 RAM size
On Tue, 2013-07-23 at 18:15 +0100, Ian Campbell wrote:> Hi Keir, > > Was I mistaken about the domheap->xenheap fallback or have we cocked > something up on ARM?Tim told me IRL that the fallback is deliberately not there. So I think this patch is correct. @arm folks: ping ;-)> > Cheers, > Ian. > > On Tue, 2013-07-23 at 18:12 +0100, Ian Campbell wrote: > > From: Ian Campbell <ian.campbell@citrix.com> > > > > When building a 1GB dom0 on a system with 2GB RAM we are running out of domheap > > pages, while there are still plenty of xenheap pages spare. > > > > I would have sworn that when the domheap was exhausted we would fall back to > > allocating xenheap pages but this doesn''t appear to be the case. It''s possible > > that we have setup something incorrectly on ARM but alloc_domheap_pages pretty > > clearly tries to allocate memory from MEMZONE_XEN+1..zone_hi. > > > > Without the fallback from domheap to xenheap taking 1GB of any system with >1GB > > of RAM for xenheap is excessive so instead set a limit of 1/8 of the total > > amount of RAM. By way of comparison x86_32 used to have a static 12MB xenheap > > (which also included .text etc) and in theory supported up to 16GB RAM, by that > > measure 1/8 is plenty. > > > > Signed-off-by: Ian Campbell <ian.campbell@citrix.com> > > Cc: keir@xen.org > > --- > > xen/arch/arm/setup.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c > > index 2f9fdc8..195c28e 100644 > > --- a/xen/arch/arm/setup.c > > +++ b/xen/arch/arm/setup.c > > @@ -316,14 +316,14 @@ static void __init setup_mm(unsigned long dtb_paddr, size_t dtb_size) > > * > > * - must be 32 MiB aligned > > * - must not include Xen itself or the boot modules > > - * - must be at most 1 GiB > > + * - must be at most 1/8 the total RAM in the system > > * - must be at least 128M > > * > > * We try to allocate the largest xenheap possible within these > > * constraints. > > */ > > heap_pages = (ram_size >> PAGE_SHIFT); > > - xenheap_pages = min(1ul << (30 - PAGE_SHIFT), heap_pages); > > + xenheap_pages = max(heap_pages/8, 128UL<<(20-PAGE_SHIFT)); > > > > do > > { > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel
Tim Deegan
2013-Aug-08 14:03 UTC
Re: [PATCH] xen: arm: reduce the size of the xen heap to max 1/8 RAM size
At 12:01 +0100 on 08 Aug (1375963297), Ian Campbell wrote:> On Tue, 2013-07-23 at 18:15 +0100, Ian Campbell wrote: > > Hi Keir, > > > > Was I mistaken about the domheap->xenheap fallback or have we cocked > > something up on ARM? > > Tim told me IRL that the fallback is deliberately not there. So I think > this patch is correct. > > @arm folks: ping ;-)Acked-by: Tim Deegan <tim@xen.org>> > > > > Cheers, > > Ian. > > > > On Tue, 2013-07-23 at 18:12 +0100, Ian Campbell wrote: > > > From: Ian Campbell <ian.campbell@citrix.com> > > > > > > When building a 1GB dom0 on a system with 2GB RAM we are running out of domheap > > > pages, while there are still plenty of xenheap pages spare. > > > > > > I would have sworn that when the domheap was exhausted we would fall back to > > > allocating xenheap pages but this doesn''t appear to be the case. It''s possible > > > that we have setup something incorrectly on ARM but alloc_domheap_pages pretty > > > clearly tries to allocate memory from MEMZONE_XEN+1..zone_hi. > > > > > > Without the fallback from domheap to xenheap taking 1GB of any system with >1GB > > > of RAM for xenheap is excessive so instead set a limit of 1/8 of the total > > > amount of RAM. By way of comparison x86_32 used to have a static 12MB xenheap > > > (which also included .text etc) and in theory supported up to 16GB RAM, by that > > > measure 1/8 is plenty. > > > > > > Signed-off-by: Ian Campbell <ian.campbell@citrix.com> > > > Cc: keir@xen.org > > > --- > > > xen/arch/arm/setup.c | 4 ++-- > > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > > > diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c > > > index 2f9fdc8..195c28e 100644 > > > --- a/xen/arch/arm/setup.c > > > +++ b/xen/arch/arm/setup.c > > > @@ -316,14 +316,14 @@ static void __init setup_mm(unsigned long dtb_paddr, size_t dtb_size) > > > * > > > * - must be 32 MiB aligned > > > * - must not include Xen itself or the boot modules > > > - * - must be at most 1 GiB > > > + * - must be at most 1/8 the total RAM in the system > > > * - must be at least 128M > > > * > > > * We try to allocate the largest xenheap possible within these > > > * constraints. > > > */ > > > heap_pages = (ram_size >> PAGE_SHIFT); > > > - xenheap_pages = min(1ul << (30 - PAGE_SHIFT), heap_pages); > > > + xenheap_pages = max(heap_pages/8, 128UL<<(20-PAGE_SHIFT)); > > > > > > do > > > { > > > > > > > > _______________________________________________ > > Xen-devel mailing list > > Xen-devel@lists.xen.org > > http://lists.xen.org/xen-devel > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel
Ian Campbell
2013-Aug-20 15:01 UTC
Re: [PATCH] xen: arm: reduce the size of the xen heap to max 1/8 RAM size
On Thu, 2013-08-08 at 15:03 +0100, Tim Deegan wrote:> At 12:01 +0100 on 08 Aug (1375963297), Ian Campbell wrote: > > On Tue, 2013-07-23 at 18:15 +0100, Ian Campbell wrote: > > > Hi Keir, > > > > > > Was I mistaken about the domheap->xenheap fallback or have we cocked > > > something up on ARM? > > > > Tim told me IRL that the fallback is deliberately not there. So I think > > this patch is correct. > > > > @arm folks: ping ;-) > > Acked-by: Tim Deegan <tim@xen.org>thanks, applied.