DLHT: A Non-blocking Resizable Hashtable with Fast Deletes and Memory-awareness
Antonios Katsarakis, Vasilis Gavrielatos, Nikos Ntarmos
TL;DR
DLHT tackles the bottlenecks of memory-resident concurrent hashtables by abandoning open-addressing in favor of a memory-aware closed-addressing design with bounded cache-line chaining. It integrates lock-free operations, fast deletes, software prefetching, batching, and a non-blocking parallel resize to hide latency and maintain high occupancy. Empirical evaluation shows DLHT achieving around 1.66B Get requests per second and strong throughput gains across inserts, deletes, and resizes, with substantial improvements over both closed- and open-addressing baselines. The design’s flexibility, including variable-size keys/values, namespaces, and a pointer-based API, enables practical deployment across caching, KVS, and transactional workloads, offering significant impact for memory-resident data-intensive applications.
Abstract
This paper presents DLHT, a concurrent in-memory hashtable. Despite efforts to optimize hashtables, that go as far as sacrificing core functionality, state-of-the-art designs still incur multiple memory accesses per request and block request processing in three cases. First, most hashtables block while waiting for data to be retrieved from memory. Second, open-addressing designs, which represent the current state-of-the-art, either cannot free index slots on deletes or must block all requests to do so. Third, index resizes block every request until all objects are copied to the new index. Defying folklore wisdom, DLHT forgoes open-addressing and adopts a fully-featured and memory-aware closed-addressing design based on bounded cache-line-chaining. This design offers lock-free index operations and deletes that free slots instantly, (2) completes most requests with a single memory access, (3) utilizes software prefetching to hide memory latencies, and (4) employs a novel non-blocking and parallel resizing. In a commodity server and a memory-resident workload, DLHT surpasses 1.6B requests per second and provides 3.5x (12x) the throughput of the state-of-the-art closed-addressing (open-addressing) resizable hashtable on Gets (Deletes).
