Version: 5.0 a
Author: George Spafford
Date: June 18, 1993
To allow users to objectively test the effectiveness of their disk caching
software. Cache Test is an independent product and is not supported by
Cache Test tests drive performance by writing data to a specified, or the
default, drive. Sequential tests are performed by writing randomly generated
fixed length strings to a DOS Text file. Each record consists of n number of
identical characters plus a carriage return (ASCII 13) and line feed (ASCII 10).
By default, the program writes 513 byte records. This translates to 511 bytes
in the record plus the CR and LF. If we were to imagine 8 character records,
and that ^ is a CR and + is a LF then the data looks like this.
The characters that make up the record are randomly generated. The random
routine is seeded by the timer tick every time it is called to increase the
random selections. Characters range from ASCII 32 to ASCII 252.
Random records are written to the disk using a random access file structure.
Each record consists of randomly generated bytes and two record separator
characters. As with the sequential file structure, the number of characters
written to the disk is the specified record size - 2 + 2 record separators.
It is very similar to the sequential except that it allows random movement
through the file.
You can view any off these files by pushing CONTROL-BREAK during their creation
and then use your favorite disk editor or file viewer.
The "DIR Test" consists of Cache Test reading the root directories of either
the specified or default drive and then reading the files in those directories.
It will repeat this process until it reaches the required number of reads.
The more directories you have in your root the better. To be specific,
it reads the tree and then counts the number of files in each directory.
The value you see it totaling is the number of files + the number of directories
+ 1 root directory. However, it will keep incrementing by looping the test
until the desired number of reads has taken place. Now, let's say that you
run the default 10,000 record (count) test. Let's also say that you have a
drive witth 2,500 files and directories - the program will need to loop through
the drive 4 times in order to meet its test requirements. If you limit the
number of records to 2,500 by using the command switch /N:2500 then it will
only need to read the tree once.
MAKE SURE YOU HAVE SPACES BETWEEN THE SWITCHES - IF YOU DO NOT, CT
WILL NOT BE ABLE TO INTERPRET THE SWITCHES CORRECTLY.
/A Performs all tests [this is the default if just CT
/C Specifies that the /L: log file is to be created and
not simply appended to.
/D Perform DOS directory services test.
/D:d Drive to test. "d" is the drive letter.
/L:logto Specifies the file name or device to log to.
"logto" is the name. By default, data is appended to
this. /C must be specified if you want to create a
new file and NOT append.
/N:nnnn Specifies how many records to write. "nnnn" is the
number. 10,000 is the default.
If you are processing a directory test, this is how
many directory entry reads that CT will perform.
/P:pppp Specifies the number of test passes. "pppp" is the
number. 1 is the default.
/R Perform random access tests.
/S Perform sequential tests.
/S:sss Specifies the individual record sizes. "sss" is the
record size. The default is 513 bytes. Specify the
total size that you want a record to be.
THE MAXIMUM VALUE FOR THIS IS 16,384. IF YOU GET A
STRING SPACE ERROR, YOU WILL NEED TO MAKE THIS VALUE
SMALLER THAN WHAT YOU SET IT AT. A small hint is
to set your sizes = to a factor of your sector size
+ 1 byte. My sectors are 512, as are most peoples, and
then add 1 = the 513 byte default record size.
/W Pause after each screen.
/X Exclude screen writes during the testing phase to
remove the video bottlenecks.
Use /A to run all tests. /D /R /S specify individual tests.
CT /N:1000 /P:5 /W 1000 record test, 5 passes, wait after each
CT /N:5000 /S:1025 5000 record test, 1025 byte records.
CT /N:5000 /W /R /D 5000 record test, wait after each screen,
perform only the random and directory tests.
CT /L:PRN Perform the default test one time and log it
Please note that the total time values will not add up to the displayed
individual test times. This is because I have used double-precision floating
point variables to hold my timer values. While you see only two decimal
places on the screen, there are a bunch that you do not see. The total values
are the result of the summation of the individual test scores, the totals are
not timed results - they are mathematical results subject to errors in rounding.
Also, the averages column is calculated by adding the floating point numbers
together and then dividing by the current pass number - NOT the total number
STOPPING THE PROGRAM:
CONTROL-BREAK will terminate the program execution safely. Note, you will
probably leave a file named ##TEST##.CT in the root directory of the drive
that you were testing. You will need to delete that by hand OR CT will delete
it the next time it is run.
The directory test bombed on drives with over 250 directories
on them. The program will now process 500 entries before looping.
This means that if you have 1000 directories, the program will
only actually use 500 of them to perform its tests.
Also, the program checked for disk space before it performed the
directory tests - this is not necessary and now space is only
checked before the sequential and random tests are performed.
Can you say "Major Revision?" This version was rebuilt from the
ground up and shares very little with previous versions.
Some of the modifications in this program are a direct result from
input by Herb Chong. If it wasn't for Herb's input, the DIR test
wouldn't be here and test data wouldn't be randomly generated.
Thank you very much Herb.
A lot of the command line switches have changed. You may need
to invoke CT with the /? to see the new ones.
Things that are new:
- Changed switches
- Changed tests
- Changed reporting
- Changed compiler
- Changed my office!
v4.3c 07/09/92 pm
Heck ... I can't win for losing. I have spent several hours now
debugging the variable overflow problem. I believe that they
have all been eliminated now.
To say "sorry," you can have VT 1.1 also if you choose to register
(or are already registered to) Cache Test - this just applies to
people registering 4.3 or who are already registered now.
v4.3b 07/09/92 am
Ooops, I switched to explicit variable typing and ran
into a problem when file sizes exceeded the limit of an
integer variable (32,767) and the program bombed. It's all
All screens can now be logged to a file or device. This
logging no longer requires that the pass count (/P:) be
greater than 1.
Every second data screen (excluding the final summary) has
a form feed added to it to prevent printing across paper
perforations when logging to a printer.
The summary screen now displays the command line that was used.
** Due to the volume of mail that I am receiving, I am forced to
stop responding to every piece of mail unless you have questions.
I'm really sorry for that one folks, but it is seriously taking
time away from me when I could otherwise be coding.
Using the /L: switch, a user can now specify where he/she
would like the summary screen to go (nice idea Jim).
Also did a little house cleaning on the program in general.
Happy New Year everyone. I would like to thank three people
especially for all of their tolerance and helpful suggestions:
Tim Aright of Queued Access, Wayne Keeter of Wayne's World,
and Jonathan Fisk.
Well Owen, I thought about it. The screen counters can
now be disabled using the /X switch on the command line.
Note, there are many variables that affect cache performance.
It was never my intention to test cache performance across
machines. BUT, it is a good idea to allow the user the
ability to decide for his/her self as to whether they want
to or not. If you disable the counters, there can be some
long pauses - especially for the Random Read/Write test - so
be patient. CT now has the extremes - a lot of counters or
none at all 😉
Whew... This one has quite a few updates:
1. COLOR (makes things a lot easier to read).
2. Tracking of timer ticks has been tightened down.
3. Created the ability to perform a number of tests
and then present a summary screen with averages
using the /P:ppp switch.
4. /W switch added for pausing after screens.
In response to Mike Focke's request for counters in the
crescendo and butterfly tests, I have again enabled them.
And Mike, thanks for the suggestions 😉
The timing routine is now based on the presence of 18.2
clock ticks per one second. The 100ths decimal location is
still weak, but improved.
Well, I accessed the BIOS segment for clock ticks to create
the decimal level counters. The second decimal place is
weak in terms of its accuracy, but I decided to leave it in.
For those of you worried about significant digits, the
algorithm used for this uses 18 clock ticks to generate one
second of time.
The test records are now 32 bytes total.
Output screen formatting is improved.
If the program is invoked without any parameters, it executes
on the active drive with a 10,000 record test made up of 32
bytes. All user input now occurs on the command line through
the use of switches.
I honestly did not intend another update so soon. It was
pointed out to me that the file structure that I had been
using was variable. As such, it made ratio comparisons
somewhat difficult. Now, the default fixed record length
is 32 bytes (the test record count is still 10,000). The
user can specify the record length by using the /F:bbbbb
switch. "bbbbb" must be between 0 and 32,765. Since the
values are now fixed, a user can do a little math (remember
that subject folks??) and discern the records per second and
so forth. Do note, that two bytes are added to the test string
in the files (CR/LF to be exact) that is why the maximum byte
size that a user can specify is 32,765 and not the 32,767 legal
1. An actual test file byte size field has been added.
This should allow users to track the actual sizes of
the test records being written.
2. Some users suggested that truly random reads and writes
should be added. This serves to get away from any form
of sequentialized data.
3. Again, more cosmetic touchups.
Due to some users having limited drive space, switches
were added to allow for different size tests to
occur. I was somewhat hesitant to do this because it
negated the ability to call results "standard," but
what really is standard?
Switches were also added to allow users to select
what tests they want to run. For now, all that can
be specified is whether or not to run all tests,
sequential tests only, or random tests only.
The ButterFly test was also added in an attempt to
give look-ahead caches a hard time. Some of the
caches that use a FIFO method of purging will have a
heck of a time with this one.
Added timers/cleared up timers for the sequential and
overall tests. Also speaking of timers, to avoid
slowing down some routines, I have removed some of
the video effects that were for the user's benefit
Special thanks to Jonathan Fisk for all of his
suggestions and debugging efforts.
Special thanks also go out to Tim Akright, the sysop
of Queued Access for all of his support.
Well, I released it. That pretty well sums it up.
I hope this program helps you evaluate some of your problems
or even makes some solutions/benefits clear. This program is
released as shareware. Its price is $10 for each concurrently
3003 LakeShore Drive, #216
St. Joseph, MI 49085
I can be reached via a modem on EXEC-PC or CHANNEL-ONE BBS.
My local BBS is Michigan Online 19200-8-N-1 (616) 429-3414
Sysop: Zeke Torres.
Code CopyRight: 1993 - George Spafford All Rights Reserved.
CACHE TEST IS DISTRIBUTED AS IS. THE AUTHOR (GEORGE SPAFFORD) MAKES NO
WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED
TO WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE,
WITH RESPECT TO THIS SOFTWARE AND DOCUMENTATION. IN NO EVENT SHALL
THE AUTHOR BE LIABLE FOR ANY DAMAGES, INCLUDING LOST PROFITS, LOST
SAVINGS, OR ANY OTHER INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OF OR THE INABILITY TO USE THIS PROGRAM.