xref: /freebsd/tools/test/stress2/misc/schedfuzz.sh (revision 8a272653d9fbd9fc37691c9aad6a05089b4ecb4d)
1 #!/bin/sh
2 
3 #
4 # Copyright (c) 2016 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 # Sched fuzz test scenario.
30 
31 # "panic: sleeping thread" seen:
32 # https://people.freebsd.org/~pho/stress/log/schedfuzz.txt
33 
34 [ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
35 
36 sysctl kern.sched_fuzz.prof_on > /dev/null 2>&1 || exit 0
37 
38 : ${pct1:=0.01}
39 : ${pct2:=0.1}
40 export pct1 pct2
41 
42 seton() {
43 	sysctl kern.sched_fuzz.sched_fuzz_scheduler="${pct1}%return(1)"
44 	sysctl kern.sched_fuzz.sched_fuzz_sx_slock_delay="${pct1}%schedfuzz(82)"
45 	sysctl kern.sched_fuzz.sched_fuzz_sx_xlock_delay="${pct1}%schedfuzz(82)"
46 	sysctl kern.sched_fuzz.sched_fuzz_sx_slock_sleep="${pct1}%schedfuzz(82)"
47 	sysctl kern.sched_fuzz.sched_fuzz_sx_xlock_sleep="${pct1}%schedfuzz(82)"
48 	sysctl kern.sched_fuzz.sched_fuzz_mtx_spin_lock="${pct1}%schedfuzz(44)"
49 	sysctl kern.sched_fuzz.sched_fuzz_mtx_spin_unlock="${pct1}%schedfuzz(44)"
50 	sysctl kern.sched_fuzz.sched_fuzz_malloc="${pct1}%schedfuzz(62)"
51 	sysctl kern.sched_fuzz.sched_fuzz_cv_wait="${pct2}%schedfuzz(100)"
52 	sysctl kern.sched_fuzz.sched_fuzz_cv_timed_wait="${pct2}%schedfuzz(100)"
53 	sysctl kern.sched_fuzz.sched_fuzz_cv_timed_wait_sig="${pct2}%schedfuzz(100)"
54 	sysctl kern.sched_fuzz.sched_fuzz_mtx_lock="${pct1}%schedfuzz(22)"
55 	sysctl kern.sched_fuzz.sched_fuzz_mtx_unlock="${pct1}%schedfuzz(22)"
56 	sysctl kern.sched_fuzz.sched_fuzz_sleepq="${pct1}%schedfuzz(150)"
57 
58 	sysctl kern.sched_fuzz.prof_on=1
59 }
60 
61 setoff() {
62 	sysctl kern.sched_fuzz.prof_on=0
63 }
64 
65 if [ $# -eq 1 ]; then
66 	case "$1" in
67 	on)	seton
68 		;;
69 	off)	setoff
70 		;;
71 	*)	echo "Usage: $0 [on|off]"
72 		exit 1
73 		;;
74 	esac
75 else
76 	seton
77 	./procfs.sh
78 	setoff
79 fi
80