CCL-BTree: A Crash-Consistent Locality-Aware B+-Tree for Reducing XPBuffer-Induced Write Amplification in Persistent Memory

CCL-BTree: A Crash-Consistent Locality-Aware B+-Tree for Reducing XPBuffer-Induced Write Amplification in Persistent Memory

背景

这是一篇持久内存索引的文章。PM的性能是有限的,之前的持久B+树为了降低对于对PM的写入量,采用的手段是把叶子结点的数据全部放在一个缓存行上面,并且保持无序的状态。 但是这篇文章认为这样还是不够,PM里面存在XPbuffer缓存(256B),按照之前的做法,PM设备内存XPbuffer带来的隐含写放大仍然很大。 image

motivation

Flatstore(清华陆游游老师团队的工作)把随机写聚合写到一个256B的日志的结构,进而降低了XPbuffer的写放大,但是这样会导致新的问题,日志结构化数据布局在PM中形成了顺序写入,但是它是按时间顺序而不是key顺序存储kv,导致范围查询的性能显著下降。 image

解决思路

  1. 在叶子结点上面增加一层DRAM缓存,缓存对于这个叶子结点的多次写入,同时增加了并发控制的版本和一个计数器(计数器是为了对齐XPbuffer的256B粒度)
  2. 在降低XPI写入放大的情况下,保证叶子结点KV顺序的前提下,进行了256B粒度对齐的叶子结点更新,做法主要是利用计数器,进而可以提高范围查询性能
  3. 引入了新的DRAM叶子缓存,就得保障崩溃一致性,文中的介绍了一种写保守的日志记录方式,可以降低一些PM的日志写入,就是在缓存区满的时候,可以不写日志直接下刷(感觉这种方式降低的写入量有限)

看的不是很细,有错误欢迎指正