------------------------ DiskPerf v1.2 --------------------

DiskPerf is a tool for measuring the streaming read and write
performance of Hard Disks in the Win32 environment.  It works
in Win95 and Windows NT 3.5.  It will probably work on NT 3.1
but has never been tested there.

DiskPerf is provided As is without any warranties etc.  You
have the source, please do not call Microsoft asking for support.

DiskPerf has 3 main tests with many minor variations on each.

1) Simple Win32 I/O

This test does I/O as fast as it can using only a single thread.
The I/O's can be either synchronous or async (OVERLAPPED) on NT.
On Win95, async I/O requests fail.


2) Multithreaded Win32 I/O

This test queues I/O requests to one or more threads which do I/O
as fast as possible.  The main thread uses extra Cycles (if any)
to display a running MB/Sec number.  In Cases where we are CPU
bound, the display will not update until the test is over.


3) Memory Copy Performance

This tests measures the Win32 CopyMemory API performance in an
attempt to get a maximum BUS performance number.  It is highly
unlikey that you will ever see a Disk Performance rate in MB/Sec
that exceeds your memory copy rate MB/Sec, so this gives us a theoretical
upper bound to strive for in Disk performance.  With Large stripe
sets and multiple SCSI controllers, this performance number becomes
very important.

Choose Options\Run Test from the menu to begin running the current
Test.  On completion of the test, a summary line will be appended
to \Diskperf.log

TEST OPTIONS

From the menu, it is possible to change some of the parameters of
the current test:

Options\Block Size   Choose the size of each I/O request or each
                     call to CopyMemory.  Several block sizes corresponding
                     to common uncompressed video frames are available

Options\Create Flags  Choose flags for the CreateFile call for the I/O
                      Tests.  Use this to compare buffered/unbuffered
                      performance.  Other flags have little effect
                      Memory Copy test is unaffected

Options\Do Read Test  When Checked, we do streaming read test rather
                      then streaming write  (Default is Write for all tests)


Options\Time Critical  When Checked tests run at THREAD_PRIORITY_TIME_CRITICAL


Other test options can be modified by direct manipulation in the test window.
just right click with the mouse on the label or value of a test option
to get a edit window for that option.  Not all options are editable, also
there is no way to tell by looking which are editable.  If you right click
on an item, and nothing happens, then it is not editable.

All tests default to a reasonable values, and nearly all editable values
can be read from DiskPerf.ini.  Here is an example showing default values

---- diskperf.ini -----
[DiskPerf]
Window=0,0,400,400

[SimpleIO]
File=c:\capture.avi
Prio=15
Async=0
DoRead=0
FileSize=32
; file size is in MB
BlockSize=512
; block size is in Kbytes

[QueuedIO]
File=c:\capture.avi
FileSize=32
; file size is in MB
BlockSize=512
; block size is in Kbytes
Prio=15
DoRead=0
ThreadCount=1
; number of threads doing I/O
BufferCount=4
; number of buffers (shared by all threads)
MaxCopies=100
MinCopies=100
; max an min copies are a percentage of buffer size
DoCopies=0
; if DoCopies is TRUE data is copied into/out of the buffer before each I/O
; amount of data is determined by MaxCopies & MinCopies with the actual
; amount being the largest value that can be copied without affecting
; the data rate to/from disk
PreloadFat=1
; if True, an attempt is made to force FAT to preload the extents of the
; file so that reading the fat will not cause head seeks during streaming
Seek=0
; if true does a Seek before each I/O
;


[MemTest]
FileSize=32
; total size in MB to copy.
BlockSize=512
; size in K for each transfer.  if this number is less than the size
; of the secondary cache for the processor the resulting MB/Sec will
; be strongly affected by secondary cache and may not reflect bus
; speeds very well
