标题
:Enabling a B±tree-based Data Management Scheme for Key-value Store over SMR-based SSHD
作者
:Yu-Pei Liang, Tseng-Yi Cheny, Ching-Ho Chi, Hsin-Wen Weiz, Wei-Kuan Shih
单位
:台湾国立清华大学计算机系;台湾国立中央大学计算机与信息工程系;台湾淡江大学电子工程系;
目录
introduction
本文介绍了基于SMR Based SSHD上搭建B+tree如何充分发挥flash和SMR二者的优点。
1.SSHD:solid-state hybrid drive
HDD中集成Flash memory chip,从而一定程度上结合二者的优点和缺点。
需要注意的是flash和SMR都会有写放大问题。当采用SSHD构筑KVS时候,写放大问题就更加严重了。
优点 | 缺点 | |
---|---|---|
flash memory | 随机性能很好 | 寿命有局限性 |
SMR硬盘 | 每单元成本低 寿命长 | 随机性能差 |
SSHD | 和Flash接近的读写性能 较低成本较大容量 | data management software要跨存储介质管理元数据 元数据的频繁更新会降低SSD部分的寿命 |
2.SMR:Shingled magnetic recording
叠瓦式硬盘:是垂直式硬盘(PMR)的一种延伸。
- 因受物理极限的限制,磁道宽度(以及写入磁头的尺寸)只能缩小到一定的程度。不同于 PMR 不允许磁道相互重叠的做法,SMR HDD 采用的技术是让数据位循序写入,如其名称所示,磁道会如瓦片般堆叠在另一磁道的部分面积上,借此达到增加磁录密度的目的。同时读取的磁头大小也不相同,这样,读取磁头仍可从磁道上未被覆盖的部分来读取数据。
- 一旦已写入的数据要编辑或覆盖时,写入磁头并不会直接在既有的磁道上进行磁录,以避免损坏相邻磁道。编辑后的数据会先在磁盘上的空白处写入,原先旧数据的磁道会暂时维持不动。等到 HDD 闲置时才会执行重组机制,将原先磁道上的旧数据位自动擦除,并重新成为可用空间以供新数据写入。
- 例如在上图之中,zone1中write pointer指向了Sector C+1,当要更新Sector中的内容时候。系统会加载Sectors A,B,C到缓存中,然后更新Sector1的内容最终写回。这样的机制导致严重的写放大,也影响了硬盘本身的性能。
3.B+ Tree based KVS
B+tree中所有的KV均保存在叶节点中。
虽然B+ Tree相较LSM,其写放大的效应以及较小,但是由于其庞大的key operations仍然会造成不可忽略的写放大总量。
同时所有的数据操作都会向叶节点发出写操作来执行key operations或者是数据指针的更新,如果是搭建在Flash上,就会减少Flash的使用寿命。
下面来说明在SMR存储中,B+tree造成写放大的因素。
- 下图表示的是节点或者是数据的更新造成的写放大。
当在B+ tree中插入一个value,会生成一个key与之相对应。例如这里生成了key-15,预计插入node4。这时候将KV对写入到SMR中,由于SMR需要顺序写入,而node4又是处在内部磁道。这样就会触发read-merge-write操作来更新node4。最终造成了写放大。
- 下图表示的是垃圾回收造成的写放大。
当SMR没有足够的存储空间时候,会触发垃圾回收机制,会将目标zone中的有效的数据搬移到另一个zone。之后回收目标zone的空间。这样就涉及到额外的数据搬移,从而造成写放大。
This work
通过上述的介绍我们可以发现SSHD面临写放大问题,构筑在它之上的KVS更会加剧这一问题。如何缓解写放大,如何在构筑B+ Tree based KVS时发挥出flash,SMR各自的优点就是个值得考虑的问题。
前人针对SSHD数据管理的解决方案主要是将flash的部分当做缓存来使用,没有构筑针对SSHD完整的数据管理方案。因此本文提出了XsB+ tree data management scheme来充分发挥flash与SMR二者的特性。
下面是本文的主要工作:
- XsB±tree designs a data allocator to manage a union storage space across flash memory and an SMR drive
- the endurance-aware indexing mapping strategy can keep the correctness of the B±tree even though its internal and external nodes are maintained in different storage spaces
- the garbage collection process, XsB±tree also includes a garbage collection mechanism that re-allocates the valid data to a proper space.
XSB+ tree data management scheme
1.overview
-
设计的宗旨
1.将write-few-read many的数据存储在flash memory区域。
2.将频繁更新或者是large-sequential data存储在SMR区域。 -
由于B+tree中叶节点更新频繁,而非叶节点(内部节点)很少更新但是会面临频繁的读取。根据上面的宗旨,一般来说将叶节点存储在SMR区域而将非叶节点存储在flash区域。
2.SSHD-aware Space Allocator
该模块的作用在于将判断不同的节点或者数据应该从哪个存储区域申请空间。
从结构图中,我们知道将整体的存储区域分为了三个部分:SMR-based hot zones、SMR-based cold zones、flash memory-based cold zones。
SMR-based hot zones | SMR-based cold zones | flash memory-based cold zones | |
---|---|---|---|
存储内容 | 叶节点、热数据 | 冷数据 | 内部节点、冷数据 |
- 将热数据存储在SMR-based hot zone可以一定程度上减少写放大,因为该区域的数据都是频繁更新的。如果hot zones中所有的数据都是无效的,reclaim时就不需要复制任何的数据。
- 下面说明判断的的方法:小数据有更高的更新频率,因此当数据大小小于一定阈值(Thsmall)就判定为热数据。同时由于flash的随机性能突出,而SMR的顺序性能和flash较为接近,因此对于冷数据设定了Thsequential。小于Thsequential时,就写入flash(发挥其随机性能优势);大于Thsequential时,就写入SMR-based cold zone(延长flash的寿命)。即:
if(size < Thsmall)
alloc(SMR based hot zones);
else{
if(size < Thsequential)
alloc(flash);
else
alloc(SMR based cold zones);
}
3.Endurance-aware Indexing Mapping Strategy
由于上述的空间申请机制,内部节点存储在flash中,叶节点存储在SMR之中,链接内部节点和叶节点就成了一个问题。
- 本文的映射机制是存储redirection indicator在最后一层的内节点,并保存映射表(该映射表保存indicator和对应的叶节点之间的关系)在SMR中,从而避免了直接在最后一层内节点上(flash中)使用指针直接索引叶节点地址需要时常修改的行为,因此不会对于flash的寿命有过多的影响。
- 特别的是,该映射表被分割成为许多小块,存储在当前Write pointer位置的前一个sector。通过in-place-update来更新映射表,从而解决了部分写放大的问题。
- 同时为了获取正确的映射表的小块,XsB+ tree设计了一个hash function根据indicator的信息来获得对应的zone number进而确定对应的映射表块。
下面是具体的实例:
4.Hotness-aware Garbage Collection Policy
通过hotness-aware的方式尽可能减少GC时候产生的写放大。需要注意的是NAND中本身存储的就是低频率改变的数据因此,hot-aware仅仅作用在SMR区域。
下面是对应的逻辑:
evaluation & conclusion
XsB±tree can improve the access time more than 80%. In addition, with the proposed garbage collection policy, XsB±tree can prolong the lifetime up-to 19% and it tends to be better with the growth of the number of operations.