什么是TRIM?

San*_*dra 14 ssd hard-drive trim

TRIM的维基百科页面我得到的印象是,引入TRIM是为了降低对SSD的写入,但在文件系统中记录了哪些块未使用的情况。

如果这是正确的,这是否意味着不使用 TRIM 的 SSD 在删除文件时将零写入块,让 SSD 知道这些块是空闲的?

这个

来宾中的文件系统倾向于不重用块,这意味着即使文件系统相对于虚拟映像大小仍然很小,实际映像大小也会增加,直到达到最大大小。

让我想到,SSD 不会用零覆盖?还是来宾中的文件系统完全不同?

Jav*_*ier 16

闪存设备(用于今天的 SSD)不能在任何时候写入任意数据;在写入单元(通常为 4KB)之前,必须先擦除。不幸的是,擦除操作非常缓慢;这就是为什么闪存设备比磁驱动器慢得多的原因,尽管没有移动部件。

现代 SSD 通过维护一组预擦除单元来隐藏擦除时间,这意味着写入命令不会立即覆盖现有数据,而是驱动器的控制器选择一个已擦除单元,重新映射它,并使用新数据写入。这(以及几种写入思想的缓存策略)使驱动器获得了巨大的加速,大大超过了磁驱动器。

为了确保总是有一组预先擦除的单元格,只要不需要单元格,驱动器就会安排它进行后台擦除,并将其添加到费用单元格列表中。

不幸的是,现有的文件系统并没有费心告诉驱动器什么时候有一个扇区是空闲的。毕竟,驱动器应该只是一个愚蠢的比特存储库。从文件系统的角度来看,删除文件或将扇区标记为空闲的任何其他操作只是某些元数据结构上的标记。该部门本身没有受到影响。即使文件系统通过在其上写入零来清除它,驱动器也不知道这是否意味着该扇区是空闲的,或者用户是否想要在文件上添加一些零。一段时间后,驱动器在写入之前将没有任何空闲单元可供擦除;和性能下降悲惨。

目前维护的大多数文件系统都很快起草并采用了 TRIM 指令。这是文件系统用来告诉驱动器扇区内容不再重要的简单信号。一旦映射到单元上的所有扇区都是空闲的,SSD 控制器就会取消映射单元并安排它进行擦除。如果主机读取这些扇区,SSD 就不会费心从 Flash 中获取数据,它会立即以零响应;但最重要的作用是保持预先擦除的单元格列表总是得到补充。

尽管如此,大多数 SSD 的容量都小于闪存的物理大小,有时低至 75%。即使在 100% 完整的系统上,它也可以保留一些未使用的单元格,因此(覆盖)使用的扇区仍然很快。


Chr*_*s S 8

引入 TRIM 是为了使操作系统(操作系统中的文件系统)可以与 ATA 存储介质通信,该文件系统不再使用某个扇区。这与写入磁盘无关。

TRIM 不保证扇区在介质上归零。它确实保证当文件系统请求从该扇区读取时返回零(请注意,因为 SSD 知道该扇区应该为零,所以无论介质中实际存储什么,它都会返回它们;可能可以恢复来自已简单修剪的磁盘中的数据,尽管通常 SSD 实际上确实会擦除内存)。

文件系统确实倾向于分发它们的写入(出于各种原因,从尝试写入平衡到垃圾收集,再到随机化存储位置等等)。因此,如果介质不知道文件系统没有使用哪些扇区,简单地写零并不一定意味着该扇区未使用,那么它最终必须假设整个磁盘都在使用中。

对于 SSD,此假设意味着必须在写入时擦除扇区,从而降低写入速度;而不是在删除文件时擦除内存位置。与虚拟化系统中的虚拟磁盘文件类似,动态磁盘文件最终将包含虚拟磁盘的全部容量。如果虚拟化系统实现了 TRIM,那么它就会知道某个扇区何时不再被使用,因此动态磁盘不需要跟踪该位置。