基础知识回顾:
LBA(逻辑区块地址)及PBA(物理区块地址)
FTL(Flash translation layer)闪存转换层
为什么AS等SSD测试软件要先测写入后测读取?
因为SSD比HDD多了一个FTL转换层。FTL虚拟转换层是在SSD内部运作的,对于主机端是透明的,所以不存在软件读取到FTL的问题,操作系统都只能对LBA地址进行操作,无法和FTL直接沟通。操作系统通过文件分配表可以得知哪些LBA有文件存储哪些LBA位置没有文件存储,但LBA(Logical Block Address)正如其名,它是一个逻辑地址,即便文件分配表里某个LBA范围没有文件,他并不能确定硬盘上对应位置真的就没有存储数据——只有在Trim正常运作的SSD自己才知道。软件发出读取指令后,必然要进入到SSD当中,SSD查FTL,如果发现指令LBA位置对应的闪存实际是空白的没有数据,就不会再浪费时间进行实际的闪存读取,而是直接返回0,省去了闪存进行实际读取的延迟。所以直接对LBA进行读取的话,就会像HDTune那样测出来读取速度是有高有低的,这并不是SSD有毛病的表现。要想测试真实的数据读取速度,还是需要先写入、建立一个测试文件,然后在有实际数据存储的范围内读取。
HDTune是怎么测试硬盘的?
HDTune的基准测试(也就是常用的读取测试显示蓝色曲线的部分)默认使用64KB区块对全盘LBA范围抽取采样进行持续读取测试,这些设置可以更改,但是在最终测试成绩页面上不会显示这一成绩使用了何种设定,所以你看到的HDTune测试速度与自己测出的出入巨大时也需要考虑设置原因。
上图为HDTune设置选项,默认是局部测试,也就是从硬盘全部寻址范围内抽取一定比例的点进行测试,越是偏向“快速”选取的采样点越少,而只有选择“全部测试”,才会测试硬盘全部可寻址范围内的速度,当然一般来说硬盘都不是填满数据的,所以盘内数据存放多少也会影响HDTune测出来的速度曲线。由于磨损均衡等影响,数据在SSD内部实际存储位置是随机化的,而HDTune测试区块大小每次是一个固定值,采样测试选取的LBA位置上不定是什么样的数据存储状态,可能是全空的(速度最快),可能是全写满数据的(速度最慢),甚至还可能是部分有数据的(64K区块测试,如果采样区间选的位置正好有4K数据和60K空白呢):用HDTune基准测试测量SSD读取速度是不靠谱的手段。
AS SSD Benchmark怎么测试硬盘的以及读取成绩如何被污染的?
既然SSD读取到空白位置时的成绩有水分,那只要在测试读取的时候先生成一个测试文件,然后只读取文件内的有数据部分不就好了嘛?AS SSD Benchmark既要测读取又要测写入,所以他就借着生成测试文件的机会把测试文件的体积除以生成测试文件所用的时间,然后就得出了持续写入速度。接下来马上读取刚生成的测试文件,得出持续读取的速度。那么问题就来了,前边有网友提出有些SSD会借着写入和读取测试连续进行的特点利用SLC Cache进行读取成绩作弊,这个情况我在2014年就发现了,原本只是好奇为何三星840Evo的4K单线程读取成绩那么妖娆,结果最终发现不但4K单线程读取成绩掺水,持续读取和4K多线程读取成绩都有水分,漂亮的跑分之下是针对测试软件的定向优化。
除了AS SSD Benchmark之外,其他很多理论带宽测试软件都是先写入然后马上读取的,都可以被SSD轻松忽悠掉。现在850Evo的AS SSD Benchmark跑分比850Pro的分数高,至于原因大家自己想吧。
如何绕开SLC Cache测得真实读取性能?
目前来看,使用TLC闪存的SSD基本都使用了固定SLC Cache容量的模式,没有用动态SLC范围的(其中一个原因是因为TLC颗粒太慢,根本撑不起中间动态转换),而这些固定SLC Cache的盘,只要遇有空闲就肯定会将SLC Cache区域全部释放清空,也只有这样才能保障用户需要写入时有充足的SLC空间响应突发写入。要想避开SLC Cache对于读取可能产生的干扰,那就在建立测试文件之后,稍等个几分钟,SLC Cache都释放光了,这时候你对测试文件进行读取,得到的就是真实读取性能了。使用IOMeter可以实现这个目的,我在以前的帖子里其实已经说过具体怎么做,简单来说就是IOMeter设置好测试文件大小后先添加一个Idle任务开始跑,等测试文件建立好了就可以停下来,然后等几分钟再把测试项目改成你想测试的类型就可以了。
除了AS,其他测试软件会被干扰吗?
这个真的不好说,越是复杂的测试方法越难以作弊,不过一旦作弊成功也很难被发现。以PC Mark为例,这款软件的公信力要比AS软件高出很多,记录-回放式的测试方法能够反映SSD的实际使用性能表现,而不仅仅是纯读或纯写的简单几个场景下的带宽。PC Mark 8在测试前同样会有预先生成测试文件的动作,使用Process Monitor可以观察到PC Mark 8存储测试开始后的初始化阶段是在用随机大小的区块进行持续写入:以下我只开了ReadFile和WriteFile两个Filter
在实际回放测试项目开始前会有几秒钟监测不到硬盘读写操作,但这个时间过程并不长,绝对不够30秒,对于某些SSD来说可能还不够它把SLC Cache全部释放完毕,SSD这时会选择暂停释放保留缓存还是继续强制释放完就要看设计策略了。短暂停歇之后PC Mark 8就开始了回放式读写测试。
测试对应的磁盘活动:这些磁盘活动都是Futuremark公司预先在固定设备上进行涉及磁盘IO的软件操作时记录下的硬盘访问日志,在其他盘上测试时依样葫芦的回放这些磁盘读写操作,来模拟考察实际应用程序使用硬盘时的快慢表现。由于回放测试的脚本是固定的,不同的SSD之间就可以通过完成时间来对比性能表现高下了。
不过我同时发现一个问题,PC Mark 8的存储测试文件体积仅有11.4GB,而且在切换测试项目的时候,这个测试文件似乎并不会重建,而是反复在其上面进行读写测试。
11.4G说大不大,说小不小,虽然各种缓存手段(包括SLC Cache和Rapid Mode/PlexTurbo之类的内存缓存)都不大可能将11.4G的测试文件整个吃下,但总有部分读取操作被缓存命中的机会,所以开了1~4GB的内存缓存也能提升PC Mark 8成绩就不足为怪了。虽然从原理上来说PC Mark 8尽可能去衡量硬盘自身性能,但显然并非没有手段可以干扰到他的成绩。当前使用SLC Cache的SSD当中有没有哪个型号在PC Mark 8的存储测试成绩当中取得了不当获利,我就不得而知了。
到底该怎么应对作弊者:
看看3DMark对待三星等手机在测试软件中作弊是如何处理的:直接封杀不承认作弊机型的跑分成绩。也就是说,对付作弊者,直接拒绝他进考场与其他人一起考试。与其研究怎么破解作弊,不如做到心中有数,无视他的作弊“成就”。现在Futuremark只显示前200名成绩,看不到列表末尾因作弊被除名的机型了,据说三星的作弊机型后来也已经在舆论压力下去除了作弊代码,重新回到排行榜了。至于SSD的成绩作弊,现在似乎还没有太多人关心...大把人还停留在跑AS SSD Benchmark的自我娱乐中呢。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
评分
-
查看全部评分
|