SSD相关知识:TRIM指令与垃圾回收
●TRIM指令
TRIM是从Windows 7和Windows 2008 R2开始支持的一个ATA指令,他的作用就是由操作系统告诉固态硬盘,标记那些存有无效数据的地址,以提升后续垃圾回收的效率。
这条指令有什么用呢?我们在删除数据时,Windows会先标记被删除的扇区,但此时对于硬盘来说该数据仍是存在的,因此我们就有误删除数据后恢复数据的可能性。在有新的数据将要写入该扇区时,对于机械硬盘来说可以直接写入,但是对于固态硬盘来说必须先进行擦除操作,再将新的数据写入其中。所以长期如此写入数据之前总要进行擦除操作,性能自然逐渐下降。
如果固态硬盘支持TRIM,在数据被删除或者格式化分区之后,就会被标记为“无效”,待主控在做垃圾回收将所有的“有效数据”合并时,就会对这些“无效数据”进行擦除再写入的操作,当然使用哪些区块则依赖于磨损平衡算法,两者相辅相成。也就是说,当操作系统有新的数据需要写入固态硬盘时便不必再进行额外的“先擦除”的动作,保证了性能。
所以支持TRIM的固态硬盘增加了垃圾回收的效率,因为不必过多去操作那些“无效数据”,这也是保证寿命的有效途径。
但是目前并非所有主控芯片均支持TRIM,这需要用户在购买时进行核实,固件的更新也会跟进提供支持。除此之外,我们要确定操作系统已经启用了TRIM指令(Windows 7和Windows 2008 R2默认是开启的),同时已经安装了支持TRIM的磁盘驱动程序。另外,当前TRIM指令还不支持磁盘阵列(RAID),所以组建固态硬盘RAID的用户还需小心行事。
启用了TRIM指令的固态硬盘确实可能造成误删除数据之后“没有后悔药”,尽管可能不是立竿见影的效果。不过机械硬盘由于硬件层面就不支持TRIM,也就不存在上述问题了。
●垃圾回收(Garbage Collection)
刚刚有提到垃圾回收,现在来说说这个名词。垃圾回收其实就相当于固态硬盘的碎片整理,它是固态硬盘自身的一种机制,不依赖于操作系统。
垃圾回收的功能是将所有Block中的有效Page合并到一个新的Block中,并将旧的Block进行擦除,这样做的好处一方面减少寻址负担,另一方面留出更多的空闲Block。所以垃圾回收对固态硬盘的性能和寿命都起到至关重要的作用。
垃圾回收分为闲置垃圾回收和被动垃圾回收。顾名思义,前者就是在固态硬盘闲置时做垃圾回收操作,这样做的好处是不会占用额外的主控资源,能够让固态硬盘尽可能地保持较高的效能,但缺点就是会增加额外的写入放大。
而被动垃圾回收则是在数据输入/输出的同时做垃圾回收操作,这个机制会大量占用主控资源,对有数据请求时的“响应时间”产生一定影响。这个机制也可以称为“实时垃圾回收”
总的来说,垃圾回收操作由于将不同Block中的有效Page进行合并,有额外的擦除操作,会增加写入放大。因此过于频繁的垃圾回收会对NAND寿命产生影响,但又需要进行这样的机制来保证性能,怎样在两者之间取得一个平衡是衡量固件算法的重要指标。
网友评论