NBJL 2020论文导读12: FlatStore: An Efficient Log-Structured Key-Value Storage Engine for Persistent Memory
论文下载地址:https://dl.acm.org/doi/abs/10.1145/3373376.3378515
论文信息:
发表于 ASPLOS 2020
作者信息
Youmin Chen♭†, Youyou Lu♭†, Fan Yang♭†, Qing Wang♭†, Yang Wang‡, Jiwu Shu♭†∗
Department of Computer Science and Technology, Tsinghua University♭
Beijing National Research Center for Information Science and Technology (BNRist)†
The Ohio State University‡
论文摘要
最新的硬件,比如持久性内存(Persistent Memory, PM)以及告诉网卡,允许搭建高性能的KV存储。然而,文章观察到KV存储中小字节粒度的访问模式与PM硬件(Optane DC PM)的存储粒度不匹配,导致现有的KV存储无法充分利用PM的硬件带宽。论文提出了FlatStore,在PM上使用log-structure技术,在DRAM上建立易失性索引,减少KV存储对PM的小字节粒度访问,达到高带宽和低延迟。FlatStore使用了:1)compact Oplog,优化批处理效果;2)pipelined horizontal batch,减小batch带来的延迟增加。在易失性索引方面,FlatStore分别尝试了CCEH hash表以及masstree。FlatStore可以达到35Mops/s的写吞吐,比现有工作提升2.5-6.3倍。
论文内容
建立在PM上的持久性KV存储没有充分利用硬件的性能,现有的工作大多在PM上维护全部或部分索引,此外,KV item的大小集中与几十到数百字节,元数据操作和KV item的写入都不符合PM硬件的访问粒度。以Optane DC PM为例,硬件粒度为256B,小于256B的访问无法充分利用PM的带宽。论文提出FlatStore,,主要思想是将索引与内存存储引擎解耦,在DRAM建立索引结构,减少元数据操作对PM的小粒度写入,而在PM上使用Log Structure管理KV item,对KV item批处理写入PM,贴近PM硬件的访问粒度。
不同于SSD或HDD,PM的硬件粒度更小,而且顺序与随机写的性能接近,因此,对于大于256B的value,进行batch处理不会带来明显的性能提升。FlatStore采用了compact oplog的结构,对于小于256B的value,log entry中记录value数据。对于大于256B的value,value不保存在log中,而是使用lazy-persist allocator管理,log entry中只记录指向value的指针。将多个log entry进行批处理,写入PM。Compact oplog没有保存占用空间较大的value,减少了log的空间占用,也有助于减少log clean的代价。
使用batch可以贴近PM硬件粒度,但会增加响应延迟。在最初的版本使用Vertical Batch策略,每个核心只对自身处理的log entry进行batch,这样做无法在最短时间内收集到足够多的log entry,增大了延迟。采用Horizontal Batch策略,在一组核心中选择某一核心充当leader,leader负责收集其他核心处理的log entry进行批处理,其他核心等待leader完成。为了进一步利用多核性能,在Pipelined Horizontal Batch策略中,leader之外的核心可以在leader进行batch时继续处理请求。
为了发挥KV store的性能,FlatStore使用RDMA网络,利用RDMA one-side通信方式实现了RPC。实验表明在小粒度写密集负载下,FlatStore具有良好的性能。
自己的认识和体会
使用log structure技术可以最大限度利用PM硬件带宽,这种批处理,大块写入的思想多见于针对SSD或HDD的系统,在PM上使用该技术需要注意硬件独特的性能。未来可以尝试将这种思想运用在混合内存系统中,或者用于改进PM上的索引结构。