固态硬盘纠错算法的前世今生

栏目: 编程工具 · 发布时间: 5年前

内容简介:纠错编码算法(Error Correction Code, ECC)是传输过程中发生错误后能在接收端自行发现并纠正的码。早期被广泛应用于通信领域,在发送端完成数据编码,在接收端完成数据译码,保证数据的可靠传输。NAND Flash作为一种广泛使用的存储介质,容易受到PE次数、数据保存时间、温度和Cell间干扰等因素的影响,数据写入后再读出无法保证绝对的正确性,因此需要ECC算法做数据恢复。在2D NAND Flash时代,SSD控制器一般采用BCH编码保护数据正确性,BCH的几个特性

纠错编码算法(Error Correction Code, ECC)是传输过程中发生错误后能在接收端自行发现并纠正的码。早期被广泛应用于通信领域,在发送端完成数据编码,在接收端完成数据译码,保证数据的可靠传输。NAND Flash作为一种广泛使用的存储介质,容易受到PE次数、数据保存时间、温度和Cell间干扰等因素的影响,数据写入后再读出无法保证绝对的正确性,因此需要ECC算法做数据恢复。

固态硬盘纠错算法的前世今生

在2D NAND Flash时代,SSD控制器一般采用BCH编码保护数据正确性,BCH的几个特性

1. 对于固定的码长和码率,有一组固定的生成多项式和校验多项式,不需要单独设计;

2. 有相对固定的编码和译码算法;

3. 当错误数据个数小于一个指定值时,可以100%恢复数据;当数据错误个数大于这个指定值时,100%不能恢复数据;

4. BCH编码只能接收硬信息,即一个有效数据只能用1 bit表示;

但是随着3D NAND Flash技术的逐步成熟,3D NAND Flash表现出了更好的可靠性。因此,原本采用2D MLC的产品纷纷转投3D TLC(可靠性对比: 2D MLC > 3D TLC > 2D TLC),对SSD主控的ECC编码提出了更高的要求,因此,具备更强纠错能力的低密度奇偶校验编码(Low Density Parity Check, LDPC)越来越多的被采用。

相对于BCH,LDPC具备以下特性:

1. 对于固定的码长和码率,需要单独设计编译码使用的矩阵(通常指校验矩阵);

2. 有多种解码算法,但是最好的纠错算法计算复杂度太高,无法硬件化,需要权衡算法特点和译码精度,简化算法;

3. 可以接收软信息(即一个有效数据可以用多个 bit表示),这是LDPC取代BCH的主要原因;

4. 译码成功或失败没有绝对的界线,即可能在只错几个bit的情况下无法成功纠错,但可以成功完成200 bit错误的数据译码;

5. 相同码率情况下,码长越长,纠错能力越强;

详细解释一下以上5个特性:

1. 低密度奇偶校验码的低密度是指其校验矩阵的稀疏性(在一个只有“0”元素和“1”元素的矩阵中,“1”元素的比例很低)。LDPC编码和译码都可以利用校验矩阵,矩阵的低密度意味着编译码算法的低复杂度、低运算量。对于固定码长和码率的LDPC码,校验矩阵有很多种,但是设计一个运算量小,复杂度低且纠错能力强的校验矩阵成为LDPC编码应用的一个难点。

固态硬盘纠错算法的前世今生

LDPC校验矩阵H

2. 麻省理工学院Robert Gallager于1963年在博士论文中提出LDPC码,但因其复杂的译码算法不易实现,并没有被广泛采用。1981年,Tanner提出了用图模型来描述码字的概念,从而将LDPC码的校验矩阵对应到被称为Tanner图的双向图上,采用Tanner 图构造的LDPC码,通过并行译码可以显著地降低译码复杂度。

固态硬盘纠错算法的前世今生

校验矩阵H对应的Tanner

此后,越来越多的LDPC译码算法出现,其中最流行的是比特翻转算法(Bit Flipping Algorithm)和最小和算法(Min-Sum Algorithm)。同时也出现了很多基于以上2种纠错算法的变种算法,用较小的代价提高了译码精度。

下图描述了一个编码后数据位“1101”,在信道上传输后变为“1001”后接收端的比特翻转译码的过程。

经过一次迭代后,错误bit被纠正。

固态硬盘纠错算法的前世今生

固态硬盘纠错算法的前世今生

固态硬盘纠错算法的前世今生

固态硬盘纠错算法的前世今生

固态硬盘纠错算法的前世今生

固态硬盘纠错算法的前世今生

固态硬盘纠错算法的前世今生

固态硬盘纠错算法的前世今生

固态硬盘纠错算法的前世今生

固态硬盘纠错算法的前世今生

固态硬盘纠错算法的前世今生

3.软信息是用多bit表示一个bit的值,即等价于可以用多位精度表示一个信息的置信度。

用硬信息表示一个信息,只有“0”或“1”。而软信息更精确的表达了一个信息的置信度,软信息可以有“0.1”、“0.4”、“0.65”、“0.99”等表达方式。有了软信息,在相同码率下译码器可以纠正更多的错误。

但是存储不同于通信领域,存储器读出的数据只能是0或者1。因此,软信息的获取只能通过改变存储器读方式,多次读取才能获得。多次读取同一个信息必然造成读性能的下降,因此,在SSD控制器上,尽可能减少使用软信息做译码的概率。

固态硬盘纠错算法的前世今生

4. LDPC是一种概率译码算法,在不同的错误率的情况下均有一个译码成功概率,并且这个概率具备一个明显的特点。当待译码数据错率低时,LDPC译码失败概率很低,可以低至1E-15,但是很难做到0失败,主要原因是对于每个矩阵都存在一个陷阱集,当陷阱集中包含的位置的点发生数据错误,LDPC便无法成功译码。随着错误率逐渐增加,译码失败概率会快速增加到接近100%失败。

固态硬盘纠错算法的前世今生

5.对于BCH和LDPC,在相同码率下,码长越长,纠错能力越强。对于市场上流行的3D TLC Flash的页大小(页大小决定纠错算法码率),我们比较了2KB/4KB BCH和2KB/4KB LDPC硬判决译码的纠错能力。当码长增加时,相同的译码算法以及相同的码率下,纠错能力提升了近50%。长码长ECC算法的应用,更好的提高了纠错算法的能力,推迟了SSD主控启用LDPC软判决译码的使用,减少软判决译码带来的负面影响(性能和功耗方面)。

固态硬盘纠错算法的前世今生

总结:

数据正确性是SSD最基本的要求,纠错编码保证了数据万无一失。随着更多新的Flash结构出现,纠错编码算法也在逐步演进。LDPC算法最大限度的保证了数据的正确性。并且,随着越来越多SSD主控采用4KB LDPC,更好的延长了SSD的寿命。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python高级编程(第二版)

Python高级编程(第二版)

[波兰] Michał Jaworski、[法] Tarek Ziadé / 张亮、阿信 / 人民邮电出版社 / 2017-9-19 / 89.00元

Python作为一种高级程序设计语言,凭借其简洁、易读及可扩展性日渐成为程序设计领域备受推崇的语言之一。 本书基于Python 3.5版本进行讲解,通过13章的内容,深度揭示了Python编程的高级技巧。本书从Python语言及其社区的现状开始介绍,对Python语法、命名规则、Python包的编写、部署代码、扩展程序开发、管理代码、文档编写、测试开发、代码优化、并发编程、设计模式等重要话题......一起来看看 《Python高级编程(第二版)》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具