diff options
author | Brian Feldman <green@FreeBSD.org> | 2005-10-26 18:40:43 +0000 |
---|---|---|
committer | Brian Feldman <green@FreeBSD.org> | 2005-10-26 18:40:43 +0000 |
commit | 33bf00180fe416a85d9f2062406cd83151b2cfaf (patch) | |
tree | 5d3204f2465fc2c25b4900ad7436ad41b0d8c15a | |
parent | 57f882017551861e614f19c17d0704f252aca30d (diff) | |
download | ports-33bf00180fe416a85d9f2062406cd83151b2cfaf.tar.gz ports-33bf00180fe416a85d9f2062406cd83151b2cfaf.zip |
Notes
-rw-r--r-- | benchmarks/rawio/Makefile | 2 | ||||
-rw-r--r-- | benchmarks/rawio/files/patch-ad | 234 |
2 files changed, 231 insertions, 5 deletions
diff --git a/benchmarks/rawio/Makefile b/benchmarks/rawio/Makefile index d6ab812f7c07..40458bde2aa9 100644 --- a/benchmarks/rawio/Makefile +++ b/benchmarks/rawio/Makefile @@ -8,7 +8,7 @@ PORTNAME= rawio PORTVERSION= 1.2 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= benchmarks MASTER_SITES= ftp://ftp.lemis.com/pub/ diff --git a/benchmarks/rawio/files/patch-ad b/benchmarks/rawio/files/patch-ad index fa92520200be..1e74abe18a87 100644 --- a/benchmarks/rawio/files/patch-ad +++ b/benchmarks/rawio/files/patch-ad @@ -1,6 +1,37 @@ ---- rawio.c.orig Sun Nov 26 19:28:19 2000 -+++ rawio.c Fri Jan 9 23:53:28 2004 -@@ -423,7 +423,7 @@ +--- rawio.c.orig Sun Nov 26 22:28:19 2000 ++++ rawio.c Wed Oct 26 14:07:30 2005 +@@ -58,6 +58,7 @@ + #endif + #ifdef BSD4_4 + #include <sys/disklabel.h> ++#include <sys/disk.h> + #endif + #include "randoms.h" + +@@ -99,6 +100,7 @@ + char *buf; /* and what we're using, for alignment */ + int file; + size_t length; ++u_int sectorsize; + + int count; + enum operation +@@ -331,13 +333,7 @@ + maxchunk = (size_t) atoi (arg); + if (maxchunk < (size_t) 512) + { +- if (maxchunk <= (size_t) 0) +- { +- fprintf (stderr, "I/O transfer max must be at least 1 sector\n"); +- usage (); +- } +- else +- maxchunk *= (size_t) 512; ++ maxchunk *= (size_t) 512; + } + if (maxchunk > (size_t) MAXPHYS) + { +@@ -423,7 +419,7 @@ printf ("No arg to n flag\n"); break; } @@ -9,7 +40,47 @@ break; case 'S': -@@ -580,7 +580,11 @@ +@@ -500,11 +496,6 @@ + buf = (char *) (((int) &physbuf [MAXPHYS]) & ~ (alignment - 1)); /* where to put the aligned buffer */ + if (op == 0) /* no ops specified, */ + op = RandomRead | SequentialRead; /* default to the read tests */ +- if (maxchunk & 0x1ff) +- { +- fprintf (stderr, "Invalid transfer size, must be multiple of 512: %d\n", maxchunk); +- usage (); +- } + if (device == NULL) + { + fprintf (stderr, "No file name specified\n"); +@@ -565,6 +556,27 @@ + fprintf (stderr, "No file size specified\n"); + usage (); + } ++#ifndef DIOCGSECTORSIZE ++ sectorsize = DEV_BSIZE; ++#else ++ if (ioctl (file, DIOCGSECTORSIZE, §orsize) == -1) /* failed to find native sector size */ ++ { ++ if (verbose) ++ fprintf (stderr, "Can't get sector size of %s: %s\n", device, strerror (errno)); ++ sectorsize = DEV_BSIZE; ++ } ++ ++#endif ++ if (maxchunk <= sectorsize) ++ { ++ fprintf (stderr, "I/O transfer max must be at least 1 sector\n"); ++ usage (); ++ } ++ if (maxchunk & (sectorsize - 1)) ++ { ++ fprintf (stderr, "Invalid transfer size, must be multiple of %d: %d\n", sectorsize, maxchunk); ++ usage (); ++ } + if (id == NULL) /* no ID specified, */ + { + id = strrchr (device, '/'); /* find the basename */ +@@ -580,7 +592,11 @@ childinfo = mmap (NULL, nproc * sizeof (struct childinfo), PROT_READ | PROT_WRITE, @@ -21,3 +92,158 @@ -1, (off_t) 0 ); #else +@@ -835,14 +851,6 @@ + childinfo [proc].writes = 0; + childinfo [proc].bytes_written = 0; + +- /* Get our own file handle */ +- close(file); /* need our own FD */ +- if ((file = open (device, openflags, 0)) < 0) +- { +- fprintf (stderr, "Child %d: Can't open %s: %s\n", proc, device, strerror (errno)); +- exit (1); +- } +- + /* Don't jump the gun */ + sigemptyset (&allsigs); + if (sigaction (SIGUSR1, &ignore, NULL) < 0) +@@ -863,20 +871,13 @@ + length = maxchunk; + else + length = (myrandom (proc + nproc * i * 2) +- % (maxchunk * 2) + 512) & ~0x1ff; /* length of this transfer */ +- offset = ((((off_t) (myrandom2 (proc + nproc * i)) * DEV_BSIZE) +- % (filesize - SKIPSTART - length)) & ~0x1ff) + SKIPSTART; +- if ((pos = lseek (file, offset, SEEK_SET)) != offset) +- fprintf (stderr, +- "Child %d can't seek to %" Quad "x (%" Quad "x): %s\n", +- proc, +- offset, +- pos, +- strerror (errno)); +- else if ((iocount = read (file, buf, length)) != length) ++ % (maxchunk * 2) + sectorsize) & ~(sectorsize - 1); /* length of this transfer */ ++ offset = ((((off_t) (myrandom2 (proc + nproc * i)) * sectorsize) ++ % (filesize - SKIPSTART - length)) & ~(sectorsize - 1)) + SKIPSTART; ++ if ((iocount = pread (file, buf, length, pos = offset)) != length) + { + int Errno = errno; +- pos = lseek (file, 0, SEEK_CUR); ++ pos = offset + (iocount > 0 ? iocount : 0); + + fprintf (stderr, + "offset %" Quad "d, filesize %" Quad "d\n", +@@ -915,9 +916,9 @@ + if (fixedoffset) + offset = SKIPSTART; /* start at the beginning */ + else /* random start */ +- offset = ((((off_t) (myrandom (proc + nproc)) * DEV_BSIZE) ++ offset = ((((off_t) (myrandom (proc + nproc)) * sectorsize) + % (filesize - SKIPSTART /* decide where to start */ +- - (maxrecs * length))) & ~0x1ff) + SKIPSTART; ++ - (maxrecs * length))) & ~(sectorsize - 1)) + SKIPSTART; + if ((offset + maxrecs * length) > filesize) /* XXX */ + { + printf ("Overrun: offset %" Quad "d, end %" Quad "d, file size %" Quad "d\n", +@@ -928,18 +929,12 @@ + } + if ((verbose > 2) && ! fixedoffset) + printf ("Child %d reading from %" Quad "d\n", proc, offset); +- if (lseek (file, offset, SEEK_SET) < 0) +- fprintf (stderr, +- "Child %d can't seek to %" Quad "x: %s\n", +- proc, +- offset, +- strerror (errno)); + for (i = 1; i <= maxrecs; i++) + { +- if ((iocount = read (file, buf, length)) != length) ++ if ((iocount = pread (file, buf, length, offset)) != length) + { + int Errno = errno; +- off_t pos = lseek (file, (off_t) 0, SEEK_CUR); ++ off_t pos = offset + (iocount > 0 ? iocount : 0); + + fprintf (stderr, + "offset %" Quad "d, filesize %" Quad "d\n", +@@ -976,30 +971,28 @@ + length = maxchunk; + else + length = (myrandom (proc + nproc * i * 2) +- % (maxchunk * 2) + 512) & ~0x1ff; /* length of this transfer */ +- offset = ((((off_t) (myrandom2 (proc + nproc * i)) * DEV_BSIZE) +- % (filesize - SKIPSTART - length)) & ~0x1ff) + SKIPSTART; +- if (lseek (file, offset, SEEK_SET) < 0) +- fprintf (stderr, "Child %d can't seek: %s", proc, strerror (errno)); +- else ++ % (maxchunk * 2) + sectorsize) & ~(sectorsize - 1); /* length of this transfer */ ++ offset = ((((off_t) (myrandom2 (proc + nproc * i)) * sectorsize) ++ % (filesize - SKIPSTART - length)) & ~(sectorsize - 1)) + SKIPSTART; ++ if (1) + { + if ((RWfrac == 100) + || ((myrandom (proc + nproc * i * 2 + 1) % 100) < RWfrac) ) + { +- iocount = write (file, buf, length); ++ iocount = pwrite (file, buf, length, offset); + childinfo [proc].writes++; + childinfo [proc].bytes_written += iocount; + } + else + { +- iocount = read (file, buf, length); ++ iocount = pread (file, buf, length, offset); + childinfo [proc].reads++; + childinfo [proc].bytes_read += iocount; + } + if (iocount != length) + { + int Errno = errno; +- off_t pos = lseek (file, (off_t) 0, SEEK_CUR); ++ off_t pos = offset + (iocount > 0 ? iocount : 0); + + fprintf (stderr, + "offset %" Quad "d, filesize %" Quad "d\n", offset, +@@ -1032,36 +1025,30 @@ + if (fixedoffset) + offset = SKIPSTART; /* start at the beginning */ + else /* random start */ +- offset = ((((off_t) (myrandom (proc + nproc)) * DEV_BSIZE) ++ offset = ((((off_t) (myrandom (proc + nproc)) * sectorsize) + % (filesize - SKIPSTART /* decide where to start */ +- - (maxrecs * length))) & ~0x1ff) + SKIPSTART; +- if (lseek (file, offset, SEEK_SET) < 0) +- fprintf (stderr, +- "Child %d can't seek to %" Quad "x: %s\n", +- proc, +- offset, +- strerror (errno)); +- else if ((verbose > 2) && ! fixedoffset) ++ - (maxrecs * length))) & ~(sectorsize - 1)) + SKIPSTART; ++ if ((verbose > 2) && ! fixedoffset) + printf ("Child %d writing to %" Quad "d\n", proc, offset); + for (i = 1; i <= maxrecs; i++) + { + if ((SWfrac == 100) + || ((myrandom (proc + nproc * i * 2 + 1) % 100) < SWfrac) ) + { +- iocount = write (file, buf, length); ++ iocount = pwrite (file, buf, length, offset); + childinfo [proc].writes++; + childinfo [proc].bytes_written += iocount; + } + else + { +- iocount = read (file, buf, length); ++ iocount = pread (file, buf, length, offset); + childinfo [proc].reads++; + childinfo [proc].bytes_read += iocount; + } + if (iocount != length) + { + int Errno = errno; +- off_t pos = lseek (file, (off_t) 0, SEEK_CUR); ++ off_t pos = offset + (iocount > 0 ? iocount : 0); + + fprintf (stderr, + "offset %" Quad "d, filesize %" Quad "d\n", |