@InProceedings{krieger:hfs2,
  author = {Orran Krieger and Michael Stumm},
  title = {{HFS}: A Performance-Oriented Flexible File System Based on
  Building-Block Compositions},
  booktitle = {Proceedings of the Fourth Workshop on Input/Output in Parallel
  and Distributed Systems},
  year = {1996},
  month = {May},
  pages = {95--108},
  publisher = {ACM Press},
  address = {Philadelphia},
  earlier = {krieger:hfs},
  later = {krieger:hfs3},
  keywords = {parallel I/O, parallel file system, object-oriented, pario-bib},
  abstract = {The Hurricane File System (HFS) is designed for (potentially
  large-scale) shared memory multiprocessors. Its architecture is based on the
  principle that, in order to maximize performance for applications with
  diverse requirements, a file system must support a wide variety of file
  structures, file system policies and I/O interfaces. Files in HFS are
  implemented using simple building blocks composed in potentially complex
  ways. This approach yields great flexibility, allowing an application to
  customize the structure and policies of a file to exactly meet its
  requirements. For example, a file's structure can be optimized for concurrent
  random-access write-only operations by ten processes. Similarly, the
  prefetching, locking, and file cache management policies can all be chosen to
  match an application's access pattern. In contrast, most existing parallel
  file systems support a single file structure and a small set of policies.
  \par We have implemented HFS as part of the Hurricane operating system
  running on the Hector shared memory multiprocessor. We demonstrate that the
  flexibility of HFS comes with little processing or I/O overhead. We also show
  that for a number of file access patterns HFS is able to deliver to the
  applications the full I/O bandwidth of the disks on our system.},
  comment = {A published form of krieger:hfs and the thesis krieger:thesis.
  Their main point is that the file system is constructed from building-block
  objects. When you create a file you choose a few building blocks, for
  example, a replication block that mirrors the file, and some distribution
  blocks that distribute each replica across a set of disks. When you open the
  file you plug in some more building blocks, e.g., to do prefetching or to
  provide the kind of interface that you want to use. They point out that this
  flexibility is critical to be able to get good performance, because different
  file-access patterns need different structures and policies. They found that
  mapped files minimize copying costs and improve performance. They were able
  to obtain full disk bandwidth. Great paper.}
}

