[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 2/2] Add monitor command mem-nodes
From: |
Wanlong Gao |
Subject: |
[Qemu-devel] [PATCH 2/2] Add monitor command mem-nodes |
Date: |
Wed, 5 Jun 2013 11:58:25 +0800 |
Add monitor command mem-nodes to show the huge mapped
memory nodes locations.
(qemu) info mem-nodes
/proc/14132/fd/13: 00002aaaaac00000-00002aaaeac00000: node0
/proc/14132/fd/13: 00002aaaeac00000-00002aab2ac00000: node1
/proc/14132/fd/14: 00002aab2ac00000-00002aab2b000000: node0
/proc/14132/fd/14: 00002aab2b000000-00002aab2b400000: node1
Refer to the proposal of Eduardo and Daniel.
http://article.gmane.org/gmane.comp.emulators.kvm.devel/93476
Signed-off-by: Wanlong Gao <address@hidden>
---
monitor.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/monitor.c b/monitor.c
index eefc7f0..85c865f 100644
--- a/monitor.c
+++ b/monitor.c
@@ -74,6 +74,10 @@
#endif
#include "hw/lm32/lm32_pic.h"
+#if defined(CONFIG_NUMA)
+#include <numaif.h>
+#endif
+
//#define DEBUG
//#define DEBUG_COMPLETION
@@ -1759,6 +1763,38 @@ static void mem_info(Monitor *mon, const QDict *qdict)
}
#endif
+#if defined(CONFIG_NUMA)
+static void mem_nodes(Monitor *mon, const QDict *qdict)
+{
+ RAMBlock *block;
+ int prevnode, node;
+ unsigned long long c, start, area;
+ int fd;
+ int pid = getpid();
+ QTAILQ_FOREACH(block, &ram_list.blocks, next) {
+ if (!(fd = block->fd))
+ continue;
+ prevnode = -1;
+ start = 0;
+ area = (unsigned long long)block->host;
+ for (c = 0; c < block->length; c += TARGET_PAGE_SIZE) {
+ if (get_mempolicy(&node, NULL, 0, c + block->host,
+ MPOL_F_ADDR | MPOL_F_NODE) < 0)
+ continue;
+ if (node == prevnode)
+ continue;
+ if (prevnode != -1)
+ monitor_printf(mon, "/proc/%d/fd/%d: %016Lx-%016Lx: node%d\n",
+ pid, fd, start + area, c + area, prevnode);
+ prevnode = node;
+ start = c;
+ }
+ monitor_printf(mon, "/proc/%d/fd/%d: %016Lx-%016Lx: node%d\n",
+ pid, fd, start + area, c + area, prevnode);
+ }
+}
+#endif
+
#if defined(TARGET_SH4)
static void print_tlb(Monitor *mon, int idx, tlb_t *tlb)
@@ -2567,6 +2603,15 @@ static mon_cmd_t info_cmds[] = {
.mhandler.cmd = mem_info,
},
#endif
+#if defined(CONFIG_NUMA)
+ {
+ .name = "mem-nodes",
+ .args_type = "",
+ .params = "",
+ .help = "show the huge mapped memory nodes location",
+ .mhandler.cmd = mem_nodes,
+ },
+#endif
{
.name = "mtree",
.args_type = "",
--
1.8.3.rc2.10.g0c2b1cf
Re: [Qemu-devel] [PATCH 2/2] Add monitor command mem-nodes, Eduardo Habkost, 2013/06/05