6月11:关于闪存垃圾回收的动态阈值设置

主要参考文献:DT-GC: Adaptive Garbage Collection with Dynamic Thresholds for SSDs
所发表的会议:IEEE International Conference on Cloud Computing(CCF-C)
作者:Yi Qin, Dan Feng, Jingning Liu, Wei Tong, Zhiming Zhu
学校或实验室:武汉光电国家实验室,华中科技大学

前言

  最近由于在实现GC操作,因此开始详细地查看各种GC文献,今天看的这篇是DTGC,据说是可以动态适应性调整擦除的阈值并且当空闲空间比较富足情况下允许IO请求中断GC操作,以此来实现降低GC的延迟时间。以下内容除了第二节是根据主要参考文献进行叙述,其余都是我个人平时的调研总结,如果有错误的地方,欢迎大家批评指正,也欢迎大家和我交流!

一、背景:

1、为什么需要GC(Grabage collection)

  不同于传统磁盘,SSD的电路设计具有一些比较特殊设置。例如,读写仅支持按页操作(这是基于SLC而言,即单比特SSD),而擦除操作的最小单元是块。并且,SSD是基于闪存单元进行数据存储,而由于闪存单元是基于充电和放电来实现数据的编程和擦除,因此每个页只能被写一次,直到它被擦除(即放电操作)后才能对该页重新执行编程(即充电操作),这就是写前擦除的概念。(对于闪存单元的读写擦操作,这里先简要说明一下,后面会单独写一篇文章介绍闪存单元架构)
  并且当我们需要对已经写入的数据进行更新操作时,SSD还采用了一种新的更新算法:异地更新(out-of-place update)。原因如下:传统的更新操作是基于就地更新算法(in-place-update),在这个算法下,如果我们要对SSD中的某一个page执行更新操作时,由于需要写前擦除,并且擦除的最小单元是块,因此我们需要先对该块执行擦除操作之后才能完成该页的更新。这就造成一种情况 —— 每当我们需要对某个页执行更新操作时就需要对该页所在的整个块执行擦除操作,导致擦除频繁问题。由于擦除操作会损害闪存单元的寿命以及影响其性能,因此为了避免擦除频繁这个问题,SSD引入了异地更新算法:当需要对某个页执行更新时,直接将新数据写入到新的空闲页中,并将原先的页置为无效,更新映射表中的地址映射信息。如此一来,便可以避免每次更新数据就需要执行擦除的问题。
  但是,异地更新也会带来一个问题:空闲页数量不够。由于SSD容量是固定的,当频繁执行更新或者写入数据时,空闲页被大量消耗,当空闲页彻底被耗尽时,SSD则将无法再执行数据的更新和写入。这种情况就好比如果我们的衣柜中置放了太多已经穿不下的衣服时,当我们要存入新衣服时,衣柜里已经没有空地供我们存放。此时我们便需要进行清理操作,将已经穿不下的衣服清理掉,空出新的空间来存放我们的新衣服。同理,我们也可以通过清理操作(即垃圾回收,GC),将SSD中的无效页进行清理,重新回收为新的空闲页,以供SSD再次使用。

2、GC的具体步骤

① 挑选一个victim block:挑选无效页数量最多的块作为victim block,可以减少需要执行迁移的次数
② 有效数据迁移:如果victim block中仍存在有效页,将这些有效页执行异地更新,迁移到新块中,完成迁移的有效页置为无效,直到victim block中全部都是无效页
③ 执行擦除操作:经过第二步之后,当前victim block都是无效页,直接执行擦除操作,将该块所有page置为空闲页

3、GC影响SSD性能

  相比于传统磁盘HDD,SSD具有小尺寸、更快的读写速度等优点。(给自己一个flag:后期开一篇详细讲讲HDD和SSD的区别) 因此SSD逐渐大量应用于计算机市场和企业级服务器中。但是,随着大数据时代的到来,大量的IO请求导致SSD的容量告急,随之而来的问题就是当SSD空闲页不足时,我们需要触发垃圾回收(GC)操作,将无效页擦除恢复为空闲页,以供我们循环使用。
  但是GC操作会带来一定的GC延迟,首先当对某个块执行GC操作时,该块所在的Channel和chip将被占据去执行数据迁移操作和擦除操作,并且由于擦除操作非常耗时( 擦除延迟通常是写延迟的十几倍,是读延迟的将近百倍),如果当前channel和chip上有待处理的读写请求时,则会由于channel和chip被占据而进入长时间的阻塞等待,直到GC完成,带来读写性能骤降问题。
  由以上分析可以看出,执行GC的时间选择和victim block的选择是SSD 性能的关键。如果我们在channel 和chip处于空闲时执行GC操作,则不会阻塞读写请求;如果我们挑选的victim block全都是无效页(极端情况下),则不需要执行有效数据迁移,从而降低GC操作时间。因此实现一个良好的GC算法来降低GC延迟是一个非常重要且急迫的问题,直接关系到SSD能否应对大数据时代的冲击。

4、目前研究算法的劣势

  当前也有不少算法对GC进行优化,但基本都是采用一个固定的GC阈值,当SSD中空闲页数量低于该阈值时,则触发GC操作。而不同的GC阈值,会带来不同的SSD性能。
当GC阈值设置过高时,则很快就达到GC条件,此时会出现这种情况:victim block中仍然含有较多数量的有效页,GC延迟高,并且GC完成之后增加的空闲页数量较低。
当阈值设置过低时,则很难达到GC条件。此时会出现这种情况:基于这种设置下,SSD中空闲页数量会处于一个比较低的水平,如果此时接收到一个较大的写请求,可能会导致需要执行多个GC操作以获得足够的空闲页数量保证该写请求的数据存储,因此该写请求的延迟会由于爆发式的GC操作而急速增加,影响SSD的整体性能。
因此GC阈值是影响SSD性能的一个关键设置。而基于文献【1】的实验可以发现不同的工作负载下,如果要达到最佳的GC性能,GC的阈值并不相等。因此,如果采用固定的GC值,则无法使所有应用都达到最佳的GC性能。基于该motivation,文献【1】提出动态变换GC的阈值来适应不同的工作负载以达到最佳的GC性能。

二、DT-GC技术【1】

  1. DT-GC技术将GC请求分为可中断GC请求和不可中断GC请求。
    不可中断GC请求: 相较于读写请求,优先级更高。这类GC请求会在SSD空闲页极度缺乏时被执行。
    可中断GC请求: 优先级最低,只能在channel、chip空闲时被执行。可中断GC请求允许在完成一个有效页的迁移后先执行当前channel、chip、die上的读写请求,通过这种方法来降低读写请求的延迟时间。
  2. DT-GC动态调整GC请求的排列:当SSD为某个写请求分配空闲页时,空闲页所在plane的空闲页占比(Free Page Proportion,FPP)、可中断请求触发阈值(interruptible GC triggering threshold, IGCT)、不可中断请求触发阈值(Non-interruptible GC triggering threshold, NGCT)将会被计算得出。
    **FPP = FPN / TPN : ** FPN指的是空闲页数量,TPN指的是当前plane的总页数
    下图所示是如何根据FPP、IGCT和NGCT进行GC请求的排列。这里我就不过多地解释了,例如当空闲页的占比低于NGCT时,则将当前plane的不可中断请求插入到GC请求队列头,等待立即处理从而可以释放更多空闲页。
    GC请求的处理
  3. 阈值设置:IGCT和NGCT将会根据当前plane的无效页数量占比(IPP)、有效页数量占比(VPP)以及额外的空间占比(ECP)进行设置。IGCT受IPP、VPP和ECP影响,IGCT和NGCT与有效页数量呈反比,同时,IGCT还与无效页数量呈正比。文献中有给出相应的公式。
    我的分析:当SSD中有效页数量较多时,此时如果触发GC,就会导致需要进行较多次的数据迁移操作,GC延迟会较高;当SSD中有效页数量和无效页数量接近,都比较高时,此时IGCT比较高,可以挑选出具有较多无效页的victim block进行GC,增加空闲页数量;当有效页数量较低时,此时IGCT和NGCT都比较高,表示这种情境下执行GC可以减少有效数据的迁移次数。

三、个人总结

根据SSD中的有效页数量和无效页数量来进行GC阈值动态调整是有一定意义的:对于不同的工作负载,如果是读密集型数据,则基本SSD中都是有效页,一个较低的GC阈值可以带来更好的性能。如果是写密集型数据,则基本SSD中会出现大部分无效页,则一个较高的GC阈值可以保证SSD中有足够的空闲页为写请求服务,尽量降低读写延迟。

注:今天先写到这里呜呜,明天再进行思考这种方式下是否会有一定的弊端。

reference

【1】Qin Y, Feng D, Liu J, et al. DT-GC: adaptive garbage collection with dynamic thresholds for SSDs[C]//2014 International Conference on Cloud Computing and Big Data. IEEE, 2014: 182-188.

  • 32
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值