[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] xend: fix automatic vcpu NUMA placement
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1211465466 -3600 # Node ID 2e6a51378451a225b20acee90bcd171996251fb4 # Parent 7325ea8445cba1f9e8cd5641538d4e633a5e9459 xend: fix automatic vcpu NUMA placement The automatic NUMA placement code (find_relaxed_node) in XendDomainInfo.py contains several bugs: 1. The domain just created shall not be considered in the load calculation. 2. Nodes with too less memory for the domain must be considered during the load calculation phase and abandoned later, currently these nodes win with a load of 0. 3. CPUs which are offline shall not be considered in load calculation. 4. (Integer-)Dividing the load value by the number of cores per node may conceal subtle load differences resulting in a non-optimal node to be chosen. Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx> --- tools/python/xen/xend/XendDomainInfo.py | 22 +++++++++++----------- 1 files changed, 11 insertions(+), 11 deletions(-) diff -r 7325ea8445cb -r 2e6a51378451 tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Thu May 22 15:09:49 2008 +0100 +++ b/tools/python/xen/xend/XendDomainInfo.py Thu May 22 15:11:06 2008 +0100 @@ -2091,28 +2091,28 @@ class XendDomainInfo: xc.vcpu_setaffinity(self.domid, v, self.info['cpus'][v]) else: def find_relaxed_node(node_list): - import sys + import sys + nr_nodes = info['nr_nodes'] if node_list is None: - node_list = range(0, info['nr_nodes']) + node_list = range(0, nr_nodes) nodeload = [0] - nodeload = nodeload * info['nr_nodes'] + nodeload = nodeload * nr_nodes from xen.xend import XendDomain doms = XendDomain.instance().list('all') - for dom in doms: + for dom in filter (lambda d: d.domid != self.domid, doms): cpuinfo = dom.getVCPUInfo() for vcpu in sxp.children(cpuinfo, 'vcpu'): - def vinfo(n, t): - return t(sxp.child_value(vcpu, n)) - cpumap = vinfo('cpumap', list) - for i in node_list: + if sxp.child_value(vcpu, 'online') == 0: continue + cpumap = list(sxp.child_value(vcpu,'cpumap')) + for i in range(0, nr_nodes): node_cpumask = info['node_to_cpu'][i] for j in node_cpumask: if j in cpumap: nodeload[i] += 1 break - for i in node_list: - if len(info['node_to_cpu'][i]) > 0: - nodeload[i] = int(nodeload[i] / len(info['node_to_cpu'][i])) + for i in range(0, nr_nodes): + if len(info['node_to_cpu'][i]) > 0 and i in node_list: + nodeload[i] = int(nodeload[i] * 16 / len(info['node_to_cpu'][i])) else: nodeload[i] = sys.maxint index = nodeload.index( min(nodeload) ) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |