]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - tools/test/stress2/misc/crossmp7.sh
one-true-awk: import 20210221 (1e4bc42c53a1) which fixes a number of bugs
[FreeBSD/FreeBSD.git] / tools / test / stress2 / misc / crossmp7.sh
1 #!/bin/sh
2
3 #
4 # Copyright (c) 2015 EMC Corp.
5 # All rights reserved.
6 #
7 # Redistribution and use in source and binary forms, with or without
8 # modification, are permitted provided that the following conditions
9 # are met:
10 # 1. Redistributions of source code must retain the above copyright
11 #    notice, this list of conditions and the following disclaimer.
12 # 2. Redistributions in binary form must reproduce the above copyright
13 #    notice, this list of conditions and the following disclaimer in the
14 #    documentation and/or other materials provided with the distribution.
15 #
16 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 # ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 # SUCH DAMAGE.
27 #
28
29 # Parallel mount and umount of zfs file systems.
30
31 # Page fault seen:
32 # https://people.freebsd.org/~pho/stress/log/avg002.txt
33 # Fixed by r309090.
34
35 # Page fault seen:
36 # https://people.freebsd.org/~pho/stress/log/crossmp7.txt
37 # Fixed by r352437.
38
39 [ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
40 [ `uname -m` = "i386" ] && exit 0
41 [ `sysctl -n kern.kstack_pages` -lt 4 ] && exit 0
42
43 . ../default.cfg
44
45 mounts=15               # Number of parallel scripts
46
47 if [ $# -eq 0 ]; then
48         kldstat -v | grep -q zfs.ko  || { kldload zfs.ko ||
49             exit 0; loaded=1; }
50         zpool list | egrep -q "^stress2_tank" && zpool destroy stress2_tank
51
52         u1=$mdstart
53         u2=$((u1 + 1))
54         u3=$((u2 + 1))
55
56         [ -c /dev/md$u1 ] && mdconfig -d -u $u1
57         [ -c /dev/md$u2 ] && mdconfig -d -u $u2
58         [ -c /dev/md$u3 ] && mdconfig -d -u $u3
59
60         mdconfig -s 512m -u $u1
61         mdconfig -s 512m -u $u2
62         mdconfig -s 512m -u $u3
63
64         zpool create stress2_tank raidz md$u1 md$u2 md$u3
65
66         for i in `jot $mounts`; do
67                 zfs create stress2_tank/test$i
68                 zfs umount stress2_tank/test$i
69         done
70
71         # start the parallel tests
72         touch /tmp/crossmp7.continue
73         for i in `jot $mounts`; do
74                 ./$0 $i &
75                 ./$0 find &
76         done
77
78         wait
79
80         zpool destroy stress2_tank
81         [ -n "$loaded" ] && kldunload zfs.ko
82         mdconfig -d -u $u1
83         mdconfig -d -u $u2
84         mdconfig -d -u $u3
85         exit 0
86 else
87         if [ $1 = find ]; then
88                 while [ -f /tmp/crossmp7.continue ]; do
89                         find /stress2_tank -type f > /dev/null 2>&1
90                 done
91         else
92                 # The test: Parallel mount and unmounts
93                 m=$1
94                 for i in `jot 1024`; do
95                         zfs mount     stress2_tank/test$m
96                         zfs umount -f stress2_tank/test$m
97                 done 2>/dev/null
98                 rm -f /tmp/crossmp7.continue
99         fi
100 fi