PCEVA,PC绝对领域,探寻真正的电脑知识
打印 上一主题 下一主题
开启左侧

SLC Cache与应对读取测试方法

[复制链接]
跳转到指定楼层
1#
ggxuelei 发表于 2016-3-30 09:43 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
点击数:16165|回复数:45
基础知识回顾:
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

评分

参与人数 2代金券 +100 绝对值 +1 收起 理由
SuperbirdRIP + 1 很给力!
石头 + 100 2精

查看全部评分

44#
Rayi 发表于 2016-4-25 20:15 | 只看该作者
谢谢分享 我也想看看真实速度多少
43#
Micromiku 发表于 2016-4-25 16:46 | 只看该作者
还是得再深入学习下~
42#
a376230095 发表于 2016-4-24 21:12 | 只看该作者
为了30积分,小白拼了
41#
kessty 发表于 2016-4-21 17:14 | 只看该作者
太专业了  一直都无法接受TLC  SSD,特别是感觉被欺骗的SLC Cache
40#
coolysj 发表于 2016-4-11 13:59 | 只看该作者
好贴,但看不到,支持下作者,可以做个朋友么,想学习下关于SSD的知识,我玩DIY也有10年,但对SSD真是小白白白 。QQ83188221
39#
ggxuelei  楼主| 发表于 2016-4-8 18:34 | 只看该作者
openzs 发表于 2016-4-7 20:56
多谢细心科普,你说的预读机制我记得有HDD+SSD这类混合盘上面小容量SSD会有此预读(或者叫学习 ...

TLC SSD的最大缺憾在写入速度上,现在能拿出不少TLC空间模拟SLC已是不容易了,哪里可能再分一部分给预读用?而且预读需要热数据算法不间断调整缓存内的内容,这样带来的写放大得不偿失。退一步讲,如果真要多做这么一个预读缓存,那么所有读取指令都需要先对照检查一下数据是否存在于“SLC读取缓存”中,如果缓存未命中(显然未命中是大概率事件)还会因为这个对照检查的过程增大一些延迟,综合下来到底是加速了还是减速了?
38#
openzs 发表于 2016-4-7 20:56 | 只看该作者
ggxuelei 发表于 2016-4-4 19:59
写入缓存只需将写入内容先承接下来,然后待空闲时释放即可
而读取缓存必须有预取特性,只有提前将可能用到 ...

多谢细心科普,你说的预读机制我记得有HDD+SSD这类混合盘上面小容量SSD会有此预读(或者叫学习?)机制,应该是以前看到的产品,但是没有测试过这类产品。
如果属实的话,那么这类算法应该可以照搬过来用在SSD上吧?会有难度?能够实现了预读,那么我觉得就可摆脱“作弊”说法了!~


37#
fenger313 发表于 2016-4-7 15:53 | 只看该作者
为什么好好的分享经验要设置积分吗?
36#
litaohqqt 发表于 2016-4-7 10:55 | 只看该作者
跑分就是安慰剂,很有效果
35#
hecrix 发表于 2016-4-5 23:09 | 只看该作者
积分30,不知道还差多少哦
34#
canalvorfeed 发表于 2016-4-5 21:28 | 只看该作者
30积分?内容太高深?怕新人看不懂?我是看不到,猜的。
33#
chenyz_aleck 发表于 2016-4-5 21:05 | 只看该作者
非常好的科普贴,SLC cache轻度使用挺好,便宜没好货~
无外置缓存的MLC始终还是要贵上那么一点点~
32#
moonrise 发表于 2016-4-5 15:51 | 只看该作者
原来有好多积分的,论坛崩溃以后就不见了
31#
a120004035 发表于 2016-4-5 12:04 | 只看该作者
萌新前来围观。。。。
30#
ggxuelei  楼主| 发表于 2016-4-4 19:59 | 只看该作者
写入缓存只需将写入内容先承接下来,然后待空闲时释放即可
而读取缓存必须有预取特性,只有提前将可能用到的数据放到缓存内,在读取的时候才可能命中缓存。即便不主动预读,作为读取缓存,至少得保证一个底线,那就是读取缓存不能在平常使用中经常保持内容为空的状态,如果缓存是空的,哪里来的读取加速效果?读取缓存容量有限,为了保证命中率,还应有一个热数据算法,将最有可能用到的数据保存在读取缓存内,将冷数据释放出去,而你看看现在有哪一款SSD的SLC Cache是具备这些读取缓存所必备的条件的?@openzs
29#
ggxuelei  楼主| 发表于 2016-4-4 19:53 | 只看该作者
openzs 发表于 2016-4-4 13:16
这个SLC cache为何叫作弊?
CPU的L1、L2、L3均与此类似,并未见到有人说此乃作弊行为
...

问的好,不过这个问题何不直接问我呢?
CPU的L1、L2、L3是预取,而SSD的SLC Cache是缓冲写入并在空闲时立即释放,SSD的SLC Cache并没有预取的特性,包括用了SLC Cache给读取作弊的SSD,它的SLC Cache内缓存的是刚刚写入的数据,只要一有空闲,SLC Cache就会立刻释放,Cache中就什么也不存在了,没有预读,又何来实际应用的加速效果?如果测试软件不是写完后立刻就测读取,又如何能体现出作弊的效果?实际使用中尤其是家用条件下,空闲时间远比IO操作时间多,SLC Cache原本就是用来加速写入的,只要有空闲就会释放的一干二净,不能再被用来影响读取速度,哪里又有机会让作弊算法体现出“优化”的效果来?

如果你还不明白CPU的Cache原理,我直接复制一段计算机组成与系统结构-Cache基本原理的课程内容过来给你看

  1. 2. Cache的基本原理
  2. CPU与Cache之间的数据交换是以字为单位的,而Cache与主存之间的数据交换则是以块为单位的。一个块由若干个定长字组成。
  3. 当CPU读取主存中的一个字时,该字的主存地址被发给Cache和主存,此时,Cache控制逻辑依据地址判断该字当前是否存在于Cache中:若在,该字立即被从Cache传送给CPU;若不在,则用主存读周期把该字从主存读出送到CPU,同时把含有这个字的整个数据块从主存读出送到Cache中,并采用一定的替换策略将Cache中的某一块替换掉,替换算法由Cache管理逻辑电路来实现。
复制代码


28#
DesperadoJ 发表于 2016-4-4 18:28 | 只看该作者
本帖隐藏的内容需要积分高于 30 才可浏览,您当前积分为 18
真尴尬
27#
openzs 发表于 2016-4-4 13:16 | 只看该作者
Calvi 发表于 2016-3-30 16:20
主旨并不是说SLC Cache不好,只是在解释各个软件跑分的原理以及某品牌跑分作弊的行为 ...

这个SLC cache为何叫作弊?
CPU的L1、L2、L3均与此类似,并未见到有人说此乃作弊行为
26#
mengld 发表于 2016-4-4 08:45 | 只看该作者
as ssd新版本也可以建立10g的测试文件,这样对于120g级别tlc颗粒ssd,应该可以超过cache区了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部