From: tangchen <tan...@cn...> - 2011-08-02 03:59:07
|
hi, I am sorry for replying your comments so late. Here, I seperate all the code into 6 patches. The purpose of this patch set is to automatically mount hugetlbfs for hugemmap tests, so that users don't need to mount hugetlbfs themselves before testing. I made a new library, including some common functions, mounting hugetlbfs and allocating hugepages for test programs. And testcase hugemmap01 ~ hugemmap04 used these functions to mount hugetlbfs before testing. Please comment! Thanks:) -- Best Regards, Tang chen |
From: tangchen <tan...@cn...> - 2011-08-16 07:59:49
|
hi, I am sorry for replying your comments so late. The purpose of this patch set is to automatically mount hugetlbfs for hugemmap tests, so that users don't need to mount hugetlbfs themselves before testing. And this time, the library is not in a seperate directory, but in a .c file in the same directory with testcases. And I have the Makefile link the testcases along with it. All the other comments are followed. Here is the new patch set, please comment! Thanks.:) -- Best Regards, Tang chen |
From: tangchen <tan...@cn...> - 2011-11-23 03:09:11
|
hi, Here is my lastest 6 patches. The purpose of this patch set is to automatically mount hugetlbfs for hugemmap tests, so that users don't need to mount hugetlbfs themselves before testing. I made a new library, including some common functions, mounting hugetlbfs and allocating hugepages for test programs. And testcase hugemmap01 ~ hugemmap04 used these functions to mount hugetlbfs before testing. Please comment! Thanks:) -- Best Regards, Tang chen |
From: tangchen <tan...@cn...> - 2011-11-23 03:19:13
|
The hugetlbfs will be mounted automatically when doing hugemmap tests, so -H option is no longer needed. Signed-off-by: Tang Chen <tan...@cn...> --- runtest/hugetlb | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/runtest/hugetlb b/runtest/hugetlb index af45868..641c2a6 100644 --- a/runtest/hugetlb +++ b/runtest/hugetlb @@ -1,7 +1,7 @@ -hugemmap01 hugemmap01 -H/tmp -hugemmap02 hugemmap02 -H/tmp -c10 -hugemmap03 hugemmap03 -H/tmp -I2 -c10 -hugemmap04 hugemmap04 -H/tmp +hugemmap01 hugemmap01 +hugemmap02 hugemmap02 -c10 +hugemmap03 hugemmap03 -I2 -c10 +hugemmap04 hugemmap04 hugemmap05 hugemmap05 hugemmap05_1 hugemmap05 -m hugemmap05_2 hugemmap05 -s -- 1.7.1 -- Best Regards, Tang chen |
From: tangchen <tan...@cn...> - 2011-11-23 03:21:59
|
hi, Please ignore this. Thanks. On 11/23/2011 11:17 AM, tangchen wrote: > The hugetlbfs will be mounted automatically when doing hugemmap tests, so -H option is no longer needed. > > Signed-off-by: Tang Chen <tan...@cn...> > --- > runtest/hugetlb | 8 ++++---- > 1 files changed, 4 insertions(+), 4 deletions(-) > > diff --git a/runtest/hugetlb b/runtest/hugetlb > index af45868..641c2a6 100644 > --- a/runtest/hugetlb > +++ b/runtest/hugetlb > @@ -1,7 +1,7 @@ > -hugemmap01 hugemmap01 -H/tmp > -hugemmap02 hugemmap02 -H/tmp -c10 > -hugemmap03 hugemmap03 -H/tmp -I2 -c10 > -hugemmap04 hugemmap04 -H/tmp > +hugemmap01 hugemmap01 > +hugemmap02 hugemmap02 -c10 > +hugemmap03 hugemmap03 -I2 -c10 > +hugemmap04 hugemmap04 > hugemmap05 hugemmap05 > hugemmap05_1 hugemmap05 -m > hugemmap05_2 hugemmap05 -s -- Best Regards, Tang chen |
From: tangchen <tan...@cn...> - 2011-11-23 03:22:11
|
The hugetlbfs will be mounted automatically when doing hugemmap tests, so -H option is no longer needed. Signed-off-by: Tang Chen <tan...@cn...> --- runtest/hugetlb | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/runtest/hugetlb b/runtest/hugetlb index af45868..641c2a6 100644 --- a/runtest/hugetlb +++ b/runtest/hugetlb @@ -1,7 +1,7 @@ -hugemmap01 hugemmap01 -H/tmp -hugemmap02 hugemmap02 -H/tmp -c10 -hugemmap03 hugemmap03 -H/tmp -I2 -c10 -hugemmap04 hugemmap04 -H/tmp +hugemmap01 hugemmap01 +hugemmap02 hugemmap02 -c10 +hugemmap03 hugemmap03 -I2 -c10 +hugemmap04 hugemmap04 hugemmap05 hugemmap05 hugemmap05_1 hugemmap05 -m hugemmap05_2 hugemmap05 -s -- 1.7.1 -- Best Regards, Tang chen |
From: tangchen <tan...@cn...> - 2011-11-23 03:23:56
|
This library includes a set of functions used to mount hugetlbfs automatically when doing the hugemmap tests. Signed-off-by: Tang Chen <tan...@cn...> --- testcases/kernel/mem/hugetlb/hugemmap/Makefile | 6 ++- testcases/kernel/mem/hugetlb/hugemmap/libmnt.c | 58 ++++++++++++++++++++++++ testcases/kernel/mem/hugetlb/hugemmap/libmnt.h | 25 ++++++++++ 3 files changed, 88 insertions(+), 1 deletions(-) create mode 100644 testcases/kernel/mem/hugetlb/hugemmap/libmnt.c create mode 100644 testcases/kernel/mem/hugetlb/hugemmap/libmnt.h diff --git a/testcases/kernel/mem/hugetlb/hugemmap/Makefile b/testcases/kernel/mem/hugetlb/hugemmap/Makefile index a1ba46e..e6ba4fe 100644 --- a/testcases/kernel/mem/hugetlb/hugemmap/Makefile +++ b/testcases/kernel/mem/hugetlb/hugemmap/Makefile @@ -23,5 +23,9 @@ top_srcdir ?= ../../../../.. include $(top_srcdir)/include/mk/testcases.mk -include $(abs_srcdir)/../Makefile.inc + +MAKE_TARGETS := $(filter-out libmnt,$(patsubst $(abs_srcdir)/%.c,%,$(wildcard $(abs_srcdir)/*.c))) + +$(MAKE_TARGETS): %: %.o libmnt.o + include $(top_srcdir)/include/mk/generic_leaf_target.mk diff --git a/testcases/kernel/mem/hugetlb/hugemmap/libmnt.c b/testcases/kernel/mem/hugetlb/hugemmap/libmnt.c new file mode 100644 index 0000000..bf6f857 --- /dev/null +++ b/testcases/kernel/mem/hugetlb/hugemmap/libmnt.c @@ -0,0 +1,58 @@ +/* + * + * Copyright (c) Fujitsu Corp., 2011 + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include <stdio.h> +#include <stdlib.h> +#include <sys/mount.h> +#include <errno.h> + +#include "test.h" +#include "libmnt.h" + +void +hugepage_alloc(int num) +{ + FILE *file = fopen("/proc/sys/vm/nr_hugepages", "w+"); + if (file == NULL) { + tst_brkm(TBROK|TERRNO, NULL, + "fopen failed on /proc/sys/vm/nr_hugepages"); + } + + if (fprintf(file, "%d", num) < 0) { + tst_brkm(TBROK|TERRNO, NULL, + "fprintf failed on /proc/sys/vm/nr_hugepages"); + } + + fclose(file); +} + +void +mount_hugetlbfs(char *mount_point) +{ + if (mount("none", mount_point, "hugetlbfs", 0, NULL) < 0) { + tst_brkm(TBROK|TERRNO, NULL, + "mount failed on %s", mount_point); + } +} + +void +umount_hugetlbfs(char *mount_point) +{ + umount(mount_point); +} diff --git a/testcases/kernel/mem/hugetlb/hugemmap/libmnt.h b/testcases/kernel/mem/hugetlb/hugemmap/libmnt.h new file mode 100644 index 0000000..dc1ceed --- /dev/null +++ b/testcases/kernel/mem/hugetlb/hugemmap/libmnt.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) Fujitsu Corp., 2011 + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* + * libmnt.h - functions to mount hugetlbfs automatically. + */ + +void hugepage_alloc(int num); +void mount_hugetlbfs(char *mount_point); +void umount_hugetlbfs(char *mount_point); -- 1.7.1 -- Best Regards, Tang chen |
From: tangchen <tan...@cn...> - 2011-11-23 03:28:29
|
Firstly, mounting hugetlbfs on /tmp is not a good idea, because lots of programs could use /tmp for other purpose. This could cause other tests fail. Secondly, mounting hugetlbfs could be done automatically. This patch creates a temp directory with name including the current PID, automatically mounts hugetlbfs on the directory before test starts, and umounts it when the test is over. Signed-off-by: tangchen <tan...@cn...> --- testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c | 50 +++++++------------- 1 files changed, 18 insertions(+), 32 deletions(-) diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c index 874f736..906f7e4 100644 --- a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c +++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c @@ -73,51 +73,35 @@ #include "test.h" #include "usctest.h" #include "system_specific_hugepages_info.h" +#include "libmnt.h" #define BUFFER_SIZE 256 -char* TEMPFILE="mmapfile"; +char TEMPFILE[MAXPATHLEN]; char *TCID="hugemmap01"; /* Test program identifier. */ int TST_TOTAL=1; /* Total number of test cases. */ long *addr; /* addr of memory mapped region */ int fildes; /* file descriptor for tempfile */ -char *Hopt; /* location of hugetlbfs */ int beforetest=0; /* Amount of free huge pages before testing */ int aftertest=0; /* Amount of free huge pages after testing */ int hugepagesmapped=0; /* Amount of huge pages mapped after testing */ +char *mount_point=NULL; -void setup(); /* Main setup function of test */ -void cleanup(); /* cleanup function for the test */ - -void help() -{ - printf(" -H /.. Location of hugetlbfs, i.e. -H /var/hugetlbfs \n"); -} +void setup(void); /* Main setup function of test */ +void cleanup(void); /* cleanup function for the test */ int main(int ac, char **av) { int lc; /* loop counter */ char *msg; /* message returned from parse_opts */ - int Hflag=0; /* binary flag: opt or not */ int page_sz=0; - option_t options[] = { - { "H:", &Hflag, &Hopt }, /* Required for location of hugetlbfs */ - { NULL, NULL, NULL } /* NULL required to end array */ - }; - /* Parse standard options given to run the test. */ - msg = parse_opts(ac, av, options, &help); - if (msg != (char *) NULL) { + msg = parse_opts(ac, av, NULL, NULL); + if (msg != NULL) { tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s, use -help", msg); - tst_exit(); - } - - if (Hflag == 0) { - tst_brkm(TBROK, NULL, "-H option is REQUIRED for this test, use -h for options help"); - tst_exit(); } setup(); @@ -189,18 +173,19 @@ main(int ac, char **av) * Write some known data into file and get the size of the file. */ void -setup() +setup(void) { - char mypid[40]; - - sprintf(mypid,"/%d",getpid()); - TEMPFILE=strcat(mypid,TEMPFILE); - TEMPFILE=strcat(Hopt,TEMPFILE); - + tst_require_root(NULL); tst_sig(FORK, DEF_HANDLER, cleanup); TEST_PAUSE; + tst_tmpdir(); + mount_point = get_tst_tmpdir(); + mount_hugetlbfs(mount_point); + hugepage_alloc(1024); + snprintf(TEMPFILE, sizeof(TEMPFILE), "%s/mmapfile%d", + mount_point, getpid()); } /* @@ -209,7 +194,7 @@ setup() * Remove the temporary directory created. */ void -cleanup() +cleanup(void) { /* * print timing stats if that option was specified. @@ -217,5 +202,6 @@ cleanup() TEST_CLEANUP; unlink(TEMPFILE); - + umount_hugetlbfs(mount_point); + tst_rmdir(); } -- 1.7.1 -- Best Regards, Tang chen |
From: tangchen <tan...@cn...> - 2011-11-23 03:29:40
|
Signed-off-by: Tang Chen <tan...@cn...> --- testcases/kernel/mem/hugetlb/hugemmap/hugemmap02.c | 47 +++++++------------- 1 files changed, 16 insertions(+), 31 deletions(-) diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap02.c b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap02.c index 45cddf7..3bbbc46 100644 --- a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap02.c +++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap02.c @@ -63,6 +63,7 @@ #include "test.h" #include "usctest.h" #include "system_specific_hugepages_info.h" +#include "libmnt.h" #define LOW_ADDR (void *)(0x80000000) #define LOW_ADDR2 (void *)(0x90000000) @@ -77,38 +78,17 @@ unsigned long *addrlist[5]; /* list of addresses of memory mapped region */ int i; int fildes; /* file descriptor for tempfile */ int nfildes; /* file descriptor for /dev/zero */ -char *Hopt; /* location of hugetlbfs */ +char *mount_point = NULL; -void setup(); /* Main setup function of test */ -void cleanup(); /* cleanup function for the test */ - -void help() -{ - printf(" -H /.. Location of hugetlbfs, i.e. -H /var/hugetlbfs \n"); -} +void setup(void); /* Main setup function of test */ +void cleanup(void); /* cleanup function for the test */ int main(int ac, char **av) { int lc; - char *msg; - int Hflag = 0; int page_sz, map_sz; - option_t options[] = { - { "H:", &Hflag, &Hopt }, /* Required for location of hugetlbfs */ - { NULL, NULL, NULL } /* NULL required to end array */ - }; - - /* Parse standard options given to run the test. */ - if ((msg = parse_opts(ac, av, options, &help)) != NULL) - tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s, use -help", msg); - - if (Hflag == 0) { - tst_brkm(TBROK, NULL, - "-H option is REQUIRED for this test, use -h for options help"); - } - page_sz = getpagesize(); map_sz = 2 * 1024 * hugepages_size(); @@ -206,15 +186,20 @@ main(int ac, char **av) * Write some known data into file and get the size of the file. */ void -setup() +setup(void) { - tst_tmpdir(); - - snprintf(TEMPFILE, sizeof(TEMPFILE), "%s/mmapfile%d", Hopt, getpid()); - + tst_require_root(NULL); tst_sig(FORK, DEF_HANDLER, cleanup); TEST_PAUSE; + + tst_tmpdir(); + mount_point = get_tst_tmpdir(); + + mount_hugetlbfs(mount_point); + hugepage_alloc(1024); + + snprintf(TEMPFILE, sizeof(TEMPFILE), "%s/mmapfile%d", mount_point, getpid()); } /* @@ -223,7 +208,7 @@ setup() * Remove the temporary directory created. */ void -cleanup() +cleanup(void) { /* * print timing stats if that option was specified. @@ -231,6 +216,6 @@ cleanup() TEST_CLEANUP; unlink(TEMPFILE); - + umount_hugetlbfs(mount_point); tst_rmdir(); } -- 1.7.1 -- Best Regards, Tang chen |
From: tangchen <tan...@cn...> - 2011-11-23 03:30:40
|
Signed-off-by: Tang Chen <tan...@cn...> --- testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c | 66 ++++++++------------ 1 files changed, 26 insertions(+), 40 deletions(-) diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c index cac94b0..b17b19d 100644 --- a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c +++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c @@ -54,54 +54,31 @@ #include "test.h" #include "usctest.h" #include "system_specific_hugepages_info.h" +#include "libmnt.h" #define HIGH_ADDR (void *)(0x1000000000000) -char* TEMPFILE="mmapfile"; +char TEMPFILE[MAXPATHLEN]; char *TCID="hugemmap03"; /* Test program identifier. */ int TST_TOTAL=1; /* Total number of test cases. */ unsigned long *addr; /* addr of memory mapped region */ int fildes; /* file descriptor for tempfile */ -char *Hopt; /* location of hugetlbfs */ +char *mount_point = NULL; -void setup(); /* Main setup function of test */ -void cleanup(); /* cleanup function for the test */ - -void help() -{ - printf(" -H /.. Location of hugetlbfs, i.e. -H /var/hugetlbfs \n"); -} +void setup(void); /* Main setup function of test */ +void cleanup(void); /* cleanup function for the test */ int main(int ac, char **av) { int lc; /* loop counter */ - char *msg; /* message returned from parse_opts */ - int Hflag=0; /* binary flag: opt or not */ int page_sz; #if __WORDSIZE==32 /* 32-bit compiled */ tst_brkm(TCONF, NULL, "This test is only for 64bit"); #endif - option_t options[] = { - { "H:", &Hflag, &Hopt }, /* Required for location of hugetlbfs */ - { NULL, NULL, NULL } /* NULL required to end array */ - }; - - /* Parse standard options given to run the test. */ - msg = parse_opts(ac, av, options, &help); - if (msg != (char *) NULL) { - tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s, use -help", msg); - tst_exit(); - } - - if (Hflag == 0) { - tst_brkm(TBROK, NULL, "-H option is REQUIRED for this test, use -h for options help"); - tst_exit(); - } - page_sz = getpagesize(); setup(); @@ -122,8 +99,15 @@ main(int ac, char **av) addr = mmap(HIGH_ADDR, page_sz, PROT_READ, MAP_SHARED | MAP_FIXED, fildes, 0); if (addr != MAP_FAILED) { - tst_resm(TFAIL, "Normal mmap() into high region unexpectedly succeeded on %s, errno=%d : %s", - TEMPFILE, errno, strerror(errno)); + tst_resm(TFAIL|TERRNO, "Normal mmap() into high region unexpectedly " + "succeeded on %s", + TEMPFILE); + + /* Unmap the mapped memory */ + if (munmap(addr, page_sz) != 0) { + tst_brkm(TFAIL|TERRNO, NULL, "munmap() fails to unmap the " + "memory"); + } continue; } else { tst_resm(TPASS, "Normal mmap() into high region failed correctly"); @@ -132,7 +116,6 @@ main(int ac, char **av) close(fildes); } - cleanup(); tst_exit(); @@ -149,18 +132,20 @@ main(int ac, char **av) * Write some known data into file and get the size of the file. */ void -setup() +setup(void) { - char mypid[40]; - - sprintf(mypid,"/%d",getpid()); - TEMPFILE=strcat(mypid,TEMPFILE); - TEMPFILE=strcat(Hopt,TEMPFILE); - + tst_require_root(NULL); tst_sig(FORK, DEF_HANDLER, cleanup); TEST_PAUSE; + tst_tmpdir(); + mount_point = get_tst_tmpdir(); + + mount_hugetlbfs(mount_point); + hugepage_alloc(1024); + + snprintf(TEMPFILE, sizeof(TEMPFILE), "%s/mmapfile%d", mount_point, getpid()); } /* @@ -169,7 +154,7 @@ setup() * Remove the temporary directory created. */ void -cleanup() +cleanup(void) { /* * print timing stats if that option was specified. @@ -177,5 +162,6 @@ cleanup() TEST_CLEANUP; unlink(TEMPFILE); - + umount_hugetlbfs(mount_point); + tst_rmdir(); } -- 1.7.1 -- Best Regards, Tang chen |
From: tangchen <tan...@cn...> - 2011-11-23 03:31:32
|
Signed-off-by: Tang Chen <tan...@cn...> --- testcases/kernel/mem/hugetlb/hugemmap/hugemmap04.c | 52 ++++++-------------- 1 files changed, 16 insertions(+), 36 deletions(-) diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap04.c b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap04.c index 4cc6ed4..9774e87 100644 --- a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap04.c +++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap04.c @@ -73,10 +73,11 @@ #include "test.h" #include "usctest.h" #include "system_specific_hugepages_info.h" +#include "libmnt.h" #define BUFFER_SIZE 256 -char* TEMPFILE="mmapfile"; +char TEMPFILE[MAXPATHLEN]; char *TCID="hugemmap04"; /* Test program identifier. */ int TST_TOTAL=1; /* Total number of test cases. */ @@ -87,41 +88,17 @@ int freepages=0; /* Amount of free huge pages to use for testing */ int beforetest=0; /* Amount of free huge pages before testing */ int aftertest=0; /* Amount of free huge pages after testing */ int hugepagesmapped=0; /* Amount of huge pages mapped after testing */ -char *Hopt; /* location of hugetlbfs */ +char *mount_point = NULL; -void setup(); /* Main setup function of test */ -void cleanup(); /* cleanup function for the test */ - -void help() -{ - printf(" -H /.. Location of hugetlbfs, i.e. -H /var/hugetlbfs \n"); -} +void setup(void); /* Main setup function of test */ +void cleanup(void); /* cleanup function for the test */ int main(int ac, char **av) { int lc; /* loop counter */ - char *msg; /* message returned from parse_opts */ - int Hflag=0; /* binary flag: opt or not */ int huge_pagesize=0; - option_t options[] = { - { "H:", &Hflag, &Hopt }, /* Required for location of hugetlbfs */ - { NULL, NULL, NULL } /* NULL required to end array */ - }; - - /* Parse standard options given to run the test. */ - msg = parse_opts(ac, av, options, &help); - if (msg != (char *) NULL) { - tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s, use -help", msg); - tst_exit(); - } - - if (Hflag == 0) { - tst_brkm(TBROK, NULL, "-H option is REQUIRED for this test, use -h for options help"); - tst_exit(); - } - /* Check number of hugepages */ if (get_no_of_hugepages() <= 0 || hugepages_size() <= 0) tst_brkm(TCONF, cleanup, "Not enough available Hugepages"); @@ -151,7 +128,7 @@ main(int ac, char **av) tst_resm(TINFO,"Total amount of free huge pages is %d",freepages); tst_resm(TINFO,"Max number allowed for 1 mmap file in 32-bits is 128"); if (freepages > 128) - freepages=128; + freepages=128; #endif /* * Call mmap @@ -206,16 +183,18 @@ main(int ac, char **av) void setup() { - char mypid[40]; - - sprintf(mypid,"/%d",getpid()); - TEMPFILE=strcat(mypid,TEMPFILE); - TEMPFILE=strcat(Hopt,TEMPFILE); - + tst_require_root(NULL); tst_sig(FORK, DEF_HANDLER, cleanup); TEST_PAUSE; + tst_tmpdir(); + mount_point = get_tst_tmpdir(); + + mount_hugetlbfs(mount_point); + hugepage_alloc(1024); + + snprintf(TEMPFILE, sizeof(TEMPFILE), "%s/mmapfile%d", mount_point, getpid()); } /* @@ -232,5 +211,6 @@ cleanup() TEST_CLEANUP; unlink(TEMPFILE); - + umount_hugetlbfs(mount_point); + tst_rmdir(); } -- 1.7.1 -- Best Regards, Tang chen |
From: Wanlong G. <gao...@cn...> - 2011-11-23 10:30:50
|
Hi Cyril, Garrett: I have resend the patch set of Tang with some format fixes. If you have any comment with this version, please reply me, and I'll fix and resend, otherwise, please commit them. Thanks a lot -Wanlong Gao |
From: Wanlong G. <gao...@cn...> - 2011-11-23 10:30:48
|
This library includes a set of functions used to mount hugetlbfs automatically when doing the hugemmap tests. Signed-off-by: Tang Chen <tan...@cn...> Signed-off-by: Wanlong Gao <gao...@cn...> --- testcases/kernel/mem/hugetlb/hugemmap/Makefile | 6 ++- testcases/kernel/mem/hugetlb/hugemmap/libmnt.c | 58 ++++++++++++++++++++++++ testcases/kernel/mem/hugetlb/hugemmap/libmnt.h | 25 ++++++++++ 3 files changed, 88 insertions(+), 1 deletions(-) create mode 100644 testcases/kernel/mem/hugetlb/hugemmap/libmnt.c create mode 100644 testcases/kernel/mem/hugetlb/hugemmap/libmnt.h diff --git a/testcases/kernel/mem/hugetlb/hugemmap/Makefile b/testcases/kernel/mem/hugetlb/hugemmap/Makefile index a1ba46e..e6ba4fe 100644 --- a/testcases/kernel/mem/hugetlb/hugemmap/Makefile +++ b/testcases/kernel/mem/hugetlb/hugemmap/Makefile @@ -23,5 +23,9 @@ top_srcdir ?= ../../../../.. include $(top_srcdir)/include/mk/testcases.mk -include $(abs_srcdir)/../Makefile.inc + +MAKE_TARGETS := $(filter-out libmnt,$(patsubst $(abs_srcdir)/%.c,%,$(wildcard $(abs_srcdir)/*.c))) + +$(MAKE_TARGETS): %: %.o libmnt.o + include $(top_srcdir)/include/mk/generic_leaf_target.mk diff --git a/testcases/kernel/mem/hugetlb/hugemmap/libmnt.c b/testcases/kernel/mem/hugetlb/hugemmap/libmnt.c new file mode 100644 index 0000000..bf6f857 --- /dev/null +++ b/testcases/kernel/mem/hugetlb/hugemmap/libmnt.c @@ -0,0 +1,58 @@ +/* + * + * Copyright (c) Fujitsu Corp., 2011 + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include <stdio.h> +#include <stdlib.h> +#include <sys/mount.h> +#include <errno.h> + +#include "test.h" +#include "libmnt.h" + +void +hugepage_alloc(int num) +{ + FILE *file = fopen("/proc/sys/vm/nr_hugepages", "w+"); + if (file == NULL) { + tst_brkm(TBROK|TERRNO, NULL, + "fopen failed on /proc/sys/vm/nr_hugepages"); + } + + if (fprintf(file, "%d", num) < 0) { + tst_brkm(TBROK|TERRNO, NULL, + "fprintf failed on /proc/sys/vm/nr_hugepages"); + } + + fclose(file); +} + +void +mount_hugetlbfs(char *mount_point) +{ + if (mount("none", mount_point, "hugetlbfs", 0, NULL) < 0) { + tst_brkm(TBROK|TERRNO, NULL, + "mount failed on %s", mount_point); + } +} + +void +umount_hugetlbfs(char *mount_point) +{ + umount(mount_point); +} diff --git a/testcases/kernel/mem/hugetlb/hugemmap/libmnt.h b/testcases/kernel/mem/hugetlb/hugemmap/libmnt.h new file mode 100644 index 0000000..dc1ceed --- /dev/null +++ b/testcases/kernel/mem/hugetlb/hugemmap/libmnt.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) Fujitsu Corp., 2011 + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* + * libmnt.h - functions to mount hugetlbfs automatically. + */ + +void hugepage_alloc(int num); +void mount_hugetlbfs(char *mount_point); +void umount_hugetlbfs(char *mount_point); -- 1.7.1 |
From: Caspar Z. <ca...@ca...> - 2011-12-28 05:29:44
|
On 11/23/2011 06:29 PM, Wanlong Gao wrote: > This library includes a set of functions used to mount hugetlbfs automatically when doing the hugemmap tests. > > Signed-off-by: Tang Chen <tan...@cn...> > Signed-off-by: Wanlong Gao <gao...@cn...> > --- > testcases/kernel/mem/hugetlb/hugemmap/Makefile | 6 ++- > testcases/kernel/mem/hugetlb/hugemmap/libmnt.c | 58 ++++++++++++++++++++++++ > testcases/kernel/mem/hugetlb/hugemmap/libmnt.h | 25 ++++++++++ > 3 files changed, 88 insertions(+), 1 deletions(-) > create mode 100644 testcases/kernel/mem/hugetlb/hugemmap/libmnt.c > create mode 100644 testcases/kernel/mem/hugetlb/hugemmap/libmnt.h > > diff --git a/testcases/kernel/mem/hugetlb/hugemmap/Makefile b/testcases/kernel/mem/hugetlb/hugemmap/Makefile > index a1ba46e..e6ba4fe 100644 > --- a/testcases/kernel/mem/hugetlb/hugemmap/Makefile > +++ b/testcases/kernel/mem/hugetlb/hugemmap/Makefile > @@ -23,5 +23,9 @@ > top_srcdir ?= ../../../../.. > > include $(top_srcdir)/include/mk/testcases.mk > -include $(abs_srcdir)/../Makefile.inc > + > +MAKE_TARGETS := $(filter-out libmnt,$(patsubst $(abs_srcdir)/%.c,%,$(wildcard $(abs_srcdir)/*.c))) > + > +$(MAKE_TARGETS): %: %.o libmnt.o > + > include $(top_srcdir)/include/mk/generic_leaf_target.mk > diff --git a/testcases/kernel/mem/hugetlb/hugemmap/libmnt.c b/testcases/kernel/mem/hugetlb/hugemmap/libmnt.c > new file mode 100644 > index 0000000..bf6f857 > --- /dev/null > +++ b/testcases/kernel/mem/hugetlb/hugemmap/libmnt.c > @@ -0,0 +1,58 @@ > +/* > + * > + * Copyright (c) Fujitsu Corp., 2011 > + * > + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA > + */ > + > +#include <stdio.h> > +#include <stdlib.h> > +#include <sys/mount.h> > +#include <errno.h> > + > +#include "test.h" > +#include "libmnt.h" > + > +void > +hugepage_alloc(int num) It's not necessary to put it into 2 lines. > +{ > + FILE *file = fopen("/proc/sys/vm/nr_hugepages", "w+"); > + if (file == NULL) { > + tst_brkm(TBROK|TERRNO, NULL, > + "fopen failed on /proc/sys/vm/nr_hugepages"); > + } > + > + if (fprintf(file, "%d", num) < 0) { > + tst_brkm(TBROK|TERRNO, NULL, > + "fprintf failed on /proc/sys/vm/nr_hugepages"); > + } > + > + fclose(file); > +} > + > +void > +mount_hugetlbfs(char *mount_point) > +{ > + if (mount("none", mount_point, "hugetlbfs", 0, NULL) < 0) { > + tst_brkm(TBROK|TERRNO, NULL, > + "mount failed on %s", mount_point); > + } > +} > + > +void > +umount_hugetlbfs(char *mount_point) > +{ > + umount(mount_point); You should check the return code and errno for it. > +} > diff --git a/testcases/kernel/mem/hugetlb/hugemmap/libmnt.h b/testcases/kernel/mem/hugetlb/hugemmap/libmnt.h > new file mode 100644 > index 0000000..dc1ceed > --- /dev/null > +++ b/testcases/kernel/mem/hugetlb/hugemmap/libmnt.h > @@ -0,0 +1,25 @@ > +/* > + * Copyright (c) Fujitsu Corp., 2011 > + * > + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA > + */ > + > +/* > + * libmnt.h - functions to mount hugetlbfs automatically. > + */ > + > +void hugepage_alloc(int num); > +void mount_hugetlbfs(char *mount_point); > +void umount_hugetlbfs(char *mount_point); |
From: Wanlong G. <gao...@cn...> - 2011-12-28 06:07:03
|
This library includes a set of functions used to mount hugetlbfs automatically when doing the hugemmap tests. Signed-off-by: Wanlong Gao <gao...@cn...> --- testcases/kernel/mem/hugetlb/hugemmap/Makefile | 6 ++- testcases/kernel/mem/hugetlb/hugemmap/libmnt.c | 58 ++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletions(-) create mode 100644 testcases/kernel/mem/hugetlb/hugemmap/libmnt.c diff --git a/testcases/kernel/mem/hugetlb/hugemmap/Makefile b/testcases/kernel/mem/hugetlb/hugemmap/Makefile index a1ba46e..e6ba4fe 100644 --- a/testcases/kernel/mem/hugetlb/hugemmap/Makefile +++ b/testcases/kernel/mem/hugetlb/hugemmap/Makefile @@ -23,5 +23,9 @@ top_srcdir ?= ../../../../.. include $(top_srcdir)/include/mk/testcases.mk -include $(abs_srcdir)/../Makefile.inc + +MAKE_TARGETS := $(filter-out libmnt,$(patsubst $(abs_srcdir)/%.c,%,$(wildcard $(abs_srcdir)/*.c))) + +$(MAKE_TARGETS): %: %.o libmnt.o + include $(top_srcdir)/include/mk/generic_leaf_target.mk diff --git a/testcases/kernel/mem/hugetlb/hugemmap/libmnt.c b/testcases/kernel/mem/hugetlb/hugemmap/libmnt.c new file mode 100644 index 0000000..36e2700 --- /dev/null +++ b/testcases/kernel/mem/hugetlb/hugemmap/libmnt.c @@ -0,0 +1,58 @@ +/* + * + * Copyright (c) Fujitsu Corp., 2011 + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include <stdio.h> +#include <stdlib.h> +#include <sys/mount.h> +#include <errno.h> + +#include "test.h" +#include "libmnt.h" + +void hugepage_alloc(int num) +{ + FILE *file = fopen("/proc/sys/vm/nr_hugepages", "w+"); + if (file == NULL) { + tst_brkm(TBROK|TERRNO, NULL, + "fopen failed on /proc/sys/vm/nr_hugepages"); + } + + if (fprintf(file, "%d", num) < 0) { + tst_brkm(TBROK|TERRNO, NULL, + "fprintf failed on /proc/sys/vm/nr_hugepages"); + } + + fclose(file); +} + +void mount_hugetlbfs(char *mount_point) +{ + if (mount("none", mount_point, "hugetlbfs", 0, NULL) < 0) { + tst_brkm(TBROK|TERRNO, NULL, + "mount failed on %s", mount_point); + } +} + +void umount_hugetlbfs(char *mount_point) +{ + if (umount(mount_point)) { + tst_brkm(TBROK|TERRNO, NULL, + "umount faild on %s", mount_point); + } +} -- 1.7.8 |
From: Caspar Z. <ca...@ca...> - 2011-12-28 07:01:04
|
On 12/28/2011 02:02 PM, Wanlong Gao wrote: > This library includes a set of functions used to mount hugetlbfs automatically when doing the hugemmap tests. > > Signed-off-by: Wanlong Gao <gao...@cn...> > --- > testcases/kernel/mem/hugetlb/hugemmap/Makefile | 6 ++- > testcases/kernel/mem/hugetlb/hugemmap/libmnt.c | 58 ++++++++++++++++++++++++ > 2 files changed, 63 insertions(+), 1 deletions(-) > create mode 100644 testcases/kernel/mem/hugetlb/hugemmap/libmnt.c > > diff --git a/testcases/kernel/mem/hugetlb/hugemmap/Makefile b/testcases/kernel/mem/hugetlb/hugemmap/Makefile > index a1ba46e..e6ba4fe 100644 > --- a/testcases/kernel/mem/hugetlb/hugemmap/Makefile > +++ b/testcases/kernel/mem/hugetlb/hugemmap/Makefile > @@ -23,5 +23,9 @@ > top_srcdir ?= ../../../../.. > > include $(top_srcdir)/include/mk/testcases.mk > -include $(abs_srcdir)/../Makefile.inc > + > +MAKE_TARGETS := $(filter-out libmnt,$(patsubst $(abs_srcdir)/%.c,%,$(wildcard $(abs_srcdir)/*.c))) > + > +$(MAKE_TARGETS): %: %.o libmnt.o > + > include $(top_srcdir)/include/mk/generic_leaf_target.mk > diff --git a/testcases/kernel/mem/hugetlb/hugemmap/libmnt.c b/testcases/kernel/mem/hugetlb/hugemmap/libmnt.c > new file mode 100644 > index 0000000..36e2700 > --- /dev/null > +++ b/testcases/kernel/mem/hugetlb/hugemmap/libmnt.c > @@ -0,0 +1,58 @@ > +/* > + * > + * Copyright (c) Fujitsu Corp., 2011 > + * > + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA > + */ > + > +#include <stdio.h> > +#include <stdlib.h> > +#include <sys/mount.h> > +#include <errno.h> > + > +#include "test.h" > +#include "libmnt.h" > + > +void hugepage_alloc(int num) > +{ > + FILE *file = fopen("/proc/sys/vm/nr_hugepages", "w+"); > + if (file == NULL) { > + tst_brkm(TBROK|TERRNO, NULL, > + "fopen failed on /proc/sys/vm/nr_hugepages"); > + } > + > + if (fprintf(file, "%d", num) < 0) { > + tst_brkm(TBROK|TERRNO, NULL, > + "fprintf failed on /proc/sys/vm/nr_hugepages"); > + } > + > + fclose(file); > +} Besides the questions I mentions in previous mail, you may also want to use new functions I committed to mem/lib just now: void set_sys_tune(char *sys_file, long tune, int check); long get_sys_tune(char *sys_file); Thanks, Caspar > + > +void mount_hugetlbfs(char *mount_point) > +{ > + if (mount("none", mount_point, "hugetlbfs", 0, NULL) < 0) { > + tst_brkm(TBROK|TERRNO, NULL, > + "mount failed on %s", mount_point); > + } > +} > + > +void umount_hugetlbfs(char *mount_point) > +{ > + if (umount(mount_point)) { > + tst_brkm(TBROK|TERRNO, NULL, > + "umount faild on %s", mount_point); > + } > +} |
From: Wanlong G. <gao...@cn...> - 2011-11-23 10:30:51
|
Signed-off-by: Tang Chen <tan...@cn...> Signed-off-by: Wanlong Gao <gao...@cn...> --- testcases/kernel/mem/hugetlb/hugemmap/hugemmap02.c | 47 +++++++------------- 1 files changed, 16 insertions(+), 31 deletions(-) diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap02.c b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap02.c index 45cddf7..3bbbc46 100644 --- a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap02.c +++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap02.c @@ -63,6 +63,7 @@ #include "test.h" #include "usctest.h" #include "system_specific_hugepages_info.h" +#include "libmnt.h" #define LOW_ADDR (void *)(0x80000000) #define LOW_ADDR2 (void *)(0x90000000) @@ -77,38 +78,17 @@ unsigned long *addrlist[5]; /* list of addresses of memory mapped region */ int i; int fildes; /* file descriptor for tempfile */ int nfildes; /* file descriptor for /dev/zero */ -char *Hopt; /* location of hugetlbfs */ +char *mount_point = NULL; -void setup(); /* Main setup function of test */ -void cleanup(); /* cleanup function for the test */ - -void help() -{ - printf(" -H /.. Location of hugetlbfs, i.e. -H /var/hugetlbfs \n"); -} +void setup(void); /* Main setup function of test */ +void cleanup(void); /* cleanup function for the test */ int main(int ac, char **av) { int lc; - char *msg; - int Hflag = 0; int page_sz, map_sz; - option_t options[] = { - { "H:", &Hflag, &Hopt }, /* Required for location of hugetlbfs */ - { NULL, NULL, NULL } /* NULL required to end array */ - }; - - /* Parse standard options given to run the test. */ - if ((msg = parse_opts(ac, av, options, &help)) != NULL) - tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s, use -help", msg); - - if (Hflag == 0) { - tst_brkm(TBROK, NULL, - "-H option is REQUIRED for this test, use -h for options help"); - } - page_sz = getpagesize(); map_sz = 2 * 1024 * hugepages_size(); @@ -206,15 +186,20 @@ main(int ac, char **av) * Write some known data into file and get the size of the file. */ void -setup() +setup(void) { - tst_tmpdir(); - - snprintf(TEMPFILE, sizeof(TEMPFILE), "%s/mmapfile%d", Hopt, getpid()); - + tst_require_root(NULL); tst_sig(FORK, DEF_HANDLER, cleanup); TEST_PAUSE; + + tst_tmpdir(); + mount_point = get_tst_tmpdir(); + + mount_hugetlbfs(mount_point); + hugepage_alloc(1024); + + snprintf(TEMPFILE, sizeof(TEMPFILE), "%s/mmapfile%d", mount_point, getpid()); } /* @@ -223,7 +208,7 @@ setup() * Remove the temporary directory created. */ void -cleanup() +cleanup(void) { /* * print timing stats if that option was specified. @@ -231,6 +216,6 @@ cleanup() TEST_CLEANUP; unlink(TEMPFILE); - + umount_hugetlbfs(mount_point); tst_rmdir(); } -- 1.7.1 |
From: Wanlong G. <gao...@cn...> - 2011-11-23 10:30:52
|
Firstly, mounting hugetlbfs on /tmp is not a good idea, because lots of programs could use /tmp for other purpose. This could cause other tests fail. Secondly, mounting hugetlbfs could be done automatically. This patch creates a temp directory with name including the current PID, automatically mounts hugetlbfs on the directory before test starts, and umounts it when the test is over. Signed-off-by: tangchen <tan...@cn...> Signed-off-by: Wanlong Gao <gao...@cn...> --- testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c | 50 +++++++------------- 1 files changed, 18 insertions(+), 32 deletions(-) diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c index 874f736..906f7e4 100644 --- a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c +++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c @@ -73,51 +73,35 @@ #include "test.h" #include "usctest.h" #include "system_specific_hugepages_info.h" +#include "libmnt.h" #define BUFFER_SIZE 256 -char* TEMPFILE="mmapfile"; +char TEMPFILE[MAXPATHLEN]; char *TCID="hugemmap01"; /* Test program identifier. */ int TST_TOTAL=1; /* Total number of test cases. */ long *addr; /* addr of memory mapped region */ int fildes; /* file descriptor for tempfile */ -char *Hopt; /* location of hugetlbfs */ int beforetest=0; /* Amount of free huge pages before testing */ int aftertest=0; /* Amount of free huge pages after testing */ int hugepagesmapped=0; /* Amount of huge pages mapped after testing */ +char *mount_point=NULL; -void setup(); /* Main setup function of test */ -void cleanup(); /* cleanup function for the test */ - -void help() -{ - printf(" -H /.. Location of hugetlbfs, i.e. -H /var/hugetlbfs \n"); -} +void setup(void); /* Main setup function of test */ +void cleanup(void); /* cleanup function for the test */ int main(int ac, char **av) { int lc; /* loop counter */ char *msg; /* message returned from parse_opts */ - int Hflag=0; /* binary flag: opt or not */ int page_sz=0; - option_t options[] = { - { "H:", &Hflag, &Hopt }, /* Required for location of hugetlbfs */ - { NULL, NULL, NULL } /* NULL required to end array */ - }; - /* Parse standard options given to run the test. */ - msg = parse_opts(ac, av, options, &help); - if (msg != (char *) NULL) { + msg = parse_opts(ac, av, NULL, NULL); + if (msg != NULL) { tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s, use -help", msg); - tst_exit(); - } - - if (Hflag == 0) { - tst_brkm(TBROK, NULL, "-H option is REQUIRED for this test, use -h for options help"); - tst_exit(); } setup(); @@ -189,18 +173,19 @@ main(int ac, char **av) * Write some known data into file and get the size of the file. */ void -setup() +setup(void) { - char mypid[40]; - - sprintf(mypid,"/%d",getpid()); - TEMPFILE=strcat(mypid,TEMPFILE); - TEMPFILE=strcat(Hopt,TEMPFILE); - + tst_require_root(NULL); tst_sig(FORK, DEF_HANDLER, cleanup); TEST_PAUSE; + tst_tmpdir(); + mount_point = get_tst_tmpdir(); + mount_hugetlbfs(mount_point); + hugepage_alloc(1024); + snprintf(TEMPFILE, sizeof(TEMPFILE), "%s/mmapfile%d", + mount_point, getpid()); } /* @@ -209,7 +194,7 @@ setup() * Remove the temporary directory created. */ void -cleanup() +cleanup(void) { /* * print timing stats if that option was specified. @@ -217,5 +202,6 @@ cleanup() TEST_CLEANUP; unlink(TEMPFILE); - + umount_hugetlbfs(mount_point); + tst_rmdir(); } -- 1.7.1 |
From: Wanlong G. <gao...@cn...> - 2011-11-23 10:31:00
|
Signed-off-by: Tang Chen <tan...@cn...> Signed-off-by: Wanlong Gao <gao...@cn...> --- testcases/kernel/mem/hugetlb/hugemmap/hugemmap04.c | 52 ++++++-------------- 1 files changed, 16 insertions(+), 36 deletions(-) diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap04.c b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap04.c index 4cc6ed4..9774e87 100644 --- a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap04.c +++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap04.c @@ -73,10 +73,11 @@ #include "test.h" #include "usctest.h" #include "system_specific_hugepages_info.h" +#include "libmnt.h" #define BUFFER_SIZE 256 -char* TEMPFILE="mmapfile"; +char TEMPFILE[MAXPATHLEN]; char *TCID="hugemmap04"; /* Test program identifier. */ int TST_TOTAL=1; /* Total number of test cases. */ @@ -87,41 +88,17 @@ int freepages=0; /* Amount of free huge pages to use for testing */ int beforetest=0; /* Amount of free huge pages before testing */ int aftertest=0; /* Amount of free huge pages after testing */ int hugepagesmapped=0; /* Amount of huge pages mapped after testing */ -char *Hopt; /* location of hugetlbfs */ +char *mount_point = NULL; -void setup(); /* Main setup function of test */ -void cleanup(); /* cleanup function for the test */ - -void help() -{ - printf(" -H /.. Location of hugetlbfs, i.e. -H /var/hugetlbfs \n"); -} +void setup(void); /* Main setup function of test */ +void cleanup(void); /* cleanup function for the test */ int main(int ac, char **av) { int lc; /* loop counter */ - char *msg; /* message returned from parse_opts */ - int Hflag=0; /* binary flag: opt or not */ int huge_pagesize=0; - option_t options[] = { - { "H:", &Hflag, &Hopt }, /* Required for location of hugetlbfs */ - { NULL, NULL, NULL } /* NULL required to end array */ - }; - - /* Parse standard options given to run the test. */ - msg = parse_opts(ac, av, options, &help); - if (msg != (char *) NULL) { - tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s, use -help", msg); - tst_exit(); - } - - if (Hflag == 0) { - tst_brkm(TBROK, NULL, "-H option is REQUIRED for this test, use -h for options help"); - tst_exit(); - } - /* Check number of hugepages */ if (get_no_of_hugepages() <= 0 || hugepages_size() <= 0) tst_brkm(TCONF, cleanup, "Not enough available Hugepages"); @@ -151,7 +128,7 @@ main(int ac, char **av) tst_resm(TINFO,"Total amount of free huge pages is %d",freepages); tst_resm(TINFO,"Max number allowed for 1 mmap file in 32-bits is 128"); if (freepages > 128) - freepages=128; + freepages=128; #endif /* * Call mmap @@ -206,16 +183,18 @@ main(int ac, char **av) void setup() { - char mypid[40]; - - sprintf(mypid,"/%d",getpid()); - TEMPFILE=strcat(mypid,TEMPFILE); - TEMPFILE=strcat(Hopt,TEMPFILE); - + tst_require_root(NULL); tst_sig(FORK, DEF_HANDLER, cleanup); TEST_PAUSE; + tst_tmpdir(); + mount_point = get_tst_tmpdir(); + + mount_hugetlbfs(mount_point); + hugepage_alloc(1024); + + snprintf(TEMPFILE, sizeof(TEMPFILE), "%s/mmapfile%d", mount_point, getpid()); } /* @@ -232,5 +211,6 @@ cleanup() TEST_CLEANUP; unlink(TEMPFILE); - + umount_hugetlbfs(mount_point); + tst_rmdir(); } -- 1.7.1 |
From: Wanlong G. <gao...@cn...> - 2011-11-23 10:31:02
|
Signed-off-by: Tang Chen <tan...@cn...> Signed-off-by: Wanlong Gao <gao...@cn...> --- testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c | 66 ++++++++------------ 1 files changed, 26 insertions(+), 40 deletions(-) diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c index cac94b0..b17b19d 100644 --- a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c +++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c @@ -54,54 +54,31 @@ #include "test.h" #include "usctest.h" #include "system_specific_hugepages_info.h" +#include "libmnt.h" #define HIGH_ADDR (void *)(0x1000000000000) -char* TEMPFILE="mmapfile"; +char TEMPFILE[MAXPATHLEN]; char *TCID="hugemmap03"; /* Test program identifier. */ int TST_TOTAL=1; /* Total number of test cases. */ unsigned long *addr; /* addr of memory mapped region */ int fildes; /* file descriptor for tempfile */ -char *Hopt; /* location of hugetlbfs */ +char *mount_point = NULL; -void setup(); /* Main setup function of test */ -void cleanup(); /* cleanup function for the test */ - -void help() -{ - printf(" -H /.. Location of hugetlbfs, i.e. -H /var/hugetlbfs \n"); -} +void setup(void); /* Main setup function of test */ +void cleanup(void); /* cleanup function for the test */ int main(int ac, char **av) { int lc; /* loop counter */ - char *msg; /* message returned from parse_opts */ - int Hflag=0; /* binary flag: opt or not */ int page_sz; #if __WORDSIZE==32 /* 32-bit compiled */ tst_brkm(TCONF, NULL, "This test is only for 64bit"); #endif - option_t options[] = { - { "H:", &Hflag, &Hopt }, /* Required for location of hugetlbfs */ - { NULL, NULL, NULL } /* NULL required to end array */ - }; - - /* Parse standard options given to run the test. */ - msg = parse_opts(ac, av, options, &help); - if (msg != (char *) NULL) { - tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s, use -help", msg); - tst_exit(); - } - - if (Hflag == 0) { - tst_brkm(TBROK, NULL, "-H option is REQUIRED for this test, use -h for options help"); - tst_exit(); - } - page_sz = getpagesize(); setup(); @@ -122,8 +99,15 @@ main(int ac, char **av) addr = mmap(HIGH_ADDR, page_sz, PROT_READ, MAP_SHARED | MAP_FIXED, fildes, 0); if (addr != MAP_FAILED) { - tst_resm(TFAIL, "Normal mmap() into high region unexpectedly succeeded on %s, errno=%d : %s", - TEMPFILE, errno, strerror(errno)); + tst_resm(TFAIL|TERRNO, "Normal mmap() into high region unexpectedly " + "succeeded on %s", + TEMPFILE); + + /* Unmap the mapped memory */ + if (munmap(addr, page_sz) != 0) { + tst_brkm(TFAIL|TERRNO, NULL, "munmap() fails to unmap the " + "memory"); + } continue; } else { tst_resm(TPASS, "Normal mmap() into high region failed correctly"); @@ -132,7 +116,6 @@ main(int ac, char **av) close(fildes); } - cleanup(); tst_exit(); @@ -149,18 +132,20 @@ main(int ac, char **av) * Write some known data into file and get the size of the file. */ void -setup() +setup(void) { - char mypid[40]; - - sprintf(mypid,"/%d",getpid()); - TEMPFILE=strcat(mypid,TEMPFILE); - TEMPFILE=strcat(Hopt,TEMPFILE); - + tst_require_root(NULL); tst_sig(FORK, DEF_HANDLER, cleanup); TEST_PAUSE; + tst_tmpdir(); + mount_point = get_tst_tmpdir(); + + mount_hugetlbfs(mount_point); + hugepage_alloc(1024); + + snprintf(TEMPFILE, sizeof(TEMPFILE), "%s/mmapfile%d", mount_point, getpid()); } /* @@ -169,7 +154,7 @@ setup() * Remove the temporary directory created. */ void -cleanup() +cleanup(void) { /* * print timing stats if that option was specified. @@ -177,5 +162,6 @@ cleanup() TEST_CLEANUP; unlink(TEMPFILE); - + umount_hugetlbfs(mount_point); + tst_rmdir(); } -- 1.7.1 |
From: Wanlong G. <gao...@cn...> - 2011-11-25 07:38:32
|
The hugetlbfs will be mounted automatically when doing hugemmap tests, so -H option is no longer needed. Signed-off-by: Wanlong Gao <gao...@cn...> Signed-off-by: Tang Chen <tan...@cn...> --- runtest/hugetlb | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/runtest/hugetlb b/runtest/hugetlb index af45868..641c2a6 100644 --- a/runtest/hugetlb +++ b/runtest/hugetlb @@ -1,7 +1,7 @@ -hugemmap01 hugemmap01 -H/tmp -hugemmap02 hugemmap02 -H/tmp -c10 -hugemmap03 hugemmap03 -H/tmp -I2 -c10 -hugemmap04 hugemmap04 -H/tmp +hugemmap01 hugemmap01 +hugemmap02 hugemmap02 -c10 +hugemmap03 hugemmap03 -I2 -c10 +hugemmap04 hugemmap04 hugemmap05 hugemmap05 hugemmap05_1 hugemmap05 -m hugemmap05_2 hugemmap05 -s -- 1.7.8.rc3 |
From: Wanlong G. <gao...@cn...> - 2011-12-22 10:40:57
|
Hi Cyril: Can you please commit this patch set? Thanks a lot -Wanlong Gao > Hi Cyril, Garrett: > > I have resend the patch set of Tang with some format fixes. > > If you have any comment with this version, please reply me, > and I'll fix and resend, otherwise, please commit them. > > > > Thanks a lot > -Wanlong Gao > |
From: Wanlong G. <gao...@cn...> - 2011-12-27 00:52:54
|
Hi Casper: They all have no time, can you help to commit this patch set? Thanks -Wanlong Gao > Hi Cyril: > > Can you please commit this patch set? > > > Thanks a lot > -Wanlong Gao > >> Hi Cyril, Garrett: >> >> I have resend the patch set of Tang with some format fixes. >> >> If you have any comment with this version, please reply me, >> and I'll fix and resend, otherwise, please commit them. >> >> >> >> Thanks a lot >> -Wanlong Gao >> > > > |
From: Caspar Z. <ca...@ca...> - 2011-12-28 05:22:21
|
Hi, On 11/23/2011 06:29 PM, Wanlong Gao wrote: > Firstly, mounting hugetlbfs on /tmp is not a good idea, because lots of > programs could use /tmp for other purpose. This could cause other tests > fail. > Secondly, mounting hugetlbfs could be done automatically. > This patch creates a temp directory with name including the current PID, > automatically mounts hugetlbfs on the directory before test starts, and > umounts it when the test is over. > > Signed-off-by: tangchen <tan...@cn...> > Signed-off-by: Wanlong Gao <gao...@cn...> > --- > testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c | 50 +++++++------------- > 1 files changed, 18 insertions(+), 32 deletions(-) > > diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c > index 874f736..906f7e4 100644 > --- a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c > +++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c > @@ -73,51 +73,35 @@ > #include "test.h" > #include "usctest.h" > #include "system_specific_hugepages_info.h" > +#include "libmnt.h" > > #define BUFFER_SIZE 256 > > -char* TEMPFILE="mmapfile"; > +char TEMPFILE[MAXPATHLEN]; > > char *TCID="hugemmap01"; /* Test program identifier. */ > int TST_TOTAL=1; /* Total number of test cases. */ > long *addr; /* addr of memory mapped region */ > int fildes; /* file descriptor for tempfile */ > -char *Hopt; /* location of hugetlbfs */ > int beforetest=0; /* Amount of free huge pages before testing */ > int aftertest=0; /* Amount of free huge pages after testing */ > int hugepagesmapped=0; /* Amount of huge pages mapped after testing */ > +char *mount_point=NULL; > > -void setup(); /* Main setup function of test */ > -void cleanup(); /* cleanup function for the test */ > - > -void help() > -{ > - printf(" -H /.. Location of hugetlbfs, i.e. -H /var/hugetlbfs \n"); > -} > +void setup(void); /* Main setup function of test */ > +void cleanup(void); /* cleanup function for the test */ > > int > main(int ac, char **av) > { > int lc; /* loop counter */ > char *msg; /* message returned from parse_opts */ > - int Hflag=0; /* binary flag: opt or not */ > int page_sz=0; > > - option_t options[] = { > - { "H:", &Hflag, &Hopt }, /* Required for location of hugetlbfs */ > - { NULL, NULL, NULL } /* NULL required to end array */ > - }; Hi, I think it's better to keep this option, since not all users would like the default mount place. > - > /* Parse standard options given to run the test. */ > - msg = parse_opts(ac, av, options, &help); > - if (msg != (char *) NULL) { > + msg = parse_opts(ac, av, NULL, NULL); > + if (msg != NULL) { > tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s, use -help", msg); > - tst_exit(); > - } > - > - if (Hflag == 0) { > - tst_brkm(TBROK, NULL, "-H option is REQUIRED for this test, use -h for options help"); > - tst_exit(); > } > > setup(); > @@ -189,18 +173,19 @@ main(int ac, char **av) > * Write some known data into file and get the size of the file. > */ > void > -setup() > +setup(void) > { > - char mypid[40]; > - > - sprintf(mypid,"/%d",getpid()); > - TEMPFILE=strcat(mypid,TEMPFILE); > - TEMPFILE=strcat(Hopt,TEMPFILE); > - > + tst_require_root(NULL); > tst_sig(FORK, DEF_HANDLER, cleanup); > > TEST_PAUSE; > > + tst_tmpdir(); > + mount_point = get_tst_tmpdir(); > + mount_hugetlbfs(mount_point); > + hugepage_alloc(1024); hard-coded hugepage size is not recommended. You should either set it dynamically or allow user pass a parameter via argv. > + snprintf(TEMPFILE, sizeof(TEMPFILE), "%s/mmapfile%d", > + mount_point, getpid()); > } > > /* > @@ -209,7 +194,7 @@ setup() > * Remove the temporary directory created. > */ > void > -cleanup() > +cleanup(void) > { > /* > * print timing stats if that option was specified. > @@ -217,5 +202,6 @@ cleanup() > TEST_CLEANUP; > > unlink(TEMPFILE); > - > + umount_hugetlbfs(mount_point); > + tst_rmdir(); > } |
From: Wanlong G. <gao...@cn...> - 2011-12-28 06:25:05
|
Hi Casper: > > Hi, I think it's better to keep this option, since not all users would > like the default mount place. -H option is not needed, users can set TDIRECTORY env to change the dir if he don't like the default one, also, remove the -H option can be consistent with others. >> + tst_tmpdir(); >> + mount_point = get_tst_tmpdir(); >> + mount_hugetlbfs(mount_point); >> + hugepage_alloc(1024); sure, will change to a macro. Thanks a lot -Wanlong Gao |