文章开始前先引用下Tom's Hardware 针对OCZ Vertex 4系列掉速现象的分析和解释,因为这也是我考虑去买块OCZ Vertex 4 128GB研究下算法的因素之一,好奇心驱使,另外是想验证下OCZ官方的说法到底靠谱不。
这段6月27日OCZ官方给Tom's的解释我胡乱翻一下:
针对Vertex 4 搭配最新固件的表现,OCZ 提供给了我们一份官方声明予以澄清。我们(指Tom's)尚未确认Vertex 4 在“性能模式”和“储存模式”间来回切换需要多少时间:
在开发1.4 版固件之前的相当长一段时间里,OCZ收集着来自它们选出的测试案例用户数据使用习惯和资料存储的模式,它们希望结合这次固件更新更直接的解决一些问题。它们发现大部分的用户SSD往往留有大部分未使用的空间,这些用户利用SSD作为系统盘、数据盘,或只是存放对性能有要要求的应用程序。在1.4 版的固件中,OCZ 利用了这些调查结果,针对垃圾回收功能做了优化,以便为这种类型的使用者提供可以大幅提升SSD性能的固件。这意味着那些没用到一半容量的SSD,可以享受到进一步性能的提高,并且在SSD使用超过一半的容量时,垃圾回收功能算法会根据数据的使用频繁度重新最佳化。在这段转换期间可能会有些许延迟,但这属于单一事件,而且整体性能回快速回升,这样做可以进一步提升我们客户群体的SSD体验。
原文地址:http://www.tomshardware.com/revi ... rformance,3235.html
-------------------------
看完上面这段官方的回复,下面用我对这几天测试下来的结果,解析OCZ VERTEX 4 系列固态硬盘1.4RC固件之后的提速原理部分。
我们知道闪存有SLC和MLC之分,当前在OCZ VERTEX 4系列固态硬盘上采用的闪存颗粒都属于MLC闪存。MLC闪存比SLC闪存慢,至于为什么慢?我这里解释下,搞懂了之后会让后面OCZ Vertex4系列固件提速原理更好的理解。
上图是SLC闪存和MLC闪存, SLC闪存可以表示状态“1”或者“0"就是1bit,而MLC闪存可以表示状态“11”,"10","00","01"就是2bit。 其中前面一个数字我们叫高位(Upper Page,MSB),后面个可以叫低位(Lower Page, LSB)。
MLC是如何读取的呢? 需要分2步走,先判断LSB,再判断MSB,总共需要读取2次或者3次电压判定才能得知正确的状态,所以造成读取延迟比SLC高大约2.5倍。不过由于NAND的读取延迟本来就不高,而且MLC相比SLC能多表示1bit,因此对SSD的全局性能起到的影响并不多,可以忽略。
相比读取,写入要复杂的多。
最简单的为编程状态“10",只需要加压超过0.3V就可以。(只编程LSB)
而高位编程分2种,一个是状态”00“,也是最耗费时间的一种,需要在前面编程为”10“的基础上再次加压超过1.5V。(写入更费时)。
另外一个是状态”01“,需要在状态”11“上直接加压超过2.8V来达到。
很明显编程MSB相比LSB需要更多的耗电和时间,这也是为何MLC功耗高,耐久度低,写入性能也比SLC低的关键。
每次编程改变1个状态后,需要立即验证之前的编程操作无误,当编程全部完成没有问题时,则发送编程结束指令,这样在接收到Block擦除指令前,不能再对当前Page进行编程了。
以上电压数值仅做参考,实际数值请参照颗粒的数据手册。
-------------------------
MLC闪存的”SLC操作模式“ - 如果把MLC闪存当成SLC闪存那样的操作模式进行使用,则可以让MLC达到SLC的写入性能。
理解了上一段落的朋友可以发现,只要我们在SSD的FTL里做一下手脚,写入时候只操作MLC颗粒的LSB部分,则可以拥有接近于”SLC的性能”。
那么很多朋友又会担心,如果只操作MLC颗粒里的LSB部分(MSB占的容量不用) ,那么SSD的实际可用容量又如何保证?难道只能使用一半容量么?
确实,如果完全当成SLC那样用,我测试的这块128GB OCZ Vertex 4 只够有64GB的容量,但是它本质上还是MLC颗粒,所以我们可以用如下的操作来解决问题。
那个操作叫做“Folding” 堆叠(其实是一种垃圾回收操作)
有了这张图的方法,那么也就大可不必担心实际可用容量的问题了。
但是,这个操作有个极为头痛的问题:Folding操作极为费时。如果在用户写入的时候做此操作,则会严重影响到实际写入性能表现。如果在闲置的时候做,可能会增加本来不需要的写入量,明显增加了写放大。说的通俗易懂点,就是这块SSD干活先把简单轻松的干完了,把又脏又累的活留到最后,而测试软件测试的范围大多是前面50%的容量,所以我喜欢叫它“跑分神器”。
---------------------------
接下来我把上面的理论部分带入之前我写的日记(实践)部分,再进行下最后的测试解析:
日记地址:http://bbs.pceva.com.cn/thread-51386-1-1.html
测试解析:上图是1.3固件的Zone Measurement图片。(就是全盘顺序写入直到填满,写入的文件大小为64KB)
可以看出1.3固件的OCZ Vertex 4 没有使用MLC颗粒跑SLC模式的算法,性能表现平平,根本不像新一代的旗舰产品,如何推广呢?
测试解析:上2张图是1.5固件的Zone Measurement图片。(第一张是刚做完Secure Erase后的写入,第二张是第一次Zone Measurement跑完后休息5分钟再跑一次)
从第一张图上看,前面50%的容量写入性能接近400MB/s(相比1.3固件的200MB/s是翻倍了),但是后面50%容量写入性能跌到了100MB/s以下,这是因为如上面说的原理那样,64GB的高速SLC模式容量写完了,要继续写入需要做Folding操作,而Folding操作花费的时间非常多,造成了边做Folding边写入,因此速度还不如1.3固件的200MB/s了。接下来看第二张图,性能和1.3固件的性能很像吧,写入很平稳,那是因为之前一次我们写入了和全盘容量相等的数据,这些数据让这块SSD上的所有空间都是MLC(只写LSB的话装不下数据),因此继续全盘填空的话,没有剩余容量去做SLC模式(只用LSB)了,写入速度就是MLC的真实速度,也就是这块SSD原本的面目。
固件1.5空盘ASSSD
接近满盘填充的ASSSD跑分
测试解析:ASSSD测试的时候会在SSD上生成一个2GB的逻辑区域做测试范围,测试中会写入大约5~6GB的数据,由于这个数据量太小,足够被OCZ用SLC模式给覆盖掉,因此空盘的时候速度可以跑的非常非常高,但是一旦容量使用超过50%后,性能直线下降,到了容量快用满的时候,性能直接惨不忍睹了。(如上面的原理那样,容量大了后,不能以SLC模式继续写入了,但是还要把之前SLC模式写入的数据做folding操作,导致了边写边操作的尴尬境地,速度可想而知。)
综上所述,OCZ到底在算法中做了哪些手脚已经很清楚了,不过最后我想再验证一件事。
那就是1.5固件的更新内容:
1.提升持续写入性能。
2.优化闲置垃圾回收算法让更大的区域得到高性能模式。
3.提升阵列卡HBA卡的兼容性。
4.提高ATA安全指令的兼容性。
这个第二条绝对是耐久度大杀器啊,OCZ果然是为了性能不择手段的厂商。
如上图显示,新版1.5固件闲置垃圾回收果然优化的了得,只要休息一会会儿,速度就回来了,可是如之前原理部分我说过,这套独特的算法中,最影响耐久度的部分恰恰就是闲置垃圾回收部分,会严重增加写放大,但是如果你不做,之后的性能就会很坑爹,如果你提前做的话,SSD耐久度则会大损,最终OCZ选择了不顾耐久度。以后请不要抱怨你的SSD内部Intel颗粒耐久度不给力,直接抱怨OCZ Vertex4 消耗耐久度厉害就是了。
---------------------------
测试总结: 本次测试一共耗时10天,主要是因为最近工作繁忙,只有晚上到家才有时间才有空折腾。日记部分的实践加上本帖上面原理部分的结合,让我们看清了OCZ Vertex 4系列SSD到底在搞什么鬼。我不想去评价OCZ采用这一做法的优缺点,毕竟选择权在您手上,我只是想让更多的用户知道真相,其实并不是如OCZ官方的说法那样只是简单的“存储模式”和“性能模式”。最后感叹下,这一招在大部分跑分软件上的表现,实在是太吸引眼睛了,炒作起来绝对是事半功倍。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
评分
-
查看全部评分
|