From 8fb2164cfff35ce0b87f1d513a0f3ca5111d7880 Mon Sep 17 00:00:00 2001 From: Osier Yang Date: Wed, 11 Apr 2012 22:40:33 +0800 Subject: [PATCH] numad: Ignore cpuset if placement is auto 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 a382d30098..bb67cd1e0e 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -365,11 +365,11 @@ "auto", defaults to "static" if cpuset is specified, "auto" indicates the domain process will be pinned to the advisory nodeset from querying numad, and the value of attribute - cpuset will be overridden by the advisory nodeset - from numad if it's specified. If both cpuset and - placement are not specified, or if placement - is "static", but no cpuset is specified, the domain - process will be pinned to all the available physical CPUs. + cpuset will be ignored if it's specified. If both + cpuset and placement are not specified, + or if placement is "static", but no cpuset + is specified, the domain process will be pinned to all the + available physical CPUs. diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index a9c5cbce21..b28ae5cae2 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) -- GitLab