From: Andre Przywara <andre.przywara@amd.com>
To: Jan Beulich <JBeulich@novell.com>,
Keir Fraser <keir.fraser@eu.citrix.com>
Cc: xen-devel@lists.xensource.com
Subject: [PATCH] NUMA: Fix computation of needed nodes
Date: Wed, 13 Jan 2010 23:10:54 +0100 [thread overview]
Message-ID: <4B4E44EE.70608@amd.com> (raw)
In-Reply-To: <4B4D8F1C02000078000299EC@vpn.id2.novell.com>
[-- Attachment #1: Type: text/plain, Size: 1220 bytes --]
Hi,
as Jan Beulich pointed out:
> I'm afraid this change isn't really correct:
>
>> + cores_per_node = info['nr_cpus'] / info['nr_nodes']
>> + nodes_required = (self.info['VCPUs_max'] + cores_per_node - 1) / cores_per_node
>
> Simply using cores_per_node (as calculated here) as a divisor is bound
> to cause division-by-zero issues, namely when limiting the number of
> CPUs on the Xen command line (maxcpus=).
Actually Jan's proposed method of getting additional nodes is more
elegant, so I implemented: enumerating the best nodes and adding CPU
affinity until all VCPUs can be backed by at least on physical core.
This should fix problems with asymmetric NUMA configurations and cropped
number of CPUs in Xen.
Regards,
Andre.
Signed-off-by: Andre Przywara <andre.przywara@amd.com>
--
Andre Przywara
AMD-Operating System Research Center (OSRC), Dresden, Germany
Tel: +49 351 488-3567-12
----to satisfy European Law for business letters:
Advanced Micro Devices GmbH
Karl-Hammerschmidt-Str. 34, 85609 Dornach b. Muenchen
Geschaeftsfuehrer: Andrew Bowd; Thomas M. McCoy; Giuliano Meroni
Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen
Registergericht Muenchen, HRB Nr. 43632
[-- Attachment #2: numa_div_by_zero.patch --]
[-- Type: text/plain, Size: 1494 bytes --]
diff -r 13d4e78ede97 tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py Wed Jan 13 08:33:34 2010 +0000
+++ b/tools/python/xen/xend/XendDomainInfo.py Wed Jan 13 22:55:56 2010 +0100
@@ -2724,13 +2724,12 @@
candidate_node_list.append(i)
best_node = find_relaxed_node(candidate_node_list)[0]
cpumask = info['node_to_cpu'][best_node]
- cores_per_node = info['nr_cpus'] / info['nr_nodes']
- nodes_required = (self.info['VCPUs_max'] + cores_per_node - 1) / cores_per_node
- if nodes_required > 1:
- log.debug("allocating %d NUMA nodes", nodes_required)
- best_nodes = find_relaxed_node(filter(lambda x: x != best_node, range(0,info['nr_nodes'])))
- for i in best_nodes[:nodes_required - 1]:
- cpumask = cpumask + info['node_to_cpu'][i]
+ best_nodes = find_relaxed_node(filter(lambda x: x != best_node, range(0,info['nr_nodes'])))
+ for node_idx in best_nodes:
+ if len(cpumask) >= self.info['VCPUs_max']:
+ break
+ cpumask = cpumask + info['node_to_cpu'][node_idx]
+ log.debug("allocating additional NUMA node %d", node_idx)
for v in range(0, self.info['VCPUs_max']):
xc.vcpu_setaffinity(self.domid, v, cpumask)
return index
[-- Attachment #3: Type: text/plain, Size: 138 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
prev parent reply other threads:[~2010-01-13 22:10 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-13 8:15 Ping: c/s 20526 (tools: avoid cpu over-commitment if numa=on) Jan Beulich
2010-01-13 8:29 ` Keir Fraser
2010-01-13 14:24 ` Andre Przywara
2010-01-13 22:10 ` Andre Przywara [this message]
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=4B4E44EE.70608@amd.com \
--to=andre.przywara@amd.com \
--cc=JBeulich@novell.com \
--cc=keir.fraser@eu.citrix.com \
--cc=xen-devel@lists.xensource.com \
/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).