
阅读USENIX ATC 2018 《Redesigning LSMs for Nonvolatile Memory with NoveLSM 》[1] 笔记
Non-volatile memories(NVM) 特点 (例如 Intel 的 3DXPoint 技术)
(near-DRAM read latency, 50x-100x faster writes, and 5x higher bandwidth compared to SSDs,几种硬件性能的如下图,不过没有包含 NVME SSD)

新的硬件,新的挑战也是新的机会,事实上现在已经有 NVM 设备可以直接插上去当内存用了,因此论文作者重新设计了 LSM-tree,被称为 NoveLSM

2. 现状
传统 LSM-tree 存在的问题

3.1. 思路
思路
3.2. 动机
动机
当然是现在的方案直接用在 NVM 设备上性能提升并不大,没有充分发挥 NVM 的性能:
although NVM hardware provides 100x faster read and write compared to SSD, LevelDB’s sequential and random insert latency (for 5 GB/sec bandwidth) reduce by just 7x and 4x, respectively; the sequential and random read (fetch) latency reduces by less than 50%. The results show that current LSMs do not fully exploit the hardware benefits of NVM and suffer from significant software overheads. We next decipher the sources of these overheads.
论文作者还分析了 leveldb read/write 各个阶段的 latency 分布,如下图:

降低 read/write latency,提高 throughput
3.3. 实现
方案

如上图 (a) 就是 NoveLSM 的基本结果,既然 NVM 能具有持久性且能 byte-addressability,那么直接重新设计 memtable 的 skiplist ,我们知道通常的 skiplist 都是一些节点加上一些指针,指针都是虚拟地址,作者这里很巧妙,将 NVM 通过 map file 的形式,map 一段到 memory 中,使用 offset (相对 root node 的 offset)来代替 memory 的虚拟地址,这样来实现 NVM 设备的 skiplist,如下图:

实际上在普通的盘中也可以这么做,但是普通盘没有 byte-addressability 的能力,性能肯定会很差。
刚开始,分别创建一个 DRAM 的 memtable 和 NVM 的 memtable,这个时候,DRAM 的 memtable 是 active 的,接收写入,然后当 DRAM memtable 到达一定的大小之后,转变成 immutable memtable,后台线程负责将其刷到 sstable,然后 NVM memtable 转变为 active,新的写入直接 update NVM memtable,,当 NVM 到达一定的大小之后,也会转变成 immutable memeable,但是考虑由于 NVM 设备很大,那么 NVM memtable 也可以很大,可以有足够的时间,让 DRAM immutable 和 NVM immutable 在后端刷入 sstable。

如上图,write 写 DRAM 的 memtable 的时候,需要些 log,但是直接 update NVM memtable 的 时候不需要些 log,貌似 NVM 支持直接的事务 update(不知道这个性能怎么样 ???),所以可以不用写 log,可以减少回放日志的时间。Intel 有专门的 https://github.com/pmem/pmdk
就是让多个线程并发的去不同的 level 读,这里唯一需要注意 read 的正确,需要以低 level 的数据为准。感觉用处不大,实现上,负责度和线程开销估计不小
其实通篇下来,最大贡献就是设计了一个 *persistent NVM-base memtable,最后性能好像表现并不是很好,在小写的情况,性能还不如 Rocksdb,感觉不知道是不是 NVM memtable 的 no log 事务写性能不是很好。
感觉要是我来设计,现在 NVM 设备其实已经很大,干脆全部数据放在 NVM 中,其基本结构如下:
Notes
水平和时间有限,论文很多细节没看那么细,难免有错误和理解不到位的地方,欢迎指出和交流~
参考文献
[1]. Redesigning LSMs for Nonvolatile Memory with NoveLSM. https://www.usenix.org/conference/a
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30107046/viewspace-3146093/ ,如需转载,请注明出处,否则将追究法律责任。