本帖最后由 overthink 于 2015-9-24 10:10 编辑
在SSD区看到有同学找能检测Trim功能的小软件
还有问OCZ SSD Trim是否已经开启
这周,来简单探讨一下HyperX Predator PCIe SSD的Trim策略
在探讨Trim之前,先看一下什么是LBA:
什么是垃圾回收(GC):
我们在操作系统中删除文件,并不是真正的删除文件,只是在系统里把此文件占用的LBA标记为无效。对HDD来说,这样没什么问题,写入新文件可以在这些无效的LBA上直接写入。但是对于闪存来说,需要先清空这些LBA,再进行写入操作。这样就会影响到SSD的性能。因为写入前需要先进行清空操作。
为了降低清空操作对写入性能的影响, SSD上添加了Trim ATA指令。
我们在开启Trim的SSD上删除及写入文件的操作可能会是这样的:
1.删除文件 2.系统发送Trim指令到SSD 3.在空闲时间,SSD执行Trim指令 4.SSD把标记的LBA做垃圾回收(GC) 5.在做完垃圾回收清空的LBA上进行写入文件操作
有了Trim,在Trim执行后,我们在写入操作时就可以直接写入了,而不需要先做垃圾回收(GC),因为垃圾回收已经在空闲时间通过Trim指令进行了。
如何检测是否开启了Trim
使用WIN7系统,开启AHCI,使用smachi驱动或者RST驱动,这样一般是开启了的。
可以使用DriveControllerInfo这个小软件查看一下
SSD上有个小刷子,最上面有(ATA TRIM)Enabled
那么如何确认TRIM正常工作?
可以使用Trimchecker来检测一下。
把Trimchecker放到要检测的SSD上,在命令行模式下运行
第一次运行会在某空闲LBA写入随机数据,并删除,同时会生成一个trimcheck-cont.json文件,里面记录了此次写入的数据。
程序最后那一段英文的大意是:测试文件创建并删除了,数据已经保存。确认是否执行了TRIM指令需要再次运行程序。通常需要等一会(20秒),有些时候需要重启。
再运行一次,Trimchecker会读取此LBA的数据,来和trimcheck-cont.json的相比较,
好吧,貌似Trim还没有被执行。在Offset:40185053184位置处,两次的数据没有变化。
重启一下,再试,数据还是没有变化。
每间隔10分钟运行一次程序
总共耗时一小时运行7次,数据还是没有变化
是不支持TRIM还是TRIM没有执行?
关机,第二天再说
早上起床,开机,再运行
发现Offset位置40185053184数据已经被GC掉了,变成了00,说明TRIM已经被执行。
从测试中发现HyperX Predator PCIe SSD固件的TRIM并不积极,执行TRIM最少等一小时以上。
正好手上有浦科特的一块SSD,M3S,已经让我刷成M3P了,支持浦科特的TrueSpeed,浦科特不掉速度的本质是一有Trim指令就立马执行,几乎不等待。也顺手测试一下做一下对比。
用SSDOK发一下测试平台
DriveControllerInfo显示TRIM开启
第一次运行Trimcheck
完成后马上再运行一次
结果,Trim指令已经被执行。
对比这两款SSD,虽说主控都是Marvell的,一个是Marvell 88SS9293,一个是Marvell 88SS9174,但是固件的Trim的策略是完全不同的。
HyperX Predator PCIe SSD的Trim非常不积极。PlextorM3P的Trim非常积极,一有Trim就马上执行。
这两种Trim策略各有优缺点: Trim不积极,对NAND的磨损比较小,长期使用速度会掉的比较明显。 Trim积极,对NAND的磨损比较大,长期使用掉速不明显。
前一段时间爆出的三星8系列的SSD TrimBUG,简单来说就是Trim发送了,标记无效的LBA后,没执行,之后无效的LBA又写入有效数据变为不需要GC的LBA,但是固件脑残没有记住,在想起执行Trim时把这些含有有效数据的LBA给GC了,数据丢失,文件损坏。
感兴趣的可以移步浴大的详细分析帖:
最后放出小软件下载地址:
SSDOK
Trimcheck
DriveControllerInfo
我知道大家基本都用上了SSD,那么你所使用的SSD的Trim是否正常开启,Trim策略如何?欢迎使用上面的软件检测并帖图探讨。
|