[net.sources] The 30 Minute Benchmark

paul@msdc.UUCP (Paul Manno) (10/26/84)

A copy of the benchmark programs producing the following results has
been published in net.sources for your enjoyment.  In order to make any
sense of these numbers, you MUST review the benchmark programs and 
system configurations in net.sources.  We accept no responsibility for
your use of the data.

Here is a summary of some of the results with the numbers given as
real/user/sys time in seconds.  ("Sort" is the execution of sort on a
1MB file of random ASCII integers; "memdisk" and "memcpu" are the
average times for execution of five concurrent copies of the "disk"
and "cpu" benchmarks.)

     machine     |    sort    |  memdisk  |   memcpu
-----------------|------------|-----------|------------
VAX 750 - 4.1BSD | 455/316/68 | 668/27/32 | 1132/207/9
VAX 750 - 4.2BSD | 309/281/20 | 271/25/17 | 1052/204/4
VAX 780 - 4.1BSD | 357/180/38 | 802/16/21 |  776/106/3 
VAX 785 - Ultrix | 119/105/ 8 | 246/10/ 8 |  340/ 68/0.4

For those folks not receiving net.sources, you may request a copy of
the programs through UUCP mail or by sending me a tape (pre-addressed
and return postage paid, please) to the address below.  I welcome
constructive comments and additional results you may wish to send.

Paul Manno (...{akgua, gatech, mcnc}!msdc!paul)
Medical Systems Development Corporation
P. O. Box 26022
Atlanta, GA  30335

P.S.  The name "The 30 Minute Benchmark" is not derived from the amount
of time to run the benchmark.  That's the time it took to write it!  :-)

======= cut here =======

echo "This is a shell-archive format file."
echo "It will extract 10 files in the current directory..."
echo "-x README"
cat >README <<!FUNKYSTUFF!
DISCLAIMER:
	This benchmark was written to evaluate cpu and disk/filesystem
	throughput on a Unix system for our style of application.
	Since our applications produce a system loading probably unlike
	any other in the universe, you must interpret the results
	provided and those you collect at your own risk.

	Even though these programs seem to represent our workload, we
	still don't trust them (or any benchmark) beyond plus or minus
	20% on relative performance comparisons.  Remember, actual
	mileage may vary depending upon local road conditions and your
	driving habits.

	The code attempts to be portable among many versions of Unix
	although it has only been run on 4.1bsd, 4.2bsd and System 3 at
	the time of this writing.

TO RUN:
	The benchmark requires 5 files:  Makefile, runbench, mkfile.c,
	memcpu.c and memdisk.c.  Results are collected in a file named
	"results" in the current directory. It is started with the
	following command:

	sh runbench

	Included for ease of interpretation is an awk script used to
	provide common output (some systems like to report times in
	MM:SS.SS, others in SSSSS.SS) and averages of sections.  To run
	the awk script, type:

	awk -f anal.awk <results >anal.results

IT REQUIRES:
	time: about 0.3 to 1.5 hours depending upon cpu and disk speed.
	disk: about 6MB in the current directory.
	mem:  about 300KB per process (10 processes max)

SUGGESTIONS:
	I welcome constructive comments on this suite.  UUCP mail is
	preferred but USPS mail is acceptable.  Send comments to:

	Paul Manno (...{akgua, gatech, mcnc}!msdc!paul)
	Medical Systems Development Corporation
	P.O.  Box  26022
	Atlanta, GA  30335
!FUNKYSTUFF!
echo "-x Makefile"
cat >Makefile <<!FUNKYSTUFF!
CFLAGS=-O

all: mkfile memcpu memdisk

mkfile: mkfile.c
	time cc \$(CFLAGS) mkfile.c -o mkfile >>c.mkfile 2>>c.mkfile
memcpu: memcpu.c
	time cc \$(CFLAGS) memcpu.c -o memcpu >>c.memcpu 2>>c.memcpu
memdisk: memdisk.c
	time cc \$(CFLAGS) memdisk.c -o memdisk >>c.memdisk 2>>c.memdisk
!FUNKYSTUFF!
echo "-x memcpu.c"
cat >memcpu.c <<!FUNKYSTUFF!
/*
 *	memcpu - attempt to test cpu and memory speed
 *
 *	Usage:
 *		 memcpu -b<block size> -i<iterations> -m<mem size>
 *
 *	Description:
 *		memcpu allocates a memory buffer (default 100KB) and
 *		initializes each <block size> block (default 1024B) to
 *		the char representation of the block number.  It then
 *		randomly "seeks" to a block, copies the info to a
 *		local string and compares the converted integer back
 *		to the block number <iteration> times (default 100000).
 *
 *	Written:
 *		June,  1984
 *		Medical Systems Development Corporation
 *
 */
#include <stdio.h>

main(argc, argv)
int	argc;
char	*argv[];
    {
    long	i;
    long	bsize = 1024;		/* default to 1K block size */
    long	msize = 100000;		/* default to 100K mem size */
    long	iters = 100000;		/* default to 100K interations */
    long	nblocks;
    char	*buf;
    char	str[256];
    char	*malloc();
    char	*index();
    int		rand();
    int		atoi();
    long	value;

    for (i = 1; i < argc; i++)
	{
	if (argv[i][0] == '-')
	    switch(argv[i][1])
	    	{
	    	case 'm':
	 	    if ((msize = atoi(&argv[i][2])) <= 0)
		        {
		        fprintf(stderr, "Bad mem size spec.\n");
		        exit(1);
		        }
	 	    break;
		case 'b':
		    if ((bsize = atoi(&argv[i][2])) <= 0)
			{
			fprintf(stderr, "Bad block size spec.\n");
			exit(1);
			}
		    break;
		case 'i':
		    if ((iters = atoi(&argv[i][2])) <= 0)
			{
			fprintf(stderr, "Bad iteration count.\n");
			exit(1);
			}
		    break;
	    	default:
	 	    exit(1);
	    	}
	}
    if (msize <= 0)
	{
	fprintf(stderr, "Usage: %s -b<block size> -i<iterations> -m<mem size>\n", argv[0]);
	exit(1);
	}
    if (bsize <= 0)
	{
	fprintf(stderr, "Usage: %s -b<block size> -i<iterations> -m<mem size>\n", argv[0]);
	exit(1);
	}
    if (bsize > msize)
	{
	fprintf(stderr, "%s: block size specified is greater than memory spec.\n", argv[0]);
	exit(1);
	}

    srand(time(0L));

    if ((buf = malloc(msize)) == NULL)
	{
	fprintf(stderr, "Could not allocate %ld bytes of memory.\n", msize);
	exit(1);
	}

    nblocks = msize / bsize;
    sprintf(str, "%%0%dd", bsize > 32 ? 32 : bsize - 1);
    for (i = 0; i < nblocks; i++)
	sprintf(&buf[i * bsize], str, i);

    for (; iters > 0; iters--)
	{
	i = (rand() * rand() * rand() * rand()) % nblocks;
	i = i >= 0 ? i : i * (-1);		/* ensure it's positive */
	strncpy(str, &buf[i * bsize], bsize);	/* move a string around */
	if (index(str, '0') == NULL)
	    strcpy(str, "0");
	value = strlen(&buf[i * bsize]);	/* look through memory  */
	value = atoi(&buf[i * bsize]);		/* convert saved number */
	if (value != i)
	    fprintf(stderr, "%s: block number mismatch.\n", argv[0]);
	}
    }
!FUNKYSTUFF!
echo "-x memdisk.c"
cat >memdisk.c <<!FUNKYSTUFF!
/*
 *	memdisk - try and measure memory and disk performance
 *
 *	Usage:
 *		memdisk -b<block size> -f<filename> -i<iterations> -m<file size>
 *
 *	Description:
 *		memdisk writes a file (default name "benchtmp") the size
 *		specified (default 100KB) and fills each <block size> block
 *		(default 1024B) with the char representation of the block
 *		number.  The file is closed and re-opened for reading.  For
 *		the specified number of <iterations> (default 100000), memdisk
 *		randomly seeks to a block and converts the contents back
 *		into the integer block number for comparison after moving
 *		the string around in memory.
 *
 *	Written:
 *		June,  1984
 *		Medical Systems Development Corporation
 *
 */
#include <stdio.h>

main(argc, argv)
int	argc;
char	*argv[];
    {
    long	i;
    long	bsize = 1024;		/* default to 1K block size */
    long	msize = 100000;		/* default to 100K file size */
    long	iters = 100000;		/* default to 100K interations */
    long	mempad = 300000;	/* some amount of bulk memory */
    long	nblocks;
    int		fd;
    char	*buf;
    char	*str;
    char	*mem;
    char	fname[256];
    char	*malloc();
    char	*index();
    int		rand();
    int		atoi();
    int		creat();
    long	value;

    strcpy(fname, "benchtmp");

    for (i = 1; i < argc; i++)
	{
	if (argv[i][0] == '-')
	    switch(argv[i][1])
	    	{
	    	case 'm':
	 	    if ((msize = atoi(&argv[i][2])) <= 0)
		        {
		        fprintf(stderr, "Bad file size spec.\n");
		        exit(1);
		        }
	 	    break;
		case 'b':
		    if ((bsize = atoi(&argv[i][2])) <= 0)
			{
			fprintf(stderr, "Bad block size spec.\n");
			exit(1);
			}
		    break;
		case 'i':
		    if ((iters = atoi(&argv[i][2])) <= 0)
			{
			fprintf(stderr, "Bad iteration count.\n");
			exit(1);
			}
		    break;
		case 'f':
		    strcpy(fname, &argv[i][2]);
		    break;
	    	default:
	 	    fprintf(stderr, "Usage: %s -b<block size> -f<filename> -i<iterations> -m<file size>\n", argv[0]);
	 	    exit(1);
	    	}
	}
    if (msize <= 0)
	{
	fprintf(stderr, "Usage: %s -b<block size> -f<filename> -i<iterations> -m<file size>\n", argv[0]);
	exit(1);
	}
    if (bsize <= 0)
	{
	fprintf(stderr, "Usage: %s -b<block size> -f<filename> -i<iterations> -m<file size>\n", argv[0]);
	exit(1);
	}
    if (bsize > msize)
	{
	fprintf(stderr, "%s: block size specified is greater than file size spec.\n", argv[0]);
	exit(1);
	}
    if ((fd = creat(fname, 0666)) < 0)
	{
	fprintf(stderr, "%s: Could not create.\n", fname);
	exit(1);
	}

    srand(time(0L));

    if ((buf = malloc(bsize+1)) == NULL)
	{
	fprintf(stderr, "Could not allocate %ld bytes of memory.\n", bsize+1);
	exit(1);
	}
    if ((mem = malloc(mempad)) == NULL)
	{
	fprintf(stderr, "Could not allocate %ld bytes of memory.\n", mempad);
	exit(1);
	}
    if ((str = malloc(bsize+1)) == NULL)
	{
	fprintf(stderr, "Could not allocate %ld bytes of memory.\n", bsize+1);
	exit(1);
	}

    nblocks = msize / bsize;
    sprintf(str, "%%0%dd", bsize > 32 ? 32 : bsize - 1);
    for (i = 0; i < nblocks; i++)
	{
	sprintf(buf, str, i);
	if (write(fd, buf, bsize) < 0)
	    {
	    fprintf(stderr, "%s: initial write failed.\n", argv[0]);
	    exit(1);
	    }
	}
    close(fd);
    if ((fd = open(fname, 0)) < 0)
	{
	fprintf(stderr, "%s: could not reopen %s.\n", argv[0], fname);
	exit(1);
	}

    for (; iters > 0; iters--)
	{
	i = (rand() * rand() * rand() * rand()) % nblocks;
	i = i >= 0 ? i : i * (-1);		/* ensure it's positive */
	mem[i % mempad] = 0377;			/* fiddle with some mem */
	if (lseek(fd, (i * bsize), 0) < 0)	/* seek to position */
	    {
	    fprintf(stderr, "%s: could not seek to block %ld.\n", argv[0], i);
	    exit(1);
	    }
	if (read(fd, buf, bsize) < 0)
	    {
	    fprintf(stderr, "%s: could not read block %ld.\n", argv[0], i);
	    exit(1);
	    }
	strncpy(str, buf, bsize);	/* move a string around */
	if (index(str, '0') == NULL)
	    strcpy(str, "0");
	value = strlen(buf);		/* look through memory  */
	value = atoi(buf);		/* convert saved number */
	if (value != i)
	    fprintf(stderr, "%s: block number mismatch.\n", argv[0]);
	}
    }
!FUNKYSTUFF!
echo "-x mkfile.c"
cat >mkfile.c <<!FUNKYSTUFF!
/*
 *	mkfile - create a text file of random integers
 *
 *	Usage:
 *		mkfile -f<filename> -s<file size>
 *
 *	Description:
 *		mkfile writes a text file of specified <file size> (no default)
 *		of random integers converted into their char representation
 *		into the filename specified (default bench.1).  Note that
 *		the actual file size may be a few characters larger than
 *		the exact size specified in order to include a complete
 *		last line.
 *
 *	Written:
 *		June,  1984
 *		Medical Systems Development Corporation
 *
 */
#include <stdio.h>

main(argc, argv)
int	argc;
char	*argv[];
    {
    long	i;
    long	fsize = 0;
    char	buf[513];
    char	filename[128];
    int		atoi();
    int		creat();
    int		ofd;
    long	value;

    strcpy(filename, "bench.1");

    for (i = 1; i < argc; i++)
	{
	if (argv[i][0] == '-')
	    switch(argv[i][1])
	    	{
	    	case 's':
	 	    if ((fsize = atoi(&argv[i][2])) <= 0)
		        {
		        fprintf(stderr, "Bad size spec.\n");
		        exit(1);
		        }
	 	    break;
		case 'f':
		    strcpy(filename, &argv[i][2]);
		    break;
	    	default:
	 	    fprintf(stderr, "Usage: %s -f<filename> -s<file size>\n", argv[0]);
	 	    exit(1);
	    	}
	}
    if (fsize == 0)
	{
	fprintf(stderr, "Usage: %s -f<filename> -s<file size>\n", argv[0]);
	exit(1);
	}
    if ((ofd = creat(filename, 0666)) < 0)
	{
	fprintf(stderr, "%s: Cannot open\n", filename);
	exit(1);
	}

    srand(time(0L));
    for (i = 0; i < fsize; )
	{
	value = (rand() * rand() * (rand() / 17)) % fsize;
	sprintf(buf, "%32d\n", (value < 0) ? value * (-1) : value );
	if (write(ofd, buf, strlen(buf)) < 0)
	    {
	    perror("Write failed");
	    exit(2);
	    }
	i += strlen(buf);
	}
    }
!FUNKYSTUFF!
echo "-x runbench"
cat >runbench <<!FUNKYSTUFF!
: "Shell file to run the benchmark and collect results"

OBJS="mkfile memcpu memdisk"
SRCS="mkfile.c memcpu.c memdisk.c"

if test -n "\`ls \$SRCS | grep 'not found'\`"; then
	echo "Cannot locate all required sources" >>results 2>>results
	exit 1
fi
rm -f \$OBJS

echo "" >>results
echo "Benchmark run as of \`date\`" >>results
echo "    Compiles:" >>results
make >>/dev/null 2>>/dev/null
echo "	mkfile:" >>results ; cat c.mkfile >>results 2>>results; rm -f c.mkfile
echo "	memcpu:" >>results ; cat c.memcpu >>results 2>>results; rm -f c.memcpu
echo "	memdisk:" >>results ; cat c.memdisk >>results 2>>results; rm -f c.memdisk

echo "    Building 1MB file:" >>results
time mkfile -s1000000 >>results 2>>results

echo "    Running 1 copy of memcpu:" >>results
time memcpu -b128 -i100000 -m300000 >>results 2>>results
echo "    Running 5 copies of memcpu:" >> results
for x in 1 2 3 4 5; do
	time memcpu -b128 -i100000 -m300000 >>bench.2\$x 2>>bench.2\$x &
done
wait
cat bench.2? >>results 2>>results
rm -f bench.2?

echo "    Running 1 copy of memdisk:" >>results
time memdisk -b10000 -i500 -m1000000 -ftmp.1 >>results 2>>results
echo "    Running 5 copies of memdisk:" >>results
for x in 1 2 3 4 5; do
	time memdisk -b10000 -i500 -m1000000 -ftmp.\$x >>bench.3\$x 2>>bench.3\$x &
done
wait
cat bench.3? >>results 2>>results
rm -f bench.3?

echo "    Running one copy each of memcpu and memdisk:" >>results
time memcpu -b128 -i100000 -m300000 >>bench.40  2>>bench.40 &
time memdisk -b10000 -i500 -m1000000 -ftmp.0 >>bench.50 2>>bench.50 &
wait
cat bench.40 bench.50 >>results 2>>results
rm -f tmp.0
rm -f bench.40 bench.50
echo "    Running 5 copies each of memcpu and memdisk:" >>results
for x in 1 2 3 4 5; do
	time memcpu -b128 -i100000 -m300000 >>bench.4\$x 2>>bench.4\$x &
	time memdisk -b10000 -i500 -m1000000 -ftmp.\$x >>bench.5\$x 2>>bench.5\$x &
done
wait
for x in 1 2 3 4 5; do
	echo "	pair \$x:" >>results
	cat bench.4\$x bench.5\$x >>results 2>>results
done
rm -f tmp.*
rm -f bench.4? bench.5?


echo "    Sorting the 1MB file:" >>results
time sort bench.1 -o bench.2 >>results 2>>results

rm -f bench.1 bench.2

echo "    Benchmark complete \`date\`" >>results
!FUNKYSTUFF!
echo "-x anal.750.4.1"
cat >anal.750.4.1 <<!FUNKYSTUFF!
Configuration is:

	#  VAX 11/750 running 4.1bsd
	#  4MB main memory
	#  2 RA81 disks

Benchmark run as of Mon Jun 18 19:01:15 EDT 1984
    Compiles:
	mkfile:
  17.0 real	   4.6 user	   3.6 sys
	memcpu:
  15.0 real	   6.7 user	   3.6 sys
	memdisk:
  27.0 real	  10.2 user	   3.7 sys
    Building 1MB file:
 158.0 real	  55.4 user	  75.5 sys
    Running 1 copy of memcpu:
 257.0 real	 208.4 user	  10.0 sys
    Running 5 copies of memcpu:
1156.0 real	 211.0 user	  14.9 sys
1146.0 real	 209.4 user	   7.8 sys
1116.0 real	 205.6 user	   6.3 sys
1140.0 real	 205.9 user	  12.7 sys
1104.0 real	 205.3 user	   3.9 sys
1132.4 real	 207.4 user	   9.1 sys	Average of above

    Running 1 copy of memdisk:
 133.0 real	  25.3 user	  26.7 sys
    Running 5 copies of memdisk:
 673.0 real	  27.1 user	  32.8 sys
 655.0 real	  26.1 user	  31.8 sys
 677.0 real	  27.1 user	  32.4 sys
 670.0 real	  26.8 user	  32.9 sys
 666.0 real	  26.4 user	  32.3 sys
 668.2 real	  26.7 user	  32.4 sys	Average of above

    Running one copy each of memcpu and memdisk:
 312.0 real	 211.2 user	  15.4 sys
 142.0 real	  24.8 user	  28.7 sys
 227.0 real	 118.0 user	  22.1 sys	Average of above

    Running 5 copies each of memcpu and memdisk:
	pair 1:
1534.0 real	 215.0 user	  20.0 sys
 706.0 real	  25.7 user	  34.4 sys
1120.0 real	 120.3 user	  27.2 sys	Average of above

	pair 2:
1523.0 real	 211.8 user	  14.9 sys
 703.0 real	  26.3 user	  32.3 sys
1113.0 real	 119.1 user	  23.6 sys	Average of above

	pair 3:
1493.0 real	 209.0 user	  13.0 sys
 700.0 real	  26.9 user	  32.7 sys
1096.5 real	 117.9 user	  22.9 sys	Average of above

	pair 4:
1512.0 real	 209.5 user	  16.1 sys
 702.0 real	  26.0 user	  32.9 sys
1107.0 real	 117.8 user	  24.5 sys	Average of above

	pair 5:
1517.0 real	 208.6 user	  18.4 sys
 699.0 real	  26.1 user	  33.6 sys
1108.0 real	 117.4 user	  26.0 sys	Average of above

    Sorting the 1MB file:
 455.0 real	 315.6 user	  67.7 sys
    Benchmark complete Mon Jun 18 20:20:55 EDT 1984
total elapsed   =  21608.0 average =    745.1
total user time =   3217.8 average =    111.0
total sys time  =    691.0 average =     23.8
!FUNKYSTUFF!
echo "-x anal.750.4.2"
cat >anal.750.4.2 <<!FUNKYSTUFF!
Configuration is:

	#  VAX 11/750 running 4.2bsd
	#  3MB main memory
	#  2 RA81 disks

Benchmark run as of Tue Oct 23 21:56:48 EDT 1984
    Compiles:
	mkfile:
  16.2 real	   5.0 user	   3.4 sys
	memcpu:
  15.1 real	   7.3 user	   2.9 sys
	memdisk:
  15.3 real	  10.5 user	   3.0 sys
    Building 1MB file:
 148.8 real	  52.8 user	  94.0 sys
    Running 1 copy of memcpu:
 210.7 real	 206.4 user	   2.4 sys
    Running 5 copies of memcpu:
1057.9 real	 204.6 user	   5.7 sys
1050.9 real	 204.1 user	   3.4 sys
1060.5 real	 205.8 user	   6.4 sys
1044.3 real	 203.3 user	   2.8 sys
1047.0 real	 203.4 user	   2.8 sys
1052.1 real	 204.2 user	   4.2 sys	Average of above

    Running 1 copy of memdisk:
  61.1 real	  24.1 user	  13.4 sys
    Running 5 copies of memdisk:
 262.8 real	  24.9 user	  17.6 sys
 268.1 real	  25.2 user	  17.6 sys
 277.6 real	  25.1 user	  17.5 sys
 271.8 real	  24.9 user	  17.4 sys
 272.9 real	  24.7 user	  16.9 sys
 270.6 real	  25.0 user	  17.4 sys	Average of above

    Running one copy each of memcpu and memdisk:
 253.0 real	 207.4 user	   5.2 sys
  92.2 real	  24.0 user	  14.1 sys
 172.6 real	 115.7 user	   9.7 sys	Average of above

    Running 5 copies each of memcpu and memdisk:
	pair 1:
1307.2 real	 208.4 user	   8.9 sys
 422.1 real	  25.1 user	  16.9 sys
 864.6 real	 116.8 user	  12.9 sys	Average of above

	pair 2:
1290.0 real	 205.4 user	   5.8 sys
 427.3 real	  25.0 user	  17.3 sys
 858.7 real	 115.2 user	  11.6 sys	Average of above

	pair 3:
1303.8 real	 206.3 user	   8.5 sys
 426.7 real	  24.7 user	  17.3 sys
 865.3 real	 115.5 user	  12.9 sys	Average of above

	pair 4:
1295.9 real	 205.7 user	   6.2 sys
 430.5 real	  25.1 user	  17.5 sys
 863.2 real	 115.4 user	  11.9 sys	Average of above

	pair 5:
1292.6 real	 205.6 user	   5.8 sys
 421.2 real	  24.8 user	  16.7 sys
 856.9 real	 115.2 user	  11.3 sys	Average of above

    Sorting the 1MB file:
 308.7 real	 281.0 user	  20.1 sys
    Benchmark complete Tue Oct 23 22:58:28 EDT 1984
total elapsed   =  16352.2 average =    563.9
total user time =   3120.6 average =    107.6
total sys time  =    387.5 average =     13.4
!FUNKYSTUFF!
echo "-x anal.780.4.1"
cat >anal.780.4.1 <<!FUNKYSTUFF!
Configuration is:

	#  VAX 11/780 w/FPA running 4.1bsd
	#  4MB main memory
	#  4 CDC 9766 Unibus disks (RM05-style)
	#  (System was not dedicated to benchmark)

Benchmark run as of Wed Jun 20 15:41:54 EDT 1984
    Compiles:
	mkfile:
  15.0 real	   2.8 user	   2.5 sys
	memcpu:
  19.0 real	   4.2 user	   2.2 sys
	memdisk:
  14.0 real	   6.0 user	   2.3 sys
    Building 1MB file:
 131.0 real	  30.1 user	  54.3 sys
    Running 1 copy of memcpu:
 123.0 real	 106.4 user	   1.5 sys
    Running 5 copies of memcpu:
 778.0 real	 104.7 user	   3.1 sys
 768.0 real	 104.8 user	   2.6 sys
 784.0 real	 107.8 user	   3.0 sys
 773.0 real	 105.6 user	   2.9 sys
 779.0 real	 105.1 user	   3.1 sys
 776.4 real	 105.6 user	   2.9 sys	Average of above

    Running 1 copy of memdisk:
 194.0 real	  16.1 user	  18.9 sys
    Running 5 copies of memdisk:
 804.0 real	  16.3 user	  20.8 sys
 811.0 real	  16.2 user	  21.8 sys
 794.0 real	  16.1 user	  20.9 sys
 797.0 real	  16.1 user	  19.9 sys
 805.0 real	  16.4 user	  20.5 sys
 802.2 real	  16.2 user	  20.8 sys	Average of above

    Running one copy each of memcpu and memdisk:
 168.0 real	 104.1 user	   8.2 sys
 110.0 real	  15.9 user	  19.4 sys
 139.0 real	  60.0 user	  13.8 sys	Average of above

    Running 5 copies each of memcpu and memdisk:
	pair 1:
1028.0 real	 106.6 user	   9.8 sys
 786.0 real	  15.8 user	  20.6 sys
 907.0 real	  61.2 user	  15.2 sys	Average of above

	pair 2:
1032.0 real	 106.9 user	  10.6 sys
 788.0 real	  16.3 user	  20.7 sys
 910.0 real	  61.6 user	  15.7 sys	Average of above

	pair 3:
1031.0 real	 106.0 user	  11.3 sys
 793.0 real	  16.0 user	  20.4 sys
 912.0 real	  61.0 user	  15.9 sys	Average of above

	pair 4:
1028.0 real	 105.7 user	  10.4 sys
 792.0 real	  16.2 user	  20.5 sys
 910.0 real	  61.0 user	  15.4 sys	Average of above

	pair 5:
1026.0 real	 106.0 user	   9.7 sys
 790.0 real	  16.1 user	  20.6 sys
 908.0 real	  61.0 user	  15.2 sys	Average of above

    Sorting the 1MB file:
 357.0 real	 179.9 user	  38.3 sys
    Benchmark complete Wed Jun 20 16:43:28 EDT 1984
total elapsed   =  18118.0 average =    624.8
total user time =   1686.2 average =     58.1
total sys time  =    420.8 average =     14.5
!FUNKYSTUFF!
echo "-x anal.785.ultrix"
cat >anal.785.ultrix <<!FUNKYSTUFF!
Configuration is:

	#  VAX 11/785 w/FPA running Ultrix Version 1.0
	#  16MB main memory (8 configured)
	#  1 RA81 disk

Benchmark run as of Mon Sep 24 15:18:06 EDT 1984
    Compiles:
	mkfile:
   5.4 real	   2.0 user	   1.2 sys
	memcpu:
   5.4 real	   2.8 user	   1.3 sys
	memdisk:
   7.4 real	   4.0 user	   1.5 sys
    Building 1MB file:
  60.7 real	  18.6 user	  38.9 sys
    Running 1 copy of memcpu:
  68.3 real	  67.3 user	   0.4 sys
    Running 5 copies of memcpu:
 340.7 real	  67.3 user	   0.3 sys
 337.6 real	  67.0 user	   0.4 sys
 341.8 real	  68.0 user	   0.4 sys
 339.6 real	  67.4 user	   0.4 sys
 342.0 real	  68.2 user	   0.4 sys
 340.3 real	  67.6 user	   0.4 sys	Average of above

    Running 1 copy of memdisk:
  27.9 real	   9.4 user	   6.4 sys
    Running 5 copies of memdisk:
 250.9 real	   9.5 user	   8.6 sys
 245.1 real	   9.4 user	   8.3 sys
 251.4 real	   9.6 user	   8.2 sys
 250.9 real	   9.7 user	   8.2 sys
 233.3 real	   9.5 user	   8.4 sys
 246.3 real	   9.5 user	   8.3 sys	Average of above

    Running one copy each of memcpu and memdisk:
  85.3 real	  67.7 user	   0.9 sys
  44.8 real	   9.1 user	   7.0 sys
  65.1 real	  38.4 user	   4.0 sys	Average of above

    Running 5 copies each of memcpu and memdisk:
	pair 1:
 444.9 real	  69.0 user	   1.4 sys
 226.3 real	   9.5 user	   8.7 sys
 335.6 real	  39.3 user	   5.0 sys	Average of above

	pair 2:
 441.2 real	  68.3 user	   1.2 sys
 253.4 real	   9.7 user	   8.3 sys
 347.3 real	  39.0 user	   4.8 sys	Average of above

	pair 3:
 443.6 real	  68.4 user	   1.4 sys
 223.6 real	   9.5 user	   8.8 sys
 333.6 real	  39.0 user	   5.1 sys	Average of above

	pair 4:
 438.2 real	  67.7 user	   1.6 sys
 236.6 real	   9.5 user	   8.6 sys
 337.4 real	  38.6 user	   5.1 sys	Average of above

	pair 5:
 442.3 real	  68.0 user	   1.6 sys
 250.1 real	   9.5 user	   8.5 sys
 346.2 real	  38.8 user	   5.1 sys	Average of above

    Sorting the 1MB file:
 119.3 real	 104.5 user	   8.1 sys
    Benchmark complete Mon Sep 24 15:42:00 EDT 1984
total elapsed   =   6758.0 average =    233.0
total user time =   1060.1 average =     36.6
total sys time  =    159.4 average =      5.5
!FUNKYSTUFF!
echo "-x anal.awk"
cat >anal.awk <<!FUNKYSTUFF!
{
if (NF != 6 || \$1 == "#")
	{
	if (bcela != 0 && bcusr != 0 && bcsys != 0)
		{
		if (bcela != 1)
			{
			printf("%6.1f real\t%6.1f user\t%6.1f sys\tAverage of above\n\n", bela / bcela, busr / bcusr, bsys / bcsys)
			}
		bela = 0;
		busr = 0;
		bsys = 0;
		bcela = 0;
		bcusr = 0;
		bcsys = 0;
		}
	print \$0
	next
	}
if (2 == split(\$1, mela, ":"))
	{
	printf("%6.1f real\t", (mela[1] * 60) + mela[2])
	tela += (mela[1] * 60) + mela[2]
	bela += (mela[1] * 60) + mela[2]
	cela += 1
	bcela += 1
	}
else
	{
	printf("%6.1f real\t", \$1)
	tela += \$1
	bela += \$1
	cela += 1
	bcela += 1
	}
if (\$2 != "real")
	print "Something is wrong with real time..." >>"anal.err"
if (2 == split(\$3, musr, ":"))
	{
	printf("%6.1f user\t", (musr[1] * 60) + musr[2])
	tusr += (musr[1] * 60) + musr[2]
	busr += (musr[1] * 60) + musr[2]
	cusr += 1
	bcusr += 1
	}
else
	{
	printf("%6.1f user\t", \$3)
	tusr += \$3
	busr += \$3
	cusr += 1
	bcusr += 1
	}
if (\$4 != "user")
	print "Something is wrong with user time..." >>"anal.err"
if (2 == split(\$5, msys, ":"))
	{
	printf("%6.1f sys\n", (msys[1] * 60) + msys[2])
	tsys += (msys[1] * 60) + msys[2]
	bsys += (msys[1] * 60) + msys[2]
	csys += 1
	bcsys += 1
	}
else
	{
	printf("%6.1f sys\n", \$5)
	tsys += \$5
	bsys += \$5
	csys += 1
	bcsys += 1
	}
if (\$6 != "sys")
	print "Something is wrong with sys time..." >>"anal.err"
}
END {
printf("total elapsed   = %8.1f average = %8.1f\n", tela, tela / cela)
printf("total user time = %8.1f average = %8.1f\n", tusr, tusr / cusr)
printf("total sys time  = %8.1f average = %8.1f\n", tsys, tsys / csys)
}
!FUNKYSTUFF!