有朋友通过私信向存储极客提问:Trim指令只是把GC垃圾回收要做的擦除提前做了,提高了后续写入的性能,似乎对写入放大率没有帮助,为什么说Trim有利于延长固态硬盘寿命呢?
这个问题很有深度,弄清楚之后有助于大家深入理解固态硬盘的工作原理。小编就单独用一篇文章来系统讲解吧。
1987年,东芝发明了NAND闪存,它的容量大、速度快,断电不丢数据,诸多优点使得它不断发展至今,成为半导体存储的主力军。不过NAND闪存也有一些使用限制,譬如写入之前必须先经过擦除。这是FTL闪存映射转换层以及Trim指令问世的根源。
闪存读写和擦除单位不同:
闪存的最小读取和写入单位皆为Page,在东芝64层堆叠BiCS3闪存当中,一个Page页的大小为16KB。闪存在写入新内容之前必须先经过擦除,而擦除的最小单位是Block,一个Block块在BiCS3中的大小为12MB。
闪存这一特性跟儿童磁性画板有些类似,一擦就是一大块,无法针对单个点去做擦除。
先擦后写带来的问题:
电脑上的windows操作系统在删除硬盘上文件时,操作系统仅仅是在文件分配表中做一个标记,并不会对存放文件的位置做实际的抹除。这种做法对机械硬盘而言是很高效的。只要操作系统心中有数(文件分配表),随时可以在文件删除留下的垃圾位置上覆盖写入新的位置。
固态硬盘继承了机械盘的使用方式,删除文件产生的"垃圾"会一直在闪存中存放着,直到操作系统下一次要求在相同位置覆盖写入新数据,主控这才恍然大悟、措手不及(闪存无法不经擦除直接写入,只能先写到别处,通过FTL闪存映射表进行标记)。
当Block块中的垃圾多到一定程度之后,固态硬盘不得不将整个Block块中的全部Page页都读取出来、全部写入到新的Block块当中,然后擦除之前的Block。这个先读取、再写入、后擦除的过程就是固态硬盘中费时费力的"垃圾回收"工作。
因为删除文件时操作系统只在分区表上做改动,固态硬盘分不清哪些是无效页哪些是存有数据的有效页,将无效页也做了重复搬运:这样就做了无用功,不仅影响性能更是加速了闪存的磨损。
Trim带来了什么不同?
Trim在Windows中的大名是Delete Notify删除通知。通过Trim指令,操作系统可以在标记文件分配表的同时,顺带通知到固态硬盘:这些位置的数据已经没用了,你得空的话可以做下打扫了。
有了Trim指令之后,固态硬盘对闪存的实际占用情况了然于胸,在做垃圾回收时可以只读取其中的有效Page页,将它们写入到新的Block,然后就可以对旧block做擦除。简单来说就是Trim让固态硬盘垃圾回收的效率更高,减少了不必要的数据搬运重写,降低了写入放大率,提升了固态硬盘的使用寿命。
现在Trim指令早已成为固态硬盘的标配功能。不过Trim只是让固态硬盘主控了解"垃圾"的位置,具体何时做垃圾回收工作还需要更深层的算法去权衡性能和耐久度。在这方面,原厂固态硬盘往往比缺少研发能力的贴牌产品做的更好。