Add HPA NUMA capabilities for TC 05/38405/1
authorYun Huang <yun.huang@windriver.com>
Mon, 26 Mar 2018 06:49:55 +0000 (14:49 +0800)
committerYun Huang <yun.huang@windriver.com>
Mon, 26 Mar 2018 06:49:55 +0000 (14:49 +0800)
Change-Id: I9f8a3eecde4887e9cf2a63d3370cd1b8d4bfd3d1
Issue-ID: MULTICLOUD-200
Signed-off-by: Yun Huang <yun.huang@windriver.com>
windriver/titanium_cloud/registration/tests/test_registration.py
windriver/titanium_cloud/registration/views/registration.py

index 231a435..bf19244 100644 (file)
@@ -54,7 +54,13 @@ MOCK_GET_FLAVOR_EXTRA_SPECS_RESPONSE = {
       "hw:cpu_sockets" : "2",
       "hw:cpu_cores" : "4",
       "hw:cpu_threads" : "16",
-      "hw:mem_page_size" : "large"
+      "hw:mem_page_size" : "large",
+      "hw:numa_nodes" : "2",
+      "hw:numa_cpus.0" : "0,1",
+      "hw:numa_cpus.1" : "2,3,4,5",
+      "hw:numa_mem.0" : "2048",
+      "hw:numa_mem.1" : "2048"
+      
    }
 }
 
index 7fce48a..59245c9 100644 (file)
@@ -106,6 +106,12 @@ class Registry(newton_registration.Registry):
             self._logger.debug("hugepages_capabilities_info: %s" % caps_dict)
             hpa_caps.append(caps_dict)
 
+        # numa capabilities
+        caps_dict = self._get_numa_capabilities(extra_specs)
+        if len(caps_dict) > 0:
+            self._logger.debug("numa_capabilities_info: %s" % caps_dict)
+            hpa_caps.append(caps_dict)
+
         return hpa_caps
 
     def _get_hpa_basic_capabilities(self, flavor):
@@ -182,3 +188,32 @@ class Registry(newton_registration.Registry):
             hugepages_capability['attributes'].append({'hpa-attribute-key': 'memoryPageSize',
                                                        'hpa-attribute-value':{'value': str(extra_specs['hw:mem_page_size'])}})
         return hugepages_capability
+
+    def _get_numa_capabilities(self, extra_specs):
+        numa_capability = {}
+        feature_uuid = uuid.uuid4()
+
+        if extra_specs.has_key('hw:numa_nodes'):
+            numa_capability['hpaCapabilityID'] = str(feature_uuid)
+            numa_capability['hpaFeature'] = 'numa'
+            numa_capability['hardwareArchitecture'] = 'generic'
+            numa_capability['version'] = 'v1'
+
+            numa_capability['attributes'] = []
+            numa_capability['attributes'].append({'hpa-attribute-key': 'numaNodes',
+                                                  'hpa-attribute-value':{'value': str(extra_specs['hw:numa_nodes'])}})
+
+            for num in range(0, int(extra_specs['hw:numa_nodes'])):
+                numa_cpu_node = "hw:numa_cpus.%s" % num
+                numa_mem_node = "hw:numa_mem.%s" % num
+                numacpu_key = "numaCpu-%s" % num
+                numamem_key = "numaMem-%s" % num
+
+                if extra_specs.has_key(numa_cpu_node) and extra_specs.has_key(numa_mem_node):
+                    numa_capability['attributes'].append({'hpa-attribute-key': numacpu_key,
+                                                          'hpa-attribute-value':{'value': str(extra_specs[numa_cpu_node])}})
+                    numa_capability['attributes'].append({'hpa-attribute-key': numamem_key,
+                                                          'hpa-attribute-value':{'value': str(extra_specs[numa_mem_node]),'unit':'MB'}})
+
+        return numa_capability
+