SSD垃圾回收机制
SSD 中的 GC(Garbage Collection,垃圾回收) 是固态硬盘内部的一种关键后台管理机制,主要用于回收无效数据占用的存储空间,维持 SSD 的写入性能和寿命。其核心原理和运作方式如下:
一、GC 的存在必要性
由于 NAND 闪存的物理特性,数据写入必须以“页”(Page,通常 4KB–16KB)为单位,但擦除必须以“块”(Block,通常包含 128–256 个页)为单位。此外,NAND 不支持覆盖写入:当数据被修改或删除时,原有位置会被标记为“无效”,新数据需写入空白区域。长期累积会导致:
- 存储碎片化:块中混合有效页(需保留的数据)和无效页(可回收的“垃圾”);
- 可用空间减少:若无主动回收,写入新数据时需频繁执行耗时的擦除操作,拖慢性能。
GC 的作用正是解决这些问题。
二、GC 的工作流程
-
选择源块(Source Block)
主控算法会优先挑选 无效页比例高、有效页少 的块,以最小化数据搬运量。例如,若某块 80% 为无效页,则回收效率较高。 -
迁移有效数据(Valid Data Copy)
将源块中的有效页读出,写入到新块(或 OP 预留空间)的空白页中。此过程依赖 FTL(闪存转换层) 更新逻辑地址到物理地址的映射表。 -
擦除源块(Block Erase)
有效数据搬移后,整个源块被擦除,转为“空闲块”供后续写入使用。
三、GC 的触发时机与类型
- 前台 GC(Foreground GC)
当可用块不足时被动触发,在执行用户写入请求的同时进行回收。此时会占用主控资源,导致写入延迟上升(表现为 SSD 变慢)。 - 后台 GC(Background GC)
在 SSD 空闲时主动执行,不影响实时性能。主控通过“水位线”(如空闲块低于 20%)决定启动时机。
以下表格对比了两种 GC 模式的关键差异:
| GC类型 | 触发条件 | 对性能影响 | 资源占用 | 用户感知 |
|---|---|---|---|---|
| 前台GC | 可用块不足时被动触发 | 高,导致写入延迟上升 | 高,占用主控资源 | 明显感觉SSD变慢 |
| 后台GC | SSD空闲时主动执行 | 低,不影响实时性能 | 低,利用空闲资源 | 基本无感知 |
四、GC 的影响与挑战
- 写入放大(Write Amplification, WA)
GC 需额外搬运有效数据,导致实际写入量 > 用户数据量。例如搬运 1GB 有效数据可能产生 1.5GB 的闪存写入。WA 过高会加速闪存磨损。 - 性能波动
前台 GC 可能引起写入延迟突增,尤其在硬盘接近满盘时。 - 寿命损耗
每次块擦除消耗一次 P/E 周期(闪存寿命单位),频繁 GC 会缩短 SSD 寿命。
五、GC 与其他技术的协同
- Trim 指令
操作系统删除文件时,通过 Trim 通知 SSD 标记对应页为“无效”。这帮助 GC 精准识别垃圾数据,避免搬运无效页,从而降低 WA 并提升回收效率。 - 预留空间(Over-Provisioning, OP)
用户不可见的额外空间(通常占 SSD 标称容量的 7–28%),提供更多空闲块缓冲,减少前台 GC 频率。 - 磨损均衡(Wear Leveling)
结合 GC 过程,主控会将数据均匀写入不同块,避免局部闪存过早损坏。
总结
GC 是 SSD 维持高性能和寿命的核心机制,本质是通过 回收无效空间、整合有效数据 来优化存储结构。其效率直接影响 SSD 的长期使用体验——Trim 和 OP 技术 的配合能显著提升 GC 效果,减少写入放大和性能衰减。若你的 SSD 变慢或满盘,可能是 GC 压力增大所致,及时清理文件并确保 Trim 启用(可通过 fsutil behavior query DisableDeleteNotify 命令检查)是有效的优化手段。
本文来自博客园,作者:闹闹爸爸,转载请注明原文链接:https://www.cnblogs.com/wanglouxiaozi/p/18961144

浙公网安备 33010602011771号