垃圾硬盘制造手册,与SLC算法的过去、现在、将来来自zu
垃圾硬盘制造手册,与SLC算法的过去、现在、将来来自zu
1 垃圾硬盘到底垃圾在哪里?
现在开店卖什么赚钱1.1正确的结论,错误的推导
有一种说法,在正是为了弥补tlc nand的羸弱性能才产生了slc cache,基于这种观点,他们一厢情愿的认为缓外seq直写性能(准确来说是bandwidth)才能代表ssd的真实水平.而自然,缓外性能差劲的西数绿盘自然也是垃圾.
那么显而易见的,在同代同架构同等级的前提下,slc nand的写入速度是远远好于mlc nand,更好于tlc与qlc nand,要提升SSD性能,早知道还是SLC!
以上是某些大聪明的认知,这种说法不能说完全错误,但距离实际情况也隔了十万八千里.他们往往对于SSD的实际组成与运行模式毫不理解,认为SSD就是一个高端版本的磁带。各种网上的“科普”也加深了这一偏见,他们往往喜欢腔调老生常谈的SLC/MLC/TLC等nand mode,把真正需要关注的东西:controller(主控)与固件给忽略了。
白鞋变黄怎么办
在我眼中,与其说SSD本身是一个传统意义上的硬盘,他更像是一个微缩起来的存储系统。在此为了方便理解,我们假想出一个拥有无穷大dram、2channel(CH)、2CPU的SSD存储对象。[CH可以理解为pc系统上的内存通道数量,在一个理想系统中随着ch数量或者imc phy的提升,并发性能会越来越高] 
假如我使用FIO进行bs=4k、QD=1的4k纯写入操作,那么host向SSD下达操作指令的首先经过CPU进行转译与处理,让NAND获知他需要进行写入的操作。在完全的空盘状态下,数据的写入是相对简单的,大量的数据首先会被安排在SSD内建的dram中,等到他们集合成128k的块(这个数据是我瞎说的,懒得翻Datasheet了),再一次性的下发到不同的channel(CH),每个CH都挂载着数块die,这使得对于同一个CH可以同时对多个ce进行读写操作,在此过程中数据是随机分散在page/cell中的,并没有什么规律可言。而在写入完成后,CPU会对dram与nand上的ftl表进行更改。(事实上ftl表会存储在多个地方,除了在进行长期存储的nand上外,不仅仅是在dram存储着,controller里面的sram依然会存有一份较小的表格,这类似于L2/L3这种结构)。这个过程很类似raid0这种存储阵列,这便是为什么我觉得不能用传统机械硬盘的逻辑去看待SSD的原因。
一小时等于多少毫秒一般一个或者多个nand对应一个CH通道,那么主控如何快速的选择对应的读写die而不需要一次次的针对block/page进行历遍呢?答案就是选通信号CE#.CE:CHIP ENABLE,一个nand封装有多个die,一个die含有无数个block,一个block又有无数个page,page中有无数个cell,这些构成了闪存的基本单元.对于单个控制器phy来说,如果一个CH下只有一个die,那么性能是富裕的,从密度上也极其不划算,因此在实际中一个CH往往对应着多个die,也就是所谓的ce数量。
如果是脏盘状态,那么问题会更加复杂一点,举一个极端的例子:一个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中,这一过程便是GC回收。
对此我们可以抽象的理解为:CPU收到写入128k文件的通知→CPU翻译查ftl表看看有没有剩余空间→CPU发现没有,于是决定进行GC回收→block里面数据全部读取出来,写入到其他的地方→block进行擦除→CPU发送数据给nand,对block下的page进行写入。
需要注意的是文件必须要分布在一个相对完整的抽象逻辑空间内(注意是抽象逻辑空间,至于他是否分布在连续的cell上是不必要的)
当然,以上还是比较简单的情况,忽略了很多技术细节,并且实际的负载是混合的:比如在一个短暂时间内4k write、64k read、8k read等负载同时存在,这样复杂的场景对主控性能与固件要求很高。 
事实上,NAND在这其中的指标可以抽象为只有俩个:读写的延迟与速率。但是controller的CPU性能、查询ftl表的效率、在面对多个负载之时应该采取怎样的优先级以及写入方式,这些的重要性甚至高于nand本身的性能。
在理解了这些之后,我们便知道为什么nand决定论、mlc神论、垃圾固态全赖nand论如此扯淡:如此重要的controller与固件被完全的忽视,想当然的便以为SSD和磁带一样就是一
个你往上物理的写入数据他就万事大吉的东西。魔怔人跑raid0还知道CPU与raid卡对io性能的重要性,到SSD这就成了转得越快写得越快就好的神奇东西。
口说无凭,在下一章节我将会用SSD耻辱界的代表WD GREEN SATA去证明我的观点,顺便展示一下原厂SATA产品可以达到一个怎样的下限。
1.2 实际分析,WD GREEN到底差在哪里
何鸿燊孙女WD Green SATA,传说中是大号U盘,被人称作tf卡都不如的垃圾。我在这里严肃声明:他的确是垃圾,也是大号U盘,但他还是比tf卡强一些的。饥肠辘辘造句
首先是主控,sandisk标识的20-82-00469-2,目前已知的是他并非练PS3111以及SMI 2258XT,无论从封装还是die size角度来看都不对,至于是否是maverll或者其他厂商的产品,这就不得而知了。我们在这里先假定他是一个2ch的产品,尽管目前的确存在4CH甚至更多通道的SATA主控,但是他们的价格与成本都更高(况且channel数量和性能并不是绝对的关系,例如2258XT),而wd在green上用inhouse主控的唯一目的只可能是省钱。基于这一点去判断,他的arm内核顶多有两个甚至一个,最新的arm cortex R5是别想了:
中国风景优美的地方成本和授权费都太高,也许老旧的arm9/arm8比较可能,甚至说为了省钱,他可能使用mips架构去设计CPU内核。无论如何,2CH+单核CPU的主控组合显然是一个怎么看都没有性能的方案,接下来的测试中也可以证明这一点。不过讽刺的是,这块SSD表现如此之差的第一责任人并非主控,而是固件。
然后是NAND,sandisk标60333 256G,我认为这基于BISC4 96L,毕竟64l高密度方案成本上可不便宜,96l硅渣正好适合这种定位的产品。其他数据未知、网络上也没有任何关于这个nand的数据,唯一值得庆幸的是他比较凉快,这比其他kioxia或者WD产品上的兄弟妹强多了。
dramless设计+没有任何断电保护,也算是低端硬盘的标配了,如果说nvme的dramless还可以靠着HBM功能跑出不错的性能与耐久度,那么SATA上则毫无周转的余地。另外这块硬盘上的主控与CZ880 U盘上的十分接近,无论是封装还是大小都很相似,但U盘上的编号为20 82 00381 A0,与绿盘上的有差异,至于他们是不是一个玩意,这我就不得而知了。
简简单单开个盒,象征性的跑一下pcmark 10快速基准盘测试。
与他388的尴尬成绩作为对比的tf卡的分数是194,M6S的分数是910,的确是极其耻辱了.而分析具体成绩可以看出他在读取项目上并不差,问题出在写入上.
当然,他烂是一个人尽皆知的事情,重点在于为什么他这样烂。如果是一些水平差的媒体可能就会大谈以下观点:
卖了就违法,TLC是垃圾的证明!
震惊!WD竟然在自己的硬盘上用垃圾颗粒!
不如国产!WD再一次表现带资本的邪恶!
但作为no body know ssd better than me的homolab rd,我自然不会说这种没水平的垃圾话,要是将来报道出了偏差,相当于我也有责任吧。
为了告诉你他烂在哪里、为什么他烂,我将用FIO脚本进行多个测试,通过分析lat、iops以得到一个相对靠谱的结果。
在空盘状态下进行fio写入测试, Fio进行4K T1的测试,QD分别为1、2、4.
*注:对于fio来说,slat可以视为指令从cpu下发到ssd的执行时间,clat可以视为nand的读写延迟.*
在iops上,qd1到qd2的提升几乎没有,到qd4则是直接大跌,这说明了主控处理表现并不好,但salt正常的延迟表示了他并没有发生太多拥堵.而clat 的nand端延迟尽管很高,但考虑到他作为dramless盘体与失败的slc cahce策略,这一结果尚且能够理解.极差的iops、尚且正常的slat与clat表现都证明了他的团队有尝试过挣扎:用iops并发换取可接受的延迟.但在事实上极其差劲的iops已经预示了这块主控以及固件的极其失败.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。