3.5.3 还我漂漂拳,TRIM与GC运作方式
SSD的写入方式决定了它越用越慢的特性,数据写入的越多性能就会越差,当然这也不是世界末日,只要对SSD进行清空操作,性能还会恢复过来的,最彻底的方式就是删除分区、重新格式化一遍,但是这种激进的方式会导致数据丢失,不够人性化。
为了恢复SSD的性能,厂商需要打一套江湖闻名的组合拳---“还我漂漂拳”,这一套连招下来,SSD即便不能如获新生也可以重振雄风了。
绝招之:TRIM指令
TRIM指令是微软提出的,但是SSD厂商也有支持与不支持TRIM之分,所以还是跟SSD有一定关系。
TRIM是基于SATA控制器的一个指令,一旦有文件删除或者分区格式化,操作系统就会发TRIM指令给SSD主控告诉它某处的数据已经删除了,SSD因而知道那些数据是能动那些不能动的,之后就可以进行清空操作以恢复性能了。不过这个过程不是马上就完成的,TRIM命令是即时发送到SSD主控中的,但是什么时候开始清空数据是主控算法的事。
之所以有这么一个沟通过程还是跟SSD与HDD的读写方式不同有关,首先操作系统的删除数据并不是真正把数据清空了,只是加了删除的标签而已(就像摘了门牌号,房子还在一样)就是说真实的数据还在,不过普通的操作访问不到了,但是一些专用的数据恢复软件可以把这些数据再找回来。
HDD机械硬盘是可以直接在原有数据上直接覆盖,但是SSD不行,必须要清空原有数据才能写入新数据,而系统并非真正删除数据的特性会对SSD的性能造成影响,TRIM指令的存在使得SSD能够紧紧跟随OS的操作意图,擦除已删除的无用数据以恢复SSD性能。
海盗船网站上提供了有关TRIM指令工作的图形化解释,前三步分别是空数据、写数据和删除部分数据,在此之后TRIM指令就会通知SSD主控可以清空红色区域的无用数据,之后SSD的性能就可以恢复如初了。
TRIM支持与否依赖于操作系统、磁盘控制器驱动以及SSD主控,Win7、Windows 2008 R2、Linux 2.6.33、MAC OS 10.6.6、Free BSD 8.2及之后的系统都支持TRIM或者类似指令,Win7自带以及Intel 9.6.0.1014及之后的磁盘驱动都可以支持,不过TRIM指令并不强制要求AHCI,IDE模式也可以,只是SSD几乎没谁用IDE模式吧。
微软PPT中专门解释过TRIM指令的工作方式和优点
TRIM指令目前只支持单个SSD,RAID模式无效,但是之前有消息称Intel打算在RST 11.5、11.6驱动中提供RAID模式的TRIM指令支持,还有一些厂商用自己的方式解决了RAID模式下的TRIM指令问题。另外,XP系统下是不支持TRIM指令的,不过三星的工具软件也可以让其SSD实现类似TRIM的功能。
用户可以自行检查TRIM指令开启与否,打开CMD窗口定位到“fsutil behavior set DisableDeleteNotify 0”表示启用TRIM,如果是1就表示禁用状态或者不支持。
第二招:垃圾回收
垃圾回收(garbage collection,简称GC)是SSD恢复性能的另一大秘籍,这个主要跟厂商所用的主控有关,其意义就跟字面意思一样,通过清理无用的垃圾数据保持SSD性能如新。
它的存在还是跟SSD的特性有关,空盘下SSD写入数据所需时间以ns计,但是擦除数据的过程则以ms计,写入的数据越多,需要擦除的时间也越长,SSD的写入性能就会严重下降,GC机制相当于”腾笼换鸟”,把原本杂乱无章存放的数据整理一遍,然后写入到新的空白区,之前的区块就会进行清除操作以恢复正常性能。
美光的PDF资料中介绍了GC的处理过程
由于各种写入、删除操作会在SSD留下杂乱的数据,其中有些是还有用的,有些就是无效的,GC功能启动之后就把有用的数据拷贝到另外的区块,这一步相当于“腾笼”,原来存储数据的区域就会被清楚,恢复空盘水平以准备写入新的数据,这就是“换鸟”了。
上面只是理论操作过程,具体怎么做还有个选择问题,如果在SSD读写数据的同时进行GC操作,这种实时GC(Real Time GC)对主控的性能是个考验,一方面要往空白区写入数据,同时还要照顾无效数据的“拆迁”工作,这么频繁折腾SSD的话估计SSD那有限的读写寿命也支撑不住,实时GC不可取。
目前的GC大都是在SSD闲置时才开始工作,也就是所谓的“Idle Time GC(闲置GC)”了。厂商会在主控中设定一个条件,比如空白容量达到某种比例才开始GC处理,这样就预先释放了空白空间,如果达到设定条件的上限,那么GC也会停止,这样处理比实时GC更利于延长SSD寿命。
闲置GC也不是完美无缺的,它会带来额外的写入放大,因为在GC处理开始之前,某些整理过的页面(page)可能正在变脏,不过闲置GC增加的写入放大率非常小,OCZ称其SSD的闲置GC只有额外的1%放大率,影响非常小,整体上依然是利大于弊。
TRIM和GC机制可以说是相辅相成的,TRIM通知给SSD的可删除数据越多,GC操作需要转移的数据就越少,写入量也会减少,对SSD来说也是延长使用寿命的一种方式。