闪存的品质 过去我们经常谈原片和白片。这种非此即彼的二分法比较容易被大家理解,原片的高品质被所有人认同,而对于白片的争论就比较多。其实白片和原片一样,都有等级之分。
并不是所有白片都是原厂筛剩下的次品,有些情况下原厂可能会直接出售晶圆。这些晶圆在出厂时就包含了一张map,将晶圆上每个晶粒的情况做出了标记。 第三方的封测厂根据Map摘取芯片进行封装,闪存芯片的分级筛选还需要结合主控一起进行,最终制造出符合特定运用条件的合格闪存颗粒。 跟晶圆制造阶段是相比,芯片封装相对简单的工艺流程,相关技术已经被很多第三方企业掌握,还能根据需要实现MCP多芯片封装。下图是江波龙将Marvell 88NV1160主控与美光3D TLC闪存融合封装的单颗粒NVMe固态硬盘——FORESEE P900。 闪存原厂数量毕竟有限,采购晶圆后摘取合格晶粒(Good Die)自行封装,可以发挥封装阶段的成本优势,起到了丰富市场选择的作用,同时也促使固态硬盘价格能够覆盖到各种人群的偏好范围。针尖上跳舞:一步都不允许出错 虽然公版方案使得制造固态硬盘的入门门槛降低了需多,但固态硬盘对闪存品质的要求并没有降低。由于闪存自身的工作特点,固态硬盘主控对闪存的运用受到种种制约。从最简单的来说,闪存必须先擦除才能进行写入,所以固态硬盘中没有真正的覆盖写入,所有针对原有数据的修改都将被重定向到新的闪存位置上。由FTL管理逻辑地址与闪存物理地址的对应关系。 原有数据因为发生变化而成为无效的"垃圾"内容,但主控却不能命令闪存直接将这个储存单元擦除掉——闪存的最小擦除单位Block块要比最小写入单位Page页大数千倍。随着已运用和已变成垃圾的位置越来越多,主控所能辗转腾挪的空间变得越来越小,所以必须要有垃圾回收来整理出足够数量的、可用于直接写入的空白块。 在读取原来block中有效块、写入新位置、擦除原来Block的垃圾回收过程中,不能有一丝一毫的错误发生。 机械盘异常断电遗失的可能仅仅是未保存的文件,而固态硬盘遇到异常断电或运行异常,遗失的还可能包括到恰好跟正写入的数据处于同个page或block的老数据——即便那些老数据早就正常写入进去,依然有可能在这次异常中被破坏。 通过筛选的闪存颗粒在制成SSD之后,对于成品还需要进行高温老化测验。下图是浦科特介绍的老化测验。运用Flexstar专用设备能够对SSD进行温度、电源循环、数据读写、极限电压等方面的测验,验证SSD在磨损均衡、数据错误率、组件失效率、写入耐久与数据保持时间等方面的表现。并非万能的LDPC纠错 固态硬盘对可靠性的要求极高,闪存写入和读出数据的过程,都有纠错引擎的参与来确保数据无误。LDPC纠错近几年才使用都固态硬盘当中,被称为拯救TLC闪存的功臣。借此机会简单聊聊大家眼中神秘的LDPC。 LDPC是一种迭代算法。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作为一个精密的整体,主控的先进纠错技术只是一个辅助,关键还是要看闪存品质以及固件的成熟度。 以上是闪存品质对SSD固态硬盘的影响的介绍,用户养成良好的使用习惯,这样固态硬盘用上5年也不用担心损坏。