From: Li Wang <liwang@redhat.com>
To: ltp@lists.linux.it
Subject: [LTP] [PATCH v3 1/3] ltp/numa: add new test11
Date: Fri, 19 May 2017 16:25:17 +0800 [thread overview]
Message-ID: <20170519082519.9471-1-liwang@redhat.com> (raw)
Signed-off-by: Li Wang <liwang@redhat.com>
---
testcases/kernel/numa/README | 2 ++
testcases/kernel/numa/numa01.sh | 51 ++++++++++++++++++++++++++++++++--
testcases/kernel/numa/support_numa.c | 53 ++++++++++++++++++++++++++++++++++--
3 files changed, 101 insertions(+), 5 deletions(-)
diff --git a/testcases/kernel/numa/README b/testcases/kernel/numa/README
index 57b12f7..a5c3f1b 100644
--- a/testcases/kernel/numa/README
+++ b/testcases/kernel/numa/README
@@ -54,6 +54,8 @@ Verifies the numa_node_size api with hardware checking.
TestCase10:
Verifieds the NUMA migratepages policy.
+TestCase11:
+Verifies the hugepage memory allocated from the node we specify.
Pre-requisites
====================================================================================================================
diff --git a/testcases/kernel/numa/numa01.sh b/testcases/kernel/numa/numa01.sh
index f0f6139..69e5357 100755
--- a/testcases/kernel/numa/numa01.sh
+++ b/testcases/kernel/numa/numa01.sh
@@ -31,11 +31,12 @@
# Test #8: Verifies memhog #
# Test #9: Verifies numa_node_size api #
# Test #10:Verifies Migratepages #
+# Test #11:Verifies hugepage alloacted on specified node #
# #
##############################################################################
TST_ID="numa01"
-TST_CNT=10
+TST_CNT=11
TST_SETUP=setup
TST_TESTFUNC=test
TST_NEEDS_TMPDIR=1
@@ -83,11 +84,13 @@ setup()
{
export MB=$((1024*1024))
export PAGE_SIZE=$(getconf PAGE_SIZE)
+ export HPAGE_SIZE=$(awk '/Hugepagesize:/ {print $2}' /proc/meminfo)
# arguments to memory exercise program support_numa.c
ALLOC_1MB=1
SHARE_1MB=2
- PAUSE=3
+ HUGE_PAGE=3
+ PAUSE=4
total_nodes=0
@@ -399,4 +402,48 @@ test10()
tst_res TPASS "NUMA MIGRATEPAGES policy"
}
+# Verification of hugepage memory allocated on a node
+test11()
+{
+ Mem_huge=0
+ Sys_node=/sys/devices/system/node
+
+ if [ ! -d "/sys/kernel/mm/hugepages/" ]; then
+ tst_res TCONF "hugepage is not supported"
+ return
+ fi
+
+ for node in $nodes_list; do
+ Ori_hpgs=$(cat ${Sys_node}/node${node}/hugepages/hugepages-${HPAGE_SIZE}kB/nr_hugepages)
+ New_hpgs=$((Ori_hpgs + 1))
+ echo $New_hpgs >${Sys_node}/node${node}/hugepages/hugepages-${HPAGE_SIZE}kB/nr_hugepages
+
+ Chk_hpgs=$(cat ${Sys_node}/node${node}/hugepages/hugepages-${HPAGE_SIZE}kB/nr_hugepages)
+ if [ "$Chk_hpgs" -ne "$New_hpgs" ]; then
+ tst_res TCONF "hugepage is not enough to test"
+ return
+ fi
+
+ numactl --cpunodebind=$node --membind=$node support_numa $HUGE_PAGE &
+ pid=$!
+ wait_for_support_numa $pid
+
+ Mem_huge=$(echo $(numastat -p $pid |awk '/Huge/ {print $'$((node+2))'}'))
+ Mem_huge=$((${Mem_huge%.*} * 1024))
+
+ if [ "$Mem_huge" -lt "$HPAGE_SIZE" ]; then
+ tst_res TFAIL \
+ "NUMA memory allocated in node$node is less than expected"
+ kill -CONT $pid >/dev/null 2>&1
+ echo $Ori_hpgs >${Sys_node}/node${node}/hugepages/hugepages-${HPAGE_SIZE}kB/nr_hugepages
+ return
+ fi
+
+ kill -CONT $pid >/dev/null 2>&1
+ echo $Ori_hpgs >${Sys_node}/node${node}/hugepages/hugepages-${HPAGE_SIZE}kB/nr_hugepages
+ done
+
+ tst_res TPASS "NUMA local node hugepage memory allocated"
+}
+
tst_run
diff --git a/testcases/kernel/numa/support_numa.c b/testcases/kernel/numa/support_numa.c
index eaf63e3..97f3008 100644
--- a/testcases/kernel/numa/support_numa.c
+++ b/testcases/kernel/numa/support_numa.c
@@ -22,7 +22,7 @@
/* */
/* File: support_numa.c */
/* */
-/* Description: Allocates 1MB of memory and touches it to verify numa */
+/* Description: Allocates memory and touches it to verify numa */
/* */
/* Author: Sivakumar Chinnaiah Sivakumar.C@in.ibm.com */
/* */
@@ -52,16 +52,43 @@ static void help(void)
printf("Input: Describe input arguments to this program\n");
printf(" argv[1] == 1 then allocate 1MB of memory\n");
printf(" argv[1] == 2 then allocate 1MB of share memory\n");
- printf(" argv[1] == 3 then pause the program to catch sigint\n");
+ printf(" argv[1] == 3 then allocate 1HUGE PAGE SIZE of memory\n");
+ printf(" argv[1] == 4 then pause the program to catch sigint\n");
printf("Exit: On failure - Exits with non-zero value\n");
printf(" On success - exits with 0 exit value\n");
exit(1);
}
+static int read_hugepagesize(void)
+{
+ FILE *fp;
+ char line[BUFSIZ], buf[BUFSIZ];
+ int val;
+
+ fp = fopen("/proc/meminfo", "r");
+ if (fp == NULL) {
+ fprintf(stderr, "Failed to open /proc/meminfo");
+ return 0;
+ }
+
+ while (fgets(line, BUFSIZ, fp) != NULL) {
+ if (sscanf(line, "%64s %d", buf, &val) == 2)
+ if (strcmp(buf, "Hugepagesize:") == 0) {
+ fclose(fp);
+ return 1024 * val;
+ }
+ }
+
+ fclose(fp);
+ fprintf(stderr, "can't find \"%s\" in %s", "Hugepagesize:", "/proc/meminfo");
+
+ return 0;
+}
+
int main(int argc, char *argv[])
{
- int i, fd, rc;
+ int i, fd, rc, hpsz;
char *buf = NULL;
struct stat sb;
@@ -114,6 +141,26 @@ int main(int argc, char *argv[])
remove(TEST_SFILE);
break;
case 3:
+ hpsz = read_hugepagesize();
+ if (hpsz == 0)
+ exit(1);
+
+ buf = mmap(NULL, hpsz, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB,
+ -1, 0);
+
+ if (buf == MAP_FAILED) {
+ perror("mmap failed");
+ exit(1);
+ }
+
+ memset(buf, 'a', hpsz);
+
+ raise(SIGSTOP);
+
+ munmap(buf, hpsz);
+ break;
+ case 4:
raise(SIGSTOP);
break;
default:
--
2.9.3
next reply other threads:[~2017-05-19 8:25 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-19 8:25 Li Wang [this message]
2017-05-19 8:25 ` [LTP] [PATCH v3 2/3] ltp/numa: Kill the support_numa if FAILED Li Wang
2017-05-19 8:25 ` [LTP] [PATCH v3 3/3] ltp/numa: use string to describe operation Li Wang
2017-05-19 8:32 ` Li Wang
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=20170519082519.9471-1-liwang@redhat.com \
--to=liwang@redhat.com \
--cc=ltp@lists.linux.it \
/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.