We present a fully lock-free variant of the recent Montage system for persistent data structures. Our variant, nbMontage, adds persistence to almost any nonblocking concurrent structure without introducing significant overhead or blocking of any kind. Like its predecessor, nbMontage is buffered durably linearizable: it guarantees that the state recovered in the wake of a crash will represent a consistent prefix of pre-crash execution. Unlike its predecessor, nbMontage ensures wait-free progress of the persistence frontier, thereby bounding the number of recent updates that may be lost on a crash, and allowing a thread to force an update of the frontier (i.e., to perform a sync operation) without the risk of blocking. As an extra benefit, the helping mechanism employed by our wait-free sync significantly reduces its latency. Performance results for nonblocking queues, skip lists, trees, and hash tables rival custom data structures in the literature -- dramatically faster than achieved with prior general-purpose systems, and generally within 50% of equivalent non-persistent structures placed in DRAM.
翻译:我们展示了最近蒙太基系统的一种完全无锁的变体,用于持续的数据结构。我们的变体, nbMontage, 增加了几乎任何非阻塞性并存结构的持久性,而没有引入重大间接费用或任何类型的屏障。像其前身一样, nbMontage 具有缓冲性, 具有可调和的线性: 它保证在坠机后恢复的国家将代表崩溃前处决的一贯前奏。 nbMontage 与其前身不同, nbMontage 确保持久性边界的无等待性进展, 从而限制在坠机时可能丢失的最近更新次数, 并允许一条线来强制更新边界( 即, 进行同步操作), 而不造成阻塞的风险。 作为额外的好处, 我们的无阻塞性同步所使用的帮助机制会大大降低其耐久性。 无阻塞式列队列、 跳板、 树 和 挂图表的成绩在文献中与定制数据结构相对的成绩 -- 大大快于先前通用系统所达到的进度,, 以及一般而言, 位于DRAM内50%的同等的无渗透结构内的非渗透结构内。