xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Dario Faggioli <dario.faggioli@citrix.com>
To: xen-devel@lists.xen.org
Cc: Marcus Granado <Marcus.Granado@eu.citrix.com>,
	Keir Fraser <keir@xen.org>,
	Ian Campbell <Ian.Campbell@citrix.com>,
	Li Yechen <lccycc123@gmail.com>,
	George Dunlap <george.dunlap@eu.citrix.com>,
	Andrew Cooper <Andrew.Cooper3@citrix.com>,
	Juergen Gross <juergen.gross@ts.fujitsu.com>,
	Ian Jackson <Ian.Jackson@eu.citrix.com>,
	Jan Beulich <JBeulich@suse.com>,
	Justin Weaver <jtweaver@hawaii.edu>,
	Daniel De Graaf <dgdegra@tycho.nsa.gov>,
	Matt Wilson <msw@amazon.com>,
	Elena Ufimtseva <ufimtseva@gmail.com>
Subject: [PATCH 03/15] xen: numa-sched: leave node-affinity alone if not in "auto" mode
Date: Thu, 03 Oct 2013 19:45:55 +0200	[thread overview]
Message-ID: <20131003174555.28472.67383.stgit@Solace> (raw)
In-Reply-To: <20131003174413.28472.8989.stgit@Solace>

If the domain's NUMA node-affinity is being specified by the
user/toolstack (instead of being automatically computed by Xen),
we really should stick to that. This means domain_update_node_affinity()
is wrong when it filters out some stuff from there even in "!auto"
mode.

This commit fixes that. Of course, this does not mean node-affinity
is always honoured (e.g., a vcpu won't run on a pcpu of a different
cpupool) but the necessary logic for taking into account all the
possible situations lives in the scheduler code, where it belongs.

What could happen without this change is that, under certain
circumstances, the node-affinity of a domain may change when the
user modifies the vcpu-affinity of the domain's vcpus. This, even
if probably not a real bug, is at least something the user does
not expect, so let's avoid it.

Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com>
Reviewed-by: George Dunlap <george.dunlap@eu.citrix.com>
---
This has been submitted already as a single patch on its own.
Since this series needs the change done here, just include it
in here, instead of pinging the original submission and deferring
posting this series.
---
 xen/common/domain.c |   28 +++++++++-------------------
 1 file changed, 9 insertions(+), 19 deletions(-)

diff --git a/xen/common/domain.c b/xen/common/domain.c
index 5999779..af31ab4 100644
--- a/xen/common/domain.c
+++ b/xen/common/domain.c
@@ -352,7 +352,6 @@ void domain_update_node_affinity(struct domain *d)
     cpumask_var_t cpumask;
     cpumask_var_t online_affinity;
     const cpumask_t *online;
-    nodemask_t nodemask = NODE_MASK_NONE;
     struct vcpu *v;
     unsigned int node;
 
@@ -374,28 +373,19 @@ void domain_update_node_affinity(struct domain *d)
         cpumask_or(cpumask, cpumask, online_affinity);
     }
 
+    /*
+     * If d->auto_node_affinity is true, the domain's node-affinity mask
+     * (d->node_affinity) is automaically computed from all the domain's
+     * vcpus' vcpu-affinity masks (the union of which we have just built
+     * above in cpumask). OTOH, if d->auto_node_affinity is false, we
+     * must leave the node-affinity of the domain alone.
+     */
     if ( d->auto_node_affinity )
     {
-        /* Node-affinity is automaically computed from all vcpu-affinities */
+        nodes_clear(d->node_affinity);
         for_each_online_node ( node )
             if ( cpumask_intersects(&node_to_cpumask(node), cpumask) )
-                node_set(node, nodemask);
-
-        d->node_affinity = nodemask;
-    }
-    else
-    {
-        /* Node-affinity is provided by someone else, just filter out cpus
-         * that are either offline or not in the affinity of any vcpus. */
-        nodemask = d->node_affinity;
-        for_each_node_mask ( node, d->node_affinity )
-            if ( !cpumask_intersects(&node_to_cpumask(node), cpumask) )
-                node_clear(node, nodemask);//d->node_affinity);
-
-        /* Avoid loosing track of node-affinity because of a bad
-         * vcpu-affinity has been specified. */
-        if ( !nodes_empty(nodemask) )
-            d->node_affinity = nodemask;
+                node_set(node, d->node_affinity);
     }
 
     sched_set_node_affinity(d, &d->node_affinity);

  parent reply	other threads:[~2013-10-03 17:45 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-03 17:45 [PATCH 00/15] Implement per-vcpu NUMA node-affinity for credit1 Dario Faggioli
2013-10-03 17:45 ` [PATCH 01/15] xl: update the manpage about "cpus=" and NUMA node-affinity Dario Faggioli
2013-10-10 11:43   ` Ian Campbell
2013-10-10 13:55     ` Dario Faggioli
2013-10-03 17:45 ` [PATCH 02/15] xl: fix a typo in main_vcpulist() Dario Faggioli
2013-10-10 10:29   ` Ian Campbell
2013-10-10 11:43     ` Ian Campbell
2013-10-10 13:54     ` Dario Faggioli
2013-10-10 13:57       ` Ian Campbell
2013-10-03 17:45 ` Dario Faggioli [this message]
2013-11-05 14:21   ` [PATCH 03/15] xen: numa-sched: leave node-affinity alone if not in "auto" mode George Dunlap
2013-11-05 14:37     ` Jan Beulich
2013-11-05 14:45       ` George Dunlap
2013-11-05 14:49       ` Dario Faggioli
2013-10-03 17:46 ` [PATCH 04/15] libxl: introduce libxl_node_to_cpumap Dario Faggioli
2013-10-10 11:44   ` Ian Campbell
2013-10-03 17:46 ` [PATCH 05/15] xl: allow for node-wise specification of vcpu pinning Dario Faggioli
2013-10-03 17:46 ` [PATCH 06/15] xl: implement and enable dryrun mode for `xl vcpu-pin' Dario Faggioli
2013-10-03 17:46 ` [PATCH 07/15] xl: test script for the cpumap parser (for vCPU pinning) Dario Faggioli
2013-10-10 10:32   ` Ian Campbell
2013-10-10 14:35     ` Dario Faggioli
2013-10-14 16:42       ` Ian Jackson
2013-10-14 17:00         ` Dario Faggioli
2013-10-03 17:46 ` [PATCH 08/15] xen: numa-sched: make space for per-vcpu node-affinity Dario Faggioli
2013-10-03 17:46 ` [PATCH 09/15] xen: numa-sched: domain node-affinity always comes from vcpu node-affinity Dario Faggioli
2013-10-03 17:46 ` [PATCH 10/15] xen: numa-sched: use per-vcpu node-affinity for actual scheduling Dario Faggioli
2013-10-03 17:47 ` [PATCH 11/15] xen: numa-sched: enable getting/specifying per-vcpu node-affinity Dario Faggioli
2013-10-03 17:47 ` [PATCH 12/15] libxc: " Dario Faggioli
2013-10-03 17:47 ` [PATCH 13/15] libxl: " Dario Faggioli
2013-10-03 17:47 ` [PATCH 14/15] xl: " Dario Faggioli
2013-10-03 17:47 ` [PATCH 15/15] xl: numa-sched: enable specifying node-affinity in VM config file Dario Faggioli
2013-11-05 11:29 ` [PATCH 00/15] Implement per-vcpu NUMA node-affinity for credit1 Dario Faggioli
2013-11-05 11:32   ` George Dunlap
2013-11-05 14:05     ` Dario Faggioli

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20131003174555.28472.67383.stgit@Solace \
    --to=dario.faggioli@citrix.com \
    --cc=Andrew.Cooper3@citrix.com \
    --cc=Ian.Campbell@citrix.com \
    --cc=Ian.Jackson@eu.citrix.com \
    --cc=JBeulich@suse.com \
    --cc=Marcus.Granado@eu.citrix.com \
    --cc=dgdegra@tycho.nsa.gov \
    --cc=george.dunlap@eu.citrix.com \
    --cc=jtweaver@hawaii.edu \
    --cc=juergen.gross@ts.fujitsu.com \
    --cc=keir@xen.org \
    --cc=lccycc123@gmail.com \
    --cc=msw@amazon.com \
    --cc=ufimtseva@gmail.com \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).