You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

235 lines
7.4 KiB

Index: Bonnie.c
--- Bonnie.c.orig 1996-08-28 18:23:49 +0200
+++ Bonnie.c 2004-08-22 11:45:20 +0200
@@ -179,7 +179,7 @@
if (bufindex == Chunk / IntSize)
bufindex = 0;
buf[bufindex++]++;
- if (lseek(fd, (off_t) -words, 1) == -1)
+ if (lseek(fd, -words, 1) == -1)
io_error("relative lseek(2)");
if (write(fd, (char *) buf, words) == -1)
io_error("re write(2)");
@@ -288,6 +288,7 @@
{ /* child process */
/* set up and wait for the go-ahead */
+ close(0);
close(seek_feedback[0]);
close(seek_control[1]);
newfile(name, &fd, &stream, 0);
@@ -303,7 +304,12 @@
/* loop until we read a 0 ticket back from our parent */
while(seek_tickets[0])
{ /* until Mom says stop */
- doseek((long) (random() % (size / Chunk)), fd,
+ off_t seekto;
+ if (size < ((off_t)1 << 32))
+ seekto = random() % (size / Chunk);
+ else
+ seekto = ((off_t)random() << 32 + random()) % (size / Chunk);
+ doseek(seekto, fd,
((lseek_count++ % UpdateSeek) == 0));
if (read(seek_control[0], seek_tickets, 1) != 1)
io_error("read ticket");
@@ -413,7 +419,7 @@
printf("K/sec %%CPU K/sec %%CPU K/sec %%CPU K/sec %%CPU K/sec ");
printf("%%CPU /sec %%CPU\n");
- printf("%-8.8s %4d ", machine, size / (1024 * 1024));
+ printf("%-8.8s %4ld ", machine, (long)(size / (1024 * 1024)));
printf("%5d %4.1f %5d %4.1f %5d %4.1f ",
(int) (((double) size) / (delta[(int) Putc][Elapsed] * 1024.0)),
delta[(int) Putc][CPU] / delta[(int) Putc][Elapsed] * 100.0,
@@ -458,7 +464,7 @@
usage()
{
fprintf(stderr,
- "usage: Bonnie [-d scratch-dir] [-s size-in-Mb] [-html] [-m machine-label]\n");
+ "usage: bonnie [-d scratch-dir] [-s size-in-Mb] [-html] [-m machine-label]\n");
exit(1);
}
@@ -529,7 +535,7 @@
{
char buf[Chunk];
- sprintf(buf, "Bonnie: drastic I/O error (%s)", message);
+ sprintf(buf, "\nBonnie: drastic I/O error (%s)", message);
perror(buf);
exit(1);
}
@@ -568,7 +574,7 @@
/* touch a word */
buf[((int) random() % (size/IntSize - 2)) + 1]--;
- if (lseek(fd, (long) probe, 0) != probe)
+ if (lseek(fd, probe, 0) != probe)
io_error("lseek in doseek update");
if (write(fd, (char *) buf, size) == -1)
io_error("write in doseek");
Index: bonnie.1
--- bonnie.1.orig 1996-08-29 03:42:42 +0200
+++ bonnie.1 2004-08-22 11:43:30 +0200
@@ -1,92 +1,69 @@
-.\"-------
-.\" Man page portability notes
-.\"
-.\" These are some notes on conventions to maintain for greatest
-.\" portability of this man page to various other versions of
-.\" nroff.
-.\"
-.\" When you want a \ to appear in the output, use \e in the man page.
-.\" (NOTE this comes up in the rc grammar, where to print out '\n' the
-.\" man page must contain '\en'.)
-.\"
-.\" Evidently not all versions of nroff allow the omission of the
-.\" terminal " on a macro argument. Thus what could be written
-.\"
-.\" .Cr "exec >[2] err.out
-.\"
-.\" in true nroffs must be written
-.\"
-.\" .Cr "exec >[2] err.out"
-.\"
-.\" instead.
-.\"
-.\" Use symbolic font names (e.g. R, I, B) instead of the standard
-.\" font positions 1, 2, 3. Note that for Xf to work the standard
-.\" font names must be single characters.
-.\"
-.\" Note that sentences should end at the end of a line. nroff and
-.\" troff will supply the correct intersentence spacing, but only if
-.\" the sentences end at the end of a line. Explicit spaces, if given,
-.\" are apparently honored and the normal intersentence spacing is
-.\" supressed.
-.\"
-.\" DaviD W. Sanderson
-.\"-------
-.\" Dd distance to space vertically before a "display"
-.\" These are what n/troff use for interparagraph distance
-.\"-------
-.if t .nr Dd .4v
-.if n .nr Dd 1v
-.\"-------
-.\" Sp space down the interparagraph distance
-.\"-------
-.de Sp
-.sp \\n(Ddu
-..
-.\"-------
-.\" Ds begin a display, indented .5 inches from the surrounding text.
-.\"
-.\" Note that uses of Ds and De may NOT be nested.
-.\"-------
-.de Ds
-.Sp
-.in +0.5i
-.nf
-..
-.\"-------
-.\" De end a display (no trailing vertical spacing)
-.\"-------
-.de De
-.fi
-.in
-..
-.TH Bonnie 1 "2.0.6" Textuality
-.SH NAME
-Bonnie - File system benchmark
-.SH "SYNOPSIS"
-.B Bonnie
-.RI "[-d\ scratch-dir]"
-.RI "[-html]"
-.RI "[-m\ machine-label]"
-.RI "[-s\ size-in-Mb]"
-.SH "OPTIONS"
-.PP
- -d scratch-dir : Write scratch file in named directory (default: ".")
- -html : Generate HTML output
- -m machine-label : use <machine-label> to label report
- -s size-in-Mb : how many Mb to use for testing (default: 100)
-.\"-------
-.SH "DESCRIPTION"
-.\"-------
-.I Bonnie
-measures the performance of UNIX filesystem operations.
-For details, see http://www.textuality.com/bonnie/
-.\"-------
-.SH "AUTHOR"
-.\"-------
-.I Bonnie
-was written by Tim Bray,
-(tbray@textuality.com),
-.I Bonnie
-is copyrighted 1990-1996 by Tim Bray.
-For details, see http://www.textuality.com/bonnie/copyright.html
+.\" $FreeBSD: ports/benchmarks/bonnie/files/bonnie.1,v 1.1 2002/08/27 15:53:51 obrien Exp $
+.\" The following requests are required for all man pages.
+.Dd May 18, 1995
+.Os UNIX
+.Dt BONNIE 1
+.Sh NAME
+.Nm bonnie
+.Nd Performance Test of Filesystem I/O
+.Sh SYNOPSIS
+.Nm bonnie
+.Op Fl d Ar scratch-dir
+.Op Fl s Ar size-in-MB
+.Op Fl m Ar machine-label
+
+.Sh DESCRIPTION
+.Nm Bonnie
+tests the speed of file I/O from standard C library calls.
+It reads and writes 8KB blocks to find the maximum sustained
+data rate (usually limited by the drive or controller) and additionally
+rewrites the file (better simulating normal operating conditions and
+quite dependent on drive and OS optimisations).
+
+The per character read and write tests are generally limited by CPU speed
+only on current generation hardware. It takes some 35 SPECint92 to read
+or write a file at a rate of 1MB/s using getc() and putc().
+
+The seek test results depend on the buffer cache size, since the fraction
+of disk blocks that fits into the buffer cache will be found without any
+disk operation and will contribute zero seek time samples.
+(See
+.Sx BUGS
+below.)
+
+.Sh OPTIONS
+.Bl -tag -width indent
+.It Fl d Ar scratch-dir
+Specify the directory where the test file gets written. The default
+is the current directory. Make sure there is sufficient free space
+available on the partition this directory resides in.
+.It Fl s Ar size-in-MB
+Specify the size of the test file in MByte. This much space must be
+available for the tests to complete.
+.It Fl m Ar machine-label
+Specify a label to be written in the first column of the result table.
+.El
+
+.Sh SEE ALSO
+.Xr iozone 1 ,
+.Xr iostat 8
+
+.Sh AUTHOR
+.Nm Bonnie
+was written by Tim Bray <tbray@watsol.waterloo.edu>.
+
+.Sh BUGS
+.Nm Bonnie
+tries hard to measure disk performance and not the quality of the
+buffer cache implementation. In merged buffer caches common today,
+the buffer cache size is often only limited by total RAM on an otherwise
+unloaded system. Be sure to use a file at least twice at large as
+available RAM to protect against artificially high results.
+
+There is no way to keep the buffer cache from increasing the reported
+seek rate. This is because the fraction of accesses corresponding to the
+amount of the file cached, will be done without seeks.
+If your buffer cache is half the size of the file used, then half the
+requests will be satisfied immediately, and and the seek rate printed
+will be twice the actual value.
+