SSD gc机制简介

背景

  • 闪存基本构成:页page(4K)→块block(通常64个page组成一个block,有的是128个)→面plane(多个blcok组成)→die(plane就是一个die)→闪存片(多个die组成)→SSD(多颗闪存片组成);(可能不同型号具体数字不同)。
  • SSD上已经被写入过的Page页在重新被写入之前,必须要将page页所在的block块擦除,而不是直接覆盖写。这个是由Nand Flash的工作原理决定的。因此产生了Gc的概念;

gc触发的位置

  • FTL层

gc分类:

  • 限制垃圾回收:不占用主控资源,会增加一定额外的写放大。
  • 被动垃圾回收:被动垃圾回收是在数据读写同事做垃圾回收,会占用大量主控资源,对请求的响应时间造成一定影响。

gc粒度

  • 闪存最小读写单位是page,但是最小擦除单位是block;

SSD gc机制简介

gc过程

  • 一个block中包含多个page;SSD工作一段时间之后,block就都是有过写入的了,如果要擦除某个block,必须先将其中的有效page复制到其他地方,再擦除旧的block;

我们通过下图来看看SSD上数据写入的过程

SSD gc机制简介

图1:

  • 两个空的(erased)的Block X和Block Y, 每个Block有12个Pages;
  • 首先在Block X中写入4个Pages(A, B, C, D);

图2:

  • 接着再向Block X中写入新的4个pages(E, F, G, H)
  • 然后写入PageA-D的更新数据(A', B', C', D'), 这是PageA-D变为失效数据(invalid);
  • 如果在覆盖写操作比较多的情况下,会产生较多的无效页,类似于磁盘碎片,此时需要SSD的GC机制来回收这部分空间了。

图3:

  • 为了向PageA-D的位置写入数据,需要将E, F, G, H, A', B', C', D' 8个pages先搬到Block Y中, 之后再把Block X erase掉,这个过程就为GC。

SSD的写放大(Write Amplification)

     SSD的GC机制会带来写放大(Write Amplification)的问题,即内部真正写入的数据量大于用户请求写入的数据量,会带来下面两个问题:

  • SSD的寿命减少。NAND-Flash中每个原件都有擦写次数限制,超过一定擦写次数后,就只能读取不能写入了。因此,需要损耗均衡控制(Wear-Leveling)算法,使得原件的擦写次数比较平均,进而延长SSD的寿命。
  • 因为gc需要有擦除操作,复制有效page,因此会影响响应时间;

预留空间 (Over-Provisioning)

由SSD gc引出的一个概念Over-Provisioning

计算方式如下:

SSD gc机制简介

       Over-Provisioning相当于在用户可用的容量之外,额外增加的空间;

       因为SSD上不仅要存放用户数据,还需要存放Mapping Data、FTL管理数据,并且要处理GC/WL(Wear-Leveling)磨损均衡的数据搬迁,以及处理坏块管理等。额外增加的Over-Provisioning主要承担这些操作的存储工作;这部分容量用户不可以直接操作,对操作系统也不可见;

参考资料

SSD通俗原理简介 - 知乎

浅谈分布式存储之SSD基本原理 - 知乎

https://www.seagate.com/tech-insights/ssd-over-provisioning-benefits-master-ti/

SSD Over-provisioning (OP) - Kingston Technology

上一篇:正则 去除html标记


下一篇:冬季实战营第四期:零基础容器技术实战