  File systems must allocate space for files without knowing what will be added
or removed in the future. Over the life of a file system, this may cause
suboptimal file placement decisions that eventually lead to slower performance,
or aging. Conventional wisdom suggests that file system aging is a solved
problem in the common case; heuristics to avoid aging, such as colocating
related files and data blocks, are effective until a storage device fills up,
at which point space pressure exacerbates fragmentation-based aging. However,
this article describes both realistic and synthetic workloads that can cause
these heuristics to fail, inducing large performance declines due to aging,
even when the storage device is nearly empty.
  We argue that these slowdowns are caused by poor layout. We demonstrate a
correlation between the read performance of a directory scan and the locality
within a file system's access patterns, using a dynamic layout score. We
complement these results with microbenchmarks that show that space pressure can
cause a substantial amount of inter-file and intra-file fragmentation. However,
our results suggest that the effect of free-space fragmentation on read
performance is best described as accelerating the file system aging process.
The effect on write performance is non-existent in some cases, and, in most
cases, an order of magnitude smaller than the read degradation from
fragmentation caused by normal usage.
  In short, many file systems are exquisitely prone to read aging after a
variety of write patterns. We show, however, that aging is not inevitable.
BetrFS, a file system based on write-optimized dictionaries, exhibits almost no
aging in our experiments. We present a framework for understanding and
predicting aging, and identify the key features of BetrFS that avoid aging.
