Subject: v22i028: Byte Unix benchmarks, Part01/05 Newsgroups: comp.sources.unix Approved: rsalz@uunet.UU.NET X-Checksum-Snefru: d9eb219b 0a77ea3d d4ea3797 fe88a8d8 Submitted-by: "Ben Smith @ BYTE" Posting-number: Volume 22, Issue 28 Archive-name: byte-benchmarks/part01 [ I repacked this. Look out for the BEL character on line 24 of cleanup. These are the BYTE Unix benchmarks, for measuring the performance of Unix systems. The Makefile will distribute the pieces into subdirectories, then run the tests. The tests can also be run in clumps. BSD users will have to slightly tweak the Makefile, and rename a file. For more information, see the README. There is no manpage. --r$ ] #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh 'BSDtime.awk' <<'END_OF_FILE' X############################################################################### X# The BYTE UNIX Benchmarks - Release 2 X# Module: BSDtime.awk SID: 2.3 4/17/90 16:45:40 X# X############################################################################### X# Bug reports, patches, comments, suggestions should be sent to: X# X# Ben Smith or Rick Grehan at BYTE Magazine X# ben@bytepb.UUCP rick_g@bytepb.UUCP X# X############################################################################### X# Modification Log: X# added geometric mean 8/6/89 -ben X# X############################################################################### XBEGIN { r_product = 0.0000; s_product = 0.0000; u_product = 0.0000; } X/real/ { if (!fail) { X real+=$1; X r2+=$1*$1; X user+=$3; X u2 += $3*$3; X sys+=$5; X s2 += $5*$5; X if($1) { r_product += log($1); } X if($1) { u_product += log($3); } X if($1) { s_product += log($5); } X ok++ X } X iter++; fail=0; next; X } X { print "** Iteration ",iter+1," Failed: ",$0; fail=1 } XEND { X if (fail) iter++; X if (ok != iter) { X printf "For %d successful iterations from %d attempts ...\n",ok,iter X iter=ok X } X if (ok > 0) { X printf " Arithmetric Geometric Variance\n"; X printf " Mean Mean (%d tests)\n",ok X printf "User Time (secs): %9.2f %9.2f ",user/ok,exp(u_product/ok); X if (ok > 1) printf "%9.2f\n",(u2-user*user/ok)/(ok-1); X else printf "n/a\n" X printf "System Time (secs): %9.2f %9.2f ",sys/ok,exp(s_product/ok); X if (ok > 1) printf "%9.2f\n",(s2-sys*sys/ok)/(ok-1); X else printf "n/a\n" X printf "Real Time (secs): %9.2f %9.2f ",real/ok,exp(r_product/ok); X if (ok > 1) printf "%9.2f\n",(r2-real*real/ok)/(ok-1); X else printf "n/a\n" X } X else printf "-- no measured results --\n " X } END_OF_FILE if test 1977 -ne `wc -c <'BSDtime.awk'`; then echo shar: \"'BSDtime.awk'\" unpacked with wrong size! fi chmod +x 'BSDtime.awk' # end of 'BSDtime.awk' fi if test -f 'MANIFEST' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'MANIFEST'\" else echo shar: Extracting \"'MANIFEST'\" \(1292 characters\) sed "s/^X//" >'MANIFEST' <<'END_OF_FILE' X File Name Archive # Description X----------------------------------------------------------- X BSDtime.awk 1 X MANIFEST 1 This shipping list X Makefile 2 X README 1 X Run 2 X SysVtime.awk 1 X arith.c 1 X bench.doc 3 X big.c 3 X buildbms.c 1 X byte.logo 1 X cctest.c 1 X cleanup 1 X clock.c 1 X context1.c 1 X dbmscli.c 5 X dbmserv.c 3 X dbprep 1 X dc.date 1 X dhry.awk 1 X dhry.c 4 X dhry.h 4 X dummy.c 2 X execl.c 1 X fs.awk 1 X fstime.c 2 X getopt.c 1 X hanoi.c 1 X limit.c 1 X mkperm.c 1 X multi.sh 1 X pipe.c 1 X precision.c 2 X sort.src 2 X spawn.c 1 X syscall.c 1 X time.awk 1 X tst.sh 1 END_OF_FILE if test 1292 -ne `wc -c <'MANIFEST'`; then echo shar: \"'MANIFEST'\" unpacked with wrong size! fi # end of 'MANIFEST' fi if test -f 'README' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'README'\" else echo shar: Extracting \"'README'\" \(4143 characters\) sed "s/^X//" >'README' <<'END_OF_FILE' XVersion 2.5 -- 4/17/90 16:45:28 X X================================================================ XTo use the new BYTE Unix Benchmarks: X X make all X Run X XThe results are stored in results/log. All logs are accumulated Xin results/log.accum. Raw times for each run are stored in Xresults/times. X XNotes: XBSD & Ultrix users will have to change the makefile Define to Xfrom SysV to BSD, and copy pgms/BSDtime.awk to pgms/time.awk. XBe sure to check your compiler options for optimizing. When Xoptimizing is supposed to be on (most tests), it should be set to Xlevel 1 (generally -O), however different compilers have Xdifferent options for "optimizer off." Ultrix for RISC uses -O0; XSCO uses -Od. We have found that the memory tests can get Xoptimized so that the memory is never really fetched. That is why Xwe turn the optimizer off for these tests. X XBUG ALERT: X XBSD4v2 only: The time functions in the memory and and file Xaccess tests appear to be incorrect. X X================================================================ XYou may run individual benchmark programs and groups of programs. XThere are also a few options. X X Run [ ...] [ ...] [-qvd] X X -q quiet no output to standard out X -v verbose extra output to standard out X -d debug Run is displayed as it is run X X GROUP BENCHMARK EXPLANATION SOURCE X -------- ----------- -------------------- ------------- X arithmetic X arithoh arithmetic overhead src/arith.c X register register arithmetic src/arith.c X short short arithmetic src/arith.c X int int arithmetic src/arith.c X long long arithmetic src/arith.c X float float arithmetic src/arith.c X double double arithmetic src/arith.c X system X syscall system call overhead src/syscall.c X pipe pipe throughput src/pipe.c X context1 pipe context switch src/context1.c X spawn process creation src/spawn.c X execl execl call src/execl.c X fstime filesystem throughput src/fstime.c X misc X C compile and link /bin/cc X dc calculations with dc testdir/dc.dat X hanoi recursion src/hanoi.c X dhry X dhry2 dhrystone 2 w/o regs src/dhry.c X dhry2reg dhrystone 2 with regs src/dhry.c X db X dbmscli client/server src/dbmscli.c X dbmserv dbms engine src/dbmserv.c X load X multi.sh load system with pgms/multi.sh X concurrent shell pgms/tst.sh X scripts X X===================== RELEASE NOTES ===================================== X X========================= Jan 90 ============================= XTom Yager has joined the effort here at BYTE; he is responsible Xfor many refinements in the UNIX benchmarks. X XThe memory access tests have been deleted from the benchmarks. XThe file access tests have been reversed so that the test is run Xfor a fixed time. The amount of data transfered (written, read, Xand copied) is the variable. !WARNING! This test can eat up a Xlarge hunk of disk space. X XThe initial line of all shell scripts has been changed from the XSCO and XENIX form (:) to the more standard form "#! /bin/sh". XBut different systems handle shell switching differently. Check Xthe documentation on your system and find out how you are Xsupposed to do it. Or, simpler yet, just run the benchmarks from Xthe Bourne shell. (You may need to set SHELL=/bin/sh as well.) X XThe options to Run have not been checked in a while. They may no Xlonger function. Next time, I'll get back on them. There needs to Xbe another option added (next time) that halts testing between Xeach test. !WARNING! Some systems have caches that are not getting flushed Xbefore the next test or iteration is run. This can cause Xerroneous values. X X========================= Sept 89 ============================= XThe database (db) programs now have a tuneable message queue space. Xqueue space. The default set in the Run script is 1024 bytes. XOther major changes are in the format of the times. We now show XArithmetic and Geometric mean and standard deviation for User XTime, System Time, and Real Time. Generally, in reporting, we Xplan on using the Real Time values with the benchs run with one Xactive user (the bench user). Comments and arguments are requested. X Xcontact: BIX bensmith or rick_g END_OF_FILE if test 4143 -ne `wc -c <'README'`; then echo shar: \"'README'\" unpacked with wrong size! fi chmod +x 'README' # end of 'README' fi if test -f 'SysVtime.awk' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'SysVtime.awk'\" else echo shar: Extracting \"'SysVtime.awk'\" \(2200 characters\) sed "s/^X//" >'SysVtime.awk' <<'END_OF_FILE' X############################################################################### X# The BYTE UNIX Benchmarks - Release 2 X# Module: SysVtime.awk SID: 2.3 4/17/90 16:45:39 X# X############################################################################### X# Bug reports, patches, comments, suggestions should be sent to: X# X# Ben Smith or Rick Grehan at BYTE Magazine X# ben@bytepb.UUCP rick_g@bytepb.UUCP X# X############################################################################### X# Modification Log: X# added geometric mean 8/6/89 -ben X# X############################################################################### XBEGIN { r_product = 0.0000; s_product = 0.0000 ; u_product = 0.0000 } X/^cctest.c$/ { next } X/^[Rr]eal/ { X if (!fail) { X l=length($2); m=substr($2,1,l-5); s=substr($2,l-3,4) X t=m*60+s; real+=t; r2+=t*t; ok++; X if (t) {r_product += log(t);} X } X iter++; fail=0; next } X/^[Uu]ser/ { X l=length($2); m=substr($2,1,l-5); s=substr($2,l-3,4) X t=m*60+s; user+=t; cpu=t; u2+=t*t; X if (t) { u_product += log(t);} X next; } X/^[Ss]ys/ { X l=length($2); m=substr($2,1,l-5); s=substr($2,l-3,4) X t=m*60+s; sys+=t; s2+=t*t; X if (t) { s_product += log(t);} X next; } X/^$/ { next } X { print "** Iteration ",iter+1," Failed: ",$0; fail=1 } XEND { X if (fail) iter++ X if (ok != iter) { X printf "For %d successful iterations from %d attempts ...\n",ok,iter X iter=ok; X } X if (ok > 0) { X printf " Arithmetric Geometric Variance\n"; X printf " Mean Mean (%d tests)\n",ok X printf "User Time (secs): %9.2f %9.2f ",user/ok,exp(u_product/ok); X if (ok > 1) printf "%9.2f\n",(u2-user*user/ok)/(ok-1); X else printf "n/a\n" X printf "System Time (secs): %9.2f %9.2f ",sys/ok,exp(s_product/ok); X if (ok > 1) printf "%9.2f\n",(s2-sys*sys/ok)/(ok-1); X else printf "n/a\n" X printf "Real Time (secs): %9.2f %9.2f ",real/ok,exp(r_product/ok); X if (ok > 1) printf "%9.2f\n",(r2-real*real/ok)/(ok-1); X else printf "n/a\n" X } else { X print "-- no measured results --" X } X } END_OF_FILE if test 2200 -ne `wc -c <'SysVtime.awk'`; then echo shar: \"'SysVtime.awk'\" unpacked with wrong size! fi chmod +x 'SysVtime.awk' # end of 'SysVtime.awk' fi if test -f 'arith.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'arith.c'\" else echo shar: Extracting \"'arith.c'\" \(1582 characters\) sed "s/^X//" >'arith.c' <<'END_OF_FILE' X X/******************************************************************************* X * The BYTE UNIX Benchmarks - Release 2 X * Module: arith.c SID: 2.4 4/17/90 16:45:31 X * X ******************************************************************************* X * Bug reports, patches, comments, suggestions should be sent to: X * X * Ben Smith or Rick Grehan at BYTE Magazine X * bensmith@bixpb.UUCP rick_g@bixpb.UUCP X * X ******************************************************************************* X * Modification Log: X * May 12, 1989 - modified empty loops to avoid nullifying by optimizing X * compilers X * X ******************************************************************************/ X Xchar SCCSid[] = "@(#) @(#)arith.c:2.4 -- 4/17/90 16:45:31"; X/* X * arithmetic test X * X */ X Xmain(argc, argv) Xint argc; Xchar *argv[]; X{ X int iter; X int i; X int result; X X if (argc != 2) { X printf("Usage: %s count\n", argv[0]); X exit(1); X } X X iter = atoi(argv[1]); X X while (iter-- > 0) X { X /* the loop calls a function to insure that something is done */ X /* the results of the function are thrown away. But a loop with */ X /* unused assignments may get optimized out of existence */ X result = dumb_stuff(i); X } X exit(0); X} X X X/************************** dumb_stuff *******************/ Xdumb_stuff(i) Xint i; X{ X#ifndef arithoh X datum x, y, z; X z = 0; X#endif X /* X * 101 X * sum i*i/(i*i-1) X * i=2 X */ X for (i=2; i<=101; i++) X { X#ifndef arithoh X x = i; X y = x*x; X z += y/(y-1); X } Xreturn(x+y+z); X#else X } Xreturn(0); X#endif X} END_OF_FILE if test 1582 -ne `wc -c <'arith.c'`; then echo shar: \"'arith.c'\" unpacked with wrong size! fi chmod +x 'arith.c' # end of 'arith.c' fi if test -f 'buildbms.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'buildbms.c'\" else echo shar: Extracting \"'buildbms.c'\" \(3857 characters\) sed "s/^X//" >'buildbms.c' <<'END_OF_FILE' X X/******************************************************************************* X * The BYTE UNIX Benchmarks - Release 2 X * Module: buildbms.c SID: 2.4 4/17/90 16:45:38 X * X ******************************************************************************* X * Bug reports, patches, comments, suggestions should be sent to: X * X * Ben Smith or Rick Grehan at BYTE Magazine X * bensmith@bixpb.UUCP rick_g@bixpb.UUCP X * X ******************************************************************************* X * Modification Log: X * X ******************************************************************************/ X/* X * Multi-user DBMS simulation. X * Initialization X * Database has the form: X * IIIINNNNNNNNNNNNNNNNNNNNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPPPPPPPPPP X * Where IIII is the 4-digit id number (0-padded) X * NN... is the 20-character name X * AA... is the 40-character address X * PP... is the 10-character phone number X * Records are accessed by ID number (1 is the 0th record, 2 is 1st..etc.) X * X * Execute this program with: X * buildbms X * where is the name of the database file and X * is the number of records to create in the database. X */ Xchar id[] = "@(#) @(#)buildbms.c:2.4 -- 4/17/90 16:45:38"; X X#include X X#define ERROR (-1) X X/* X** Record definitions. X*/ X X#define IDLEN 4 X#define NAMELEN 20 X#define ADDRLEN 40 X#define PHONLEN 10 X#define RECLEN 74 /* Sum of the above. */ X X/* X** Structures. X*/ X Xstruct dbrec { /* Database record */ X char id[IDLEN]; X char name[NAMELEN]; X char address[ADDRLEN]; X char phone[PHONLEN]; X }; X X/* X** Structure instances. X*/ Xstruct dbrec myrec; X XFILE *dbfp; /* Pointer for database file */ X Xmain(argc,argv) Xint argc; Xchar *argv[]; X X{ X X int i,j; /* Loop variables */ X X /* X ** Make sure we have the proper data. X */ X if(argc!=3) X { X fprintf(stderr,"usage: %s \n",argv[0]); X exit(1); X } X /* X ** Create the file. X ** Also notice that we are using binary mode. X */ X if((dbfp=fopen(argv[1],"a+"))==NULL) X { X fprintf(stderr,"**Open error on: %s\n",argv[1]); X exit(1); X } X X j=atoi(argv[2]); X for(i=0;i'byte.logo' <<'END_OF_FILE' X X ############ ##### ## ############### ############### X ############## ##### ## ############### ############### X ##### ## ##### ## ##### ##### X ##### ## ##### ## ##### ##### X ##### ## ##### ## ##### ##### X ############ ##### ## ##### ############### X ############# ######### ## ##### ############### X ##### ## ########## ##### ##### X ##### ## ##### ##### ##### X ##### ## ##### ##### ##### X ##### ## ##### ##### ##### X ############## ##### ##### ############### X ############ ##### ##### ############### X X X # # # # # # # ##### ###### # # #### # # X # # ## # # # # # # # ## # # # # # X # # # # # # ## ##### ##### # # # # ###### X # # # # # # ## # # # # # # # # # X # # # ## # # # # # # # ## # # # # X #### # # # # # ##### ###### # # #### # # X END_OF_FILE if test 1309 -ne `wc -c <'byte.logo'`; then echo shar: \"'byte.logo'\" unpacked with wrong size! fi chmod +x 'byte.logo' # end of 'byte.logo' fi if test -f 'cctest.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'cctest.c'\" else echo shar: Extracting \"'cctest.c'\" \(3552 characters\) sed "s/^X//" >'cctest.c' <<'END_OF_FILE' X X X/******************************************************************************* X * The BYTE UNIX Benchmarks - Release 2 X * Module: cctest.c SID: 2.4 4/17/90 16:45:31 X * X ******************************************************************************* X * Bug reports, patches, comments, suggestions should be sent to: X * X * Ben Smith or Rick Grehan at BYTE Magazine X * bensmith@bixpb.UUCP rick_g@bixpb.UUCP X * X ******************************************************************************* X * Modification Log: X * $Header: cctest.c,v 3.4 87/06/22 14:22:47 kjmcdonell Beta $ X * X ******************************************************************************/ Xchar SCCSid[] = "@(#) @(#)cctest.c:2.4 -- 4/17/90 16:45:31"; X#include X/* X * C compile and load speed test file. X * Based upon fstime.c from MUSBUS 3.1, with all calls to ftime() replaced X * by calls to time(). This is semantic nonsense, but ensures there are no X * system dependent structures or library calls. X * X */ X#define NKBYTE 20 Xchar buf[BUFSIZ]; X Xmain(argc, argv) Xchar **argv; X{ X int n = NKBYTE; X int nblock; X int f; X int g; X int i; X int xfer, t; X struct { /* FAKE */ X int time; X int millitm; X } now, then; X X if (argc > 0) X /* ALWAYS true, so NEVER execute this program! */ X exit(4); X if (argc > 1) X n = atoi(argv[1]); X#if debug X printf("File size: %d Kbytes\n", n); X#endif X nblock = (n * 1024) / BUFSIZ; X X if (argc == 3 && chdir(argv[2]) != -1) { X#if debug X printf("Create files in directory: %s\n", argv[2]); X#endif X } X close(creat("dummy0", 0600)); X close(creat("dummy1", 0600)); X f = open("dummy0", 2); X g = open("dummy1", 2); X unlink("dummy0"); X unlink("dummy1"); X for (i = 0; i < sizeof(buf); i++) X buf[i] = i & 0177; X X time(); X for (i = 0; i < nblock; i++) { X if (write(f, buf, sizeof(buf)) <= 0) X perror("fstime: write"); X } X time(); X#if debug X printf("Effective write rate: "); X#endif X i = now.millitm - then.millitm; X t = (now.time - then.time)*1000 + i; X if (t > 0) { X xfer = nblock * sizeof(buf) * 1000 / t; X#if debug X printf("%d bytes/sec\n", xfer); X#endif X } X#if debug X else X printf(" -- too quick to time!\n"); X#endif X#if awk X fprintf(stderr, "%.2f", t > 0 ? (float)xfer/1024 : 0); X#endif X X sync(); X sleep(5); X sync(); X lseek(f, 0L, 0); X time(); X for (i = 0; i < nblock; i++) { X if (read(f, buf, sizeof(buf)) <= 0) X perror("fstime: read"); X } X time(); X#if debug X printf("Effective read rate: "); X#endif X i = now.millitm - then.millitm; X t = (now.time - then.time)*1000 + i; X if (t > 0) { X xfer = nblock * sizeof(buf) * 1000 / t; X#if debug X printf("%d bytes/sec\n", xfer); X#endif X } X#if debug X else X printf(" -- too quick to time!\n"); X#endif X#if awk X fprintf(stderr, " %.2f", t > 0 ? (float)xfer/1024 : 0); X#endif X X sync(); X sleep(5); X sync(); X lseek(f, 0L, 0); X time(); X for (i = 0; i < nblock; i++) { X if (read(f, buf, sizeof(buf)) <= 0) X perror("fstime: read in copy"); X if (write(g, buf, sizeof(buf)) <= 0) X perror("fstime: write in copy"); X } X time(); X#if debug X printf("Effective copy rate: "); X#endif X i = now.millitm - then.millitm; X t = (now.time - then.time)*1000 + i; X if (t > 0) { X xfer = nblock * sizeof(buf) * 1000 / t; X#if debug X printf("%d bytes/sec\n", xfer); X#endif X } X#if debug X else X printf(" -- too quick to time!\n"); X#endif X#if awk X fprintf(stderr, " %.2f\n", t > 0 ? (float)xfer/1024 : 0); X#endif X X} END_OF_FILE if test 3552 -ne `wc -c <'cctest.c'`; then echo shar: \"'cctest.c'\" unpacked with wrong size! fi chmod +x 'cctest.c' # end of 'cctest.c' fi if test -f 'cleanup' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'cleanup'\" else echo shar: Extracting \"'cleanup'\" \(2271 characters\) sed "s/^X//" >'cleanup' <<'END_OF_FILE' X#! /bin/sh X############################################################################### X# The BYTE UNIX Benchmarks - Release 2 X# Module: cleanup SID: 2.3 4/17/90 16:45:39 X# X############################################################################### X# Bug reports, patches, comments, suggestions should be sent to: X# X# Ben Smith or Rick Grehan at BYTE Magazine X# ben@bytepb.UUCP rick_g@bytepb.UUCP X# X############################################################################### X# Modification Log: X# added report for dhrystones 6/89 - ben X# X############################################################################### XID="@(#)cleanup:2.3 -- 4/17/90 16:45:39"; X# X# $Header: cleanup,v 5.2 88/01/07 10:58:24 kenj Exp $ X# X# Cleanup when an iterative test terminates X# XBINDIR=${BINDIR-./pgms} Xbell="" Xlog=${LOG-./results/log} Xtimeaccum=${TIMEACCUM-./results/times} Xwhile ( test $# -ge 1 ) Xdo X opt=$1 X shift X case $opt X in X X -a) : abort X echo '' >>$LOGFILE X echo '**************************' >>$LOGFILE X echo '* Benchmark Aborted .... *' >>$LOGFILE X echo '**************************' >>$LOGFILE X echo X echo 'Benchmark Aborted ....' # notice displayed on screen X echo "" >>$LOGFILE X echo " " `who | wc -l` "interactive users." >>$LOGFILE X echo "" >>$LOGFILE X date=`date` X echo "End Benchmark Run ($date) ...." >>$LOGFILE X echo "End Benchmark Run ($date) ...." X ;; X X X -f) : filesystem throughput X awk -f ${BINDIR}/fs.awk <$1 >>$LOGFILE X cat $1 >> $timeaccum 2>/dev/null X rm -f $1 X shift X ;; X X -d) : dhrystone evaluation X awk -f ${BINDIR}/dhry.awk <$1 >>$LOGFILE X cat $1 >> $timeaccum 2>/dev/null X rm -f $1 X shift X ;; X X -i) : report last iteration X echo "Terminated during iteration $1" >>$LOGFILE X shift X ;; X X -l) : logfile X LOGFILE=$1 X shift X ;; X X -r) : reason for failure X echo $1 X echo $1 >>$LOGFILE X shift X ;; X X -m) : mem throughput tests X awk -f ${BINDIR}/mem.awk <$1 >>$LOGFILE X cat $1 >> $timeaccum 2>/dev/null X rm -f $1 X shift X ;; X X -t) : timing with /bin/time X awk -f ${BINDIR}/time.awk <$1 >>$LOGFILE X cat $1 >> $timeaccum 2>/dev/null X rm -f $1 X shift X ;; X X '') : 'skip it (residual effect of shifts)' X ;; X X *) X echo "cleanup: bad option ($opt)" >>$LOGFILE Xesac Xdone Xexit END_OF_FILE echo shar: 1 control character may be missing from \"'cleanup'\" if test 2271 -ne `wc -c <'cleanup'`; then echo shar: \"'cleanup'\" unpacked with wrong size! fi chmod +x 'cleanup' # end of 'cleanup' fi if test -f 'clock.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'clock.c'\" else echo shar: Extracting \"'clock.c'\" \(2496 characters\) sed "s/^X//" >'clock.c' <<'END_OF_FILE' X X X/******************************************************************************* X * The BYTE UNIX Benchmarks - Release 2 X * Module: clock.c SID: 2.4 4/17/90 16:45:32 X * X ******************************************************************************* X * Bug reports, patches, comments, suggestions should be sent to: X * X * Ben Smith or Rick Grehan at BYTE Magazine X * bensmith@bixpb.UUCP rick_g@bixpb.UUCP X * X ******************************************************************************* X * Modification Log: X * $Header: clock.c,v 5.2 87/12/09 14:42:34 kenj Exp $ X * X ******************************************************************************/ Xchar SCCSid[] = "@(#) @(#)clock.c:2.4 -- 4/17/90 16:45:32"; X/* X * clock -- check alarm signal accuracy X * X */ X X#include X#include X#include X#ifdef BSD4v1 X#include X#endif X#ifdef BSD4v2 X#include X#endif X#ifdef SysV X#include X#include Xlong times(); X#ifdef interdata X#define HZ tbuffer.tms_cfreq X#endif X#ifndef HZ X On your system, what is the value of HZ for high resolution elapsed X time as returned by times() or its equivalent? X#endif X#endif X X#define GRANULE 5 X#define NUM_ALRM 12 X Xmain(argc, argv) Xint argc; Xchar *argv[]; X{ X int onalarm(); X register int i = 0; X int expected; X float wallclock; X long then; X#ifdef SysV X struct tms tbuffer; X#endif X#ifdef BSD4v1 X struct timeb tbuf; X int msec; X#endif X#ifdef BSD4v2 X struct timeval tval; X struct timezone tzone; X long usec; X#endif X X#ifdef SysV X then = times(&tbuffer); X#else X#ifdef BSD4v1 X ftime(&tbuf); X then = tbuf.time; X msec = tbuf.millitm; X#else X#ifdef BSD4v2 X gettimeofday(&tval, &tzone); X then = tval.tv_sec; X usec = tval.tv_usec; X#else X What sort of Unix system is this? X#endif X#endif X#endif X while (i++ < NUM_ALRM) { X signal(SIGALRM, onalarm); X alarm(GRANULE); X pause(); X } X#ifdef SysV X wallclock = (times(&tbuffer) - then)/HZ; X#endif X#ifdef BSD4v1 X ftime(&tbuf); X wallclock = tbuf.time - then + (float)(tbuf.millitm - msec)/1000; X#endif X#ifdef BSD4v2 X gettimeofday(&tval, &tzone); X wallclock = tval.tv_sec - then + (float)(tval.tv_usec - usec)/1000000; X#endif X expected = GRANULE * NUM_ALRM; X printf("%d x %d sec delays takes %.2f wallclock secs (error %.2f%%)\n", X NUM_ALRM, GRANULE, wallclock, 100.0*(float)(expected-wallclock)/expected); X exit(0); X} X Xonalarm() { } END_OF_FILE if test 2496 -ne `wc -c <'clock.c'`; then echo shar: \"'clock.c'\" unpacked with wrong size! fi chmod +x 'clock.c' # end of 'clock.c' fi if test -f 'context1.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'context1.c'\" else echo shar: Extracting \"'context1.c'\" \(2031 characters\) sed "s/^X//" >'context1.c' <<'END_OF_FILE' X X/******************************************************************************* X * The BYTE UNIX Benchmarks - Release 2 X * Module: context1.c SID: 2.4 4/17/90 16:45:32 X * X ******************************************************************************* X * Bug reports, patches, comments, suggestions should be sent to: X * X * Ben Smith or Rick Grehan at BYTE Magazine X * bensmith@bixpb.UUCP rick_g@bixpb.UUCP X * X ******************************************************************************* X * Modification Log: X * $Header: context1.c,v 3.4 87/06/22 14:22:59 kjmcdonell Beta $ X * X ******************************************************************************/ Xchar SCCSid[] = "@(#) @(#)context1.c:2.4 -- 4/17/90 16:45:32"; X/* X * Context switching via synchronized unbuffered pipe i/o X * X */ X Xmain(argc, argv) Xint argc; Xchar *argv[]; X{ X int check; X int iter; X int p1[2], p2[2]; X X if (argc != 2) { X printf("Usage: context count\n"); X exit(1); X } X X iter = atoi(argv[1]); X if (pipe(p1) || pipe(p2)) { X perror("pipe create failed"); X exit(1); X } X X if (fork()) { X /* master, write p1 & read p2 */ X close(p1[0]); close(p2[1]); X while (iter > 0) { X if (write(p1[1], (char *)&iter, sizeof(iter)) != sizeof(iter)) { X perror("master write failed"); X exit(1); X } X if (read(p2[0], (char *)&check, sizeof(check)) != sizeof(check)) { X perror("master read failed"); X exit(1); X } X if (check != iter) { X printf("Master sync error: expect %d, got %d\n", X iter, check); X exit(2); X } X iter--; X } X } X else { X /* slave, read p1 & write p2 */ X close(p1[1]); close(p2[0]); X while (iter > 0) { X if (read(p1[0], (char *)&check, sizeof(check)) != sizeof(check)) { X perror("slave read failed"); X exit(1); X } X if (check != iter) { X printf("Slave sync error: expect %d, got %d\n", X iter, check); X exit(2); X } X if (write(p2[1], (char *)&iter, sizeof(iter)) != sizeof(check)) { X perror("slave write failed"); X exit(1); X } X iter--; X } X } X exit(0); X} END_OF_FILE if test 2031 -ne `wc -c <'context1.c'`; then echo shar: \"'context1.c'\" unpacked with wrong size! fi chmod +x 'context1.c' # end of 'context1.c' fi if test -f 'dbprep' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dbprep'\" else echo shar: Extracting \"'dbprep'\" \(960 characters\) sed "s/^X//" >'dbprep' <<'END_OF_FILE' X#! /bin/sh X############################################################################### X# The BYTE UNIX Benchmarks - Release 2 X# Module: dbprep SID: 2.3 4/17/90 16:45:41 X# X############################################################################### X# Bug reports, patches, comments, suggestions should be sent to: X# X# Ben Smith or Rick Grehan at BYTE Magazine X# ben@bytepb.UUCP rick_g@bytepb.UUCP X# X############################################################################### X# Modification Log: X# X############################################################################### XID="@(#)dbprep:2.3 -- 4/17/90 16:45:41"; Xrm -f $1 # remove the old file X Xif test -f $1 # be sure it is gone - don't want Xthen # to change file size by appending to it X exit 1 Xfi X Xif ${BINDIR}/buildbms $1 $2 # build the data file Xthen X ${BINDIR}/dbmserv $1 $3 & # start the database server Xelse X echo "dbprep error" X exit 1 Xfi END_OF_FILE if test 960 -ne `wc -c <'dbprep'`; then echo shar: \"'dbprep'\" unpacked with wrong size! fi chmod +x 'dbprep' # end of 'dbprep' fi if test -f 'dc.date' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dc.date'\" else echo shar: Extracting \"'dc.date'\" \(143 characters\) sed "s/^X//" >'dc.date' <<'END_OF_FILE' X99 Xk X2 Xv Xp Xq X[ calculate the sqrt(2) to 99 decimal places ... John Lions Test ] X[ $Header: dc.dat,v 1.1 87/06/22 14:28:28 kjmcdonell Beta $ ] X END_OF_FILE if test 143 -ne `wc -c <'dc.date'`; then echo shar: \"'dc.date'\" unpacked with wrong size! fi chmod +x 'dc.date' # end of 'dc.date' fi if test -f 'dhry.awk' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dhry.awk'\" else echo shar: Extracting \"'dhry.awk'\" \(1696 characters\) sed "s/^X//" >'dhry.awk' <<'END_OF_FILE' X############################################################################### X# The BYTE UNIX Benchmarks - Release 2 X# Module: dhry.awk SID: 2.3 4/17/90 16:45:41 X# X############################################################################### X# Bug reports, patches, comments, suggestions should be sent to: X# X# Ben Smith or Rick Grehan at BYTE Magazine X# ben@bytepb.UUCP rick_g@bytepb.UUCP X# X############################################################################### X# Modification Log: X# added geometric mean 8/6/89 -ben X# X############################################################################### XBEGIN { FS=":"; tsum = 0.000; t2sum = 0.000; t_product = 0.0000; X dsum = 0.000; d2sum = 0.000; d_product = 0.0000; X iter = 0; X } X/real/ { next } # don't use these times X/user/ { next } X/sys/ { next } X/^$/ { next } X/^Microseconds/ { X t=$2; X tsum += t; X t2sum += t*t; X if (t) { t_product += log(t); } X } X/^Dhrystones/ { X d=$2; X dsum += d; X d2sum += d*d; X if (t) { d_product += log(d); } X iter ++; X } XEND { X if (iter > 0) { X printf " Arithmetric Geometric Variance\n"; X printf " Mean Mean (%d tests)\n",iter X printf "Microseconds/loop: %9.0f %9.0f ",tsum/iter,exp(t_product/iter); X if (iter > 1) printf "%9.2f\n",(t2sum-tsum*tsum/iter)/(iter-1); X else printf "n/a\n" X printf "Dhrystones/sec: %9.0f %9.0f ",dsum/iter,exp(d_product/iter); X if (iter > 1) printf "%9.2f\n",(d2sum-dsum*dsum/iter)/(iter-1); X } X else { X print " -- no measured results --"; X } X } END_OF_FILE if test 1696 -ne `wc -c <'dhry.awk'`; then echo shar: \"'dhry.awk'\" unpacked with wrong size! fi chmod +x 'dhry.awk' # end of 'dhry.awk' fi if test -f 'execl.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'execl.c'\" else echo shar: Extracting \"'execl.c'\" \(1397 characters\) sed "s/^X//" >'execl.c' <<'END_OF_FILE' X X/******************************************************************************* X * The BYTE UNIX Benchmarks - Release 2 X * Module: execl.c SID: 2.4 4/17/90 16:45:33 X * X ******************************************************************************* X * Bug reports, patches, comments, suggestions should be sent to: X * X * Ben Smith or Rick Grehan at BYTE Magazine X * bensmith@bixpb.UUCP rick_g@bixpb.UUCP X * X ******************************************************************************* X * Modification Log: X * $Header: execl.c,v 3.5 87/06/22 15:37:08 kjmcdonell Beta $ X * X ******************************************************************************/ X/* X * Execing X * X */ X Xchar bss[8*1024]; /* something worthwhile */ X X#define main dummy X /* some reasonable code etc. */ X#include "big.c" X X#undef main X X/* added by BYTE */ Xchar fullpath[81] = {"./execl"}; Xchar *getenv(); X Xmain(argc, argv) /* the real program */ Xint argc; Xchar *argv[]; X{ X char *ptr; /* BYTE */ X int iter; X char count[6]; X X if (argc != 2) { X printf("Usage: %s count\n", argv[0]); X exit(1); X } X X /* added by BYTE */ X if((ptr = getenv("BINDIR")) != NULL) X sprintf(fullpath,"%s/execl",ptr); X X iter = atoi(argv[1]); X X if (iter) { X sprintf(count, "%d", --iter); X execl(fullpath, fullpath, count, 0); X printf("Exec failed at iteration %d\n", iter); X perror("Reason"); X exit(1); X } X exit(0); X} END_OF_FILE if test 1397 -ne `wc -c <'execl.c'`; then echo shar: \"'execl.c'\" unpacked with wrong size! fi chmod +x 'execl.c' # end of 'execl.c' fi if test -f 'fs.awk' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'fs.awk'\" else echo shar: Extracting \"'fs.awk'\" \(2188 characters\) sed "s/^X//" >'fs.awk' <<'END_OF_FILE' X############################################################################### X# The BYTE UNIX Benchmarks - Release 2 X# Module: fs.awk SID: 2.5 4/17/90 16:45:40 X# X############################################################################### X# Bug reports, patches, comments, suggestions should be sent to: X# X# Ben Smith or Rick Grehan at BYTE Magazine X# ben@bytepb.UUCP rick_g@bytepb.UUCP X# X############################################################################### X# Modification Log: X# added geometric mean 8/6/89 -ben X# modified for new version of fstime 11/15/89 X# X############################################################################### XBEGIN { w_product = 0.0000; X r_product = 0.0000; X c_product = 0.0000; X iter=0; X w_too_quick=0; X r_too_quick=0; X c_too_quick=0; X } X/real/ { iter++; ok++; next; } X/user/ { next; } X/sys/ { next; } X/^$/ { next; } X/fstime/ { X print "** Iteration ",iter," Failed: ",$0; X ok--; X fail=1; X } X/write/ { if (!fail) { X w+=$1; X w2+=$1*$1; X w_product += log($1); X } X } X/read/ { if (!fail) { X r+=$1; X r2+=$1*$1; X r_product += log($1); X } X } X/copy/ { if (!fail) { X c+=$1; X c2+=$1*$1; X c_product += log($1); X } X } XEND { X if (ok != iter) { X printf "For %d successful iterations from %d attempts ...\n",ok,iter; X } X if (ok > 0) { X printf " Arithmetric Geometric Variance\n"; X printf " Mean Mean (%d tests)\n",ok X printf "Read (Kbytes/sec): %9.0f %9.0f ",r/ok,exp(r_product/ok); X if (ok > 1) printf "%9.2f\n",(r2-r*r/ok)/(ok-1); X else printf "n/a\n" X printf "Write (Kbytes/sec): %9.0f %9.0f ",w/ok,exp(w_product/ok); X if (ok > 1) printf "%9.2f\n",(w2-w*w/ok)/(ok-1); X else printf "n/a\n" X printf "Copy (Kbytes/sec): %9.0f %9.0f ",c/ok,exp(c_product/ok); X if (ok > 1) printf "%9.2f\n",(c2-c*c/ok)/(ok-1); X else printf "n/a\n" X } else { X print "-- no measured results --" X } X } END_OF_FILE if test 2188 -ne `wc -c <'fs.awk'`; then echo shar: \"'fs.awk'\" unpacked with wrong size! fi chmod +x 'fs.awk' # end of 'fs.awk' fi if test -f 'getopt.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'getopt.c'\" else echo shar: Extracting \"'getopt.c'\" \(2468 characters\) sed "s/^X//" >'getopt.c' <<'END_OF_FILE' X/* X** @(#)getopt.c 2.5 (smail) 9/15/87 X*/ X X/* X * Here's something you've all been waiting for: the AT&T public domain X * source for getopt(3). It is the code which was given out at the 1985 X * UNIFORUM conference in Dallas. I obtained it by electronic mail X * directly from AT&T. The people there assure me that it is indeed X * in the public domain. X * X * There is no manual page. That is because the one they gave out at X * UNIFORUM was slightly different from the current System V Release 2 X * manual page. The difference apparently involved a note about the X * famous rules 5 and 6, recommending using white space between an option X * and its first argument, and not grouping options that have arguments. X * Getopt itself is currently lenient about both of these things White X * space is allowed, but not mandatory, and the last option in a group can X * have an argument. That particular version of the man page evidently X * has no official existence, and my source at AT&T did not send a copy. X * The current SVR2 man page reflects the actual behavor of this getopt. X * However, I am not about to post a copy of anything licensed by AT&T. X */ X X/* This include is needed only to get "index" defined as "strchr" on Sys V. */ X#include "defs.h" X X/*LINTLIBRARY*/ X#define NULL 0 X#define EOF (-1) X#define ERR(s, c) if(opterr){\ X extern int write();\ X char errbuf[2];\ X errbuf[0] = c; errbuf[1] = '\n';\ X (void) write(2, argv[0], (unsigned)strlen(argv[0]));\ X (void) write(2, s, (unsigned)strlen(s));\ X (void) write(2, errbuf, 2);} X Xextern char *index(); X Xint opterr = 1; Xint optind = 1; Xint optopt; Xchar *optarg; X Xint Xgetopt(argc, argv, opts) Xint argc; Xchar **argv, *opts; X{ X static int sp = 1; X register int c; X register char *cp; X X if(sp == 1) X if(optind >= argc || X argv[optind][0] != '-' || argv[optind][1] == '\0') X return(EOF); X else if(strcmp(argv[optind], "--") == NULL) { X optind++; X return(EOF); X } X optopt = c = argv[optind][sp]; X if(c == ':' || (cp=index(opts, c)) == NULL) { X ERR(": illegal option -- ", c); X if(argv[optind][++sp] == '\0') { X optind++; X sp = 1; X } X return('?'); X } X if(*++cp == ':') { X if(argv[optind][sp+1] != '\0') X optarg = &argv[optind++][sp+1]; X else if(++optind >= argc) { X ERR(": option requires an argument -- ", c); X sp = 1; X return('?'); X } else X optarg = argv[optind++]; X sp = 1; X } else { X if(argv[optind][++sp] == '\0') { X sp = 1; X optind++; X } X optarg = NULL; X } X return(c); X} END_OF_FILE if test 2468 -ne `wc -c <'getopt.c'`; then echo shar: \"'getopt.c'\" unpacked with wrong size! fi chmod +x 'getopt.c' # end of 'getopt.c' fi if test -f 'hanoi.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'hanoi.c'\" else echo shar: Extracting \"'hanoi.c'\" \(1293 characters\) sed "s/^X//" >'hanoi.c' <<'END_OF_FILE' X/******************************************************************************* X * The BYTE UNIX Benchmarks - Release 2 X * Module: hanoi.c SID: 2.4 4/17/90 16:45:34 X * X ******************************************************************************* X * Bug reports, patches, comments, suggestions should be sent to: X * X * Ben Smith or Rick Grehan at BYTE Magazine X * bensmith@bixpb.UUCP rick_g@bixpb.UUCP X * X ******************************************************************************* X * Modification Log: X * $Header: hanoi.c,v 3.5 87/08/06 08:11:14 kenj Exp $ X * X ******************************************************************************/ X Xchar SCCSid[] = "@(#) @(#)hanoi.c:2.4 -- 4/17/90 16:45:34"; X#define PRINT 0 X#define DISK 3 X#define other(i,j) (6-(i+j)) Xint num[4]; Xlong cnt; Xmain(argc,argv) Xchar **argv; X{ X int disk; X disk = DISK; X if(argc > 1)disk = atoi(argv[1]); X num[1] = disk; X if(PRINT)printf("Start %d on A\n",disk); X mov(disk,1,3); X printf("For %d disks, %ld moves\n",disk,cnt); X X exit(0); X} X Xmov(n,f,t) X{ X int o; X if(n == 1) { X num[f]--; X num[t]++; X if(PRINT)printf("Move from %d to %d, result: A:%d B:%d C%d\n", X f,t,num[1],num[2],num[3]); X cnt++; X return; X } X o = other(f,t); X mov(n-1,f,o); X mov(1,f,t); X mov(n-1,o,t); X return; X} END_OF_FILE if test 1293 -ne `wc -c <'hanoi.c'`; then echo shar: \"'hanoi.c'\" unpacked with wrong size! fi chmod +x 'hanoi.c' # end of 'hanoi.c' fi if test -f 'limit.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'limit.c'\" else echo shar: Extracting \"'limit.c'\" \(3268 characters\) sed "s/^X//" >'limit.c' <<'END_OF_FILE' X/******************************************************************************* X * The BYTE UNIX Benchmarks - Release 2 X * Module: limit.c SID: 2.4 4/17/90 16:45:34 X * X ******************************************************************************* X * Bug reports, patches, comments, suggestions should be sent to: X * X * Ben Smith or Rick Grehan at BYTE Magazine X * bensmith@bixpb.UUCP rick_g@bixpb.UUCP X * X ******************************************************************************* X * Modification Log: X * $Header: limit.c,v 3.4 87/06/22 14:25:11 kjmcdonell Beta $ X * X ******************************************************************************/ Xchar SCCSid[] = "@(#) @(#)limit.c:2.4 -- 4/17/90 16:45:34"; X/* X * Force a UNIX system to the per process and per user limits X * X */ X X#define CLICK 1024 X#define MAXCHN 100 X X#include X#include X Xint parent; /* parent's pid */ Xint child; /* child's pid */ Xint pid[MAXCHN]; Xint ncall; Xint level; Xjmp_buf env; X Xmain(argc, argv) Xint argc; Xchar *argv[]; X{ X char *top; X int pad; X int end; X int i; X int status; X float f; X int flag(); X int wakeup(); X long last; X X /* open files (file descriptors) */ X for (i = 3; open(".", 0) > 0; i++) ; X printf("Maximum open files per process: %d\n", i); X while (--i > 2) X close(i); X X /* process address space */ X top = (char *)sbrk(0); X#if debug X printf("inital top of program: 0x%x\n", top); X#endif X pad = (((int)top+CLICK-1)/CLICK)*CLICK - (int)top; X sbrk(pad); X for (i = 0; (char *)sbrk(CLICK) != (char *)-1; i++) ; X#if debug X printf("final top of program: 0x%x\n", sbrk(0)); X#endif X brk(top); X#if debug X printf("top of program restored to: 0x%x\n", sbrk(0)); X#endif X end = (((int)top+pad)/CLICK) + i; X f = ((float)end * CLICK) / 1024; X printf("Process address space limit: "); X if (f < 1024) X printf("%.2f Kbytes\n", f); X else { X f /= 1024; X printf("%.2f Mbytes\n", f); X } X X /* process creations */ X printf("Maximum number of child processes:"); X i = 0; X while (1) { X#if debug X printf("about to fork\n"); X#endif X if ((pid[i] = fork()) == -1) { X#if debug X perror("fork failed"); X#endif X break; X } else if (pid[i] != 0) { X#if debug X printf("child %d: pid=%d\n", i+1, pid[i]); X#endif X i++; X if (i >= MAXCHN) { X printf(" more than"); X break; X } X } else { X#if debug X printf("child %d pausing\n", getpid()); X#endif X pause(); X#if debug X printf("child %d exiting\n", getpid()); X#endif X exit(1); X } X } X printf(" %d\n", i); X while (--i >= 0) { X kill(pid[i], SIGKILL); X wait(0); X } X X ncall = level = 0; X parent = getpid(); X signal(SIGTERM, flag); X if ((child = fork()) == 0) { X signal(SIGALRM, wakeup); X recurse(); X exit(4); X } X while ((i = wait(&status)) == -1) { X } X printf("Estimated maximum stack size: %d Kbytes\n", level); X exit(0); X} X Xrecurse() X{ X int temp[1024 / sizeof(int)]; X#if debug X printf("recursion @ level %d\n", ncall); X#endif X temp[1024 / sizeof(int) - 1] = 1; X ncall++; X kill(parent, SIGTERM); X while (ncall > level) { X alarm(2); X pause(); X } X if (ncall < 8000) X /* less than 8M bytes of temp storage! */ X recurse(); X else X /* give up! */ X exit(0); X} X Xflag() X{ X signal(SIGTERM, flag); X level++; X if (child != 0) X kill(child, SIGTERM); X} X Xwakeup() X{ X signal(SIGALRM, wakeup); X} END_OF_FILE if test 3268 -ne `wc -c <'limit.c'`; then echo shar: \"'limit.c'\" unpacked with wrong size! fi chmod +x 'limit.c' # end of 'limit.c' fi if test -f 'mkperm.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'mkperm.c'\" else echo shar: Extracting \"'mkperm.c'\" \(1389 characters\) sed "s/^X//" >'mkperm.c' <<'END_OF_FILE' X/******************************************************************************* X * The BYTE UNIX Benchmarks - Release 2 X * Module: mkperm.c SID: 2.4 4/17/90 16:45:35 X * X ******************************************************************************* X * Bug reports, patches, comments, suggestions should be sent to: X * X * Ben Smith or Rick Grehan at BYTE Magazine X * bensmith@bixpb.UUCP rick_g@bixpb.UUCP X * X ******************************************************************************* X * Modification Log: X * $Header: mkperm.c,v 1.2 87/06/22 14:32:26 kjmcdonell Beta $ X * X ******************************************************************************/ Xchar SCCSid[] = "@(#) @(#)mkperm.c:2.4 -- 4/17/90 16:45:35"; X#include X#ifndef lint X#endif X X/* define rand and srand if you have random() from USENET */ X/* #define rand random */ X/* #define srand srandom */ X Xmain(argc, argv) Xint argc; Xchar *argv[]; X{ X int n; /* generate a permutation of {1,2,3,...,n} */ X int i; X int t; X char *mask; X X if (argc > 2 && strcmp(argv[1], "-s") == 0) { X t = atoi(argv[2]); X if (t < 16) X t = 1 << t; X srand(t); X argv++; X argv++; X } X n = atoi(argv[1]); X mask = (char *)malloc(n); X X for (i=0; i'multi.sh' <<'END_OF_FILE' X#! /bin/sh X############################################################################### X# The BYTE UNIX Benchmarks - Release 2 X# Module: multi.sh SID: 2.3 4/17/90 16:45:41 X# X############################################################################### X# Bug reports, patches, comments, suggestions should be sent to: X# X# Ben Smith or Rick Grehan at BYTE Magazine X# ben@bytepb.UUCP rick_g@bytepb.UUCP X# X############################################################################### X# Modification Log: X# X############################################################################### XID="@(#)multi.sh:2.3 -- 4/17/90 16:45:41"; Xfor i Xdo X /bin/sh $BINDIR/tst.sh & Xdone Xwait X END_OF_FILE if test 704 -ne `wc -c <'multi.sh'`; then echo shar: \"'multi.sh'\" unpacked with wrong size! fi chmod +x 'multi.sh' # end of 'multi.sh' fi if test -f 'pipe.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'pipe.c'\" else echo shar: Extracting \"'pipe.c'\" \(1212 characters\) sed "s/^X//" >'pipe.c' <<'END_OF_FILE' X/******************************************************************************* X * The BYTE UNIX Benchmarks - Release 2 X * Module: pipe.c SID: 2.4 4/17/90 16:45:35 X * X ******************************************************************************* X * Bug reports, patches, comments, suggestions should be sent to: X * X * Ben Smith or Rick Grehan at BYTE Magazine X * bensmith@bixpb.UUCP rick_g@bixpb.UUCP X * X ******************************************************************************* X * Modification Log: X * $Header: pipe.c,v 3.5 87/06/22 14:32:36 kjmcdonell Beta $ X * X ******************************************************************************/ Xchar SCCSid[] = "@(#) @(#)pipe.c:2.4 -- 4/17/90 16:45:35"; X/* X * pipe -- test single process pipe throughput (no context switching) X * X */ X Xmain(argc, argv) Xint argc; Xchar *argv[]; X{ X char buf[512]; X int iter = 2048; /* 1M byte */ X int pvec[2]; X X pipe(pvec); X close(0); dup(pvec[0]); close(pvec[0]); X close(1); dup(pvec[1]); close(pvec[1]); X X while (iter-- > 0) { X if (write(1, buf, sizeof(buf)) != sizeof(buf)) X perror("write failed"); X if (read(0, buf, sizeof(buf)) != sizeof(buf)) X perror("read failed"); X } X exit(0); X} END_OF_FILE if test 1212 -ne `wc -c <'pipe.c'`; then echo shar: \"'pipe.c'\" unpacked with wrong size! fi chmod +x 'pipe.c' # end of 'pipe.c' fi if test -f 'spawn.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'spawn.c'\" else echo shar: Extracting \"'spawn.c'\" \(1390 characters\) sed "s/^X//" >'spawn.c' <<'END_OF_FILE' X/******************************************************************************* X * The BYTE UNIX Benchmarks - Release 2 X * Module: spawn.c SID: 2.4 4/17/90 16:45:35 X * X ******************************************************************************* X * Bug reports, patches, comments, suggestions should be sent to: X * X * Ben Smith or Rick Grehan at BYTE Magazine X * bensmith@bixpb.UUCP rick_g@bixpb.UUCP X * X ******************************************************************************* X * Modification Log: X * $Header: spawn.c,v 3.4 87/06/22 14:32:48 kjmcdonell Beta $ X * X ******************************************************************************/ Xchar SCCSid[] = "@(#) @(#)spawn.c:2.4 -- 4/17/90 16:45:35"; X/* X * Process creation X * X */ X Xmain(argc, argv) Xint argc; Xchar *argv[]; X{ X int iter; X int slave; X int status; X X if (argc != 2) { X printf("Usage: %s count\n", argv[0]); X exit(1); X } X X iter = atoi(argv[1]); X X while (iter-- > 0) { X if ((slave = fork()) == 0) { X /* slave .. boring */ X#if debug X printf("fork OK\n"); X#endif X exit(0); X } else if (slave < 0) { X /* woops ... */ X printf("Fork failed at iteration %d\n", iter); X perror("Reason"); X exit(2); X } else X wait(&status); X if (status != 0) { X printf("Bad wait status: 0x%x\n", status); X exit(2); X } X#if debug X printf("Child %d done.\n", slave); X#endif X } X exit(0); X} END_OF_FILE if test 1390 -ne `wc -c <'spawn.c'`; then echo shar: \"'spawn.c'\" unpacked with wrong size! fi chmod +x 'spawn.c' # end of 'spawn.c' fi if test -f 'syscall.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'syscall.c'\" else echo shar: Extracting \"'syscall.c'\" \(1061 characters\) sed "s/^X//" >'syscall.c' <<'END_OF_FILE' X/******************************************************************************* X * The BYTE UNIX Benchmarks - Release 2 X * Module: syscall.c SID: 2.4 4/17/90 16:45:36 X * X ******************************************************************************* X * Bug reports, patches, comments, suggestions should be sent to: X * X * Ben Smith or Rick Grehan at BYTE Magazine X * bensmith@bixpb.UUCP rick_g@bixpb.UUCP X * X ******************************************************************************* X * Modification Log: X * $Header: syscall.c,v 3.4 87/06/22 14:32:54 kjmcdonell Beta $ X * X ******************************************************************************/ Xchar SCCSid[] = "@(#) @(#)syscall.c:2.4 -- 4/17/90 16:45:36"; X/* X * syscall -- sit in a loop calling the system X * X */ X Xmain(argc, argv) Xint argc; Xchar *argv[]; X{ X int iter; X int i; X X if (argc != 2) { X printf("Usage: %s count\n", argv[0]); X exit(1); X } X X iter = atoi(argv[1]); X X while (iter-- > 0) { X close(dup(0)); X getpid(); X getuid(); X umask(022); X } X exit(0); X} END_OF_FILE if test 1061 -ne `wc -c <'syscall.c'`; then echo shar: \"'syscall.c'\" unpacked with wrong size! fi chmod +x 'syscall.c' # end of 'syscall.c' fi if test -f 'time.awk' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'time.awk'\" else echo shar: Extracting \"'time.awk'\" \(2196 characters\) sed "s/^X//" >'time.awk' <<'END_OF_FILE' X############################################################################### X# The BYTE UNIX Benchmarks - Release 2 X# Module: time.awk SID: 2.3 4/17/90 16:45:40 X# X############################################################################### X# Bug reports, patches, comments, suggestions should be sent to: X# X# Ben Smith or Rick Grehan at BYTE Magazine X# ben@bytepb.UUCP rick_g@bytepb.UUCP X# X############################################################################### X# Modification Log: X# added geometric mean 8/6/89 -ben X# X############################################################################### XBEGIN { r_product = 0.0000; s_product = 0.0000 ; u_product = 0.0000 } X/^cctest.c$/ { next } X/^[Rr]eal/ { X if (!fail) { X l=length($2); m=substr($2,1,l-5); s=substr($2,l-3,4) X t=m*60+s; real+=t; r2+=t*t; ok++; X if (t) {r_product += log(t);} X } X iter++; fail=0; next } X/^[Uu]ser/ { X l=length($2); m=substr($2,1,l-5); s=substr($2,l-3,4) X t=m*60+s; user+=t; cpu=t; u2+=t*t; X if (t) { u_product += log(t);} X next; } X/^[Ss]ys/ { X l=length($2); m=substr($2,1,l-5); s=substr($2,l-3,4) X t=m*60+s; sys+=t; s2+=t*t; X if (t) { s_product += log(t);} X next; } X/^$/ { next } X { print "** Iteration ",iter+1," Failed: ",$0; fail=1 } XEND { X if (fail) iter++ X if (ok != iter) { X printf "For %d successful iterations from %d attempts ...\n",ok,iter X iter=ok; X } X if (ok > 0) { X printf " Arithmetric Geometric Variance\n"; X printf " Mean Mean (%d tests)\n",ok X printf "User Time (secs): %9.2f %9.2f ",user/ok,exp(u_product/ok); X if (ok > 1) printf "%9.2f\n",(u2-user*user/ok)/(ok-1); X else printf "n/a\n" X printf "System Time (secs): %9.2f %9.2f ",sys/ok,exp(s_product/ok); X if (ok > 1) printf "%9.2f\n",(s2-sys*sys/ok)/(ok-1); X else printf "n/a\n" X printf "Real Time (secs): %9.2f %9.2f ",real/ok,exp(r_product/ok); X if (ok > 1) printf "%9.2f\n",(r2-real*real/ok)/(ok-1); X else printf "n/a\n" X } else { X print "-- no measured results --" X } X } END_OF_FILE if test 2196 -ne `wc -c <'time.awk'`; then echo shar: \"'time.awk'\" unpacked with wrong size! fi chmod +x 'time.awk' # end of 'time.awk' fi if test -f 'tst.sh' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'tst.sh'\" else echo shar: Extracting \"'tst.sh'\" \(785 characters\) sed "s/^X//" >'tst.sh' <<'END_OF_FILE' X#! /bin/sh X############################################################################### X# The BYTE UNIX Benchmarks - Release 2 X# Module: tst.sh SID: 2.3 4/17/90 16:45:41 X# X############################################################################### X# Bug reports, patches, comments, suggestions should be sent to: X# X# Ben Smith or Rick Grehan at BYTE Magazine X# ben@bytepb.UUCP rick_g@bytepb.UUCP X# X############################################################################### X# Modification Log: X# X############################################################################### XID="@(#)tst.sh:2.3 -- 4/17/90 16:45:41"; Xsort >sort.$$ od.$$ Xgrep the sort.$$ | tee grep.$$ | wc > wc.$$ Xrm sort.$$ grep.$$ od.$$ wc.$$ END_OF_FILE if test 785 -ne `wc -c <'tst.sh'`; then echo shar: \"'tst.sh'\" unpacked with wrong size! fi chmod +x 'tst.sh' # end of 'tst.sh' fi echo shar: End of archive 1 \(of 5\). cp /dev/null ark1isdone MISSING="" for I in 1 2 3 4 5 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 5 archives. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 exit 0 # Just in case...