SSD 中的 TRIM 指令

#+SETUPFILE: ~/Dropbox/Doc/Org_Templates/level-1.org

SSD 写数据的原理

在机械硬盘中, 写入新数据的时候可以直接覆盖原数据, 但是在 SSD 中, 情况发生 了变化. SSD 并不能直接覆盖原来的数据, 必须先要把旧的数据先擦除然后才可以 把新的数据写入.

从物理结构上讲, SSD 被分为许多 block, 每个 block 又可以 再往下划分为 pages. 数据可以直接以页面为单位写入, 但是要想删除数据却需要以 块为单位. 因此在删除数据的时候稍微麻烦一些: 首先需要把一个块内包含有用的数据 先复制粘贴到全新的块中的页面内, 这样原来块中包含的无用数据才能够以块为单位 删除. 删除后, 才能够写入新的数据.

所谓的 SSD 的垃圾回收就是把现存数据重新转移到其他闪存位置, 并且把一些无用 的数据彻底删除的过程.

这样会带来一个问题: 系统删除某个文件只是简单的在逻辑数据表内把存储要删除的数据 的位置标记为可用. 这在机械硬盘的情况很正常. 但对于 SSD , 由于其并不具备直接 覆盖旧数据的能力, 直到写入那个位置的时候, 它才意识到这些数据已经无 效了(被操作系统删除了). 在此期间发生的垃圾回收操作就会读写这些无效的数据, 大大降低 SSD 的性能.

TRIM 指令解析

TRIM 是基于 SATA 控制器的一个指令, 一旦有文件删除或者分区格式化. 操作系统就会 发送 TRIM 指令给 SSD 告诉它某处的数据已经删除了, SSD 因而知道这些数据是无效 的, 在垃圾回收的时候就可以直接忽略这些区域, 对这些区域可以直接进行清空. TRIM 指令的存在使得 SSD 能够紧紧跟随 OS 的操作意图, 达到性能的最优化和空间的最大化.

TRIM 的优势

  • 写入的吞吐量大大得到改善: 因为在垃圾回收的时候那些被标记为删除的数据不需要重写, 节省了大量时间
  • 更多的空闲空间, 一旦数据被标记为删除, 这些空间马上就可以利用.
  • 设备的使用寿命得到增加: 由于不在需要重新写入无用数据, 减少了 SSD 实际写入次数.

如何使用

Mac

对于原装 Mac 的 SSD 硬盘来讲, 默认情况下 TRIM 已经打开了. 无论如何, 可以使用: 关于本机 -> 更多信息 -> 系统报告 -> SATA/SATA Express 里面的信息查看 “TRIM 支持”.

Linux

用下列指令查看 SSD 是否支持 TRIM:

# hdparm -I /dev/sda | grep -i trim

然后在 mount 的挂载参数添加 discard 选项.

或者调用 fstrim 向 SSD 设备发送 trim 指令.

Windows

Note: 首先 XP 系统不支持 TRIM 指令.

一般 Windows 系统下, TRIM 指令默认是开启的, TRIM 本来就是 Windows 联合厂商 提出来的.

在命令行提示符下: 输入以下指令查询 TRIM 的开启情况

C:\Windows\system32> fsutil behavior QUERY DisableDeleteNotify
DisableDeleteNotify = 0

0 表示启用, 1 表示没有启用.

用户可以使用下列指令开启 TRIM:

C:\Windows\system32> fsutil behavior set disabledeletenotify 0
DisableDeleteNotify = 0

用户可以使用下列指令关闭 TRIM:

C:\Windows\system32> fsutil behavior set disabledeletenotify 1
DisableDeleteNotify = 1

References

Garbage Collection and TRIM in SSDs Explained – An SSD Primer

Fsutil behavior

fstrim shows discardable blocks even after using discard option

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦