User's Manual for dt - Data Test Program Version 13.22 by Robin T. Miller November 10th, 2000 _______________________________________________________ EXTREME WARNING!!! Use of this program is almost guaranteed to find problems and cause your schedules to slip. If you are afraid to find bugs or otherwise break your system, then please do not use this program for testing. You can pay now or pay later, but you've been warned. _______________________________________________________ The Author of dt, Robin's Nest Software Inc. Home e-mail: rmiller@bit-net.com Robin T. Miller or Work e-mail: Robin.Miller@Compaq.com 2 Paradise Lane, QUICS Login: rtmiller Hudson, N.H. 03051 Home: (603) 883-2355 Work: (603) 884-0565 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 Change History Version Date Author Changes __________________________________________________________________________________________ 13.22 November 10th, 2000 Robin T. Miller Added more test features and options, including: read-after-write (raw), set- ting the random I/O seed (rseed), and multi-volume media testing. __________________________________________________________________________________________ 12.0 July 24, 1999 Robin T. Miller Add numerous new test features and parameters, including: AIO w/lbdata, AIO w/random, EEI & tape resets, IOT test pattern, larger data/record limits and statistics, Linux & Windows/NT support. __________________________________________________________________________________________ 9.3 February 21, 1996 Robin T. Miller Documented iotype={random or sequential} option. __________________________________________________________________________________________ 9.0 December 11, 1995 Robin T. Miller Logical block data feature, additional (higher) tty speeds, and other minor changes. __________________________________________________________________________________________ 8.0 July 26, 1995 Robin T. Miller Modem testing, child process control, pattern string enhancements, and other minor changes. __________________________________________________________________________________________ 7.0 September 11, 1993 Robin T. Miller Initial release of Users Manual. __________________________________________________________________________________________ Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 1 Overview. dt is a generic data test program used to verify the proper operation of peripherals & I/O sub-systems, and for obtaining performance information. Since verification of data is per- formed, dt can be thought of as a generic diagnostic tool. Although the original design goals of being a generic test tool were accomplished, it quickly become evident that device specific tests, such as terminals, and different programming interfaces such as memory mapped files and POSIX asynchronous I/O API's were necessary. Therefore, special options were added to enable these test modes and to specify necessary test parameters. dt command lines are similar to the dd program, which is popular on most UNIX systems. dt contains numerous options to provide user control of most test parameters so customized tests can be written easily and quickly by specifying simple command line options. Since the exit status of the program always reflects the completion status of a test, scripts can easily detect failures to perform automatic regression tests. dt has been used to successfully test disks, tapes, serial lines, parallel lines, pipes & FIFO's, memory mapped files, and POSIX Asynchronous I/O. In fact, dt can be used with any device that supports the standard open, read, write, and close system calls. Special support is necessary for some devices, such as serial lines, for setting up the speed, parity, data bits, etc, but dt's design provides easy addition of this setup. Most tests can be initiated by a simple dt command line, and lots of I/O can be initiated quickly using multiple processes and/or POSIX AIO, for those operating systems supporing AIO. More complex tests are normally initiated by writing shell scripts and using dt in conjunction with other tools, such as scu (SCSI Command Utility). Several shell scripts for testing disks, tapes, and serial lines are also supplied with this kit which can used as templates for developing other specialized test scripts. Specific system features are now being added to dt so more extensive testing can be accomplished. The program has been res- tructured to allow easy inclusion of new device specific tests by dispatching to test functions through a function lookup table. This table gets setup automatically by the program, based on options enabled, or via the device type "dtype=" option. Page 1 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 WARNING: dt does NOT perform any sanity checking of the output device specified. This means if you are running as 'root' and you specify a raw disk device, dt will overwrite existing file systems, so please be careful. NOTE: Tru64 (Digital) UNIX prevents overwriting the disk label block (block 0), to prevent you from destroying this valuable in- formation. Overwriting other files systems, not starting at block zero, is still possible however. 2 Operating Systems Supported. dt is conditionalized to run on SUN, ULTRIX, OSF, QNX, Windows/NT, and Linux operating systems. This conditionalization tends to make the source look rather ugly, but I've purposely left this in for code maintainability (common code base) and for other people to see porting differences between these systems. UNIX is NOT as portable as some people think, but the POSIX stan- dard is finally changing this. Eventually this will be cleaned up, but this conditionization is currently necessary so dt will compile and run with non-ANSI compliant compilers and non-POSIX compliant operating systems. 2.1 POSIX Compliant Systems. People who may wish to port dt to other POSIX compliant operating systems, should review the Tru64 UNIX, Linux, and QNX conditionalized code. These operating systems also support an ANSI compliant compiler. 3 Test Uses. Those poeple with an imagination will find many uses for dt, but I'll list a few I've used it for, just to whet your appetite: o Testing of tape devices using different block sizes to determine the best blocking factor for optimum performance and capacity. This is very important for streaming tapes devices. o Write tapes to end of tape, to determine the total tape capacity. This gives the total data capacity of tapes, after inter-record gaps, preamble/postambles, or pad blocks are written on the tape. o Read existing tapes with data comparison disabled, to deter- mine the amount of data on the tape. This is useful to determine how much disk space is required to read in a tape, or to simply verify the tape can be read without errors. Page 2 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 o Reading/writing an entire tape to ensure device drivers properly sense and handle end of tape error conditions. o Write a tape and ensure it can be read on another tape drive to test drive compatibility (also referred to as transporta- bility). o Read multiple tape files to ensure file marks and end of tape are reported and handled properly by tape drivers. o I/O to disks using the raw device interface, to determine the optimum performance of the controller. This usually gives a good indication of how well the controller cache or read-ahead improves I/O performance for sequential or random file access. o I/O to disk files through the file system, to determine the affect the buffer cache has on write and read performance. You must know the characteristics of your O/S's buffer cache to select file sizes to either get optimum performance from the cache, or to defeat the affect of the buffer cache. o Reading/writing of entire disks, to ensure the media capa- city and end of media error handling is properly reported by device drivers. o Test memory mapped files to compare I/O performance against raw and file system I/O. Typically, memory mapped I/O approaches the raw device performance. o Testing I/O to files on NFS mounted file systems. This will give you a good indication of your ethernet performance to remote files. o Writing/reading pipes & FIFO's to verify pipe operation and performance. o Initiating multiple processes to test optimizations of buffer cache, device drivers, and/or intelligent controll- ers. This is also useful to test multiple device access and for loading the I/O sub-system. o Force I/O at different memory boundaries to test low level driver handling. Using the align option, you can set memory alignment for testing specialized device driver DMA code. This is very useful when developing new I/O sub-systems. o Do loopback testing of parallel or serial lines on either the same system of different systems. This is a useful com- patibility test when running different machines running dif- ferent operating systems. o Enable POSIX Asynchronous I/O to verify proper operation of this API and to determine performance gains (over standard synchronous I/O). This is also useful for queuing multiple I/O requests to drivers and for testing SCSI tag queuing and RAID configurations. o Specify variable record options for testing variable tape devices. o On Tru64 cluster systems, distributed lock manager (DLM) options can be used to control access to shared devices or files. Page 3 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 o Also available on Tru64 UNIX is the ability to use Extended Error Information (EEI) to detect and recover from SCSI bus/device resets (tape is repositioned for continuing the test). 4 Program Options. This section describes program options and and special notes related to each. The dt help file provides a summary of the options, and the default value of most options. The dt help sum- mary for Tru64 UNIX is shown in Appendix A. 4.1 Input File "if=" Option. This option specifies the input file to open for reads. The device is opened read-only so devices which only permit or sup- port read access, e.g., parallel input devices, can be opened successfully. Special Notes: o Data read is automatically verified with the default data pattern, unless you disable this action via the "disable=compare" option. o Extra pad bytes of sizeof(int), are allocated at the end of data buffers, initialized with the inverted data pattern, and then verified after each read request to ensure the end of data buffers didn't get overwritten by file system and/or device drivers. This extra check has found problems with flushing DMA FIFO's on several machines. Syntax: if=filename The input file to read. 4.2 Output File "of=" Option. This option specifies the output file to open for writes. After the write portion of the test, the device is closed (to reposition to start of file or to rewind the tape), re-opened, and then a read verification pass is performed. If you wish to prevent the read verify pass, you must specify the "disable=verify" option. Special Notes: o Terminal devices are not closed between passes so previously set terminal characteristics don't get reset. This also caused a race condition when doing loopback testing with two processes. Page 4 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 o When testing terminal (serial) devices, modem control is disabled (via setting CLOCAL) to prevent tests from hanging. If the "enable=modem" option is specified, then CLOCAL is reset, hangup on close HUPCL is set, and testing will not preceed until carrier or DSR is detected. This code is not fully tested, but this description accurately describes the code. o At the present time, tapes are rewound by closing the dev- ice, so you must specify the rewind device during testing if the read verify pass is being performed. This restriction will probably change in the next release since magtape con- trol commands will be supported (tape specific tests as well). o A special check is made for the /dev/ prefix, and if located, the O_CREAT open flag is cleared to prevent accidently creating files in this directory when not speci- fying the correct device name (very easy to do when running tests as super-user 'root'). o When writing to raw disks on Tru64 UNIX, if the disk was previously labeled, you must issue the "disklabel_-z" com- mand to destroy the label block or else you cannot write to this area of this disk (block 0). Failure to do this results in the error "Read-only file system" (errno=EROFS) being returned on write requests. Syntax: of=filename The output file to write. 4.3 Pattern File "pf=" Option. This option specifies a pattern file to use for the data pattern during testing. This option overrides the "pattern=" option and allows you to specify specialized patterns. The only restriction to this option is that the entire file must fit in memory. A buffer is allocated to read the entire pattern file into memory before testing starts so performance is not affected by reading the pattern file. Syntax: pf=filename The data pattern file to use. 4.4 Block Size "bs=" Option. This option specifies the block size, in bytes, to use dur- ing testing. At the present time, this option sets both the input and output block sizes. At the time I originally wrote this program, I didn't have the need for seperate block sizes, but this may change in a future release where I'll add back the Page 5 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 "ibs=" & "obs=" options available with dd. Special Notes: o When enabling variable length records via the "min=" option, this also sets the maximum record size to be written/read. o For memory mapped files, the block size must be a multiple of the system dependent page size (normally 4k or 8k bytes). Syntax: bs=value The block size to read/write. 4.5 Log File "log=" Option. This option specifies the log file to redirect all program output to. This is done by re-opening the standard error stream (stderr) to the specifed log file. Since all output from dt is directed to stderr, library functions such as perror() also write to this log file. Special Notes: o A seperate buffer is allocated for the stderr stream, and this stream is set buffered so timing isn't affected by pro- gram output. o When starting multiple processes via the "procs=" option, all output is directed to the same log file. The output from each process is identified by the process ID (PID) as part of the message (errors & statistics). Syntax: log=filename The log file name to write. 4.6 POSIX Asynchronous I/O "aios=" Option. This option enables and controls the number of POSIX Asychronous I/O requests used by the program. Special Notes: o The default is to queue up to 8 requests. o This option is only valid for Tru64 UNIX systems are this time. o The system limit for AIO on Tru64 UNIX is dynamic, and can be queried by using the "sysconfig_-q_rt" command. o You can use the "enable=aio" option to enable AIO and use the default request limit. o AIO is only supported for character devices and is disabled for terminals. On Tru64 UNIX, you can alter the Makefile and link against libaio.a, which allows AIO with any Page 6 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 device/file by mimic'ing AIO using POSIX threads. o AIO requests can not be cancelled on Tru64 UNIX, so queuing many requests to 1/2" tape devices will probably result in running off the end of the tape reel. This is not a problem for cartridge tapes. Syntax: aios=value Set number of AIO's to queue. 4.7 Buffer Alignment "align=" Option. This option controls the alignment of the normally page aligned data buffer allocated. This option is often useful for testing certain DMA boundary conditions not easily reproduced otherwise. The rotate option automatically adjust the data buffer pointer by (0, 1, 2, 3, ...) for each I/O request to ensure various boundaries are fully tested. Syntax: align=offset Set offset within page aligned buffer. or align=rotate Rotate data address through sizeof(ptr). 4.8 File Disposition "dispose=" Option. This option controls the disposition of test files created on file systems. By default, the test file created is deleted before exiting, but sometimes you may wish to keep this file for further examination, for use as a pattern file, or simply for the read verify pass of another test (e.g., reading the file via memory map API). Syntax: dispose=mode Set file dispose to: delete or keep. 4.9 Dump Data Limit "dlimit=" Option. This option allows you to specify the dump data limit used when data compare errors occur. The default dump data limit is 64 bytes. Syntax: dlimit=value Sets the data dump limit to value. Page 7 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 4.10 Device Type "dtype=" Option. 4.11 Input Device Type "idtype=" Option. 4.12 Output Device Type "odtype=" Option. These options provide a method to inform dt of the type of device test to be performed. Without this knowledge, only gen- eric testing is possible. Special Notes: o On Tru64 UNIX systems, these options are not necessary, since this information is obtained via the DECIOCGET or DEVGETINFO IOCTL's: o Although the program accepts a large number of device types, as shown below, specific tests only exists for "disk", "tape", "fifo", and "terminal" device types. Others may be added in the future. o In the case of "disk" device type, dt reports the relative block number when read, write, or data compare errors occur. o Also for "disk" devices, dt will automatically determine the disk capacity if a data or record limit is not specified. This is done via a series of seek/read requests. o On each operating system supported, string compares are done on well known device names to automatically select the dev- ice type. For example on QNX, "/dev/hd" for disk, "/dev/tp" for tapes, and "/dev/ser" for serial lines. o The device type gets displayed in the total statictics. Syntax: dtype=string Sets the device type. idtype=string Sets the input device type. odtype=string Sets the output device type. The Valid Device Types Are: audio comm disk graphics memory mouse network fifo pipe printer processor socket special streams tape terminal unknown Note: Although dt does not provide specific test support for each of the devices shown above, its' design makes it easy to add new device specific tests. Specific support exists for disk, fifo, pipe, tape, and terminals. Support for "ptys" may be added in the future as well. Page 8 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 4.13 Error Limit "errors=" Option. This option controls the maximum number of errors tolerated before the program exits. Special Notes: o The default error limit is 1. o All errors have a time stamp associated with them, which may be useful for characterizing intermittent error conditions. o The error limit is adjusted for read, write, or data compare failures. This limit is not enforced when flushing data, or for certain AIO wait operations which are considered non- fatal (perhaps this will change). o A future release may support an "onerr=" option to control the action of errors (e.g., loop, ignore (continue), or exit). Syntax: errors=value The number of errors to tolerate. 4.14 File Limit "files=" Option. This option controls the number of tape files to process with tape devices. Special Notes: o During the write pass, a tape file mark is written after each file. After all files are written, 1 or 2 file marks will be written automatically by the tape driver when the device is closed. o During reads, each file is expected to be terminated by a file mark and read() system calls are expected to return a value of 0 denoting the end of file. When reading past all tapes files, an errno of ENOSPC is expected to flag the end of media condition. o Writing tape file marks is currently not supported on the QNX Operating System. The release I currently have does not support the mtio commands, and unfortunately the POSIX stan- dard does not define this interface (the mtio interface appears to be a UNIX specific standard). Multiple tape files can still be read on QNX systems however. Syntax: files=value Set number of tape files to process. Page 9 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 4.15 Terminal Flow Control "flow=" Option. This option specifies the terminal flow control to use dur- ing testing. Special Notes: o The default flow control is "xon_xoff". o When using XON/XOFF flow control, you must make sure these byte codes (Ctrl/Q = XON = '\021', Ctrl/S = XOFF = '\023), since the program does not filter these out automatically. Also be aware of terminal servers (e.g., LAT), or modems (e.g., DF296) which may eat these characters. o Some serial lines do not support clear-to-send (CTS) or request-to-send (RTS) modem signals. For example on Alpha Flamingo machines, only one port (/dev/tty00) supports full modem control, while the alternate console port (/dev/tty01) does not. Therefore, if running loopback between both ports, you can not use cts_rts flow control, the test will hang waiting for these signals to transition (at least, I think this is the case). Syntax: flow=type Set flow to: none, cts_rts, or xon_xoff. 4.16 Record Increment "incr=" Option. This option controls the bytes incremented when testing variable length records. After each record, this increment value (default 1), is added to the last record size (starting at "min=", up to the maximum record size "max="). Special Notes: o If variable length record testing is enabled on fixed block disks and this option is omitted, then "incr= defaults to 512 bytes. Syntax: incr=value Set number of record bytes to increment. 4.17 I/O Mode "iomode=" Option. This option controls the I/O mode used, either copy, test, or verify modes. The copy option was added to do a byte for byte copy between devices, while skipping bad blocks and keeping file offsets on both disks in sync. I've used this option to (mostly) recover my system disk which developed bad blocks which could not be re-assigned. A verify operation automatically occurs after Page 10 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 the copy, which is real handy for unreliable diskettes. Syntax: iomode=mode Set I/O mode to: {copy, test, or verify}. 4.18 I/O Type "iotype=" Option. This option controls the type of I/O performed, either ran- dom or sequential. The default is to do sequential I/O. Special Notes: o The random number generator used is chosen by defines: RAND48 to select srand48()/lrand48(), RANDOM to select srandom()/random(), and if neither are defined, srand()/rand() gets used by default. Refer to your system literature or manual pages to determine which functions are supported. Syntax: iotype=type Set I/O type to: {random or sequential}. The seeks are limited to the data limited specified or calculated from other options on the dt command line. If data limits are not specified, seeks are limited to the size of existing files, or to the entire media for disk devices (calculated automatically by dt). If the data limits exceed the capacity of the media/partition/file under test, a premature end-of-file will be encountered on reads or writes, but this is treated as a warning (expected), and not as an error. 4.19 Minimum Record Size "min=" Option. This option controls the minimum record size to start at when testing variable length records. Special Notes: o By default, dt tests using fixed length records of block size "bs=" bytes. o This option, in conjuntion with the "max=" & "incr=" control variable length record sizes. o If variable length record testing is enabled on fixed block disks and this option is omitted, then "min= defaults to 512 bytes. Syntax: min=value Set the minumum record size to transfer. Page 11 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 4.20 Maxmimum Record Size "max=" Option. The option controls the maximum record size during variable length record testing. Special Notes: o If the "min=" option is specified, and this option is omit- ted, then the maximum record size is set to the block size "bs=". o This option, in conjuntion with the "min=" & "incr=" control variable length record sizes. Syntax: max=value Set the maximum record size to transfer. 4.21 Logical Block Address "lba=" Option. This option sets the starting logical block address used with the lbdata option. When specified, the logical block data (enable=lbdata) option is automatically enabled. Syntax: lba=value Set starting block used w/lbdata option. Special Notes: o Please do not confuse this option with the disks' real logi- cal block address. See dt's "seek=" or "position=" options to set the starting file position. o Also note that dt doesn't know about disk partitions, so any position specified is relative to the start of the partition used. 4.22 Logical Block Size "lbs=" Option. This option sets the starting logical block size used with the lbdata option. When specified, the logical block data (enable=lbdata) option is automatically enabled. Syntax: lbs=value Set logical block size for lbdata option. Page 12 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 4.23 Data Limit "limit=" Option. This option specifies the number of data bytes to transfer during each write and/or read pass for the test. Special Notes: o You must specify either a data limit, record limit, or files limit to initiate a test, unless the device type is "disk", in which case dt will automatically determine the disk capa- city. o When specifying a runtime via the "runtime=" option, the data limit controls how many bytes to process for each pass (write and/or read pass). o If you specify a infinite "limit=Inf" value, each pass will continue until the end of media or file is reached. Syntax: limit=value The number of bytes to transfer. 4.24 Munsa (DLM) "munsa=" Option. This option is used on Tru64 Cluster systems to specify various distributed lock manager (DLM) options with devices or files. Syntax: munsa=string Set munsa to: cr, cw, pr, pw, ex. MUNSA Lock Options: cr = Concurrent Read (permits read access, cr/pr/cw by others) pr = Protected Read (permits cr/pr read access to all, no write) cw = Concurrent Write (permits write and cr access to resource by all) pw = Protected Write (permits write access, cr by others) ex = Exclusive Mode (permits read/write access, no access to others) For more details, please refer to the dlm(4) reference page. Special Notes: o MUNSA is an obsolete Tru64 Cluster term which meant MUltiple_Node Simultaneous_Access. The new term is DAIO for Direct_Access_I/O. Page 13 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 4.25 Common Open Flags "flags=" Option. 4.26 Output Open Flags "oflags=" Option. These options are used to specify various POSIX compliant open flags, and system specific flags, to test the affect of these open modes. Special Notes: o Each operating system has different flags, which can be queried by reviewing the dt help text ("dt_help"). Syntax: flags=flags Set open flags: {excl,sync,...}. oflags=flags Set output flags: {append,trunc,...}. 4.27 On Child Error "oncerr=" Option. This option allows you to control the action taken by dt when a child process exits with an error. By default, the action is continue, which allows all child processes to run to comple- tion. If the child error action is set to abort, then dt aborts all child processes if any child process exits with an error status. Syntax: oncerr={abort|continue} Set child error action. 4.28 Terminal Parity Setting "parity=" Option. This option specifies the terminal parity setting to use during testing. Syntax: parity=string Set parity to: even, odd, or none. on QNX parity=string Set parity to: even, odd, mark, space, or none. 4.29 Pass Limit "passes=" Option. This option controls the number of passes to perform for each test. Special Notes: o The default is to perform 1 pass. Page 14 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 o When using the "of=" option, each write/read combination is considered a single pass. o When multiple passes are specified, a different data pattern is used for each pass, unless the user specified a data pat- tern or pattern file. [ Please keep this in mind when using the "dispose=keep" option, since using this same file for a subsequent dt read verify pass, will report comparison errors... I've burned myself this way. ] Syntax: passes=value The number of passes to perform. 4.30 Data Pattern "pattern=" Option. This option specifies a 32 bit hexadecimal data pattern to be used for the data pattern. dt has 12 built-in patterns, which it alternates through when running multiple passes. The default data patterns are: 0x39c39c39, 0x00ff00ff, 0x0f0f0f0f, 0xc6dec6de, 0x6db6db6d, 0x00000000, 0xffffffff, 0xaaaaaaaa, 0x33333333, 0x26673333, 0x66673326, 0x71c7c71c You can also specify the special keyword "incr" to use an incre- menting data pattern, or specify a character string (normally contained within single or double quotes). Syntax: pattern=value The 32 bit hex data pattern to use. or pattern=iot Use DJ's IOT test pattern. or pattern=incr Use an incrementing data pattern. or pattern=string The string to use for the data pattern. So, what is DJ's IOT test pattern? This pattern places the logi- cal block address (lba) in the first word (4 bytes) of each block, with (lba+=0x01010101) being placed in all remaining words in the data block (512 bytes by default). In this way, the logi- cal block is seeded throughout each word in the block. When specifying a pattern string via "pattern=string", the following special mapping occors: Pattern String Mapping: \\ = Backslash \a = Alert (bell) \b = Backspace \f = Formfeed \n = Newline \r = Carriage Return \t = Tab \v = Vertical Tab \e or \E = Escape \ddd = Octal Value \xdd or \Xdd = Hexadecimal Value Page 15 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 4.31 File Position "position=" Option. This option specifies a byte offset to seek to prior to starting each pass of each test. Syntax: position=offset Position to offset before testing. 4.32 Multiple Processes "procs=" Option. This option specifies the number of processes to initiate performing the same test. This option allows an easy method for initiating multiple I/O requests to a single device or file sys- tem. Special Notes: o The per process limit on Tru64 UNIX is 64, and can be queried by using the "sysconfig_-q_proc" command. o Spawning many processes can render your system useless, well at least very slow, and consumes large amounts of swap space (make sure you have plenty!). o The parent process simply monitors (waits for) all child prcoesses. o When writing to a file system, the process ID (PID) is appending to the file name specified with the "of=" option to create unique file names. o The spawn() facility, used to execute on a different node, is not implemented on the QNX Operating System at this time. Syntax: procs=value The number of processes to create. 4.33 Random I/O Offset Alignment "ralign=" Option. This option is used when performing random I/O, to align each random block offset to a particular alignment, for example 32K. Syntax: ralign=value The random I/O offset alignment. Page 16 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 4.34 Random I/O Data Limit "rlimit=" Option. This option is used with random I/O to specify the number of bytes to limit random I/O between (starting from block 0 to this range). This option is independent of the data limit option. Syntax: rlimit=value The random I/O data byte limit. 4.35 Random Seed Value rseed=" Option. This options sets the seed to initialize the random number generator with, when doing random I/O. When selecting random I/O, the total statistics displays the random seed used during that test. This option can be used to repeat the random I/O sequence of a test. Syntax: rseed=value The random seed to initialize with. 4.36 Record Limit "records=" Option. This option controls the number of records to process for each write and/or read pass of each test. The "count=" option is an alias for this option (supported for dd compatibility). Special Notes: o You must specify either a data limit, record limit, or files limit to initiate a test, unless the device type is "disk", in which case dt will automatically determine the disk capa- city. o When specifying a runtime via the "runtime=" option, the record limit controls how many records process for each pass (write and/or read pass). o If you specify a infinite "records=Inf" value, each pass will continue until the end of media or file is reached. Syntax: records=value The number of records to process. Page 17 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 4.37 Run Time "runtime=" Option. This option controls how long the total test should run. When used in conjunction with a data limit or record limit, mul- tiple passes will be performed until the runtime limit expires. A later section entitled "Time_Input_Parameters", describes the shorthand notation for time values. Syntax: runtime=time The number of seconds to execute. 4.38 Record Skip "skip=" Option. This option specifies the numer of records to skip prior to starting each write and/or read pass of each test. The skips are accomplished by reading records. Syntax: skip=value The number of records to skip past. 4.39 Record Seek "seek=" Option. This option specifies the number of records to seek past prior to starting each write and/or read test. The seeks are accomplished by lseek()'ing past records, which is much faster than skipping when using random access devices (dd could use this option). Syntax: seek=value The number of records to seek past. 4.40 Data Step "step=" Option. This option is used to specify non-sequential I/O requests to random access devices. Normally, dt does sequential read & writes, but this option specifies that step bytes be seeked past after each request. Syntax: step=value The number of bytes seeked after I/O. 4.41 Terminal Speed "speed=" Option. This option specifies the terminal speed (baud rate) to setup prior to initiating the test. Although dt supports all valid baud rates, some speeds may not be supported by all serial line drivers, and in some cases, specifying higher speeds may Page 18 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 result in hardware errors (e.g., silo overflow, framing error, and/or hardware/software overrun errors). The valid speeds accepted by dt are: 0 50 75 110 134 150 200 300 600 1200 1800 2400 4800 9600 19200 38400 57600 115200 Although a baud rate of zero is accepted, this is done mainly for testing purposes (some systems use zero to hangup modems). The higher baud rates are only valid on systems which define the Bxxxxx speeds in termios.h. Special Notes: o The default speed is 9600 baud. Syntax: speed=value The tty speed (baud rate) to use. 4.42 Terminal Read Timeout "timeout=" Option. This option specifies the timeout to use, in 10ths of a second, when testing terminal line interfaces. This is the timeout used between each character after the first character is received, which may prevent tests from hanging when a character is garbled and lost. Special Notes: o The default terminal timeout is 3 seconds. o The default timeout is automatically adjusted for slow baud rates. Syntax: timeout=value The tty read timeout in .10 seconds. 4.43 Terminal Read Minimum "ttymin=" Option. This option specifies the minmum number of characers to read, sets the VMIN tty attribute. Special Notes: o The tty VMIN field normally gets sets to the value of the block size (bs=balue). o Note that on some systems, the VMIN field is an unsigned_char, so the maximum value is 255. Page 19 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 o On QNX, this field is an unsigned_short, so a maximum of 65535 is valid. Syntax: ttymin=value The tty read minimum count (sets vmin). 4.44 Enable "enable=" & Disable disable= Options. These options are used to either enable or disable program flags which either alter default test modes, test actions, or provide additional debugging information. You can specify a sin- gle flag or multiple flags each seperated by a comma (e.g., "enable=aio,debug,dump"). Syntax: enable=flag Enable one or more of the flags below. disable=flag Disable one or more of the flags below. The flags which can be enabled or disabled are described below. 4.44.1 POSIX Asynchronous I/O "aio" Flag. This flag is used to control use of POSIX Asynchronous I/O during testing, rather than the synchronous I/O read() and write() system calls. Special Notes: o This test mode is only supported on the Tru64 UNIX Operating System at this time. o Beware, you may need to rebuild dt on new versions of Tru64 Unix due to POSIX changes and/or AIO library changes between major releases. o Reference the "aios=" option, for more special notes. Flag: aio POSIX Asynchronous I/O.(Default: disabled) 4.44.2 Reporting Close Errors "cerror" Flag. This flag controls where close errors are reported as an error or a failure. When disabled, close errors are reported as a warning. This flag is meant to be used as a workaround for device drivers which improperly return failures when closing the device. Many system utilities ignore close failures, but when testing terminals and tapes, the close status us very important. For example with tapes, the close reflects the status of writing filemarks (which also flush buffered data), and the rewind Page 20 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 status. Flag: cerrors Report close errors. (Default: enabled) 4.44.3 Data Comparison "compare" Flag. This flag disables data verification during the read pass of tests. This flag should be disabled to read to end of file/media to obtain maximum capacity statistics, or to obtain maximum per- formance statistics (less overhead). Flag: compare Data comparison. (Default: enabled) 4.44.4 Core Dump on Errors "coredump" Flag. This flag controls whether a core file is generated, via abort(), when dt is exiting with a failure status code. This is mainly used for program debug, and is not of much interest to normal users. When testing multiple processes, via fork(), this is the only way to debug since the standard dbx debugger can't be used with child processes (this is finally changing in the Tru64 UNIX V2.0 release, we've waited a long time). Flag: coredump Core dump on errors. (Default: disabled) 4.44.5 Diagnostic Logging "diag" Flag. This option is only valid on Tru64 Unix. When enabled, error messages get logged to the binary error logger. This is useful to correlate device error entries with test failures. Please note, the logging only occurs when running as superuser (API restriction, not mine!). Flag: diag Log diagnostic msgs. (Default: disabled) 4.44.6 Debug Output "debug" Flag. Page 21 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 4.44.7 Verbose Debug Output "Debug" Flag. 4.44.8 Random I/O Debug Output "rdebug" Flag. These flags enable two different levels of debug, which are useful when trouble-shooting certain problems (i.e., what is dt doing to cause this failure?). Both flags can be specified for full debug output. Flag: debug Debug output. (Default: disabled) Debug Verbose debug output. (Default: disabled) rdebug Random debug output. (Default: disabled) 4.44.9 Dump Data Buffer "dump" Flag. This flag controls dumping of the data buffer during data comparision failures. If a pattern file is being used, then the pattern buffer is also dumped for easy comparision purposes. To prevent too many bytes from being dumped, esp. when using large block sizes, dumping is limited to 64 bytes of data. Special Notes: o When the failure occurs within the first 64 bytes of the buffer, dumping starts at the beginning of the buffer. o When the failure occurs at some offset within the data buffer, then dumping starts at (data limit/2) bytes prior to the failing byte to provide context. o The start of the failing data is marked by an asterisk '*'. o You can use the dlimit= option to override the default dump limit. o Buffer addresses are displayed for detection of memory boun- dary problems. Flag: dump Dump data buffer. (Default: enabled) 4.44.10 Tape EEI Reporting "eei" Flag. This option controls the reporting of Extended Error Infor- mation (EEI) on Tru64 UNIX systems, for tape devices when errors occur. The standard tape information available from mt is reported, along with the EEI status, CAM status, and SCSI request sense data. This is excellent information to help diagnose tape failures. (thank-you John Meneghini!) Flag: Page 22 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 eei Tape EEI reporting. (Default: enabled) 4.44.11 Tape Reset Handling "resets" Flag. This option is used during SCSI bus and device reset test- ing, to reposition the tape position (tapes rewind on resets), and to continue testing. This option is only enabled for Tru64 UNIX systems (currently), since this option requires reset detec- tion from EEI status, and tape position information from the CAM tape driver (although dt also maintains the tape position as a sanity check against the drivers' data). Flag: resets Tape reset handling. (Default: disabled) 4.44.12 Flush Terminal I/O Queues "flush" Flag. This flag controls whether the terminal I/O queues get flushed before each test begins. This must be done to ensure no residual characters are left in the queues from a prior test, or else data verification errors will be reported. Residual charac- ters may also be left from a previous XOFF'ed terminal state (output was suspended). Flag: flush Flush tty I/O queues. (Default: enabled) 4.44.13 Log File Header "header" Flag. When a log file is specified, dt automatically writes the command line and dt version information at the beginning of the log file. This option allows you to control whether this header should be written. Flag: header Log file header. (Default: enabled) 4.44.14 Logical Block Data Mode "lbdata" Flag. This option enables a feature called logical block data mode. This feature allows reading/writing of a 4-byte (32-bit) logical block address at the beginning of each data block tested. The block number is stored using SCSI byte ordering (big-endian), which matches what the SCSI Write Same w/lbdata option uses, so dt can verify this pattern, generated by scu's "write same" com- mand. Page 23 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 Special Notes: o The starting logical block address defaults to 0, unless overridden with the "lba=" option. o The logical block size defaults to 512 bytes, unless over- ridden with the "lbs=" option. o The logical block address is always inserted started at the beginning of each data block (record). o Enabling this feature will degrade performance statistics (slightly). 4.44.15 Enable Loopback Mode "loopback" Flag. This flag specifies that either the input or output file should be used in a loopback mode. In loopback mode, dt forks(), and makes the child process the reader, while the parent process becomes the writer. In previous versions of dt, you had to specify both the same input and output file to enable loopback mode. When specifying this flag, dt automatically duplicates the input or output device, which is a little cleaner than the old method (which still works). Some people may argue that dt should automatically enable loopback mode when a single terminal or FIFO device is detected. The rationale behind not doing this is described below: 1. You may wish to have another process as reader and/or writer (which also includes another program, not necessarily dt). 2. You may wish to perform device loopback between two systems (e.g., to verify the terminal drivers of two operating sys- tems are compatible). 3. A goal of dt is not to force (hardcode) actions or options to make the program more flexible. A minimum of validity checking is done to avoid being too restrictive, although hooks exists to do this. Special Notes: o The read verify flag is automatically disabled. o This mode is most useful with terminal devices and/or FIFO's (named pipes). 4.44.16 Microsecond Delays "microdelay" Flag. This flag tells dt that delay values, i.e. "sdelay=" and others, should be executed using microsecond intervals, rather the second intervals. (thank-you George Bittner for implementing this support!) Flag: microdelay Microsecond delays. (Default: disabled) Page 24 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 4.44.17 Memory Mapped I/O "mmap" Flag. This flag controls whether the memory mapped API is used for testing. This test mode is currently supported on SUN/OS, Tru64 UNIX, and Linux operating systems. Special Notes: o The block size specified "bs=" must be a multiple of the system dependent page size (normally 4k or 8k). o An msync() is done after writing and prior to closing to force modified pages to permanent storage. It may be useful to add an option to inhibit this action at some point, but my testing was specifically to time mmap performance. Obvi- ously, invalidating the memory mapped pages, kind of defeats the purpose of using memory mapped files in the first place. o Specifying multiple passes when doing a read verify test, gives you a good indication of the system paging utilization on successive passes. o Memory mapping large data files (many megabytes) may exhaust certain system resources. On an early version of SUN/OS V4.0?, I could hang my system by gobbling up all of physical memory and forcing paging (this was certainly a bug which has probably been corrected since then). Flag: mmap Memory mapped I/O. (Default: disabled) 4.44.18 Test Modem Lines "modem" Flag. This flag controls the testing of terminal modem lines. Normally, dt disables modem control, via setting CLOCAL, to prevent tests from hanging. When this flag is enabled, dt enables modem control, via clearing CLOCAL, and then monitoring the modem signals looking for either carrier detect (CD) or dataset ready (DSR) before allowing the test to start. Special Notes: o The program does not contain modem signal monitoring func- tions for the all operating systems. The functions in dt are specific to Tru64 UNIX and ULTRIX systems, but these can be used as templates for other operating systems. Flag: modem Test modem tty lines. (Default: disabled) ,nh 3 Multiple Volumes "multi" Flag. This flag controls whether multiple volumes are used during testing. When this flag is enabled, if the data limit or record count specified does not fit Page 25 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 on the current loaded media, the user is prompted to insert the next media to continue testing. Although this is used mostly with tape devices, it can be used with any removeable media. Flag: multi Multiple volumes. (Default: disabled) 4.44.19 Control Per Pass Statistics "pstats" Flag. This flag controls whether the per pass statistics are displayed. If this flag is disabled, a single summary line is still displayed per pass and the total statistics are still displayed in the full format. Flag: pstats Per pass statistics. (Default: enabled) 4.44.20 Read After Write "raw" Flag. This flag controls whether a read-after-write will be per- formed. Sorry, raw does not mean character device interface. Normally dt performs a write pass, followed by a read pass. When this flag is enabled the read/verify is done immediately after the write. Flag: raw Read after write. (Default: disabled) 4.44.21 Control Program Statistics "stats" Flag. This flag controls whether any statistics get displayed (both pass and total statistics). Disabling this flag also dis- abled the pass statistics described above. Flag: stats Display statistics. (Default: enabled) 4.44.22 Table(sysinfo) timing "table" Flag. On Tru64 UNIX systems, this option enables additional timing information which gets reported as part of the statistics display. (thanks to Jeff Detjen for adding this support!) Flag: table Table(sysinfo) timing. (Default: disabled) Page 26 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 4.44.23 Verbose Output "verbose" Flag. This flag controls certain informational program messages such as reading and writing partial records. If you find these messages undesirable, then they can be turned off by disabling this flag. Flag: verbose Verbose output. (Default: enabled) 4.44.24 Verify Data "verify" Flag. This flag controls whether the read verify pass is performed automatically after the write pass. Ordinarily, when specifying an output device via the "of=" option, a read verify pass is done to read and perform a data comparision. If you only wish to write the data, and omit the data verification read pass, then disable this flag. Flag: verify Verify data written. (Default: enabled) Special Notes: o If you don't plan to ever read the data being written, perhaps for performance reasons, specifying "disable=compare" prevents the data buffer from being ini- tialized with a data pattern. o This verify option has no affect when reading a device. You must disable data comparsions via "disable=compare". 4.45 Program Delays. dt allows you to specify various delays to use at certain points of the test. These delays are useful to slow down I/O requests or to prevent race conditions when testing terminals devices with multiple processes, or are useful for low level driver debugging. All delay values are in seconds, unless you specify "enable=microdelay", to enable micro-second delays. 4.45.1 Close File "cdelay=" Delay. This delay, when enabled, is performed prior to closing a file descriptor. Delay cdelay=value Delay before closing the file. (Def: 0) Page 27 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 4.45.2 End of Test "edelay=" Delay. This delay, when enabled, is used to delay after closing a device, but prior to re-opening the device between multiple passes. Delay edelay=value Delay between multiple passes. (Def: 0) 4.45.3 Read Record "rdelay=" Delay. This delay, when enabled, is used prior to issuing each read request (both synchronous read()'s and asynchronous aio_read()'s). Delay rdelay=value Delay before reading each record. (Def: 0) 4.45.4 Start Test "sdelay=" Delay. This delay, when enabled, is used prior to starting the test. When testing terminal devices, when not in self loopback mode, the writing process (the parent) automatically delays 1 second, to allow the reading process (the child) to startup and setup its' terminal characteristics. If this delay did not occur prior to the first write, the reader may not have its' terminal characteristics (flow, parity, & speed) setup yet, and may inad- vertantly flush the writers data or receive garbled data. Delay sdelay=value Delay before starting the test. (Def: 0) 4.45.5 Child Terminate "tdelay=" Delay. This delay is used by child processes before exiting, to give the parent process sufficient time to cleanup and wait for the child. This is necessary since if the child exits first, a SIGCHLD signal may force the parent to it's termination signal handler before it's ready to. This is a very simplistic approach to prevent this parent/child race condition and is only currently used by the child for terminal loopback testing. Delay tdelay=value Delay before child terminates. (Def: 1) Page 28 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 4.45.6 Write Record "wdelay=" Delay. This delay, when enabled, is used prior to issuing each write request (both synchronous write()'s and asynchronous aio_write()'s). Delay wdelay=value Delay before writing each record. (Def: 0) 4.46 Numeric Input Parameters For any options accepting numeric input, the string entered may contain any combination of the following characters: Special Characters: w = words (4 bytes) q = quadwords (8 bytes) b = blocks (512 bytes) k = kilobytes (1024 bytes) m = megabytes (1048576 bytes) p = page size (8192 bytes) g = gigabytes (1073741824 bytes) t = terabytes (1099511627776 bytes) inf or INF = infinity (18446744073709551615 bytes) Arithmetic Characters: + = addition - = subtraction * or x = multiplcation / = division % = remainder Bitwise Characters: ~ = complement of value >> = shift bits right << = shift bits left & = bitwise 'and' operation | = bitwise 'or' operation ^ = bitwise exclusive 'or' The default base for numeric input is decimal, but you can over- ride this default by specifying 0x or 0X for hexadecimal cover- sions, or a leading zero '0' for octal conversions. NOTE: Certain values will vary depending on the operating system and/or machine you are running on. For example, the page size is system dependent, and the value for Infinity is the largest value that will fit into an unsigned long (value shown above is for 64-bit systems), or double for systems which don't support "long long".) 4.47 Time Input Parameters. When specifying the run time "runtime=" option, the time string entered may contain any combination of the following char- acters: Page 29 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 Time Input: d = days (86400 seconds), h = hours (3600 seconds) m = minutes (60 seconds), s = seconds (the default) Arithmetic characters are permitted, and implicit addition is performed on strings of the form '1d5h10m30s'. 5 Future Enhancements. Although many system dependent tests could be added to dt, my preference is to add tests for features standard on most sys- tems. I have to admit though, recently I've added many Tru64 UNIX features, required for advanced testing. There's alot of dt features and flags nowadays, so maybe I'll add an initialization file (.dtrc) to control certain defaults. We'll see. A future release may permit dt to support multiple devices simlutaneously, and permit dynamic modification of test parame- ters and obtaining snap-shot statistics. This will require an extensive re-write though, so this isn't likely to happen too soon. I'd like dt to be like the RSX-11M iox program, which was really nifty. But of course, an operating system which supports asynchronous I/O and event notification, makes this much easier. Lots of people prefer window based applications nowadays. If I get around to this, it'll probably be a Tcl/Tk/Wish wrapper, or something that will run with your favorite browser. I like this latter idea for implementing remote testing. A native Windows/NT version will most likely come about one day, unless Cygnus Solutions implements POSIX AIO and Alpha hardware in a future release, or Microsoft releases better POSIX API support. There's a fair amount of work necessary to do extensive tape testing, due to the number of special tape commands (both stan- dard and optional), and differences between tape vendors and operating system API's. I'm also considering writing a script processor, kinda like a maintenance program generator, to help with this effort so cus- tomized tests can be written, but perhaps this is best done with existing tools available (I'm not into reinventing the wheel). Page 30 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 6 Final Comments. I'm happy to report that dt is getting wide spread use here at Compaq. The storage groups, terminal/lat groups, Q/A, developers, and other peripheral qualification groups are all using dt as part of their testing (just when I was about to give up on this place... maybe there's hope yet :-). Anyways, I hope you find dt as useful as I have. This is usually one of the first tools I port to a new operating system, since it's an excellent diagnostic and performance tool (it gives me a warm and fuzzy feeling). Please send me mail on any problems or suggestions you may have, and I'll try to help you out. The future development of dt depends alot on user interest. Many of dt's features have come about from user requests. ____________________________ If You Like My Work, You Can Do One Of Two Things: THROW MONEY or APPLAUD* *I've Heard Enough Applause! ____________________________ Page 31 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 APPENDIX A dt Help Text The following help text is contained within the dt program. The newest features are highlighted below, as well as previous features for reference by former/existing dt users. The following changes have been made to 'dt' Version 12.0: o Support for tape Extended Error Information (EEI) and SCSI bus or device reset recovery has been added (to reposition the tape). The EEI support is enabled by default, but the reset support is disabled by default (to avoid breaking existing test scripts). The reset option can also be used w/POSIX Asynchronous I/O (AIO). NOTE: EEI support is Digi- tal UNIX specific (MTIOCGET extension). [ Use the "enable/disable={eei,resets}" option to control these. ] o The logical block data feature, "enable=lbdata" option, has been extended so it can be used with random I/O, "iotype=random" option. o Two new options were added for better range control of ran- dom I/O. The "ralign=value" option forces block alignment to a byte offset. For example, "ralign=32b" aligns each random request to 32 blocks. The "rlimit=value" option contols the upper random I/O data limit. If rlimit isn't specified, it defaults to the data limit, or to the entire disk if no limits are specified. o Changes to cluster DLM code were merged from work by George Bittner. George also enhanced the random I/O code so the random number is taken as a block, rather than a byte offset, which provides better randomness for large disks or files. (Thanks George!) o Other changes and/or bug fixes: - When specifying a runtime, ensure we break out of the passes loop if we exceed the error limit. Previously, we'd loop (possibly with error) for the duration of the runtime. - Fix incorrect record number displayed when Debug is enabled. - Don't exit read/write loops when processing partial records. - Fix problem in write function, where short write processing, caused us not to write sufficent data bytes (actually, the file loop in write_file() caused dtaio_write_data() to be called again, and we'd actually end up writing too much! - When random I/O and lbdata options are both enabled, use the Page 32 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 file offset seeked to as the starting lbdata address. - Fix problem reporting total files processed count when we have not completed a pass (exiting prematurely due to error or signal). o dt compiles and runs on MS Windows 95/98/NT using Cygnus Solution GNU tools. Use Makefile.win32 for compiling on Windows. [ a.k.a. GNU-Win32, URL: http://sourceware.cygnus.com/cygwin/ ] o When directing output to a log file, "log=LogFile" option, the command line and version string are also emitted. o The number of I/O per second are now reported in statistics. o For Linux and Windows/NT, larger data/record limits and statistics are now possible using either "long long" or "double" storage. o A new data pattern option was added "pattern=iot", which encoded the logical block address throughout each word in the data block. Thanks to DJ Brown for this logic from IOT. The following changes have been made to dt Version 9.0: o Fixed a problem checking pad bytes when doing long reads of short records (this was discovered by someone testing tapes). o For systems which support higher serial line speeds, you can now select baud rates of 57600, 76800, and 115200. Platinum (ptos) now supports 57600 and 115200 (thank-you Dennis Paradis). o Added the ability to read/write blocks using logical block data (lbdata) option. While this new feature was added specifically as a counterpart to the SCSI Write Same (disks) lbdata option, this option can be used with any device and/or data stream. What is Logical Block Data (lbdata) Format? This feature allows reading/writing of a 4-byte (32-bit) logical block address at the beginning of each data block tested. At the present time, the block number is stored using SCSI byte ordering (big-endian), which matchs what the SCSI Write Same command does. Several new 'dt' options have been added for this feature: lba=value Set starting block used w/lbdata option. lbs=value Set logical block size for lbdata option. [ ...as well as... ] enable=lbdata Logical block data. (Default: disabled) If this feature is enabled without specifying other options, the block size (lbs) defaults to 512, and the starting block Page 33 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 address (lba) defaults to 0. Specifying "lba=" or "lbs=" options implicitly enables the "lbdata" feature. NOTES: The logical block number is *always* inserted start- ing at the beginning of each data block, not every "lbs" bytes (WRT to variable length opts). Also, the block number overwrites what the previous pattern bytes would have been (again matching the SCSI Write Same method). Also, enabling this feature will cause a degradation in performance statis- tics. If people would like an option to have the logical block stored in little-endian format, I'll consider adding an option *if* requested. Of course, the data verification routines have been modified to verify the logical block number matches the expected, and reports any mis-matches. o For disk devices, the "min=" and "incr=" values now default to 512, when variable length transfers are requested (previ- ously defaulted to 1 which was great for tapes, but not so good for block devices). [ A future version of 'dt' will obtain the device block size via the new DEVGETINFO ioctl() now available in Platinum (ptos). ] o Removed "enable=ade" (Address Data Exception) test option. This was used to test kernel unaligned data exception fix- ups, but it's seldom (if ever) used, and it's time to cleanup code. o Added "ttymin=" option for setting the VMIN value for serial line testing. Also fixed problem where VMIN got set incorrectly if the block size was greater than 255 (VMIN is a u_char on Tru64 Unix). New Features in dt Version 8.0: o On compare errors, data dumping now occurs by default. The "dlimit=value" option can be used to override the default dump limit of 64 bytes (use "disable=dump" to turn dumping off). o On compare errors, the relative block number is reported for disk devices (see example below). o The "align=rotate" option is now effective when selecting AIO testing (was being ignored before). Also corrected AIO end of media error handling (wasn't done consistently). o Added "oncerr={abort|continue}" option to control child pro- cess errors. By default, 'dt' waits for all child processes to exit, regardless of whether an error is detected. When "oncerr=abort" is specified, 'dt' aborts all child prcoesses when _any_ child exits with an error status (effectively a Page 34 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 halt on error). o Added special mapping of pattern strings as shown below: Pattern String Input: \\ = Backslash \a = Alert (bell) \b = Backspace \f = Formfeed \n = Newline \r = Carriage Return \t = Tab \v = Vertical Tab \e or \E = Escape \ddd = Octal Value \xdd or \Xdd = Hexadecimal Value o Minor changes were made to allow modem control testing to work. Normally, 'dt' disables modem control (aka "stty local"), but specifying "enable=modem" sets modem control (aka "stty -local"), On Tru64 UNIX systems, asserted modem signals get displayed at start of test, when debug is enabled. NOTE: Ensure the cable used for testing supports modem sig- nals (DSR, CD, CTS, & RTS) or loss of data or partial reads may occur, especially at high speeds. The terminal driver may simply block read/write requests waiting for assertion of certain modem signals. o The "Total Statistics" report has been enhanced to display the pattern string "pattern=string" or the pattern file size "pf=" when these options are used. o This version of dt, was also ported to Sun's Solaris. New Features in dt Version 7.0: "procs=" To initiate multiple processes. "files=" To process multiple tape files. "step=" To force seeks after disk I/O. "runtime=" To control how long to run. "enable=aio" To enable POSIX Asynchronous I/O. "aios=value" To set POSIX AIO's to queue (default 8). "align=rotate" To rotate data address through sizeof(ptr). "pattern=incr" To use an incrementing data pattern. "min=" To set the minimum record size. "max=" To Set the maximum record size. "incr=" To set the record bytes to increment. The "procs=" option is useful for load testing, and testing buffer cache, driver, and controller optimizations. The "files=" option is useful for verifying tape drivers properly report and reset file marks, end of recorded media, and end of tape condi- tions. The "step=" option is useful to cause non-sequential disk access, but "iotype=random" can also be used. The "min=", "max=", and "incr=" options are used for variable length records. In addition to these options, errors now have a timestamp associ- ated with them, and the program start and end times are displayed Page 35 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 in the total statistics. There are also several useful scripts I've developed which use dt for testing. These script resides in the ~rmiller/utils/dt directory along with the source code and pat- tern files required for testing with the RRD TEST DISC. A short overview of these scripts is described below: o dta - For testing asynchronous terminal lines. o dtc - Test the RRD40/42 using the RRD TEST DISC. o dtf - For testing floppy drives. o dtt - For testing tape devices. o dtr - To read data patterns written by 'dtw'. o dtw - Writes the data pattens obtained from the RRD TEST DISC. These pattern files are named pattern_[0-9]. A common script could be developed to replace most of the existing scripts, but I haven't taken the time to do this yet. These scripts can be used as templates for developing specialized test scripts. NOTE: The scripts are written to use the C-shell csh, but work just fine with the public domain tcsh. On my QNX system, I just created a link from tcsh to csh and the scripts ran without any problems. % dt help Usage: dt options... Where options are: if=filename The input file to read. of=filename The output file to write. pf=filename The data pattern file to use. bs=value The block size to read/write. log=filename The log file name to write. munsa=string Set munsa to: cr, cw, pr, pw, ex. aios=value Set number of AIO's to queue. align=offset Set offset within page aligned buffer. or align=rotate Rotate data address through sizeof(ptr). dispose=mode Set file dispose to: {delete or keep}. dlimit=value Set the dump data buffer limit. dtype=string Set the device type being tested. idtype=string Set input device type being tested. odtype=string Set output device type being tested. errors=value The number of errors to tolerate. files=value Set number of tape files to process. flow=type Set flow to: none, cts_rts, or xon_xoff. incr=value Set number of record bytes to increment. iomode=mode Set I/O mode to: {copy, test, or verify}. Page 36 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 iotype=type Set I/O type to: {random or sequential}. min=value Set the minumum record size to transfer. max=value Set the maximum record size to transfer. lba=value Set starting block used w/lbdata option. lbs=value Set logical block size for lbdata option. limit=value The number of bytes to transfer. flags=flags Set open flags: {excl,sync,...} oflags=flags Set output flags: {append,trunc,...} oncerr=action Set child error action: {abort or continue}. parity=string Set parity to: {even, odd, or none}. passes=value The number of passes to perform. pattern=value The 32 bit hex data pattern to use. or pattern=iot Use DJ's IOT test pattern. or pattern=incr Use an incrementing data pattern. or pattern=string The string to use for the data pattern. position=offset Position to offset before testing. procs=value The number of processes to create. ralign=value The random I/O offset alignment. rlimit=value The random I/O data byte limit. rseed=value The random seed to initialize with. records=value The number of records to process. runtime=time The number of seconds to execute. skip=value The number of records to skip past. seek=value The number of records to seek past. step=value The number of bytes seeked after I/O. speed=value The tty speed (baud rate) to use. timeout=value The tty read timeout in .10 seconds. ttymin=value The tty read minimum count (sets vmin). enable=flag Enable one or more of the flags below. disable=flag Disable one or more of the flags below. Flags to enable/disable: aio POSIX Asynchronous I/O.(Default: disabled) cerrors Report close errors. (Default: enabled) compare Data comparison. (Default: enabled) coredump Core dump on errors. (Default: disabled) debug Debug output. (Default: disabled) Debug Verbose debug output. (Default: disabled) rdebug Random debug output. (Default: disabled) diag Log diagnostic msgs. (Default: disabled) dump Dump data buffer. (Default: enabled) eei Tape EEI reporting. (Default: enabled) resets Tape reset handling. (Default: disabled) flush Flush tty I/O queues. (Default: enabled) fsync Controls file sync'ing.(Default: runtime) header Log file header. (Default: enabled) lbdata Logical block data. (Default: disabled) loopback Loopback mode. (Default: disabled) microdelay Microsecond delays. (Default: disabled) mmap Memory mapped I/O. (Default: disabled) modem Test modem tty lines. (Default: disabled) Page 37 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 multi Multiple volumes. (Default: disabled) pstats Per pass statistics. (Default: enabled) raw Read after write. (Default: disabled) stats Display statistics. (Default: enabled) table Table(sysinfo) timing. (Default: disabled) ttyport Flag device as a tty. (Default: disabled) verbose Verbose output. (Default: enabled) verify Verify data written. (Default: enabled) Example: enable=debug disable=compare,pstats MUNSA Lock Options: cr = Concurrent Read (permits read access, cr/pr/cw by others) pr = Protected Read (permits cr/pr read access to all, no write) cw = Concurrent Write (permits write and cr access to resource by all) pw = Protected Write (permits write access, cr by others) ex = Exclusive Mode (permits read/write access, no access to others) For more details, please refer to the dlm(4) reference page. Common Open Flags: excl (O_EXCL) Exclusive open. (don't share) ndelay (O_NDELAY) Non-delay open. (don't block) nonblock (O_NONBLOCK) Non-blocking open/read/write. rsync (O_RSYNC) Synchronize read operations. sync (O_SYNC) Sync updates for data/file attributes. Output Open Flags: append (O_APPEND) Append data to end of existing file. defer (O_DEFER) Defer updates to file during writes. dsync (O_DSYNC) Sync data to disk during write operations. trunc (O_TRUNC) Truncate an exisiting file before writing. Delays (Values are seconds, unless microdelay enabled): cdelay=value Delay before closing the file. (Def: 0) edelay=value Delay between multiple passes. (Def: 0) rdelay=value Delay before reading each record. (Def: 0) sdelay=value Delay before starting the test. (Def: 0) tdelay=value Delay before child terminates. (Def: 1) wdelay=value Delay before writing each record. (Def: 0) Numeric Input: For options accepting numeric input, the string may contain any combination of the following characters: Special Characters: w = words (4 bytes) q = quadwords (8 bytes) b = blocks (512 bytes) k = kilobytes (1024 bytes) m = megabytes (1048576 bytes) p = page size (8192 bytes) g = gigabytes (1073741824 bytes) t = terabytes (1099511627776 bytes) Page 38 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 inf or INF = infinity (18446744073709551615 bytes) Arithmetic Characters: + = addition - = subtraction * or x = multiplcation / = division % = remainder Bitwise Characters: ~ = complement of value >> = shift bits right << = shift bits left & = bitwise 'and' operation | = bitwise 'or' operation ^ = bitwise exclusive 'or' The default base for numeric input is decimal, but you can override this default by specifying 0x or 0X for hexadecimal conversions, or a leading zero '0' for octal conversions. NOTE: Evaluation is from right to left without precedence, and parenthesis are not permitted. Pattern String Input: \\ = Backslash \a = Alert (bell) \b = Backspace \f = Formfeed \n = Newline \r = Carriage Return \t = Tab \v = Vertical Tab \e or \E = Escape \ddd = Octal Value \xdd or \Xdd = Hexadecimal Value Time Input: d = days (86400 seconds), h = hours (3600 seconds) m = minutes (60 seconds), s = seconds (the default) Arithmetic characters are permitted, and implicit addition is performed on strings of the form '1d5h10m30s'. Defaults: errors=1, files=0, passes=1, records=0, bs=512, log=stderr pattern=0x39c39c39, flow=xon_xoff, parity=none, speed=9600 timeout=3 seconds, dispose=delete, align=0 (page aligned) aios=8, dlimit=64, oncerr=continue, iomode=test, iotype=sequential --> Date: November 8th, 2000, Version: 13.22, Author: Robin T. Miller <-- % Page 39 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 APPENDIX B dt Examples This section contains various dt examples used to show its' capabilities and to help get new users started. A short descrip- tion prefaces each test to describe the nature of the test being performed. Several of the latter tests, are real life problems which were either uncovered directly by dt, or were easily repro- duced using a specific dt command lines which helps trouble- shooting problems. On Tru64 UNIX systems, next to the device name in the total statistics, you'll notice the device name and device type. This information is obtained by using the DEC specific DEVIOCGET I/O control command. This is very useful for identifying the device under test, especially since performance and various problems are device specific. For non-Tru64 UNIX systems you'll only see the device type displayed, not the real device name, which is setup based on known system dependent device naming conventions (e.g., "/dev/ser" prefix for QNX serial ports, "/dev/cd" or "/dev/scd" prefix for Linux CD-ROM devices). TEST DESCRIPTION: This test does read testing of a raw disk par- tition with data comparisons disabled, using the POSIX Asynchro- nous I/O API (AIO is only supported on Tru64 UNIX at this time). % dt if=/dev/rrz3c bs=8k limit=50m disable=compare enable=aio Total Statistics: Input device/file name: /dev/rrz3c (Device: RZ25, type=disk) Data pattern read: 0x39c39c39 (data compare disabled) Total records processed: 6400 @ 8192 bytes/record (8.000 Kbytes) Total bytes transferred: 52428800 (51200.000 Kbytes, 50.000 Mbytes) Average transfer rates: 2227853 bytes/sec, 2175.637 Kbytes/sec Total passes completed: 1/1 Total errors detected: 0/1 Total elapsed time: 00m23.53s Total system time: 00m01.36s Total user time: 00m00.20s Starting time: Wed Sep 15 12:47:55 1993 Ending time: Wed Sep 15 12:48:18 1993 % Page 40 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 TEST DESCRIPTION: This test does a write/read verify pass of a 50Mb file through the UFS file system, with the file disposition set to "keep", so the test file is not deleted. Normally, dt deletes the test files created before exiting. % dt of=/usr/tmp/x bs=8k limit=50m dispose=keep Write Statistics: Total records processed: 6400 @ 8192 bytes/record (8.000 Kbytes) Total bytes transferred: 52428800 (51200.000 Kbytes, 50.000 Mbytes) Average transfer rates: 1530768 bytes/sec, 1494.891 Kbytes/sec Total passes completed: 0/1 Total errors detected: 0/1 Total elapsed time: 00m34.25s Total system time: 00m03.48s Total user time: 00m06.70s Read Statistics: Total records processed: 6400 @ 8192 bytes/record (8.000 Kbytes) Total bytes transferred: 52428800 (51200.000 Kbytes, 50.000 Mbytes) Average transfer rates: 2243743 bytes/sec, 2191.155 Kbytes/sec Total passes completed: 1/1 Total errors detected: 0/1 Total elapsed time: 00m23.36s Total system time: 00m02.05s Total user time: 00m13.95s Total Statistics: Output device/file name: /usr/tmp/x Data pattern read/written: 0x39c39c39 Total records processed: 12800 @ 8192 bytes/record (8.000 Kbytes) Total bytes transferred: 104857600 (102400.000 Kbytes, 100.000 Mbytes) Average transfer rates: 1819918 bytes/sec, 1777.264 Kbytes/sec Total passes completed: 1/1 Total errors detected: 0/1 Total elapsed time: 00m57.61s Total system time: 00m05.55s Total user time: 00m20.65s Starting time: Wed Sep 15 13:42:05 1993 Ending time: Wed Sep 15 13:43:03 1993 % ls -ls /usr/tmp/x 51240 -rw-r--r-- 1 rmiller system 52428800 Sep 15 13:42 /usr/tmp/x % od -x < /usr/tmp/x 0000000 9c39 39c3 9c39 39c3 9c39 39c3 9c39 39c3 * 310000000 % Page 41 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 TEST DESCRIPTION: This test does a read verify pass of the 50Mb file created in the previous test, using the memory mapped I/O API (mmap is only supported on SUN/OS and Tru64 UNIX at this time). % dt if=/usr/tmp/x bs=8k limit=50m enable=mmap Total Statistics: Input device/file name: /usr/tmp/x Data pattern read: 0x39c39c39 Total records processed: 6400 @ 8192 bytes/record (8.000 Kbytes) Total bytes transferred: 52428800 (51200.000 Kbytes, 50.000 Mbytes) Average transfer rates: 2282821 bytes/sec, 2229.318 Kbytes/sec Total passes completed: 1/1 Total errors detected: 0/1 Total elapsed time: 00m22.96s Total system time: 00m01.13s Total user time: 00m07.73s Starting time: Wed Sep 15 13:49:10 1993 Ending time: Wed Sep 15 13:49:33 1993 % rm /usr/tmp/x % TEST DESCRIPTION: This test does a write/read verify pass to a QIC-320 1/4" tape drive. Please notice the total average transfer rate. This lower rate is caused by the tape rewind per- formed after writing the tape. This rewind time is not included in the write/read times, but is part of the total time. % dt of=/dev/rmt0h bs=64k limit=10m Write Statistics: Total records processed: 160 @ 65536 bytes/record (64.000 Kbytes) Total bytes transferred: 10485760 (10240.000 Kbytes, 10.000 Mbytes) Average transfer rates: 157365 bytes/sec, 153.677 Kbytes/sec Total passes completed: 0/1 Total errors detected: 0/1 Total elapsed time: 01m06.63s Total system time: 00m00.10s Total user time: 00m01.33s Read Statistics: Total records processed: 160 @ 65536 bytes/record (64.000 Kbytes) Total bytes transferred: 10485760 (10240.000 Kbytes, 10.000 Mbytes) Average transfer rates: 194842 bytes/sec, 190.276 Kbytes/sec Total passes completed: 1/1 Total errors detected: 0/1 Total elapsed time: 00m53.81s Total system time: 00m00.08s Page 42 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 Total user time: 00m02.78s Total Statistics: Output device/file name: /dev/rmt0h (Device: TZK10, type=tape) Data pattern read/written: 0x39c39c39 Total records processed: 320 @ 65536 bytes/record (64.000 Kbytes) Total bytes transferred: 20971520 (20480.000 Kbytes, 20.000 Mbytes) Average transfer rates: 115950 bytes/sec, 113.233 Kbytes/sec Total passes completed: 1/1 Total errors detected: 0/1 Total elapsed time: 03m00.86s Total system time: 00m00.18s Total user time: 00m04.11s Starting time: Wed Sep 15 11:50:36 1993 Ending time: Wed Sep 15 11:53:50 1993 % TEST DESCRIPTION: This test does a write/read verify pass of 2 tape files to a DEC TZ86 tape drive using variable length records ranging from 10 Kbytes to 100 Kbytes using the default increment value of 1 byte. % dt of=/dev/rmt1h min=10k max=100k limit=5m files=2 Write Statistics: Total records processed: 1000 with min=10240, max=102400, incr=1 Total bytes transferred: 10485760 (10240.000 Kbytes, 10.000 Mbytes) Average transfer rates: 642641 bytes/sec, 627.579 Kbytes/sec Total passes completed: 0/1 Total files processed: 2/2 Total errors detected: 0/1 Total elapsed time: 00m16.31s Total system time: 00m00.28s Total user time: 00m01.26s Read Statistics: Total records processed: 1000 with min=10240, max=102400, incr=1 Total bytes transferred: 10485760 (10240.000 Kbytes, 10.000 Mbytes) Average transfer rates: 214725 bytes/sec, 209.693 Kbytes/sec Total passes completed: 1/1 Total files processed: 2/2 Total errors detected: 0/1 Total elapsed time: 00m48.83s Total system time: 00m00.45s Total user time: 00m30.95s Total Statistics: Output device/file name: /dev/rmt1h (Device: TZ86, type=tape) Data pattern read/written: 0x39c39c39 Total records processed: 2000 with min=10240, max=102400, incr=1 Page 43 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 Total bytes transferred: 20971520 (20480.000 Kbytes, 20.000 Mbytes) Average transfer rates: 229322 bytes/sec, 223.948 Kbytes/sec Total passes completed: 1/1 Total files processed: 4/4 Total errors detected: 0/1 Total elapsed time: 01m31.45s Total system time: 00m00.75s Total user time: 00m32.21s Starting time: Mon Sep 13 15:29:23 1993 Ending time: Mon Sep 13 15:31:00 1993 % TEST DESCRIPTION: This test does writing/reading through a pipe. Notice the special character '-' which indicates write standard out/read standard in. % dt of=- bs=8k limit=1g disable=stats | dt if=- bs=8k limit=1g Total Statistics: Input device/file name: - Data pattern read: 0x39c39c39 Total records processed: 131072 @ 8192 bytes/record (8.000 Kbytes) Total bytes transferred: 1073741824 (1048576.000 Kbytes, 1024.000 Mbytes) Average transfer rates: 2334644 bytes/sec, 2279.926 Kbytes/sec Total passes completed: 1/1 Total errors detected: 0/1 Total elapsed time: 07m39.91s Total system time: 00m17.65s Total user time: 04m44.66s Starting time: Wed Sep 15 11:40:08 1993 Ending time: Wed Sep 15 11:47:48 1993 % TEST DESCRIPTION: This test does writing/reading through a fifo (named pipe). This is similar to the previous test, except a fifo file is created, and a single invocation of dt is used for testing. % mkfifo NamedPipe % ls -ls NamedPipe 0 prw-r--r-- 1 rmiller system 0 Sep 16 09:52 NamedPipe % dt of=NamedPipe bs=8k limit=1g enable=loopback Total Statistics: Output device/file name: NamedPipe (device type=fifo) Data pattern written: 0x39c39c39 (read verify disabled) Total records processed: 131072 @ 8192 bytes/record (8.000 Kbytes) Total bytes transferred: 1073741824 (1048576.000 Kbytes, 1024.000 Mbytes) Average transfer rates: 2264402 bytes/sec, 2211.330 Kbytes/sec Page 44 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 Total passes completed: 1/1 Total errors detected: 0/1 Total elapsed time: 07m54.18s Total system time: 00m21.80s Total user time: 02m14.96s Starting time: Thu Sep 16 09:42:24 1993 Ending time: Thu Sep 16 09:50:18 1993 Total Statistics: Input device/file name: NamedPipe (device type=fifo) Data pattern read: 0x39c39c39 Total records processed: 131072 @ 8192 bytes/record (8.000 Kbytes) Total bytes transferred: 1073741824 (1048576.000 Kbytes, 1024.000 Mbytes) Average transfer rates: 2264402 bytes/sec, 2211.330 Kbytes/sec Total passes completed: 1/1 Total errors detected: 0/1 Total elapsed time: 07m54.18s Total system time: 00m19.90s Total user time: 04m44.01s Starting time: Thu Sep 16 09:42:24 1993 Ending time: Thu Sep 16 09:50:19 1993 % rm NamedPipe % TEST DESCRIPTION: This test performs a loopback test between two serial lines. Debug was enabled to display additional test in- formation, which is useful if serial line testing hangs. dt does not use a watchdog timer. Also notice the number of bytes allocated was 68, not 64 as 'bs=' indicates. Pad bytes are allocated at the end of data buffers and checked after reads to ensure drivers/file system code do not write too many bytes (this has uncovered DMA FIFO flush problems in device drivers in the past). % dt if=/dev/tty00 of=/dev/tty01 bs=64 limit=100k flow=xon_xoff parity=none speed=38400 enable=debug dt: Attempting to open input file '/dev/tty00', mode = 00... dt: Input file '/dev/tty00' successfully opened, fd = 3 dt: Saving current terminal characteristics, fd = 3... dt: Setting up test terminal characteristics, fd = 3... dt: Attempting to open output file '/dev/tty01', mode = 01... dt: Output file '/dev/tty01' successfully opened, fd = 4 dt: Saving current terminal characteristics, fd = 4... dt: Setting up test terminal characteristics, fd = 4... dt: Parent PID = 1809, Child PID = 1810 dt: Allocated buffer at address 0x4a000 of 68 bytes, using offset 0 dt: Allocated buffer at address 0x4a000 of 68 bytes, using offset 0 dt: Characters remaining in output queue = 304 dt: Waiting for output queue to drain... Page 45 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 dt: Output queue finished draining... Total Statistics: Output device/file name: /dev/tty01 (device type=terminal) Terminal characteristics: flow=xon_xoff, parity=none, speed=38400 Data pattern written: 0x39c39c39 (read verify disabled) Total records processed: 1600 @ 64 bytes/record (0.063 Kbytes) Total bytes transferred: 102400 (100.000 Kbytes, 0.098 Mbytes) Average transfer rates: 3840 bytes/sec, 3.750 Kbytes/sec Total passes completed: 1/1 Total errors detected: 0/1 Total elapsed time: 00m26.66s Total system time: 00m00.06s Total user time: 00m00.01s Starting time: Wed Sep 15 11:37:39 1993 Ending time: Wed Sep 15 11:38:07 1993 Total Statistics: Input device/file name: /dev/tty00 (device type=terminal) Terminal characteristics: flow=xon_xoff, parity=none, speed=38400 Data pattern read: 0x39c39c39 Total records processed: 1600 @ 64 bytes/record (0.063 Kbytes) Total bytes transferred: 102400 (100.000 Kbytes, 0.098 Mbytes) Average transfer rates: 3703 bytes/sec, 3.617 Kbytes/sec Total passes completed: 1/1 Total errors detected: 0/1 Total elapsed time: 00m27.65s Total system time: 00m00.28s Total user time: 00m00.05s Starting time: Wed Sep 15 11:37:39 1993 Ending time: Wed Sep 15 11:38:07 1993 dt: Restoring saved terminal characteristics, fd = 3... dt: Closing file '/dev/tty00', fd = 3... dt: Waiting for child PID 1810 to exit... dt: Child PID 1810, exited with status = 0 dt: Restoring saved terminal characteristics, fd = 4... dt: Closing file '/dev/tty01', fd = 4... % Page 46 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 TEST DESCRIPTION: This test does write/read testing to a raw device starting 2 processes, each of which will execute 2 passes. Notice the IOT pattern is specified, to avoid possible data com- pare failures. Normally a different pattern gets used for each pass. There are 12 different patterns which get cycled through, if a data pattern was not specified on the command line. Since each process runs at an indeterminate speed, it's possible for one process to be writing a different pattern, while the other process is still reading the previous pattern, which results in false data comparison failures. Please beware of this, until this issue is resolved in a future release. % dt of=/dev/rrz2c bs=64k limit=1g pattern=iot procs=2 Write Statistics (29090): Current Process Reported: 1/2 Total records processed: 16384 @ 65536 bytes/record (64.000 Kbytes) Total bytes transferred: 1073741824 (1048576.000 Kbytes, 1024.000 Mbytes) Average transfer rates: 4176629 bytes/sec, 4078.740 Kbytes/sec Number I/O's per second: 63.730 Total passes completed: 0/1 Total errors detected: 0/1 Total elapsed time: 04m17.08s Total system time: 00m03.43s Total user time: 00m31.96s Write Statistics (29105): Current Process Reported: 2/2 Total records processed: 16384 @ 65536 bytes/record (64.000 Kbytes) Total bytes transferred: 1073741824 (1048576.000 Kbytes, 1024.000 Mbytes) Average transfer rates: 4175005 bytes/sec, 4077.154 Kbytes/sec Number I/O's per second: 63.706 Total passes completed: 0/1 Total errors detected: 0/1 Total elapsed time: 04m17.18s Total system time: 00m02.81s Total user time: 00m32.35s o o o Total Statistics (29090): Output device/file name: /dev/rrz2c (Device: BB01811C, type=disk) Type of I/O's performed: sequential Current Process Reported: 1/2 Data pattern string used: 'IOT Pattern' Total records processed: 32768 @ 65536 bytes/record (64.000 Kbytes) Total bytes transferred: 2147483648 (2097152.000 Kbytes, 2048.000 Mbytes) Average transfer rates: 3615597 bytes/sec, 3530.856 Kbytes/sec Number I/O's per second: 55.170 Page 47 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 Total passes completed: 1/1 Total errors detected: 0/1 Total elapsed time: 09m53.95s Total system time: 00m06.63s Total user time: 02m32.51s Starting time: Thu Nov 9 09:50:28 2000 Ending time: Thu Nov 9 10:00:22 2000 Total Statistics (29105): Output device/file name: /dev/rrz2c (Device: BB01811C, type=disk) Type of I/O's performed: sequential Current Process Reported: 2/2 Data pattern string used: 'IOT Pattern' Total records processed: 32768 @ 65536 bytes/record (64.000 Kbytes) Total bytes transferred: 2147483648 (2097152.000 Kbytes, 2048.000 Mbytes) Average transfer rates: 3604370 bytes/sec, 3519.893 Kbytes/sec Number I/O's per second: 54.998 Total passes completed: 1/1 Total errors detected: 0/1 Total elapsed time: 09m55.80s Total system time: 00m05.90s Total user time: 02m38.21s Starting time: Thu Nov 9 09:50:28 2000 Ending time: Thu Nov 9 10:00:24 2000 % TEST DESCRIPTION: This test attempts to write to a Tru64 UNIX raw disk which contains a valid label block, and the action necessary to destroy this label block before writes are possible. As you can see, the first disk block (block 0) is write protected (all other blocks are not however). Since many people, including myself, have been burnt (mis-lead) by this wonderful feature, I thought it was worth documenting here. # file /dev/rrz11c /dev/rrz11c: character special (8/19458) SCSI #1 RZ56 disk #88 (SCSI ID #3) # disklabel -r -w /dev/rrz11c rz56 # ls -ls /dev/rrz11a 0 crw-rw-rw- 1 root system 8,19456 Sep 15 11:33 /dev/rrz11a # dt of=/dev/rrz11c bs=64k limit=1m disable=stats dt: 'write' - Read-only file system dt: Error number 1 occurred on Thu Sep 16 10:53:54 1993 # dt of=/dev/rrz11a position=1b bs=64k limit=1m disable=stats # disklabel -z /dev/rrz11c # dt of=/dev/rrz11c bs=64k limit=1m disable=stats # Page 48 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 TEST DESCRIPTION: This test shows a real life problem discovered on a DEC 3000-500 (Flamingo) system using Tru64 UNIX V1.3. This test uncovers a data corruption problem that occurs at the end of data buffers on read requests. The problem results from the FIFO being improperly flushed when DMA transfers abort on certain boundaries (residual bytes left in FIFO). This failure is un- covered by performing large reads of short records and verifying the pad bytes, allocated at the end of data buffers, do not get inadvertantly overwritten. % dt of=/dev/rmt0h min=1k max=25k incr=p-1 limit=1m disable=stats,verify % dt if=/dev/rmt0h min=1k+25 max=25k incr=p-1 limit=1m disable=stats dt: WARNING: Record #1, attempted to read 1049 bytes, read only 1024 bytes. dt: WARNING: Record #2, attempted to read 9240 bytes, read only 9215 bytes. dt: Data compare error at pad byte 0 in record number 2 dt: Data expected = 0xc6, data found = 0xff dt: Error number 1 occurred on Sat Sep 18 11:15:08 1993 % dt if=/dev/rmt0h min=1k+25 max=25k incr=p-1 limit=1m disable=stats dt: WARNING: Record #1, attempted to read 1049 bytes, read only 1024 bytes. dt: WARNING: Record #2, attempted to read 9240 bytes, read only 9215 bytes. dt: Data compare error at pad byte 0 in record number 2 dt: Data expected = 0xc6, data found = 0xff dt: Data buffer pointer = 0x3e3ff, buffer offset = 9215 Dumping Buffer (base = 0x3c000, offset = 9215, size = 9219 bytes): 0x3e3df 39 39 9c c3 39 39 9c c3 39 39 9c c3 39 39 9c c3 0x3e3ef 39 39 9c c3 39 39 9c c3 39 39 9c c3 39 39 9c c3 0x3e3ff ff c6 63 3c c6 c6 63 3c c6 c6 63 3c c6 c6 63 3c 0x3e40f c6 c6 63 3c c6 c6 63 3c c6 c6 63 3c c6 c6 63 3c dt: Error number 1 occurred on Sat Sep 18 11:15:31 1993 % echo $status -1 % Page 49 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 TEST DESCRIPTION: This test shows a real life problem discovered on a DEC 7000 (Ruby) system using Tru64 UNIX V1.3. A simple variable length record test is performed, and as you can see, reading the same record size written runs successfully. The failure does not occur until large reads of the short tape records previously written is performed. Upon reviewing this problem on an SDS-3F SCSI analyzer, it ap- pears this device does a disconnect/save data pointers/reconnect sequence, followed by the check condition status, which is not being handled properly by someone (either our CAM xza driver, or the KZMSA firmware... this is still being investigated). The problem results in wrong record sizes being returned, and in this example, the first record is returned with a count of zero which looks like an end of file indication. The tapex -g option "Ran- dom record-size tests" originally found this problem, but as you can see, dt was able to easily reproduce this problem. % dt of=/dev/rmt12h min=2k+10 max=250k incr=p-3 records=10 Write Statistics: Total records processed: 10 with min=2058, max=256000, incr=8189 Total bytes transferred: 389085 (379.966 Kbytes, 0.371 Mbytes) Average transfer rates: 2593900 bytes/sec, 2533.105 Kbytes/sec Total passes completed: 0/1 Total errors detected: 0/1 Total elapsed time: 00m00.15s Total system time: 00m00.00s Total user time: 00m00.03s Read Statistics: Total records processed: 10 with min=2058, max=256000, incr=8189 Total bytes transferred: 389085 (379.966 Kbytes, 0.371 Mbytes) Average transfer rates: 188267 bytes/sec, 183.854 Kbytes/sec Total passes completed: 1/1 Total errors detected: 0/1 Total elapsed time: 00m02.06s Total system time: 00m00.01s Total user time: 00m00.63s Total Statistics: Output device/file name: /dev/rmt12h (Device: TZ86, type=tape) Data pattern read/written: 0x39c39c39 Total records processed: 20 with min=2058, max=256000, incr=8189 Total bytes transferred: 778170 (759.932 Kbytes, 0.742 Mbytes) Average transfer rates: 53239 bytes/sec, 51.991 Kbytes/sec Total passes completed: 1/1 Total errors detected: 0/1 Total elapsed time: 00m14.61s Total system time: 00m00.01s Page 50 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 Total user time: 00m00.66s Starting time: Sat Sep 18 12:33:26 1993 Ending time: Sat Sep 18 12:34:44 1993 % dt if=/dev/rmt12h bs=250k records=10 Total Statistics: Input device/file name: /dev/rmt12h (Device: TZ86, type=tape) Data pattern read: 0x39c39c39 Total records processed: 0 @ 256000 bytes/record (250.000 Kbytes) Total bytes transferred: 0 (0.000 Kbytes, 0.000 Mbytes) Average transfer rates: 0 bytes/sec, 0.000 Kbytes/sec Total passes completed: 1/1 Total errors detected: 0/1 Total elapsed time: 00m01.31s Total system time: 00m00.00s Total user time: 00m00.01s Starting time: Sat Sep 18 12:40:15 1993 Ending time: Sat Sep 18 12:40:22 1993 % dt if=/dev/rmt12h bs=250k records=10 enable=debug dt: Attempting to open input file '/dev/rmt12h', mode = 00... dt: Input file '/dev/rmt12h' successfully opened, fd = 3 dt: Allocated buffer at address 0x52000 of 256004 bytes, using offset 0 dt: End of file/tape/media detected, count = 0, errno = 0 dt: Exiting with status code 254... Total Statistics: Input device/file name: /dev/rmt12h (Device: TZ86, type=tape) Data pattern read: 0x39c39c39 Total records processed: 0 @ 256000 bytes/record (250.000 Kbytes) Total bytes transferred: 0 (0.000 Kbytes, 0.000 Mbytes) Average transfer rates: 0 bytes/sec, 0.000 Kbytes/sec Total passes completed: 1/1 Total errors detected: 0/1 Total elapsed time: 00m01.30s Total system time: 00m00.01s Total user time: 00m00.01s Starting time: Sat Sep 18 12:40:36 1993 Ending time: Sat Sep 18 12:40:43 1993 dt: Closing file '/dev/rmt12h', fd = 3... % Page 51 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 TEST DESCRIPTION: This test shows a real life problem discovered on a DEC 3000-500 (Flamingo) system using Tru64 UNIX V1.3. The test uncovers a problem issuing I/O requests with large transfer sizes (>2.5 megabytes). I don't know the specifics of correcting this problem, which is not important in this context, but the failure indication was that dt never completed (the process ap- peared hung... actually sleeping waiting for I/O completion). When a failure like this occurs, it is oftentimes useful to see where in the kernel the process is sleeping. This example shows how to identify the dt process ID (PID), and how to use dbx to map that process and obtain a kernel stack traceback. This seems like useful debugging information to include here, since my ex- perience is that many people are unaware of how to trouble-shoot these types of problems. % file /dev/rrz11c /dev/rrz11c: character special (8/19458) SCSI #1 RZ56 disk #88 (SCSI ID #3) % dt if=/dev/rrz11a bs=3m count=1 enable=debug dt: Attempting to open input file '/dev/rrz11a', mode = 00... dt: Input file '/dev/rrz11a' successfully opened, fd = 3 dt: Allocated buffer at address 0x52000 of 3145732 bytes, using offset 0 [ Ctrl/Z typed to background hung dt process at this point. ] Stopped % ps ax | fgrep dt 4512 p6 U 0:00.48 dt if=/dev/rrz11a bs=3m count=1 enable=debug 4514 p6 S 0:00.02 fgrep dt % dbx -k /vmunix /dev/mem dbx version 3.11.1 Type 'help' for help. stopped at warning: Files compiled -g3: parameter values probably wrong [thread_block:1414 ,0xfffffc00002ddf80] Source not available (dbx) set $pid=4512 stopped at [thread_block:1414 ,0xfffffc00002ddf80] Source not available (dbx) trace > 0 thread_block() ["../../../../src/kernel/kern/sched_prim.c":1414, 0xfffffc00002ddf80] 1 mpsleep(chan = 0xffffffff8445fea0 = "...", pri = 0x18, wmesg = 0xfffffc000042a258 = "event", timo = 0x0, lockp = (nil), flags = 0x1) ["../../../../src/kernel/bsd/kern_synch.c":278, 0xfffffc0000264934] 2 event_wait(evp = 0x52000, interruptible = 0x0, timo = 0x0) ["../../../../src/kernel/kern/event.c":137, 0xfffffc00002ce2a8] 3 biowait(bp = 0xffffffff8434ba00) ["../../../../src/kernel/vfs/vfs_bio.c":904, 0xfffffc00002a458c] 4 physio(strat = 0xfffffc00003956d0, bp = 0x14002aac0, dev = 0x804c00, rw = 0x1, mincnt = 0xfffffc00003a4af0, uio = 0xffffffff8434ba00) ["../../../../src/kernel/ufs/ufs_physio.c":205, 0xfffffc0000291fbc] 5 cdisk_read(dev = 0x804c00, uio = 0xffffffff8d5f1d68) ["../io/cam/cam_disk.c":2249, 0xfffffc0000396d5c] 6 spec_read(vp = 0x14c, uio = 0xffffffff84474640, ioflag = 0x0, cred = 0xffffffff843e9360) ["../../../../src/kernel/vfs/spec_vnops.c":1197, 0xfffffc00002a2614] 7 ufsspec_read(vp = (nil), uio = 0xffffffff843e9360, ioflag = 0xffffffff84342030, cred = 0x352000) ["../../../../src/kernel/ufs/ufs_vnops.c":2731, 0xfffffc0000298e68] 8 vn_read(fp = 0xffffffff8c74f428, uio = 0xffffffff8d5f1d68, cred = 0xffffffff843e9360) ["../../../../src/kernel/vfs/vfs_vnops.c":580, 0xfffffc00002ae3c8] 9 rwuio(p = 0xffffffff8c763490, fdes = 0xffffffff844f5cc0, uio = 0xffffffff8d5f1d68, rw = UIO_READ, retval = 0xffffffff8d5f1e40) ["../../../../src/kernel/bsd/sys_generic.c":351, 0xfffffc000026ce34] 10 read(p = 0xffffffff8d5f1d58, args = 0xffffffff00000001, retval = (nil)) ["../../../../src/kernel/bsd/sys_generic.c":201, 0xfffffc000026caf0] 11 syscall(ep = 0xffffffff8d5f1ef8, code = 0x3) ["../../../../src/kernel/arch/alpha/syscall_trap.c":593, 0xfffffc0000379698] Page 52 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 12 _Xsyscall() ["../../../../src/kernel/arch/alpha/locore.s":751, 0xfffffc000036c550] (dbx) quit % TEST DESCRIPTION: This test shows a real life problem discovered on a DEC 3000-500 (Flamingo) system using Tru64 UNIX V3.2. The test uncovers a problem of too much data being copied to the user buffer, when long reads of short tape records are performed. % dt of=/dev/rmt0h min=10k max=64k count=100 Write Statistics: Total records processed: 100 with min=10240, max=65536, incr=1 Total bytes transferred: 1028950 (1004.834 Kbytes, 0.981 Mbytes) Average transfer rates: 61552 bytes/sec, 60.110 Kbytes/sec Total passes completed: 0/1 Total errors detected: 0/1 Total elapsed time: 00m16.71s Total system time: 00m00.03s Total user time: 00m00.23s Read Statistics: Total records processed: 100 with min=10240, max=65536, incr=1 Total bytes transferred: 1028950 (1004.834 Kbytes, 0.981 Mbytes) Average transfer rates: 150946 bytes/sec, 147.408 Kbytes/sec Total passes completed: 1/1 Total errors detected: 0/1 Total elapsed time: 00m06.81s Total system time: 00m00.05s Total user time: 00m00.48s Total Statistics: Output device/file name: /dev/rmt0h (Device: TZK10, type=tape) Data pattern read/written: 0x39c39c39 Total records processed: 200 with min=10240, max=65536, incr=1 Total bytes transferred: 2057900 (2009.668 Kbytes, 1.963 Mbytes) Average transfer rates: 53966 bytes/sec, 52.701 Kbytes/sec Total passes completed: 1/1 Total errors detected: 0/1 Total elapsed time: 00m38.13s Total system time: 00m00.08s Total user time: 00m00.71s Starting time: Tue Nov 14 16:06:54 1995 Ending time: Tue Nov 14 16:07:37 1995 im2fast% dt if=/dev/rmt0h min=20k max=64k count=100 dt: WARNING: Record #1, attempted to read 20480 bytes, read only 10240 bytes. dt: WARNING: Record #2, attempted to read 20481 bytes, read only 10241 bytes. dt: Data compare error at inverted byte 10242 in record number 2 dt: Data expected = 0x63, data found = 0xff, pattern = 0xc63c63c6 Page 53 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 dt: The incorrect data starts at address 0x140012801 (marked by asterisk '*') dt: Dumping Data Buffer (base = 0x140010000, offset = 10241, limit = 64 bytes): 0x1400127e1 9c c3 39 39 9c c3 39 39 9c c3 39 39 9c c3 39 39 0x1400127f1 9c c3 39 39 9c c3 39 39 9c c3 39 39 9c c3 39 39 0x140012801 *ff ff 03 c6 63 3c c6 c6 63 3c c6 c6 63 3c c6 c6 0x140012811 63 3c c6 c6 63 3c c6 c6 63 3c c6 c6 63 3c c6 c6 dt: Error number 1 occurred on Tue Nov 14 17:54:28 1995 Total Statistics: Input device/file name: /dev/rmt0h (Device: TZK10, type=tape) Data pattern read: 0x39c39c39 Total records processed: 2 with min=20480, max=65536, incr=1 Total bytes transferred: 20481 (20.001 Kbytes, 0.020 Mbytes) Average transfer rates: 17810 bytes/sec, 17.392 Kbytes/sec Total passes completed: 0/1 Total errors detected: 1/1 Total elapsed time: 00m01.15s Total system time: 00m00.01s Total user time: 00m00.01s Starting time: Tue Nov 14 17:54:22 1995 Ending time: Tue Nov 14 17:54:28 1995 im2fast% DESCRIPTION: This example shows copying a partition with the bad block to another disk. I've used this operation to save my sys- tem disk more than once. This copy w/verify is also very useful for floppy diskettes which tend to be unreliable in my experi- ence. Note the use of "errors=10" so dt will continue after reading the bad block. Without this option dt exits after 1 error. If copying an active file system, like your system disk, expect a couple verification errors since certain system files will likely get written. Whenever possible, the copy operation should be done on unmounted disks. % dt if=/dev/rrz0b of=/dev/rrz3b iomode=copy errors=10 limit=5m dt: 'read' - I/O error dt: Relative block number where the error occcured is 428 dt: Error number 1 occurred on Fri Mar 7 10:53:15 1997 Copy Statistics: Data operation performed: Copied '/dev/rrz0b' to '/dev/rrz3b'. Total records processed: 20478 @ 512 bytes/record (0.500 Kbytes) Total bytes transferred: 10484736 (10239.000 Kbytes, 9.999 Mbytes) Average transfer rates: 87677 bytes/sec, 85.622 Kbytes/sec Total passes completed: 0/1 Page 54 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 Total errors detected: 1/10 Total elapsed time: 01m59.58s Total system time: 00m06.26s Total user time: 00m00.35s dt: 'read' - I/O error dt: Relative block number where the error occcured is 428 dt: Error number 1 occurred on Fri Mar 7 10:55:11 1997 Verify Statistics: Data operation performed: Verified '/dev/rrz0b' with '/dev/rrz3b'. Total records processed: 20478 @ 512 bytes/record (0.500 Kbytes) Total bytes transferred: 10484736 (10239.000 Kbytes, 9.999 Mbytes) Average transfer rates: 359477 bytes/sec, 351.051 Kbytes/sec Total passes completed: 1/1 Total errors detected: 1/10 Total elapsed time: 00m29.16s Total system time: 00m06.68s Total user time: 00m01.76s Total Statistics: Input device/file name: /dev/rrz0b (Device: RZ28, type=disk) Total records processed: 40956 @ 512 bytes/record (0.500 Kbytes) Total bytes transferred: 20969472 (20478.000 Kbytes, 19.998 Mbytes) Average transfer rates: 140940 bytes/sec, 137.636 Kbytes/sec Total passes completed: 1/1 Total errors detected: 2/10 Total elapsed time: 02m28.78s Total system time: 00m12.96s Total user time: 00m02.13s Starting time: Fri Mar 7 10:53:06 1997 Ending time: Fri Mar 7 10:55:35 1997 % TEST DESCRIPTION: Here's an example which shows the Extended Er- ror Information (EEI) available for SCSI tapes on Tru64 Unix sys- tems. $ dt if=/dev/rmt0h bs=16k limit=10m disable=compare dt: 'read' - I/O error DEVIOGET ELEMENT CONTENTS ---------------- -------- category DEV_TAPE bus DEV_SCSI interface SCSI device TZK10 adpt_num 0 nexus_num 0 Page 55 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 bus_num 0 ctlr_num 0 slave_num 5 dev_name tz unit_num 5 soft_count 0 hard_count 16 stat 0x108 DEV_WRTLCK DEV_HARDERR category_stat 0x8000 DEV_10000_BPI DEVGETINFO ELEMENT CONTENTS ------------------ -------- media_status 0x10108 WrtProt HardERR POS_VALID unit_status 0x131 Ready 1_FM_Close Rewind Buffered record_size 512 density (current) 10000 BPI density (on write) 16000 BPI Filemark Cnt 0 Record Cnt 673 Class 4 - QIC MTIOCGET ELEMENT CONTENTS ---------------- -------- mt_type MT_ISSCSI mt_dsreg 0x108 DEV_WRTLCK DEV_HARDERR mt_erreg 0x3 Nonrecoverable medium error. mt_resid 31 mt_fileno 0 mt_blkno 673 DEV_EEI_STATUS version 0x1 status 0x15 Device hardware error (hard error) flags 0x1000007 CAM_STATUS SCSI_STATUS SCSI_SENSE CAM_DATA cam_status 0x4 CCB request completed with an err scsi_status 0x2 SCSI_STAT_CHECK_CONDITION scsi_sense_data Error Code: 0x70 (Current Error) Valid Bit: 0x1 (Information field is valid) Segment Number: 0 Sense Key: 0x3 (MEDIUM ERROR - Nonrecoverable medium error) Illegal Length: 0 End Of Media: 0 File Mark: 0 Information Field: 0x1f (31) Additional Sense Length: 0x16 Page 56 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 Command Specific Information: 0 Additional Sense Code/Qualifier: (0x3a, 0) = Medium not present Field Replaceable Unit Code: 0 Sense Specific Bytes: 00 00 00 Additional Sense Bytes: 00 02 a1 00 00 00 00 00 00 00 00 04 dt: Error number 1 occurred on Sat Sep 13 16:48:40 1997 Total Statistics: Input device/file name: /dev/rmt0h (Device: TZK10, type=tape) Data pattern read: 0x39c39c39 (data compare disabled) Total records processed: 21 @ 16384 bytes/record (16.000 Kbytes) Total bytes transferred: 344064 (336.000 Kbytes, 0.328 Mbytes) Average transfer rates: 70941 bytes/sec, 69.278 Kbytes/sec Number I/O's per second: 4.330 Total passes completed: 0/1 Total errors detected: 1/1 Total elapsed time: 00m04.85s Total system time: 00m00.01s Total user time: 00m00.00s Starting time: Sat Sep 13 16:48:26 1997 Ending time: Sat Sep 13 16:48:40 1997 $ DESCRIPTION: This example show a multiple volume test to a tape drive. The test ensures End Of Media (EOM) is detected properly, and that the close operation succeeds which indicated all buf- fered data and filemarks were written properly. Note: A short 7mm DAT tape was used for this test. linux% dt of=/dev/st0 bs=32k files=4 limit=50m pattern=iot enable=multi Please insert volume #2 in drive /dev/st0... Press ENTER when ready to proceed: [ Continuing in file #3, record #1425, bytes written so far 151519232... ] Write Statistics: Total records processed: 6400 @ 32768 bytes/record (32.000 Kbytes) Total bytes transferred: 209715200 (204800.000 Kbytes, 200.000 Mbytes) Average transfer rates: 510529 bytes/sec, 498.564 Kbytes/sec Number I/O's per second: 15.580 Total passes completed: 0/1 Total files processed: 4/4 Total errors detected: 0/1 Total elapsed time: 06m50.78s Total system time: 00m00.75s Total user time: 00m06.90s Please insert volume #1 in drive /dev/st0... Press ENTER when ready to proceed: Please insert volume #2 in drive /dev/st0... Press ENTER when ready to proceed: [ Continuing in file #3, record #1425, bytes read so far 151519232... ] Page 57 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 Read Statistics: Total records processed: 6400 @ 32768 bytes/record (32.000 Kbytes) Total bytes transferred: 209715200 (204800.000 Kbytes, 200.000 Mbytes) Average transfer rates: 489657 bytes/sec, 478.181 Kbytes/sec Number I/O's per second: 14.943 Total passes completed: 1/1 Total files processed: 4/4 Total errors detected: 0/1 Total elapsed time: 07m08.29s Total system time: 00m00.91s Total user time: 00m26.53s Total Statistics: Output device/file name: /dev/st0 (device type=tape) Type of I/O's performed: sequential Data pattern string used: 'IOT Pattern' Total records processed: 12800 @ 32768 bytes/record (32.000 Kbytes) Total bytes transferred: 419430400 (409600.000 Kbytes, 400.000 Mbytes) Average transfer rates: 434589 bytes/sec, 424.403 Kbytes/sec Number I/O's per second: 13.263 Total passes completed: 1/1 Total files processed: 8/8 Total errors detected: 0/1 Total elapsed time: 16m05.12s Total system time: 00m01.66s Total user time: 00m33.43s Starting time: Fri Feb 18 18:48:22 2000 Ending time: Fri Feb 18 19:04:28 2000 linux% DESCRIPTION: This example shows the results of doing a read- after-write test to a floppy diskette. This option is valid with disks and tapes. tru64% dt of=/dev/rfd0c min=b max=64k incr=7b iotype=random enable=raw runtime=3m Read After Write Statistics: Total records processed: 100 with min=512, max=65536, incr=3584 Total bytes transferred: 2949120 (2880.000 Kbytes, 2.812 Mbytes) Average transfer rates: 16923 bytes/sec, 16.526 Kbytes/sec Number I/O's per second: 0.574 Total passes completed: 1 Total errors detected: 0/1 Total elapsed time: 02m54.26s Total system time: 00m00.01s Total user time: 00m00.16s Total Statistics: Output device/file name: /dev/rfd0c (Device: floppy, type=disk) Page 58 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 Type of I/O's performed: random (seed 0xa775f81) Data pattern read/written: 0x00ff00ff Total records processed: 109 with min=512, max=65536, incr=3584 Total bytes transferred: 3011072 (2940.500 Kbytes, 2.872 Mbytes) Average transfer rates: 16642 bytes/sec, 16.252 Kbytes/sec Number I/O's per second: 0.602 Total passes completed: 1 Total errors detected: 0/1 Total elapsed time: 03m00.93s Total system time: 00m00.01s Total user time: 00m00.16s Starting time: Wed Jan 12 16:38:38 2000 Ending time: Wed Jan 12 16:41:43 2000 tru64% Page 59 Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 ***************************************************************** ***************************************************************** ***************************************************************** ** ** ** -END OF DOCUMENT- ** ** ** ***************************************************************** ***************************************************************** ***************************************************************** Page lx Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 Table of Contents 1 Overview................................................... 1 2 Operating Systems Supported................................ 2 2.1 POSIX Compliant Systems.................................. 2 3 Test Uses.................................................. 2 4 Program Options............................................ 4 4.1 Input File "if=" Option.................................. 4 4.2 Output File "of=" Option................................. 4 4.3 Pattern File "pf=" Option................................ 5 4.4 Block Size "bs=" Option.................................. 5 4.5 Log File "log=" Option................................... 6 4.6 POSIX Asynchronous I/O "aios=" Option.................... 6 4.7 Buffer Alignment "align=" Option......................... 7 4.8 File Disposition "dispose=" Option....................... 7 4.9 Dump Data Limit "dlimit=" Option......................... 7 4.10 Device Type "dtype=" Option............................. 7 4.11 Input Device Type "idtype=" Option...................... 8 4.12 Output Device Type "odtype=" Option..................... 8 4.13 Error Limit "errors=" Option............................ 8 4.14 File Limit "files=" Option.............................. 9 4.15 Terminal Flow Control "flow=" Option.................... 9 4.16 Record Increment "incr=" Option........................ 10 4.17 I/O Mode "iomode=" Option.............................. 10 4.18 I/O Type "iotype=" Option.............................. 11 4.19 Minimum Record Size "min=" Option...................... 11 4.20 Maxmimum Record Size "max=" Option..................... 12 4.21 Logical Block Address "lba=" Option.................... 12 4.22 Logical Block Size "lbs=" Option....................... 12 4.23 Data Limit "limit=" Option............................. 12 4.24 Munsa (DLM) "munsa=" Option............................ 13 4.25 Common Open Flags "flags=" Option...................... 13 4.26 Output Open Flags "oflags=" Option..................... 14 4.27 On Child Error "oncerr=" Option........................ 14 4.28 Terminal Parity Setting "parity=" Option............... 14 4.29 Pass Limit "passes=" Option............................ 14 4.30 Data Pattern "pattern=" Option......................... 15 4.31 File Position "position=" Option....................... 16 4.32 Multiple Processes "procs=" Option..................... 16 4.33 Random I/O Offset Alignment "ralign=" Option........... 16 4.34 Random I/O Data Limit "rlimit=" Option................. 16 4.35 Random Seed Value rseed=" Option....................... 17 Page i Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 4.36 Record Limit "records=" Option......................... 17 4.37 Run Time "runtime=" Option............................. 17 4.38 Record Skip "skip=" Option............................. 18 4.39 Record Seek "seek=" Option............................. 18 4.40 Data Step "step=" Option............................... 18 4.41 Terminal Speed "speed=" Option......................... 18 4.42 Terminal Read Timeout "timeout=" Option................ 19 4.43 Terminal Read Minimum "ttymin=" Option................. 19 4.44 Enable "enable=" & Disable disable= Options............ 20 4.44.1 POSIX Asynchronous I/O "aio" Flag.................... 20 4.44.2 Reporting Close Errors "cerror" Flag................. 20 4.44.3 Data Comparison "compare" Flag....................... 21 4.44.4 Core Dump on Errors "coredump" Flag.................. 21 4.44.5 Diagnostic Logging "diag" Flag....................... 21 4.44.6 Debug Output "debug" Flag............................ 21 4.44.7 Verbose Debug Output "Debug" Flag.................... 21 4.44.8 Random I/O Debug Output "rdebug" Flag................ 22 4.44.9 Dump Data Buffer "dump" Flag......................... 22 4.44.10 Tape EEI Reporting "eei" Flag....................... 22 4.44.11 Tape Reset Handling "resets" Flag................... 23 4.44.12 Flush Terminal I/O Queues "flush" Flag.............. 23 4.44.13 Log File Header "header" Flag....................... 23 4.44.14 Logical Block Data Mode "lbdata" Flag............... 23 4.44.15 Enable Loopback Mode "loopback" Flag................ 24 4.44.16 Microsecond Delays "microdelay" Flag................ 24 4.44.17 Memory Mapped I/O "mmap" Flag....................... 25 4.44.18 Test Modem Lines "modem" Flag....................... 25 4.44.19 Control Per Pass Statistics "pstats" Flag........... 26 4.44.20 Read After Write "raw" Flag......................... 26 4.44.21 Control Program Statistics "stats" Flag............. 26 4.44.22 Table(sysinfo) timing "table" Flag.................. 26 4.44.23 Verbose Output "verbose" Flag....................... 27 4.44.24 Verify Data "verify" Flag........................... 27 4.45 Program Delays......................................... 27 4.45.1 Close File "cdelay=" Delay........................... 27 4.45.2 End of Test "edelay=" Delay.......................... 28 4.45.3 Read Record "rdelay=" Delay.......................... 28 4.45.4 Start Test "sdelay=" Delay........................... 28 4.45.5 Child Terminate "tdelay=" Delay...................... 28 4.45.6 Write Record "wdelay=" Delay......................... 28 4.46 Numeric Input Parameters............................... 29 4.47 Time Input Parameters.................................. 29 5 Future Enhancements....................................... 30 6 Final Comments............................................ 31 APPENDIX A: dt Help Text...................................... 32 Page ii Users Manual for November 10th, 2000 dt - Data Test Program Version 13.22 APPENDIX B: dt Examples....................................... 40 Page iii