HyperClockCache - A lock-free Cache alternative for RocksDB block cache
that offers much improved CPU efficiency vs. LRUCache under high parallel
load or high contention, with some caveats:
-
Not a general Cache implementation: can only be used for
BlockBasedTableOptions::block_cache, which RocksDB uses in a way that is
compatible with HyperClockCache.
-
Requires an extra tuning parameter: see estimated_entry_charge below.
Similarly, substantially changing the capacity with SetCapacity could
harm efficiency. -> EXPERIMENTAL: the tuning parameter can be set to 0
to find the appropriate balance automatically.
-
Cache priorities are less aggressively enforced, which could cause
cache dilution from long range scans (unless they use fill_cache=false).
-
Can be worse for small caches, because if almost all of a cache shard is
pinned (more likely with non-partitioned filters), then CLOCK eviction
becomes very CPU intensive.