Fibre Cache Arena
fibre_cache against moka, quick_cache and stretto through one fixed-duration workload harness.
Results
Test run
- Machine
- MacBook M4 Pro (14 cores)
- Measured
- 2026-10-31T04:12:05Z
| Implementation | Crate | Version |
|---|---|---|
| fibre_cache.s3fifo | fibre_cache | 0.4.13 |
| fibre_cache.tinylfu | fibre_cache | 0.4.13 |
| moka | moka | 0.12.16 |
| quick_cache | quick_cache | 0.6.24 |
| stretto | stretto | 0.8.4 |
Method
Each cell runs every engine in turn for a fixed number of seconds and reports how many operations its workers completed. Workers stay alive for the whole run, keys are shuffled and dealt round-robin and each worker checks the stop flag every 256 operations. Sync workers are OS threads; async workers are tasks on a multi-thread tokio runtime with one worker thread per task; mixed puts half the workers on each side of the same instance.
Keys and values are u64 and every entry costs 1, so the capacity is a number of entries. hit, hot and insert fill the cache to capacity before timing starts. hit reads resident keys, hot has every worker read the key filled last, insert adds keys outside the filled range and zipf draws keys from a Zipf distribution (exponent 0.99) over ten times the capacity starting from an empty cache, inserting on a miss.
A sampler thread reads the entry count every millisecond; the peak it saw is reported against the capacity, which is how an implementation's capacity bound is checked under load.
Timing starts once every worker has reached a barrier. The power mode and load average are recorded at the start and the end of the run.
Reproducibility
Each cell is one fixed-duration run, so these figures carry no spread between samples.
quick_cache is an unranked yardstick: it has no expiry or cache-level loader and its async cells call a sync get on a blocking lock.
