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.
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
Yiming Hu extended the above simulator, with better support for multiple disks. His code is available in this tarball.
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