The WOLF simulator contains more than 10,000 lines of C++ code. It consists of an LFS simulator, which acts as a file system, on top of a disk simulator. The disk model is ported from Ganger's disk simulator [5]. Our LFS simulator is developed based on Sprite LFS. We ported the LFS code from the Sprite LFS kernel distribution and implemented a trace-driven class to accept trace files. By changing a configuration file, we can vary important parameters such as the number of segment buffers, the segment size and the read cache size. In the simulator, data is channeled into the log through several write buffers. The write buffers are flushed every 30 seconds of simulated time to capture the impact of partial segment writes. A segment usage table is implemented to maintain the status of disk segments. Meta-data structures including summary block and inode map are also developed. We built a checkpoint data structure to save blocks of inode map and segment usage table periodically.
The disk performance characteristics are set in Disksim's config files. We chose two disks for testing, a small (1 GB capacity) HP2247A disk and a large (9.1 GB) Quantum Atlas10K disk. The small HP2247A was used for Sitar and Harp traces, because the two traces have small data-sets (total data accessed 1 GB). A small disk is needed in order to observe the garbage collection activities. The large disk was used for all other traces. Using two very different disks also helps us to investigate the impacts of disk features like capacity and speed on WOLF performance. The HP2247A disk' spindle speed is set to 5400 RPM. The read-channel bandwidth is 5 MB/sec. Its average access time is 15 ms. The Quantum Atlas10K has a 10024 RPM spindle speed. Its read-channel bandwidth is 60 MB/sec and average access time is 6 ms.