在我们购买固态硬盘时,可能会在详情页面看到支持LDPC纠错的功能,对于很多人来说,它并不能引起足够的关注,而对于固态硬盘本身来说,LDPC算法甚至可以提升闪存的擦写寿命。所以,就让我们来了解什么是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矩阵,则说明收到的是正确码字。反之,则不正确码字,再根据相乘结果进行进一步纠错解码。
硬解码(Hard Decode):
信息传递(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纠错流程
LDPC在SSD中的纠错流程如下图所示。值得注意的是,NAND硬判决、数据传输到控制器,以及硬判决解码这几个过程的速度都很快。软判决要读很多次,传输数据很多次,所以会对SSD的性能产生不好的影响。
LDPC软判决的分辨率变成动态可调,这样只有在最坏的情况下,才需要最高的分辨率去读。这样在大部分情况下,软判决和软判决传输数据的时间开销将大幅度减小。
点击此处关注,获取最新资讯!
我的评论
最新评论