On Thu, Jul 26, 2012 at 6:14 PM, Jan Stancek <jstancek@redhat.com> wrote:


----- Original Message -----
> From: "Caspar Zhang" <caspar@casparzhang.com>
> To: "Jan Stancek" <jstancek@redhat.com>
> Cc: ltp-list@lists.sourceforge.net
> Sent: Friday, 20 July, 2012 1:02:47 PM
> Subject: Re: [LTP] [PATCH 0/2] numa_helper: get nodes with mem/cpu/both
>
> On 07/20/2012 06:19 PM, Jan Stancek wrote:
> > numa_helper has been used for syscalls testcases, which
> > care about nodes with memory. Based on discussion here:
> > http://article.gmane.org/gmane.linux.ltp/16325
> > it was deemed, that 'flag' extension would be useful,
> > to allow tests to ask for nodes with memory/cpu/both.
> >
> > This patch series is introducing flag to get_allowed_nodes().
> >
> > For example, a config like this one:
> >    # numactl -H
> >    available: 3 nodes (2,4-5)
> >    node 2 cpus: 0
> >    node 2 size: 511 MB
> >    node 2 free: 88 MB
> >    node 4 cpus:
> >    node 4 size: 256 MB
> >    node 4 free: 34 MB
> >    node 5 cpus:
> >    node 5 size: 255 MB
> >    node 5 free: 59 MB
> >
> > would return:
> >    nodes (flag=0): 2 4 5 (any)
> >    nodes (flag=1): 2 4 5 (mem)
> >    nodes (flag=2): 2     (cpus)
> >    nodes (flag=3): 2     (mem and cpus)
> >
> > Tested with:
> > numactl-devel-0.9.8-7.el5
> > numactl-devel-2.0.3-9.el6
> > numactl-devel-2.0.7-6.el7
> >
> > numa_node_to_cpus() is broken in older libnuma < 1, so cpumap
> > is used instead.
> >
> > Next step (not part of this series) is to move it outside
> > syscalls area, so it can be used by other testcases.
> >
> > Jan Stancek (2):
> >    numa_helper: add flag to get_allowed_nodes()
> >    update testcases to use flag for get_allowed_nodes()
> >
> >   .../syscalls/get_mempolicy/get_mempolicy01.c       |    5 +-
> >   testcases/kernel/syscalls/mbind/mbind01.c          |    5 +-
> >   .../kernel/syscalls/move_pages/move_pages02.c      |    5 +-
> >   .../kernel/syscalls/move_pages/move_pages03.c      |    5 +-
> >   .../kernel/syscalls/move_pages/move_pages04.c      |    5 +-
> >   .../kernel/syscalls/move_pages/move_pages05.c      |    5 +-
> >   .../kernel/syscalls/move_pages/move_pages06.c      |    5 +-
> >   .../kernel/syscalls/move_pages/move_pages07.c      |    5 +-
> >   .../kernel/syscalls/move_pages/move_pages08.c      |    5 +-
> >   .../kernel/syscalls/move_pages/move_pages09.c      |    5 +-
> >   .../kernel/syscalls/move_pages/move_pages10.c      |    5 +-
> >   .../kernel/syscalls/move_pages/move_pages11.c      |    5 +-
> >   .../syscalls/move_pages/move_pages_support.c       |    8 +-
> >   testcases/kernel/syscalls/numa/lib/numa_helper.c   |  211
> >   +++++++++++++++-----
> >   testcases/kernel/syscalls/numa/lib/numa_helper.h   |    8 +-
> >   15 files changed, 203 insertions(+), 84 deletions(-)
> >
> >
>
> Thanks Jan for your patches! I want to test the patchset on all
> arches
> and on major releases, so would you mind if I hold on pushing until I
> finish the testing next week?
>
> Also during that period, any comments from anyone is welcomed.

I came across one issue. This happens on some arches, which do not support
numa/get_mempolicy.

What happens with v1 of this patch is:
# ./mbind01
mbind01     0  TINFO  :  (case00) START
mbind01     1  TBROK  :  get_allowed_nodes(): -3: errno=EINVAL(22): Invalid argument
mbind01     2  TBROK  :  Remaining cases broken
which is bad, because it should end with TCONF stating, that numa is not supported.

ya, I encountered this too. I have a patch for it, and will send it along with other numa related patches.

Caspar
 

What happens with current HEAD depends on libnuma version. The problem is the
same here: we use libnuma functions in numa_helper even when numa is not supported.

mbind and get_mempolicy testcases (and numa_helper) check only for HAVE_NUMA_H, etc.
but they don't check numa_available().

Regards,
Jan

>
> Thanks,
> Caspar
>
>