svn commit: r318862 - user/pho/stress2/misc
Peter Holm
pho at FreeBSD.org
Thu May 25 08:53:57 UTC 2017
Author: pho
Date: Thu May 25 08:53:55 2017
New Revision: 318862
URL: https://svnweb.freebsd.org/changeset/base/318862
Log:
Improve error handling and return error status.
Sponsored by: Dell EMC Isilon
Modified:
user/pho/stress2/misc/bio.sh
Modified: user/pho/stress2/misc/bio.sh
==============================================================================
--- user/pho/stress2/misc/bio.sh Thu May 25 08:34:24 2017 (r318861)
+++ user/pho/stress2/misc/bio.sh Thu May 25 08:53:55 2017 (r318862)
@@ -50,15 +50,17 @@ rm -f bio.c
cd $odir
mount | grep "on $mntpoint " | grep -q /dev/md && umount -f $mntpoint
-[ -c md$mdstart ] && mdconfig -d -u $mdstart
+[ -c /dev/md$mdstart ] && mdconfig -d -u $mdstart
mdconfig -a -t swap -s 2g -u $mdstart || exit 1
bsdlabel -w md$mdstart auto
newfs -n md${mdstart}$part > /dev/null
mount /dev/md${mdstart}$part $mntpoint
(cd $mntpoint; /tmp/bio) &
+pid1=$!
sleep 5
(cd ../testcases/swap; ./swap -t 10m -i 20 -k -l 100 -h) &
+pid2=$!
while pgrep -q bio; do
sleep 2
@@ -67,14 +69,16 @@ done
while pgrep -q swap; do
pkill -9 swap
done
-wait
+wait $pid2
+wait $pid1
+s=$?
while mount | grep "on $mntpoint " | grep -q /dev/md; do
umount $mntpoint || sleep 1
done
mdconfig -d -u $mdstart
rm -rf /tmp/bio
-exit
+exit $s
EOF
#include <sys/param.h>
@@ -100,13 +104,16 @@ EOF
#define PAGES (512 * 1024 * 1024 / PS) /* 512MB file size */
#define PARALLEL 3
#define RUNTIME (5 * 60)
+#define TIMEOUT (20 * 60)
char buf[PS];
void
test(int inx)
{
+ pid_t pid;
size_t i, len, slen;
+ time_t start;
volatile u_int *share;
int fd, r;
u_int *ip, val;
@@ -131,7 +138,9 @@ test(int inx)
fd, 0)) == MAP_FAILED)
err(1, "mmap");
- if (fork() == 0) {
+ start = time(NULL);
+ if ((pid = fork()) == 0) {
+ alarm(2 * RUNTIME);
/* mmap read / write access */
for (i = 0; i < (size_t)(PAGES * PS); i += PS) {
while (share[SYN1] == 0)
@@ -144,11 +153,16 @@ test(int inx)
share[INDX] += PS;
ip[share[INDX] / sizeof(u_int)] = share[INDX];
atomic_add_int(&share[SYN2], 1); /* signal parent */
+ if (i % 1000 == 0 && time(NULL) - start > TIMEOUT)
+ errx(1, "Timed out");;
}
_exit(0);
}
+ if (pid == -1)
+ err(1, "fork()");
share[INDX] = 0;
atomic_add_int(&share[SYN2], 1);
+ alarm(2 * RUNTIME);
for (i = 0; i < (size_t)(PAGES * PS); i += PS) {
while (share[SYN2] == 0)
sched_yield();
@@ -167,9 +181,11 @@ test(int inx)
err(1, "write");
atomic_add_int(&share[SYN1], 1); /* signal child */
+ if (i % 1000 == 0 && time(NULL) - start > TIMEOUT)
+ errx(1, "Timed out");;
}
atomic_add_int(&share[SYN2], -1);
- if (wait(NULL) == -1)
+ if (waitpid(pid, NULL, 0) != pid)
err(1, "wait");
if (munmap(ip, len) == -1)
@@ -186,6 +202,7 @@ test(int inx)
int
main(void)
{
+ pid_t pids[PARALLEL];
time_t start;
int i, s, status;
@@ -193,13 +210,13 @@ main(void)
s = 0;
while ((time(NULL) - start) < RUNTIME && s == 0) {
for (i = 0; i < PARALLEL; i++) {
- if (fork() == 0)
+ if ((pids[i] = fork()) == 0)
test(i);
}
for (i = 0; i < PARALLEL; i++) {
- if (wait(&status) == -1)
- err(1, "wait");
- s += WEXITSTATUS(status);
+ if (waitpid(pids[i], &status, 0) == -1)
+ err(1, "waitpid(%d)", pids[i]);
+ s += status == 0 ? 0 : 1;
}
}
More information about the svn-src-user
mailing list