大家好,杨子来为大家解答以上问题,ssdtrim功能必须开启吗,ssdtrim很多人还不知道,现在让我们一起来看看吧!
1、背景:在解释TRIM命令之前,先简单说一下文件系统和闪存。当我们在操作系统中删除一个文件时,系统并没有真正删除这个文件的数据,它只是在文件系统中将这些数据所占用的空间标记为‘空’,也就是可以被覆盖。这是文件系统级的操作,硬盘本身并不知道那些地址的数据是‘无效’的。在机械硬盘上,这不是问题,因为HDD允许重写。但是在固态硬盘上,问题就来了。我们知道闪存是不允许被覆盖的,所以只能先擦除再写入。为了在已经使用了一段时间的硬盘上获得‘空闲’的闪存空间用于写入,SSD必须进行GC(垃圾收集)操作,先将分散的有效数据块读入内存,擦除这个块,然后将有效数据写回,这就是所谓的写放大。没有TRIM,SSD无法提前知道已经被‘删除’的数据页是‘无效’的。当执行GC时,它仍然作为有效数据移动。只有当系统要求数据写在同一个地方才能被擦除,SSD才能在最合适的时间做出最好的优化,这不仅影响GC的效率(间接影响性能),也影响SSD的寿命。
2、文件系统使用ATA TRIM命令通知设备哪些逻辑地址段不再被占用,可以被设备回收为空闲空间。在ATA命令集中,TRIM命令只是数据管理集(DMS)命令的一个子命令。命令DMS专门用于设备优化(数据集管理命令提供信息(例如,文件系统信息),该设备可以或不可以用于优化其操作)。这个命令只通知设备逻辑地址段中哪些数据是无效的,最后设备记录下来,决定是否在GC操作时擦除。如表33所示,当DMS特性属性的最低位置为1且命令设置为0x06(或0x07)时,会发送TRIM命令。
3、发送TRIM命令时,还需要COUNT字段中指定长度的数据包,需要告知设备的LBA地址通过portal发送,每个portal占用64Bit。例如,如果您需要告诉设备第1个到第20个块可以回收(每个块默认为512字节),高16位是值为0x0013的LBA地址范围,低48位是值为0x000000000001的LBA起始地址,则此条目中填充的值为0x0013000000000001。每个门户最多可以代表65,535个块。如果您需要一次通知设备更多地址,您将相应地添加另一个门户。条目格式如表36所示。
4、上面说的TRIM命令,其实就是SSD优化命令,操作系统用的。但是操作系统并不限制这个命令,普通使用程序也可以发出。
本文讲解到此结束,希望对大家有所帮助。