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