SDB:SSD 空闲时间垃圾回收支持

跳转到:导航搜索


在 openSUSE 上测试

推荐文章

Icon-manual.png


本文讨论了一个特定的 SSD 功能,以及 openSUSE 是否支持它。答案并非简单的“是”或“否”。也不是简单地列出支持的 SSD 与不支持的 SSD。相反,读者理解“空闲时间垃圾回收”功能是什么非常重要。

术语

擦除块 - EB - SSD 由 NAND 门技术构建。基本构建块是 NAND 存储芯片,它以数据块的形式工作。在 NAND 芯片内部,存在擦除块功能。擦除技术不允许擦除擦除块的一部分。要么全部擦除,要么不擦除。因此,“擦除块”或 EB 已被认为是 NAND 芯片可以擦除的最小块大小。通常 EB 的大小比传统的扇区甚至文件系统页面大得多。目前最常见的 EB 大小是 128KB。

丢弃、UNMAP 和 TRIM:这三个术语经常被互换使用,描述相同的基本功能。

丢弃是 Linux 中用于告知存储设备某些扇区不再存储有效数据的术语,适用于 ATA 和 SCSI 设备。 例如,对于 ext4 文件系统,有一个丢弃挂载选项,而不是 trim 或 unmap 选项。 历史上,此功能不存在,但最近 SSD 制造商要求提供此功能以提高其设计的性能能力,SCSI 阵列制造商也要求类似的功能以更好地支持稀疏配置。

因此,通常会丢弃 SSD 的小扇区范围,但仅丢弃 SCSI 阵列的大范围。 例如,某些 SCSI 阵列可能会将范围限制为 4 MB 的边界。 阵列特定的实现方式决定了范围如何被限制。

TRIM 是发送到 SSD 的实际 ATA-8 命令,用于导致扇区范围或一组扇区范围被丢弃。 因此,它仅应适用于 ATA 设备,但通常被通用地使用。 鉴于 ATA 设备的普及程度,trim 通常是这些术语中最常用的。

UNMAP 是一个 SCSI 特定的命令,性质相似,但主要用于支持稀疏配置。 UNMAP 也可以用作通用术语,而不是仅用于 SCSI 设备。

SCSI 还支持 WRITE SAME,它也可以用于实现丢弃功能。 目前,WRITE SAME 似乎仅在它专门适用时才使用。

为什么 SSD 需要垃圾回收?

通常,所有现代 SSD 都需要一个擦除块 (EB) 合并器。现代 SSD 具有通常为 128KB 的 EB,但它们允许这些 EB 包含非连续的数据页。

一些 SSD 制造商将其称为垃圾回收。特别是 SandForce 将其称为空闲时间垃圾回收。

关于 SSD EB 合并,关键是要理解 EB 重用是全有或全无的。要重写任何数据,必须擦除整个 EB,然后重写所有数据。在速度慢/廉价的 U 盘中,它们会适应这种限制,写入速度可能慢至每分钟数 MB。

在性能良好的 SSD 中,它们开发了更复杂的算法,使驱动器响应更快。它们通常不仅像旋转磁盘一样快,而且在随机 I/O 应用程序中通常更快。

因此,假设 SSD 跟踪和映射 4KB 页中的数据,即使它具有 128KB 的 EB。因此,新分配和写入的 EB 通常包含 32 个 4KB 页。

如果一些页面被正常的的文件系统使用覆盖,SSD 最有效的方法是标记覆盖的页面在分配的 EB 中为释放,并将新的页面排队到新分配的 EB 中。当 SSD 队列中有 32 个新数据页时,它将分配一个新的 EB 并写入数据。当然,当发生这种情况时,它还会更新逻辑到物理映射表。

这看起来很聪明,但想想原始的 EB。随着时间的推移,由于覆盖,数据从 32/32 页的使用状态变为越来越少的有效使用数据页。在某个时候,SSD 控制器会说,这太浪费空间了,让我合并一些这些部分使用的 EB。

可以看到,即使在没有操作系统级别支持的情况下,EB 合并也是必需的。它不需要理解文件系统布局等。

问题是,如果你的驱动器已 100% 满或接近满,那么所有的 EB 往往也会相当满,因此你最终可能会发现所有的 EB 都被使用,其中 75% 或更多是好的数据。对于具有如此高的平均使用百分比的合并器来说,保持效率非常困难。

因此,在 2007/2008 年左右创建了 TRIM 概念。TRIM 命令的目标是让 SSD 更好地了解哪些页面真正在使用中,哪些页面未在使用中。并利用这些知识更有效地合并 EB 以进行后台擦除。

因此,像 SandForce 的空闲时间垃圾回收这样的擦除块合并器是在 SSD 中实现的,不需要 Linux 支持即可工作,但确保你的 SSD 被“修剪”将允许 SSD 更好地了解哪些数据页是空闲的,从而允许该过程更好地工作。

参见

相关文章

外部链接