public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
* [LTP] [PATCH v2 1/4] add libnuma_helper
@ 2012-05-29  8:30 Jan Stancek
  0 siblings, 0 replies; 2+ messages in thread
From: Jan Stancek @ 2012-05-29  8:30 UTC (permalink / raw)
  To: ltp-list; +Cc: Jeffrey Burke

[-- Attachment #1: Type: text/plain, Size: 837 bytes --]


A library to share NUMA helper functions shared by
multiple testcases.

Signed-off-by: Jan Stancek <jstancek@redhat.com>
---
 testcases/kernel/syscalls/numa/Makefile          |   22 ++++
 testcases/kernel/syscalls/numa/Makefile.inc      |   27 +++++
 testcases/kernel/syscalls/numa/lib/Makefile      |   26 ++++
 testcases/kernel/syscalls/numa/lib/numa_helper.c |  135 ++++++++++++++++++++++
 testcases/kernel/syscalls/numa/lib/numa_helper.h |   34 ++++++
 5 files changed, 244 insertions(+), 0 deletions(-)
 create mode 100644 testcases/kernel/syscalls/numa/Makefile
 create mode 100644 testcases/kernel/syscalls/numa/Makefile.inc
 create mode 100644 testcases/kernel/syscalls/numa/lib/Makefile
 create mode 100644 testcases/kernel/syscalls/numa/lib/numa_helper.c
 create mode 100644 testcases/kernel/syscalls/numa/lib/numa_helper.h



[-- Attachment #2: 0001-add-libnuma_helper.a.patch --]
[-- Type: text/x-patch, Size: 8907 bytes --]

diff --git a/testcases/kernel/syscalls/numa/Makefile b/testcases/kernel/syscalls/numa/Makefile
new file mode 100644
index 0000000..b38c5b2
--- /dev/null
+++ b/testcases/kernel/syscalls/numa/Makefile
@@ -0,0 +1,22 @@
+#
+#  Copyright (C) 2012 Linux Test Project, Inc.
+#
+#  This program is free software;  you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY;  without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+#  the GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program;  if not, write to the Free Software
+#  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+
+top_srcdir		?= ../../../..
+
+include $(top_srcdir)/include/mk/env_pre.mk
+include $(top_srcdir)/include/mk/generic_trunk_target.mk
diff --git a/testcases/kernel/syscalls/numa/Makefile.inc b/testcases/kernel/syscalls/numa/Makefile.inc
new file mode 100644
index 0000000..59c2f9e
--- /dev/null
+++ b/testcases/kernel/syscalls/numa/Makefile.inc
@@ -0,0 +1,27 @@
+#
+#  Copyright (C) 2012 Linux Test Project, Inc.
+#
+#  This program is free software;  you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY;  without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+#  the GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program;  if not, write to the Free Software
+#  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+
+CPPFLAGS		+= $(NUMA_CPPFLAGS) -I../numa/lib/
+LIBDIR			:= ../numa/lib
+LIB			:= $(LIBDIR)/libnuma_helper.a
+MAKE_DEPS		+= $(LIB)
+LDLIBS			+= $(NUMA_LIBS) -lnuma_helper -lltp
+LDFLAGS			+= -L$(LIBDIR)
+
+$(LIB): $(LIBDIR)
+		$(MAKE) -C $^ -f "$(abs_srcdir)/$^/Makefile" all
diff --git a/testcases/kernel/syscalls/numa/lib/Makefile b/testcases/kernel/syscalls/numa/lib/Makefile
new file mode 100644
index 0000000..d4a6f41
--- /dev/null
+++ b/testcases/kernel/syscalls/numa/lib/Makefile
@@ -0,0 +1,26 @@
+#
+#  Copyright (C) 2012 Linux Test Project, Inc.
+#
+#  This program is free software;  you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY;  without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+#  the GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program;  if not, write to the Free Software
+#  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+
+top_srcdir		?= ../../../../..
+
+include $(top_srcdir)/include/mk/env_pre.mk
+
+CPPFLAGS		+= -I../../../include
+LIB			:= libnuma_helper.a
+
+include $(top_srcdir)/include/mk/lib.mk
diff --git a/testcases/kernel/syscalls/numa/lib/numa_helper.c b/testcases/kernel/syscalls/numa/lib/numa_helper.c
new file mode 100644
index 0000000..e50c191
--- /dev/null
+++ b/testcases/kernel/syscalls/numa/lib/numa_helper.c
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2012 Linux Test Project, Inc.
+ *
+ * This program is free software;  you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY;  without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+ * the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program;  if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include "config.h"
+#include <errno.h>
+#if HAVE_NUMA_H
+#include <numa.h>
+#endif
+#if HAVE_NUMAIF_H
+#include <numaif.h>
+#endif
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include "test.h"
+#include "usctest.h"
+#include "safe_macros.h"
+#include "numa_helper.h"
+#include "linux_syscall_numbers.h"
+
+/*
+ * get_allowed_nodes_arr - get number and array of available nodes
+ * @num_allowed_nodes: pointer where number of available nodes will be stored
+ * @allowed_nodes: array of available node ids, this is MPOL_F_MEMS_ALLOWED
+ *                 node bitmask compacted (without holes), so that each field
+ *                 contains node number. If NULL only num_allowed_nodes is
+ *                 returned, otherwise it cotains new allocated array,
+ *                 which caller is responsible to free.
+ * RETURNS:
+ *     0 on success
+ *    -1 on allocation failure
+ *    -2 on get_mempolicy failure
+ */
+int get_allowed_nodes_arr(int *num_allowed_nodes, int **allowed_nodes)
+{
+#if HAVE_NUMA_H
+	int i;
+	struct bitmask *allowed_nodemask = NULL;
+#endif
+	*num_allowed_nodes = 0;
+	if (allowed_nodes)
+		*allowed_nodes = NULL;
+
+#if HAVE_NUMA_H
+	if ((allowed_nodemask = numa_allocate_nodemask()) == NULL)
+		return -1;
+
+	if (allowed_nodes) {
+		*allowed_nodes = malloc(sizeof(int)*allowed_nodemask->size);
+		if (*allowed_nodes == NULL)
+			return -1;
+	}
+
+	/*
+	 * avoid numa_get_mems_allowed(), because of bug in getpol()
+	 * utility function in older versions:
+	 * http://www.spinics.net/lists/linux-numa/msg00849.html
+	 */
+	if (syscall(__NR_get_mempolicy, NULL, allowed_nodemask->maskp,
+		allowed_nodemask->size, 0, MPOL_F_MEMS_ALLOWED) < 0) {
+		numa_bitmask_free(allowed_nodemask);
+		if (allowed_nodes) {
+			free(*allowed_nodes);
+			*allowed_nodes = NULL;
+		}
+		return -2;
+	}
+
+	for (i = 0; i <	allowed_nodemask->size; i++) {
+		if (numa_bitmask_isbitset(allowed_nodemask, i)) {
+			if (allowed_nodes)
+				(*allowed_nodes)[*num_allowed_nodes] = i;
+			(*num_allowed_nodes)++;
+		}
+	}
+	numa_bitmask_free(allowed_nodemask);
+#endif
+	return 0;
+}
+
+/*
+ * get_allowed_nodes - convenience function to get fixed number of nodes
+ * @count: how many nodes to get
+ * @...: int pointers, where node ids will be stored
+ * RETURNS:
+ *     0 on success
+ *    -1 on allocation failure
+ *    -2 on get_mempolicy failure
+ *    -3 on not enough allowed nodes
+ */
+int get_allowed_nodes(int count, ...)
+{
+	int ret;
+	int i, *nodep;
+	va_list ap;
+	int num_nodes = 0;
+	int *nodes = NULL;
+
+	if ((ret = get_allowed_nodes_arr(&num_nodes, &nodes)) < 0)
+		return ret;
+
+	va_start(ap, count);
+	for (i = 0; i < count; i++) {
+		nodep = va_arg(ap, int *);
+		if (i < num_nodes) {
+			*nodep = nodes[i];
+		} else {
+			ret = -3;
+			errno = EINVAL;
+			break;
+		}
+	}
+	free(nodes);
+	va_end(ap);
+
+	return ret;
+}
diff --git a/testcases/kernel/syscalls/numa/lib/numa_helper.h b/testcases/kernel/syscalls/numa/lib/numa_helper.h
new file mode 100644
index 0000000..73b6513
--- /dev/null
+++ b/testcases/kernel/syscalls/numa/lib/numa_helper.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2012 Linux Test Project, Inc.
+ *
+ * This program is free software;  you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY;  without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+ * the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program;  if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef NUMA_HELPER_H
+#define NUMA_HELPER_H
+
+#include "config.h"
+#if HAVE_NUMA_H
+#include <numa.h>
+#endif
+#if HAVE_NUMAIF_H
+#include <numaif.h>
+#endif
+
+int get_allowed_nodes_arr(int *num_allowed_nodes, int **allowed_nodes);
+int get_allowed_nodes(int count, ...);
+
+#endif
+


[-- Attachment #3: Type: text/plain, Size: 395 bytes --]

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/

[-- Attachment #4: Type: text/plain, Size: 155 bytes --]

_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

^ permalink raw reply related	[flat|nested] 2+ messages in thread
* [LTP] [PATCH v2 0/4] dont use hardcoded NUMA node ids
@ 2012-06-28  9:03 Jan Stancek
  2012-06-28  9:03 ` [LTP] [PATCH v2 1/4] add libnuma_helper Jan Stancek
  0 siblings, 1 reply; 2+ messages in thread
From: Jan Stancek @ 2012-06-28  9:03 UTC (permalink / raw)
  To: ltp-list

[-- Attachment #1: Type: text/plain, Size: 4243 bytes --]


Changes in v2:
get_allowed_pages()
- removed tst_resm(TFAIL,..)
- added break
- for ret == -3, set errno to EINVAL
move_pages_support.c
- check return value from get_allowed_nodes_arr()
mbind, get_mempolicy, move_pages
- removed curly brackets in single statement ifs

This patch series is a combination of:
[PATCH v3] mbind01, get_mempolicy01: dont use hardcoded node 0
[PATCH 1/2] move_pages_support: use only allowed nodes
[PATCH 2/2] move_pages: dont use hardcoded node numbers

so that all testcases use same shared code, which resides in libnuma_helper.a.
This library defines get_allowed_nodes() and get_allowed_nodes_arr() functions
to obtain list of nodes tests can use.

I tested it with following setups. Note that setup 4 and 5 will
end with TCONF as there is only 1 node with memory.

1.
# numactl -H
available: 8 nodes (2,4-10)
node 2 cpus: 0
node 2 size: 127 MB
node 2 free: 9 MB
node 4 cpus:
node 4 size: 128 MB
node 4 free: 9 MB
node 5 cpus:
node 5 size: 128 MB
node 5 free: 64 MB
node 6 cpus:
node 6 size: 128 MB
node 6 free: 121 MB
node 7 cpus:
node 7 size: 128 MB
node 7 free: 121 MB
node 8 cpus:
node 8 size: 128 MB
node 8 free: 121 MB
node 9 cpus:
node 9 size: 128 MB
node 9 free: 121 MB
node 10 cpus:
node 10 size: 127 MB
node 10 free: 123 MB

2.
# numactl -H
available: 4 nodes (0-3)
node 0 cpus: 0 1 2 3 4 5
node 0 size: 2047 MB
node 0 free: 564 MB
node 1 cpus: 6 7 8 9 10 11
node 1 size: 2046 MB
node 1 free: 451 MB
node 2 cpus: 18 19 20 21 22 23
node 2 size: 2048 MB
node 2 free: 595 MB
node 3 cpus: 12 13 14 15 16 17
node 3 size: 2048 MB
node 3 free: 236 MB
node distances:
node   0   1   2   3 
  0:  10  16  16  16 
  1:  16  10  16  16 
  2:  16  16  10  16 
  3:  16  16  16  10

3.
# numactl -H
available: 2 nodes (2-3)
node 2 cpus: 0
node 2 size: 511 MB
node 2 free: 154 MB
node 3 cpus:
node 3 size: 511 MB
node 3 free: 490 MB


4.
# numactl -H
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
node 0 size: 0 MB
node 0 free: 0 MB
node 1 cpus:
node 1 size: 12288 MB
node 1 free: 9689 MB
node distances:
node   0   1 
  0:  10  40 
  1:  40  10 

5.
# numactl -H
available: 1 nodes (0)
node 0 cpus: 0
node 0 size: 1023 MB
node 0 free: 654 MB
node distances:
node   0 
  0:  10 

Jan Stancek (4):
  add libnuma_helper
  mbind01: dont use hardcoded NUMA node ids
  get_mempolicy01: dont use hardcoded NUMA node ids
  move_pages: dont use hardcoded NUMA node ids

 testcases/kernel/syscalls/get_mempolicy/Makefile   |    7 +-
 .../syscalls/get_mempolicy/get_mempolicy01.c       |    8 +-
 testcases/kernel/syscalls/mbind/Makefile           |    3 +-
 testcases/kernel/syscalls/mbind/mbind01.c          |    9 +-
 testcases/kernel/syscalls/move_pages/Makefile      |    5 +-
 .../kernel/syscalls/move_pages/move_pages02.c      |   11 +-
 .../kernel/syscalls/move_pages/move_pages03.c      |   11 +-
 .../kernel/syscalls/move_pages/move_pages04.c      |   11 +-
 .../kernel/syscalls/move_pages/move_pages05.c      |   11 +-
 .../kernel/syscalls/move_pages/move_pages06.c      |    9 +-
 .../kernel/syscalls/move_pages/move_pages07.c      |   11 +-
 .../kernel/syscalls/move_pages/move_pages08.c      |    9 +-
 .../kernel/syscalls/move_pages/move_pages09.c      |    7 +-
 .../kernel/syscalls/move_pages/move_pages10.c      |   11 +-
 .../kernel/syscalls/move_pages/move_pages11.c      |   11 +-
 .../syscalls/move_pages/move_pages_support.c       |   44 +++++--
 .../syscalls/move_pages/move_pages_support.h       |    1 +
 testcases/kernel/syscalls/numa/Makefile            |   22 +++
 testcases/kernel/syscalls/numa/Makefile.inc        |   27 ++++
 testcases/kernel/syscalls/numa/lib/Makefile        |   26 ++++
 testcases/kernel/syscalls/numa/lib/numa_helper.c   |  135 ++++++++++++++++++++
 testcases/kernel/syscalls/numa/lib/numa_helper.h   |   34 +++++
 22 files changed, 361 insertions(+), 62 deletions(-)
 create mode 100644 testcases/kernel/syscalls/numa/Makefile
 create mode 100644 testcases/kernel/syscalls/numa/Makefile.inc
 create mode 100644 testcases/kernel/syscalls/numa/lib/Makefile
 create mode 100644 testcases/kernel/syscalls/numa/lib/numa_helper.c
 create mode 100644 testcases/kernel/syscalls/numa/lib/numa_helper.h

[-- Attachment #2: Type: text/plain, Size: 395 bytes --]

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/

[-- Attachment #3: Type: text/plain, Size: 155 bytes --]

_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2012-06-28  9:03 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-29  8:30 [LTP] [PATCH v2 1/4] add libnuma_helper Jan Stancek
  -- strict thread matches above, loose matches on Subject: below --
2012-06-28  9:03 [LTP] [PATCH v2 0/4] dont use hardcoded NUMA node ids Jan Stancek
2012-06-28  9:03 ` [LTP] [PATCH v2 1/4] add libnuma_helper Jan Stancek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox