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