Highly-Efficient Persistent FIFO Queues
Panagiota Fatourou, Nikos Giachoudis, George Mallis
TL;DR
The paper tackles the challenge of building efficient, durable FIFO queues on non-volatile memory under crash-recovery by reusing and extending state-of-the-art concurrent queue designs. It systematically studies persistence strategies, introduces PerIQ and PerCRQ with a local-persistence optimization, and then presents PerLCRQ, a durable, scalable FIFO built as a linked list of PerCRQ instances. Empirical results show PerLCRQ delivering at least a $2\times$ throughput gain over the best persistent-queue competitors, while also elucidating a clear trade-off between normal execution persistence and recovery cost. The work also provides a practical framework for simulating failures and measuring recovery, and highlights local-persistence as a general technique to reduce persistence overhead in contention-heavy shared variables.
Abstract
In this paper, we study the question whether techniques employed, in a conventional system, by state-of-the-art concurrent algorithms to avoid contended hot spots are still efficient for recoverable computing in settings with Non-Volatile Memory (NVM). We focus on concurrent FIFO queues that have two end-points, head and tail, which are highly contended. We present a persistent FIFO queue implementation that performs a pair of persistence instructions per operation (enqueue or dequeue). The algorithm achieves to perform these instructions on variables of low contention by employing Fetch&Increment and using the state-of-the-art queue implementation by Afek and Morrison (PPoPP'13). These result in performance that is up to 2x faster than state-of-the-art persistent FIFO queue implementations.
