This document describes the file transfer test program CDSPEED. This program characterizes the performance of a CD-ROM drive, controller, and device driver. 
About CDSPEED 
CDSPEED, a performance monitoring and evaluation tool, measures CPU utilization when transferring data from a CD-ROM drive at sustained data transfer rates into main memory. CPU utilization is an important measurement that indicates: 
•	the CD-ROM drive's ability to transfer data at sustained data transfer rates
•	the efficiency of the CD-ROM device driver
•	the CPU bandwidth available to process the data after a read request 
and before the next required read operation
CDSPEED is a DOS application. It will not run from inside a DOS window when Windows runs in the enhanced mode. CDSPEED is intended to be an indicator to assist you in evaluating overall system performance. It can help identify key areas in the device driver that might need to be tuned to optimize performance. By specifying the desired sustained transfer rate and data block sizes, you can characterize the CD-ROM drive over a range of operating conditions. You can have CDSPEED display the results in either detailed or terse formats. 
The Need for Speed Tests
Advantages of CD-ROM drives include not only the ability to store large volumes of information but also the ability to transfer data off the CD at a sustained data transfer rate. Transferring data at a sustained rate is called data streaming and is measured in the number of kilobytes per second transferred. For CD-ROM drives, this value is typically 150 kilobytes per second.
Many applications, such as those for multimedia, rely upon the data stream coming off the disc at a guaranteed rate of 150 kilobytes per second. While the transfer rate on any one drive is fairly constant, it is often less than 150 kilobytes per second; sometimes it is much less. If the designers of an application decide to support a drive which cannot maintain 150 kilobytes per second, then they have to decide the minimum transfer rate they will support. To intelligently select the minimum transfer rate, they need information about sustainable transfer rates. Therefore the sustainable transfer rate of your drive is important information which you should provide to your customers.

Multimedia PC (MPC) Speed Requirements
You can use the CDSPEED test utility to test your CD-ROM drive against the speed requirements for the MPC specification. The MPC requirements for CD-ROM drives are:
	sustained 150 kilobyte/second transfer time
	1 second maximum seek time
	10,000 hours MTBF
	mode 1 capability (mode 2 and form 1 and 2 optional)
	subchannel Q (subchannels P and R-W optional)
	MSCDEX 2.2 (or greater) driver validated by Microsoft
	physical capability of vertical or horizontal orientation
The drive must be capable of maintaining a sustained transfer rate of 150 kilobytes per second without consuming more than 40% of the CPU bandwidth in the process. This requirement is for read block sizes of between 8 kilobytes and 24 kilobytes and lead time of no more than is required to load the CD-ROM buffer with 1 read block of data. We recommend that the drive have on-board buffers of 64 kilobytes and implement read-ahead buffering.
For example, the following Excel chart created from CDSPEED data shows a CD-ROM drive and device driver that meets the transfer rate specification. For the read block sizes of between 8 and 24 kilobytes, the 150 KB/sec curve shows a CPU utilization of less than 40% utilization.

Operating Environment for CDSPEED
Your computer will require the following software to run CDSPEED:
•	MS-DOS Version 3.31 or higher
•	MSCDEX Version 2.20 or higher
•	OEM Device Driver for the CD-ROM drive
Installing CDSPEED
Install CDSPEED and other related files onto your system by copying the distribution disk to your hard disk. The following procedure places these files in a directory called CDSPEED:
1.	From the DOS prompt, enter the following command and press ENTER to create the CDSPEED directory on your hard disk:
		MD \CDSPEED

2.	Copy the files from the distribution disk to CDSPEED. The following command assumes the distribution disk is in drive A and the current drive is a hard disk:
		COPY A:*.*   \CDSPEED
	The following files are included in this package: 
		BLKTEST.BAT	Batch file that calls CDSPEED with varying 
				requested block size 
		CDTEST.BAT		Batch file that calls BLKTEST.BAT with varying 
				requested transfer rates
		CHARTCD1.XLM	Excel 3.0 macro to chart actual transfer rate versus 
				block size and overall CPU utilization versus block size
		CHARTCD2.XLM	Excel 3.0 macro to chart background CPU utilization 
				versus block size and CPU blocked by readings versus 
				block size
		CDSPEED.EXE	Test program
		README.TXT		Text file containing the latest information on CDSPEED
3.	Change the current working directory to CDSPEED with the following command:
		CD \CDSPEED
Running CDSPEED
You can run CDSPEED directly from the DOS prompt or from the batch files included with CDSPEED. These batch files characterize the CD-ROM by running a standard series of tests that vary the requested data transfer rates and data block sizes for each test. After obtaining the initial information from the batch files, you might run CDSPEED directly with your selection of parameters to further characterize the CD-ROM drive in the areas that you are most interested. 
Running CDSPEED From Batch Files
The batch files CDTEST.BAT and BLKTEST.BAT test a wide range of CD ROM performance parameters by successively calling CDSPEED.EXE. Test results from the batch files are stored in a text file that you specify.
CDTEST.BAT calls the second batch file BLKTEST.BAT passing it the requested data transfer rate in increments of 30 kilobytes per second. (CDTEST starts at 30 kilobytes per second and ends with 150 kilobytes per second.) CDTEST also passes the name of the test file located on the CD-ROM to BLKTEST. 

During execution, BLKTEST.BAT calls CDSPEED.EXE and specifies the following command line options:
•	Name of the test file located on the CD ROM
•	Requested transfer rate (ranges in value from 30 kilobytes per second to 150 kilobytes per second)
•	Requested block size (ranges from 4 kilobytes to 64 kilobytes)
•	Requested primer size (Matches the requested block size)
•	Terse output mode switch
•	Name of the log file
These batch files perform a basic set of tests. To perform additional tests, edit the batch files--including the appropriate conditions for your tests. Or, run CDSPEED directly from the DOS prompt.
To run CDSPEED from the batch files:
1.	Start at the DOS prompt. If you are running Windows in the enhanced mode, exit from the Windows Program Manager.  CDSPEED needs a more precise timer than is available from the Virtual Timer Device. 
2.	Type the following command at the DOS prompt and press Enter: 
		CDTEST <FileName> <LogFileName>
	Replace <FileName> with the name of the test file to be accessed from the CD-ROM drive. Specify a file of at least 1.5 megabytes to obtain accurate results.
	Also, replace <LogFileName> with the name of a file to hold the results of the test. 
The following example runs CDSPEED from the batch files and specifies the D:\IMMPOST\CNTRL.C00 file as the test file accessed by the CD-ROM drive. (If you want to use CNTRL.C00 as the test file, it is located on the Windows with Multimedia extensions MODK CD-ROM.) The example stores test results in the TEST.LOG file located in the current working directory. This test takes approximately 2-1/2 hours to complete.
	CDTEST   D:\IMMPOST\CNTRL.C00   TEST.LOG

Running CDSPEED From the DOS Prompt
If you are running Windows in the enhanced mode, exit from the Windows Program Manager. CDSPEED needs a more precise timer than is available from the Virtual Timer Device. 
At the DOS prompt, type the following command and press Enter. 
	CDSPEED <FileName> <options>
Replace <FileName> with the name of the test file to be accessed from the CD-ROM drive. Specify a file of at least 1.5 megabytes to obtain accurate results.
The string <options> represents command line options that you can invoke with CDSPEED. To see a list of the CDSPEED options, run CDSPEED without using any command line arguments--no test file name and no options. 
The following list summarizes the command line arguments available for CDSPEED:
FileName	Specifies the path and name of file to test. The FileName is 
required for operation of CDSPEED.
/r:[TransferRate]	Specifies the transfer rate in bytes per second. The transfer rate 
can range from 1 to 4294967 with a default of 150 kilobytes per 
second. Use this value to specify the sustained data read rate that 
might be assumed by an application.
/b:[BlockSize]	Specifies the number of bytes (BlockSize) read in each read 
request. BlockSize can range from 1 to 65535 bytes with a default 
of 10 kilobytes.
/p:[PrimerBytes]	Specifies the number of bytes used to prime the buffer. This 
parameter fills a read-ahead buffer before the transfer rate timing 
begins. This is useful when testing transfer rates approaching the 
maximum rate available for CD-ROM drives. The number of bytes 
range from 0 to 65535 with a default of 10 kilobytes.
/a:[PercentBlocked]	Specifies the maximum percentage of read time interval that CPU 
should be blocked to perform the read request of data. Default is 
40%. This value is used for scaling performance measurements but 
otherwise has no effect on actual values returned.
/t	Requests terse output. The output is useful for processing and 
analyzing with a spreadsheet program. Default is verbose 
(non-terse) mode output. The order for the terse output data is: 

<FileName>, <TransferRate>, <BlockSize>, <PrimerBytes>, <%BackgroundCPU>, <TotalBytesRead>, <MeasuredTransferRate>, <%TimeBlockedByRead>, <%OverallUtilization>

The following table describes the fields of data returned in the terse 
mode:

Field	Description

FileName	Name of the file used during the test

TransferRate	Requested transfer rate

BlockSize	Block size used for test

PrimerBytes	Number of bytes used to prime buffer

%BackgroundCPU	Percentage of background CPU time

TotalBytesRead	Number of bytes read for test

MeasuredTransferRate	Transfer rate determined by test 

%TimeBlockedByRead	Percentage of time CPU blocked by 
	the actual read

%OverallUtilization	The overall percent utilization including 
	background activity of the driver
/?	Displays the list of command line options.
The values for the /r, /b, and /p switches use bytes as the default units. For convenience, you can append k or s after the number to indicate other units:
	k or K	Kilobytes (1024 bytes)
	s or S	Sectors (2 kilobytes)
For example, /p:4s is equal to 8192 bytes (4 x 2048).

Reading the Output From CDSPEED
CDSPEED's performance information is displayed on the standard output in either a detailed (verbose) or terse format. Terse format is suitable for analysis and charting using a spreadsheet such as Microsoft Excel. The terse format is described with the /t switch of the command line options. The verbose mode displays a table containing the results of the test. The following entries are listed in the table created by CDSPEED:
Returned Value	Description
Test File Name	The <FileName> specified.
Requested Transfer Rate	The <TransferRate> specified with the /r switch.
Delay Between Reads	The allowed time between reads to attain the 
requested data rate.
Allowed Percent Block	The maximum percentage of read interval time 
the CPU should be blocked to perform the read request.
Read Block Size	The <BlockSize> specified with the /b switch.
Primer Size	The <PrimerBytes> specified with the /p switch.
Preparing for tests	Status message advising of the progress of preparation.
Priming XX kb--waiting YY ms	Status message advising of the progress of priming 
the data buffer.
Performing transfer rate tests	Status message advising of the progress of the test.
Total Data Read	The number of bytes read. The number of kilobytes 
and sectors read are listed in parentheses.
Total Time Expired	The total elapsed time for the test.
Reads Exceeding XX ms	The number and percentage of reads exceeding the 
percentage specified for PercentBlocked; or the 
number and percentage of reads exceeding the read 
interval.
Longest Time Blocked by Read	Specifies the longest time blocked during a read.
Shortest Time Blocked by Read	Specifies the shortest time blocked during a read.
Overall Transfer Rate	The measure transfer rate in kilobytes per second.

Percent Time Blocked by Reads	The total percentage of time the CPU was blocked 
by reads.
Background CPU Usage	The percentage of background CPU usage.
Overall CPU Utilization 	The overall percentage of CPU utilization during 
data streaming.
Using the Results of CDSPEED
Overall CPU utilization is displayed as a percentage of total time used per read request. Part of this time is the time required for the CPU to service the CD-ROM's interrupt requests to keep the read-ahead buffers full. Since elapsed time includes time for the overall system transfer (such as the DMA transfer rate), performance will vary on identical processors on different machines with varying DMA hardware, bus clock speeds, and other concurrent DMA activity, if any. 
CDSPEED determines several characteristics of a CD-ROM drive. Based on the results of CDSPEED, you might create the following performance curves:
•	Transfer rate as a function of block size
•	Transfer rate as a function of primer size
•	CPU usage (% time blocked) as a function of block size
•	CPU usage (% time blocked) as a function of expected transfer rate
•	CPU usage (% time blocked) as a function of both block size and 
expected transfer rate
How CDSPEED Measures the Results
CDSPEED simulates an application that requests data from a CD at a user determined sustained data transfer rate. CDSPEED divides the read data block size by the desired transfer rate to determine the amount of time needed to read a data block. This time is called the read interval time. (For example, a 150 kilobyte per second data transfer rate and 15 kilobyte block size yields a read interval time of 100 milliseconds.) The CD-ROM system must read a block of data within the read interval time for it to maintain the requested data rate. Based on the values in the previous example, if a CD-ROM system takes exactly 100 milliseconds to complete a request, the CPU will not have any time available to process the read data before performing the next read operation. In this case, the CPU utilization is 100%.

At every read interval time unit, CDSPEED issues a data read and transfer request and measures the amount of time it takes to complete the task. This time is measured as time that is blocked. While blocked, the CPU can do no other task until the transfer operation completes. Because some CD-ROM systems buffer their data, the time blocked by reads on these systems can be artificially low. In this case, this measurement determines the time to read data from the buffer rather than the CD-ROM. To account for buffering (and any other background CD-ROM operations), CDSPEED also determines the background CPU usage.
To determine the background CPU usage, CDSPEED performs an internal task prior to performing any CD-ROM reads. CDSPEED uses the time it takes to perform this task as a baseline measurement. During the read interval period after the data read, CDSPEED performs the same task and measures the time it takes to complete this operation. The baseline measurement is then compared to the elapsed time measurement and any difference is attributed to the CD-ROM device driver maintaining it's fully cached or read-ahead data buffers in the background. This difference is the background CPU usage measurement.
Note: On the very first read, CDSPEED issues a read request for 4 kilobytes of data and then waits for the device driver to return. After this read, the device driver continues to fill (or prime) its buffer with the data and CDSPEED waits for it to complete. Priming the buffer compensates for the amount of time it takes for the drive to perform an uncached read and seek. After priming, the drive should be ready for subsequent reads of data blocks from the cached memory buffer and to maintain data streaming at the sustained data transfer rate. 
CDSPEED continues executing read requests at calculated time intervals to sustain the specified transfer rate until it reaches the end of the test file. It then produces the summary results. 
Error Messages
The following section summarizes the error message CDSPEED can display. These error messages are directed to the standard error stream. For error handling in batch files, each error returns a unique DOS error return code. This value is listed with the error description.
** THIS PROGRAM CANNOT BE RUN IN A WINDOWS 3.X DOS VM **

You cannot run CDSPEED in an enhanced mode Windows DOS VM. Timers accessed through the Virtual Timer Device in enhanced mode Windows do not have enough precision to obtain accurate results with CDSPEED. DOS error return code: 1
Switch requires ':' separator.

CDSPEED expected a colon ":" between a command line switch and the numeric value following it. DOS error return code: 2
Memory allocation error.

CDSPEED could not obtain enough memory to make the measurement. CDSPEED requests memory based on the block size and primer size. Try reducing these values if you need to run CDSPEED with limited memory.If this cannot be allocated, then you get this error. DOS error return code: 3
Memory free error.

CDSPEED could not free the memory it has allocated. This message will rarely occur. DOS error return code: 4
Read error!

CDSPEED encountered a read error during operation. DOS error return code: 5
Unknown arguments on command line.

The command line arguments contain an option CDSPEED does not recognize. DOS error return code: 6
No test filename argument supplied.

The command line arguments did not contain a name of a data file. CDSPEED uses this file as the source of the data it reads during the test. The test file should be greater than 1.5 megabytes. DOS error return code: 7
More than one test filename argument supplied.

CDSPEED interpreted more than one command line argument as a filename. Make sure that all numeric arguments have switches and check that spaces are not inappropriately placed in the command line. For example, check that the name used for the file does not contain spaces or the numeric values do not contain any spaces. DOS error return code: 8
Can't open specified file.

CDSPEED was unable to open the test file. DOS error return code: 9
File is too small for test.

Although 1.5 megabytes is recommended as the minimum file size to obtain the best measurement, CDSPEED can use smaller files. The smallest file CDSPEED can use is 4 kilobytes plus twice the blocksize. (CDSPEED uses 4 kilobytes for the initial prime. CDSPEED then uses two data blocks to obtain an average reading.) DOS error return code: 10

Delay value between reads is too small for 1ms timer resolution.

CDSPEED cannot obtain a valid measurement if the delay (the ratio of the block size to the transfer rate) between reads is less than twice the timer resolution. The delay must be greater than 2 milliseconds. DOS error return code: 11
Delay value between reads is too large.

The delay (the ratio of the block size to the transfer rate) between data reads is too large to obtain a valid measurement. The delay must be less than 10 seconds. DOS error return code: 12
Warning Messages
The following section summarizes the warning message CDSPEED can display. These messages are directed to the standard error stream. All of these messages return 1 for the DOS error return code. 
MSCDEX is not installed.

CDSPEED did not detect MSCDEX which is required for operation.
Rate must be > 0 and < 65536, defaulting to 150k bytes/second.

The value specified for the /r:[TransferRate] switch is outside the valid limits.
Block size must be > 0 and < 65536 , defaulting to 10k bytes/read.

The value specified for the /b:[BlockSize] switch is outside the valid limits.
Primer must be >= 0 and < 65536 , defaulting to 10k bytes/read.

The value specified for the /p:[PrimerBytes] switch is outside the valid limits.
Percent blocked must be between 1 and 99 %, defaulting to 40 %.

The value specified for the /a:[PercentBlocked] switch is outside the valid limits.
File size should be at least 1.5 megabytes for accurate testing.

For the most reliable results, the test file used by CDSPEED should be larger than 1.5 megabytes.