Further work on a generic benchmarking framework.
authorNathan Scott <nathans@sgi.com>
Thu, 19 Sep 2002 07:26:17 +0000 (07:26 +0000)
committerNathan Scott <nathans@sgi.com>
Thu, 19 Sep 2002 07:26:17 +0000 (07:26 +0000)
make important argument mandatory, do a better job of collecting results.

bench
run.dbench
run.tar
tools/auto-qa

diff --git a/bench b/bench
index fc7989bd0502d94eb8bf1a6bacb6e14d33231189..252600ed5673d1d39edb92ccafdab0a04d309412 100755 (executable)
--- a/bench
+++ b/bench
@@ -1,7 +1,7 @@
 #!/bin/sh
 # 
 # Wrapper for automating benchmarking runs.
-# Usage:   bench [passes] [user] [group] [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
@@ -50,7 +50,6 @@
 owner=nathans@sgi.com
 
 tmp=/tmp/$$
-seq=bench
 here=`pwd`
 status=1       # failure is the default!
 
@@ -64,11 +63,9 @@ _cleanup()
     umount $SCRATCH_DEV >/dev/null 2>&1
 }
 
-trap "_cleanup; exit \$status" 0 1 2 3 15
-
-ROOT="."
-LOG="$ROOT/bench.log"
-FULL="$ROOT/bench.full"
+OUT="bench.out"
+LOG="bench.log"
+FULL="bench.full"
 
 _log()
 {
@@ -100,7 +97,7 @@ _run_benchmark()
     do
         _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 \
@@ -111,11 +108,13 @@ _run_benchmark()
                             || _fail "            !!! couldn't mkdir benchdir"
         chown -R $user.$group $SCRATCH_MNT/bench \
                             || _fail "            !!! couldn't chown benchdir"
+
         cd $SCRATCH_MNT/bench
+        seq=`perl -e 'printf "results.%s.%03d\n", '$bench, $pass`
 
         _log "        *** bench [src/runas -u $uid -g $gid run.$bench]"
-        $here/src/runas -u $uid -g $gid $here/run.$bench | _logp
-        [ $? -eq 0 ]        || _fail "            !!! non-zero $bench status"
+        $here/src/runas -u $uid -g $gid $here/run.$bench \
+                            | _fix_malloc | tee $seq | _logp
         cd $here
 
         _log "        *** unmounting scratch device"
@@ -129,22 +128,33 @@ _run_benchmark()
     done
 }
 
+_merge_results()
+{
+    echo Results for $bench benchmark >>$OUT
+    echo results.$bench.* | sort -u | 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=root
-group=root
-benches=`echo run.* | sed -e 's/run\.//g'`
+passes=$1
+user=$2
+group=$3
 
-[ $# -gt 0 ] && passes=$1
-[ $# -gt 1 ] && user=$2
-[ $# -gt 2 ] && group=$3
+benches=`echo run.* | sed -e 's/run\.//g'`
 [ $# -gt 3 ] && benches=$4
-
 [ -z "$benches" -o "$benches" = "*" ] && _fail "no benchmark scripts found"
 
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_require_scratch
+
+rm -f bench.*
 for bench in $benches
 do 
     echo "" >$FULL
@@ -154,7 +164,8 @@ do
     _log "        *** unmounting scratch device"
     umount $SCRATCH_DEV 2>&1 | _fix_malloc >>$FULL
 
-    _run_benchmark |  _fix_malloc
+    _run_benchmark | _fix_malloc
+    _merge_results
 
     _log "*** done $bench"
 done
index 2234f52f440cbd76c7d267b36e9da2112a9778ad..d5fabb1af59b3bcd8b61400bd5ad2e5a2dc661e7 100755 (executable)
@@ -9,18 +9,19 @@ run_dbench()
 {
        mkdir ./dbench || exit 1
        cd dbench
-       dbench $DBENCH_CLIENTS || exit 1
+       dbench $DBENCH_CLIENTS
+       status=$?
        cd ..
-       rm -fr ./dbench || exit 1
+       rm -fr ./dbench
+       [ $status -ne 0 ] && exit 1
 }
 
-# dbench gives:
+# 
+# Sample dbench output:
 # "Throughput 40.6701 MB/sec (NB=50.8376 MB/sec  406.701 MBit/sec)"
 # 
 if [ $# -gt 0 ]; then
        echo "clients,MB/sec"
        exit 0
 fi
-run_dbench | perl -ne \
-       'if (m/^Throughput (\S+) /) { print '$DBENCH_CLIENTS',",",$1,"\n"; }'
-
+run_dbench | awk 'END { printf "%u,%s\n", '$DBENCH_CLIENTS', $2 }'
diff --git a/run.tar b/run.tar
index f3a0315a7a2f8621fed9b96d322e5ba36b0b3c5c..39c6c18d7fe36d8a397d3ecbeb8eb43a7c9cacfe 100755 (executable)
--- a/run.tar
+++ b/run.tar
@@ -25,10 +25,11 @@ run_tar()
        mkdir ./tar || exit 1
        size=`ls -lh $TARFILE | awk '{print $5}'`
        time=`/usr/bin/time -f '%U,%S,%E' tar xf $TARFILE 2>&1`
-       [ $? -eq 0 ] || exit 1
-       echo "$size,$time"
+       status=$?
        cd ..
-       rm -fr ./tar || exit 1
+       rm -fr ./tar
+       [ $status -eq 0 ] || exit 1
+       echo "$size,$time"
 }
 
 if [ $# -gt 0 ]; then
index 70eae80c6585f1d0714e62bf6217ba0e5062d59d..487660b6376422cb87a59abe4ba83e33fb9c150a 100755 (executable)
@@ -490,6 +490,10 @@ do
            _sudo ./bench $BENCH_PASSES `id -nu && id -ng` \
                        || _fail "          !!! failed to run benchmarks"
 
+           _log ""
+           _log "          *** send results mail"
+           mail -s "XFS QA benchmark results" $EMAIL < $ROOT/bench.out 2>&1
+       
            new_state="done"
            ;;