第三章 磁盘大挪移——磁盘原理与技术 详解
第一十零节 固态存储介质和固态硬盘
利用这种方式,SSD内部实现了垃圾回收清理以及新陈代谢,使得新擦除的Block源源不断地被准备好从而供应写操作。
2. 药方2:定期清除体内垃圾,轻装上阵
通过上面的论述我们知道,影响一块SSD寿命和写入性能的最终决定因素就是Free Space,而且是存储介质自身所看到的Free Space而不是文件系统级别的Free Space。但是SSD自身所认识的Free Space永远只会少于文件系统的Free Space,并且只会越来越趋于0。所以,要保持SSD认识到自身更多的Free Space,就必须让文件系统来通知SSD,告诉它哪些逻辑地址现在并未被任何文件或者元数据所占用,可以被擦除。这种思想已经被实现了。所有SSD厂商均会提供一个工具,称为“Wiper”,在操作系统中运行这个工具时,此工具扫描文件系统内不用的逻辑地址,并将这些地址通知给SSD,SSD便可以将对应的Block做擦除并回收到Free Space空间内。如果用户曾经向SSD中写满了文件随后又删除了这些文件,那么请务必运行Wiper来让SSD回收这些垃圾空间,否则就会遭遇到大写惩罚。
Wiper并不是实时通知SSD的,这个工具只是一次性清理垃圾,清理完后可以再次手动清理。所以,这个工具需要手动或者设置成计划任务等每隔一段时间执行一次。
这种垃圾回收与上文中的那种内部垃圾回收不在一个层面上,上文中所讲的是SSD内部自身的重定向管理所产生的垃圾,而本节中所述的则是文件系统层面可感知的垃圾,被映射到SSD内部,也就变成了垃圾。
3. 药方3:扶正固本,调节新陈代谢使其持续清除体内垃圾
定期执行垃圾清理确实可以解燃眉之急,但是有没有一种方法,可以让文件系统在删除某个文件之后实时地通知SSD回收对应的空间呢?这种方法是有的。TRIM便是这种方法的一个实现。TRIM是ATA指令标准中的一个功能指令,在Linux Kernal 2.6.28中已经囊括,但是并不完善。
Windows 7以及Windows Server 2008R2中已经提供了完善的TRIM支持。一些较早出现的SSD也可以通过升级Firmware来获得对TRIM的支持。
TRIM可以使SSD起死回生,经过实际测试,开启了TRIM支持的SSD,在操作系统TRIM的支持下,可以成功地将性能提高到相对于SSD初始化使用时候的95%以上,写惩罚倍数维持在1.1倍左右。
台湾闪存厂商PhotoFast银箭已经发布了带有自行回收垃圾空间的SSD,不依赖于Trim指令,在此可以推断其SSD内部一定被植入了可识别NTFS格式数据的代码,所以可以自行识别NTFS文件系统中不被文件占用的空间。
4. 药方4:精神修炼法,提升内功
Delay Write是一种存储系统常用的写IO优化措施。比如有先后两个针对同一个地址的IO——write1、write2,先后被控制器收到,而在Write1尚未被写入永久存储介质之前,恰好Write2进入,此时控制器就可以直接在内存中将Write2覆盖Write1,在写入硬盘的时候只需要写入一次即可。这种机制为“写命中”的一种情况(其他情况见本书后面章节)。它减少了不必要的写盘过程,对于SSD来讲,这是很划算的。
然而,如果一旦遇到这种IO顺序比如Write1、Read2、Write3,如此时控制器先将Write3覆盖到Write1,然后再处理Read2的话,那么Read2原本是应该读出Write1的内容的,经过DelayWrite覆盖之后,却读出了Write3的内容,这就造成了数据不一致。