man sg_rbuf (Administration système) - reads data using SCSI READ BUFFER command

NAME

sg_rbuf - reads data using SCSI READ BUFFER command

SYNOPSIS

sg_rbuf [-q] [-s=<num_MB>] [-b=<num_KB>] <sg_device>

DESCRIPTION

This command reads data with the SCSI READ BUFFER command via the sg driver and then discards it. Typically the data being read is from a disk's memory cache. It is assumed that the data is sourced quickly (although this is not guaranteed by the SCSI standards). This command is designed for timing transfer speeds across a SCSI bus.

-q
only transfer the data into kernel buffers (typically by DMA from the SCSI adapter card) and do not move it into the user space.
-s=<num_MB>
size of total transfer (in Megabytes == 1024^2). The default is 200 MB, the maximum is 4095 MB. The actual number of bytes transferred may be slightly less since all transfers are the same size (and an integer division is involved rounding towards zero).
-b=<num_KB>
size of each transfer (in Kilobytes == 1024). The default is the actual available buffer size returned by the READ BUFFER command. The maximum is the same as the default, hence this argument can only be used to reduce the size of each transfer to less than the device's actual available buffer size.

This command is typically used on modern SCSI disks which have a RAM cache on their drive electronics. If no IO to the magnetic media, or slower devices like flash RAM, is involved then the disk should be able to source data fast enough to saturate the bandwidth of the host machine. The bottleneck may then be the SCSI bus, the Linux drivers or the host machine's hardware (e.g. speed of RAM). Using time(1) in front of a sg_rbuf command is one way to do such measurements.

Note that maximum bandwidths given by SCSI standards (e.g. UW == 40 MB/sec) take "Mega" to mean 10^6 .

EXAMPLES

On the test system /dev/sg0 corresponds to a fast disk on a U2W SCSI bus (max 80 MB/sec). The disk specifications state that its cache is 4 MB.

$ time ./sg_rbuf /dev/sg0

READ BUFFER reports: buffer capacity=3434944,

offset boundary=6

Read 200 MBytes (actual 199 MB, 209531584 bytes),

buffer size=3354 KBytes

real 0m5.072s, user 0m0.000s, sys 0m2.280s

So that is approximately 40 MB/sec at 40 % utilization. Now with the addition of the "-q" option this throughput improves and the utilization drops to 0%.

$ time ./sg_rbuf -q /dev/sg0

READ BUFFER reports: buffer capacity=3434944,

offset boundary=6

Read 200 MBytes (actual 199 MB, 209531584 bytes),

buffer size=3354 KBytes

real 0m2.784s, user 0m0.000s, sys 0m0.000s

AUTHOR

Written by Doug Gilbert

REPORTING BUGS

Report bugs to <dgilbert@interlog.com>.

COPYRIGHT

Copyright © 2000 Douglas Gilbert

This software is distributed under the GPL version 2. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

SEE ALSO