#!/bin/sh
#
# Wrapper for automating benchmarking runs.
-# Usage: bench [passes] [uid] [gid] [script]
+# Usage: bench passes user group [script]
#
# ..where passes is the number of times to run each script; uid/gid
# gives credentials to use when running the script; and script is a
owner=nathans@sgi.com
tmp=/tmp/$$
-seq=bench
-here=`pwd`
+here=`pwd`; export here
status=1 # failure is the default!
# get standard environment, filters and checks
umount $SCRATCH_DEV >/dev/null 2>&1
}
-trap "_cleanup; exit \$status" 0 1 2 3 15
-
-ROOT="."
-LOG="$ROOT/soak.log"
-FULL="$ROOT/soak.full"
+OUT="bench.out"
+LOG="bench.log"
+FULL="bench.full"
_log()
{
_run_benchmark()
{
pass=1
+ uid=`id -u $user`
+ gid=`id -g $group`
while [ $pass -le $passes -o $passes -lt 0 ]
do
- _log " *** clean scratch device [starting pass $pass]"
+ _log " *** clean scratch device [$bench starting, pass $pass]"
mkfs_xfs -f $SCRATCH_DEV 2>&1 | _fix_malloc >>$FULL \
- || _fail " !!! failed to mkfs SCRATCH_DEV"
+ || _fail " !!! mkfs SCRATCH_DEV failed"
_log " *** mounting scratch device"
mount -t xfs $SCRATCH_DEV $SCRATCH_MNT \
_log " *** mkdir"
mkdir $SCRATCH_MNT/bench \
- || _fail " !!! couldn't mkdir bench dir"
+ || _fail " !!! couldn't mkdir benchdir"
chown -R $user.$group $SCRATCH_MNT/bench \
- || _fail " !!! couldn't chown bench dir"
+ || _fail " !!! couldn't chown benchdir"
+
cd $SCRATCH_MNT/bench
+ seq=`perl -e 'printf "results.%s.%03d\n", '$bench', '$pass`
+ rm -f $seq $tmp.out
+
+ _log " *** bench [$seq]"
+ $here/src/runas -u $uid -g $gid $here/run.$bench > $tmp.out
+ [ $? -eq 0 ] || _fail " !!! $bench pass $pass failed"
- _log " *** bench"
- $here/src/runas -u $user -g $group $here/run.$bench > $FULL
- [ $? -eq 0 ] || _fail " !!! non-zero $bench exit code"
cd $here
+ _fix_malloc < $tmp.out > $seq
_log " *** unmounting scratch device"
umount $SCRATCH_DEV 2>&1 | _logp \
done
}
+_merge_results()
+{
+ echo Results for $bench benchmark >>$OUT
+ echo results.$bench.* | sort -nu | xargs cat >>$OUT
+ echo >>$OUT
+}
+
# real QA test starts here
-_require_scratch
+if [ $# -lt 3 ]; then
+ echo Usage: bench passes user group [script]
+ exit 1
+fi
+
+passes=$1
+user=$2
+group=$3
-passes=-1
-user=root
-group=root
-benches=`echo run.*`
+benches=`echo run.* | sed -e 's/run\.//g'`
+[ $# -gt 3 ] && benches=$4
+[ -z "$benches" -o "$benches" = "*" ] && _fail "no benchmark scripts found"
-[ $# -gt 0 ] && passes=$1
-[ $# -gt 1 ] && user=$3
-[ $# -gt 2 ] && group=$4
-[ $# -gt 3 ] && benches=$2
+trap "_cleanup; exit \$status" 0 1 2 3 15
-for bench in "$benches"
+_require_scratch
+
+rm -f bench.*
+for bench in $benches
do
echo "" >$FULL
echo "" >$LOG
- _log "*** benchmark started (passes=$passes, benchmark=$bench)"
- _log "*** (`date`)"
+ _log "*** benchmark started [passes=$passes, benchmark=$bench]"
+ _log "*** (`date`)"
_log " *** unmounting scratch device"
- umount $SCRATCH_DEV 2>&1 | _fix_malloc >>$FULL
-
- _run_benchmark # $passes $bench $user $group
+ umount $SCRATCH_DEV 2>&1 | _fix_malloc >>$FULL
+
+ _run_benchmark | _fix_malloc
+ _merge_results
_log "*** done $bench"
done
+status=0