SG_READSection: SG3_UTILS (8)Updated: February 2002 |
SG_READSection: SG3_UTILS (8)Updated: February 2002 |
Read data from a Linux SCSI generic (sg) device, a raw devices or a normal file with each read command issued to the same offset. This will test (or time) disk caching and/or SCSI (or some other) bus throughput.
The input file must be either a sg device, a raw device or a normal file. A raw device must be bound to a block device prior to using sg_raw. See raw(8) for more information about binding raw devices.
BYTES and BLOCKS may be followed by the following multiplicative suffixes: c C *1; b B *512; k *1,024; K *1,000; m *1,048,576; M *1,000,000; g *1,073,741,824; and G *1,000,000,000
Data usually gets to the user space in a 2 stage process: first the SCSI adapter DMAs into kernel buffers and then the sg driver copies this data into user memory. This is called "indirect IO" and there is a "dio" option to select "direct IO" which will DMA directly into user memory. Due to some issues "direct IO" is disabled in the sg driver and needs a configuration change to activate it. This is typically done with "echo 1 > /proc/scsi/sg/allow_dio". An alternate way to avoid the 2 stage copy is to select memory mapped IO.
Let us assume that /dev/sg0 is a disk and we wish to time the disk's cache performance.
sg_read if=/dev/sg0 bs=512 count=1M mmap=1 time=2
This command will continually read 128 512 byte blocks from block 0. The "128" is the default value for "bpt" while "block 0" is chosen because the "skip" argument was not given. This will continue until 1,000,000 blocks are read. The idea behind using "time=2" is that the first 64 KB read operation will involve reading the magnetic media while the remaining read operations will "hit" the disk's cache. The output of thid command will look like this:
time from second command to end was 8.51 secs, 60.19 MB/sec
1000000+0 records in, SCSI commands issued: 7813