中文

FliT:一个用于简单高效的持久化算法的库

分布式、并行与集群计算 2021-08-20 v2

摘要

非易失性随机存取存储器(NVRAM)提供了可与 DRAM 相媲美的速度的字节寻址持久性。然而,由于缓存仍然易失,自动的缓存驱逐可能会重排对内存的更新,在系统崩溃时可能使持久内存处于不一致的状态。Flush 和 fence 指令可用于强制更新之间的顺序,但开销高昂。这促使了大量研究如何为 NVRAM 编写正确且高效的持久化程序的工作。在本文中,我们提出了 FliT,一个用于编写高效持久化代码的 C++ 库。使用该库的默认模式,只需对代码进行极少的修改,即可使任何线性化数据结构变为持久化的。FliT 通过使用一种新颖的算法来跟踪脏缓存行,从而避免了大量冗余的 flush 指令。FliT 库还允许额外的优化,但即使在其默认设置下也能取得良好的性能。为了描述 FliT 库的功能和保证,我们定义了一个持久化编程接口,称为 P-V Interface,FliT 实现了该接口。P-V Interface 捕捉了代码的预期行为,其中部分指令的效果被持久化,而部分则没有。我们表明,该接口捕捉了文献中许多实用算法的预期语义。我们将 FliT 库应用于四种不同的持久化数据结构,并表明在多种工作负载、持久化实现和数据结构大小下,FliT 库始终能提高操作吞吐量,在除一种工作负载外的所有工作负载中,比朴素实现至少提高了 2.1×2.1\times

关键词

引用

@article{arxiv.2108.04202,
  title  = {FliT: A Library for Simple and Efficient Persistent Algorithms},
  author = {Yuanhao Wei and Naama Ben-David and Michal Friedman and Guy E. Blelloch and Erez Petrank},
  journal= {arXiv preprint arXiv:2108.04202},
  year   = {2021}
}