dd
The dd command streams bits from one file or device to another. It also reports to stderr how many records it read and wrote, and how long the whole process took. This makes it ideal for monitoring the performance of a storage device. If a device or path is suspected to be occasionally slow, regularly running a script like this can capture the evidence at any time of day or night:
# dd if=/dev/sda1 of=/dev/null bs=1024k count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 16.8678 s, 63.7 MB/s
#
The syntax for dd is a little obscure; if= specifies the input file, of= specifies the output file. bs= specifies the block size to copy, and count= specifies the number of said blocks to copy. The device used will affect the performance dramatically. Extreme examples are /dev/zero (fastest to read from), /dev/null (fastest to write to), and /dev/urandom, which can be a very slow device to read from, as it has to wait for sufficient entropy in the system in order to generate the random data.
Cache in the storage controller can have a huge impact; if you are doing performance testing (especially under Linux), the Linux system cache can also be huge; echo 3 > /proc/sys/vm/drop_caches before each read to make sure that the cache is properly flushed.
$ cat checkpaths.sh #!/bin/sh DEV1=${1:-sday} DEV2=${2:-sdu} DEV3=${2:-sdcc} DEV4=${2:-sddg} EXPECTED=350 ...