1SG_READ(8)                         SG3_UTILS                        SG_READ(8)
2
3
4

NAME

6       sg_read  - read multiple blocks of data, optionally with SCSI READ com‐
7       mands
8

SYNOPSIS

10       sg_read [blk_sgio=0|1] [bpt=BPT] [bs=BS] [cdbsz=6|10|12|16] count=COUNT
11       [dio=0|1]   [dpo=0|1]   [fua=0|1]  if=IFILE  [mmap=0|1]  [no_dxfer=0|1]
12       [odir=0|1] [skip=SKIP] [time=TI] [verbose=VERB] [--help] [--version]
13

DESCRIPTION

15       Read data from a Linux SCSI generic (sg) device, a block  device  or  a
16       normal file with each read command issued to the same offset or logical
17       block address (lba). This can be used to test (or time)  disk  caching,
18       SCSI  (or  some  other) transport throughput, and/or SCSI command over‐
19       head.
20
21       When the COUNT value is positive, then up to BPT blocks are read  at  a
22       time,  until  the COUNT is exhausted. Each read operation starts at the
23       same lba which, if SKIP is not given, is the beginning of the  file  or
24       device.
25
26       The COUNT value may be negative when IFILE is a sg device or is a block
27       device with 'blk_sgio=1' set. Alternatively 'bpt=0' may  be  given.  In
28       these  cases  |COUNT| "zero block" SCSI READ commands are issued. "Zero
29       block" means "do nothing" for SCSI READ 10, 12  and  16  byte  commands
30       (but  not  for  the 6 byte variant). In practice "zero block" SCSI READ
31       commands have low latency and so are one way to  measure  SCSI  command
32       overhead.
33

OPTIONS

35       blk_sgio=0 | 1
36              The  default  action  of  this utility is to use the Unix read()
37              command when the IFILE is a block device. In lk 2.6  many  block
38              devices  can handle SCSI commands issued via the SG_IO ioctl. So
39              when this option is set the SG_IO ioctl sends SCSI READ commands
40              to IFILE if it is a block device.
41
42       bpt=BPT
43              where  BPT  is  the maximum number of blocks each read operation
44              fetches.  Fewer blocks will be fetched when the remaining  COUNT
45              is  less  than  BPT. The default value for BPT is 128. Note that
46              each read  operation  starts  at  the  same  lba  (as  given  by
47              skip=SKIP  or  0).   If 'bpt=0' then the COUNT is interpreted as
48              the number of zero block SCSI READ commands to issue.
49
50       bs=BS  where BS is the size (in bytes) of each block read. This must be
51              the  block size of the physical device (defaults to 512) if SCSI
52              commands are being issued to IFILE.
53
54       cdbsz=6 | 10 | 12 | 16
55              size of SCSI READ commands issued on sg device names,  or  block
56              devices  if  'blk_sgio=1' is given. Default is 10 byte SCSI READ
57              cdbs.
58
59       count=COUNT
60              when COUNT is a positive number, read  that  number  of  blocks,
61              typically  with multiple read operations. When COUNT is negative
62              then |COUNT| SCSI READ commands are  performed  requesting  zero
63              blocks to be transferred. This option is mandatory.
64
65       dio=0 | 1
66              default  is  0  which  selects  indirect IO. Value of 1 attempts
67              direct IO which, if not available, falls back to indirect IO and
68              notes this at completion. This option is only active if IFILE is
69              an   sg   device.    If    direct    IO    is    selected    and
70              /proc/scsi/sg/allow_dio  has  the  value  of 0 then a warning is
71              issued (and indirect IO is performed)
72
73       dpo=0 | 1
74              when set the disable page out (DPO) bit in SCSI READ commands is
75              set.  Otherwise the DPO bit is cleared (default).
76
77       fua=0 | 1
78              when  set  the force unit access (FUA) bit in SCSI READ commands
79              is set.  Otherwise the FUA bit is cleared (default).
80
81       if=IFILE
82              read from this IFILE. This argument must be given. If the  IFILE
83              is  a  normal file then it must be seekable (if (COUNT > BPT) or
84              skip=SKIP is given). Hence stdin is not acceptable  (and  giving
85              "-" as the IFILE argument is reported as an error).
86
87       mmap=0 | 1
88              default is 0 which selects indirect IO. Value of 1 causes memory
89              mapped IO to be performed. Selecting both dio  and  mmap  is  an
90              error. This option is only active if IFILE is an sg device.
91
92       no_dxfer=0 | 1
93              when set then DMA transfers from the device are made into kernel
94              buffers but no further (i.e. there is no second  copy  into  the
95              user  space). The default value is 0 in which case transfers are
96              made into the user space.  When neither mmap nor dio is set then
97              data  transfer  are  copied  via  kernel  buffers (i.e. a double
98              copy). Mainly for testing.
99
100       odir=0 | 1
101              when set opens an IFILE which is a block device  with  an  addi‐
102              tional  O_DIRECT  flag.  The default value is 0 (i.e. don't open
103              block devices O_DIRECT).
104
105       skip=SKIP
106              all read operations will start offset by  SKIP  bs-sized  blocks
107              from the start of the input file (or device).
108
109       time=TI
110              When  TI  is  0 (default) doesn't perform timing.  When 1, times
111              transfer and does throughput calculation, starting at the  first
112              issued command until completion. When 2, times transfer and does
113              throughput calculation, starting at the  second  issued  command
114              until completion. When 3 times from third command, etc. An aver‐
115              age number of commands (SCSI READs or Unix read()s) executed per
116              second is also output.
117
118       verbose=VERB
119              as  VERB  increases  so  does the amount of debug output sent to
120              stderr.  Default value is zero which yields the  minimum  amount
121              of debug output.  A value of 1 reports extra information that is
122              not repetitive.
123
124       --help Output the usage message then exit.
125
126       --version
127              Output the version string then exit.
128

NOTES

130       Various numeric arguments (e.g. SKIP) may include  multiplicative  suf‐
131       fixes  or  be given in hexadecimal. See the "NUMERIC ARGUMENTS" section
132       in the sg3_utils(8) man page.
133
134       Data usually gets to the user space in a 2  stage  process:  first  the
135       SCSI  adapter  DMAs  into  kernel buffers and then the sg driver copies
136       this data into user memory.  This is called "indirect IO" and there  is
137       a  "dio" option to select "direct IO" which will DMA directly into user
138       memory. Due to some issues "direct IO" is disabled in the sg driver and
139       needs  a  configuration  change  to activate it. This is typically done
140       with "echo 1 > /proc/scsi/sg/allow_dio". An alternate way to avoid  the
141       2 stage copy is to select memory mapped IO with 'mmap=1'.
142

SIGNALS

144       The signal handling has been borrowed from dd: SIGINT, SIGQUIT and SIG‐
145       PIPE output the number of remaining blocks to be transferred; then they
146       have  their  default action.  SIGUSR1 causes the same information to be
147       output yet the copy continues.  All output caused by signals is sent to
148       stderr.
149

EXAMPLES

151       Let  us  assume  that /dev/sg0 is a disk and we wish to time the disk's
152       cache performance.
153
154          sg_read if=/dev/sg0 bs=512 count=1MB mmap=1 time=2
155
156       This command will continually read 128  512 byte blocks from  block  0.
157       The  "128"  is  the  default  value for 'bpt' while "block 0" is chosen
158       because the 'skip' argument was not given.  This  will  continue  until
159       1,000,000  blocks  are read. The idea behind using 'time=2' is that the
160       first 64 KiB read operation will involve  reading  the  magnetic  media
161       while  the  remaining  read operations will "hit" the disk's cache. The
162       output of third command will look like this:
163
164         time from second command to end was 4.50 secs, 113.70 MB/sec
165         Average number of READ commands per second was 1735.27
166         1000000+0 records in, SCSI commands issued: 7813
167

EXIT STATUS

169       The exit status of sg_read is 0 when it is  successful.  Otherwise  see
170       the sg3_utils(8) man page.
171

AUTHORS

173       Written by Douglas Gilbert.
174

REPORTING BUGS

176       Report bugs to <dgilbert at interlog dot com>.
177
179       Copyright © 2000-2012 Douglas Gilbert
180       This  software is distributed under the GPL version 2. There is NO war‐
181       ranty; not even for MERCHANTABILITY or FITNESS FOR  A  PARTICULAR  PUR‐
182       POSE.
183

SEE ALSO

185       To  time  streaming  media  read  or  write  time  see  sg_dd is in the
186       sg3_utils package. The lmbench package  contains  lmdd  which  is  also
187       interesting.  raw(8), dd(1)
188
189
190
191sg3_utils-1.35                   November 2012                      SG_READ(8)
Impressum