An I/O performance measurement and load generation tool |
|||||||||||||||
|
|
|||||||||||||||
|
Description Spew is used to measure I/O performance of character devices, block devices, and regular files. It can also be used to generate high I/O loads to stress systems while verifying data integrity. Spew is easy to use and is flexible. No configuration
files or complicated client/server configurations are
needed. Spew also generates its own data patterns that
are designed to make it easy to find and debug data
integrity problems.
-- Andrew Patterson
|
|||||||||||||||
|
Features
|
|||||||||||||||
|
News
|
|||||||||||||||
|
Download
|
|||||||||||||||
|
Source archive Source for the spew project is stored in a subversion repository. The project can be checked out using the following command: For Read-only access:
svn checkout svn://svn.berlios.de/svnroot/repos/spew
For Read-Write access (project members):
svn checkout svn+ssh://svn.berlios.de/svnroot/repos/spew
Or, if you just want to browse the code, try the following links:
|
|||||||||||||||
|
Screenshots
|
|||||||||||||||
|
Documentation NAMEspew - measures I/O performance and/or generates I/O loadSYNOPSISspew --write|--read|--read-after-write [OPTION]... TRANSFER_SIZE[kKmMgG] FILEDESCRIPTIONAn I/O performance measurement and load generation tool. Writes and/or reads generated data to or from a character device, block device, or regular file.
EXAMPLESspew --write -b 16k 1m /tmp/bigfileor spew -b 16k 1m /tmp/bigfile Writes 1 mebibyte (1 mebibyte = 1024*1024 bytes) using 16 kibibytes (1 kibibyte = 1024 bytes) requests to the file /tmp/bigfile using the default pattern (random). Displays the write transfer rate in kibibytes per second and the write transfer time in seconds. spew --write -u m -i 10 -b 1k 256k /dev/sda1 or spew -u m -i 10 -b 1k 256k /dev/sda1 Writes 256 kibibytes using 1 kibibyte requests to the block device file /dev/sda1 10 times using the default pattern (random). The iteration and cumulative write transfer rates are displayed in mebibytes per second and the iteration and cumulative write transfer times are displayed in seconds. spew --raw -d -o 1m -b 16m 1g /tmp/bigfile or regorge -s -o 1m -b 16m 1g /tmp/bigfile Write 1 gibibyte (1 gibibyte = 1024*1024*1024 bytes) starting at an offset of 1 mebibyte using 16 mebibyte requests to the file /tmp/bigfile using the default pattern (random). The data is written synchronously and flushed at file close. Then read in the same data using the same request size and offset. The data is checked to ensure that the data read in matches the data read out. Write and read tranfers rates are displayed in kibibytes/second. Read are write transfer times are displayed in seconds. spew --read -i 0 -u M -p zeros -b 512 1m /dev/zero or gorge -i 0 -u M -p zeros -b 512 1m /dev/zero Read 1 mebibyte of data using 512 byte requests from the file /dev/zero an infinite number of times using the zeros pattern (don't check the data). The iteration and cumulative read transfer rates are displayed in megabytes (1 megabyte = 1,000,000 bytes) per second and the iteration and cumulative read transfer times are displayed in seconds. spew --raw -g -r -b 1k -B 256K 1t /dev/md1 or regorge -g -r -b 1k -B 256K 1t /dev/md1 Write 1 tebibyte (1 tebibyte = 1024*1024*1024*1024 bytes) using 1-256 kibibyte requests to the block device /dev/md1 using the random pattern. Random seeks are performed before each transfer, but each block between the start and end of the data is written exactly once. The request sizes are chosen randomly. Then read in the same data using the same request sizes and seeks in the same sequence. Repeat the above sequence an infinite number of times until told to quit (via signal or TUI command). The data is checked to ensure that the data read in matches the data read out. A curses-based TUI is used to diplay iteration and cumulative transfer rates, transfer times, and bytes transferred. Display verbose statistics after quitting. ALGORITHMSThe folllowing algorithm is used to determine blocksize when MAX_BUFFER_SIZE > MIN_BUFFER_SIZE:Find the largest blocksize that is a power of 2 and is >= MAX_BUFFER_SIZE. Call this maxbuffersize. Find the smallest buffersize that is a power of 2 and is >= MIN_BUFFER_SIZE. Call this minbuffersize. Chunksize = maxbuffersize * (difference in number of bits between min and maxbuffersize + 1). The number of chunks is TRANFSER_SIZE/chunksize. Call this numchunks. There will be numchunks number of read/writes that are of size maxbuffersize, 2 * numchunks number of read/writes that are of size maxbuffersize/2, 4 * numchunks number of read/writes that are of size maxbuffersize/4, and so on until minbuffersize is reached. MIN_BUFFER_SIZE is used for any remaining transfers if TRANSFER_SIZE is not evenly divisible by chunksize. Example: Using a MIN_BLOCK_SIZE of 1k, a MAX_BLOCK_SIZE of 8k and a TRANSFER_SIZE of 264k results in 8 8k read/writes, 16 4k read/write, 32 2k read/writes, and 64 + 8 1k read/writes. PATTERNSUse the following od(1) command to examine spew generated files where a data integrity problem has occurred:od -A d --format=d8 --width=32 <file> FILES
| |||||||||||||||
|
License Copyright (C) 2004 Hewlett-Packard Corp. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
|||||||||||||||
|
Mailing lists There are three mailing lists for the Spew project: spew-changes, spew-announce, and spew-devel.
| |||||||||||||||
|
Forums For more interactive discussion, you can try the Spew forums.
| |||||||||||||||
|
Bugs Found a bug in Spew? Report it at bugs. Please check to see if the bug has already been reported before submitting a new one. |
|||||||||||||||
|
Feature requests Want a new feature added to Spew? Submit a feature request at feature requests. Please check to see if the feature has already been submitted before placing a new one. |
|||||||||||||||