@InProceedings{wu:thrashing,
  author = {Kun-Lung Wu and Philip S. Yu and James Z. Teng},
  title = {Performance Comparison of Thrashing Control Policies for Concurrent
  Mergesorts with Parallel Prefetching},
  booktitle = {Proceedings of the 1993 ACM SIGMETRICS Conference on Measurement
  and Modeling of Computer Systems},
  year = {1993},
  pages = {171--182},
  keywords = {disk prefetching, parallel I/O, disk caching, sorting,
  pario-bib},
  comment = {They discuss prefetching and caching in database machines where
  mergesorts merge several input streams, each from its own disk, to one output
  stream, to its own disk. There are concurrent merges going on. A merge can
  cause thrashing when writes grab a clean buffer that holds an unused
  prefetch, thus forcing the block to later be read again. They consider
  several policies to handle this, but it seemed to me like they missed an
  obvious alternative, that may have been better: whenever you need a clean
  buffer to write into, but all the clean buffers hold unused-prefetched
  blocks, stall and wait while the dirty blocks are flushed (presumably started
  earlier when the clean-block count got too low). It seems better to wait for
  a half-finished write than to toss out a prefetched block and later have to
  read it again. Their simulations show that their techniques help a lot.}
}

