SPEW The spew package is used to test I/O performance and to generate load on character devices, block devices, and file systems. It is similar to the lmdd program found in the lmbench test-suite (http://www.bitmover.com/lmbench). It is a bit easier to use than lmdd and has some added functionality. For example, it can test both random and sequential I/O. There is a web-page for the spew project. It can be found at: http://spew.berlios.de The spew package includes 3 programs: spew, gorge, and regorge. Gorge and regorge are actually just links to the spew executable. spew: The spew program creates an output stream and writes it to a file or device. Various patterns can be used to test data integrity. No system calls are used to generate the output data, so there is very little overhead created by the spew program itself. The spew program can generate both cumulative and semi-instantaneous transfer-rate statistics. Here is an example of spew being used to test the sequential transfer rate to a file system: $ spew --pattern=random --min-buffer-size=64k 1g /tmp/bigfile Write transfer rate: 46677.47 KiB/s Transfer time: 00:00:22 You can use the --progress option to display a "progress-meter" that also shows intermediate transfer rates: $ spew --progress --pattern=numbers --min-buffer-size=64k 1g /tmp/big file w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 6% 67455.44 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 12% 66028.24 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 19% 65537.31 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 25% 65576.72 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 31% 64064.94 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 38% 64511.87 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 44% 64721.35 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 50% 64315.61 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 56% 62824.13 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 62% 31459.13 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 69% 61698.42 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 75% 62481.59 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 81% 63303.35 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 88% 63340.19 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 94% 9244.02 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 100% 52467.96 KiB/s Write transfer rate: 44277.80 KiB/s Transfer time: 00:00:23 gorge: The gorge program is similar to spew except that it reads data rather than writes it. Gorge is generally used to read data generated by spew, but this is only needed for data integrity testing. Here is an example of gorge being used to test the sequential transfer rate from a file system: $ gorge --pattern=numbers --min-buffer-size=64k 1g /tmp/bigfile Read transfer rate: 57793.09 KiB/s Transfer time: 00:00:18 Like spew, you can also use the --progress option with gorge: $ gorge --progress --pattern=numbers --min-buffer-size=64k 1g /tmp/bigfile r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 6% 12410.84 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 12% 18828.70 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 19% 45099.61 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 25% 47520.40 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 31% 48074.34 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 38% 51332.70 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 44% 50236.13 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 50% 50963.74 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 56% 19302.02 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 62% 50757.10 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 69% 46999.70 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 75% 51887.14 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 81% 20509.24 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 88% 118888.97 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 94% 198531.37 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 100% 199081.99 KiB/s Read transfer rate: 36694.72 KiB/s Transfer time: 00:00:28 regorge: The regorge program just does a spew followed by a gorge. Data integrity is checked during the gorge phase. $ regorge --pattern=numbers --min-buffer-size=64k 1g /tmp/bigfile Write transfer rate: 72985.71 KiB/s Transfer time: 00:00:14 Read transfer rate: 43234.09 KiB/s Transfer time: 00:00:24 Like spew and gorge, you can also use the --progress option with regorge: $ regorge --progress --pattern=numbers --min-buffer-size=64k 1g /tmp/bigfile w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 6% 198344.51 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 12% 180722.66 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 19% 180448.48 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 25% 180828.37 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 31% 175934.15 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 38% 176317.55 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 44% 176369.75 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 50% 175558.53 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 56% 175559.94 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 62% 33211.64 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 69% 18744.87 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 75% 171271.02 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 81% 14932.66 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 88% 169616.72 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 94% 170134.11 KiB/s w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w-w 100% 171290.72 KiB/s Write transfer rate: 71438.31 KiB/s Transfer time: 00:00:14 r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 6% 5650.53 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 12% 42761.38 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 19% 51937.35 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 25% 46905.78 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 31% 50760.52 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 38% 46721.39 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 44% 52162.35 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 50% 38172.26 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 56% 41188.34 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 62% 47083.10 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 69% 51387.36 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 75% 48277.87 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 81% 48538.21 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 88% 123075.07 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 94% 179621.55 KiB/s r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r-r 100% 176579.31 KiB/s Read transfer rate: 35313.10 KiB/s Transfer time: 00:00:29 Spew, gorge, and regorge have lots of different options. Consult the man-page for more information. PORTS The spew package has currently been ported to ia32 Linux, ia64 Linux, parisc64 Linux, HP-UX, and MS Windows.