「SSD」- Garbage Collection

垃圾回收(Garbage Collection)

在 SSD 的 Block 中,数据的存放是以页表(Page)为单位。当页表被使用了,会标注使用中。当用户删除 数据时,只是将文件系统上的索引删掉,页表仍然没有空出来,此时就需要 SSD 的垃圾回收机制来进行 Page 的回收;

注意,这个描述是不准确的,SSD 在硬件层面工作,其无法感知文件系统的文件删除,所以无法得知哪些 Page 是空闲的。这需要操作系统通过 TRIM 等方式来通过 SSD 驱动,以将某些 Page 标注为空闲。除此之外,数据更新也会产生空闲 Page,其也会被 GC 处理;

在每个 Block 中,被占用的页表称之为“无效页”,而没被占用的则称之为“有效页”。垃圾回收的动作, 就是找出另一个新的 Block,然后将要处理的 Block 中的有效页复制到这个新的 Block 中,标示为可用。换句 话说,需要被复制的有效页越少,整体性能就会越高,这也是控制芯片好坏的区别;

需注意;回收没有数据的块——影响 SSD 的性能

原理简述

SSD 将存储划分为 Block,Block 又进一步划分为 Page;

在写入数据时,SSD 必须先擦除不需要的数据块,然后才能写入新数据;

但是,数据是在 Page-Level 读取和写入,但必须在 Block-Level 擦除。原因是:在擦除数据时,需要大量的电压,并且很难在不对相邻单元产生负面影响的情况下将电压定为更细粒度的水平;

GC 的目的是通过保留尽可能多的空块来提高效率,这样当 SSD 需要写入数据时,就不必等待块被擦除;

SSD 无法在 Page 级别覆盖数据或擦除数据,所以 SSD 需要使用与 HDD 截然不同的方式处理数据更新和删除;

当引入 GC 机制后,如果用户更新数据,如下为数据写入过程:
1)更新的数据写入 Free-Page(有时是在不同的 Block 的 Page 中);
2)包含原始数据的 Page 随后被标记为 Stale-Page,而 Stale-Page 在其数据被擦除前无法使用;

此时 Block 通常包括包含 Used-Page 以及 Stale-Page。要回收具 Stale-Page,GC 过程:
1)识别出 Stale-Page;
2)然后,将 Good-Page 移动到另一个 Block;
3)然后,以便 GC 擦除原始 Block;


注意:Block 通常包含 64, 128, 256 个 Page,这里仅作演示;

1)假如现在有两个 Block:Block-A(其 Page 1-5 包含数据)、Block-B(其无数据);
2)当用户更新 Page 1-5 的数据时,将被写入新的 Page 中,而原始 Page 标记为 Stale 状态;
3)当用户增加数据时,将被写入新的 Free-Page 中,如图:1+~5+、6~10
5)当 GC 时,数据 1+~5+、6~10 将复制到 Block-B 中,然后 Block-A 将被擦除;

特性特征

GC 其非文件系统层面(即与丢弃不再需要的文件无关),而是旨在优化空间和提高效率;
通过 GC 机制,主动消除在每次写入操作前对整个 Block 进行擦除的需要;

GC 的实现取决于厂商,部分厂商会通过 Wear Leveling 来避免某个 Block 过渡使用的问题;

检查 GC 运行

hard drive – Monitor the Garbage Collector of an SSD – Server Fault

SSD GC 是厂商产品特定的功能,属于商业机密,一般没有提供可观测指标或操作接口;

我们仅能通过触发特定负载,并仔细性能测试检查结果,来猜测发生了什么。

参考文献

What is solid-state storage garbage collection?