A Detailed Simulation Model of the HP 97560 Disk Drive

We implemented a detailed model of the HP 97560 disk drive, to replicate a model devised by Ruemmler and Wilkes (both of Hewlett-Packard). The code has been used in many places:

A technical report about our model is available, containing documentation and results of validation experiments. The code is available in three versions, shown below.

However, we strongly recommend that you look at the DiskSim Simulation Environment by Greg Ganger, Bruce Worthington, and Yale Patt. It's better.

See also the original paper by Ruemmler and Wilkes: "An introduction to disk drive modelling", IEEE Computer 27(3):17-28, March 1994. (C) Copyright 1994 IEEE.

Traces and other related information used to be found at HP.


Kotz version (the original)

David Kotz, with Song Bac Toh and Sriram Radhakrishnan. Their code is available in this tarball.

Here is the README file from that code:

Model of the HP 97560 SCSI disk drive

$Id: README,v 2.0 94/07/18 12:35:11 dfk Exp $

This directory contains some software to simulate the behavior of the
HP 97560 disk drive.  The model is modularized so that it can be
plugged into a variety of environments.  This leads to a three-level
structure: 
    driver  	generates requests and calls the model
    model   	simulates the disk
    support 	supports event-driven simulation

For example, we include two drivers and one support structure here.
They aren't the prettiest code ;-) but they did what we needed them to
do.  Also, there is little documentation. Caveat emptor.  

The first driver, testdriver, is a simple program to feed a set of
synthetic requests to the driver for debugging and testing purposes.

The second driver, analysis, is used to feed a trace of requests (from
the SRT format used by Ruemmler and Wilkes, see analysis/README) and
spit out the elapsed time for each request.

The support mechanism includes a bare-minimum discrete-event
scheduling program, and other miscellaneous stuff.  (We actually use
this model inside another much larger simulator based on Proteus, and
much of the support here is just to help the model stand alone
separate from that larger simulator). 

./doc contains a tech report about the model, some figures, and the
data distributions we obtained in our validation (in reduced form).

If you find our model useful, please cite our TR in any derived works
you publish: https://digitalcommons.dartmouth.edu/cs_tr/94/

Once again, no promises on code prettiness!  

David Kotz
Song Bac Toh
Sriram Radhakrishnan

Dartmouth College
July 1994


Hu version

Yiming Hu extended the above simulator, with better support for multiple disks. His code is available in this tarball.


Nieuwejaar version

Nils Nieuwejaar reimplemented the above simulator for use in the Galley File System.

This is the disk simulator we used in the IOPADS '96 paper, Performance of the Galley Parallel File System.

His code can be found in this tarball.

Here is the README file from that code:


This directory contains software to simulate the HP 97560 disk drive.

Background
----------
This implementation of the disk model is based on earlier
implementations by Ruemmler and Wilkes at HP and Dave Kotz (et.al.)
here at Dartmouth.

Among the factors simulated by all these models are head-switch time,
track-switch time, SCSI-bus overhead, controller overhead, rotational
latency, and a disk cache.

Ruemmler and Wilkes' simulator is not available, but their excellent
paper describing it is available by ftp:
   ftp://ftp.hpl.hp.com/pub/wilkes/HPL-93-68rev1.ps.Z
NOTE 2020: that link no longer works.  See the following page:
   https://john.e-wilkes.com/work-publications.html
and it refers to the later version of that TR, published in IEEE Computer:
   https://john.e-wilkes.com/papers/IEEEComputer.DiskModel.pdf

Dave Kotz's simulator is available [above].

Dave's simulator has one key advantage over mine: it can simulate
multiple devices on a single SCSI bus, including contention for the bus
(although this part hasn't been validated).  Dave's was designed to be
used within the Proteus simulator. As a result, it has a fairly rigid
event model, a (IMHO) strange time model, and a fair amount of baggage
in the code.

This model assumes that the disk being simulated is the only device on
the SCSI bus.  The code is much simpler and much smaller (about .2 to
.25 the size).  Finally, this model should be much easier to integrate
into another system, since it comes with so little baggage.

This model was validated by trace-driven simulation, using data
provided by Hewlett-Packard and used by Ruemmler and Wilkes in their
study. Comparing the results of this trace-driven simulation with the
measured results from the actual disk, we obtained a demerit figure of
5.0%, indicating that the model is extremely accurate.  (For a
discussion of the 'demerit figure', see the Ruemmler & Wilkes paper.)


Using the model
---------------

The interface to the model is very simple.  

   disk_init() -
                initialize the model
   faux_read(ulong_t sector, int quant) -
                read quant sectors
   faux_write(ulong_t sector, int quant, int sync) -
                write quant sectors, either synchronously or not

faux_read() and faux_write() return the number of microseconds before the
operation is complete.  (For an async. write, the operation is complete
when all the data is in the disk cache).

The model currently uses real time.  So, if 12 milliseconds pass
between calls to faux_read(), the model will actually behave as if 12
milliseconds have passed.  Converting the model to use another system
(eg, some kind of fake time in a simulator) should be trivial.  Just
change the gettimeofday() calls to getmyfaketime() (or whatever).

I've had this working for many months now, but I just spent a little time
cleaning up and commenting the code.  Hopefully I didn't screw anything
up in the process.

If you find this useful, or if you find any bugs, please let me know.

Good luck,
  Nils Nieuwejaar
  nils@cs.dartmouth.edu

Last modified Thursday, May 30, 1996