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 <gaowanl...@cn.fujitsu.com> --- 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