From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH v2] xen: arm32: reduce default size of the xenheap Date: Thu, 05 Feb 2015 22:01:28 +0800 Message-ID: <54D377B8.4090800@linaro.org> References: <1423133529-30049-1-git-send-email-ian.campbell@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1423133529-30049-1-git-send-email-ian.campbell@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Ian Campbell , xen-devel@lists.xen.org Cc: tim@xen.org, Jintack Lim , Jan Beulich , stefano.stabellini@eu.citrix.com List-Id: xen-devel@lists.xenproject.org Hi Ian, On 05/02/2015 18:52, Ian Campbell wrote: > ... and make it tunable via the command line. > > 1/8 of RAM is 128M on a 1GB system and 256M on a 2GB system etc, > which is a lot. 1/32 of RAM seems more reasonable. Also drop the > minimum to 32M. > > Leave the maximum at 1GB. > > Signed-off-by: Ian Campbell > Cc: Jintack Lim > Cc: Jan Beulich > --- > v2: > - Use xenheap_megabytes as the option, which is what older x86 Xen > used. > > I'd like to backport at least the command line option to 4.5. Reducing > the default heap size is a bit border line but I'm inclined to take > it. I don't think it will introduce performance regression. So I don't mind if you backport the whole patch. > --- > docs/misc/xen-command-line.markdown | 8 ++++++++ > xen/arch/arm/setup.c | 25 ++++++++++++++++++------- > 2 files changed, 26 insertions(+), 7 deletions(-) > > diff --git a/docs/misc/xen-command-line.markdown b/docs/misc/xen-command-line.markdown > index bc316be..0a99d1a 100644 > --- a/docs/misc/xen-command-line.markdown > +++ b/docs/misc/xen-command-line.markdown > @@ -237,6 +237,14 @@ and not running softirqs. Reduce this if softirqs are not being run frequently > enough. Setting this to a high value may cause boot failure, particularly if > the NMI watchdog is also enabled. > > +### xenheap\_megabytes (arm32) > +> `= ` > + > +> Default: `1/32 RAM` > + > +Amount of RAM to set aside for the Xenheap. By default 1/32 of the RAM > +up to a maximum of 1GB and with a minimum of 32M. > + > ### clocksource > > `= pit | hpet | acpi` > > diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c > index a916ca6..73691c0 100644 > --- a/xen/arch/arm/setup.c > +++ b/xen/arch/arm/setup.c > @@ -50,6 +50,11 @@ struct bootinfo __initdata bootinfo; > > struct cpuinfo_arm __read_mostly boot_cpu_data; > > +#ifdef CONFIG_ARM_32 > +static unsigned long opt_xenheap_megabytes __initdata; > +integer_param("xenheap_megabytes", opt_xenheap_megabytes); > +#endif > + > static __used void init_done(void) > { > free_init_memory(); > @@ -501,16 +506,21 @@ 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 1GB or 1/8 the total RAM in the system if less > - * - must be at least 128M > + * - must be at most 1GB or 1/32 the total RAM in the system if less > + * - must be at least 32M > * > * We try to allocate the largest xenheap possible within these > * constraints. > */ > heap_pages = ram_pages; > - xenheap_pages = (heap_pages/8 + 0x1fffUL) & ~0x1fffUL; > - xenheap_pages = max(xenheap_pages, 128UL<<(20-PAGE_SHIFT)); > - xenheap_pages = min(xenheap_pages, 1UL<<(30-PAGE_SHIFT)); > + if ( opt_xenheap_megabytes ) If the user requests a xenheap of 0MB, we will use the default size, right? It may be worth to explain this case. Also with the algorithm to find a range, the Xen heap may be smaller. I would explain that too. > + xenheap_pages = opt_xenheap_megabytes << (20-PAGE_SHIFT); > + else > + { > + xenheap_pages = (heap_pages/32 + 0x1fffUL) & ~0x1fffUL; > + xenheap_pages = max(xenheap_pages, 32UL<<(20-PAGE_SHIFT)); > + xenheap_pages = min(xenheap_pages, 1UL<<(30-PAGE_SHIFT)); > + } > do > { You seem to have forgotten to update the condition in the do/while: xenheap_pages > 128 << (20 - PAGE_SHIFT); Regards, -- Julien Grall