170 lines · 3.1 KB · Shell
RawDownload
#!/bin/bash# SPDX-License-Identifier: GPL-2.0+ or MIT NR_CPUS=`grep '^processor' /proc/cpuinfo | wc -l` EXTRA_ARGS=${@} OLDIFS="$IFS"IFS=$'\n'TEST_LIST=(	"-T s"	"-T l"	"-T b"	"-T b -M"	"-T m"	"-T m -M"	"-T i"	"-T r") TEST_NAME=(	"spinlock"	"list"	"buffer"	"buffer with barrier"	"memcpy"	"memcpy with barrier"	"increment"	"membarrier")IFS="$OLDIFS" REPS=1000SLOW_REPS=100NR_THREADS=$((6*${NR_CPUS})) # Prevent GLIBC from registering RSEQ so the selftest can run in legacy and# performance optimized mode.GLIBC_TUNABLES="${GLIBC_TUNABLES:-}:glibc.pthread.rseq=0"export GLIBC_TUNABLES function do_tests(){	local i=0	while [ "$i" -lt "${#TEST_LIST[@]}" ]; do		echo "Running test ${TEST_NAME[$i]}"		./param_test ${TEST_LIST[$i]} -r ${REPS} -t ${NR_THREADS} ${@} ${EXTRA_ARGS} || exit 1		echo "Running compare-twice test ${TEST_NAME[$i]}"		./param_test_compare_twice ${TEST_LIST[$i]} -r ${REPS} -t ${NR_THREADS} ${@} ${EXTRA_ARGS} || exit 1 		echo "Running mm_cid test ${TEST_NAME[$i]}"		./param_test_mm_cid ${TEST_LIST[$i]} -r ${REPS} -t ${NR_THREADS} ${@} ${EXTRA_ARGS} || exit 1		echo "Running mm_cid compare-twice test ${TEST_NAME[$i]}"		./param_test_mm_cid_compare_twice ${TEST_LIST[$i]} -r ${REPS} -t ${NR_THREADS} ${@} ${EXTRA_ARGS} || exit 1		let "i++"	done} echo "Default parameters"do_tests echo "Loop injection: 10000 loops" OLDIFS="$IFS"IFS=$'\n'INJECT_LIST=(	"1"	"2"	"3"	"4"	"5"	"6"	"7"	"8"	"9")IFS="$OLDIFS" NR_LOOPS=10000 i=0while [ "$i" -lt "${#INJECT_LIST[@]}" ]; do	echo "Injecting at <${INJECT_LIST[$i]}>"	do_tests -${INJECT_LIST[i]} ${NR_LOOPS}	let "i++"doneNR_LOOPS= function inject_blocking(){	OLDIFS="$IFS"	IFS=$'\n'	INJECT_LIST=(		"7"		"8"		"9"	)	IFS="$OLDIFS" 	NR_LOOPS=-1 	i=0	while [ "$i" -lt "${#INJECT_LIST[@]}" ]; do		echo "Injecting at <${INJECT_LIST[$i]}>"		do_tests -${INJECT_LIST[i]} -1 ${@}		let "i++"	done	NR_LOOPS=} echo "Testing in legacy RSEQ mode"echo "Yield injection (25%)"inject_blocking -m 4 -y -L echo "Yield injection (50%)"inject_blocking -m 2 -y -L echo "Yield injection (100%)"inject_blocking -m 1 -y -L echo "Kill injection (25%)"inject_blocking -m 4 -k -L echo "Kill injection (50%)"inject_blocking -m 2 -k -L echo "Kill injection (100%)"inject_blocking -m 1 -k -L echo "Sleep injection (1ms, 25%)"inject_blocking -m 4 -s 1 -L echo "Sleep injection (1ms, 50%)"inject_blocking -m 2 -s 1 -L echo "Sleep injection (1ms, 100%)"inject_blocking -m 1 -s 1 -L ./check_optimized || {    echo "Skipping optimized RSEQ mode test. Not supported";    exit 0} echo "Testing in optimized RSEQ mode"echo "Yield injection (25%)"inject_blocking -m 4 -y echo "Yield injection (50%)"inject_blocking -m 2 -y echo "Yield injection (100%)"inject_blocking -m 1 -y echo "Kill injection (25%)"inject_blocking -m 4 -k echo "Kill injection (50%)"inject_blocking -m 2 -k echo "Kill injection (100%)"inject_blocking -m 1 -k echo "Sleep injection (1ms, 25%)"inject_blocking -m 4 -s 1 echo "Sleep injection (1ms, 50%)"inject_blocking -m 2 -s 1 echo "Sleep injection (1ms, 100%)"inject_blocking -m 1 -s 1