All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony Liguori <aliguori@us.ibm.com>
To: Wanlong Gao <gaowanlong@cn.fujitsu.com>, qemu-devel@nongnu.org
Cc: pbonzini@redhat.com, ehabkost@redhat.com, andre.przywara@amd.com
Subject: Re: [Qemu-devel] [PATCH 2/2] Add monitor command mem-nodes
Date: Wed, 05 Jun 2013 07:57:42 -0500	[thread overview]
Message-ID: <874ndc67g9.fsf@codemonkey.ws> (raw)
In-Reply-To: <1370404705-4620-2-git-send-email-gaowanlong@cn.fujitsu.com>

Wanlong Gao <gaowanlong@cn.fujitsu.com> writes:

> 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

This creates an ABI that we don't currently support.  Memory hotplug or
a variety of things can break this mapping and then we'd have to provide
an interface to describe that the mapping was broken.

Also, it only works with hugetlbfs which is probbably not widely used
given the existance of THP.

I had hoped that we would get proper userspace interfaces for describing
memory groups but that appears to have stalled out.

Does anyone know if this is still on the table?

If we can't get a proper kernel interface, then perhaps we need to add
full libnuma support but that would really be unfortunate...

Regards,

Anthony Liguori

>
> Refer to the proposal of Eduardo and Daniel.
> http://article.gmane.org/gmane.comp.emulators.kvm.devel/93476
>
> Signed-off-by: Wanlong Gao <gaowanlong@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

  parent reply	other threads:[~2013-06-05 13:00 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-05  3:58 [Qemu-devel] [PATCH 1/2] Add Linux libnuma detection Wanlong Gao
2013-06-05  3:58 ` [Qemu-devel] [PATCH 2/2] Add monitor command mem-nodes Wanlong Gao
2013-06-05 12:39   ` Eric Blake
2013-06-05 12:57   ` Anthony Liguori [this message]
2013-06-05 15:54     ` Eduardo Habkost
2013-06-06  9:30       ` Wanlong Gao
2013-06-06 16:15         ` Eduardo Habkost
2013-06-14  1:04       ` Anthony Liguori
2013-06-14 13:56         ` Eduardo Habkost
2013-06-05 13:46   ` Eduardo Habkost
2013-06-11  7:22     ` Wanlong Gao
2013-06-11 13:40       ` Eduardo Habkost
2013-06-13  1:40         ` Wanlong Gao
2013-06-13 12:50           ` Eduardo Habkost
2013-06-13 22:32             ` Paolo Bonzini
2013-06-14  1:05               ` Anthony Liguori
2013-06-14  1:16                 ` Wanlong Gao
2013-06-15 17:23                   ` Paolo Bonzini
2013-06-05 10:02 ` [Qemu-devel] [PATCH 1/2] Add Linux libnuma detection Andreas Färber

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=874ndc67g9.fsf@codemonkey.ws \
    --to=aliguori@us.ibm.com \
    --cc=andre.przywara@amd.com \
    --cc=ehabkost@redhat.com \
    --cc=gaowanlong@cn.fujitsu.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.