<HTML> <HEAD> <TITLE>Data Test Program (dt)</TITLE> </HEAD> <BODY BGCOLOR="#D98719"> <CENTER><H2><STRONG>Data Test Program (<I>dt</I>)</STRONG></H2></CENTER> <H2>What Is this Program Used For?</H2> <I>dt</I> is a generic data test program used to verify proper operation of peripherals, file systems, device drivers, or any data stream supported by the operating system. In its' simplest mode of operation, <I>dt</I> writes and then verifys its' default data pattern, then displays performance statisics and other test parameters before exiting. Since verification of data is performed, <I>dt</I> can be thought of as a generic diagnostic tool. <P> <I>dt</I> is conditionalized to run on Digital UNIX, SUN, ULTRIX, OSF/MK, QNX, Linux, and Windows/NT operating systems. The Windows/NT version requires the Cygnus Solutions <A HREF="http://sourceware.cygnus.com/cygwin"><I>cygwin</I> toolkit</A>. <P> <I>dt</I> command lines are similar to the <I>dd</I> program, which is popular on most UNIX systems. It contains numerous options to give the user control of various test parameters. <P> <I>dt</I> has been used to successfully test disks, tapes, serial lines, parallel lines, pipes, and memory mapped files. In fact, <I>dt</I> can be used for any device that allows 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. <H2>Latest <I>dt</I> Kits:</H2> <DL> <DD><A HREF="ftp/dt/dt-Overview.ppt"><I>dt</I> Program Overview (PowerPoint).</A> <DD><A HREF="ftp/dt/dt-UsersGuide.pdf"><I>dt</I> User's Manual (.pdf)</A> thanks to Hank Jakiela <DD><A HREF="ftp/dt/dt-UsersGuide.ps.gz"><I>dt</I> User's Manual (Postscript).</A> <DD><A HREF="ftp/dt/dt-source.tar.gz">Latest <I>dt</I> source kit Version 14.2</A> <DD><A HREF="ftp/dt/dt-V3.2.tar.gz">Digital Unix V3.2x <I>dt</I> executable.</A> <DD><A HREF="ftp/dt/dt-ptos.tar.gz">Tru64 Unix V4.0F <I>dt</I> executable.</A> <DD><A HREF="ftp/dt/dt-dlm.tar.gz">TruCluster Wave V1.6 <I>dt</I> executable.</A> <DD><A HREF="ftp/dt/dt-Wave4.tar.gz">TruCluster Wave 4.0 <I>dt</I> executable.</A> <DD><A HREF="ftp/dt/dt-steelos.tar.gz">Tru64 Unix T5.0 <I>dt</I> executable.</A> <DD><A HREF="ftp/dt/dt-win32.tar.gz">Windows/NT Data Test Program <I>dt</I> Kit.</A> <DD><A HREF="ftp/linux/alpha-dt.tar.gz">Linux Alpha Data Test Program <I>dt</I> Kit.</A> <DD><A HREF="ftp/linux/intel-dt.tar.gz">Linux Intel Data Test Program <I>dt</I> Kit.</A> <DD><A HREF="ftp/FreeBSD/dt-FreeBSD.tar.gz">FreeBSD 4.0 Data Test Program <I>dt</I> Kit.</A>. <DD><A HREF="ftp/sco/dt-sco.tar.gz">SCO UnixWare 7.1 Data Test Program <I>dt</I> Kit.</A> </DL> <P> Unpack the above archives via: "<B>gzip -dc kit-name.tar.gz | tar xvf -</B>" <H3>Please Note:</H2> While the latest <I>dt</I> source is <B>Version 14.2</B>, only the latest operating system releases are kept up to date. Also, if you are running with Zincos, you may wish to download and recompile from scratch via: <P> <PRE> % <B>cp -p Makefile.linux Makefile</B> % <B>make clean</B> ; <B>make depend</B> ; <B>make</B> </PRE> <H2>Latest Changes:</H2> <DL> <DD><A HREF="dt/WhatsNew-Jan29,2001.html">What's New as of January 29th, 2001</A> (Version 14.2) <DD><A HREF="dt/WhatsNew-Apr02,2000.html">What's New as of April 2nd, 2000</A> (Version 13.10) <DD><A HREF="dt/WhatsNew-Jan12,2000.html">What's New as of January 12th, 2000</A> (Version 13.0) <DD><A HREF="dt/WhatsNew-Nov11,1999.html">What's New as of November 11th, 1999</A> (Version 12.10) <DD><A HREF="dt/WhatsNew-Aug02,1999.html">What's New as of August 2nd, 1999</A> (Version 12.3) <DD><A HREF="dt/WhatsNew-Jan13,1999.html">What's New as of January 13th, 1999</A> (Version 11.3) <DD><A HREF="dt/WhatsNew-Apr08,1998.html">What's New as of April 8th, 1998</A> (Version 10.15) <DD><A HREF="dt/WhatsNew-Jan28,1998.html">What's New as of January 28th, 1998</A> (Version 10.12) <DD><A HREF="dt/WhatsNew-May14,1997.html">What's New as of May 14th, 1997</A> (Version 10.8) <DD><A HREF="dt/WhatsNew-Mar30,1996.html">What's New as of March 30th, 1996</A> (Version 10.2) <DD><A HREF="dt/WhatsNew-Feb21,1996.html">What's New as of February 21st, 1996</A> (Version 9.4) <DD><A HREF="dt/WhatsNew-Dec09,1995.html">What's New as of December 9th, 1995</A> (Version 9.0) <DD><A HREF="dt/WhatsNew-Jul27,1995.html">What's New as of July 27th, 1995</A> (Version 8.0) </DL> <HR> <A HREF="mailto:Robin.Miller@compaq.com"><IMG SRC="gifs/mailbox.gif" ALT="Mail"></A> Send mail to admin of this page: <EM>Robin.Miller@compaq.com</EM> <A HREF="index.html"><IMG SRC="gifs/home04.gif" ALT="Home"></A> To Robin's home page. <P> Last modified: February 14th, 2001 <HR> <H2>Uses For <I>dt</I>:</H2> Those people with an imagination can find many uses for <I>dt</I>, but I'll list a few just to whet your appetite: <UL> <LI>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. <LI>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. <LI>Read existing tapes with data comparison disabled, to determine 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. <LI>Reading/writing an entire tape to ensure device drivers properly sense and handle end of tape error conditions. <LI>Write a tape and ensure it can be read on another tape drive to test drive compatibility (also referred to as transportability). <LI>Read multiple tape files to ensure file marks and end of tape are reported and handled properly by tape drivers. <LI>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 file access. <LI>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. <LI>Reading/writing of entire disks, to ensure the media capacity and error handling is properly reported by device drivers. <LI>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. <LI>Testing I/O to files on NFS mounted file systems. This will give you a good indication of your ethernet performance to remote files. <LI>Writing/reading pipes to verify pipe operation and performance. <LI>Initiating multiple processes to test optimizations of buffer cache, device drivers, and/or intelligent controllers. This is also useful to test multiple device access and for loading the I/O sub-system. <LI>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. <LI>Do loopback testing of parallel or serial lines on either the same system or different systems. This is a useful compatibility test when running different machines running different operating systems. <LI>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. <LI>Specify variable record options for testing variable tape devices. <LI> On Tru64 cluster systems, distributed lock manager (DLM) options can be used to control access to shared devices or files. <LI> 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). </UL> Although I've started to add specific testing of serial lines with modem control, this support is incomplete and untested. <P> I hope you find <I>dt</I> 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. <H2>Help Text:</H2> <PRE> % <B>dt help</B> 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. 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. dsize=value Set the device block (sector) size. 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. or incr=variable Enables variable I/O request sizes. iodir=direction Set I/O direction to: {forward or reverse}. iomode=mode Set I/O mode to: {copy, test, or verify}. 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 number generator seed. records=value The number of records to process. runtime=time The number of seconds to execute. slices=value The number of disk slices to test. 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). volumes=value The number of volumes to process. vrecords=value The record limit for the last volume. 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) 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) unique Unique pattern. (Default: enabled) verbose Verbose output. (Default: enabled) verify Verify data written. (Default: enabled) Example: enable=debug disable=compare,pstats 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) 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, volumes=0, vrecords=1 iodir=forward, iomode=test, iotype=sequential --> Date: February 1st, 2001, Version: 14.1, Author: Robin T. Miller <-- % </PRE> </BODY> </HTML>