Constant-time snapshots with applications to concurrent data structures
Yuanhao Wei, Naama Ben-David, Guy E. Blelloch, Panagiota Fatourou, Eric Ruppert, Yihan Sun
Abstract
We present an approach for efficiently taking snapshots of the state of a collection of CAS objects. Taking a snapshot allows later operations to read the value that each CAS object had at the time the snapshot was taken. Taking a snapshot requires a constant number of steps and returns a handle to the snapshot. Reading a snapshotted value of an individual CAS object using this handle is wait-free, taking time proportional to the number of successful CASes on the object since the snapshot was taken. Our fast, flexible snapshots yield simple, efficient implementations of atomic multi-point queries on concurrent data structures built from CAS objects. For example, in a search tree where child pointers are updated using CAS, once a snapshot is taken, one can atomically search for ranges of keys, find the first key that matches some criteria, or check if a collection of keys are all present, simply by running a standard sequential algorithm on a snapshot of the tree.
To evaluate the performance of our approach, we apply it to two search trees, one balanced and one not. Experiments show that the overhead of supporting snapshots is low across a variety of workloads. Moreover, in almost all cases, range queries on the trees built from our snapshots perform as well as or better than state-of-the-art concurrent data structures that support atomic range queries.
Ask about this paper
Your agent reads all of it.
Lune indexed this paper to the last equation, along with the top-tier papers that cite it. Ask a question and the answer quotes them.
Your agent calls
Luneget_paper_fulltext
Free to start. No credit card required.
Terminal
Install the CLIlune papers fulltext 8bb3fa20-792f-4fc6-8c20-4546b841a25bCited by top-tier papers10
- PaC-trees: supporting parallel and compressed purely-functional collectionsLaxman Dhulipala, Guy E. Blelloch, Yan Gu, Yihan SunPLDI 2022 · 16 citations
- Bundling linked data structures for linearizable range queriesJacob Nelson-Slivon, Ahmed Hassan, Roberto PalmieriPPoPP 2022 · 11 citations
- TL4x: Buffered Durable Transactions on Disk as Fast as in MemoryGal Assa, Andreia Correia, Pedro Ramalhete, Valerio Schiavoni et al.PPoPP 2023 · 8 citations
- Concurrent sizeGal Sela, Erez PetrankOOPSLA 2022 · 3 citations
- Aggregating Funnels for Faster Fetch&Add and QueuesYounghun Roh, Yuanhao Wei, Eric Ruppert, Panagiota Fatourou et al.PPoPP 2025 · 2 citations
Builds on1
Related papers
- VERLIB: Concurrent Versioned PointersGuy E. Blelloch, Yuanhao WeiPPoPP 2024 · 6 citations
- Efficient Concurrent Updates to Persistent Randomized Binary Search TreesGuanhao Hou, Jinchao Huang, Fangyuan Zhang, Sibo WangVLDB 2025 · 1 citation
- PathCAS: an efficient middle ground for concurrent search data structuresTrevor Brown, William Sigouin, Dan AlistarhPPoPP 2022 · 4 citations
- Jiffy: a lock-free skip list with batch updates and snapshotsTadeusz Kobus, Maciej Kokocinski, Pawel T. WojciechowskiPPoPP 2022 · 12 citations
- Unblocking Dynamic Partial Order ReductionMichalis Kokologiannakis, Iason Marmanis, Viktor VafeiadisCAV 2023 · 7 citations
