home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume11 / musbus / part04 / run < prev    next >
Encoding:
Text File  |  1987-09-16  |  8.8 KB  |  374 lines

  1. #! /bin/sh
  2. version="5.0"
  3. #
  4. # General Purpose Benchmark
  5. # Ken McDonell, Computer Science, Monash University
  6. # August 1, 1983
  7. #
  8. # $Header: run,v 3.13 87/09/17 06:09:50 kenj Exp $
  9. #
  10. #  You will need ...
  11. #    Level 7 shell
  12. #    awk cat cc chmod comm cp date dc df echo ed expr
  13. #    kill ls make mkdir rm sed test time touch tty who
  14. #
  15. #  The following variables may be assigned external values to overide defaults
  16. #
  17. #    Test        Variable    Default        Use
  18. #    all        iterations    6        repeat count for timing
  19. #    arithmetic    arithloop    1000        no. of summations
  20. #    hanoi        ndisk        17        list of nos. of disks
  21. #    syscall        ncall        4000        no. iterations, each of
  22. #                            5 system calls
  23. #    context1    switch1        500        no. of switches
  24. #    pipe        io        2048        no. 512 byte blocks to
  25. #                            read and write
  26. #    spawn        children    100        no. of child processes
  27. #    execl        nexecs        100        no. of execs
  28. #    randmem,seqmem    arrays        8 64 512    list or array sizes
  29. #            poke        100000        no. array accesses
  30. #    fstime        blocks        62 125 250 500    list of file sizes
  31. #            where        .        directory for files
  32. #                            need 2 x max[ $blocks ]
  33. #    work        nusers        1 4 8 16 24 32     list of nos. of users
  34. #            rate        2        per user input rate
  35. #                            [ chars / sec ]
  36. #            ttys        /dev/tty    list of devices where
  37. #                            output goes
  38. #            dirs        .        list of directories for
  39. #                            creation of temp work
  40. #
  41. if make source install
  42. then
  43.     :
  44. else
  45.     echo "run: something is very wrong here .. initial make failed"
  46.     exit 1
  47. fi
  48. echo "kill -9 $$" > Tmp/kill_run ; chmod u+x Tmp/kill_run
  49. if test $# -eq 0
  50. then
  51.     set -    arithoh register short int long float double dc hanoi \
  52.         syscall pipe context1 spawn execl \
  53.         C seqmem randmem fstime work
  54. elif test "$1" = "arithmetic"
  55. then
  56.     set -    arithoh register short int long float double dc
  57. fi
  58. iter=${iterations-6}
  59. date=`date`
  60. tmp=Tmp/$$.tmp
  61. log=Results/log
  62. logwork=Results/log.work
  63. echo "" >>$log
  64. echo "Start Benchmark Run (MUSBUS Version $version)" >>$log
  65. echo "  $date (long iterations $iter times)" >>$log
  66. echo " " `who | wc -l` "interactive users." >>$log
  67. if test $iter -eq 6
  68. then
  69.     longloop="1 2 3 4 5 6"
  70.     shortloop="1 2 3"
  71. else
  72.     short=`expr \( $iter + 1 \) / 2`
  73.     longloop=""
  74.     shortloop=""
  75.     while test $iter -gt 0
  76.     do
  77.         longloop="$iter $longloop"
  78.         if test $iter -le $short
  79.         then
  80.             shortloop="$iter $shortloop"
  81.         fi
  82.         iter=`expr $iter - 1`
  83.     done
  84. fi
  85. if test ! -f iamalive
  86. then
  87.     make iamalive
  88. fi
  89. for test
  90. do
  91.     need=$test
  92.     prog=./$test
  93.     paramlist="#"
  94.     parammsg=""
  95.     repeat="$longloop"
  96.     stdout="$log"
  97.     stdin=""
  98.     cleanopt="-t $tmp"
  99.     trap "./cleanup -l $log -a; exit" 1 2 3 15
  100.     echo $test:
  101.     echo "" >>$log
  102.     case $test
  103.     in
  104.  
  105.     arithoh|register|short|int|long|float|double)
  106.         options=${arithloop-1000}
  107.         logmsg="Arithmetic Test (type = $test): $options Iterations"
  108.         ;;
  109.  
  110.     dc)     need=dc.dat
  111.         prog=dc
  112.         options=""
  113.         stdin=dc.dat
  114.         stdout=/dev/null
  115.         logmsg="Arithmetic Test (sqrt(2) with dc to 99 decimal places)"
  116.         ;;
  117.  
  118.     hanoi)    options='$param'
  119.         stdout=/dev/null
  120.         logmsg="Recursion Test: Tower of Hanoi Problem"
  121.         paramlist="${ndisk-17}"
  122.         parammsg='$param Disk Problem:'
  123.         ;;
  124.  
  125.     syscall)
  126.         options=${ncall-4000}
  127.         logmsg="System Call Overhead Test: 5 x $options Calls"
  128.         ;;
  129.  
  130.     context1)
  131.         options=${switch1-500}
  132.         logmsg="Pipe-based Context Switching Test: 2 x $options Switches"
  133.         ;;
  134.  
  135.     pipe)   options=${io-2048}
  136.         logmsg="Pipe Throughput Test: read & write $options x 512 byte blocks"
  137.         ;;
  138.  
  139.     spawn)  options=${children-100}
  140.         logmsg="Process Creation Test: $options forks"
  141.         ;;
  142.  
  143.     execl)  options=${nexecs-100}
  144.         logmsg="Execl Throughput Test: $options execs"
  145.         ;;
  146.  
  147.     randmem|seqmem)
  148.         type=Random
  149.         if test $test = seqmem
  150.         then
  151.             type=Sequential
  152.         fi
  153.         poke=${poke-100000}
  154.         options='-s$param '"-n$poke"
  155.         logmsg="$type Memory Access Test: $poke Accesses"
  156.         paramlist=${arrays-"8 64 512"}
  157.         parammsg='Array Size: $param Kbytes'
  158.         cleanopt="-m $tmp"
  159.         ;;
  160.  
  161.     fstime) repeat="$shortloop"
  162.         where=${where-Tmp}
  163.         options='$param '"$where"
  164.         logmsg="Filesystem Throughput Test:"
  165.         paramlist=${blocks-"62 125 250 500"}
  166.         parammsg='File Size: $param blocks'
  167.         cleanopt="-f $tmp"
  168.         ;;
  169.  
  170.     C)      need=cctest.c
  171.         prog=cc
  172.         options='$param'
  173.         stdout=/dev/null
  174.         repeat="$shortloop"
  175.         logmsg="C Compiler Test:"
  176.         paramlist="-c_cctest.c cctest.o"
  177.         parammsg='cc $param'
  178.         rm -f cctest.o a.out
  179.         ;;
  180.  
  181.     work|x)
  182.         ttys=${ttys-`tty`}
  183.         if test "$ttys" = "not a tty"
  184.         then
  185.             ttys=/dev/tty
  186.         fi
  187.         tty=`echo $ttys | sed 's/ .*//'` ; export tty
  188.         rate=${rate-2} ; export rate
  189.         dirs=${dirs-Tmp}
  190.         scripts=`echo Tmp/script.?`
  191.         need="makework keyb"
  192.         prog=./makework
  193.         options='$param'
  194.         stdin=Tmp/workload
  195.         stdout=`echo $ttys | sed 's/ .*//'`
  196.         repeat="$shortloop"
  197.         logmsg="Simulated Multi-user Work Load Test:"
  198.         paramlist=${nusers-"1 4 8 16 24 32"}
  199.         parammsg='$param Concurrent Users, each with Input Keyboard Rate $rate chars / sec'
  200.         cleanopt="-w -t $tmp"
  201.         maxusers=`echo $paramlist | awk '{for (i=1;i<=NF;i++) if ($i > maxu) maxu=$i; print maxu}'`
  202.         if test $test = work
  203.         then
  204.             ./iamalive "Check job streams and workload description ..."
  205.             if make script ttychk clock >/dev/null 2>$tmp
  206.             then
  207.             :
  208.             else
  209.             cat $tmp
  210.             cat $tmp >>$log
  211.             ./cleanup -l $log -r "\"make script\" failed!" -a
  212.             exit 1
  213.             fi
  214.             cmdline=`sed 1q Workload/script.master | sed 's/%W%[     ]*//'`
  215.             rm -f Tmp/workload
  216.             touch Tmp/workload
  217.             ( echo $dirs; echo $scripts; echo $ttys ) \
  218.             | awk '
  219.             NR==1 { for (i=1;i<=NF;i++) dir[i]=$i;nd=NF }
  220.             NR==2 { for (i=1;i<=NF;i++) script[i]=$i;ns=NF }
  221.             NR==3 { for (i=1;i<=NF;i++) tty[i]=$i;nt=NF }
  222.             END   { for (i=0;i<'$maxusers';i++)
  223.                  print dir[i%nd+1] "/user" i " '"$cmdline"' <" script[i%ns+1] " >" tty[i%nt+1] }' \
  224.             >>Tmp/workload
  225.             echo "done."
  226.             ./iamalive "Check tty bandwidth ..."
  227.             inch=`cat Tmp/script.1 | wc -c`
  228.             outch=`cat Tmp/script.out | wc -c`
  229.             nscript=`echo Tmp/script.? | wc -w`
  230.             orate=`expr $rate \* $outch / $inch`
  231.             if ./ttychk $maxusers $orate $nscript $ttys 2>$tmp
  232.             then
  233.                 echo "OK."
  234.             else
  235.             echo "FAILED!"
  236.             cat $tmp
  237.             cat $tmp >>$log
  238.             rm -f $tmp
  239.             ./cleanup -l $log -a
  240.             exit 1
  241.             fi
  242.         fi
  243.         ./iamalive "Set up work directories ..."
  244.         cd Workload 
  245.             if make context >/dev/null 2>../$tmp
  246.         then
  247.             cd ..
  248.         else
  249.             cd ..
  250.             cat $tmp
  251.             cat $tmp >>$log
  252.             rm -f $tmp
  253.             ./cleanup -l $log -r "\"make context\" failed in Workload" -a
  254.             exit 1
  255.         fi
  256.         for dir in `sed 's/ .*//' Tmp/workload`
  257.         do
  258.             rm -rf $dir
  259.             mkdir $dir
  260.             cp Workload/* $dir
  261.         done
  262.         echo "done."
  263.         echo "" >>$log
  264.         echo "Output sent to ... $ttys" >>$log
  265.         echo "Directories for temporary files ... $dirs" >>$log
  266.         echo "" >>$log
  267.         df >>$log
  268.         echo "" >>$log
  269.         if test $test = work
  270.         then
  271.             ./iamalive '60 second wallclock accuracy check ...'
  272.             echo "SIGALRM check: " `./clock` >>$log
  273.             echo "done."
  274.         fi
  275.         echo "This test generates lots of tty output"
  276.         ;;
  277.  
  278.     *)    ./cleanup -l $log -r "run: unknown test \"$test\"" -a
  279.         exit 1
  280.         ;;
  281.     esac
  282.     for file in $need
  283.     do
  284.     if make $need >/dev/null 2>$tmp
  285.     then
  286.         :
  287.     else
  288.         cat $tmp
  289.         cat $tmp >>$log
  290.         rm -f $tmp
  291.         ./cleanup -l $log -r "\"make $need\" failed!" -a
  292.         exit 1
  293.     fi
  294.     done
  295.     echo "$logmsg" >>$log
  296.     for param in $paramlist
  297.     do
  298.     param=`echo $param | sed 's/_/ /g'`
  299.     ./iamalive "   [$param] -"
  300.     eval msg='"'$parammsg'"'
  301.     eval opt='"'$options'"'
  302.     if test "$msg" != ""
  303.     then
  304.         echo "" >>$log
  305.         echo "$msg" >>$log
  306.     fi
  307.     rm -f $tmp
  308.     for i in $repeat
  309.     do
  310.         trap "./cleanup -l $log -i $i $cleanopt -a; exit" 1 2 3 15
  311.         ./iamalive $i
  312.         if test "$stdin" = ""
  313.         then
  314.         time $prog $opt 2>>$tmp >>$stdout
  315.         else
  316.         time $prog $opt <$stdin 2>>$tmp >>$stdout
  317.         fi
  318.         status=$?
  319.         if test $status != 0
  320.         then
  321.         if test -f $tmp
  322.         then
  323.             cp $tmp Tmp/save.$test.$param
  324.             ./cleanup -l $log -i $i $cleanopt -r "run: test=$test param=$param fatalstatus=$status" -a
  325.         else
  326.             ./cleanup -l $log -r "run: test=$test param=$param fatalstatus=$status" -a
  327.         fi
  328.         exit
  329.         fi
  330.         test $prog = makework && ./cleanup -w
  331.     done
  332.     ./cleanup -l $log $cleanopt
  333.     done
  334.     case $test
  335.     in
  336.     C)
  337.         rm -f cctest.o a.out
  338.         ;;
  339.     work|x)
  340.         echo "Check for corpses ... " >>$logwork
  341.         if test "`echo Tmp/*.tmp`" != 'Tmp/*.tmp'
  342.         then
  343.         echo "Unclaimed temporary workfiles?" >>$logwork
  344.         ls -l Tmp/*.tmp >>$logwork
  345.         fi
  346.         ( cd Workload ; ls ) >/tmp/work$$
  347.         for dir in `sed 's/ .*//' Tmp/workload`
  348.         do
  349.         ( cd $dir ; ls ) >/tmp/user$$
  350.         comm -23 /tmp/work$$ /tmp/user$$ >/tmp/x$$
  351.         if test -s /tmp/x$$
  352.         then
  353.             echo "Files missing from $dir ..." >>$logwork
  354.             echo "   " `cat /tmp/x$$` >>$logwork
  355.         fi
  356.         comm -13 /tmp/work$$ /tmp/user$$ >/tmp/x$$
  357.         if test -s /tmp/x$$
  358.         then
  359.             echo "Extra files in $dir ..." >>$logwork
  360.             echo "   " `cat /tmp/x$$` >>$logwork
  361.         fi
  362.         rm -rf $dir
  363.         done
  364.         rm -f /tmp/*$$
  365.         ;;
  366.     esac
  367.     echo ""
  368. done
  369. echo "" >>$log
  370. echo " " `who | wc -l` "interactive users." >>$log
  371. echo "End Benchmark Run ($date) ...." >>$log
  372. echo "End Benchmark Run ($date) ...."
  373. exit
  374.