From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andre Przywara Subject: [PATCH] xend: NUMA: fix division by zero on unpopulated nodes Date: Thu, 14 Jan 2010 17:32:17 +0100 Message-ID: <4B4F4711.70605@amd.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------010801010202040303040504" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Keir Fraser Cc: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org --------------010801010202040303040504 Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit Hi, nodes without memory will currently be disabled by also moving the physical cores connected to them to other nodes. This leads to nodes without CPUs and thus to a division by zero in the node allocation algorithm. Attached patch fixes this by checking for 0 before the division. This fixes domain creation on boxes with memory-less nodes. The resulting domain distribution is still not correct, I will send another patch after more testing. Regards, Andre. Signed-off-by: Andre Przywara -- 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 --------------010801010202040303040504 Content-Type: text/plain; name="xend_numa_div_by_zero.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="xend_numa_div_by_zero.patch" diff -r e406e3451835 tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Thu Jan 14 10:14:17 2010 +0000 +++ b/tools/python/xen/xend/XendDomainInfo.py Thu Jan 14 15:16:28 2010 +0100 @@ -2709,9 +2709,12 @@ nodeload[i] += 1 break for i in range(0, nr_nodes): - nodeload[i] = int(nodeload[i] * 16 / len(info['node_to_cpu'][i])) - if len(info['node_to_cpu'][i]) == 0 or i not in node_list: - nodeload[i] += 8 + if len(info['node_to_cpu'][i]) == 0: + nodeload[i] += 8 + else: + nodeload[i] = int(nodeload[i] * 16 / len(info['node_to_cpu'][i])) + if i not in node_list: + nodeload[i] += 8 return map(lambda x: x[0], sorted(enumerate(nodeload), key=lambda x:x[1])) info = xc.physinfo() --------------010801010202040303040504 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------010801010202040303040504--