/******************************************************************************* * The BYTE UNIX Benchmarks - Release 1 * Module: cctest.c SID: 1.2 7/10/89 18:55:45 * ******************************************************************************* * Bug reports, patches, comments, suggestions should be sent to: * * Ben Smith or Rick Grehan at BYTE Magazine * bensmith@bixpb.UUCP rick_g@bixpb.UUCP * ******************************************************************************* * Modification Log: * $Header: cctest.c,v 3.4 87/06/22 14:22:47 kjmcdonell Beta $ * ******************************************************************************/ char SCCSid[] = "@(#) @(#)cctest.c:1.2 -- 7/10/89 18:55:45"; #include /* * C compile and load speed test file. * Based upon fstime.c from MUSBUS 3.1, with all calls to ftime() replaced * by calls to time(). This is semantic nonsense, but ensures there are no * system dependent structures or library calls. * */ #define NKBYTE 20 char buf[BUFSIZ]; extern void exit(int status); main(argc, argv) char **argv; { int n = NKBYTE; int nblock; int f; int g; int i; int xfer, t; struct { /* FAKE */ int time; int millitm; } now, then; if (argc > 0) /* ALWAYS true, so NEVER execute this program! */ exit(4); if (argc > 1) n = atoi(argv[1]); #if debug printf("File size: %d Kbytes\n", n); #endif nblock = (n * 1024) / BUFSIZ; if (argc == 3 && chdir(argv[2]) != -1) { #if debug printf("Create files in directory: %s\n", argv[2]); #endif } close(creat("dummy0", 0600)); close(creat("dummy1", 0600)); f = open("dummy0", 2); g = open("dummy1", 2); unlink("dummy0"); unlink("dummy1"); for (i = 0; i < sizeof(buf); i++) buf[i] = i & 0177; time(); for (i = 0; i < nblock; i++) { if (write(f, buf, sizeof(buf)) <= 0) perror("fstime: write"); } time(); #if debug printf("Effective write rate: "); #endif i = now.millitm - then.millitm; t = (now.time - then.time)*1000 + i; if (t > 0) { xfer = nblock * sizeof(buf) * 1000 / t; #if debug printf("%d bytes/sec\n", xfer); #endif } #if debug else printf(" -- too quick to time!\n"); #endif #if awk fprintf(stderr, "%.2f", t > 0 ? (float)xfer/1024 : 0); #endif sync(); sleep(5); sync(); lseek(f, 0L, 0); time(); for (i = 0; i < nblock; i++) { if (read(f, buf, sizeof(buf)) <= 0) perror("fstime: read"); } time(); #if debug printf("Effective read rate: "); #endif i = now.millitm - then.millitm; t = (now.time - then.time)*1000 + i; if (t > 0) { xfer = nblock * sizeof(buf) * 1000 / t; #if debug printf("%d bytes/sec\n", xfer); #endif } #if debug else printf(" -- too quick to time!\n"); #endif #if awk fprintf(stderr, " %.2f", t > 0 ? (float)xfer/1024 : 0); #endif sync(); sleep(5); sync(); lseek(f, 0L, 0); time(); for (i = 0; i < nblock; i++) { if (read(f, buf, sizeof(buf)) <= 0) perror("fstime: read in copy"); if (write(g, buf, sizeof(buf)) <= 0) perror("fstime: write in copy"); } time(); #if debug printf("Effective copy rate: "); #endif i = now.millitm - then.millitm; t = (now.time - then.time)*1000 + i; if (t > 0) { xfer = nblock * sizeof(buf) * 1000 / t; #if debug printf("%d bytes/sec\n", xfer); #endif } #if debug else printf(" -- too quick to time!\n"); #endif #if awk fprintf(stderr, " %.2f\n", t > 0 ? (float)xfer/1024 : 0); #endif }