THE SPHYNX
CASE STUDY

Furrballs — Topology-Aware Concurrent Cache

A NUMA-aware concurrent cache for asymmetric memory systems, authored end to end and validated on AMD EPYC and Intel Ice Lake EC2 metal instances. Published as Technical Report v1.34.0 with a Zenodo DOI.

Category

Authored Systems Software

Stack

C++20NUMALock-FreeSIMDCache EvictionBenchmarking

Challenge

Modern multi-socket servers expose NUMA topology where remote memory access is materially slower than local.

Existing caches (Redis, Memcached, Meta CacheLib) ignore memory topology, and CacheLib handles it with static per-domain sharding that does not adapt to where a page is actually accessed.

Approach

Designed and implemented a C++20 cache with per-node physical block allocation, PMR-backed containers, and per-node sharded key stores. Used SeqLock-based lock-free reads to remove synchronization from the read path, and a concurrent Swiss table with SSE2 SIMD probing and per-slot seqlock concurrency as the backing store for the ARC policy, with deferred promotions through a lock-free MPSC buffer.

Added staging pages so the write path has an O(1) fast path decoupled from eviction, and benchmarked an S3-FIFO policy with a per-slot atomic frequency counter against LRU.

Validated on real multi-socket hardware (EC2 c6a.metal, AMD EPYC Milan, 4 NUMA nodes, and c6i.metal, Intel Ice Lake) and published the design and evaluation as a technical report with a Zenodo DOI.

Outcome

Measured 22x lower p50 GET latency and 10x higher throughput than Meta CacheLib on YCSB-A (64B values, 2 threads, 32MB usable cache, Zipfian theta 0.99, 10 repetitions) on EC2 c6a.metal, and 1.5x to 9.5x lower p50 GET latency across the capacity and value-size sweep at equal usable capacity, with 100% versus 50% memory efficiency.

Diagnosed a false-sharing bug where alignas(64) statistics atomics caused cross-socket cache-line bouncing, cutting 4-thread p50 GET from 587ns to 71ns.

Kept the companion REMARC policy framework in the report as a documented negative result: it added no measurable value over simple EMA counting.