|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T m
Length: 6938 (0x1b1a)
Types: TextFile
Names: »musbus.sh«
└─⟦db229ac7e⟧ Bits:30007240 EUUGD20: SSBA 1.2 / AFW Benchmarks
└─⟦this⟧ »EUUGD20/AFUU-ssba1.21/ssba1.21F/musbus/musbus.sh«
#! /bin/sh
#
# Script : musbus.sh
#
version="5.2"
res=musbus.res
log=musbus.log
logwork=musbus.work
syn=musbus.syn
TIME=../config/chrono
umask 022 # at least mortals can read root's files this way
bell="▶07◀"
workdir=${workdir-Workload} ; export workdir
system="syscall pipe disktime"
misc="randmem"
args=""
iter=${iterations-6}
date=`date`
tmp=Tmp/$$.tmp
echo "" >>$res
echo "Start Benchmark Run (MUSBUS Version $version)" >>$res
echo " $date (3 iterations)" >>$res
echo " " `who | wc -l` "interactive users." >>$res
if test $iter -eq 6
then
longloop="1 2 3 4 5 6"
shortloop="1 2 3"
else
short=`expr \( $iter + 1 \) / 2`
longloop=""
shortloop=""
while test $iter -gt 0
do
longloop="$iter $longloop"
if test $iter -le $short
then
shortloop="$iter $shortloop"
fi
iter=`expr $iter - 1`
done
fi
if test ! -f iamalive
then
make iamalive -f musbus.mk
fi
for test
do
need=$test
prog=./$test
paramlist="#"
parammsg=""
repeat="$longloop"
stdout="$res"
stdin=""
cleanopt="-t $tmp"
trap "./cleanup -l $res -a; exit" 1 2 3 15
echo $test:
echo "" >>$res
case $test
in
disktime) repeat="$shortloop"
where=${where-Tmp}
options='$param '"$where"
logmsg="Test de Throughput du Filesystem :"
paramlist=${blocks-"62 125 250 500 1000"}
parammsg='Taille Fichier: $param blocs'
cleanopt="-f $tmp"
;;
work|x)
ttys=${ttys-`tty`}
if test "$ttys" = "not a tty"
then
ttys=/dev/tty
fi
tty=`echo $ttys | sed 's/ .*//'` ; export tty
rate=${rate-2} ; export rate
dirs=${dirs-Tmp}
need="makework keyb"
prog=./makework
options='$param'
stdin=Tmp/workload
stdout=`echo $ttys | sed 's/ .*//'`
repeat="$shortloop"
logmsg="Test de Simulation de Charge Multi-utilisateur :"
paramlist=${nusers-"1 4 8 16 24 32"}
parammsg='$param Utilisateurs Simultanes, chacun avec un taux dentree au clavier de $rate chars/sec'
cleanopt="-w -t $tmp"
maxusers=`echo $paramlist | awk '{for (i=1;i<=NF;i++) if ($i > maxu) maxu=$i; print maxu}'`
if test $test = work
then
./iamalive "Check job streams and workload description ..."
rm -f Tmp/script.1
if make scripts ttychk clock WORKDIR=$workdir -f musbus.mk 2>$tmp 1>&2
then
:
else
cat $tmp
cat $tmp >>$res
./cleanup -l $res -r "\"make script\" failed!" -a
exit 1
fi
scripts=`echo Tmp/script.?`
cmdline=`sed 1q $workdir/script.master | sed 's/%W%[ ]*//'`
rm -f Tmp/workload
touch Tmp/workload
( echo $dirs; echo $scripts; echo $ttys ) \
| awk '
NR==1 { for (i=1;i<=NF;i++) dir[i]=$i;nd=NF }
NR==2 { for (i=1;i<=NF;i++) script[i]=$i;ns=NF }
NR==3 { for (i=1;i<=NF;i++) tty[i]=$i;nt=NF }
END { for (i=0;i<'$maxusers';i++)
print dir[i%nd+1] "/user" i " '"$cmdline"' <" script[i%ns+1] " >" tty[i%nt+1] }' \
>>Tmp/workload
echo "done."
./iamalive "Check tty bandwidth ..."
inch=`cat Tmp/script.1 | wc -c`
outch=`cat Tmp/script.out | wc -c`
orate=`expr $rate \* $outch / $inch`
if ./ttychk $maxusers $orate $ttys 2>$tmp
then
echo "OK."
else
echo "FAILED!"
cat $tmp
cat $tmp >>$res
rm -f $tmp
./cleanup -l $res -a
exit 1
fi
fi
./iamalive "Set up work directories ..."
cd $workdir
if make context WORKDIR=$workdir 2>../$tmp 1>&2
then
:
else
cd ..
cat $tmp
cat $tmp >>$res
rm -f $tmp
./cleanup -l $res -r "\"make context\" failed in $workdir" -a
exit 1
fi
if make manifest WORKDIR=$workdir 2>../$tmp 1>&2
then
cd ..
manifest=`cat $tmp`
cplist=`cat $tmp | sed -e 's,^,$workdir/,' -e 's, , $workdir/,g'`
else
cd ..
cat $tmp
cat $tmp >>$res
rm -f $tmp
./cleanup -l $res -r "\"make manifest\" failed in $workdir" -a
exit 1
fi
user=0
for dir in `sed 's/ .*//' Tmp/workload`
do
./iamalive $user
rm -rf $dir
mkdir $dir
eval cp $cplist $dir
user=`expr $user + 1`
done
echo "done."
echo "" >>$res
echo "Directory actuelle: " `pwd` >>$res
echo "Sorties de la simulation dirigees vers ... $ttys" >>$res
echo "Directories utilisees pour les fichiers temporaires ... $dirs" >>$res
echo "" >>$res
df >>$res
echo "" >>$res
if test $test = work
then
./iamalive '60 second wallclock accuracy check ...'
echo "SIGALRM check: " `./clock` >>$res
echo "SIGALRM check: " `./clock` >>$syn
echo "done."
fi
./signature >>$res
echo "${bell}${bell}This test generates lots of tty output"
;;
*) ./cleanup -l $res -r "run: unknown test \"$test\"" -a
exit 1
;;
esac
for file in $need
do
if make $file WORKDIR=$workdir -f musbus.mk 2>$tmp 1>&2
then
:
else
cat $tmp
cat $tmp >>$res
rm -f $tmp
./cleanup -l $res -r "\"make $file\" failed!" -a
exit 1
fi
done
echo "$logmsg" >>$res
echo "$logmsg" >>$syn
for param in $paramlist
do
param=`echo $param | sed 's/_/ /g'`
./iamalive " [$param] -"
eval msg='"'$parammsg'"'
eval opt='"'$options'"'
if test "$msg" != ""
then
echo "" >>$res
echo "$msg" >>$res
echo "$msg" >>$syn
fi
rm -f $tmp
for i in $repeat
do
trap "./cleanup -l $res -i $i $cleanopt -a; exit" 1 2 3 15
./iamalive $i
if test "$stdin" = ""
then
$TIME $prog $opt 2>>$tmp >>$stdout
status=$?
cat $tmp >>$log
else
$TIME $prog $opt <$stdin 2>>$tmp >>$stdout
status=$?
cat $tmp >>$log
fi
if test $status != 0
then
if test -f $tmp
then
cp $tmp Tmp/save.$test.$param
./cleanup -l $res -i $i $cleanopt -r "run: test=$test param=$param fatalstatus=$status" -a
else
./cleanup -l $res -r "run: test=$test param=$param fatalstatus=$status" -a
fi
exit
fi
test $prog = ./makework && ./cleanup -w
done
./cleanup -l $res $cleanopt
done
case $test
in
work|x)
echo "Check for corpses ... " >>$logwork
if test "`echo Tmp/*.tmp`" != 'Tmp/*.tmp'
then
echo "Unclaimed temporary workfiles?" >>$logwork
ls -l Tmp/*.tmp >>$logwork
fi
echo USER $manifest \
| sed 's/ */\
/g' \
| sort >/tmp/work$$
for dir in `sed 's/ .*//' Tmp/workload`
do
( cd $dir ; ls ) >/tmp/user$$
comm -23 /tmp/work$$ /tmp/user$$ >/tmp/x$$
if test -s /tmp/x$$
then
echo "" >>$logwork
echo "Files missing from $dir ..." >>$logwork
pr -t -l1 -w80 -5 /tmp/x$$ >>$logwork
fi
comm -13 /tmp/work$$ /tmp/user$$ >/tmp/x$$
if test -s /tmp/x$$
then
echo "" >>$logwork
echo "Extra files in $dir ..." >>$logwork
pr -t -l1 -w80 -5 /tmp/x$$ >>$logwork
fi
rm -rf $dir
done
rm -f /tmp/*$$
;;
esac
echo ""
done
echo "" >>$res
echo " " `who | wc -l` "interactive users." >>$res
echo "End Benchmark Run `date` ...." >>$res
echo "End Benchmark Run `date` ...."
exit