论文标题:HiLSM: An LSM-Based Key-Value Store for Hybrid NVM-SSD Storage Systems
论文作者:Wenjie Li, Dejun Jiang, Jin Xiong, Yungang Bao
单位:中国科学院计算机结构国家重点实验室;中国科学院大学;
出处:computing frontiers 2020
目录
本文聚焦了如何在NVM和SSD的混合存储情况下搭建KVS。注意这里的NVM不是泛指的概念,而是非易失性内存例如
PCM
STT-MRAM
3D-Xpoint
。
introduction & background
1.NVM
读延时和DRAM相当,写延迟相较于SDD要低50-100x。但是相同的容量比SSD价格昂贵,因此目前还是无法完全替代SSD。而将NVM集成到SSD中就成为目前可行的一种结局方案。
- low latency
- high throughput
- byte-addressability
- high-density
2.KVS前人工作
前人在KVS领域特别是基于Hybrid NVM-SSD上的KVS工作仍然有些不足。
LevelDB
使用LSM-Tree充分发挥HDD顺序性能较好的特点。RocksDB
在LevelDB
的基础上,使用多线程compaction充分发挥了SSD高度并行地特点。- hybrid NVM-SSD storage systems
NoveLSM
将持续化的memtable存储在NVM中来加速KVS的性能。但是没有解决NVM和SSD之间数据迁移的问题。 - hybrid NVM-SSD storage systems
SLM-DB
在NVM中实现索引结构,在SSD中使用单级的LSM tree。虽然减少了写放大,但是导致了较高的空间放大(compaction无法及时清除过期数据)
3.our work-HiLSM
根据NVM和SSD自身的特点分别采用不同的数据组织方式。
在HiLSM中:
- KVPs先写入NVM,必要时再写入SSD。
- 所有的访问从NVM开始(在DRAM中保存一个hash table进行索引访问)。当miss的时候再往SSD中寻找。
- 通过使用hash table访问NVM可以提供很低的延时。但是无法使用hash对KVPs进行排序从而无法支持range query。并且在以SSTs的形式写入SSD前也要先进行排序。为此,本文在DRAM中引入了red-black tree来对NVM中未排序的KVPs进行排序。并且使用后台线程来异步更新red-black tree,从而减少hash table和red-black tree带来的开销。
- 我们知道对于NVM,时常需要数据迁移(到SSD)来释放空间。–fine-grained data migration strategy。同时由于NVM和SSD之间的带宽差异,将使用多线程进行迁移。
- 为了减少写放大,本文中提出a data filter strategy,在NVM层面将废弃的数据滤除,从而不会迁移到SSD中造成更多的写放大。
motivation
总的来说,本文的重点在于如何使用NVM来加速SSD中的LSM-tree。主要有两种简单地思路。一是将WAL(Write ahead log)保存在NVM中,二是将persistent memtable保存在NVM中。
方法 | 主要内容 | 缺点 |
---|---|---|
WAL in NVM | 使用NVM存储WAL,确保数据持久和崩溃恢复的同时尽可能减少了WAL的同步开销 | 1.写入NVM的WAL之后仍然需要写入DRAM中的memtable,操作冗余。 2.无法减少读延时、写放大。 3.WAL属于文件系统。访问它如果需要DRAM和NVM之间的数据迁移并不划算。 |
memtable in NVM | 直接将memtable存储在NVM中确保memtable数据持久与恢复(WAL的目的也在于此)。这样直接避免了WAL的开销。同时由于NVM大容量可以缓存更多的数据从而提高read hit ratio。同时DRAM和NVM中的memtable轮流flush到SSD中也减少了写停顿(write stall),从而提高了写性能。 | 以NoveLSM为例子 1.memtable主要使用skiplist。但是skiplist的性能随着工作负载增大而降低,并不适用于大容量的NVM。 2.使用multi-version schema来确保KVPs的准确性。导致了空间浪费以及写放大。 3.在NVM中使用single-memtable。无法为NVM及时腾出空间(coarse drained)。 |
注:写停顿主要来源于L0和L1之间大量数据compaction。
总而言之,上述的两种方法都很难将LSM-tree的性能充分发挥。因此提出了本文的工作–HiLSM。
design & implementation
1.overview
介质 | 方式 | 好处 |
---|---|---|
NVM | log-structured memory | 帮助crash recovery 更好的空间利用率 |
SSD | LSM-Tree | 在读写性能之间更好平衡 |
- 在NVM中,将NVM空间组织成一系列的segment。每个segment存储多个KVPs。通过head point和tail point进行管理。在head point和tail point之间的空间都已经被利用。
- 使用两种索引结构在DRAM中进行索引;在NVM中对KVPs进行排序。
hash table is mainly used for low latency point query and red-black tree is mainly used for Scan operation and sstable serialization.
- 当NVM空间使用达到一定程度就触发migration。将数据打包成SSTables,并flush入SSD中。之后就可以释放对应的segments和hash table中对应的索引项。
注意:释放index entry的时间十分重要。因为在释放期间,数据是无法进行访问的。从而影响read performance。
2. strategy 1Asynchronous update for index structures
- 当一个KVP在NVM中被固化,就将对应的index entry插入到hash table中。使用一个后台专属线程频繁地检测Log-structured memory的最近更新,异步地更新red-black tree中的index entry。
- 这样加速了put操作(因为将red-black tree使用额外线程异步更新)。
- 同时加速了red-black tree的更新,从而使得数据迁移(NVM-SSD)不会被阻塞。
3.strategy 2Fine-grained data migration
- 分割成多个migration region(默认包含512个连续的segment)。每个region都有独占的red-black tree来排序索引KVPs。本文设定当NVM的利用率达到了migration region的大小,数据迁移就会触发。
- 通过独占的线程选中最老的migration region打包成SSTables。
4.strategy 3Data filtering for obsolete data
通过两种方法在NVM中滤除过期的数据:with the migration;among different regions。因此filter分为了两个phase。
- phase 1发生在red-black tree的更新,只有最近的更新会被保留在各自的red-black tree中。
- phase 2发生在SSTables的序列化中。比较red-black tree中的index entry和hash table中的对应项,确保在不同migration regions的过期项被滤除。
5.strategy 4Multi-threaded data migration
使用多线程进行迁移主要是下面两点的权衡。
- 一方面我们希望migration region够大,这样有机会滤除更多的过期数据。
- 另一反面我们希望migration region小,这样可以缩小迁移时间。
多线程迁移就结合了这两个目的。
evaluation
- For write operation, HiLSM provides more than 8.8x, 2.1x and 1.3x higher throughput than
LevelDB
,RocksDB
andNoveLSM
. - For read operations, HiLSM outperforms
LevelDB
,RocksDB
andNoveLSM
by 8.6x, 3.1x, and 10x respectively. - For write amplification (evaluated by a write-skewed workload倾向于写的负载). HiLSM reduces write amplification by 96%, 89% and 79% respectively compared to
LevelDB
,RocksDB
andNoveLSM
.