第4章 SSD核心技术:FTL 4.3-4.5

文章介绍了SSD的垃圾回收原理,包括写放大的概念,以及如何通过预留空间(OP)来减小写放大。GC过程分为挑选源Block、读取有效数据和重写数据三个步骤。此外,文章还讨论了Trim命令和磨损平衡的重要性,以及动态和静态磨损平衡策略,强调了冷热数据分离对降低写放大的作用。
摘要由CSDN通过智能技术生成

4.3 垃圾回收

4.3.1 垃圾回收原理

      WA(Write Amplification),即写放大。

      OP(Over Provisioning),即预留空间。

4.3.2 写放大

 

        对于空盘来说(未触发GC),写放大一般为1,即用户写入多少数据,SSD写入闪存也是多少数据。

       GC触发后,WA怎么算?以下面的Block为例,深色的是垃圾数据,浅色的是有效数据,

 一共36个方块,其中有12个有效数据块,做完垃圾回收后,需把这12个有效数据块写回,如下,

 

        

        增大OP为何能减小写放大?

        OP比例 = (闪存空间 - 用户空间)/(用户空间)。

        SSD容量 = 主机端看到的SSD大小,即用户空间。

        闪存空间 = SSD容量 + OP空间。

 

       影响写放大的因素主要有:

        (1)OP:OP越大,写放大越小;

        (2)用户写入的数据Pattern:顺序写,GC做的量就少,写放大就小;

        (3)GC策略:挑选有效数据最少(垃圾数据最多)的Block,写放大就小;

        (4)磨损均衡:为平衡每个Block的擦除次数,需要数据的搬移,写放大就大;

        (5)读干扰和数据保持:数据搬移增加写放大;

        (6)主控:带压缩和不带压缩的控制器会影响写放大;

        (7)Trim:有没有Trim,对写放大影响很大。

4.3.3 垃圾回收实现

   1. 步骤

      (1)挑选源Block;

      (2)从源Block中找到有效数据;

      (3)把有效数据写入到目标Block。

  详细步骤如下:

     (1)挑选源Block。

          一般常见的算法是挑选有效数据最小的Block,这样需要重写的有效数据越少,写放大页越小。这种BPA算法叫做Greedy算法,是绝大多数SSD采用的一种策略。

    (2)把数据从源Block读出来。怎么读才最有效率?有以下三种方法

        1)方法一

         固件FW在往一个Block上写入逻辑页时,会更新和维护闪存块的有效数据量,因此可以快速挑选中源闪存块。

         该方法的缺点:固件开销大。

         2)方法二

         如果没有每个闪存块的有效数据Bitmap,FW做GC时,可以选择把所有数据都上来。那,这些数据中,哪些是有效数据(需要重写的)呢?

 

         该方法的缺点:GC做的慢。

        3)方法三         

 

     (3)重写。即把读出来的有效数据写入闪存。

4.3.4 垃圾回收时机

     有两种:前台垃圾回收和后台垃圾回收。均是由SSD自己内部控制的

  1. 前台垃圾回收Foreground GC

        当用户写入数据时,可用的Block小于一定的阈值,此时需要做GC,以腾出空间给用户写。

        被动的做GC

  2. 后台垃圾回收BackGround GC

        在SSD空闲(Idle)时,SSD主动去做的GC。

4.4 Trim

 

         Trim是一个新增的ATA命令(Data Set Management)。当用户删除一个文件时,操作系统会发trim命令给SSD,使SSD知晓这些数据已无效,可以被回收掉,从而避免了无谓的数据搬移。

       

4.5 磨损平衡Wear Leveling

  1. 含义:磨损平衡,就是让SSD中的每个Block的磨损(擦除)都保持均衡。

  2. 需要磨损平衡的原因:闪存是有寿命的,即擦写次数有限。

  3. 如何实现磨损平衡的?

     冷数据(Cold Data):用户不经常更新的数据;

     热数据(Hot Data):用户频繁更新的数据;

     年老的(Old):擦写次数(EC,Erase Count)比较多的Block;

     年轻的(Young):擦写次数比较少的Block。

4. 磨损平衡算法

     有动态磨损平衡(Dynamic WL)和静态磨损平衡(Static WL)两种。

     动态磨损平衡:把热数据写到年轻的Block上;

     静态磨损平衡:把冷数据写到年老的Block上。

 

      为什么冷热数据混在一起不好呢?冷热数据混合在一起,那么冷数据就可能经常需要被搬移到另一个Block上,会引入额外的写,导致写放大增大。

     如何解决该问题呢?做静态磨损平衡的时候采用专门的Block存放冷数据。

        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值