1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0+ or MIT
3
4NR_CPUS=`grep '^processor' /proc/cpuinfo | wc -l`
5
6EXTRA_ARGS=${@}
7
8OLDIFS="$IFS"
9IFS=$'\n'
10TEST_LIST=(
11	"-T s"
12	"-T l"
13	"-T b"
14	"-T b -M"
15	"-T m"
16	"-T m -M"
17	"-T i"
18	"-T r"
19)
20
21TEST_NAME=(
22	"spinlock"
23	"list"
24	"buffer"
25	"buffer with barrier"
26	"memcpy"
27	"memcpy with barrier"
28	"increment"
29	"membarrier"
30)
31IFS="$OLDIFS"
32
33REPS=1000
34SLOW_REPS=100
35NR_THREADS=$((6*${NR_CPUS}))
36
37function do_tests()
38{
39	local i=0
40	while [ "$i" -lt "${#TEST_LIST[@]}" ]; do
41		echo "Running test ${TEST_NAME[$i]}"
42		./param_test ${TEST_LIST[$i]} -r ${REPS} -t ${NR_THREADS} ${@} ${EXTRA_ARGS} || exit 1
43		echo "Running compare-twice test ${TEST_NAME[$i]}"
44		./param_test_compare_twice ${TEST_LIST[$i]} -r ${REPS} -t ${NR_THREADS} ${@} ${EXTRA_ARGS} || exit 1
45
46		echo "Running mm_cid test ${TEST_NAME[$i]}"
47		./param_test_mm_cid ${TEST_LIST[$i]} -r ${REPS} -t ${NR_THREADS} ${@} ${EXTRA_ARGS} || exit 1
48		echo "Running mm_cid compare-twice test ${TEST_NAME[$i]}"
49		./param_test_mm_cid_compare_twice ${TEST_LIST[$i]} -r ${REPS} -t ${NR_THREADS} ${@} ${EXTRA_ARGS} || exit 1
50
51		echo "Running mm_numa_cid test ${TEST_NAME[$i]}"
52		./param_test_mm_numa_cid ${TEST_LIST[$i]} -r ${REPS} -t ${NR_THREADS} ${@} ${EXTRA_ARGS} || exit 1
53		echo "Running mm_numa_cid compare-twice test ${TEST_NAME[$i]}"
54		./param_test_mm_numa_cid_compare_twice ${TEST_LIST[$i]} -r ${REPS} -t ${NR_THREADS} ${@} ${EXTRA_ARGS} || exit 1
55		let "i++"
56	done
57}
58
59echo "Default parameters"
60do_tests
61
62echo "Loop injection: 10000 loops"
63
64OLDIFS="$IFS"
65IFS=$'\n'
66INJECT_LIST=(
67	"1"
68	"2"
69	"3"
70	"4"
71	"5"
72	"6"
73	"7"
74	"8"
75	"9"
76)
77IFS="$OLDIFS"
78
79NR_LOOPS=10000
80
81i=0
82while [ "$i" -lt "${#INJECT_LIST[@]}" ]; do
83	echo "Injecting at <${INJECT_LIST[$i]}>"
84	do_tests -${INJECT_LIST[i]} ${NR_LOOPS}
85	let "i++"
86done
87NR_LOOPS=
88
89function inject_blocking()
90{
91	OLDIFS="$IFS"
92	IFS=$'\n'
93	INJECT_LIST=(
94		"7"
95		"8"
96		"9"
97	)
98	IFS="$OLDIFS"
99
100	NR_LOOPS=-1
101
102	i=0
103	while [ "$i" -lt "${#INJECT_LIST[@]}" ]; do
104		echo "Injecting at <${INJECT_LIST[$i]}>"
105		do_tests -${INJECT_LIST[i]} -1 ${@}
106		let "i++"
107	done
108	NR_LOOPS=
109}
110
111echo "Yield injection (25%)"
112inject_blocking -m 4 -y
113
114echo "Yield injection (50%)"
115inject_blocking -m 2 -y
116
117echo "Yield injection (100%)"
118inject_blocking -m 1 -y
119
120echo "Kill injection (25%)"
121inject_blocking -m 4 -k
122
123echo "Kill injection (50%)"
124inject_blocking -m 2 -k
125
126echo "Kill injection (100%)"
127inject_blocking -m 1 -k
128
129echo "Sleep injection (1ms, 25%)"
130inject_blocking -m 4 -s 1
131
132echo "Sleep injection (1ms, 50%)"
133inject_blocking -m 2 -s 1
134
135echo "Sleep injection (1ms, 100%)"
136inject_blocking -m 1 -s 1
137