[libvirt] [PATCH 2/3] numad: Ignore cpuset if placement is auto

Osier Yang jyang at redhat.com
Wed Apr 11 14:40:33 UTC 2012


As explained in previous patch, numad will balance the affinity
dynamically, so reflecting the cpuset from numad at the first
time doesn't make much case, and may just could cause confusion.
---
 docs/formatdomain.html.in |   10 +++++-----
 src/conf/domain_conf.c    |   28 +++++++++++++++-------------
 2 files changed, 20 insertions(+), 18 deletions(-)

diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index a382d30..bb67cd1 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -365,11 +365,11 @@
         "auto", defaults to "static" if <code>cpuset</code> is specified,
         "auto" indicates the domain process will be pinned to the advisory
         nodeset from querying numad, and the value of attribute
-        <code>cpuset</code> will be overridden by the advisory nodeset
-        from numad if it's specified. If both <code>cpuset</code> and
-        <code>placement</code> are not specified, or if <code>placement</code>
-        is "static", but no <code>cpuset</code> is specified, the domain
-        process will be pinned to all the available physical CPUs.
+        <code>cpuset</code> will be ignored if it's specified. If both
+        <code>cpuset</code> and <code>placement</code> are not specified,
+        or if <code>placement</code> is "static", but no <code>cpuset</code>
+        is specified, the domain process will be pinned to all the
+        available physical CPUs.
       </dd>
     </dl>
 
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index c6b97e1..07dcc89 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -7884,19 +7884,6 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
         }
     }
 
-    tmp = virXPathString("string(./vcpu[1]/@cpuset)", ctxt);
-    if (tmp) {
-        char *set = tmp;
-        def->cpumasklen = VIR_DOMAIN_CPUMASK_LEN;
-        if (VIR_ALLOC_N(def->cpumask, def->cpumasklen) < 0) {
-            goto no_memory;
-        }
-        if (virDomainCpuSetParse(set, 0, def->cpumask,
-                                 def->cpumasklen) < 0)
-            goto error;
-        VIR_FREE(tmp);
-    }
-
     tmp = virXPathString("string(./vcpu[1]/@placement)", ctxt);
     if (tmp) {
         if ((def->placement_mode =
@@ -7913,6 +7900,21 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
             def->placement_mode = VIR_DOMAIN_CPU_PLACEMENT_MODE_STATIC;
     }
 
+    if (def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_STATIC) {
+        tmp = virXPathString("string(./vcpu[1]/@cpuset)", ctxt);
+        if (tmp) {
+            char *set = tmp;
+            def->cpumasklen = VIR_DOMAIN_CPUMASK_LEN;
+            if (VIR_ALLOC_N(def->cpumask, def->cpumasklen) < 0) {
+                goto no_memory;
+            }
+            if (virDomainCpuSetParse(set, 0, def->cpumask,
+                                     def->cpumasklen) < 0)
+                goto error;
+            VIR_FREE(tmp);
+        }
+    }
+
     /* Extract cpu tunables. */
     if (virXPathULong("string(./cputune/shares[1])", ctxt,
                       &def->cputune.shares) < 0)
-- 
1.7.1




More information about the libvir-list mailing list