svn commit: r316700 - user/pho/stress2/misc

Peter Holm pho at FreeBSD.org
Tue Apr 11 12:38:43 UTC 2017


Author: pho
Date: Tue Apr 11 12:38:42 2017
New Revision: 316700
URL: https://svnweb.freebsd.org/changeset/base/316700

Log:
  Make this test run on i386 by limiting RLIMIT_MEMLOCK as suggested by
  markj at .
  Remove further VM pressure from test, as this proved unnecessary.
  Changes tested on both i386 and amd64, before and after the r316689 fix of
  the vm_fault_copy_entry() panic seen.
  
  Suggested by:	 markj
  Sponsored by:	Dell EMC Isilon

Modified:
  user/pho/stress2/misc/mmap18.sh

Modified: user/pho/stress2/misc/mmap18.sh
==============================================================================
--- user/pho/stress2/misc/mmap18.sh	Tue Apr 11 08:56:18 2017	(r316699)
+++ user/pho/stress2/misc/mmap18.sh	Tue Apr 11 12:38:42 2017	(r316700)
@@ -30,7 +30,10 @@
 
 # Copy of mmap10.sh with core dump disabled.
 # http://people.freebsd.org/~pho/stress/log/kostik711.txt
+
+# panic: vm_fault_copy_entry: main object missing page
 # http://people.freebsd.org/~pho/stress/log/mmap18.txt
+# Fixed by: r316689
 
 [ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
 
@@ -42,16 +45,14 @@ sed '1,/^EOF/d' < $here/$0 > mmap18.c
 mycc -o mmap18 -Wall -Wextra -O2 mmap18.c -lpthread || exit 1
 rm -f mmap18.c
 
-daemon sh -c "(cd $here/../testcases/swap; ./swap -t 2m -i 20 -k)"
-rnd=`od -An -N1 -t u1 /dev/random | sed 's/ //g'`
-sleep $((rnd % 10))
-for i in `jot 2`; do
-	/tmp/mmap18
+s=0
+wire=$((`sysctl -n vm.max_wired` - `sysctl -n vm.stats.vm.v_wire_count`))
+for i in `jot 5`; do
+	/tmp/mmap18 `sysctl -n vm.max_wired` || s=1
 done
-killall -q swap
 
 rm -f /tmp/mmap18 /tmp/mmap18.core
-exit 0
+exit $s
 EOF
 #include <sys/types.h>
 #include <sys/mman.h>
@@ -77,10 +78,10 @@ EOF
 #define N (128 * 1024 / (int)sizeof(u_int32_t))
 #define PARALLEL 50
 
-u_int32_t r[N];
-void *p;
+static u_int32_t r[N];
+static void *p;
 
-unsigned long
+static unsigned long
 makearg(void)
 {
 	unsigned long val;
@@ -102,10 +103,10 @@ makearg(void)
 	}
 #endif
 
-	return(val);
+	return (val);
 }
 
-void *
+static void *
 makeptr(void)
 {
 	unsigned long val;
@@ -119,7 +120,7 @@ makeptr(void)
 	return ((void *)val);
 }
 
-void *
+static void *
 tmmap(void *arg __unused)
 {
 	size_t len;
@@ -138,8 +139,8 @@ tmmap(void *arg __unused)
 			munmap(p, len);
 		}
 
-		if ((p = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_ANON, -1,
-		    0)) != MAP_FAILED) {
+		if ((p = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_ANON,
+		    -1, 0)) != MAP_FAILED) {
 			usleep(100);
 			munmap(p, len);
 		}
@@ -149,7 +150,7 @@ tmmap(void *arg __unused)
 	return (NULL);
 }
 
-void *
+static void *
 tmlock(void *arg __unused)
 {
 	int i, n;
@@ -167,16 +168,16 @@ tmlock(void *arg __unused)
 				n++;
 	}
 	if (n < 10)
-		fprintf(stderr, "Note: tmlock() only succeeded %d times.\n",
-		    n);
+		fprintf(stderr, "Note: tmlock() only succeeded %d "
+		    "times.\n", n);
 
 	return (NULL);
 }
 
-void *
+static void *
 tmprotect(void *arg __unused)
 {
-	const void *addr;
+	void *addr;
 	size_t len;
 	int i, n, prot;
 
@@ -191,13 +192,13 @@ tmprotect(void *arg __unused)
 		usleep(1000);
 	}
 	if (n < 10)
-		fprintf(stderr, "Note: tmprotect() only succeeded %d times.\n",
-		    n);
+		fprintf(stderr, "Note: tmprotect() only succeeded %d "
+		    "times.\n", n);
 
 	return (NULL);
 }
 
-void *
+static void *
 tmlockall(void *arg __unused)
 {
 	int flags, i, n;
@@ -213,13 +214,13 @@ tmlockall(void *arg __unused)
 		usleep(1000);
 	}
 	if (n < 10)
-		fprintf(stderr, "Note: tmlockall() only succeeded %d times.\n",
-		    n);
+		fprintf(stderr, "Note: tmlockall() only succeeded %d "
+		    "times.\n", n);
 
 	return (NULL);
 }
 
-void
+static void
 test(void)
 {
 	pthread_t tid[4];
@@ -249,15 +250,32 @@ test(void)
 }
 
 int
-main(void)
+main(int argc, char *argv[])
 {
 	struct rlimit rl;
+	rlim_t maxlock;
 	int i, j;
 
+	if (argc != 2) {
+		fprintf(stderr, "Usage:%s <max pages to lock.>\n", argv[0]);
+		exit(1);
+	}
 	rl.rlim_max = rl.rlim_cur = 0;
 	if (setrlimit(RLIMIT_CORE, &rl) == -1)
 		warn("setrlimit");
 
+	if (getrlimit(RLIMIT_MEMLOCK, &rl) == -1)
+		warn("getrlimit");
+	maxlock = atol(argv[1]);
+	if (maxlock == 0)
+		errx(1, "Argument is zero");
+	maxlock = (maxlock / 10 * 8) / PARALLEL * PAGE_SIZE;
+	if (maxlock < rl.rlim_cur) {
+		rl.rlim_max = rl.rlim_cur = maxlock;
+		if (setrlimit(RLIMIT_MEMLOCK, &rl) == -1)
+			warn("setrlimit");
+	}
+
 	for (i = 0; i < N; i++)
 		r[i] = arc4random();
 


More information about the svn-src-user mailing list