Ssd TRIM/DISCARD 详细信息

Ssd TRIM/DISCARD 详细信息

我正在编写一个脚本,我对 TRIM 命令的内部工作原理有几个问题。如果对完全为空(清零)的擦除块发出 TRIM,垃圾收集器是否仍会删除该块?我希望能够对 SSD 上的大块发出 TRIM,但我担心这会导致已经为空的块出现不必要的磨损。

另一方面,如果我不对文件系统以前使用的空块(例如,文件中仅包含零的部分)发出 TRIM,那么在向这些块写入有意义的数据时是否会有任何开销?换句话说,由于块已经处于“基础”状态,ssd 是否足够“智能”而不执行读取-修改-写入循环?

这个是否依赖控制器(我主要关心新的 sandforce)?

答案1

Justin Lynn 的回答完全正确。我只是想回答你问题的另一部分。

由于 NAND 单元存储数据的方式,擦除(接地)状态为 1,而不是 0。因此,需要先擦除 0 块,然后才能写入,但 1 块可以直接写入。

编辑:至于当 SSD 需要写入一个充满 1 的块时会发生什么的问题,很难回答。即使块中没有需要擦除的数据,可能仍有需要擦除的元数据。如果不是这种情况并且块完全可写,则取决于 SSD 的 GC 实现。

另一种可能性是 SSD 足够智能,当您向其写入一个零填充的 LBA 时,它会意识到不需要将数据写入 NAND。相反,它只是取消 LBA 的映射,当被要求输入数据时,它会返回零,这是未映射 LBA 的默认设置。如果 SandForce 驱动器这样做,我不会感到惊讶,因为它们已经在进行数据压缩和重复数据删除。我不知道其他 SSD 是否这样做。

我知道我的回答中有很多可能性、可能和不知道,但 SSD 制造商对此没有通用规则可遵循,因此这取决于各个制造商的决定。了解这些决定的人不能谈论它们,因为这些 GC 算法的具体实现对 SSD 性能至关重要。

答案2

好吧,TRIM 作为一个命令只是告诉 SSD 控制器,文件系统不再需要该块,并且当控制器对可用闪存空间进行垃圾回收时,它可能不再担心该块。否则,SSD 必须在垃圾回收时移动 [现已删除] 的块。TRIMing 大块零不应增加驱动器的磨损,相反,在具有适当 TRIM 实现的控制器上。也就是说,确切的行为取决于控制器,但就您的使用目的而言,我不会担心 TRIMing 大块零块区域,如果有的话,您将节省 SSD 在 GC 时必须复制零块的时间。我不是 SATA 协议的专家,但从阅读中似乎得出了一个非常明确的结论http://en.wikipedia.org/wiki/Write_amplification, 尤其http://en.wikipedia.org/wiki/Write_amplification#TRIM

相关内容