From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LCalp-0005a8-IS for qemu-devel@nongnu.org; Tue, 16 Dec 2008 09:19:33 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LCaln-0005ZV-PG for qemu-devel@nongnu.org; Tue, 16 Dec 2008 09:19:33 -0500 Received: from [199.232.76.173] (port=56136 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LCaln-0005ZK-Hy for qemu-devel@nongnu.org; Tue, 16 Dec 2008 09:19:31 -0500 Received: from outbound-wa4.frontbridge.com ([216.32.181.16]:2205 helo=WA4EHSOBE001.bigfish.com) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_ARCFOUR_MD5:16) (Exim 4.60) (envelope-from ) id 1LCaln-0006iR-3T for qemu-devel@nongnu.org; Tue, 16 Dec 2008 09:19:31 -0500 Message-ID: <4947B91C.4050403@amd.com> Date: Tue, 16 Dec 2008 15:20:12 +0100 From: Andre Przywara MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------040302020202070401010701" Subject: [Qemu-devel] [PATCH 7/8] v2: add numa monitor command Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori Cc: qemu-devel@nongnu.org, Avi Kivity --------------040302020202070401010701 Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit Signed-off-by: Andre Przywara -- Andre Przywara AMD-Operating System Research Center (OSRC), Dresden, Germany Tel: +49 351 277-84917 ----to satisfy European Law for business letters: AMD Saxony Limited Liability Company & Co. KG, Wilschdorfer Landstr. 101, 01109 Dresden, Germany Register Court Dresden: HRA 4896, General Partner authorized to represent: AMD Saxony LLC (Wilmington, Delaware, US) General Manager of AMD Saxony LLC: Dr. Hans-R. Deppe, Thomas McCoy --------------040302020202070401010701 Content-Type: text/x-patch; name="qemunuma_v2_monitor_numa.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="qemunuma_v2_monitor_numa.patch" # HG changeset patch # User Andre Przywara # Date 1229435568 -3600 # Node ID 4f0a8ac2d88ffffc1dcd82785c1620553baa86da # Parent 5a74bd76931b79713803795b3943aa8383946521 add -numa monitor command to repin guest nodes diff -r 5a74bd76931b -r 4f0a8ac2d88f monitor.c --- a/monitor.c Tue Dec 16 14:51:24 2008 +0100 +++ b/monitor.c Tue Dec 16 14:52:48 2008 +0100 @@ -39,6 +39,9 @@ #include "qemu-timer.h" #include "migration.h" #include "kvm.h" +#ifdef CONFIG_NUMA +#include +#endif //#define DEBUG //#define DEBUG_COMPLETION @@ -1285,6 +1288,9 @@ static void do_info_numa(void) { int i, j; +#ifndef CONFIG_NUMA + term_printf("NUMA placement support: not compiled\n"); +#endif term_printf("%d nodes\n", numnumanodes); for (i = 0; i < numnumanodes; i++) { term_printf("node %d cpus:", i); @@ -1292,7 +1298,40 @@ static void do_info_numa(void) if (node_to_cpus[i] & (1ULL << j)) term_printf(" %d", j); term_printf("\n"); term_printf("node %d size: %" PRId64 " MB\n", i, node_mem[i] >> 20); - } + term_printf("node %d host: ", i); + if (hostnodes[i] == (uint64_t)-1) term_printf("*\n"); else + term_printf("%" PRId64 "\n", hostnodes[i]); + } +} + +static void do_numa(const char *affinity) +{ +#ifdef CONFIG_NUMA + uint64_t newaff[MAX_NODES]; + int i; + unsigned long offset = 0; + + if (numnumanodes <= 0) term_printf("No NUMA nodes defined.\n"); else + if (numa_available() == -1) term_printf("Not a NUMA host.\n"); else + { + for (i = 0; i < numnumanodes; i++) newaff[i] = hostnodes[i]; + parse_numa_args(affinity, newaff, NULL, NULL, MAX_NODES, 0); + for (i = 0; i < numnumanodes; i++) { + if (newaff[i] != hostnodes[i]) { + hostnodes[i] = newaff[i]; + if (hostnodes[i] == (uint64_t)-1) + numa_tonodemask_memory (phys_ram_base + offset, + node_mem[i], &numa_all_nodes); + else + numa_tonode_memory(phys_ram_base + offset, + node_mem[i], hostnodes[i] % (numa_max_node() + 1)); + } + offset += node_mem[i]; + } + } +#else + term_printf ("NUMA host affinity support not compiled in\n"); +#endif } #ifdef CONFIG_PROFILER @@ -1514,6 +1553,8 @@ static const term_cmd_t term_cmds[] = { "value", "set maximum speed (in bytes) for migrations" }, { "balloon", "i", do_balloon, "target", "request VM to change it's memory allocation (in MB)" }, + { "numa", "s", do_numa, + "affinity", "change NUMA affinity" }, { NULL, NULL, }, }; --------------040302020202070401010701--