本文介绍了GearDB。SMR driver在顺序写/随机读领域有很大的应用优势。本文的目标在于消除基于SMR drive搭建的LSM-KVS垃圾回收所要的read-merge-write操作造成的开销较大以及造成的存储资源碎片化的问题。GearDB使用三种方式进行优化。下文进行分析。
introduction
1.SMR drives
叠瓦式硬盘:是垂直式硬盘(PMR)的一种延伸。
- 因受物理极限的限制,磁道宽度(以及写入磁头的尺寸)只能缩小到一定的程度。不同于 PMR 不允许磁道相互重叠的做法,SMR HDD 采用的技术是让数据位循序写入,如其名称所示,磁道会如瓦片般堆叠在另一磁道的部分面积上,借此达到增加磁录密度的目的。同时读取的磁头大小也不相同,这样,读取磁头仍可从磁道上未被覆盖的部分来读取数据。
- 一旦已写入的数据要编辑或覆盖时,写入磁头并不会直接在既有的磁道上进行磁录,以避免损坏相邻磁道。编辑后的数据会先在磁盘上的空白处写入,原先旧数据的磁道会暂时维持不动。等到 HDD 闲置时才会执行重组机制,将原先磁道上的旧数据位自动擦除,并重新成为可用空间以供新数据写入。
- 例如在上图之中,zone1中write pointer指向了Sector C+1,当要更新Sector中的内容时候。系统会加载Sectors A,B,C到缓存中,然后更新Sector1的内容最终写回。这样的机制导致严重的写放大,也影响了硬盘本身的性能。
- 只要将指针指向zone的第一个block就可以将不含有有效数据的zone重新用作empty zone。
2.HM-SMR(host-managed)
三种SMR类型有:drive-managed, hostmanaged, host-aware
优势在于:
- 容量大
- 可预知的性能
- total cost of ownership(购买成本、操作成本、维护成本)
这样HM-SMR满足了数据中心应用环境下需要可预知性能以及顺序写,随机读应用的需求。
3.在HM-SMR上搭建LSM-tree based KVS遇到的难点:
- HM-SMR以及KVS上垃圾回收(冗余的读写)会损害性能。同时也会影响硬盘的空间使用率。
- 当前的垃圾回收基本采用的是(greedy garbage collection),即简单的read-merge-write。
4.our work
从上述的论述我们知道想要在HM-SMR上搭建高性能,高空间利用率的LSM-tree based KVS面临的问题,因此本文提出了GearDB:
- 提出了新的on-disk data layout:一个zone中仅仅存储来自同一个level的SSTable。这样避免了传统layout中一个zone多个level SSTable的情况。由于同个level的SSTable进行compaction的频率是基本一致的,因而直接避免了反复冗余的读取。
- 对于每一级的LSM-tree都设置了compaction window。包含了该级的1/k的zones。设置窗口将compaction和相应的碎片化限制在某个区域当中。
- 提出了新的compaction逻辑-Gear compaction,通过直接清空compaction window的操作,使得SMR-zone无需GC就可重新使用。
- 基于levelDB进行搭建,发现随机写性能相较提升1.71倍,有效空间利用率达到了89.9%
motivation&&background
1. GC过程耗时很久
由于一个zone中分布着multi-level,不论是Cost-benefit GC policy还是greedy GC policy都占据大部分时间。
2.空间利用率不好
这里表达的不好指的是85%区域的空间利用率在45%到80%之间。我们期待是是双峰分布。即希望zone不是满就是空。
3. 空间利用率和性能的权衡
design-implementation
1.overview
2. a new on-disk data layout
2.1 传统的layout之后的SMR如下图:
2.2 新的方式是将同一个level的SSTable放置于同一个zone中,如overview中所示。
这里,同一个level的SSTable自然可以占据多个zone,但是仅仅只有一个zone可以接受数据(writing zone)。
这种策略使得一个zone中的SSTable有相同的compaction frequency!从而减少了存储空间的碎片化,同时方便了后续的策略。
3.compaction window
注意:Scsi是level(i)的compaction window大小;Lli是level(i)的大小上限。
-
compaction window的作用在于将compaction操作限制在某个window中。
-
在CW中充满的是invalid SSTable的时候就可以像zone一样修改指针变为空(无需数据迁)
-
每个层次中不同的zones将会轮流成为CW以确保所有的SST都能参与compaction
-
下面是转化的逻辑:
1.A writing zone becomes a full zone once it is filled.
2/3. A writing zone or full zone can be added into a compaction window by rotation. 4.When all SSTables of a compaction window have been invalidated by gear compactions, the zones become empty
5.ready to serve write requests without incurring device-level garbage collection.
4.Gear compaction
4.1 Gear compaction algorithm
对于L(i)和L(i+1)之间的gear compaction,会将数据根据key range分为三个部分:
- out of L(i+2)’s compaction window - written to L(i+1)
- out of L(i+2)’s key range - dumped to L(i+2)
可以减少后续的WA(相对于写入L(i+1)之后在dump入L(i+2)中)
- within L(i+2)’s compaction window - processed to passive compactions(比如和L(i+2)cw中的SSTable进行compaction)
注意为了避免数据被compaction到更高的层次。L(i+2)仅仅在Li+1达到该层大小限制并且and Li+2达到CW的大小限制。
下面将说明gear compaction流程。
1.L0和L1之间active compaction。将结果的数据分为三类。out of L2‘s’CW,in L2’s CW,out of L2’s keyrange
2.将第一类写入L1
3.将第三类dump进入L2
4.将第二类加入L2的CW进行后续compaction。
5.循环1-4步
注意:当写入L(i+2)的数据比一个SSTable来的小,就将这部分数据和写入L(i+1)的数据一同写入L(i+1)
4.2 sorted data devision
我们从上面的得知,需要比较key的范围将获得的数据分为三类。频繁的对比实际上加大了gear-compaction以及元数据管理的消耗,从而拖慢了性能。这里不论对于CW内或者外的SSTable,如果同一级中的SSTable key range gap 和其他的SSTables键值范围没有重复,就将这些key range合并成为一个大的连续范围。
例如 L(i+2)的CW中有两个SSTable,键的范围分别是a-b和c-d。这时候我们就去查看L(i+2)的其余SSTable。如果其余的SSTables没有键范围是和b-c重叠的。那么我们就可以将L(i+2)'s CW的键范围合并为a-d。这样就有效避免了过多的比较。
4.3 how compaction windows are reclaimed
- 我们知道,对于充满invalid数据的CW,可以简单地通过修改指针的指向来重新声明为空。
- 要想是的L(i+1)的CW中所有SSTable全部非法化就需要确保,L(i)中键和L(i+1)中重叠的的SSTables全部加入gear-compaction中。这样当所有的zones都轮流进入CW之后,我们得到L(i)中所有的SSTable。这种方式下,当k个L(i)中的CW被清除,就会有1个L(i+1)的CW被清除。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200906144858554.png#pic_center =400xS)
evaluation
1.load performance
2.read performance
3.zone space utilization
4.用时构成与写放大
[1]本文可参考的基于SMR搭建的KVS:LUO, Q., AND ZHANG, L. Implement object storage with smr based key-value store. In Storage Developer Conference (2015).
[2] greedy strategy of GC-[32]