今天我们来谈谈闪存品质如何影响固态硬盘,今天的讨论将不再局限于写入寿命或可以擦写多少次这样简单的层面。
闪存的品质
过去我们经常谈原片和白片。这种非此即彼的二分法比较容易被大家理解,原片的高品质被所有人认同,而对于白片的争论就比较多。其实白片和原片一样,都有等级之分。
并不是所有白片都是原厂筛剩下的次品,有些情况下原厂可能会直接出售晶圆。这些晶圆在出厂时就包含了一张map,将晶圆上每个晶粒的情况做出了标记。
第三方的封测厂根据Map摘取芯片进行封装,闪存芯片的分级筛选还需要结合主控一起进行,最终制造出符合特定使用条件的合格闪存颗粒。
跟晶圆制造阶段是相比,芯片封装相对简单的工艺流程,相关技术已经被很多第三方企业掌握,还能根据需要实现MCP多芯片封装。下图是江波龙将Marvell 88NV1160主控与美光3D TLC闪存融合封装的单颗粒NVMe固态硬盘——FORESEE P900。
闪存原厂数量毕竟有限,采购晶圆后摘取合格晶粒(Good Die)自行封装,可以发挥封装阶段的成本优势,起到了丰富市场选择的作用,同时也促使固态硬盘价格能够覆盖到各种人群的偏好范围。
针尖上跳舞:一步都不允许出错
虽然公版方案使得制造固态硬盘的入门门槛降低了需多,但固态硬盘对闪存品质的要求并没有降低。由于闪存自身的工作特点,固态硬盘主控对闪存的使用受到种种制约。从最简单的来说,闪存必须先擦除才能进行写入,所以固态硬盘中没有真正的覆盖写入,所有针对原有数据的修改都将被重定向到新的闪存位置上。由FTL管理逻辑地址与闪存物理地址的对应关系。
这就像酒店房间管理,下午2点之前就到达酒店办理入住,这时给你预留的房间还没有打扫,所以前台给你安排新的房间,并在系统中做了记录。
原有数据因为发生变化而成为无效的"垃圾"内容,但主控却不能命令闪存直接将这个存储单元擦除掉——闪存的最小擦除单位Block块要比最小写入单位Page页大数千倍。随着已使用和已变成垃圾的位置越来越多,主控所能辗转腾挪的空间变得越来越小,所以必须要有垃圾回收来整理出足够数量的、可用于直接写入的空白块。
在读取原来block中有效块、写入新位置、擦除原来Block的垃圾回收过程中,不能有一丝一毫的错误发生。
机械盘异常断电丢失的可能仅仅是未保存的文件,而固态硬盘遇到异常断电或运行异常,丢失的还可能包括到恰好跟正写入的数据处于同个page或block的老数据——即便那些老数据早就正常写入进去,依然有可能在这次异常中被破坏。
通过筛选的闪存颗粒在制成SSD之后,对于成品还需要进行高温老化测试。下图是浦科特介绍的老化测试。使用Flexstar专用设备能够对SSD进行温度、电源循环、数据读写、极限电压等方面的测试,验证SSD在磨损均衡、数据错误率、组件失效率、写入耐久与数据保持时间等方面的表现。
并非万能的LDPC纠错
固态硬盘对可靠性的要求极高,闪存写入和读出数据的过程,都有纠错引擎的参与来确保数据无误。LDPC纠错近几年才应用都固态硬盘当中,被称为拯救TLC闪存的功臣。借此机会简单聊聊大家眼中神秘的LDPC。
LDPC是一种迭代算法。如果你不明白迭代的含义,推荐看一部名为"明日边缘"的电影,它讲述的是男主有机会一次次回到前一天,通过反复尝试各种可能,试图救下必将死在明天的女主。小编觉得这部2014年的电影很有意思,即便不是为了理解迭代的含义,如果有没看过的朋友也可以回去看一看。
好了扯远了,言归正传,LDPC是通过迭代的方式反复尝试解码,在这个过程中通过软数据(Soft Data,SD)的帮助一步步接近正确的读取结果。
这里又出现一个叫"软数据"的名词。所谓软数据,可以理解成瞎子摸象——手感。得到的信息量很大,但并不直观,需要经过进一步综合判断才能分析出结果。
闪存单元内存储的是电子,根据电子的多寡来表达不同的数据。现在还做不到直接数闪存单元中电子的数目,只能通过位线上的电流来感知和判断,并将它们转换为0和1的二进制数据。下图是最简单的SLC闪存模型:
SLC闪存的一个单元只需要表达0或1两种状态,到了MLC之后要表达的状态数量就增加到了4个(00,01,10,11),TLC时代更是增加到8个状态。后边还要16种状态的QLC闪存。没有LDPC这种强大的纠错算法是万万不行的。
LDPC纠错在软纠错阶段可以通过不同的读取参数去获得关于闪存的更多数据,根据自己的经验去尝试判读,如果ECC验证不通过,就换个"姿势"进行更多的尝试。这里判读所依据的经验是"Log-likelihood ratio(LLR)",中文名叫对数似然比。
对数似然比是一个经验丰富的老司机,能够仅凭一个模糊的画面就能把车牌号猜个八九不离十。当然经验再丰富也有翻车的时候,不要紧,LDPC纠错可以继续迭代,接着尝试,直到得出正确答案,或者因迭代次数达到限制而纠错失败。
SSD的闪存品质不好会容易翻车:坏就坏在对数似然比这个老司机身上。对数似然比与闪存的特性有关,可以想象只开美系车的老司机,让他猜日本的车牌号是很难猜对的。
对数似然比这些经验性的信息,是在主控及固件的设计阶段就预设好的,需要根据闪存的不同进行适配。这是一个经验活儿。天下闪存制造商虽然只有寥寥数家,但即便是同一家闪存厂的产品,不同品质等级的脾气秉性也很难料。这里边的问题就复杂了,我就放张龙生九子的图片吧。
现在我们知道,闪存的品质不是简单的PE次数,它会影响到LDPC纠错的效果,反过来影响到闪存能够用多久。即便神如LDPC,如果闪存品质不佳,也可能因偏离固件的设计而失控。
闪存出错的累加效应
通常的情况下,每一笔写入和读取的数据都会经过纠错引擎的检查。
但某些时候为了更好的性能也会有无主控纠错引擎参与的数据迁移发生,譬如说使用到Copy Back(闪迪称为On Chip Copy)的磨损均衡或者SLC缓存释放过程。
因为Copy Back的数据迁移过程只局限在芯片内部,不需要主控的过多参与,所以释放了主控压力,提升了SSD的效能表现,但也因此失去了检查错误的机会,有可能导致闪存错误的逐渐累加,直到下次主控要求读取时才发现已经超出了纠错能力范围。
为了兼顾性能与数据安全,一些固态硬盘会采用适时切换的方式,在闪存较新的时候采用Copy Back模式提升性能表现,当闪存磨损达到一定程度后改回传统模式保护数据安全。PCEVA之前在饥饿鲨TR150固态硬盘的耐久度测试中就发现,该固态硬盘在主机写入量超过标定TBW之后,就会关闭Copy Back模式。
如果闪存品质不确定,没有办法找到一个合理的均衡点,就有可能无法发挥出闪存的全部寿命潜力。
总结:因为NAND块擦除的特性,必须要有很多复杂的算法与纠错辅助来保证运行时的效能与稳定性。NAND闪存虽然是非易失性存储器,但在记录数据的过程中依然充满风险,除了用户直接请求的写入之外,SSD内部的磨损均衡、垃圾回收以及基于数据保持目的的刷新都会产生背景写入。SSD作为一个精密的整体,主控的先进纠错技术只是一个辅助,关键还是要看闪存品质以及固件的成熟度。
打个比方,师太亲身经历的事情:朋友开了个烤串店,大家都去捧场,但越吃越咸,老板解释说:肉不新鲜,多放点盐遮遮味……大家以为就是个玩笑没当真,但回家全都拉了肚子……劣质的NAND就像这个不新鲜的肉串,虽然有各种算法与纠错辅助能一定程度遮盖不新鲜的味道,但你吃下去还是要拉肚子的。
以上是小编多年测试SSD后的心得。水平有限,文中若有错误欢迎大牛指正。那么结尾部分再说些大白话吧,目的是让没有专业知识的人也都能看懂:
我们还能得到几个延伸的结论:
1、SSD跑分其实很扯淡,跑的不过是缓存在极短时间内的爆发力,无法真实体现SSD在实际工作中的状态。这也是AS SSD的测试结果不靠谱的原因之一。
2、家用固态硬盘没事别瞎折腾,一边删除一边写入的事尽量少干,如果写入时候有卡顿,千万不要着急的按重启,多等会,因为块擦除延迟是比较高的。想骗保的同学看到这里会有所领悟吧,不过这仅针对使用劣质NAND的SSD,优质NAND+健壮度高的固件,这么做也很难搞坏。
3、如果非要买低端的SSD,也尽量选有芯片sorting能力的工厂出的产品。已知大陆工厂有这个能力的包括江波龙,台湾的华泰电子等也给很多品牌提供封测服务。我们把这个能力当做一个最基本的及格线,凡是及格线之下的都是不推荐的,比如那些使用拆板、降级颗粒不做sorting却成天自称一线原厂颗粒的品牌……