分享

再谈缓外,steady稳态、无知与谎言 REV1.0.C 来自 zu

 Rivalry 2023-11-05 发布于广东

我最近实在是受不了各种关于缓外的论调,打算做一个最后的文章去结束这一争论,尽管我在2年前的文章早已用六块硬盘的横评证明了这点,但依然有各种各样愚蠢而无知的论调去再三重复老套的话语。而这次,我打算终结这个话题
  
 

1 对于“缓外”的四个疑问与反驳

根据业界长久的研究,SSD性能大致可以看作三个区间:FOB出厂态、Transition过渡态、steady稳态,其中存在不小的误解:一方面各种营销号最喜欢在FOB出厂态下跑bandwidth测试,另一方面一群半桶水基于各种奇葩的原因:可能是单纯的蠢、也可能是利益相关,最喜欢在混合态下跑seq写入,然后把它称之为固态硬盘的真实速度。

针对这一话术的第一个疑问:那些人指的缓外到底是不是SSD在重载压力情况下的实际表现?

第二个疑问:你说的缓外,到底是指什么负载?

第三个疑问:他们所谓的“缓外速度”,或者准确的说:client是否普遍在transition和steady状态下存在大量的128k写入需求?

第四个疑问:以他们测出的缓外数据为自变量,是否与client场景下的实际性能存在明显的正相关?

1.1 STEADY

Solid State Storage (SSS) Performance Test Specification (PTS)

前面我说了,业界普遍认为SSD存在三个大致的性能区间:FOB出厂态、transition过渡态、steady稳态,正如同这张经典的图片所展示的一样,性能出现了巨大的下降。那么造成这一差异的原因是什么是什么?

很多人理所当然的认为是slc cache,不可否认,对于client SSD在吃满cache后的确会有一大段的性能下降,甚至失败点的例如2263XT 公版方案的折叠算法,会带来灾难性的后果。

那么只要没有slc cache就不存在性能下降,也不存在三个区间了?这是极其错误的,不存在slc cache的enterprise SSD,依然存在steady稳态这一说法.引用tweak对KIOXIA CM6V 6.4T的数据,在进行4k qd256 全盘跨度写入时依然有明显的差异,我们可以看到在一开始的FOB性能很高,在transition性能接近腰斩,而在steady得到回升并稳定在350K左右.

那么抛开slc cache的影响,在重度负载中到底什么影响了SSD的性能?

引用我之前的文章:

[

我们首先要一个概念:固态的擦除是以Page为单位、写入是以word line为单位,而nand无法允许覆盖写入这种东西,除了完全纯净的FOB出厂态,否则绝大多数都是在轻度脏盘的情况下进行读写,即使你不停的trim也依然会有脏盘的情况.尽管toc的workload几乎不会在严苛的完全脏盘下进行steady稳态读写,但是他依然是现代SSD性能下降的最大因素之一(无论是Clint还是enterprise都是如此)

对于脏盘的具体原理解释,可以举一个极端的例子:一个die有2个block,每个block有2个page,在这个例子中page1有64k的无效数据可以删除、page2中有64k的,如果我要写一个block size=128KB的文件,那么他是否可以均匀分布在这两个page里面呢?damedesu(悲),答案是不行的,因为nand的特性决定了他不能够覆盖已有数据写入。这时候就需要把page 1上的64k垃圾数据删除,总共腾出128k的空间去写入数据。但nand的特性同时决定了他只能对page写入、对于block删除,因此为了给数据腾出足够多的空间我们必须要把一个block下两个page的数据全部读出来,存储在另一个地方,对整个block的数据进行擦除,再把之前本来有的数据与待写入的128k一起写入已经打扫完毕的block中,这一过程便是覆盖写入的真相。

那么我上面说的覆盖写入和稳态性能有什么关系?

回到最开始的那张图片.在FOB时,理论上所有的page都是干净的,因此可以直接写入而在transition过渡态,当剩余空间处于一定低线时,SSD内部将并未完整写入的page进行整理、触发GC回收机制将标记删除的数据从Nand上物理的删除掉,而当LBA标记的所有page空间都非空时,数据将不得不频繁的触发覆盖写入,而这个时候一般时性能最差的状 态.

在steady稳态,GC回收、覆盖写入进入了一个动态均衡的状态,因而性能维持在一条线上,这个时候数据散布趋于随机和平均.

我们可以参考memblaze小海豚的一篇文章: NVMe SSD 测试为何要先做预处理? 这篇文章就证明了这个事情的存在.

也就是说即使你没有slc cache,由于nand本身的写入特性,你填满后性能肯定是要下降的:SSD要不停的擦除与腾挪数据,这就是事实。在这个过程中,极大的考验着SSD的综合性能与固件调教.

业界从来没有所谓的缓外之说,一堆云玩家整天觉得企业级固态之所以牛逼,就是因为seq读写不掉速,多少带点皇帝的金锄头之幻想。最可笑的是他们吹捧的PM983/PE4010/SN640/PM9A3,定位是纯粹的读密集型盘体,不仅是dpwd只有1,op预留也不高。实际的表现也证明了他们实际上没有什么特别厉害的性能,与CM6V/P5620/R5300这种真写密集形enterprise SSD有着巨大的差距,以CD6R和CM6V为例:

因此如果他们把缓外定义为在最糟糕的重载压力下不间断的写入,显然他们的测试方法是完全错误的、得到的数据也毫无意义:他们压根就是在FOB状态下进行一次全盘跨度的128k顺序写入或者4k随机写入。而目前普遍的进入steady稳态做法是先进行两次128k q256的全盘顺序写入预处理,再进行相应的测试,面对部分op占比较大的enterprise SSD可能还要做不止一次的预处理。

这就是他们自相矛盾的一个点:他们所信仰的缓外压根不是所谓的真实水准,顶多叫做FOB状态下的全盘擦写,连transition过渡态都没跑进,算啥重载测试?

如果我想,我甚至可以跑出极其离谱的数据,并把它称之为更真实的速度:

1.2 缓外,你指的是哪个缓外? 

所谓的缓外速度,本身就很定义就很扯,是指在4k q64t8 write的iops,还是8k mixwr=30% q4t2的lat,亦或者是128k q256t8 read的bandwidth?某些门外汉大谈特谈缓外性能,却连缓外速度指什么,bs多大、qd多少、谈论的是iops还是lat都无法回答。

既然你想要说固态硬盘在重载下的性能表现,你好歹要知道你跑的什么负载吧?你要对比的是iops还是lat?oio等于多少?连这些都搞不懂,还是少bb吧。

1.3 缓外?steady?the workload for the really world 

client是否存在重度128k的写入需求?

答案是否定的,用户基本不会遇到那么高的写入场景,尤其是client的消费者,目前主流的SSD基本都是全然模拟或者动态slc算法,即使在75%满盘情况下也至少有20G以上的slc cache,到底是多卧龙凤雏才会吃满这个cache?一次写入少量文件也会进行自动的slc cache释放与GC回收(Samsung除外),与其担心所谓的缓外性能,倒不如多搬砖看看自己能买得起什么盘。

这来源于tweak对于990pro 2t的评测,里面介绍了samsung与他们对于client尤其是gaming场景io负载的认知.

这个信息来源于Calypso Systems的testmyworkload,其中描述了计算机进入系统十分钟后的使用场景,主要集中在4k的read,QD深度在1附近.实际的负载其实相对复杂,但是无一例外的:他们往往是多读少写的低队列负载.这也是当今client flagship在例如3dm/pcm10中性能表现极其亮眼的基础,他们针对低队列读取做了大量的优化和测试验证.

而在DC/HPC场景,差别就大了去了,例如同样是数据库,sql和Oracle Swingbench之间的负载就完全不是一回事,前者集中于4k qd4+,后者则是8k qd1-2之间.

这个需要具体情况具体分析,但无一例外的是他们都并非单纯的写入或者读取,而是一个混合的叠加态。

一部H265规格的2小时AV大致为3G;一个3A大作游戏容量目前为70G左右;一个Windows镜像大约是5G左右.你到底是有多闲,需要天天倒腾100g+的数据?以至于爆出缓存?

1.4 真的有正相关吗?

有,也没有,这个问题我将在第三章节解答。

1.5 总结

因此综合来看,首先云玩家的缓外指代不详,我暂且认为是out of slc cache下的128k q4t1读写(毕竟他们都是拿Windows那个文件拷贝测的),那么他首先既不反应重载下的SSD性能,也不代表在client workload下的表现,多少带点神圣罗马帝国的样子:既不神圣,也不罗马,更不帝国。

2 负载不同,性能差异能有多大? 

不同的场景,不同的负载会得出完全不同的性能表现,尤其是对某些优化差的硬盘而言,例如PM983DCT与PM9A3这两个卧龙锋雏,经常被人称之为不掉速的高端盘体,但事实上他们的实际性能表现极其糟糕.

实际的负载是混合的,还是参考那个图片:

缓外党天天觉得跑一个128k顺序读取测试就能代表实际性能,完全忽略了现实中负载的复杂性,这是很愚蠢的。他们往往以某个指标就想要推断出全貌,如同盲人摸象般无能,又如同二本大专小仙女一般自信,属实是赛博下头男。

夸张点说,一块硬盘在某个负载下表现好,和在另一个负载下的表现并没有什么直接的关系,例如S3700在anandtech的review中,于Oracle Swingbench负载下出现了巨大的性能缺陷

为什么要专门说这个事情,甚至拿出一个专门的章节去强调?原因很简单:存储系统某一个负载下表现良好,在另一个负载下也许就不占优势,这其中并没有什么绝对的关系。

举个例子:P5520是一个典型的读取密集型盘体,尽管说他也是enterprise/data center定位、尽管说他在各个block和queue depth下表现都很好、尽管说他在7R3W下保持了不俗的性能一致性与实际表现,但是他的稳态写入与真正写入密集型盘体(例如P5620/R5300/CM6V)依然存在肉眼可见的差距。

再比如CM6V作为在steady测试和spec workstation中吊打PC801的存在,他与3dmark、pcmark10中由于4K QD1 T1性能相对保守,依然被PC801拉开了不小的差距。

当然,这里还有个更乐的例子:已知Samsung EVO 256 红TF卡的QD32T1 4K FOB出厂态是1.75k IOPS(7mb/s这样的速度),CM6V是356k IOPS,对比之下就是209倍的差距。但实际上PCMARK10空盘测试中194分,而CM6V是2700分,差距只是13.91倍而已,显然没有那么夸张的差距(对比之下)。

你知道吗?CM6V的PCMARK10 FULL STORAGE分数只有3300分,同时,仅原神的玩家就有19190810万。如果原神决定掠夺KIOXIA,那么每一个原神玩家只能分到114.514分。你不知道,你只关心你自己 !

很多人拿着“缓外性能”去一意孤行的指代整体表现、用FOB态的性能跑CDM bandwidth测试去对比,多少有点大可不必了。换个角度想,那些半吊子水平的人测出来的数据都有价值,还要存储专家和PM干嘛?大企业和高校吃饱了撑着养着的吗?不要老是怀疑自己没了解过的东西。

3 测试,思考

3.1 测试介绍

这次测试一共有3块硬盘:CM6V 3.2T、INTEL 750 400G、PC801 1T,其中一块写密集形enterprise/dc ssd,一块为活在mlc神棍心中的超级无敌白月光零售盘,一块是然天一厚着脸皮吹捧的flagship m2。

kioxia CM6V,The really DC SSD,in-house controller+4T 96L bisc TLC Nand+5G DDR4 dram. maverll 18CH controller,kioxia定制,其他细节并未披露.使用4096G的原始容量开出3.2T/3200G的实际容量,OP比为28%,是典型的写入密集型enterpise ssd.96L BISC TLC,尽管在制程上相比P5510的144L、1733的128L落后一代,但他的性能并不差劲.

Intel 750 400G,上上个版本的神级固态,被一堆MLC神棍和缓外党与SM961吹捧为不掉速的良心固态.INTEL inhouse controller, 编号CH29AE41AB0 18CH 400MHZ的多核主控,配置了1280m的micron ddr3 dram.18颗32GiB的20nm mlc组成576G的原始容量开成400GB用,op比为18%,算是一个介于读密集型和写密集型的方案,从OP的角度上上他高于P3500的8%与P3600的12%,但由于不同的固件调教与实际定位,他的稳态性能在P3500左右.尽管说他的性能即使放在2D MLC那个年代都不算是最强的,但他比某些神棍吹捧的SM961不知道高到哪里去了.怎么说话的?没有OP的家伙!

PC801,或者叫做solidigm P44PRO/SK P41,这三个是一个玩意,被一堆进入新时代的MLC孝子和缓外神吹捧为超级无敌固态硬盘.

超级无敌天花板!

超级无敌缓外速度!

超级无敌的pc801!

无视掉那些没有意义的吹捧, PC801的硬件配置和参数还是相当有诚意的SK自家的Aries 8ch Inhouse自研主控,SK自家的LPDDR4 1G Dram,SK自家的176L TLC NAND,算是全inhouse方案了.client经典的0% OP配置,激进的性能策略与相对可靠的固件调教(与之前的PE6010/4010相比),无愧于Client flagship的名声与定位.

测试平台硬件如下硬件:

CPU:Intel 12700 @4.5Ghz

MB:Gig z690 gaming x d4

DRAM:Netec ddr4 3200c16 16g*2

GPU:Gig 3060 vision

System ssd:micron p5

除了Intel750之外的所有硬盘均挂载于cpu的直连pcie lans上,且有专门的风扇辅助散热.

测试项目有三个:

1 Windows下pcmark10 full storage test,这一项目由于采用了相同的系统版本与硬件配置,将会引入P41PLUS、RC10、9A1等固态硬盘进行测试;

2 Windows下的3dmark storage测试;

3 Ubuntu下进行的ezfio测试,对比几个关键数据;

4 打开3A大作room girl(可以坐椅子,当然是3A),并记录耗时

前三个可靠性较高,后一个我用秒表计算,纯属娱乐效果。

另外由于Windows文件系统存在一些问题,无法正确的跑出足够的写入性能,因此ezfio将会在进行ubuntu下测试.

3.2 PCM10与3DM,绝对的碾压级别胜利

我们先来看看PCMARK10的情况,PC801以3920的惊人分数一骑绝尘,直接秒掉了CM6V,对比9A1和P41P也是碾压级别的优势.

在具体子项上,反应低队列 seq混合读取的BOOT下项目中PC801并没有非常大的优势,没有比CM6高多少,受限于带宽与延迟的低下,Intel 750自然表现不佳.75%的下降并不大.

cp2,是seq的读写混合测试,混合读写是相对真实的负载,最直观的例子就是在文件拷贝的同时进行其他文件的读取.PC801还是以激进的分数胜出.

cp3,作为seq的read测试.尽管说enterprise的读取性能并不会受到多种影响,但是低队列下的读取优化并不是各家的重点,出现这个结果并不令人感到意外.

CPS1,是一个4k随机写入测试.在这里PC801激进的4K WRITE性能得到了巨大的优势.
cps2 test,4k随机混合读写测试,依然是类似的结果.

在3DMARK STORAGE中,除了intel750比较拉之外,另外两个都表现出了极其强悍的性能.

3.3 疑问,猜想与反驳

为什么PC801他的表现如此之强?是因为所谓的缓外速度吗?PC801在FOB下的out of slc cache 128k qd4t1速度仅为1500mb/s,而CM6可以做到1300MB/S(Windows的瓶颈限制),Intel 750则是1100MB/S,他们之间压根没有什么特别大的差距.那么问题出在哪里?

则是我写的FIO测试脚本,4K Write从QD1覆盖到QD8,我们可以从FIO图片上看出:PC801在完全FOB状态下的QD1T1/QD2T1/QD4T1性能极其激进.

PC801的4K Write FOB测试如下:

QD1T1,IOPS 32K,AVG LAT 30.62US

QD2T1,IOPS 43K,AVG LAT 42.74US

QD4T1,IOPS 43K,AVG LAT 85.16US

QD4T4,IOPS 38.5K,AVG LAT 372.44US

也就是说,PC801在QD2T1下,就已经跑出了全部的4K性能,而CM6V呢?

QD1T1/QD4T1/QD8T1性能一直在稳步上升,而QD4T4和QD4T1比也有3倍的差距.

这也就是说,PC801在client workload表现优秀,根本原因在于激进的随即性能调教,以及SK hynix对于client场景的思考.而不是所谓的番外速度之说.

至于他们在steady的表现如何?重头戏来咯!

3.4 Steady,PC801的开摆

EZfio测试是一个严谨的、被广泛认可的测试项目,其基于fio工具构建了详细的流程与可靠的,是SNIA SSS PTS的替代与同类,相比于后者,EZfio更加精简、圈数更低、测试项目更少,但很大程度上依然可以反映steady稳态性能。

区别于之前的FOB/transition测试,EZfio呈现出的成绩基于完全的稳态,包括了一系列的延迟表现与长时负载下的可靠性测试。对于大部分client ssd来说,能跑完就算成功,正如同某三流选手的那句名言:

记者:你觉得你是flagship固态吗?

PC801:我觉得我是

在4k read下,PC801的表现优秀,延迟一直控制得很好

但在4k write上,只能用开摆来形容:OIO1到OIO256,直接沦落到18k iops,而inter 750都有28k iops,更不要和CM6V的350K IOPS比了.OIO256的lat直接来到了14919的惊人单位,多少带点绷.

4K 7R3W长时的延迟表现更是惨不忍睹,直接来到了这个惊人的数字.

而CM6V给出了一个教科书般的答卷:

纵观稳态性能测试,Client与entripence之间巨大的性能差距是如此惊人,以至于PC801不仅被Intel 750秒了,还与CM6V有差不多20倍的差距.

我为说句PC801公道话,Steady也好,缓外也好,都不是client能遇到的情况,本身就不是干这个的,没这能力你知道吧?

当然,这个测试很大程度上不只是为了证明然天一的那个万秒图和测试方法有多扯淡,还是为了说明一个事实:别整天缓外了.如果你还是一意孤行的觉得QD1T1 4k write有多么重要,就要接受intel 750直接秒了PC801的事实.

哦另外,要是按照那些云玩家缓外直写是最差速度的说法,PC801的缓外也不应该是1500mb/s,而应该是130MB/S.

3.5 一堆硬盘测出来的真实数据

对于我手上测试过的几个硬盘成绩进行汇总一下,这个图片中没有SPEC Workstation 3.1测试是因为P4500/750的成绩异常,分数过低没啥参考价值.

我们可以很清楚的看到,经过加权后SSD整体的real world workload性能其实和缓外速度没有什么特别的关系,整体是一个弱相关的状态,尤其是我们排除掉CM6这个因素之后.

接下来我们看到这个带spec的加权对比,看起来0.46这个中等相关的系数是证明多少有点关系的,但有意思的来了,当我们抛除掉enterprise的SSD之后,其实我们是可以很清楚的看到他的相关系数还是比较低的.

尽管说我们可以看到有一定的相关系数,但考虑到原厂盘体中更高的“缓外速度”往往意味着tlc nand等级的提升、主控的升级以及冗余配置的存在,他们是否有逻辑上的因果性其实是值得商榷的事情。我个人是相对否认这一观点:大部分client的workload集中在QD1-4 9R1W的4k负载中,且不说爆出缓存在日常中的概率有多大,128k本身就是一个相对不靠谱的负载。

因此显而易见的:不要吃饱了撑着觉得缓外很重要,实际上没啥关系,版本答案还是P41P.真要steady性能就别整天抱着那个垃圾client了,早知道还是KIOXIA CM6V/dapustor R5300!

当然,我这里也指出了给缓外党的一条道路:打拳!

即使缓外(指fob态下的128k qd4t1速度)在99%的的场合下都没用, 抛开事实不谈,难道他就不能代表SSD性能吗?郭-,反思!

家人们谁懂啊,下头QLC固态缓外100MB/s不如机械

我去,你说的高端缓外速度固态是我同学,他一个滑铲把CM6V秒了

不用高端缓外固态的人只能度过一个相对失败的人生

多种拳法,任君选择,最好多加点BUFF,怎么输?!

总结:

吃饱了没事干不要扯缓外速度,只会显得比较蠢

从结果论的角度来说,无论是被半桶水吹捧的P44PRO,还是所谓不掉速的读密集型enterprise/DC SSD,例如PM9A3、PM983,他们的实际稳态性能都不尽如人意,尤其是4k写入这一项,与真写密集形的CM6V存在巨大差距.

垃圾硬盘之所以垃圾,缓外速度差只是表面现象,不是原因,根本问题在于失败的固件策略、劣质的黑片nand以及垃圾的主控,搞清楚这点才能够有效分析问题。

如果你真的吃饱了撑着想要什么超级高端slc盘,建议你买个Intel x25e,完美符合神棍的所有要求:slc颗粒、没有缓外速度、上古2d老制程nand超级寿命。

@asto18089 @alexkillers
#电脑玩家# #固态硬盘# #开箱评测#

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多