The paper "The Performance Impact of Kernel Prefetching on Buffer
Cache Replacement Algorithms" and my synthetic benchmarks indicated
that LIRS is a clear win. It is low-priority because it can be viewed
as an internal optimization, whereas previous work has focused on core
algorithms, features, and apis. Performance optimizations were
deferred, which LIRS is compared to LRU.
LIRS has additional complexities in a concurrent setting compared to
LRU. The constant resizing of the stack and queue can cause race
conditions with weighted entries. This isn't an issue in the near term
due to CacheBuilder using a segmented hash-table. The removal of write
segments, such as in CLHM and CHMv8, causes the race condition to be
an implementation challenge. This caused me troubles in my efforts to
implement LIRS in CLHM, which is my playground before helping Charles
bring the approaches into Guava.
There are a lot of performance-related areas to explore. I like LIRS,
but I also dislike making design decisions that may not be forward
compatible if ever ported to CHMv8's hash-table design.
-Ben