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

[Xen-devel] [PATCH 3/5] [POST-4.0]: HVM NUMA guest: add config file option for specifying guest nodes



This patch add a "guestnodes=" config file option to allow to explicitly specify the number of nodes for the guest. A value of "0" disables the SRAT generation and should by all means mimic the current behaviour. I am not sure whether I got this right, as the config option passing seems a bit "obscure" to me. For the future it would be nice to allow more values here (like "automatic" to let Xen decide how many nodes the guest should have).

Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx>

--
Andre Przywara
AMD-Operating System Research Center (OSRC), Dresden, Germany
Tel: +49 351 488-3567-12
----to satisfy European Law for business letters:
Advanced Micro Devices GmbH
Karl-Hammerschmidt-Str. 34, 85609 Dornach b. Muenchen
Geschaeftsfuehrer: Andrew Bowd; Thomas M. McCoy; Giuliano Meroni
Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen
Registergericht Muenchen, HRB Nr. 43632
commit 50abdfdafbd3e8eca2bc40e5f44d51419e4444a6
Author: Andre Przywara <andre.przywara@xxxxxxx>
Date:   Mon Feb 1 13:27:47 2010 +0100

    add config file options for number of nodes and mem per node

diff --git a/tools/python/xen/xend/XendConfig.py 
b/tools/python/xen/xend/XendConfig.py
index 216665a..eb17968 100644
--- a/tools/python/xen/xend/XendConfig.py
+++ b/tools/python/xen/xend/XendConfig.py
@@ -174,6 +174,7 @@ XENAPI_PLATFORM_CFG_TYPES = {
     'xauthority': str,
     'pci': str,
     'vhpt': int,
+    'guestnodes': int,
     'guest_os_type': str,
     'hap': int,
     'xen_extended_power_mgmt': int,
@@ -670,7 +671,10 @@ class XendConfig(dict):
             cfg["memory"] = int(sxp.child_value(sxp_cfg, "memory"))
         if sxp.child_value(sxp_cfg, "maxmem") != None:
             cfg["maxmem"] = int(sxp.child_value(sxp_cfg, "maxmem"))
-            
+
+        if sxp.child_value(sxp_cfg, "guestnodes") != None:
+            cfg["guestnodes"] = int(sxp.child_value(sxp_cfg, "guestnodes"))
+
         # Convert scheduling parameters to vcpus_params
         if 'vcpus_params' not in cfg:
             cfg['vcpus_params'] = {}
diff --git a/tools/python/xen/xend/image.py b/tools/python/xen/xend/image.py
index f06d6e2..4185f43 100644
--- a/tools/python/xen/xend/image.py
+++ b/tools/python/xen/xend/image.py
@@ -144,6 +144,8 @@ class ImageHandler:
         if 'cpuid_check' in vmConfig:
             self.cpuid_check = vmConfig['cpuid_check']
 
+        self.guestnodes = int(vmConfig['platform'].get('guestnodes',0))
+
     def cleanupTmpImages(self):
         if self.use_tmp_kernel:
             self.unlink(self.kernel)
@@ -953,6 +955,7 @@ class HVMImageHandler(ImageHandler):
         log.debug("vcpu_avail     = %li", self.vm.getVCpuAvail())
         log.debug("acpi           = %d", self.acpi)
         log.debug("apic           = %d", self.apic)
+        log.debug("nodes          = %d", self.guestnodes)
 
         rc = xc.hvm_build(domid          = self.vm.getDomid(),
                           image          = self.loader,
@@ -962,7 +965,7 @@ class HVMImageHandler(ImageHandler):
                           vcpu_avail     = self.vm.getVCpuAvail(),
                           acpi           = self.acpi,
                           apic           = self.apic,
-                          nodes          = 0)
+                          nodes          = self.guestnodes)
         rc['notes'] = { 'SUSPEND_CANCEL': 1 }
 
         rc['store_mfn'] = xc.hvm_get_param(self.vm.getDomid(),
diff --git a/tools/python/xen/xm/create.py b/tools/python/xen/xm/create.py
index 73a6121..b58af7f 100644
--- a/tools/python/xen/xm/create.py
+++ b/tools/python/xen/xm/create.py
@@ -676,6 +676,10 @@ gopts.var('superpages', val='0|1',
            fn=set_int, default=0,
            use="Create domain with superpages")
 
+gopts.var('guestnodes', val="GUESTNODES",
+          fn=set_int, default=0,
+          use="""Number of NUMA nodes to appear in the guest.""")
+
 def err(msg):
     """Print an error to stderr and exit.
     """
@@ -1079,7 +1083,7 @@ def configure_hvm(config_image, vals):
              'vcpus', 'vnc', 'vncconsole', 'vncdisplay', 'vnclisten',
              'vncunused', 'viridian', 'vpt_align',
              'xauthority', 'xen_extended_power_mgmt', 'xen_platform_pci',
-             'memory_sharing' ]
+             'memory_sharing', 'guestnodes' ]
 
     for a in args:
         if a in vals.__dict__ and vals.__dict__[a] is not None:
diff --git a/tools/python/xen/xm/xenapi_create.py 
b/tools/python/xen/xm/xenapi_create.py
index 4c0177b..bb593ec 100644
--- a/tools/python/xen/xm/xenapi_create.py
+++ b/tools/python/xen/xm/xenapi_create.py
@@ -1110,7 +1110,8 @@ class sxp2xml:
             'xen_platform_pci',
             'tsc_mode'
             'description',
-            'nomigrate'
+            'nomigrate',
+            'guestnodes'
         ]
 
         platform_configs = []
_______________________________________________
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®.