On Wed, Apr 11, 2012 at 10:40:33PM +0800, Osier Yang wrote:
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)
Okay since we default to static in case the user didn't explicitely
expressed the placement method, I'm fine with this this should not break
existing setups.
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit
http://xmlsoft.org/
daniel(a)veillard.com | Rpmfind RPM search engine
http://rpmfind.net/
http://veillard.com/ | virtualization library
http://libvirt.org/