Thursday, September 21, 2017

SSD与Trim、AHCI、Windows 7、Windows 2008 R2

(一)SSD的构造与缓慢之谜

SSD分为闪存区块(Block)、页面(Page)和单元(Cell),在写入数据的时候必须首先擦除才能写入新的数据,所以新买的SSD表现很好,但是使用时间长了就能感觉到性能有所下滑。为什么会如此?

在我们机械硬盘年代,当一个文件被删除后,操作系统其实并没有删除数据,系统把该区块标记为没有数据,在下一次数据要再次写入的时候,系统才会将磁道上的原有标记数据清空再进行写入,也就是我们所谓的“修改”,这也为我们误删文件后能能马上恢复数据打下了基础。(其实数据依然存在)。其数据也没有真正意义上的删除。

需要注意的是,当硬盘本身是不知道当前数据的状态,它只是被控制着怎么去执行,而上面的步凑在机械硬盘上工作起来是非常完美的,因为是磁头直接清空写入。由于SSD的构造性问题,写入原有被标记的区块需要清空就变得复杂,在区块没有被写入过数据的SSD,其速度是很惊人的,但SSD的所有空闲块都被使用后,再有写入操作,它在覆盖写入之前被操作系统标记为删除的区域时速度就慢了下来。如果持续大量的写入数据就会出现磁盘已满的问题。其原因是:当我们执行删除命令的时候SSD就会马上去清空,SSD要覆盖写入一个4KB页的数据时,要把整个512KB块复制进缓存里,然后,在缓存里删除这个4KB页,替换成新的数据,接下来删除整个闪存内的这个512区块,并从缓存里把新数据写进去。如果有很多小文件随机写入操作或只是简单的写入一个大文件到SSD。会让我们的SSD缓存快速过载(超负荷),然后你的写入速度就会垂直下降。而我们网吧的写入数据,多为随机写入。早起缓存较少的SSD甚至会出现延迟接近1秒,而为了解决这个问题,很多SSD厂商在新的主控中加入了越来越大的外置缓存,虽然这在一定限度的解决了随机写入延迟造成的问题,但是却不能完全解决覆盖写入的速度下降问题。换句话说,要合理安排清空数据的时间,而我们曾经的IDE驱动是办不到的。

当然一些SSD厂商在制造SSD的时候专门制作1个空间来存放高密度的爆发性写入,有的企业级SSD甚至会保留最大50%的空间,以保持长期较高的写入速度,但成本过高。

(二)Trim命令

Trim命令的由来:
在漫长的SSD普及中,微软也观察到了这种性能下降的问题,为此微软与各大SSD厂商联合开发了一种叫做Trim技术,Trim指令也叫做disable delete nptofy(禁用删除通知),属于ata8-acs2规范的指令。早在2008年的winhec 2008大会上就已经正式发布,而支持这项指令的系统,只有windows 7和windows 2008 R2才被加入这个指令。

Trim的作用:
在windows 7中,对支持Trim指令的SSD启动trim后,清除过程变得简单许多,这时在对SSD进行数据删除操作时,NTFS文件系统是不会向SSD发送删除指令的,而由SSD发出新的Trim操作指令,告诉它相关页面可以安全擦除。当SSD得到这一指令在磁盘压力过大的时候不急于执行擦除操作而增加磁盘压力,而是等有再次写入操作的时候再执行,这期间的缓冲时间可以在写到这个区块的时候保证相关区块已经可以重新使用了,就不用花时间马上去擦出原有的数据。其速度比直接读写硬盘去标记删除区块要快得多,即提升了读写效率又大大减轻了SSD的损耗。

(三)如何开启Trim指令

开启Trim指令的3个要素,系统-固件-驱动。
系统:Windows 7、Windows 2008 R2,linux核心2.6.28以上
固件:SSD的厂商在固件中加入Trim算法指令
驱动:MS驱动,intel的AHCI驱动目前支持。其它控制器要看之后的更新。
以上3个缺一不可。

A.检查操作系统的trim,windows 7下默认状态是开启Trim指令的,如果向查询目前Trim指令的状态,在操作员权限下进入命令提示符,输入:fsutil behavior QUERY DisableDeleteNotify,之后会得到相关查询状态的反馈。其中,提示为“DisableDeleteNotify = 0”为指令已开启;提示“DisableDeleteNotify = 1”为指令未开启。
B.在SSD硬盘方面,目前新出的硬盘均支持Trim指令,如果需要查询,可用HD Tune Pro查询。
C.在驱动方面RAID阵列的驱动。目前除了intel的最新RAID驱动能支持意外,其余均不支持。目前已知道LSI驱动在未来一段时间开始支持TRIM指令。在非RAID下,单盘必须使用AHCI。

Intel固态硬盘的固件为SF1200和SF1500主控的SSD,必须使用intel的AHCI驱动。而AHCI的功能有2点优点。
1.开启NQC,它能激活SSD的多通道,而传统IDE驱动是不能激活的,
2.Intel的AHCI驱动,南桥驱动才能最佳支持intel SSD 主控的Trim指令。

Leave a Reply

Your email address will not be published. Required fields are marked *