[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] xen: arm32: reduce default size of the xenheap
commit 67c7e46c7c78b36a3541c48bdb3b4739b932a426 Author: Ian Campbell <ian.campbell@xxxxxxxxxx> AuthorDate: Thu Feb 19 17:39:54 2015 +0000 Commit: Ian Campbell <ian.campbell@xxxxxxxxxx> CommitDate: Wed Feb 25 13:42:11 2015 +0000 xen: arm32: reduce default size of the xenheap ... 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 <ian.campbell@xxxxxxxxxx> Reviewed-by: Julien Grall <julien.grall@xxxxxxxxxx> Cc: Jintack Lim <jintack@xxxxxxxxxxxxxxx> Cc: Jan Beulich <JBeulich@xxxxxxxx> --- docs/misc/xen-command-line.markdown | 11 +++++++++++ xen/arch/arm/setup.c | 30 +++++++++++++++++++++--------- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/docs/misc/xen-command-line.markdown b/docs/misc/xen-command-line.markdown index bc316be..9b458e1 100644 --- a/docs/misc/xen-command-line.markdown +++ b/docs/misc/xen-command-line.markdown @@ -237,6 +237,17 @@ 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) +> `= <size>` + +> Default: `0` (1/32 of RAM) + +Amount of RAM to set aside for the Xenheap. + +By default will use 1/32 of the RAM up to a maximum of 1GB and with a +minimum of 32M, subject to a suitably aligned and sized contiguous +region of memory being available. + ### clocksource > `= pit | hpet | acpi` diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c index a916ca6..9a1c285 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(); @@ -497,20 +502,26 @@ static void __init setup_mm(unsigned long dtb_paddr, size_t dtb_size) total_pages = ram_pages = ram_size >> PAGE_SHIFT; /* - * Locate the xenheap using these constraints: + * If the user has not requested otherwise via the command line + * then locate the xenheap using these constraints: * * - 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 ) + 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 { @@ -521,15 +532,16 @@ static void __init setup_mm(unsigned long dtb_paddr, size_t dtb_size) break; xenheap_pages >>= 1; - } while ( xenheap_pages > 128<<(20-PAGE_SHIFT) ); + } while ( !opt_xenheap_megabytes && xenheap_pages > 32<<(20-PAGE_SHIFT) ); if ( ! e ) panic("Not not enough space for xenheap"); domheap_pages = heap_pages - xenheap_pages; - printk("Xen heap: %"PRIpaddr"-%"PRIpaddr" (%lu pages)\n", - e - (pfn_to_paddr(xenheap_pages)), e, xenheap_pages); + printk("Xen heap: %"PRIpaddr"-%"PRIpaddr" (%lu pages%s)\n", + e - (pfn_to_paddr(xenheap_pages)), e, xenheap_pages, + opt_xenheap_megabytes ? ", from command-line" : ""); printk("Dom heap: %lu pages\n", domheap_pages); setup_xenheap_mappings((e >> PAGE_SHIFT) - xenheap_pages, xenheap_pages); -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |