123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362 |
- version="1.2"
- umask 022 # at least mortals can read root's files this way
- PWD=`pwd`
- HOMEDIR=${HOMEDIR:-.}
- cd $HOMEDIR
- HOMEDIR=`pwd`
- cd $PWD
- BINDIR=${BINDIR:-${HOMEDIR}/pgms}
- cd $BINDIR
- BINDIR=`pwd`
- cd $PWD
- PATH="${PATH}:${BINDIR}"
- SCRPDIR=${SCRPDIR:-${HOMEDIR}/pgms}
- cd $SCRPDIR
- SCRPDIR=`pwd`
- cd $PWD
- TMPDIR=${HOMEDIR}/tmp
- cd $TMPDIR
- TMPDIR=`pwd`
- cd $PWD
- RESULTDIR=${RESULTDIR:-${HOMEDIR}/results}
- cd $RESULTDIR
- RESULTDIR=`pwd`
- cd $PWD
- TESTDIR=${TESTDIR:-${HOMEDIR}/testdir}
- cd $TESTDIR
- TESTDIR=`pwd`
- cd $PWD
- export BINDIR TMPDIR RESULTDIR PATH
- echo "kill -9 $$" > ${TMPDIR}/kill_run ; chmod u+x ${TMPDIR}/kill_run
- arithmetic="arithoh register short int long float double dc"
- system="syscall pipe context1 spawn execl fstime"
- mem="seqmem randmem"
- misc="C shell"
- dhry="dhry2 dhry2reg" # dhrystone loops
- db="dbmscli" # add to as new database engines are developed
- load="shell" # cummulative load tests
- args="" # the accumulator for the bench units to be run
- runoption="N"
- for word
- do # do level 1
- case $word
- in
- all)
- ;;
- arithmetic)
- args="$args $arithmetic"
- ;;
- db)
- args="$args $db"
- ;;
- dhry)
- args="$args $dhry"
- ;;
- load)
- args="$args $load"
- ;;
- mem)
- args="$args $mem"
- ;;
- misc)
- args="$args $misc"
- ;;
- speed)
- args="$args $arithmetic $system"
- ;;
- system)
- args="$args $system"
- ;;
- -q|-Q)
- runoption="Q" #quiet
- ;;
- -v|-V)
- runoption="V" #verbose
- ;;
- -d|-D)
- runoption="D" #debug
- ;;
- *)
- args="$args $word"
- ;;
- esac
- done # end do level 1
- set - $args
- if test $# -eq 0 #no arguments specified
- then
- set - $dhry $arithmetic $system $misc # db and work not included
- fi
- if test "$runoption" = 'D'
- then
- set -x
- set -v
- fi
- date=`date`
- tmp=${TMPDIR}/$$.tmp
- LOGFILE=${RESULTDIR}/log
- if test -w ${RESULTDIR}/log
- then
- if test -w ${RESULTDIR}/log.accum
- then
- cat ${RESULTDIR}/log >> ${RESULTDIR}/log.accum
- rm ${RESULTDIR}/log
- else
- mv ${RESULTDIR}/log ${RESULTDIR}/log.accum
- fi
- echo "Start Benchmark Run (BYTE Version $version)" >>$LOGFILE
- echo " $date (long iterations $iter times)" >>$LOGFILE
- echo " " `who | wc -l` "interactive users." >>$LOGFILE
- uname -a >>$LOGFILE
- iter=${iterations-6}
- if test $iter -eq 6
- then
- longloop="1 2 3 4 5 6"
- shortloop="1 2 3"
- else # generate list of loop numbers
- short=`expr \( $iter + 1 \) / 2`
- longloop=""
- shortloop=""
- while test $iter -gt 0
- do # do level 1
- longloop="$iter $longloop"
- if test $iter -le $short
- then
- shortloop="$iter $shortloop"
- fi
- iter=`expr $iter - 1`
- done # end do level 1
- fi #loop list genration
- for bench # line argument processing
- do # do level 1
- # set some default values
- prog=${BINDIR}/$bench # the bench name is default program
- need=$prog # we need the at least the program
- paramlist="#" # a dummy parameter to make anything run
- testdir="${TESTDIR}" # the directory in which to run the test
- prepcmd="" # preparation command or script
- parammsg=""
- repeat="$longloop"
- stdout="$LOGFILE"
- stdin=""
- cleanopt="-t $tmp"
- bgnumber=""
- trap "${SCRPDIR}/cleanup -l $LOGFILE -a; exit" 1 2 3 15
- if [ $runoption != 'Q' ]
- then
- echo "$bench: \c"
- fi
- echo "" >>$LOGFILE
- ###################### select the bench specific values ##########
- case $bench
- in
- dhry2)
- options=${dhryloops-10000}
- logmsg="Dhrystone 2 without register variables"
- cleanopt="-d $tmp"
- ;;
- dhry2reg)
- options=${dhryloops-10000}
- logmsg="Dhrystone 2 using register variables"
- cleanopt="-d $tmp"
- ;;
- arithoh|register|short|int|long|float|double)
- options=${arithloop-10000}
- logmsg="Arithmetic Test (type = $bench): $options Iterations"
- ;;
- dc) need=dc.dat
- prog=dc
- options=""
- stdin=dc.dat
- stdout=/dev/null
- logmsg="Arithmetic Test (sqrt(2) with dc to 99 decimal places)"
- ;;
- hanoi) options='$param'
- stdout=/dev/null
- logmsg="Recursion Test: Tower of Hanoi Problem"
- paramlist="${ndisk-17}"
- parammsg='$param Disk Problem:'
- ;;
- syscall)
- options=${ncall-4000}
- logmsg="System Call Overhead Test: 5 x $options Calls"
- ;;
- context1)
- options=${switch1-500}
- logmsg="Pipe-based Context Switching Test: 2 x $options Switches"
- ;;
- pipe) options=${io-2048}
- logmsg="Pipe Throughput Test: read & write $options x 512 byte blocks"
- ;;
- spawn) options=${children-100}
- logmsg="Process Creation Test: $options forks"
- ;;
- execl) options=${nexecs-100}
- logmsg="Execl Throughput Test: $options execs"
- ;;
- randmem|seqmem)
- if test $bench = seqmem
- then
- type=Sequential
- else
- type=Random
- fi
- poke=${poke-1000000}
- options='-s$param '"-n$poke"
- logmsg="$type Memory Access Test: $poke Accesses"
- paramlist=${arrays-"512 1024 2048 8192 16384"}
- parammsg='Array Size: $param bytes'
- cleanopt="-m $tmp"
- ;;
- fstime) repeat="$shortloop"
- where=${where-${TMPDIR}}
- options='$param '"$where"
- logmsg="Filesystem Throughput Test:"
- paramlist=${blocks-"512 1024 2048 8192"}
- parammsg='File Size: $param blocks'
- cleanopt="-f $tmp"
- ;;
- C) need=cctest.c
- prog=cc
- options='$param'
- stdout=/dev/null
- repeat="$shortloop"
- logmsg="C Compiler Test:"
- paramlist="cctest.c"
- parammsg='cc $param'
- rm -f a.out
- ;;
- dbmscli)
- repeat="$shortloop"
- need="db.dat"
- prepcmd='${BINDIR}/dbprep ${testdir}/db.dat 10000'
- paramlist=${clients-"1 2 4 8"}
- parammsg='$param client processes. (filesize `cat ${testdir}/db.dat|wc -c` bytes)'
- logmsg="Client/Server Database Engine:"
- options='${testdir}/db.dat $param 0 1000' # $param clients;
- # 0 sleep; 1000 iterations
- ;;
- shell)
- prog="multi.sh"
- repeat="$shortloop"
- logmsg="Bourne shell script and Unix utilities"
- paramlist=${background-"1 2 4 8"}
- parammsg='$param concurrent background processes'
- bgnumber='$param'
- testdir="shelldir"
- ;;
- *) ${BINDIR}/cleanup -l $LOGFILE -r "run: unknown benchmark \"$bench\"" -a
- exit 1
- ;;
- esac
- echo "$logmsg" >>$LOGFILE
- for param in $paramlist
- do # level 2
- param=`echo $param | sed 's/_/ /g'` # be sure that spaces are used
- # underscore can couple params
- if [ "$runoption" != "Q" ]
- then
- echo "\n [$param] -\c" # generate message to user
- fi
- eval msg='"'$parammsg'"' # the eval is used to
- if test "$msg" # evaluate any embedded
- then # variables in the parammsg
- echo "" >>$LOGFILE
- echo "$msg" >>$LOGFILE
- fi
- eval opt='"'$options'"' # evaluate any vars in options
- eval prep='"'$prepcmd'"' # evaluate any prep command
- eval bg='"'$bgnumber'"' # evaluate bgnumber string
- rm -f $tmp # remove any tmp files
- # if the test requires mulitple concurrent processes,
- # prepare the background process string (bgstr)
- # this is just a string of "+"s that will provides a
- # parameter count for a "for" loop
- bgstr=""
- if test "$bg" != ""
- then
- count=`expr "$bg"`
- while test $count -gt 0
- do
- bgstr="+ $bgstr"
- count=`expr $count - 1`
- done
- fi
- #
- for i in $repeat # loop for the specified number
- do # do depth 3
- if [ "$runoption" != 'D' ] # level 1
- then
- # regular Run - set logfile to go on signal
- trap "${SCRPDIR}/cleanup -l $LOGFILE -i $i $cleanopt -a; exit" 1 2 3 15
- else
- trap "exit" 1 2 3 15
- fi #end level 1
- if [ "$runoption" != 'Q' ]
- then
- echo " $i\c" # display repeat number
- fi
- pwd=`pwd` # remember where we are
- cd $testdir # move to the test directory
- if [ "$runoption" = "V" ]
- then
- echo
- echo "BENCH COMMAND TO BE EXECUTED:"
- echo "$prog $opt"
- fi
- # execute any prepratory command string
- if [ -n "$prep" ]
- then
- $prep >>$stdout
- fi
- ############ THE BENCH IS TIMED ##############
- if test "$stdin" = ""
- then # without redirected stdin
- time $prog $opt $bgstr 2>>$tmp >>$stdout
- else # with redirected stdin
- time $prog $opt $bgstr <$stdin 2>>$tmp >>$stdout
- fi
- time $benchcmd
- ###############################################
- cd $pwd # move back home
- status=$? # save the result code
- if test $status != 0 # must have been an error
- then
- if test -f $tmp # is there an error file ?
- then
- cp $tmp ${TMPDIR}/save.$bench.$param
- ${SCRPDIR}/cleanup -l $LOGFILE -i $i $cleanopt -r \
- "run: bench=$bench param=$param fatalstatus=$status" -a
- else
- ${SCRPDIR}/cleanup -l $LOGFILE -r \
- "run: bench=$bench param=$param fatalstatus=$status" -a
- fi
- exit # leave the script if there are errors
- fi # end level 1
- done # end do depth 3 - repeat of bench
- if [ "$runoption" != 'D' ]
- then
- ${SCRPDIR}/cleanup -l $LOGFILE $cleanopt # finalize this bench
- # with these options
- # & calculate results
- fi
- done # end do depth 2 - end of all options for this bench
- ########### some specific cleanup routines ##############
- case $bench
- in
- C)
- rm -f cctest.o a.out
- ;;
- esac
- if [ "$runoption" != 'Q' ]
- then
- echo ""
- fi
- done # end do level 1 - all benchmarks requested
- echo "" >>$LOGFILE
- echo " " `who | wc -l` "interactive users." >>$LOGFILE
- echo "End Benchmark Run ($date) ...." >>$LOGFILE
- if [ "$runoption" != 'Q' ]
- then
- pg $LOGFILE
- fi
- exit
|