SSD的GC管理

1 篇文章 0 订阅

SSD 的“垃圾回收”其实就相当于固态硬盘的碎片整理,它是固态硬盘自身主控芯片的自动处理机制,不依赖于操作系统。

垃圾回收的功能是将所有 Block 中的有效 Page 合并到一个新的 Block 中,并将旧的 Block 进行擦除,这样做的好处一方面减少寻址负担,另一方面留出更多的空闲 Block。所以垃圾回收对固态硬盘的性能和寿命都起到至关重要的作用。

垃圾回收分为“闲置垃圾回收”和“被动垃圾回收”。顾名思义,前者就是在固态硬盘存取闲置时做垃圾回收操作,这样做的好处是不会占用额外的主控资源,能够让固态硬盘尽可能地保持较高的效能,但缺点就是会增加额外的写入放大。一般来说如果有新资料在储存或删除,此机制就会自动运作。

而被动垃圾回收则是在做垃圾回收操作的同时,用户也在进行数据输入/输出的动作,这个机制也可以称为“实时垃圾回收”。由于这个机制会大量占用主控资源,对有数据请求时的“响应时间”产生一定影响。

总的来说,垃圾回收操作由于将不同 Block 中的有效 Page 进行合并,有额外的擦除操作,会增加写入放大。因此过于频繁的垃圾回收会对 NAND 寿命产生影响 (部分主控芯片为了存取速度,会频繁的做回收的动作,其他的大部分则是在有必要时才做)。如何在避免擦写与提升速度间取得一个平衡,是衡量固件算法的重要指标。

至于有人会说,既然迟早都要重新擦写,那为什么说垃圾回收不要太频繁对 SSD 寿命有好处,简单的说,他的擦写不是直擦写最小存取单位“页” (比如常见的 4 KB),而是一次擦写一整个“块”(如果拆成 4K 来擦写,会大幅提高主控的工作量),一般一块通常是 512 KB - 1 MB,同时还有繁复的移动动作,所以经常进行 GC 自然对寿命影响不小,所以在速度和寿命的取舍往往是两难的问题,速度快的 SSD,往往也就是垃圾回收的比较勤快。

整个使用过程简单的说是:

  1. 新 SSD,闪存颗粒页全空闲。
  2. 用户将数据写入页。
  3. 用户删除了数据,主控将这部分页标记为“未使用”,但数据依然留在上面。
  4. 当空闲页面用完,或下 TRIM 指令或格式化时,会告诉主控这些页的数据不要了,于是主控立即执行 GC 清除数据。
  5. 主控以块为单位重新整理这些页 (类似碎片整理),之后空闲页面不够用时就不用先等待主控整理。

★ 垃圾回收对 NAND 闪存影响详述:

NAND 闪存颗粒在写入数据时是以一个页面 (通常是 4 KB) 为单元,但在擦除数据时却是以块为单位。一般来说,一个块相当于 128 - 256 个页面单元,也就是相当于 512 KB - 1 MB。假如在 X 块中包含了 A、B、C、D 等几个页面单元,当需要擦除 A 页面单元中的数据时,SSD 主控会读取整个 X 块的数据并写入缓存,然后分别擦除缓存中的 A 页面数据和 NAND 芯片中的 X 块,最后将缓存中不包含 A 页面的 X 块数据重新写入 SSD 中 (写入过程也称为编程)。也就是说,虽然擦除的只是 A 页面的数据,但 B、C、D 页面的数据也要重新擦除并写入。因此即便是只需要擦除 4 KB 的数据,其实也要进行 512 KB 的数据“搬运”工作。这个过程可以简单的概括为“读取→擦除→修改→写入”。听起来似乎没什么问题,但其实 NAND 闪存芯片的编程/擦除(P/E)周期次数是一定的。目前普遍使用的 MLC 闪存 P/E 周期为 3000 次左右,一些优质颗粒可以达到 5000 次,超过这个阈值闪存芯片就会报废。

所谓垃圾回收就是主控将闪存中所有的有效页面合并成一个新的块,并将旧的块擦除,以减少寻址负担并留出更多空闲的块。目前的垃圾回收机制包括主动和被动两种。前者就是在 SSD 闲置时运行垃圾回收机制,这样就不会占用额外的主控资源,但缺点是会对闪存产生额外的写入操作,这就是所谓的“写入放大”。被动垃圾回收则是在 SSD 读写数据的同时进行垃圾回收,此时会大量占用主控资源,因此会对性能产生影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值