/
githubmirror
/
sg3_utils
Обзор
Документация
Войти
/
githubmirror
/
sg3_utils
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
release-1.13
sg_read.8
135 строк
5 KB
Douglas Gilbert
Load sg3_utils-1.13 into trunk/.
27 июн 2007, 07:06
27 июн 2007, 07:06
e459cae
Код
Авторство
О чём код?
.TH SG_READ "8" "March 2005" "sg3_utils-1.13" SG3_UTILS .SH NAME sg_read \- read blocks of data continually from same offset .SH SYNOPSIS .B sg_dd [\fIblk_sgio=0|1\fR] [\fIbpt=<n>\fR] [\fIbs=<n>\fR] [\fIcdbsz=6|10|12|16\fR] \fIcount=<n>\fR [\fIdio=0|1\fR] [\fIif=<ifile>\fR] [\fIodir=0|1\fR] [\fIskip=<n>\fR] [\fItime=<n>\fR] [\fI--version\fR] .SH DESCRIPTION .\" Add any additional description here .PP Read data from a Linux SCSI generic (sg) device, a block device, a raw device 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. .TP blk_sgio=0 | 1 The default action of this utility is to use the Unix read() command when the <ifile> is a block device. In lk 2.6 many block devices can handle SCSI commands issued via the SG_IO ioctl. So when this option is set the SG_IO ioctl sends SCSI READ commands to <ifile> if it is a block device. .TP bpt=BLOCKS each read operation will be made using this number of blocks (or less if near the end of count). Default is 128. Note also that each read operation starts at the same offset (as given by skip or 0). .TP bs=BYTES this .B must be the block size of the physical device (defaults to 512) if SCSI commands are being issued to <ifile>. .TP cdbsz=6 | 10 | 12 | 16 size of SCSI READ commands issued on sg device names. Default is 10 byte SCSI READ cdbs .TP count=BLOCKS read this number of blocks. This argument must be given .TP dio=0 | 1 default is 0 which selects indirect IO. Value of 1 attempts direct IO which, if not available, falls back to indirect IO and notes this at completion. This option is only actice if <ifile> is an sg device. If direct IO is selected and /proc/scsi/sg/allow_dio has the value of 0 then a warning is issued (and indirect IO is performed) .TP if=<ifile> read from this <ifile>. This argument must be given. If the <ifile> is a normal file then it must be seekable (if (count > bpt) or skip is given). Hence stdin is not acceptable (and giving "-" as the <ifile> argument is reported as an error). .TP mmap= 0 | 1 default is 0 which selects indirect IO. Value of 1 causes memory mapped IO to be performed. Selecting both dio and mmap is an error. This option is only active if <ifile> is an sg device. .TP odir= 0 | 1 when set opens an <ifile> which is a block device with an additional O_DIRECT flag. Active when blk_sgio is either 0 or 1. The default value is 0 (i.e. don't open block devices O_DIRECT). .TP skip=BLOCKS all read operations will start offset by BLOCKS bs-sized blocks from the start of input (file or device) .TP time=<n> When 0 (default) doesn't perform timing. when 1, times transfer and does throughput calculation, starting at the first issued command until completion. When 2, times transfer and does throughput calculation, starting at the second issued command until completion. When 3 times from third command, etc. .PP 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 .B raw(8) for more information about binding raw devices. .PP BYTES and BLOCKS may be followed by one of these multiplicative suffixes: c C *1; w W *2; b B *512; k K KiB *1,024; KB *1,000; m M MiB *1,048,576; MB *1,000,000; g G Gib *(2**30); GB *(10**9). Also a suffix of the form "x<n>" multiplies the leading number by <n>. These multiplicative suffixes are compatible with GNU's dd command (since 2002) which claims compliance with SI and with IEC 60027-2. .PP Alternatively numerical values can be given in hexadecimal preceded by either "0x" or "0X". When hex numbers are given multipliers cannot be used. .PP 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. .SH EXAMPLES .PP Let us assume that /dev/sg0 is a disk and we wish to time the disk's cache performance. .PP sg_read if=/dev/sg0 bs=512 count=1MB mmap=1 time=2 .PP 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 KiB 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: .PP time from second command to end was 8.51 secs, 60.19 MB/sec .br 1000000+0 records in, SCSI commands issued: 7813 .SH AUTHORS Written by Doug Gilbert. .SH "REPORTING BUGS" Report bugs to <dgilbert at interlog dot com>. .SH COPYRIGHT Copyright \(co 2000-2002 Douglas Gilbert .br This software is distributed under the GPL version 2. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. .SH "SEE ALSO" To time streaming media read or write time see .B sg_dd is in the sg3_utils package. The lmbench package contains .B lmdd which is also interesting. .B raw(8), dd(1)