为什么需要LDPC?
上次ECC科普中提到ECC纠错算法分类有BCH和LDPC两种,那么下图就是BCH和LDPC纠错算法的原始误码率和纠错失败概率图
从上图中曲线从右到左依次是BCH,LDPC 硬判决算法(硬解码),LDPC 软判决法(软解码),纵轴表示纠错失败的概率,横轴表示RBER(Raw Bit Error Rate原始误码率)。
可以看到,LDPC 软判决算法由于有更多的信道信息,相对于BCH 和硬判决LDPC 算法更有优势。
所以目前主流消费类的SSD都采用LDPC 纠错算法。
在固态硬盘纠错技术中使用LDPC纠错则是近几年的新发展,能够将以往基于传统BCH码的闪存纠错能力提升3倍以上。
什么是LDPC算法?
LDPC,是Low Density Parity Check Code的简称,意思是低密度奇偶校验码。
1963年,LDPC第一次出现在R.G.Gallager博士发表的论文之中;
1981年Tanner推广了LDPC码且给出了LDPC码的图,后称为Tanner图;
1995年MacKay和Neal等人对LDPC码重新进行研究,提出了可行的译码算法;
LDPC纠错算法最早应用于通讯行业,后来才逐渐引进到固态硬盘领域。
LDPC是一种稀疏校验矩阵线性分组码,因为校验矩阵中的1要远小于0的数目,这样做的好处就是,译码复杂度低,结构非常灵活。
LDPC解码
LDPC码的译码算法包括三大类:硬判决译码,软判决译码和混合译码。
在SSD内部的LDPC解码包括了两方面内容:硬解码(Hard Decode)和软解码(Soft Decode)。
LDPC解码的方法就是收到码字(G阵生成矩阵)之后,与校验矩阵H相乘,如果是0矩阵,则说明收到的是正确码字。
反之,则不正确码字,再根据相乘结果进行进一步纠错解码。
从上图看,LDPC软判决的纠错能力更强,但延迟会比硬盘架更高一些。
简单来说,硬解码与BCH纠错类似,只将硬判决的数据作为输入,只需一次读取就能实现。
硬判决是简单通过设定阈值来输出结果,将闪存读取电压转换成二进制,大于0的判断为1,小于0的判断为零,简单粗暴一刀切。
LDPC硬解码执行起来延迟较低,效果比BCH纠错码配合Read Retry要好。
LDPC在SSD中的纠错流程如上图所示。
值得注意的是,NAND硬判决、数据传输到控制器,以及硬判决解码这几个过程的速度都很快。
软判决要读很多次,传输数据很多次。
软解码则更像是LDPC纠错的精髓。
LDPC纠错中的软解码不仅有重复读取的操作,还多次读取,针对参数情况进行调整,取得多组不同的“软数据”,再将这些读取到的软数据结合对数似然比(Log-likelihood Ratio)进行多次迭代运算,最终完成LDPC软解码。
如果说硬判决是一半对一半的一刀切,软判决更具人性化。
软解码的原理是调整不同read level,根据读取结果后,判断bit是1或者0的概率,然后根据1或者0概率实现软解码, 通过多组软数据得出的计算结果,最终给出更精确、更接近真实的纠错效果。如下图:
为了提高性能,LDPC软判决的分辨率变成动态可调,这样只有在最坏的情况下,才需要最高的分辨率去读。这样在大部分情况下,软判决和软判决传输数据的时间开销将大幅度减小。
总的来说LDPC硬解码先进行一批数据的过滤,硬解码无法验证纠错的部分则进入到软解码进行,以此来提高数据的安全性,延长SSD使用寿命的同时提升使用体验。