* [PATCH v3] xen: arm32: reduce default size of the xenheap
@ 2015-02-19 17:39 Ian Campbell
2015-02-19 18:57 ` Julien Grall
0 siblings, 1 reply; 3+ messages in thread
From: Ian Campbell @ 2015-02-19 17:39 UTC (permalink / raw)
To: xen-devel
Cc: Ian Campbell, stefano.stabellini, julien.grall, tim, Jan Beulich,
Jintack Lim
... 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@citrix.com>
Cc: Jintack Lim <jintack@cs.columbia.edu>
Cc: Jan Beulich <JBeulich@suse.com>
---
v3:
- Clarify doc and comments
- Enforce new minimum of 32M, not old 128M
- Only allocate exact amount if user gives a value, rather than
searching for the next smallest power of two we can find.
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.
---
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);
--
1.7.10.4
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v3] xen: arm32: reduce default size of the xenheap
2015-02-19 17:39 [PATCH v3] xen: arm32: reduce default size of the xenheap Ian Campbell
@ 2015-02-19 18:57 ` Julien Grall
2015-02-25 14:35 ` Ian Campbell
0 siblings, 1 reply; 3+ messages in thread
From: Julien Grall @ 2015-02-19 18:57 UTC (permalink / raw)
To: Ian Campbell, xen-devel; +Cc: tim, Jintack Lim, Jan Beulich, stefano.stabellini
Hi Ian,
On 19/02/15 17:39, 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 <ian.campbell@citrix.com>
Reviewed-by: Julien Grall <julien.grall@linaro.org>
> Cc: Jintack Lim <jintack@cs.columbia.edu>
> Cc: Jan Beulich <JBeulich@suse.com>
> ---
> v3:
> - Clarify doc and comments
> - Enforce new minimum of 32M, not old 128M
> - Only allocate exact amount if user gives a value, rather than
> searching for the next smallest power of two we can find.
> 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'm fine with the backport.
Regards,
--
Julien Grall
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v3] xen: arm32: reduce default size of the xenheap
2015-02-19 18:57 ` Julien Grall
@ 2015-02-25 14:35 ` Ian Campbell
0 siblings, 0 replies; 3+ messages in thread
From: Ian Campbell @ 2015-02-25 14:35 UTC (permalink / raw)
To: Julien Grall; +Cc: stefano.stabellini, tim, Jintack Lim, Jan Beulich, xen-devel
On Thu, 2015-02-19 at 18:57 +0000, Julien Grall wrote:
> Hi Ian,
>
> On 19/02/15 17:39, 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 <ian.campbell@citrix.com>
>
> Reviewed-by: Julien Grall <julien.grall@linaro.org>
Applied and noted for backporting.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2015-02-25 14:35 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-19 17:39 [PATCH v3] xen: arm32: reduce default size of the xenheap Ian Campbell
2015-02-19 18:57 ` Julien Grall
2015-02-25 14:35 ` Ian Campbell
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.