在我们购买固态硬盘时,经常能够在电商平台的网页中看到固态硬盘的亮点功能中介绍到LDPC纠错的功能,而对于普通消费者来说这个到底是个什么玩意?甚至于很多人直接就忽略了这样一个对固态硬盘寿命有着至关重要的一项功能。今天我们就来聊聊LDPC纠错算法到底对固态硬盘的寿命有什么样的帮助,以及它是怎样一个运行极致。
目前SSD中ECC纠错代码主要两种BCH和LDPC。不过,随着SSD对ECC纠错技术要求越来越高,BCH纠错码开始有些吃力,所以,LDPC纠错码是发展趋势,也是最新最主流的纠错码。
为什么需要LDPC?
闪存中,储存数据的基本单元被称为Cell,每个Cell通过注入、释放电子来记录不同的数据。电子在Cell中进出,会对Cell产生损耗,随着损耗程度的增加,Cell中的电子出现逃逸的概率会不断增加,进而导致Cell所储存的数据出现跳变。举个例子,某个Cell最开始储存的二进制数据是10,一段时间后再读取该Cell,二进制数据可能就变成了11。
鉴于此,闪存需要配合主控中的ECC算法来进行数据检错和纠错。写入数据时,ECC引擎基于原始数据计算出冗余数据,并将原始数据和冗余数据同时储存。读取数据时,原始数据和冗余数据一并被读出,并通过ECC引擎检查错误并纠正错误,最终得到正确的原始数据。
在SSD领域,当前普遍使用的ECC算法是BCH算法,它可以满足绝大多数SSD的纠错需求,闪存所宣称的最大擦写次数,就是基于BCH算法给出的。
但随着TLC闪存颗粒和3D NAND的普遍应用,同样的数据块,其寿命末期的出错率将会大大增加,BCH编码的纠错能力显得非常吃力,这也使得LDPC纠错算法在SSD领域有了用武之地。
什么是LDPC算法
LDPC,是Low Density Parity Check Code的简称,翻译中文就是「低密度奇偶校验码」。1963年,LDPC第一次出现在R.G.Gallager博士发表的论文之中,最早应用于通讯行业,后来才逐渐引进到固态硬盘领域。
LDPC是一种稀疏校验矩阵线性分组码,因为校验矩阵中的1要远小于0的数目,这样做的好处就是,译码复杂度低,结构非常灵活。
LDPC分为编码和解码,下面我们逐一了解。
LDPC编码
在LDPC编码中,会用到一个叫做H矩阵的校验矩阵(Parity Check Matrix),比如,我们来看一个简单的H矩阵:
为了可以更加直观的理解H矩阵,可以借助Tanner图,来表示H矩阵:
左侧V1~V7是变量节点,右侧C1~C3是校验节点。变量节点和校验节点之间的连接线称为沿(edge),也代表这H矩阵中的1。每个节点上连接线(edge)的数目称为节点维度(Degree)。
LDPC编码分为正则编码和非正则编码。正则编码中,横向和纵向中1的个数是固定的。非正则编码中,横向和纵向中1的个数不固定。举一个例子,正则LDPC编码矩阵:
在这个正则H矩阵中,横向维度Dr=4,纵向维度Dc=3,Codeword长度=20。
与校验H矩阵对偶的矩阵,称为G矩阵,也是生成矩阵。构建优异的H校验矩阵,是不同SSD主控商实现LDPC的核心内容,每家都有各自的专利。
LDPC解码
在SSD内部的LDPC解码过程中,主要包括了两方面内容:硬解码(Hard Decode)和软解码(Soft Decode)。LDPC解码的方法就是收到码字之后,与校验矩阵H相乘,如果是0矩阵,则说明收到的是正确码字。反之,则不正确码字,再根据相乘结果进行进一步纠错解码。
信息传递(Messag passing)是LDPC硬解码常用的方法。校验节点和可变节点之间传递信息,进行迭代,直至所有的奇偶校验归0,则解码成功。
举个解码的例子:
迭代1:第一次信息传递迭代之后,Hard decode解码,此时n0,n4,n6仍为1。
迭代2:第二次信息传递迭代之后,Hard decode解码,此时n0仍为1。
迭代3:第二次信息传递迭代之后,Hard decode解码,奇偶校验归0
软解码(Soft Decode):
软解码的原理是调整不同read level,根据读取结果后,判断bit是1或者0的概率,然后根据1或者0概率实现软解码, 如下图:
LDPC在SSD中的纠错流程如下图所示。值得注意的是,NAND硬判决、数据传输到控制器,以及硬判决解码这几个过程的速度都很快。软判决要读很多次,传输数据很多次,所以会对SSD的性能产生不好的影响。
LDPC软判决的分辨率变成动态可调,这样只有在最坏的情况下,才需要最高的分辨率去读。这样在大部分情况下,软判决和软判决传输数据的时间开销将大幅度减小。
原创文章,作者:大柱,如若转载,请注明出处:LDPC纠错算法是什么?它对固态硬盘起什么作用?