]> xenbits.xensource.com Git - libvirt.git/commitdiff
cpu_conf: Allow specification of 'units' for @memory on numa nodes.
authorPrerna Saxena <prerna@linux.vnet.ibm.com>
Mon, 10 Nov 2014 11:52:58 +0000 (17:22 +0530)
committerMichal Privoznik <mprivozn@redhat.com>
Mon, 10 Nov 2014 13:55:45 +0000 (14:55 +0100)
CPU numa topology implicitly allows memory specification in 'KiB'.

Enabling this to accept the 'unit' in which memory needs to be specified.
This now allows users to specify memory in units of choice, and
lists the same in 'KiB' -- just like other 'memory' elements in XML.

    <numa>
      <cell cpus='0-3' memory='1024' unit='MiB' />
      <cell cpus='4-7' memory='1024' unit='MiB' />
    </numa>

Also augment test cases to correctly model NUMA memory specification.
This adds the tag 'unit="KiB"' for memory attribute in NUMA cells.

Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
21 files changed:
docs/formatdomain.html.in
docs/schemas/domaincommon.rng
src/conf/cpu_conf.c
tests/qemuxml2argvdata/qemuxml2argv-cpu-numa-disjoint.xml
tests/qemuxml2argvdata/qemuxml2argv-cpu-numa-memshared.xml
tests/qemuxml2argvdata/qemuxml2argv-cpu-numa1.xml
tests/qemuxml2argvdata/qemuxml2argv-cpu-numa2.xml
tests/qemuxml2argvdata/qemuxml2argv-cpu-numa3.xml
tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages.xml
tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages2.xml
tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages3.xml
tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages4.xml
tests/qemuxml2argvdata/qemuxml2argv-hugepages-shared.xml
tests/qemuxml2argvdata/qemuxml2argv-numatune-auto-prefer.xml
tests/qemuxml2argvdata/qemuxml2argv-numatune-memnode-no-memory.xml
tests/qemuxml2argvdata/qemuxml2argv-numatune-memnode.xml
tests/qemuxml2argvdata/qemuxml2argv-numatune-memnodes-problematic.xml
tests/qemuxml2xmloutdata/qemuxml2xmlout-cpu-numa1.xml
tests/qemuxml2xmloutdata/qemuxml2xmlout-cpu-numa2.xml
tests/qemuxml2xmloutdata/qemuxml2xmlout-numatune-auto-prefer.xml
tests/qemuxml2xmloutdata/qemuxml2xmlout-numatune-memnode.xml

index 7196e75cbd8b0aedae5bfcf61e3eec2d1d2b9793..b601278a77cb29473061aaa43940b890def55efc 100644 (file)
   &lt;cpu&gt;
     ...
     &lt;numa&gt;
-      &lt;cell id='0' cpus='0-3' memory='512000'/&gt;
-      &lt;cell id='1' cpus='4-7' memory='512000' memAccess='shared'/&gt;
+      &lt;cell id='0' cpus='0-3' memory='512000' unit='KiB'/&gt;
+      &lt;cell id='1' cpus='4-7' memory='512000' unit='KiB' memAccess='shared'/&gt;
     &lt;/numa&gt;
     ...
   &lt;/cpu&gt;
       <code>cpus</code> specifies the CPU or range of CPUs that are
       part of the node. <code>memory</code> specifies the node memory
       in kibibytes (i.e. blocks of 1024 bytes).
+      <span class="since">Since 1.2.11</span> one can use an additional <a
+          href="#elementsMemoryAllocation"><code>unit</code></a> attribute to
+      define units in which <code>memory</code> is specified.
       <span class="since">Since 1.2.7</span> all cells should
       have <code>id</code> attribute in case referring to some cell is
       necessary in the code, otherwise the cells are
index 20d81ae2d60562cae2a08da64d92a82bbfa2a803..44cabadaae36ecbc0d78b43772c43992971ab0a7 100644 (file)
       <attribute name="memory">
         <ref name="memoryKB"/>
       </attribute>
+      <optional>
+        <attribute name="unit">
+          <ref name="unit"/>
+        </attribute>
+      </optional>
       <optional>
         <attribute name="memAccess">
           <choice>
index 1c74c666a1f3bc7ef0d971b2a8c234e005d37220..2650208901844d5862355c0bb2bba1b84833c7a2 100644 (file)
@@ -184,6 +184,7 @@ virCPUDefParseXML(xmlNodePtr node,
 {
     virCPUDefPtr def;
     xmlNodePtr *nodes = NULL;
+    xmlNodePtr oldnode = ctxt->node;
     int n;
     size_t i;
     char *cpuMode;
@@ -440,7 +441,7 @@ virCPUDefParseXML(xmlNodePtr node,
         def->ncells = n;
 
         for (i = 0; i < n; i++) {
-            char *cpus, *memory, *memAccessStr;
+            char *cpus, *memAccessStr;
             int ret, ncpus = 0;
             unsigned int cur_cell;
             char *tmp = NULL;
@@ -489,21 +490,10 @@ virCPUDefParseXML(xmlNodePtr node,
                 goto error;
             def->cells_cpus += ncpus;
 
-            memory = virXMLPropString(nodes[i], "memory");
-            if (!memory) {
-                virReportError(VIR_ERR_XML_ERROR, "%s",
-                               _("Missing 'memory' attribute in NUMA cell"));
-                goto error;
-            }
-
-            ret = virStrToLong_ull(memory, NULL, 10, &def->cells[cur_cell].mem);
-            if (ret == -1) {
-                virReportError(VIR_ERR_XML_ERROR, "%s",
-                               _("Invalid 'memory' attribute in NUMA cell"));
-                VIR_FREE(memory);
-                goto error;
-            }
-            VIR_FREE(memory);
+            ctxt->node = nodes[i];
+            if (virDomainParseMemory("./@memory", "./@unit", ctxt,
+                                     &def->cells[cur_cell].mem, true, false) < 0)
+                goto cleanup;
 
             memAccessStr = virXMLPropString(nodes[i], "memAccess");
             if (memAccessStr) {
@@ -526,6 +516,7 @@ virCPUDefParseXML(xmlNodePtr node,
     }
 
  cleanup:
+    ctxt->node = oldnode;
     VIR_FREE(fallback);
     VIR_FREE(vendor_id);
     VIR_FREE(nodes);
@@ -704,6 +695,7 @@ virCPUDefFormatBuf(virBufferPtr buf,
             virBufferAsprintf(buf, " id='%zu'", i);
             virBufferAsprintf(buf, " cpus='%s'", def->cells[i].cpustr);
             virBufferAsprintf(buf, " memory='%llu'", def->cells[i].mem);
+            virBufferAddLit(buf, " unit='KiB'");
             if (memAccess)
                 virBufferAsprintf(buf, " memAccess='%s'",
                                   virMemAccessTypeToString(memAccess));
index 474a238810253ab2e6a27a9b8a109cac890d9720..bdffcd1ec293fbbd33037d31bc3e03085af1756b 100644 (file)
@@ -11,8 +11,8 @@
   <cpu>
     <topology sockets='2' cores='4' threads='2'/>
     <numa>
-      <cell id='0' cpus='0-3,8-11' memory='109550'/>
-      <cell id='1' cpus='4-7,12-15' memory='109550'/>
+      <cell id='0' cpus='0-3,8-11' memory='109550' unit='KiB'/>
+      <cell id='1' cpus='4-7,12-15' memory='109550' unit='KiB'/>
     </numa>
   </cpu>
   <clock offset='utc'/>
index cf7c040cccbb5e5869ab9f6b94de99427278b3f2..c638ffa0048552b0d5921330a76f772824e223c6 100644 (file)
@@ -11,8 +11,8 @@
   <cpu>
     <topology sockets='2' cores='4' threads='2'/>
     <numa>
-      <cell id='0' cpus='0-7' memory='109550' memAccess='shared'/>
-      <cell id='1' cpus='8-15' memory='109550' memAccess='private'/>
+      <cell id='0' cpus='0-7' memory='109550' unit='KiB' memAccess='shared'/>
+      <cell id='1' cpus='8-15' memory='109550' unit='KiB' memAccess='private'/>
     </numa>
   </cpu>
   <clock offset='utc'/>
index 0543f7f79178b8d37c945938c053e71a566268f4..20120e956c525f7d0c386766c51bcf3133fe4547 100644 (file)
@@ -11,8 +11,8 @@
   <cpu>
     <topology sockets='2' cores='4' threads='2'/>
     <numa>
-      <cell cpus='0-7' memory='109550'/>
-      <cell cpus='8-15' memory='109550'/>
+      <cell cpus='0-7' memory='109550' unit='KiB'/>
+      <cell cpus='8-15' memory='109550' unit='KiB'/>
     </numa>
   </cpu>
   <clock offset='utc'/>
index 0a5f9fcd13fa91136e47b5c6a8b9f2eb22b53c52..a90e7a209e0006f7ac251d82174d9aa964a107c1 100644 (file)
@@ -11,8 +11,8 @@
   <cpu>
     <topology sockets='2' cores='4' threads='2'/>
     <numa>
-      <cell id='1' cpus='8-15' memory='109550'/>
-      <cell id='0' cpus='0-7' memory='109550'/>
+      <cell id='1' cpus='8-15' memory='109550' unit='KiB'/>
+      <cell id='0' cpus='0-7' memory='109550' unit='KiB'/>
     </numa>
   </cpu>
   <clock offset='utc'/>
index fa3070df2c349a5bf3103f873afcad77d38c5691..ea2dc8166f9ff90aca3e960654fa7fe60ab4a021 100644 (file)
@@ -11,8 +11,8 @@
   <cpu>
     <topology sockets='2' cores='4' threads='2'/>
     <numa>
-      <cell id='1' cpus='0-7' memory='109550'/>
-      <cell id='2' cpus='8-15' memory='109550'/>
+      <cell id='1' cpus='0-7' memory='109550' unit='KiB'/>
+      <cell id='2' cpus='8-15' memory='109550' unit='KiB'/>
     </numa>
   </cpu>
   <clock offset='utc'/>
index 5ad0695734e87b554ebba603f085ec41d12c937f..b67df2f70d3b6508f9969295124b48a7d6547314 100644 (file)
   </os>
   <cpu>
     <numa>
-      <cell id='0' cpus='0' memory='1048576'/>
-      <cell id='1' cpus='1' memory='1048576'/>
-      <cell id='2' cpus='2' memory='1048576'/>
-      <cell id='3' cpus='3' memory='1048576'/>
+      <cell id='0' cpus='0' memory='1048576' unit='KiB'/>
+      <cell id='1' cpus='1' memory='1048576' unit='KiB'/>
+      <cell id='2' cpus='2' memory='1048576' unit='KiB'/>
+      <cell id='3' cpus='3' memory='1048576' unit='KiB'/>
     </numa>
   </cpu>
   <clock offset='utc'/>
index 3df870b6a9a6ccc7e14727bf5127bff3cff16db0..6afa6ef5dfd6bf7e2198d3571d6477b686300a2e 100644 (file)
@@ -15,8 +15,8 @@
   </os>
   <cpu>
     <numa>
-      <cell id='0' cpus='0' memory='262144'/>
-      <cell id='1' cpus='1' memory='786432'/>
+      <cell id='0' cpus='0' memory='262144' unit='KiB'/>
+      <cell id='1' cpus='1' memory='786432' unit='KiB'/>
     </numa>
   </cpu>
   <clock offset='utc'/>
index 35aa2cf941c0ec98ceaa21dc2ee7b88f90e1edf1..21f49855599fd30294896c3258f68b5e26b15fa2 100644 (file)
@@ -15,8 +15,8 @@
   </os>
   <cpu>
     <numa>
-      <cell id='0' cpus='0' memory='262144'/>
-      <cell id='1' cpus='1' memory='786432'/>
+      <cell id='0' cpus='0' memory='262144' unit='KiB'/>
+      <cell id='1' cpus='1' memory='786432' unit='KiB'/>
     </numa>
   </cpu>
   <clock offset='utc'/>
index a3ed29bca46277ac9ce9d203365f737b6927d8ab..eb18f24b2bee312b6e35358439756a33282d6540 100644 (file)
   </os>
   <cpu>
     <numa>
-      <cell id='0' cpus='0' memory='1048576'/>
-      <cell id='1' cpus='1' memory='1048576'/>
-      <cell id='2' cpus='2' memory='1048576'/>
-      <cell id='3' cpus='3' memory='1048576'/>
+      <cell id='0' cpus='0' memory='1048576' unit='KiB'/>
+      <cell id='1' cpus='1' memory='1048576' unit='KiB'/>
+      <cell id='2' cpus='2' memory='1048576' unit='KiB'/>
+      <cell id='3' cpus='3' memory='1048576' unit='KiB'/>
     </numa>
   </cpu>
   <clock offset='utc'/>
index e7db69c5a502010683defa9a3f12e1e28107dede..52ca2f9e73435fedd6c423cbf68e27169ea00501 100644 (file)
   </os>
   <cpu>
     <numa>
-      <cell id='0' cpus='0' memory='1048576'/>
-      <cell id='1' cpus='1' memory='1048576' memAccess='shared'/>
-      <cell id='2' cpus='2' memory='1048576' memAccess='private'/>
-      <cell id='3' cpus='3' memory='1048576'/>
+      <cell id='0' cpus='0' memory='1048576' unit='KiB'/>
+      <cell id='1' cpus='1' memory='1048576' unit='KiB' memAccess='shared'/>
+      <cell id='2' cpus='2' memory='1048576' unit='KiB' memAccess='private'/>
+      <cell id='3' cpus='3' memory='1048576' unit='KiB'/>
     </numa>
   </cpu>
   <clock offset='utc'/>
index 63f0d1fa361286eed490ea1b46d8371067f4f3c1..8f809624eeb48bf776babbf9c0c651cf31306261 100644 (file)
@@ -13,7 +13,7 @@
   </os>
   <cpu>
     <numa>
-      <cell id='0' cpus='0' memory='65536'/>
+      <cell id='0' cpus='0' memory='65536' unit='KiB'/>
     </numa>
   </cpu>
   <clock offset='utc'/>
index 4b2efa2105d1beb4ff7dbcf2078dec30566b0536..886a07a5f52ff5c7c5f4f23451dbb21397b810bc 100644 (file)
@@ -13,8 +13,8 @@
   </os>
   <cpu>
     <numa>
-      <cell id='0' cpus='0' memory='32768'/>
-      <cell id='1' cpus='1' memory='32768'/>
+      <cell id='0' cpus='0' memory='32768' unit='KiB'/>
+      <cell id='1' cpus='1' memory='32768' unit='KiB'/>
     </numa>
   </cpu>
   <clock offset='utc'/>
index 440413bfc456811b17e0cdf7c27549a67109c2c6..8912017a033e2aa72b778dce2bef3c4034e84994 100644 (file)
@@ -15,9 +15,9 @@
   </os>
   <cpu>
     <numa>
-      <cell id='0' cpus='0' memory='20002'/>
-      <cell id='1' cpus='1-27,29' memory='660066'/>
-      <cell id='2' cpus='28-31,^29' memory='24002400'/>
+      <cell id='0' cpus='0' memory='20002' unit='KiB'/>
+      <cell id='1' cpus='1-27,29' memory='660066' unit='KiB'/>
+      <cell id='2' cpus='28-31,^29' memory='24002400' unit='KiB'/>
     </numa>
   </cpu>
   <clock offset='utc'/>
index bb4e4af0436a406fd1a55015f9d1b2a865c9f598..e1d115c718826c7aaa1493cb54600728e72e3dd6 100644 (file)
@@ -14,8 +14,8 @@
   </os>
   <cpu>
     <numa>
-      <cell id='0' cpus='0' memory='32768'/>
-      <cell id='1' cpus='1' memory='32768'/>
+      <cell id='0' cpus='0' memory='32768' unit='KiB'/>
+      <cell id='1' cpus='1' memory='32768' unit='KiB'/>
     </numa>
   </cpu>
   <clock offset='utc'/>
index 227bf1cd01f20bef961ba68b4314a00625cb5e0d..58f40b99023fd15ffd588e84ad5770b011d8196d 100644 (file)
@@ -11,8 +11,8 @@
   <cpu>
     <topology sockets='2' cores='4' threads='2'/>
     <numa>
-      <cell id='0' cpus='0-7' memory='109550'/>
-      <cell id='1' cpus='8-15' memory='109550'/>
+      <cell id='0' cpus='0-7' memory='109550' unit='KiB'/>
+      <cell id='1' cpus='8-15' memory='109550' unit='KiB'/>
     </numa>
   </cpu>
   <clock offset='utc'/>
index 227bf1cd01f20bef961ba68b4314a00625cb5e0d..58f40b99023fd15ffd588e84ad5770b011d8196d 100644 (file)
@@ -11,8 +11,8 @@
   <cpu>
     <topology sockets='2' cores='4' threads='2'/>
     <numa>
-      <cell id='0' cpus='0-7' memory='109550'/>
-      <cell id='1' cpus='8-15' memory='109550'/>
+      <cell id='0' cpus='0-7' memory='109550' unit='KiB'/>
+      <cell id='1' cpus='8-15' memory='109550' unit='KiB'/>
     </numa>
   </cpu>
   <clock offset='utc'/>
index 19761b42d4f7226e8aed419a38c3bfa7c5e5d374..1000e9fa179ae9ce39b8234a47afa39062180857 100644 (file)
@@ -13,7 +13,7 @@
   </os>
   <cpu>
     <numa>
-      <cell id='0' cpus='0' memory='65536'/>
+      <cell id='0' cpus='0' memory='65536' unit='KiB'/>
     </numa>
   </cpu>
   <clock offset='utc'/>
index 82b5f61870302cb554c6ddf0d6caa9a1e0452419..ffc57cf57d88746d97e024075313b8b90f8214ca 100644 (file)
@@ -15,9 +15,9 @@
   </os>
   <cpu>
     <numa>
-      <cell id='0' cpus='0' memory='20002'/>
-      <cell id='1' cpus='1-27,29' memory='660066'/>
-      <cell id='2' cpus='28-31,^29' memory='24002400'/>
+      <cell id='0' cpus='0' memory='20002' unit='KiB'/>
+      <cell id='1' cpus='1-27,29' memory='660066' unit='KiB'/>
+      <cell id='2' cpus='28-31,^29' memory='24002400' unit='KiB'/>
     </numa>
   </cpu>
   <clock offset='utc'/>