前几个月对近两年Facebook和Google发表的两篇SSD故障分析的文章进行了阅读,并进行了整理。Google的在今年的FAST会议上发表了《Flash Reliability in Production: The Expected and the Unexpected》,在这篇文章中通过收集长达六年的数据对SSD可靠性进行了研究,并且对比了SSD与HDD之间的可靠性差别。Facebook在2015年发表了《A Large-Scale Study of Flash Memory Failures in the Field》,同样通过大数据的方式对Flash的故障进行了长时间的分析。这些研究工作实际上都在追问SSD在企业级应用的一些问题:SSD在实际的数据中心中是否可以安全部署?为了让SSD在数据中心大规模部署,我们还需要做哪些工作?
在Google的研究中对UE(Uncorrectable Error)进行了深入的研究分析。大家知道NAND Flash介质是不可靠的,经常会出现错误,用着用着就有可能遇到位错误,这是常态。尤其是15nm制程以及TLC/QLC的推广,使得NAND Flash的Bit Error问题变得更加严重。SSD一个重要的职责就是纠正这些Bit Error,让不可靠的NAND Flash变成可靠的SSD存储盘。
但是,尽管SSD内部具有强大的BCH或者LDPC编解码单元,以及RAIN等条带化数据保护机制,但是还是不可避免的发生UE这样的错误。NAND Flash发生故障,可以通过ECC、RAIN或者Firmware等手段解决,这类错误被称之为Correctable Error,属于Transparent Error的范畴,这类错误不会对应用产生影响。SSD内部机制无法解决的错误,那么这类错误将会对业务产生影响,被称之为UE,属于Non-Transparent Error范畴。对于UE故障,Google通过连续4年的数据表明,20% (20~63%)的SSD遇到会发生UE,这种UE在业务层表现为Bad Sector;和磁盘对比,在32月的时间内,3.5%的传统磁盘会遇到Bad Sector。这也就说明SSD在数据局部损坏方面会远远高于HDD,大致对比如下:
除了观察局部损坏故障之外,用户还会比较关注SSD的整盘损坏。Google的研究数据告诉我们,在4年的时间内,SSD的整盘更换率为4~10%,而传统机械磁盘的年更换率为2~9%。从这点上来看SSD的整盘故障更换率要比HDD低很多。这也表现为一旦SSD上线之后,比磁盘要具备更低的更换率,可以大大简化系统运维。
对于具体的错误类型,从上图我们可以看出,在Non-Transparent Error这块,绝大部分错误都是Uncorrectable Error,也就是读操作时发现bad sector,导致数据丢失。并且在大规模部署的情况下,这种错误导致的影响还是非常严重的。
除了分析SSD盘对外表现出来的局部以及整体故障之外,Google还对SSD数据可靠性因素进行了分析,影响SSD数据可靠性的因素大致有如下几点:
1, SSD磨损(Wear Out)
2, SSD技术类型(MLC、TLC)
3, 制造工艺
4, 使用时间(Age)
5, 温度
比较有意思的是,SSD的数据可靠性与使用时间相关,而不仅是使用寿命。如果一块盘在没有使用的情况下长时间存放,那么该盘的数据故障率要比一块新盘高。如下图所示:
对于一个全新的旧盘,由于长时间存放之后,SSD内部NAND Flash所产生的出错位数明显增加。这也说明SSD的数据可靠性与时间相关。此外,不同的制造工艺对SSD的数据可靠性也会产生重要影响,下图对比了不同NAND类型以及不同制造工艺情况下的数据可靠性:
总体来讲,从Google的统计数据我们可以发现SSD的故障模型和HDD相比发生了重要变化。SSD在整盘故障方面要优于HDD;但是在局部故障方面,SSD明显故障率要高于HDD。因此,在大规模部署SSD的情况下,上层的应用软件还是需要考虑SSD存储的容错机制,防止数据在SSD中丢失。由于SSD故障模型的变化,上层软件的容错机制也需要做出调整,适应SSD大量局部故障的问题。