ltp/numa: add new test11
PATCH v2 1/1 ltp/numa: add new test11
---
Notes:
V1 --> V2
* tst_brk --> tst_res, we just hope the testcase11 skip but exit
* allocate '$Ori_hpgs + 1' hugepages then check if allocation success
* simplify arithmetic operation
* make sure 'hpsz != 0' before mmap() funciton in main()
* fprintf() --> perror()
* coding style correction
testcases/kernel/numa/README | 2 ++ testcases/kernel/numa/numa01.sh | 48 ++++++++++++++++++++++++++++++-- testcases/kernel/numa/support_numa.c | 53 ++++++++++++++++++++++++++++++++++-- 3 files changed, 98 insertions(+), 5 deletions(-)
testcases/kernel/numa/README +2 -0
@@ -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 ====================================================================================================================
testcases/kernel/numa/numa01.sh +46 -2
72 lines not on this page · raw message
testcases/kernel/numa/support_numa.c +50 -3
79 lines not on this page · raw message
Signature · 1 line
1.8.3.1
PATCH v2 1/1 ltp/numa: add new test11
ping
Quoted 202 lines · Li Wang
Signed-off-by Li Wang <[email protected]>---
Notes:
V1 --> V2*
tst_brk-->tst_res, we just hope the testcase11 skip but exit
* allocate '$Ori_hpgs + 1' hugepages then check if allocation success
* simplify arithmetic operation
* make sure 'hpsz != 0' beforemmap()funciton inmain()
*fprintf()-->perror()
* coding style correctiontestcases/kernel/numa/README | 2 ++ testcases/kernel/numa/numa01.sh | 48 ++++++++++++++++++++++++++++++-- testcases/kernel/numa/support_numa.c | 53 ++++++++++++++++++++++++++++++++++-- 3 files changed, 98 insertions(+), 5 deletions(-)testcases/kernel/numa/README +2
-0@@ -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 ====================================================================================================================testcases/kernel/numa/numa01.sh +46
-2@@ -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=$(cat /proc/meminfo |grep "Hugepagesize:" |awk '{print $2}') # 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,45 @@ test10() tst_res TPASS "NUMA MIGRATEPAGES policy" } +# Verification of hugepage memory allocated on a node +test11() +{ + Mem_huge=0 + + 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/devices/system/node/node${node}/hugepages/hugepages-${HPAGE_SIZE}kB/nr_hugepages) + New_hpgs=$((Ori_hpgs + 1)) + echo $New_hpgs >/sys/devices/system/node/node${node}/hugepages/hugepages-${HPAGE_SIZE}kB/nr_hugepages + + Chk_hpgs=$(cat /sys/devices/system/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 |grep '^Huge' |awk '{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" + return + fi + + kill -CONT $pid >/dev/null 2>&1 + echo $Ori_hpgs >/sys/devices/system/node/node${node}/hugepages/hugepages-${HPAGE_SIZE}kB/nr_hugepages + done + + tst_res TPASS "NUMA local node hugepage memory allocated" +} + tst_runtestcases/kernel/numa/support_numa.c +50
-4@@ -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 [email protected] */ /* */ @@ -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 : --1.8.3.1
--
Mailing list info: https://lists.linux.it/listinfo/ltp
Signature · 3 lines
Regards, Li Wang Email: [email protected]
PATCH v2 1/1 ltp/numa: add new test11
In reply to Li Wangtestcases/kernel/numa/numa01.sh setup() · line 87
Quoted 11 lines
TST_ID="numa01"
testcases/kernel/numa/numa01.sh +2
-1-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=$(cat /proc/meminfo |grep "Hugepagesize:" |awk '{print $2}')
awk '/Hugepagesize:/ {print $2}' /proc/meminfo
And we should fix the rest of the awk statements in the script as well (in a separate patch).
Quoted 29 lines
testcases/kernel/numa/numa01.sh +18
-1# 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,45 @@ test10() tst_res TPASS "NUMA MIGRATEPAGES policy" } +# Verification of hugepage memory allocated on a node +test11() +{ + Mem_huge=0 + + 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/devices/system/node/node${node}/hugepages/hugepages-${HPAGE_SIZE}kB/nr_hugepages) + New_hpgs=$((Ori_hpgs + 1)) + echo $New_hpgs >/sys/devices/system/node/node${node}/hugepages/hugepages-${HPAGE_SIZE}kB/nr_hugepages + + Chk_hpgs=$(cat /sys/devices/system/node/node${node}/hugepages/hugepages-${HPAGE_SIZE}kB/nr_hugepages)
testcases/kernel/numa/numa01.sh test10() · line 430
Quoted 10 lines
testcases/kernel/numa/numa01.sh +10
-0+ 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 |grep '^Huge' |awk '{print $'$((node+2))'}'))
Here as well, no need to use grep.
testcases/kernel/numa/numa01.sh test10() · line 435
Quoted 5 lines
testcases/kernel/numa/numa01.sh +5
-0+ 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"
We should restore the /sys/ file and kill the support_numa process here as well.
Quoted 103 lines
testcases/kernel/numa/numa01.sh +10
-0+ return + fi + + kill -CONT $pid >/dev/null 2>&1 + echo $Ori_hpgs >/sys/devices/system/node/node${node}/hugepages/hugepages-${HPAGE_SIZE}kB/nr_hugepages + done + + tst_res TPASS "NUMA local node hugepage memory allocated" +} + tst_runtestcases/kernel/numa/support_numa.c +50
-3@@ -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 [email protected] */ /* */ @@ -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 :Signature · 5 lines
1.8.3.1 -- Mailing list info: https://lists.linux.it/listinfo/ltp
Signature · 2 lines
Cyril Hrubis [email protected]
PATCH v2 1/1 ltp/numa: add new test11
Quoted 14 lines · Cyril Hrubis
testcases/kernel/numa/numa01.sh setup() · line 87
Quoted 11 lines
TST_ID="numa01"
testcases/kernel/numa/numa01.sh +2
-1-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=$(cat /proc/meminfo |grep "Hugepagesize:" |awk '{print $2}')awk '/Hugepagesize:/ {print $2}'
/proc/meminfo
Quoted 2 lines
And we should fix the rest of the awk statements in the script as well (in a separate patch).
Sure.
Quoted 34 lines
Quoted 34 lines
testcases/kernel/numa/numa01.sh +22
-1# 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,45 @@ test10() tst_res TPASS "NUMA MIGRATEPAGES policy" } +# Verification of hugepage memory allocated on a node +test11() +{ + Mem_huge=0 + + 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/devices/system/node/node${node}/hugepages/hugepages-${HPAGE_SIZE}kB/nr_hugepages) + New_hpgs=$((Ori_hpgs + 1)) + echo $New_hpgs >/sys/devices/system/node/node${node}/hugepages/hugepages-${HPAGE_SIZE}kB/nr_hugepages + + Chk_hpgs=$(cat /sys/devices/system/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
Quoted 8 lines
testcases/kernel/numa/numa01.sh test10() · line 430
Quoted 6 lines
testcases/kernel/numa/numa01.sh +6
-0+ + numactl --cpunodebind=$node --membind=$node support_numa $HUGE_PAGE & + pid=$! + wait_for_support_numa $pid + + Mem_huge=$(echo $(numastat -p $pid |grep '^Huge' |awk '{print $'$((node+2))'}'))Here as well, no need to use grep.
Sure.
Quoted 9 lines
testcases/kernel/numa/numa01.sh test10() · line 435
Quoted 6 lines
testcases/kernel/numa/numa01.sh +5
-0+ 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"We should restore the
/sys/file and kill thesupport_numaprocess here as well.
Good point. The remains of testcase have not do that too, let me add all of that in a new patch.
Signature · 3 lines
Regards, Li Wang Email: [email protected]