总的来说,SSD垃圾回收(Garbage Collection,以下简称GC)问题是一个多目标优化问题。不可能找到一种在任何情景下都表现最优的算法来实现这一机制,我们只能根据特定情境,选择恰当的算法来达到目的。
GC的原因
SSD中的块最终会被写满,必须时刻保证有free page来满足新的写入需求,因此在数据写入之间要穿插一些GC操作,以此来满足当前和未来的写入需求。
GC的过程
When to GC -> Which block -> How many blocks(只要涉及擦除就和磨损平衡有关) -> Data redistribution policy(数据怎么写回,写回哪里) -> Where to 分配新请求的数据
GC的目标
- 使SSD更快完成新写入需求,即使GC对写需求的影响尽可能小。
- 还得考虑SSD的寿命问题,即GC的次数和施加的位置也得考虑(最好的理想状态是每个block的擦除次数是平均的,达到平衡的效果,或者牺牲这个条件,使SSD响应更快?)
- 磨损平衡不是为了减少copy次数,而是为了延长寿命(每个block记录擦除次数和最近擦除时间,如果young block上放着hot data就先不管,否则进行静态磨损平衡)
NAND & 3d Xpoint
- NAND: 在已有数据的基础上必须先擦除后写入,擦除的基础单位是block,这意味着需要使用复杂的垃圾回收算法。
- 3d Xpoint: 以bit为基础访问单位,不需要擦除操作,因此不需要配合任何垃圾回收机制。