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

[Xen-devel] [PATCH] add dom0_max_mem hypervisor boot option



If you want to set dom0 to a specific memory size on a specific
machine, you can use the hypervisor boot option, dom0_mem.  However,
when working with a number of nodes, you may simply want to cap
dom0 memory usage without regard to the specific amount of memory
on each node. FOr this case, you cannot use dom0_mem, as the node
must have that much memory or more.  For this case, the boot option
dom0_max_mem was added.  If dom0_mem is unspecified (to preserve
current behavior), it will act as a ceiling/cap on the amount of
memory available to construct dom0.  Nodes with less memory will
continue to use all of their memory; nodes with more will apply
only the specified portion to dom0. Many words - simple idea.

Simple example: dom0 on all nodes should be 2GB or less, use the
option dom0_max_mem=2G


Signed-off-by: Ben Thomas (ben@xxxxxxxxxxxxxxx)

--
------------------------------------------------------------------------
Ben Thomas                                         Virtual Iron Software
bthomas@xxxxxxxxxxxxxxx                            Tower 1, Floor 2
978-849-1214                                       900 Chelmsford Street
                                                   Lowell, MA 01851
# If you want to set dom0 to a specific memory size on a specific machine,
# you use dom0_mem.  However, if you simply want to cap dom0 memory usage
# across a number of machine, regardless of size, you can't use dom0_mem.
# Add the hypervisor argument dom0_max_mem to allow this type of operation.
# dom0 memory will be capped. It might be less, but never more.
#
# Simple example: all dom0 on all nodes should be 2GB or less, use the
# option dom0_max_mem=2GB.
#
# Signed-off-by: Ben Thomas (ben@xxxxxxxxxxxxxxx)

Index: xen-unstable.hg/xen/arch/x86/domain_build.c
===================================================================
--- xen-unstable.hg.orig/xen/arch/x86/domain_build.c    2006-10-30 
11:13:48.000000000 -0500
+++ xen-unstable.hg/xen/arch/x86/domain_build.c 2006-10-30 11:15:26.000000000 
-0500
@@ -58,6 +58,32 @@
 }
 custom_param("dom0_mem", parse_dom0_mem);
 
+static long dom0_max_nrpages;
+
+/*
+ * dom0_max_mem:
+ *  This parameter is used to specify a maximum size for dom0.
+ *  If there is less memory, that's ok.  If there's more, it's
+ *  capped at this limit.
+ *
+ * Note that this is only valid if dom0_mem is 0 (unspecified)
+ */
+
+static void parse_dom0_max_mem(char *s)
+{
+    unsigned long long bytes;
+    char *t = s;
+    if ( *s == '-' )
+    {
+        printk("dom0_max_mem must be >= 0\n");
+        return;
+    }
+
+    bytes = parse_size_and_unit(t);
+    dom0_max_nrpages = bytes >> PAGE_SHIFT;
+}
+custom_param("dom0_max_mem", parse_dom0_max_mem);
+
 static unsigned int opt_dom0_max_vcpus;
 integer_param("dom0_max_vcpus", opt_dom0_max_vcpus);
 
@@ -209,6 +235,7 @@
     unsigned long alloc_spfn;
     unsigned long alloc_epfn;
     unsigned long count;
+    long dom0_res_pages;
     struct page_info *page = NULL;
     start_info_t *si;
     struct vcpu *v = d->vcpu[0];
@@ -277,8 +304,14 @@
     if ( dom0_nrpages == 0 )
     {
         dom0_nrpages = avail_domheap_pages() + initial_images_nrpages();
-        dom0_nrpages = min(dom0_nrpages / 16, 128L << (20 - PAGE_SHIFT));
-        dom0_nrpages = -dom0_nrpages;
+        dom0_res_pages = min(dom0_nrpages / 16, 128L << (20 - PAGE_SHIFT));
+        dom0_nrpages -= dom0_res_pages;
+       if ( (dom0_max_nrpages > 0) && (dom0_nrpages > dom0_max_nrpages) )
+       {
+            printk("Limiting dom0 pages from %lu to %lu\n",
+                   dom0_nrpages, dom0_max_nrpages);
+           dom0_nrpages = dom0_max_nrpages;
+       }
     }
 
     /* Negative memory specification means "all memory - specified amount". */
_______________________________________________
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®.