All of lore.kernel.org
 help / color / mirror / Atom feed
* [LTP] [PATCH 1/4] mm/ksm: taking use of SAFE_FILE_ macro for ksm05.c
@ 2016-03-10  9:34 Li Wang
  2016-03-10  9:34 ` [LTP] [PATCH 2/4] mm/ksm: extend 'max_page_sharing' before ksm testing Li Wang
  0 siblings, 1 reply; 9+ messages in thread
From: Li Wang @ 2016-03-10  9:34 UTC (permalink / raw)
  To: ltp

Signed-off-by: Li Wang <liwang@redhat.com>
---
 testcases/kernel/mem/ksm/ksm05.c | 32 +++-----------------------------
 1 file changed, 3 insertions(+), 29 deletions(-)

diff --git a/testcases/kernel/mem/ksm/ksm05.c b/testcases/kernel/mem/ksm/ksm05.c
index abf888e..2baca3b 100644
--- a/testcases/kernel/mem/ksm/ksm05.c
+++ b/testcases/kernel/mem/ksm/ksm05.c
@@ -75,7 +75,6 @@ int TST_TOTAL = 1;
 static int ksm_run_orig;
 
 static void sighandler(int sig);
-static void write_ksm_run(int val);
 
 int main(int argc, char *argv[])
 {
@@ -123,25 +122,8 @@ static void sighandler(int sig)
 	_exit((sig == SIGSEGV) ? 0 : sig);
 }
 
-static void write_ksm_run(int val)
-{
-	int fd;
-	char buf[BUFSIZ];
-
-	sprintf(buf, "%d", val);
-	fd = open(PATH_KSM "run", O_WRONLY);
-	if (fd == -1)
-		tst_brkm(TBROK | TERRNO, cleanup, "open");
-	if (write(fd, buf, 1) != 1)
-		tst_brkm(TBROK | TERRNO, cleanup, "write");
-	close(fd);
-}
-
 void setup(void)
 {
-	int fd;
-	char buf[BUFSIZ];
-
 	tst_require_root();
 
 	if (tst_kvercmp(2, 6, 32) < 0)
@@ -155,24 +137,16 @@ void setup(void)
 	TEST_PAUSE;
 
 	/* save original /sys/kernel/mm/ksm/run value */
-	fd = open(PATH_KSM "run", O_RDONLY);
-	if (fd == -1)
-		tst_brkm(TBROK | TERRNO, cleanup, "open");
-	if (read(fd, buf, 1) != 1)
-		tst_brkm(TBROK | TERRNO, cleanup, "read");
-	close(fd);
-	ksm_run_orig = atoi(buf);
+	SAFE_FILE_SCANF(NULL, PATH_KSM "run", "%d", &ksm_run_orig);
 
 	/* echo 1 > /sys/kernel/mm/ksm/run */
-	if (ksm_run_orig != 1)
-		write_ksm_run(1);
+	SAFE_FILE_PRINTF(NULL, PATH_KSM "run", "1");
 }
 
 void cleanup(void)
 {
 	/* restore /sys/kernel/mm/ksm/run value */
-	if (ksm_run_orig != 1)
-		write_ksm_run(ksm_run_orig);
+	FILE_PRINTF(PATH_KSM "run", "%d", ksm_run_orig);
 }
 #else
 int main(void)
-- 
1.8.3.1


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

* [LTP] [PATCH 2/4] mm/ksm: extend 'max_page_sharing' before ksm testing
  2016-03-10  9:34 [LTP] [PATCH 1/4] mm/ksm: taking use of SAFE_FILE_ macro for ksm05.c Li Wang
@ 2016-03-10  9:34 ` Li Wang
  2016-03-10  9:34   ` [LTP] [PATCH 3/4] mm/ksm: moving the merge_across_nodes statement in mem.h Li Wang
  2016-03-22 13:14   ` [LTP] [PATCH 2/4] mm/ksm: extend 'max_page_sharing' before ksm testing Cyril Hrubis
  0 siblings, 2 replies; 9+ messages in thread
From: Li Wang @ 2016-03-10  9:34 UTC (permalink / raw)
  To: ltp

This kernel commit (de39e60a6, ksm: introduce ksm_max_page_sharing per page...)
introduced a new KSM sysfs knob '/sys/kernel/mm/ksm/max_page_sharing' in linux-next.

The runtime value of 'max_page_sharing' will affect pages_shared/pages_sharing,
because this enforces a deduplication limit to avoid the virtual memory rmap lists
to grow too large.

ltp/ksm0* tests can easily get failures on that kernel like:
-----
ksm01       0  TINFO  :  wait for all children to stop.
ksm01       0  TINFO  :  KSM merging...
ksm01       0  TINFO  :  resume all children.
ksm01       0  TINFO  :  child 2 stops.
...
ksm01       0  TINFO  :  run is 1.
ksm01       0  TINFO  :  pages_shared is 384.
ksm01       1  TFAIL  :  mem.c:238: pages_shared is not 2.
ksm01       0  TINFO  :  pages_sharing is 97920.
ksm01       2  TFAIL  :  mem.c:238: pages_sharing is not 98302.
ksm01       0  TINFO  :  pages_volatile is 0.
ksm01       0  TINFO  :  pages_unshared is 0.
ksm01       0  TINFO  :  sleep_millisecs is 0.
ksm01       0  TINFO  :  pages_to_scan is 98304.

This patch is intened to extend the 'max_page_sharing' value dynamically to
make tests pass.

Signed-off-by: Li Wang <liwang@redhat.com>
---
 testcases/kernel/mem/include/mem.h | 1 +
 testcases/kernel/mem/ksm/ksm01.c   | 7 +++++++
 testcases/kernel/mem/ksm/ksm02.c   | 7 +++++++
 testcases/kernel/mem/ksm/ksm03.c   | 8 ++++++++
 testcases/kernel/mem/ksm/ksm04.c   | 8 ++++++++
 testcases/kernel/mem/ksm/ksm06.c   | 7 +++++++
 testcases/kernel/mem/lib/mem.c     | 8 +++++++-
 7 files changed, 45 insertions(+), 1 deletion(-)

diff --git a/testcases/kernel/mem/include/mem.h b/testcases/kernel/mem/include/mem.h
index 43988fe..fbb11b2 100644
--- a/testcases/kernel/mem/include/mem.h
+++ b/testcases/kernel/mem/include/mem.h
@@ -43,6 +43,7 @@ void testoom(int mempolicy, int lite, int retcode, int allow_sigkill);
 /* KSM */
 
 #define PATH_KSM		"/sys/kernel/mm/ksm/"
+int max_page_sharing;
 
 void test_ksm_merge_across_nodes(unsigned long nr_pages);
 
diff --git a/testcases/kernel/mem/ksm/ksm01.c b/testcases/kernel/mem/ksm/ksm01.c
index b62df06..a352abd 100644
--- a/testcases/kernel/mem/ksm/ksm01.c
+++ b/testcases/kernel/mem/ksm/ksm01.c
@@ -105,6 +105,9 @@ void setup(void)
 		tst_brkm(TCONF, NULL, "2.6.32 or greater kernel required");
 	if (access(PATH_KSM, F_OK) == -1)
 		tst_brkm(TCONF, NULL, "KSM configuration is not enabled");
+	if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
+		SAFE_FILE_SCANF(NULL, PATH_KSM "max_page_sharing",
+				"%d", &max_page_sharing);
 
 	/*
 	 * kernel commit 90bd6fd introduced a new KSM sysfs knob
@@ -128,4 +131,8 @@ void cleanup(void)
 	if (access(PATH_KSM "merge_across_nodes", F_OK) == 0)
 		FILE_PRINTF(PATH_KSM "merge_across_nodes",
 				 "%d", merge_across_nodes);
+
+	if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
+		FILE_PRINTF(PATH_KSM "max_page_sharing",
+				 "%d", max_page_sharing);
 }
diff --git a/testcases/kernel/mem/ksm/ksm02.c b/testcases/kernel/mem/ksm/ksm02.c
index 537ec01..7b004b4 100644
--- a/testcases/kernel/mem/ksm/ksm02.c
+++ b/testcases/kernel/mem/ksm/ksm02.c
@@ -125,6 +125,10 @@ void cleanup(void)
 		FILE_PRINTF(PATH_KSM "merge_across_nodes",
 				 "%d", merge_across_nodes);
 
+	if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
+		FILE_PRINTF(PATH_KSM "max_page_sharing",
+				"%d", max_page_sharing);
+
 	umount_mem(CPATH, CPATH_NEW);
 }
 
@@ -136,6 +140,9 @@ void setup(void)
 		tst_brkm(TCONF, NULL, "2.6.32 or greater kernel required");
 	if (access(PATH_KSM, F_OK) == -1)
 		tst_brkm(TCONF, NULL, "KSM configuration is not enabled");
+	if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
+		SAFE_FILE_SCANF(NULL, PATH_KSM "max_page_sharing",
+				"%d", &max_page_sharing);
 
 	if (access(PATH_KSM "merge_across_nodes", F_OK) == 0) {
 		SAFE_FILE_SCANF(NULL, PATH_KSM "merge_across_nodes",
diff --git a/testcases/kernel/mem/ksm/ksm03.c b/testcases/kernel/mem/ksm/ksm03.c
index b73e023..f909294 100644
--- a/testcases/kernel/mem/ksm/ksm03.c
+++ b/testcases/kernel/mem/ksm/ksm03.c
@@ -113,6 +113,10 @@ void setup(void)
 		SAFE_FILE_PRINTF(NULL, PATH_KSM "merge_across_nodes", "1");
 	}
 
+	if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
+		SAFE_FILE_SCANF(NULL, PATH_KSM "max_page_sharing",
+				"%d", &max_page_sharing);
+
 	mount_mem("memcg", "cgroup", "memory", MEMCG_PATH, MEMCG_PATH_NEW);
 	tst_sig(FORK, DEF_HANDLER, NULL);
 	TEST_PAUSE;
@@ -124,5 +128,9 @@ void cleanup(void)
 		FILE_PRINTF(PATH_KSM "merge_across_nodes",
 				 "%d", merge_across_nodes);
 
+	if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
+		FILE_PRINTF(PATH_KSM "max_page_sharing",
+				"%d", max_page_sharing);
+
 	umount_mem(MEMCG_PATH, MEMCG_PATH_NEW);
 }
diff --git a/testcases/kernel/mem/ksm/ksm04.c b/testcases/kernel/mem/ksm/ksm04.c
index 0c1d4e0..fe8c640 100644
--- a/testcases/kernel/mem/ksm/ksm04.c
+++ b/testcases/kernel/mem/ksm/ksm04.c
@@ -127,6 +127,10 @@ void cleanup(void)
 		FILE_PRINTF(PATH_KSM "merge_across_nodes",
 				 "%d", merge_across_nodes);
 
+	if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
+		FILE_PRINTF(PATH_KSM "max_page_sharing",
+				"%d", max_page_sharing);
+
 	umount_mem(CPATH, CPATH_NEW);
 	umount_mem(MEMCG_PATH, MEMCG_PATH_NEW);
 }
@@ -146,6 +150,10 @@ void setup(void)
 		SAFE_FILE_PRINTF(NULL, PATH_KSM "merge_across_nodes", "1");
 	}
 
+	if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
+		SAFE_FILE_SCANF(NULL, PATH_KSM "max_page_sharing",
+				"%d", &max_page_sharing);
+
 	tst_sig(FORK, DEF_HANDLER, cleanup);
 	TEST_PAUSE;
 	mount_mem("cpuset", "cpuset", NULL, CPATH, CPATH_NEW);
diff --git a/testcases/kernel/mem/ksm/ksm06.c b/testcases/kernel/mem/ksm/ksm06.c
index 02d304f..1efb613 100644
--- a/testcases/kernel/mem/ksm/ksm06.c
+++ b/testcases/kernel/mem/ksm/ksm06.c
@@ -104,6 +104,9 @@ void setup(void)
 			"%d", &merge_across_nodes);
 	SAFE_FILE_SCANF(NULL, PATH_KSM "sleep_millisecs",
 			"%d", &sleep_millisecs);
+	if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
+		SAFE_FILE_SCANF(NULL, PATH_KSM "max_page_sharing",
+				"%d", &max_page_sharing);
 
 	tst_sig(FORK, DEF_HANDLER, cleanup);
 	TEST_PAUSE;
@@ -116,6 +119,10 @@ void cleanup(void)
 	FILE_PRINTF(PATH_KSM "sleep_millisecs",
 			 "%d", sleep_millisecs);
 	FILE_PRINTF(PATH_KSM "run", "%d", run);
+
+	if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
+		FILE_PRINTF(PATH_KSM "max_page_sharing",
+				"%d", max_page_sharing);
 }
 
 static void usage(void)
diff --git a/testcases/kernel/mem/lib/mem.c b/testcases/kernel/mem/lib/mem.c
index 7b5bb35..d37d6a4 100644
--- a/testcases/kernel/mem/lib/mem.c
+++ b/testcases/kernel/mem/lib/mem.c
@@ -502,9 +502,12 @@ void create_same_memory(int size, int num, int unit)
 	stop_ksm_children(child, num);
 
 	tst_resm(TINFO, "KSM merging...");
+	if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
+		SAFE_FILE_PRINTF(cleanup, PATH_KSM "max_page_sharing",
+				"%ld", size * pages * num);
 	SAFE_FILE_PRINTF(cleanup, PATH_KSM "run", "1");
 	SAFE_FILE_PRINTF(cleanup, PATH_KSM "pages_to_scan", "%ld",
-			 size * pages *num);
+			 size * pages * num);
 	SAFE_FILE_PRINTF(cleanup, PATH_KSM "sleep_millisecs", "0");
 
 	resume_ksm_children(child, num);
@@ -595,6 +598,9 @@ void test_ksm_merge_across_nodes(unsigned long nr_pages)
 	SAFE_FILE_PRINTF(cleanup, PATH_KSM "sleep_millisecs", "0");
 	SAFE_FILE_PRINTF(cleanup, PATH_KSM "pages_to_scan", "%ld",
 			 nr_pages * num_nodes);
+	if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
+		SAFE_FILE_PRINTF(cleanup, PATH_KSM "max_page_sharing",
+			"%ld", nr_pages * num_nodes);
 	/*
 	 * merge_across_nodes setting can be changed only when there
 	 * are no ksm shared pages in system, so set run 2 to unmerge
-- 
1.8.3.1


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

* [LTP] [PATCH 3/4] mm/ksm: moving the merge_across_nodes statement in mem.h
  2016-03-10  9:34 ` [LTP] [PATCH 2/4] mm/ksm: extend 'max_page_sharing' before ksm testing Li Wang
@ 2016-03-10  9:34   ` Li Wang
  2016-03-10  9:34     ` [LTP] [PATCH 4/4] mm/oom: enable ksm before OOM-KSM testing Li Wang
  2016-03-22 13:17     ` [LTP] [PATCH 3/4] mm/ksm: moving the merge_across_nodes statement in mem.h Cyril Hrubis
  2016-03-22 13:14   ` [LTP] [PATCH 2/4] mm/ksm: extend 'max_page_sharing' before ksm testing Cyril Hrubis
  1 sibling, 2 replies; 9+ messages in thread
From: Li Wang @ 2016-03-10  9:34 UTC (permalink / raw)
  To: ltp

The mem.c take use of this value, so that would be better to declear
it in mem.h.

Signed-off-by: Li Wang <liwang@redhat.com>
---
 testcases/kernel/mem/include/mem.h | 1 +
 testcases/kernel/mem/ksm/ksm01.c   | 2 --
 testcases/kernel/mem/ksm/ksm02.c   | 2 --
 testcases/kernel/mem/ksm/ksm03.c   | 2 --
 testcases/kernel/mem/ksm/ksm04.c   | 2 --
 testcases/kernel/mem/ksm/ksm06.c   | 1 -
 6 files changed, 1 insertion(+), 9 deletions(-)

diff --git a/testcases/kernel/mem/include/mem.h b/testcases/kernel/mem/include/mem.h
index fbb11b2..18388ee 100644
--- a/testcases/kernel/mem/include/mem.h
+++ b/testcases/kernel/mem/include/mem.h
@@ -44,6 +44,7 @@ void testoom(int mempolicy, int lite, int retcode, int allow_sigkill);
 
 #define PATH_KSM		"/sys/kernel/mm/ksm/"
 int max_page_sharing;
+int merge_across_nodes;
 
 void test_ksm_merge_across_nodes(unsigned long nr_pages);
 
diff --git a/testcases/kernel/mem/ksm/ksm01.c b/testcases/kernel/mem/ksm/ksm01.c
index a352abd..b37cfbf 100644
--- a/testcases/kernel/mem/ksm/ksm01.c
+++ b/testcases/kernel/mem/ksm/ksm01.c
@@ -72,8 +72,6 @@
 char *TCID = "ksm01";
 int TST_TOTAL = 1;
 
-static int merge_across_nodes;
-
 option_t ksm_options[] = {
 	{"n:", &opt_num, &opt_numstr},
 	{"s:", &opt_size, &opt_sizestr},
diff --git a/testcases/kernel/mem/ksm/ksm02.c b/testcases/kernel/mem/ksm/ksm02.c
index 7b004b4..5429b3c 100644
--- a/testcases/kernel/mem/ksm/ksm02.c
+++ b/testcases/kernel/mem/ksm/ksm02.c
@@ -72,8 +72,6 @@
 char *TCID = "ksm02";
 int TST_TOTAL = 1;
 
-static int merge_across_nodes;
-
 #if HAVE_NUMA_H && HAVE_LINUX_MEMPOLICY_H && HAVE_NUMAIF_H \
 	&& HAVE_MPOL_CONSTANTS
 option_t ksm_options[] = {
diff --git a/testcases/kernel/mem/ksm/ksm03.c b/testcases/kernel/mem/ksm/ksm03.c
index f909294..ab03f47 100644
--- a/testcases/kernel/mem/ksm/ksm03.c
+++ b/testcases/kernel/mem/ksm/ksm03.c
@@ -72,8 +72,6 @@
 char *TCID = "ksm03";
 int TST_TOTAL = 1;
 
-static int merge_across_nodes;
-
 option_t ksm_options[] = {
 	{"n:", &opt_num, &opt_numstr},
 	{"s:", &opt_size, &opt_sizestr},
diff --git a/testcases/kernel/mem/ksm/ksm04.c b/testcases/kernel/mem/ksm/ksm04.c
index fe8c640..4272207 100644
--- a/testcases/kernel/mem/ksm/ksm04.c
+++ b/testcases/kernel/mem/ksm/ksm04.c
@@ -72,8 +72,6 @@
 char *TCID = "ksm04";
 int TST_TOTAL = 1;
 
-static int merge_across_nodes;
-
 #if HAVE_NUMA_H && HAVE_LINUX_MEMPOLICY_H && HAVE_NUMAIF_H \
 	&& HAVE_MPOL_CONSTANTS
 option_t ksm_options[] = {
diff --git a/testcases/kernel/mem/ksm/ksm06.c b/testcases/kernel/mem/ksm/ksm06.c
index 1efb613..3adcb81 100644
--- a/testcases/kernel/mem/ksm/ksm06.c
+++ b/testcases/kernel/mem/ksm/ksm06.c
@@ -56,7 +56,6 @@ int TST_TOTAL = 1;
 
 static int run;
 static int sleep_millisecs;
-static int merge_across_nodes;
 static int n_flag;
 static unsigned long nr_pages;
 
-- 
1.8.3.1


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

* [LTP] [PATCH 4/4] mm/oom: enable ksm before OOM-KSM testing
  2016-03-10  9:34   ` [LTP] [PATCH 3/4] mm/ksm: moving the merge_across_nodes statement in mem.h Li Wang
@ 2016-03-10  9:34     ` Li Wang
  2016-03-22 13:26       ` Cyril Hrubis
  2016-03-22 13:17     ` [LTP] [PATCH 3/4] mm/ksm: moving the merge_across_nodes statement in mem.h Cyril Hrubis
  1 sibling, 1 reply; 9+ messages in thread
From: Li Wang @ 2016-03-10  9:34 UTC (permalink / raw)
  To: ltp

In the alloc_mem() function, the memory flag is set to 'MADV_MERGEABLE',
	if (testcase == KSM && madvise(s, length, MADV_MERGEABLE) == -1)
			return errno;
But it still doesn't send the whole item for test, unless the ksm is enabled.

Generally, the '../ksm/run' default is 0, it should be changed to 1 to activate ksm.

Signed-off-by: Li Wang <liwang@redhat.com>
---
 testcases/kernel/mem/include/mem.h | 1 +
 testcases/kernel/mem/ksm/ksm05.c   | 2 --
 testcases/kernel/mem/lib/mem.c     | 3 +++
 3 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/testcases/kernel/mem/include/mem.h b/testcases/kernel/mem/include/mem.h
index 18388ee..9dea888 100644
--- a/testcases/kernel/mem/include/mem.h
+++ b/testcases/kernel/mem/include/mem.h
@@ -43,6 +43,7 @@ void testoom(int mempolicy, int lite, int retcode, int allow_sigkill);
 /* KSM */
 
 #define PATH_KSM		"/sys/kernel/mm/ksm/"
+int ksm_run_orig;
 int max_page_sharing;
 int merge_across_nodes;
 
diff --git a/testcases/kernel/mem/ksm/ksm05.c b/testcases/kernel/mem/ksm/ksm05.c
index 2baca3b..4037ff3 100644
--- a/testcases/kernel/mem/ksm/ksm05.c
+++ b/testcases/kernel/mem/ksm/ksm05.c
@@ -72,8 +72,6 @@ int TST_TOTAL = 1;
 
 #ifdef HAVE_MADV_MERGEABLE
 
-static int ksm_run_orig;
-
 static void sighandler(int sig);
 
 int main(int argc, char *argv[])
diff --git a/testcases/kernel/mem/lib/mem.c b/testcases/kernel/mem/lib/mem.c
index d37d6a4..0ecde55 100644
--- a/testcases/kernel/mem/lib/mem.c
+++ b/testcases/kernel/mem/lib/mem.c
@@ -224,7 +224,10 @@ void testoom(int mempolicy, int lite, int retcode, int allow_sigkill)
 			 "skip OOM test for KSM pags");
 	} else {
 		tst_resm(TINFO, "start OOM testing for KSM pages.");
+		SAFE_FILE_SCANF(NULL, PATH_KSM "run", "%d", &ksm_run_orig);
+		SAFE_FILE_PRINTF(NULL, PATH_KSM "run", "1");
 		oom(KSM, lite, retcode, allow_sigkill);
+		FILE_PRINTF(PATH_KSM "run", "%d", ksm_run_orig);
 	}
 }
 
-- 
1.8.3.1


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

* [LTP] [PATCH 2/4] mm/ksm: extend 'max_page_sharing' before ksm testing
  2016-03-10  9:34 ` [LTP] [PATCH 2/4] mm/ksm: extend 'max_page_sharing' before ksm testing Li Wang
  2016-03-10  9:34   ` [LTP] [PATCH 3/4] mm/ksm: moving the merge_across_nodes statement in mem.h Li Wang
@ 2016-03-22 13:14   ` Cyril Hrubis
  2016-03-22 13:42     ` Li Wang
  1 sibling, 1 reply; 9+ messages in thread
From: Cyril Hrubis @ 2016-03-22 13:14 UTC (permalink / raw)
  To: ltp

> diff --git a/testcases/kernel/mem/include/mem.h b/testcases/kernel/mem/include/mem.h
> index 43988fe..fbb11b2 100644
> --- a/testcases/kernel/mem/include/mem.h
> +++ b/testcases/kernel/mem/include/mem.h
> @@ -43,6 +43,7 @@ void testoom(int mempolicy, int lite, int retcode, int allow_sigkill);
>  /* KSM */
>  
>  #define PATH_KSM		"/sys/kernel/mm/ksm/"
> +int max_page_sharing;

This variable is not used in the library. It does not make sense to
declare it in the header file.

>  void test_ksm_merge_across_nodes(unsigned long nr_pages);
>  
> diff --git a/testcases/kernel/mem/ksm/ksm01.c b/testcases/kernel/mem/ksm/ksm01.c
> index b62df06..a352abd 100644
> --- a/testcases/kernel/mem/ksm/ksm01.c
> +++ b/testcases/kernel/mem/ksm/ksm01.c
> @@ -105,6 +105,9 @@ void setup(void)
>  		tst_brkm(TCONF, NULL, "2.6.32 or greater kernel required");
>  	if (access(PATH_KSM, F_OK) == -1)
>  		tst_brkm(TCONF, NULL, "KSM configuration is not enabled");
> +	if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
> +		SAFE_FILE_SCANF(NULL, PATH_KSM "max_page_sharing",
> +				"%d", &max_page_sharing);
>  
>  	/*
>  	 * kernel commit 90bd6fd introduced a new KSM sysfs knob
> @@ -128,4 +131,8 @@ void cleanup(void)
>  	if (access(PATH_KSM "merge_across_nodes", F_OK) == 0)
>  		FILE_PRINTF(PATH_KSM "merge_across_nodes",
>  				 "%d", merge_across_nodes);
> +
> +	if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
> +		FILE_PRINTF(PATH_KSM "max_page_sharing",
> +				 "%d", max_page_sharing);
>  }

You are saving and restoring the file in each test. Why can't you just
add two functions to save and restore it the library instead and call
them from test setup and cleanup?

It's also quite confusing that the test saves and restores a value while
it's not modifying it at all. It will be less confusing if it's all done
in the library.

-- 
Cyril Hrubis
chrubis@suse.cz

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

* [LTP] [PATCH 3/4] mm/ksm: moving the merge_across_nodes statement in mem.h
  2016-03-10  9:34   ` [LTP] [PATCH 3/4] mm/ksm: moving the merge_across_nodes statement in mem.h Li Wang
  2016-03-10  9:34     ` [LTP] [PATCH 4/4] mm/oom: enable ksm before OOM-KSM testing Li Wang
@ 2016-03-22 13:17     ` Cyril Hrubis
  1 sibling, 0 replies; 9+ messages in thread
From: Cyril Hrubis @ 2016-03-22 13:17 UTC (permalink / raw)
  To: ltp

Hi!
> The mem.c take use of this value, so that would be better to declear
> it in mem.h.

No it does not. If you grep lib/mem.c the only place where this name
appears is inside of a string and comment.

-- 
Cyril Hrubis
chrubis@suse.cz

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

* [LTP] [PATCH 4/4] mm/oom: enable ksm before OOM-KSM testing
  2016-03-10  9:34     ` [LTP] [PATCH 4/4] mm/oom: enable ksm before OOM-KSM testing Li Wang
@ 2016-03-22 13:26       ` Cyril Hrubis
  0 siblings, 0 replies; 9+ messages in thread
From: Cyril Hrubis @ 2016-03-22 13:26 UTC (permalink / raw)
  To: ltp

Hi!
> +int ksm_run_orig;

This should be declared as local variable in the testoom() function.

>  int max_page_sharing;
>  int merge_across_nodes;
>  
> diff --git a/testcases/kernel/mem/ksm/ksm05.c b/testcases/kernel/mem/ksm/ksm05.c
> index 2baca3b..4037ff3 100644
> --- a/testcases/kernel/mem/ksm/ksm05.c
> +++ b/testcases/kernel/mem/ksm/ksm05.c
> @@ -72,8 +72,6 @@ int TST_TOTAL = 1;
>  
>  #ifdef HAVE_MADV_MERGEABLE
>  
> -static int ksm_run_orig;
> -

And this shouldn't be touched at all.

>  static void sighandler(int sig);
>  
>  int main(int argc, char *argv[])
> diff --git a/testcases/kernel/mem/lib/mem.c b/testcases/kernel/mem/lib/mem.c
> index d37d6a4..0ecde55 100644
> --- a/testcases/kernel/mem/lib/mem.c
> +++ b/testcases/kernel/mem/lib/mem.c
> @@ -224,7 +224,10 @@ void testoom(int mempolicy, int lite, int retcode, int allow_sigkill)
>  			 "skip OOM test for KSM pags");
>  	} else {
>  		tst_resm(TINFO, "start OOM testing for KSM pages.");
> +		SAFE_FILE_SCANF(NULL, PATH_KSM "run", "%d", &ksm_run_orig);
> +		SAFE_FILE_PRINTF(NULL, PATH_KSM "run", "1");
>  		oom(KSM, lite, retcode, allow_sigkill);
> +		FILE_PRINTF(PATH_KSM "run", "%d", ksm_run_orig);
>  	}
>  }

-- 
Cyril Hrubis
chrubis@suse.cz

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

* [LTP] [PATCH 2/4] mm/ksm: extend 'max_page_sharing' before ksm testing
  2016-03-22 13:14   ` [LTP] [PATCH 2/4] mm/ksm: extend 'max_page_sharing' before ksm testing Cyril Hrubis
@ 2016-03-22 13:42     ` Li Wang
  2016-03-22 14:01       ` Li Wang
  0 siblings, 1 reply; 9+ messages in thread
From: Li Wang @ 2016-03-22 13:42 UTC (permalink / raw)
  To: ltp

Hi Cyril,

On Tue, Mar 22, 2016 at 9:14 PM, Cyril Hrubis <chrubis@suse.cz> wrote:

> > diff --git a/testcases/kernel/mem/include/mem.h
> b/testcases/kernel/mem/include/mem.h
> > index 43988fe..fbb11b2 100644
> > --- a/testcases/kernel/mem/include/mem.h
> > +++ b/testcases/kernel/mem/include/mem.h
> > @@ -43,6 +43,7 @@ void testoom(int mempolicy, int lite, int retcode, int
> allow_sigkill);
> >  /* KSM */
> >
> >  #define PATH_KSM             "/sys/kernel/mm/ksm/"
> > +int max_page_sharing;
>
> This variable is not used in the library. It does not make sense to
> declare it in the header file.
>

no, it has been used in mem.c file.

see here:
------------
diff --git a/testcases/kernel/mem/lib/
mem.c b/testcases/kernel/mem/lib/mem.c
index 7b5bb35..d37d6a4 100644
--- a/testcases/kernel/mem/lib/mem.c
+++ b/testcases/kernel/mem/lib/mem.c
@@ -502,9 +502,12 @@ void create_same_memory(int size, int num, int unit)
        stop_ksm_children(child, num);

        tst_resm(TINFO, "KSM merging...");
+       if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
+               SAFE_FILE_PRINTF(cleanup, PATH_KSM "max_page_sharing",
+                               "%ld", size * pages * num);
        SAFE_FILE_PRINTF(cleanup, PATH_KSM "run", "1");
        SAFE_FILE_PRINTF(cleanup, PATH_KSM "pages_to_scan", "%ld",
-                        size * pages *num);
+                        size * pages * num);
        SAFE_FILE_PRINTF(cleanup, PATH_KSM "sleep_millisecs", "0");

        resume_ksm_children(child, num);
@@ -595,6 +598,9 @@ void test_ksm_merge_across_nodes(unsigned long nr_pages)
        SAFE_FILE_PRINTF(cleanup, PATH_KSM "sleep_millisecs", "0");
        SAFE_FILE_PRINTF(cleanup, PATH_KSM "pages_to_scan", "%ld",
                         nr_pages * num_nodes);
+       if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
+               SAFE_FILE_PRINTF(cleanup, PATH_KSM "max_page_sharing",
+                       "%ld", nr_pages * num_nodes);



> >  void test_ksm_merge_across_nodes(unsigned long nr_pages);
> >
> > diff --git a/testcases/kernel/mem/ksm/ksm01.c
> b/testcases/kernel/mem/ksm/ksm01.c
> > index b62df06..a352abd 100644
> > --- a/testcases/kernel/mem/ksm/ksm01.c
> > +++ b/testcases/kernel/mem/ksm/ksm01.c
> > @@ -105,6 +105,9 @@ void setup(void)
> >               tst_brkm(TCONF, NULL, "2.6.32 or greater kernel required");
> >       if (access(PATH_KSM, F_OK) == -1)
> >               tst_brkm(TCONF, NULL, "KSM configuration is not enabled");
> > +     if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
> > +             SAFE_FILE_SCANF(NULL, PATH_KSM "max_page_sharing",
> > +                             "%d", &max_page_sharing);
> >
> >       /*
> >        * kernel commit 90bd6fd introduced a new KSM sysfs knob
> > @@ -128,4 +131,8 @@ void cleanup(void)
> >       if (access(PATH_KSM "merge_across_nodes", F_OK) == 0)
> >               FILE_PRINTF(PATH_KSM "merge_across_nodes",
> >                                "%d", merge_across_nodes);
> > +
> > +     if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
> > +             FILE_PRINTF(PATH_KSM "max_page_sharing",
> > +                              "%d", max_page_sharing);
> >  }
>
> You are saving and restoring the file in each test. Why can't you just
> add two functions to save and restore it the library instead and call
> them from test setup and cleanup?
>

ok, that's a better way.


>
> It's also quite confusing that the test saves and restores a value while
> it's not modifying it at all. It will be less confusing if it's all done
> in the library.
>
> --
> Cyril Hrubis
> chrubis@suse.cz
>



-- 
Regards,
Li Wang
Email: liwang@redhat.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linux.it/pipermail/ltp/attachments/20160322/b998aff0/attachment.html>

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

* [LTP] [PATCH 2/4] mm/ksm: extend 'max_page_sharing' before ksm testing
  2016-03-22 13:42     ` Li Wang
@ 2016-03-22 14:01       ` Li Wang
  0 siblings, 0 replies; 9+ messages in thread
From: Li Wang @ 2016-03-22 14:01 UTC (permalink / raw)
  To: ltp

On Tue, Mar 22, 2016 at 9:42 PM, Li Wang <liwang@redhat.com> wrote:

> Hi Cyril,
>
> On Tue, Mar 22, 2016 at 9:14 PM, Cyril Hrubis <chrubis@suse.cz> wrote:
>
>> > diff --git a/testcases/kernel/mem/include/mem.h
>> b/testcases/kernel/mem/include/mem.h
>> > index 43988fe..fbb11b2 100644
>> > --- a/testcases/kernel/mem/include/mem.h
>> > +++ b/testcases/kernel/mem/include/mem.h
>> > @@ -43,6 +43,7 @@ void testoom(int mempolicy, int lite, int retcode,
>> int allow_sigkill);
>> >  /* KSM */
>> >
>> >  #define PATH_KSM             "/sys/kernel/mm/ksm/"
>> > +int max_page_sharing;
>>
>> This variable is not used in the library. It does not make sense to
>> declare it in the header file.
>>
>
> no, it has been used in mem.c file.
>

Oops! you are right, I didn't noticed that it just a string(not the value)
in the mem.c codes. sorry for making noise here. I will re-write the
patches.


>
> see here:
> ------------
> diff --git a/testcases/kernel/mem/lib/
> mem.c b/testcases/kernel/mem/lib/mem.c
> index 7b5bb35..d37d6a4 100644
> --- a/testcases/kernel/mem/lib/mem.c
> +++ b/testcases/kernel/mem/lib/mem.c
> @@ -502,9 +502,12 @@ void create_same_memory(int size, int num, int unit)
>         stop_ksm_children(child, num);
>
>         tst_resm(TINFO, "KSM merging...");
> +       if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
> +               SAFE_FILE_PRINTF(cleanup, PATH_KSM "max_page_sharing",
> +                               "%ld", size * pages * num);
>         SAFE_FILE_PRINTF(cleanup, PATH_KSM "run", "1");
>         SAFE_FILE_PRINTF(cleanup, PATH_KSM "pages_to_scan", "%ld",
> -                        size * pages *num);
> +                        size * pages * num);
>         SAFE_FILE_PRINTF(cleanup, PATH_KSM "sleep_millisecs", "0");
>
>         resume_ksm_children(child, num);
> @@ -595,6 +598,9 @@ void test_ksm_merge_across_nodes(unsigned long
> nr_pages)
>         SAFE_FILE_PRINTF(cleanup, PATH_KSM "sleep_millisecs", "0");
>         SAFE_FILE_PRINTF(cleanup, PATH_KSM "pages_to_scan", "%ld",
>                          nr_pages * num_nodes);
> +       if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
> +               SAFE_FILE_PRINTF(cleanup, PATH_KSM "max_page_sharing",
> +                       "%ld", nr_pages * num_nodes);
>
>
>
>> >  void test_ksm_merge_across_nodes(unsigned long nr_pages);
>> >
>> > diff --git a/testcases/kernel/mem/ksm/ksm01.c
>> b/testcases/kernel/mem/ksm/ksm01.c
>> > index b62df06..a352abd 100644
>> > --- a/testcases/kernel/mem/ksm/ksm01.c
>> > +++ b/testcases/kernel/mem/ksm/ksm01.c
>> > @@ -105,6 +105,9 @@ void setup(void)
>> >               tst_brkm(TCONF, NULL, "2.6.32 or greater kernel
>> required");
>> >       if (access(PATH_KSM, F_OK) == -1)
>> >               tst_brkm(TCONF, NULL, "KSM configuration is not enabled");
>> > +     if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
>> > +             SAFE_FILE_SCANF(NULL, PATH_KSM "max_page_sharing",
>> > +                             "%d", &max_page_sharing);
>> >
>> >       /*
>> >        * kernel commit 90bd6fd introduced a new KSM sysfs knob
>> > @@ -128,4 +131,8 @@ void cleanup(void)
>> >       if (access(PATH_KSM "merge_across_nodes", F_OK) == 0)
>> >               FILE_PRINTF(PATH_KSM "merge_across_nodes",
>> >                                "%d", merge_across_nodes);
>> > +
>> > +     if (access(PATH_KSM "max_page_sharing", F_OK) == 0)
>> > +             FILE_PRINTF(PATH_KSM "max_page_sharing",
>> > +                              "%d", max_page_sharing);
>> >  }
>>
>> You are saving and restoring the file in each test. Why can't you just
>> add two functions to save and restore it the library instead and call
>> them from test setup and cleanup?
>>
>
> ok, that's a better way.
>
>
>>
>> It's also quite confusing that the test saves and restores a value while
>> it's not modifying it at all. It will be less confusing if it's all done
>> in the library.
>>
>> --
>> Cyril Hrubis
>> chrubis@suse.cz
>>
>
>
>
> --
> Regards,
> Li Wang
> Email: liwang@redhat.com
>



-- 
Regards,
Li Wang
Email: liwang@redhat.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linux.it/pipermail/ltp/attachments/20160322/f174172d/attachment-0001.html>

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

end of thread, other threads:[~2016-03-22 14:01 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-10  9:34 [LTP] [PATCH 1/4] mm/ksm: taking use of SAFE_FILE_ macro for ksm05.c Li Wang
2016-03-10  9:34 ` [LTP] [PATCH 2/4] mm/ksm: extend 'max_page_sharing' before ksm testing Li Wang
2016-03-10  9:34   ` [LTP] [PATCH 3/4] mm/ksm: moving the merge_across_nodes statement in mem.h Li Wang
2016-03-10  9:34     ` [LTP] [PATCH 4/4] mm/oom: enable ksm before OOM-KSM testing Li Wang
2016-03-22 13:26       ` Cyril Hrubis
2016-03-22 13:17     ` [LTP] [PATCH 3/4] mm/ksm: moving the merge_across_nodes statement in mem.h Cyril Hrubis
2016-03-22 13:14   ` [LTP] [PATCH 2/4] mm/ksm: extend 'max_page_sharing' before ksm testing Cyril Hrubis
2016-03-22 13:42     ` Li Wang
2016-03-22 14:01       ` Li Wang

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.