【整理】SSD的TRIM指令作用与GC关系

声明:内容来自网络+自我整理

TRIM(disable delete notify,禁用删除通知),是为了增强SSD主控垃圾回收效率、解决硬盘降速问题而引入的ATA指令。其正常工作的三个前提:操作系统、驱动程序和固态硬盘三个层面的共同支持,缺一不可。【注意:TRIM目前无法工作在RAID环境中,目前RAID驱动不支持】

GC(Garbage Collection,垃圾回收),是固态硬盘(SSD)的一个基本技术,它对SSD的性能和寿命有直接的影响。

(1)GC的意义:当使用机械硬盘时,文件系统可以直接将新数据写入到旧数据存储的位置,即可以直接覆盖旧数据。在固态硬盘中,境况有所不同。如果想让存储无用数据的块写入新数据,就需要先把整个块删除,才可以写入新的数据,也就是说固态硬盘并不具备直接覆盖旧数据的能力。对于固态硬盘来说,GC(垃圾回收)是指把现存数据重新转移到其他闪存位置,并且把一些无用的数据彻底删除的过程。上面介绍了,数据写入的方式,即以页面为单位写入,但是要想删除数据却需要以块为单位。因此要删除无用的数据,固态硬盘首先需要把一个块内包含有用的数据先复制粘贴到全新的块中的页面内,这样原来块中包含的无用数据才能够以块为单位删除。删除后,才能够写入新的数据,而在擦除之前是无法写入新数据的。

(2)写放大问题:因为当写入新数据时,如果SSD控制器找不到可以写入的page时,会执行GC过程,然后GC机制会将一些block中的有效数据合并写入其他的block中,然后将这些block的无效数据擦出,再将新数据写入到这些block中,而在整个过程中除了要写入用户的数据之外,实际上SSD还写入了一些其他block合并过来的数据,所以这就叫写入放大。

(3)TRIM:的出现主要为了提高SSD垃圾资源的回收效率以及减少写入放大的发生。我们知道,在文件系统上删除某个文件时候,它只是简单的在逻辑数据表内把存储要删除的数据的位置标记为可用而已,而并不是真正将磁盘上的数据给删除掉。使用机械硬盘的系统根本就不需要向存储设备发送任何有关文件删除的消息,因为在将来,系统可以随时把新数据直接覆盖到无用的数据上。固态硬盘的情况就不同,只有当系统准备把新数据要写入那个位置的时候,固态硬盘才意识到原来这写数据已经被删除了!(无用数据。),而如果在这之前,SSD执行了GC操作,那么GC会把这些实际上已经删除了的数据还当作是有效数据进行迁移写入到其他的block中,这是没有必要的,也就是说TRIM的出现避免让控制器搬运这些无效的数据块,而这些无效的数据块已在GC操作中被清空,这也降低了SSD颗粒擦写次数,延长了寿命。

(4)详细解释TRIM:

       通常磁盘操作的删除不是马上删除,而是标记为待删除的无效数据。机械硬盘工作原理只有读和写,因为数据是可以直接在原有的磁道上进行覆盖,不需要经过清除这个步骤,这是机械硬盘磁道记录信息的特点。但是SSD不行,SSD是读、擦、写三个步骤,任何一个记录模块如果里面有数据,必须把有数据的区域擦除清零才能写入。
      因此,对于SSD而言TRIM的最大作用是清空待删除的无效数据,在SSD执行读、擦、写步骤的时候,预先把擦除的步骤先做了,这样才能发挥出SSD的性能,通常SSD掉速很大一部分原因就是待删除的无效数据太多,每次写入的时候主控都要先做清空处理,所以性能受到了限制。
       用个例子来说明,假设有一个100G全部存满数据的SSD,然后删除掉50G的数据,那么SSD删除数据是先标记这50G为待删除无效数据,不再进行访问,然而这些数据依然占据你的磁盘空间,系统则会显示你有50G的空间,当你需要写入新数据的时候,就会把那50G的空间执行擦除然后再执行写入,主控同时进行擦除和写入,如果数据量很大的话掉速就会出现。主控进行擦除也是按照性能原则来进行的,一般都是要写入多少数据就擦除多少待删除无效数据,这样才能保持最大的性能。TRIM里关于清空无效数据的指令,一般来说每个主控都会有,理论上不需要你操作主控会自己判断。但这只是理论,实际上主控没有那么聪明,很多时候并不会主动清理,它需要一个逻辑判断,通常是系统空闲的时候才会操作这个步骤,可是一般人上班的时候基本上电脑都不会空闲,就容易发生工作时间8小时内SSD都不会执行清理程序,只会在空白空间不够的时候再根据需要清理。
        打个比方,家的柜子装东西,柜子里放满了东西,这个柜子能不能再放新的物件取决于要不要丢掉柜子里的一些东西。如果暂时没有新物件放进去又不想现在丢掉箱子里的东西,那么这个箱子在认知中是还可以放东西的(只是需要先丢一些东西,这就是删掉了50G数据,这些数据还在,但是系统显示有50G的空间,只是做了标记可以放东西不,不代表目前有空间),但放东西之前必须要先拿部分东西腾空间的流程,这个流程是现在做(TRIM开启,及时清空无效数据),还是需要放新东西的时候再说(由主控来控制,有需要的时候再清理,例如空白空间用完了)。开启TRIM指令的好处是,随时清空待删除无效数据,而不是等到要写新数据时的才开始清空,加大主控负担。

(5)如何查看SSD是否开启TRIM?

在window系统下查看SSD Trim功能是否开启:

  1.启动CMD命令行窗口。

  2.输入fsutil behavior query disabledeletenotify。

  3.显示DisableDeleteNotify = 0 表示已开启。

  4.如果没有开启,输入fsutil behavior set disabledeletenotify 0 进行设置。

  5.可以手动关闭Trim功能,输入fsutil behavior set disabledeletenotify 1

  注意:我们是不需要关闭该功能的,因为只有开启了这项功能,我们安装上的固态硬盘才可以享受到更长久的使用寿命。如果你安装的固态硬盘不支持该项功能,那么此功能在开启的时候会失败。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux的SSD TRIM是一种用于优化固态硬盘(SSD)性能和寿命的技术。TRIM是一项操作系统级别的指令,用于通知SSD哪些数据块不再被使用,可以被擦除和重写。这有助于提高SSD的写入性能,并减少因为重写未使用数据块而引起的性能下降。 要启用SSD TRIM功能,您需要进行以下步骤: 1. 确保您的SSD支持TRIM。大多数现代SSD都支持这个功能,但一些较旧或低端的SSD可能不支持。您可以查看SSD制造商的文档或技术规格来确认它是否支持TRIM。 2. 检查您的Linux发行版是否已启用TRIM。大多数现代Linux发行版默认情况下已启用TRIM。您可以运行以下命令来检查: ``` sudo systemctl status fstrim.timer ``` 如果输出显示"active"或"enabled",则表示TRIM已启用。 3. 确保您的文件系统支持TRIM。大多数常见的文件系统,如ext4和XFS,都支持TRIM。您可以通过检查`/etc/fstab`文件的文件系统挂载选项来确认是否启用了TRIM。 例如,对于ext4文件系统,您应该看到类似于以下内容的挂载选项: ``` UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 discard,noatime,errors=remount-ro 0 1 ``` 请注意,`discard`选项用于启用TRIM。 4. 手动运行TRIM命令。如果TRIM没有自动运行,您可以手动运行TRIM命令来清理未使用的数据块。使用以下命令: ``` sudo fstrim -av ``` 这将触发对所有已挂载文件系统的TRIM操作。 请谨慎使用TRIM命令,因为它会触发SSD上的擦除操作,可能会导致数据丢失。确保在运行TRIM之前备份重要数据。 希望这些信息对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AdamFriedrich

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值