363 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			363 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
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
 |