Provided by: spew_1.0.8-1build1_amd64 bug

NAME

       spew - measures I/O performance and/or generates I/O load

SYNOPSIS

       spew --write|--read|--read-after-write [OPTION]... TRANSFER_SIZE[kKmMgG] FILE

DESCRIPTION

       An  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.

       -B, --max-buffer-size=BUFFER_SIZE
              Each read(2)/write(2) call uses a maximum buffer of size BUFFER_SIZE.

       -b, --min-buffer-size=BUFFER_SIZE
              Each read(2)/write(2) call uses a minimum buffer of size BUFFER_SIZE.

       -c, --continue-after-error
              Continue after data integrity errors.

       -d, --direct
              Use direct I/O. Should only be used on block device  files.  Not  all  operating  systems  support
              direct I/O

       -g, --generate-load
              Equivalent to: -v -t -P -p random -i 0.

       -i, --iterations=COUNT
              Write/read data COUNT times. If count is 0, repeats forever.

       -l, --logfile=LOGFILE
              Send log messages to LOGFILE.

       --no-progress
              Don't show progress (default).

       --no-rcfiles
              Don't use standard rcfiles.

       -q, --no-statistics
              Don't output statistics.

       --no-tui
              Don't use TUI interface.

       -o, --offset=OFFSET
              Seek to OFFSET before starting I/O.

       -P, --progress
              Show progress.

       -p, --pattern=PATTERN
              Use data pattern PATTERN when reading or writing data.

       -r, --random
              Read/Write buffers to random offsets.

       --raw  An alias for --read-after-write.

       --rcfile=RCFILE
              Read command-line options from RCFILE.

       --read Read date from FILE.

       --read-after-write
              Read back data after writing to FILE.

       -S, --seed=SEED
              Use SEED for random number seed.

       -s, --sync
              Use synchronous I/O.

       --statistics
              Output statistics (default).

       -t, --tui
              Use curses-based, terminal user interface.

       -u, --units=UNITS
              Show transfer rate in UNITS units.

       --usage
              Show brief usage message and exit.

       -V, --version
              Output version information and exit.

       -v, --detailed-statistics
              Output detailed statistics.

       --write
              Write data to FILE.

       -?, --help
              Show this help and exit.

       FILE   Regular or device file to write data to.

       LOGFILE
              Path to a file used for logging.

       MAX_BUFFER_SIZE
              Minimum  buffer  size  used  in  each  read(2)/write(2)  call  (default is MIN_BUFFER_SIZE bytes).
              MAX_BUFFER_SIZE. Must  be  an  even  multiple  of  512  bytes  and  can  be  specified  in  bytes,
              kibibytes(k), kilobytes(K), mebibytes(m), megabytes(M), gibibytes(g), gigabytes(G).  tebibytes(t),
              or  terabytes(T).   MAX_BUFFER_SIZE   defaults   to   MIN_BUFFER_SIZE.    If   MAX_BUFFER_SIZE   >
              MIN_BUFFER_SIZE, random buffers sizes between the two limits are used.  MAX_BUFFER_SIZE must be an
              even multiple of MIN_BUFFER_SIZE.

       MIN_BUFFER_SIZE
              Minimum buffer size used in each read(2)/write(2) call (default is 512  bytes).   MIN_BUFFER_SIZE.
              Must  be  an even multiple of 512 bytes and can be specified in bytes, kibibytes(k), kilobytes(K),
              mebibytes(m), megabytes(M), gibibytes(g), gigabytes(G).  tebibytes(t), or terabytes(T).

       OFFSET Position to seek to in the file before starting I/O  (default  is  0).  OFFSET  must  be  an  even
              multiple  of  512  bytes  and can be specified in bytes, kibibytes(k), kilobytes(K), mebibytes(m),
              megabytes(M), gibibytes(g), gigabytes(G).  tebibytes(t), or terabytes(T).

       PATTERN
              Data pattern used when writing/reading data. Available  patterns  are:  none,  zeros,  ones,  alt,
              random, numbers, and "#" (where "#" is a number between 0-255). The default pattern is "none".

       RCFILE Read additional command-line options from RCFILE.  Other options on the command-line will override
              options in RCFILE.

       SEED   Used to seed the random number generator Must be >= 1 and <= 2^32.

       TRANSFER_SIZE
              Total number of bytes  to  transfer  (must  be  an  even  multiple  of  both  MIN_BUFFER_SIZE  and
              MAX_BUFFER)SIZE).  TRANSFER_SIZE can be specified in bytes, kilobytes, megabytes, or gigabytes.

       UNITS  Kibibytes(k), kilobytes(K), mebibytes(m), megabytes(M), gibibytes(g), gigabytes(G).  tebibytes(t),
              or terabytes(T).

EXAMPLES

       spew --write -b 16k 1m /tmp/bigfile

       or

       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
       transfer rates are displayed in kibibytes/second.   Read  and  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 display iteration and cumulative transfer rates, transfer times, and bytes transferred.  Display
       verbose statistics after quitting.

ALGORITHMS

       The following 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 TRANSFER_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.

PATTERNS

       Use 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

       $HOME/.spewrc or $SPEWRC
              Holds user default options. These options precede any options included on the command-line.

       /etc/spew.conf
              Holds system-wide default options.  These options precede any options included on the command-line
              and options included from $HOME/.spewrc or $SPEWRC.

AUTHOR

       Written by Andrew Patterson <andrew.patterson@hp.com>

REPORTING BUGS

       Report bugs to Andrew Patterson <andrew.patterson@hp.com>.

       Copyright 2007 Hewlett-Packard Corp.