Home | History | Annotate | Download | only in man1
      1 Content-type: text/html
      2 
      3 <HTML><HEAD><TITLE>Manpage of DISKTEST</TITLE>
      4 </HEAD><BODY>
      5 <H1>DISKTEST</H1>
      6 Section: Diag Tools (1)<BR>Updated: March 2007<BR><A HREF="#index">Index</A>
      7 <A HREF="http://localhost/cgi-bin/man/man2html">Return to Main Contents</A><HR>
      8 
      9 <A NAME="lbAB">&nbsp;</A>
     10 <H2>NAME</H2>
     11 
     12 disktest - Test tool for exersizing disk devices
     13 <A NAME="lbAC">&nbsp;</A>
     14 <H2>SYNOPSIS</H2>
     15 
     16 <B>disktest [-q] [-Q] [-r] [-w] [-E</B>
     17 
     18 <I>cmp_length</I>
     19 
     20 <B>] [-a</B>
     21 
     22 <I>seed</I>
     23 
     24 <B>] [ -A</B>
     25 
     26 <I>action</I>
     27 
     28 <B>] [-z|c|n|f</B>
     29 
     30 <I>fixed_pattern</I>
     31 
     32 <B>] [-B</B>
     33 
     34 <I>sBLK[:eBLK]</I>
     35 
     36 <B>| -C</B>
     37 
     38 <I>cycles</I>
     39 
     40 <B>] [-d ] [-D</B>
     41 
     42 <I>r%:w%</I>
     43 
     44 <B>] [-F] [-h</B>
     45 
     46 <I>heartbeat</I>
     47 
     48 <B>] [-K</B>
     49 
     50 <I>threads</I>
     51 
     52 <B>| -L</B>
     53 
     54 <I>seeks</I>
     55 
     56 <B>] [-P</B>
     57 
     58 <I>TXPRCA</I>
     59 
     60 <B>] [ -m ] [-N</B>
     61 
     62 <I>sectors</I>
     63 
     64 <B>] [-R</B>
     65 
     66 <I>retry[:retryDelay]</I>
     67 
     68 <B>] [-o</B>
     69 
     70 <I>offset</I>
     71 
     72 <B>] [-s</B>
     73 
     74 <I>sLBA[:eLBA]</I>
     75 
     76 <B>] [-S</B>
     77 
     78 <I>sBLK[:eBLK]</I>
     79 
     80 <B>] [-t</B>
     81 
     82 <I>delayMin[[:[delayMax]][:ioTimeout]]</I>
     83 
     84 <B>] [-T</B>
     85 
     86 <I>seconds</I>
     87 
     88 <B>] [-p</B>
     89 
     90 r
     91 <B>|</B>
     92 
     93 R
     94 <B>|</B>
     95 
     96 l
     97 <B>[</B>
     98 
     99 u
    100 <B>|</B>
    101 
    102 d
    103 <B>]</B>
    104 
    105 <B>] |</B>
    106 
    107 L
    108 <B>[</B>
    109 
    110 u
    111 <B>|</B>
    112 
    113 d
    114 <B>]] [-I [</B>
    115 
    116 d
    117 <B>]</B>
    118 
    119 r
    120 <B>|</B>
    121 
    122 b
    123 <B>|</B>
    124 
    125 f
    126 <B>[</B>
    127 
    128 s [ delay ]
    129 <B>]</B>
    130 
    131 <B>]</B>
    132 
    133 <I>filespec</I>
    134 
    135 <A NAME="lbAD">&nbsp;</A>
    136 <H2>DESCRIPTION</H2>
    137 
    138 <B>Disktest</B>
    139 
    140 does repeated accesses to a
    141 <I>filespec</I>
    142 
    143 and optionally writes to, reads from, and verifies the data.  By default,
    144 <B>disktest</B>
    145 
    146 makes assumptions about the running environment which allows for a quick start of IO generation.  However,
    147 <B>Disktest</B>
    148 
    149 has a large number of command line options which can be used to adapt the test for a variety of uses including data integrity, medium integrity, performance, and simple application simulation.
    150 <P>
    151 <B>Disktest</B>
    152 
    153 will use the device specified by
    154 <I>filespec.</I>
    155 
    156 If no option is specified otherwise,
    157 <B>disktest</B>
    158 
    159 will attempt to determine
    160 <I>filespec</I>
    161 
    162 type.  Fully qualified path must be give when
    163 <I>filespec</I>
    164 
    165 is not a normal file.  This will help to determine it's type.
    166 <A NAME="lbAE">&nbsp;</A>
    167 <H2>OPTIONS</H2>
    168 
    169 Most options have multipliers that can be used to specify larger amounts.  The following are a list of these multipliers.
    170 <DL COMPACT><DT><DD>
    171 <P>
    172 k = 1024, K = 10^3, m = 1024^2, M = 10^6, g = 1024^3, G = 10^9
    173 <P>
    174 </DL>
    175 
    176 These can be used on options such as -B, -L, -N, -S, -s.  The time options also have multipliers.
    177 <DL COMPACT><DT><DD>
    178 <P>
    179 m = 60, h = 60*60, d = 60*60*24
    180 <P>
    181 </DL>
    182 
    183 These can be used on options such as -h and -T.
    184 <DL COMPACT>
    185 <DT>-?<DD>
    186 Displays a short description of the command line options and exits normally.
    187 <DT>-a seed<DD>
    188 Use seed for all random number generation when constructing blocks of pseudo-random data and random seeks.
    189 By default, seed is set to the process id number.
    190 To reproduce a previous test run, use the process id number outputted to stdout.
    191 <DT>-A action<DD>
    192 These options are used to modify the default behavor during IO runtime.
    193 The following options can be used for these modifications.
    194 <DL COMPACT><DT><DD>
    195 <DL COMPACT><DT><DD>
    196 <DL COMPACT>
    197 <DT>g<DD>
    198 all threads, even to multiple targets, will be killed and the disktest process will stop.
    199 By default, when an access failure occurs only the threads to the failing target will stop.
    200 <DT>c<DD>
    201 after error, all threads for all targets will continue to run.
    202 <DT>r<DD>
    203 the reread that would normally occur on a data miscompare is not performed.
    204 <DT>m<DD>
    205 after error, a special IO is sent to LBA 0 of the target.
    206 This is so that a trigger can be set on the special data.
    207 At the beginning if the IO is the string &quot;DISKTEST ERROR OCCURRED&quot;.
    208 This will overwrite any mark data or normal pattern data written.
    209 <DT>s<DD>
    210 disable block level synchronization.
    211 By default distest will synchronize IO on a block level according to the POSIX standard that states that an application must serialize IO to a block or raw device.
    212 Disktest will not allow a write if the block is already being written or read, but will allow a read if other reads are occuring.
    213 This option will turn off this checking.
    214 <DT>S<DD>
    215 enable IO serialization.
    216 This addes to the synchronization of the threads, so that there is no more then one IO oustanding to a target, no matter how many threads are running to the target.
    217 <DT>t<DD>
    218 causes an IO timeout, to fail an IO run.
    219 normally an IO timeout, see -t option, will just display a warning.
    220 <DT>w<DD>
    221 If running the -pR seek type, and this action is specified, then blocks will only be written once, and be read many times, i.e. WORM still testing.
    222 This option does nothing with other seek pattern types, or if not reading and writing.
    223 <P>
    224 </DL>
    225 </DL>
    226 
    227 <B>NOTE:</B>
    228 
    229 Options g and c are exclusive.
    230 Option m cannot be specified with with c.
    231 Option m cannot be specified if only reading from a device.
    232 When using option s, it is possible that in some operating systems, that a data miscompare may result due to a kernel that does not garentee exclusion or does not handle well multiple readers and writers to the same block.
    233 </DL>
    234 
    235 <DT>-B sBlockSize[:eBlockSize]<DD>
    236 Set the size of the data block transfer.  If only
    237 <I>sBlockSize</I>
    238 
    239 is specified, then the transfer length is always a fixed length of
    240 <I>sBlockSize.</I>
    241 
    242 If
    243 <I>eBlockSize</I>
    244 
    245 is specified, then the transfer length will be randomly chosen between
    246 <I>sBlockSize</I>
    247 
    248 and
    249 <I>eBlockSize.</I>
    250 
    251 The transfer size will always be a multipile of the sector size.
    252 If either parameter is greater then 256, then the value will be integer divided by the sector size default, which is 512 bytes. If either parameter is preceded by a 'k', i.e. 8k, then the value will be multiplied by 1024. Otherwise, the parameters will be taken literally.  The default block size is (1*sector size) or 512.  Note that
    253 <B>O_DIRECT</B>
    254 
    255 , no filesystem buffering, and some file system may not be able to perform accesses as small as 512 bytes.  This will result in an IO failure with a transfer length of -1.
    256 <DT>-c<DD>
    257 Use a counting sequence for the bytes within to each block.  The count starts at 0 and increments to 255 then begins again at 0.  Each sector is filled with two of these sequences.
    258 <DT>-C cycles<DD>
    259 Run until the total number of
    260 <I>cycles</I>
    261 
    262 are complete.  When cycles is set to zero, disktest will run until killed.  The -L or -T option is used to specify how long each cycle will run for.  If neither -T or -L is specified, the cycle length with be calculated to the number of seeks based on the device size, -N, divided by the transfer size, -B. If -C is not specified, only a single cycle is run.
    263 <DT>-d<DD>
    264 Force
    265 <B>disktest</B>
    266 
    267 to dump to stdout the amount of data at the location specified by the other command-line option, i.e. -d -s50 -B 32k will dump 32768 bytes of data to stdout starting at LBA 50. The data is formatted into lines of 16 bytes with the location offset and ASCII equivalent.
    268 <DT>-D r%:w%<DD>
    269 Duty cycle used while reading and/or writing.  For example, -D 20:80 would cause
    270 <B>disktest</B>
    271 
    272 to generate a read 20% of the total run time and generate a write 80%.  If only read or write is give then the percentage is always set to 100 for the specified option.  If the total percentage does not add up to 100, i.e. -D 20:70, then
    273 <B>disktest</B>
    274 
    275 will split the remaining percentage, resulting in 25% reads and 75% writes.
    276 <DT>-E compare_length<DD>
    277 Turn on error checking.  Data read from
    278 <I>filespec</I>
    279 
    280 will be checked for correctness up to the number of bytes specified by
    281 <I>compare_length.</I>
    282 
    283 If
    284 <I>compare_length</I>
    285 
    286 is 0 then the block size is used as the compare length. By default, data read is not checked for errors.
    287 <DT>-f fixed_pattern<DD>
    288 Use a data pattern consisting of a fixed value.
    289 <I>fixed_pattern</I>
    290 
    291 can be entered using decimal, any number not starting with a 0, octel, any number staring with a 0, or hexadecimal, any number and [A-F] starting with 0x. The value can be no greater +/- 2^63, in size.
    292 <DT>-F<DD>
    293 used to specify that the
    294 <I>filespec</I>
    295 
    296 is actually a file listing the targets that
    297 <B>disktest</B>
    298 
    299 should operate on.  This allows
    300 <B>disktest</B>
    301 
    302 to run to multiple targets using the same options from a single command-line.
    303 <DT>-h heartbeat<DD>
    304 Performance data will be sent to stdout every
    305 <I>heartbeat</I>
    306 
    307 seconds. During a linear test, -pL, only heartbeat statistics for the current operational cycle will be displayed. The default is to only display performance data at the end of the test, which is cumulative for all IO performed throughout the test.
    308 <DT>-I IO_type<DD>
    309 Set the data transfer type to IO_type. Valid IO types are
    310 <B>r</B>
    311 
    312 (raw),
    313 <B>b</B>
    314 
    315 (block), or
    316 <B>f</B>
    317 
    318 (file) I/O.  These options are case sensitive.
    319 <P>
    320 The
    321 <B>r</B>
    322 
    323 (raw) type is used when binding a block device to a raw device, see
    324 <B><A HREF="http://localhost/cgi-bin/man/man2html?8+raw">raw</A>(8). Disktest</B>
    325 
    326 will align it's buffers correctly to support raw devices.
    327 <P>
    328 The
    329 <B>b</B>
    330 
    331 (block) type is used when block IO is desired.  The buffer_cache will be used during testing.  Buffer alignment is not required for this type of IO operation.
    332 <P>
    333 The
    334 <B>f</B>
    335 
    336 (file) type is used when accessing a file.  If the file does not exist then it will be created.  If the file exists, then it will opened; see
    337 <B>O_CREAT</B>
    338 
    339 in
    340 <B><A HREF="http://localhost/cgi-bin/man/man2html?2+open">open</A>(2)</B>
    341 
    342 for more details. Access to the file is performed through the file system that the file is stored on. Adding an S modifier to the F (file) type opertaions will force an
    343 <B><A HREF="http://localhost/cgi-bin/man/man2html?2+fsync">fsync</A>(2)</B>
    344 
    345 to occur on every write.
    346 <P>
    347 Adding
    348 <B>d</B>
    349 
    350 will open with the
    351 <B>O_DIRECT</B>
    352 
    353 flag set.
    354 If this option is used, then I/O is limited to being aligned to the file systems block size.
    355 When transferring to a block device w/o a file system, then alignment is to 1k.
    356 These limits have been verified with the 2.4.9 kernel and the o_direct patch from AA.
    357 <P>
    358 Adding
    359 <B>s</B>
    360 
    361 <I>sync_interval</I>
    362 
    363 Specifies that a sync should occur at
    364 <I>sync_interval</I>
    365 
    366 number of write IO operations. The default is to sync on every IO.
    367 <P>
    368 <B>Disktest</B>
    369 
    370 will report a failure if
    371 <I>filespec</I>
    372 
    373 does not match the
    374 <I>IO_type</I>
    375 
    376 specified.
    377 If no type is specified, then disktest will attempt to determine the file type by using <A HREF="http://localhost/cgi-bin/man/man2html?2+stat">stat</A>(2).
    378 <DT>-K threads<DD>
    379 Set the number of test threads to threads.  Each child can read or write based on the specified criteria.  The default number of test threads is 4.
    380 <DT>-L seeks<DD>
    381 Total number of seeks to occur during testing.  This option specifies the exact number of times a seek occurs on a resource.  By default
    382 <B>disktest</B>
    383 
    384 will calculate the number of seeks by taking the difference between the start block and the stop block.  If the difference is 0 then the default is 1000 seeks.
    385 <DT>-m<DD>
    386 This option will add the lba, pass count, seed, cycle start time, hostname, and target to each LBA as header data before any IO operation occurs. The mark replaces the first n bytes of data in each LBA.
    387 <DT>-M marker<DD>
    388 This option will override the cycle start time in the -m option with the specified value. This is useful when you are writing in one distest instance and read/verifing in another so that the mark data can be unique and also deterministic.
    389 <DT>-n<DD>
    390 Use a data pattern that consists of the the lba number.  An lba value of up to a 64b can be stored.  The 64b value is repeated to fill the transfer buffer.
    391 <DT>-N sectors<DD>
    392 Set the number of available sectors to num_secs. If no num_secs is specified, and the size of the device can be determined, then the number of sectors, as reported by the device is used, otherwise, the default number of sectors is 2000.
    393 <DT>-o offset<DD>
    394 This option specifies the LBA
    395 <I>offset</I>
    396 
    397 to shift all alignment of IO by.
    398 For example, if a test is to perform a full stride write on a storage device, and the os and/or storage device offset the strides by a number of LBAs, this parameter can be used to set that offset, so that IO is aligned to the stride on the storage device.
    399 By default the offset is set to zero.
    400 <DT>-p seek_pattern<DD>
    401 Set the pattern of seeks to
    402 <I>seek_pattern.</I>
    403 
    404 Valid patterns are
    405 <B>l</B>
    406 
    407 (linear interleaved writes/reads),
    408 <B>L</B>
    409 
    410 (linear writes then reads),
    411 <B>R</B>
    412 
    413 (random),
    414 <B>r</B>
    415 
    416 (random interleaved writes/reads).  Linear may also specify what happens when the last block is reached.  Option
    417 <B>u</B>
    418 
    419 specifies that the test should start back at first block after reaching the last block.
    420 <B>d</B>
    421 
    422 specifies that the test, after reaching the last block, should start at the last block and go to the first block. The default extra option for linear is 'u'. The default seek is random.
    423 <DT>-P perf_opts<DD>
    424 Record performance statistic to stdout. Perf_opts is a string of characters representing which statistics should be reported.  The possible options are:
    425 <P>
    426 <DL COMPACT><DT><DD>
    427 <DL COMPACT><DT><DD>
    428 <B>T</B>
    429 
    430 - Disk throughput
    431 <P>
    432 <B>X</B>
    433 
    434 - Number of transfers
    435 <P>
    436 <B>P</B>
    437 
    438 - Display performance data in ';' delimited format
    439 <P>
    440 <B>R</B>
    441 
    442 - Display runtime
    443 <P>
    444 <B>C</B>
    445 
    446 - Display cycle performance details
    447 <P>
    448 <B>A</B>
    449 
    450 - Display all performance options
    451 <P>
    452 </DL>
    453 
    454 </DL>
    455 
    456 <DT>-q<DD>
    457 Suppress all the 'INFO' level messages that are send to stdout.  This includes all the assumption messages the
    458 <B>disktest</B>
    459 
    460 will print as it finds that the option was not specified in the command line arguments.
    461 <DT>-Q<DD>
    462 Suppress header data from messages that are send to stdout.
    463 <DT>-r<DD>
    464 Read from
    465 <I>filespec.</I>
    466 
    467 This is the default option if -w or -r are not specified.  -E must be specified if data integrity checking is desired.
    468 <DT>-R retry[:retryDelay]<DD>
    469 Specifies that on a seek or transfer error, the IO should be retried.
    470 <I>retry</I>
    471 
    472 Specifies the number of retry attempts that should be made.
    473 <I>retryDelay</I>
    474 
    475 Specifies the amount of time delay (msec) before the retry occurs.  If no
    476 <I>retryDelay</I>
    477 
    478 is specified, then retries will occur immediately.  By default, IO errors are not retried.
    479 <DT>-S start_block[:end_block]<DD>
    480 Set the starting test block to
    481 <I>start_block</I>
    482 
    483 and the ending test block to
    484 <I>end_block.</I>
    485 
    486 By default,
    487 <I>start_block</I>
    488 
    489 is 0 and
    490 <I>end_block</I>
    491 
    492 is 2000.  If
    493 <I>end_block</I>
    494 
    495 is not given, and the size of
    496 <I>filespec</I>
    497 
    498 can be determined, then
    499 <I>end_block</I>
    500 
    501 is set to the volume capacity reported by the device divided by the transfer length.
    502 This option can only be used when there is a fixed transfer length.
    503 The range given is inclusive, so if -S0:10 is specificed, this will be 11 blocks.
    504 The -S and -s options are exclusive.
    505 <DT>-s start_LBA[:end_LBA]<DD>
    506 Set the starting test LBA to
    507 <I>start_LBA</I>
    508 
    509 and the ending test LBA to
    510 <I>end_LBA.</I>
    511 
    512 By default,
    513 <I>start_LBA</I>
    514 
    515 is 0 and
    516 <I>end_LBA</I>
    517 
    518 is 2000.  If
    519 <I>end_LBA</I>
    520 
    521 is not given, and the size of
    522 <I>filespec</I>
    523 
    524 can be determined, then
    525 <I>end_LBA</I>
    526 
    527 is set to the volume capacity reported by the device.
    528 This option can only be used when there is a fixed transfer length.
    529 The range given is inclusive, so if -s0:10 is specificed, this will be 11 LBAs.
    530 The -S and -s options are exclusive.
    531 <DT>-t delayMin[[:delayMax][:ioTimeout]]<DD>
    532 Wait
    533 <I>delayMin</I>
    534 
    535 milliseconds between each IO.
    536 This is used when attempting to simulate a static load from an application that has some known proccessing time between IO operations.
    537 <I>delayMax</I>
    538 
    539 can be added to specify that a per thread random IO delay should be used, between delayMin and delayMax.
    540 When combined with multiple threads, -K, these can be used to model IO load for simulating application processing after IO.
    541 By default, disktest will issue as many IO requests as possible, delayMin/delayMax is set to zero, which may over drive some disk subsystems when multiple hosts running disktest are attached to the same disk subsystem.
    542 <P>
    543 If no IOs complete in
    544 <I>ioTimeout</I>
    545 
    546 seconds, then disktest will consider the test to fail.
    547 The default is now 60 secs, which means that if there are no IO operations to a target from any thread that complete in 60 secs then the test will stop with a failed status, and an ERROR message stating the there is a possible hung IO condition, if it is a true hung IO condition, then disktest IO threads will not terminate with a non-preemtable kernel, and the only error message with be from the ioTimeout ERROR message.
    548 To disable this feature, set the io timeout to 0, which means that the IO timeout time will never be reached which is how disktest operated before this feature was added.
    549 The minute, m, hour, h, and day, d, multipliers can also be used on these perameter.
    550 The following are examples of -t usage.
    551 <P>
    552 <DL COMPACT><DT><DD>
    553 <DL COMPACT><DT><DD>
    554 -t0:0, is the default behavior as in previous versions
    555 <P>
    556 -t0:2h, is no IO delay, with a 2 hour IO timeout.
    557 <P>
    558 -t30, is a 30 msec delay, with default IO timeout.
    559 <P>
    560 -t300:1000:1m, is a random delay between 300:1000 msec, with a 1 minute io timeout.
    561 <P>
    562 </DL>
    563 
    564 </DL>
    565 
    566 <DT>-T runtime<DD>
    567 Run until
    568 <I>runtime</I>
    569 
    570 seconds have elapsed.
    571 <I>Runtime</I>
    572 
    573 must always be greater than zero.  -T and -L are exclusive of one another.
    574 <DT>-v<DD>
    575 The version information will be displayed and
    576 <B>disktest</B>
    577 
    578 will exit normally.
    579 <DT>-w<DD>
    580 Write to
    581 <I>filespec.</I>
    582 
    583 Data will be written as fast as possible and not read back to check for data corruption. can be combined with -r option to do read/write testing and -E to perform data integrity checking.
    584 <DT>-z<DD>
    585 Use a randomly generated data pattern based on the seed for the bytes within to each block.  The data pattern is random for the first 512 bytes, one LBA.  The pattern is then repeated for each LBA after creating a pseudo random data pattern across the given
    586 <I>filespec.</I>
    587 
    588 This is done for two reasons.  One, it saves on the memory foot print size need and time required to generate the data, and two, an LBA is the smallest unit of work
    589 <B>disktest</B>
    590 
    591 operates on.  Therefore,
    592 <B>disktest</B>
    593 
    594 can maintain the ability to do data checking, random block size transfers, and random block offsets when using random data.
    595 </DL>
    596 <A NAME="lbAF">&nbsp;</A>
    597 <H2>FILES</H2>
    598 
    599 <I>./disktest</I>
    600 
    601 <A NAME="lbAG">&nbsp;</A>
    602 <H2>ENVIRONMENT</H2>
    603 
    604 None.
    605 <A NAME="lbAH">&nbsp;</A>
    606 <H2>EXAMPLES</H2>
    607 
    608 The following are some examples on how to use the options in
    609 <B>disktest</B>
    610 
    611 to create different types of workloads.  Please use these as a guideline to get started.
    612 <P>
    613 <DL COMPACT><DT><DD>
    614 disktest -r -S10:15 -pld -L35 -B 256k -K3 -PTX /dev/sdaa
    615 <P>
    616 This will start a read test to blocks 10 through 15.  Seeks are linear and will be performed starting at 10 going to 15 then back to 10.  35 seeks will be performed.  The block size 256k and there will be three threads.  Also, total transfer and throughput will be displayed at the end of the test.
    617 <P>
    618 disktest -r -w -D30:70 -K2 -E32 -B 8192 -T 600 -pR -Ibd /dev/sdzz
    619 <P>
    620 This will start a write and read test were the work load is 30% reads and 70% writes.  There will be two threads and all read data will be checked for errors up to 32 bytes.  The block size is 8k and the test will run for 600 seconds.  Seeks will be random and /dev/sdzz will be opened with the
    621 <B>O_DIRECT</B>
    622 
    623 flag set.
    624 <P>
    625 disktest -K8 -t500:15000:120s ./testfile
    626 <P>
    627 This will start eight read threads, with a minimum read delay of 500 miliseconds, and a maximum of 15 seconds.
    628 <P>
    629 disktest -w -Is200 -R3:60000 -Ac -PRTX -B128k -T10 -pr ./afile
    630 <P>
    631 This will start four write threads, syncing every 200 IOs. If there is a error on any write, then the same IO will be retried up to 3 times, and the thread will wait for 60 seconds before attempting each retry. If there is an error during the test, just continue on, reporting all errors as warnings.
    632 <P>
    633 disktest -Ag -Am -B 16k -C 100 -K 1 -z -ma -pL -P A -S 0:20000 -r -w -E 0 -N 640032 ./afile
    634 <P>
    635 Start a read/write test with error checking for 100 cycles.  If there is an error, then write out the special marker to LBA 0 of the target, and stop all testing.  You random data, and all header markers.
    636 <P>
    637 </DL>
    638 <A NAME="lbAI">&nbsp;</A>
    639 <H2>DIAGNOSTICS</H2>
    640 
    641 Output Format
    642 <DL COMPACT><DT><DD>
    643 All output has a header sting that displays in the following format:
    644 <P>
    645 <DL COMPACT><DT><DD>
    646 | &lt;date&gt;-&lt;time&gt; | &lt;level&gt; | &lt;pid&gt; | &lt;version&gt; | &lt;device&gt; | &lt;message&gt;
    647 <P>
    648 </DL>
    649 
    650 The first value is the system date and time.  It is expressed as:
    651 <DL COMPACT><DT><DD>
    652 &lt;MONTH&gt;/&lt;DAY&gt;/&lt;YEAR&gt;-&lt;HOUR&gt;:&lt;MIN&gt;:&lt;SEC&gt;.
    653 <P>
    654 </DL>
    655 
    656 The second value is the level of the message.  Current levels include START, END, DEBUG, INFO, WARN, STAT, and ERROR.  The third value is the process id.  This can be used to match up the test processes with the output information if more then one test process is outputting to the same context, such as file. It can also be used to regenerate a test with the same seeks and random data using the -a. The fourth value is the revision number of the test process. The fifth is the target device.  The sixth is the informational message.  The following are some examples:
    657 <DL COMPACT><DT><DD>
    658 <P>
    659 | 11/12/01-02:05:01 | START | 1314 | v1.2.3 | /dev/sdaa | Start args: -S100:105 -K5 -pid -r -PTX -L 25 -B 1 -z /dev/sdaa
    660 <P>
    661 | 11/12/01-02:05:01 | STAT  | 1314 | v1.2.3 | /dev/sdaa | 12800 bytes read in 25 transfers.
    662 <P>
    663 | 11/12/01-02:05:01 | STAT  | 1314 | v1.2.3 | /dev/sdaa | Read Throughput 12800B/s, IOPS 25/s.
    664 <P>
    665 | 11/12/01-02:05:01 | END   | 1314 | v1.2.3 | /dev/sdaa | Test Done (Passed)
    666 <P>
    667 </DL>
    668 
    669 </DL>
    670 
    671 Error Checking
    672 <DL COMPACT><DT><DD>
    673 When error checking is enabled, each read is compared with data that is generated by the command line options specified or assumptions made where no command line option is given.  If a data miscompare results the expected and actual data from the first 16 bytes of the LBA where the error occured is printed to STDOUT, and the IO thread will die without completing any other IO operations, unless the -A option is specified. if the compare_length is not zero, then only the first compare_length bytes are compared, and only if those bytes miscompare will a data miscompare be reported. When using the mark option, data miscompares can be more readly detect.
    674 <P>
    675 </DL>
    676 
    677 Decoding Mark Data
    678 <DL COMPACT><DT><DD>
    679 When using the -m option, it will replace the first 32+ bytes of each LBA with mark information.
    680 The + is the fact that it places the complete target information in the mark, so it can consume more or lease of the LBA depending on the filespec.
    681 The mark information looks as follows:
    682 <P>
    683 <DL COMPACT><DT><DD>
    684 00 00 00 00 00 00 00 D4 00 00 00 00 00 00 00 03
    685 <BR>
    686 
    687 00 00 00 00 42 FD 08 FD 00 00 00 00 00 00 43 FA
    688 <BR>
    689 
    690 69 6F 61 72 6B 00 00 00 00 00 00 00 00 00 00 00
    691 <BR>
    692 
    693 2E 2F 74 65 73 74 66 69 6C 65 3A 3B 3C 3D 3E 3F
    694 <P>
    695 </DL>
    696 
    697 The first 8 bytes is the LBA, in this case
    698 <DL COMPACT><DT><DD>
    699 00 00 00 00 00 00 00 D4 : Which equals LBA #212
    700 <P>
    701 </DL>
    702 
    703 The second 8 bytes is the pass count, in this case
    704 <DL COMPACT><DT><DD>
    705 00 00 00 00 00 00 00 03 : Which equals pass count 3
    706 <P>
    707 </DL>
    708 
    709 The third 8 bytes is the start time, in this case
    710 <DL COMPACT><DT><DD>
    711 00 00 00 00 42 FD 08 FD : Which equals 0x42FD08FD or 1123879165 or Fri Aug 12 13:39:25 PDT 2005.
    712 <BR>
    713 
    714 This value is decoding using date --date=&quot;1970-01-01 1123879165 sec UTC&quot; .
    715 <P>
    716 </DL>
    717 
    718 The fourth 8 bytes is the random seed, in this case
    719 <DL COMPACT><DT><DD>
    720 00 00 00 00 00 00 43 FA : Which equals 0x43FA
    721 <P>
    722 </DL>
    723 
    724 The next 16 bytes is the first 16 bytes of the name of the host, in this case
    725 <DL COMPACT><DT><DD>
    726 69 6F 61 72 6B 00 00 00 00 00 00 00 00 00 00 00 : Which equals: ioark
    727 <P>
    728 </DL>
    729 
    730 From the 49 byte on is the filespec, in this case
    731 <DL COMPACT><DT><DD>
    732 2E 2F 74 65 73 74  66 69 6C 65 : Which equals: ./testfile
    733 </DL>
    734 
    735 <P>
    736 </DL>
    737 
    738 Seeking/Accessing
    739 <DL COMPACT><DT><DD>
    740 When a seek failure occurs, the following information is sent to STDOUT:
    741 <P>
    742 <DL COMPACT><DT><DD>
    743 | 11/12/01-02:05:01 | ERROR | 2250 | v1.2.3 | /dev/sdzz | lseek failed seek 10, lba = 32714, request pos = 1284, seek pos = -1, errno = 5
    744 <P>
    745 </DL>
    746 
    747 When an access failure occurs, the following information is sent to STDOUT:
    748 <P>
    749 <DL COMPACT><DT><DD>
    750 | 11/12/01-02:05:01 | ERROR | 4492 | v1.2.3 | /dev/sdxp | disk access failed: seek 10, lba = 32714, got = 0, asked for = 8192, errno = 2
    751 <P>
    752 </DL>
    753 
    754 An access failure can also occur on a partial access.  In this case, 'got' will equal the number of bytes that were transfered.
    755 Currently, distest treats partial accesses as failures, as distest attempts to always make sure that the LBA target and trasnfer size fits inside the specified volume size.
    756 <P>
    757 </DL>
    758 
    759 Performance
    760 <DL COMPACT><DT><DD>
    761 Performance options will display information about throughput, IO per second, and runtime. This information can be print at the end of the test only, or throughout the test at a given interval using the heartbeat option, -h.
    762 <P>
    763 </DL>
    764 
    765 Dumping
    766 <DL COMPACT><DT><DD>
    767 When dumping data from filespec you will specify -d along with other command-line options.  Here is an example:
    768 <P>
    769 <DL COMPACT><DT><DD>
    770 disktest -d -B 1k -s25 /dev/sddz
    771 <P>
    772 </DL>
    773 
    774 This will dump 1024 bytes of data to stdout starting at LBA 25.
    775 <P>
    776 </DL>
    777 
    778 File I/O
    779 <DL COMPACT><DT><DD>
    780 Distest can be used to perform filesystem IO testing.  There is some setup required for this however.  Disktest will not automatically create a file on the filesystem.  Therefore, a file must be initialized.  This is only required for read only testing.  Write and read/write testing will create the file if not already created.  Also note, that when creating a file using random I/O, all the LBAs in the file may not be written.  This can cause disktest to show an error if a request is made to a file to an LBA that has not been previously written.  The follwing is an example to initialize a file for filesystem IO testing.
    781 <P>
    782 disktest -w -pl -N200000 -B128k test.fil
    783 <P>
    784 This will create a ~97MB file named test.fil in the current directory writing at 131072B per transfer.  Once this completes any type of IO test can be performed to this file. This can also be done by creating a sparce file by doing the following:
    785 <P>
    786 disktest -w -pl -K1 -L1 -S200000 test.fil
    787 <P>
    788 </DL>
    789 
    790 <A NAME="lbAJ">&nbsp;</A>
    791 <H2>TODO</H2>
    792 
    793 The following are options that are forthcoming, ideas, and other good stuff:
    794 <DL COMPACT><DT><DD>
    795 Add the following options:
    796 <DL COMPACT><DT><DD>
    797 butterfly: seek option: test will seek lba start/end/start+1/end-1/etc...
    798 <P>
    799 non-destructive: will read lba/write lba with read data/then read lba to verify
    800 <P>
    801 min seek: force a minimum seek distance during any IO access
    802 <P>
    803 max seek: force a maximum seek distance during any IO access
    804 <P>
    805 WORO: all blocks will be written and read only once
    806 <P>
    807 WRWR: a block will be written then read then written then read
    808 <P>
    809 retry: number of times an I/O should be retried, after an error, before counting as a failure
    810 <P>
    811 </DL>
    812 </DL>
    813 <A NAME="lbAK">&nbsp;</A>
    814 <H2>AUTHOR</H2>
    815 
    816 Brent Yardley (<A HREF="mailto:yardleyb (a] us.ibm.com">yardleyb (a] us.ibm.com</A>)
    817 <P>
    818 
    819 <HR>
    820 <A NAME="index">&nbsp;</A><H2>Index</H2>
    821 <DL>
    822 <DT><A HREF="#lbAB">NAME</A><DD>
    823 <DT><A HREF="#lbAC">SYNOPSIS</A><DD>
    824 <DT><A HREF="#lbAD">DESCRIPTION</A><DD>
    825 <DT><A HREF="#lbAE">OPTIONS</A><DD>
    826 <DT><A HREF="#lbAF">FILES</A><DD>
    827 <DT><A HREF="#lbAG">ENVIRONMENT</A><DD>
    828 <DT><A HREF="#lbAH">EXAMPLES</A><DD>
    829 <DT><A HREF="#lbAI">DIAGNOSTICS</A><DD>
    830 <DT><A HREF="#lbAJ">TODO</A><DD>
    831 <DT><A HREF="#lbAK">AUTHOR</A><DD>
    832 </DL>
    833 <HR>
    834 This document was created by
    835 <A HREF="http://localhost/cgi-bin/man/man2html">man2html</A>,
    836 using the manual pages.<BR>
    837 Time: 22:44:31 GMT, February 06, 2008
    838 </BODY>
    839 </HTML>
    840