PCEVA,PC绝对领域,探寻真正的电脑知识
开启左侧

固态硬盘采用LDPC纠错码介绍

[复制链接]
neeyuese 发表于 2015-7-6 23:45 | 显示全部楼层 |阅读模式
点击数:22737|回复数:38
什么是LDPC码

LDPC(低密度奇偶校验)码是一种纠错码,用于检测数据从某个点传输到另个点之间是否出现错误。因为纠错码包含校正数据,所以当接收端检测到发送端传输过来的数据是错误的时,接收端可以有足够的信息去修复这些错误,而不用通知发送端重新发送数据。就像传输数字电视信号一样,这个技术使得数据流保持恒定的传输速率,你不会希望看数字电视时画面停格并等待发送端重新多次发送正确数据这种事发生吧?

LDPC码的前生

LDPC码是麻省理工学院的罗伯特-哥拉格在1960年发明的好码,其性能接近香农极限[1],但是在很长时间里被人们遗忘,因为在那个年代,当时的计算机技术根本没法处理这么复杂的编码。

一直到了90年代中期,工程师把堆灰多年的LDPC码重新拿出来研究,通过卫星传输做实时数字电视播放。届时,计算机处理器发展也突飞猛进。过去的几年,LDPC码更是用的越来越多,因为它似乎是用于高速数据传输的最佳解决方案,特别是在高错误率和电噪声的环境下。在LDPC码的部署下,无线技术和机械硬盘的发展速度甚至赶超了几年前的计算机处理器。

虽然用于卫星传输的LDPC码不能直接移植到机械硬盘上使用,但是这两个不同领域的工程师团队之间的知识和经验交流却会带来开发速度的优势。举个例子来说,LSI给机械硬盘做过LDPC码读通道芯片,然后LSI收购了SandForce开始做SF3700 SSD主控,这个主控宣传支持SHIELD纠错技术(其实是基于LDPC码),那么开发机械硬盘读芯片的工程师就能和开发SSD的工程师们互相交流经验加速产品的部署了。(当然经过一波三折之后一度延期的SF3700 SSD主控不出意外会由希捷推出)

新一代SSD为什么要采用LDPC码



随着闪存工艺提高,更为廉价及高密度的TLC闪存搭配传统BCH纠错码显得捉襟见肘了,必须向更高等级的纠错码进军。在使用相同用户数据空间的情况下,LDPC码可以比BCH码纠正更多的错误,这意味着并不需要增加ECC校验位数,避免了写放大增加和降低数据传输效率等比较棘手的问题。

既然LDPC码那么好,为什么一开始不用呢?这个在前面已经说过了,虽然1960年已经提出了LDPC码,但是当时的硬件条件有限不能真正实现,直到90年代后期才开始采用,但是那时候的SSD控制器上已经开始部署了BCH之类的纠错码了。LDPC码的解码电路相比BCH码电路复杂的多,耗电量和体积也大。最新一代的SSD控制器的性能不成问题,那么选择纠错能力更强的LDPC显得大势所趋了。

LDPC码的强大纠错能力可以带来闪存耐久度和数据保存期的双重提升



如图,LDPC码相比BCH码可以在闪存的每个Page中纠正更多的错误,提高了闪存的可用性,增加了耐久度。

闪存随着P/E(编程/擦除次数)的提高错误率会越来越大,当错误率超过主控纠错能力的极限后就会出现数据错误。当前采用TLC的SSD产品,假设从目前的BCH码改成LDPC码后,P/E从1000提高到1500,这样一来就可以实现耐久度50%的提高,相对的由于纠错能力更强,掉电后数据保存期也延长了。

LDPC码可大幅改善闪存容量提升后的数据安全



很多人问为什么当前采用TLC闪存的SSD价格还是那么贵,那是因为SSD的固件和验证并没有跟得上闪存工艺的步伐。闪存从MLC过渡到TLC后,每个Die的Page数量增加了50%,改善了价格和容量比,但是每个Page的错误数也在增加,用户花了差不多的钱买了容量更大和错误数更多的闪存。在当前没有进入LDPC码之前,制造厂在SSD产品上采用的TLC闪存颗粒都是精挑细选的,这部分增加了很大的成本。把BCH码改成LDPC码后,增强闪存每个Page的纠错能力,也就保证了闪存容量提升后的数据安全,才能真正打开TLC闪存的低价局面。(换句话说,品质更差的闪存将会排山倒海的杀过来啦,各位等着接盘吧。)

LDPC码可实现闪存的传输延迟控制

企业级和数据中心用户对SSD不但有传输率要求,更重要的是Qos和延迟的要求。从BCH码改变到LDPC码后,可以实现延迟控制,可操作性更大。

当SSD采用LDPC码后,这部分延迟主要有如下3个地方产生:

1. LDPC编码过程。
2. 通过LDPC解码首次就读出闪存上数据的过程。
3. 通过LDPC解码多次后读出闪存上数据的过程。

一般号称支持LDPC码的主控都会含有硬件加速模块,外加高效利用回写缓存即可有效的把上面第1点的延迟给隐藏起来。其实延迟的问题主要是来自第2和第3点。

采用LDPC码后SSD中随机读取延迟主要由下表中的3个地方组成:


上图中,闪存传输时间是固定不变的,只有t_read(闪存读取时间)和t_ldpc(LDPC解码时间)是会出现变化的,很明显前者比后者影响更大。

闪存读取时间取决于Block中Page的索引,有些Page读取快,有些Page则慢。例如下图为闪迪A19 TLC的Read (Page) 性能典型值表格。这个时间不受纠错码影响,也就是说用LDPC或是BCH并没区别。



LDPC解码时间取决于闪存的错误数和LDPC码参数设置造成的迭代次数多少。这里给迭代次数设置一个上限,就可以在超过这个上限后进入下一步操作,防止无限循环下去。我们知道闪存错误数是随着P/E提高而增加,而LDPC码参数也会影响迭代次数,进而影响性能,那么就会出现下图中的情况:



上图中有2种ldpc码,当SSD刚买来闪存P/E次数较低时,错误数也很低,2者并没太大区别。而当P/E高了造成闪存错误数提高后,ldpc2的延迟表现比ldpc1更好。那么我们在设置SSD固件LDPC参数的时候就可以这么玩:

1. 固定纠错设置:如果延迟是最重要的,则可以直接在SSD固件中使用ldpc2。
2. 动态纠错设置:如果想要玩好LDPC码,则最好支持动态配置,在闪存出错数较低时用ldpc1,而后期无缝切转换至ldpc2,甚至ldpcN。这样可以灵活的在LDPC码参数和t_read相关的延迟之间进行折衷。

可能有人会说,按照上图这样的话,ldpc2永远都是赢的啊,为什么还要动态切换?是的,但是这里ldpc2相比ldpc1需要占用更多的用户可用空间,这些空间原本是可以用来做为OP降低写放大,做为备用块的等等。

好了,上面说的这些都是LDPC硬数据解码,如果纠错依然失败的话,那么就会进入下一环节。

LDPC码的精髓在于软数据解码



此图为LSI当时在展会中演示的SHIELD纠错技术,当使用的颗粒为3000 P/E的MLC,即使搭载高等级BCH码和LDPC码硬解时,P/E依然突破不了8000,而当切换到SHIELD纠错模式时(软数据LDPC解码),最大P/E颗突破了18000。



在读取闪存时,结果只有1或者0,由于此时并不知道这些0和1中哪个是有效数据,哪些是可疑数据(可能错误的),因此对这些数据进行初次LDPC解码就叫做硬数据解码。在这种情况下,初次解码的性能就会被局限在上面这张表的第二列的值。

如果硬数据LDPC解码失败了,那么对这块SSD来说,只有几个选择,一个是直接返回“不可恢复的读错误”,这当然不是大家希望看到的。那么第二种选择就是,如果SSD内部有类似RAID的保护模式,可以利用该功能XOR并恢复出用户数据。而采用了LDPC码后我们又多出了第三种选择,那就是依靠搜集软数据,再尝试用这些软数据对数据进行软数据LDPC解码。这类解码机制在之前的较为低等级的BCH码上是不存在的,拥有了软数据LDPC解码能力后,我们就可以把纠错性能限制拉到上图中第三列,也意味着SSD可以搭配更烂的颗粒使用。

软数据LDPC解码主要分成三部分,我来依次分析:

1. 重读策略。  2.软数据的构建。  3. 软数据LDPC解码。



重读策略
这里的重读策略不是去读取数据本身(之前硬解已经纠错不能了,就不用浪费力气了),而是去读取这个数据的元数据,把这些元数据做为软数据构建的基础。如何用最少的读取次数搜集出最有帮助的元数据成为了关键,因为每读一次就增加了一次延迟嘛。

软数据的构建
重读策略的每次读取都会返回与等着被纠错的数据相关的元数据,意味着每次读取都提供了更多的物理信息可以参考,然后需要做的是把这些0或者1映射成LDPC解码中的软数据。这个映射需要对闪存本身和所采用的LDPC代码具有相当的认知。(算法精髓部分)

软数据LDPC解码
软数据解码中最后一个步骤就是将代码中每一位的LLR(对数似然比 Log-Likelihood Ratio)传入LDPC解码器逻辑中。期望着这次实现的解码比原有的硬数据解码更为有效,让SSD能够返回正确的用户数据。然后马上将该数据移动至SSD内较为安全的Page里,避免下次数据请求遇到相同的问题。

如果还是不明白的话,举个简单的例子:只告诉你某人身高让你猜他的性别和给你身高、体重、年龄等类似的更多特征数据后是否更容易猜测准确呢?但是这些更多特征数据需要消耗更多的时间去获得。[2]

目前已经采用了LDPC码并已经开售的SSD和未来产品的展望



前段时间有报告Intel把最新的旗舰级NVMe SSD DC P3700的1.6TB和2TB型号容量的官标耐久度从每天10个全盘容量稳定态随机写入悄悄提高到17个全盘容量,后来得到靠谱消息,Intel最新的NVMe SSD控制器硬件支持LDPC码,并在最新的固件里解决了LDPC的一系列问题之后,实现了更高级的纠错能力,优化结果是10->17的worst case耐久度提升。反观台湾厂商慧荣科技宣传的SM2256主控支持LDPC码,搭配TLC可以提高3倍耐久度,硬解不行软解,软解不行RAID恢复,怎么滴强怎么滴牛B,大肆宣传并联合了海力士和金泰克开了个所谓发布会后1个月了产品还是没见到货。


Marvell之后的几款主控都开始支持LDPC码了,不过我相信固件估计还要等个一年半载,这样的话等真正用上了也应该是15nm MLC或者3D TLC时代了。



-------------------------------------------------

注[1]:
1948 年克劳德.香农发表了他著名的划时代论文《通信的一个数学理论》 ,当时他还只是贝尔实验室的一个年轻工程师。 在文章里香农对当时还很模糊的“信息”这个概念下了定义,使其得以量化。按照他的理论,信息的基本单位是比特。 香农证明了对于每一个特定信道, 所能可靠传输的数据量有一个最大值,称之为信道容量,用比特每秒度量。他证明只要按照正确的方式编码就可以几乎无误码地达到信道容量。 这一结果使当时的工程界大吃一惊。 信道容量成为衡量通信系统的“标杆” 。在很多情形下信道容量可以用以下公式表达:C = W log2 (1 + P/N).  其中 C 是信道容量,单位是比特/秒;W 是带宽,以赫兹为单位;P是发射信号功率;N为噪声功率,均以瓦为单位。

香农证明在使用正确的纠错码的条件下,数据可以以接近信道容量的速率几乎无误码地传输,而所需的功率却十分低。 在香农这篇文章以前,工程师们认为要减少误码,要么就得增加发射功率,要么就得反复发送同一段消息—就好像在人声嘈杂的啤酒馆里人们得大声地反复呼叫要啤酒一样。

香农从根本上证明了如果你有正确的编码方案就没有必要浪费那么多能量和时间。在他的发现之后编码理论就发展起来了,研究人员找到了相当好的编码方式。从空间探测到手机和光盘播放器这些使我们的生活更加舒适和丰富多彩的产品和系统里都蕴含着以香农理论为基础的数字技术。香农于2001年2月24日逝世,享年84岁。

注[2]:
几年前苹果收购了以色列厂商Anobit,当时Anobit宣称依靠自家信号处理器MSP和超强纠错能力,可以让MLC提高20倍耐久度。



正巧我在2012年测试过Anobit的SSD,文章在这里:Anobit Genesis T 系列企业级SATA SSD评测

结合上文我们知道LDPC码是非常消耗资源的,特别是软信息的收集需要依靠多次读取增加延迟,处理起来也麻烦,但是软信息越详细的话,纠错能力就会越强。



MSP技术和LDPC技术的搭配保证了MLC拥有企业级需求的耐久度需要。我们可以看到除了中间一个非常大的主控制器外,SSD还有多个协处理器,他们就是用来收集软信息和进行DSP(信号处理,类似把闪存Page的错误数过滤后降低错误数再送进ECC纠错处理,提升效率),这样的设计就能降低主控负担和延迟。很明显要达到Anobit宣传的20倍耐久度提升,这个代价也不小了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1绝对值 +5 收起 理由
111alan + 5

查看全部评分

维他命W 发表于 2015-7-7 23:20 | 显示全部楼层
我昨晚0:00左右就看到这个帖子的标题了……但是稍后消失了……

因此~ 今天我刷了一天的论坛……

感谢楼主系统的介绍 LDPC在SSD的应用。
neeyuese  楼主| 发表于 2015-7-7 23:23 | 显示全部楼层
维他命W 发表于 2015-7-8 01:20
我昨晚0:00左右就看到这个帖子的标题了……但是稍后消失了……

因此~ 今天我刷了一天的论坛……

那时候在打草稿,然后发觉不当心点了发布,内容还没写完就先隐藏了,今天补完后才发布。

guangyunjian 发表于 2015-7-8 00:04 | 显示全部楼层
奈奎斯特定理研究的是理想低通信道情况,依稀记得C=2WLOG2N;
香农公式是理想高斯白噪声干扰的信道情况,香农公式提出的是理论极限,没有实现方法。
NOIP117 发表于 2015-7-8 08:05 | 显示全部楼层
感谢科普
zhangzh0199 发表于 2015-7-8 08:18 | 显示全部楼层
    太好了,很需要这些知识。
dboy99 发表于 2015-7-8 09:06 | 显示全部楼层
LDPC的运算量相当大,估计要用刀ASIC才能游刃有余
neeyuese  楼主| 发表于 2015-7-8 09:42 | 显示全部楼层
dboy99 发表于 2015-7-8 11:06
LDPC的运算量相当大,估计要用刀ASIC才能游刃有余

Soft-based的方案可以把计算量丢给主机的,FPGA照样玩。
FlankerWang 发表于 2015-7-8 09:58 | 显示全部楼层
除了P3700,其他新的企业ssd比如P3600或者三星的1715、HGST的sn100算没有确切消息是否支持还是确定不支持?
dabegen1 发表于 2015-7-8 10:18 | 显示全部楼层
写软件还在用CRC校验的伤不起。境界相差太大。
neeyuese  楼主| 发表于 2015-7-8 10:31 | 显示全部楼层
FlankerWang 发表于 2015-7-8 11:58
除了P3700,其他新的企业ssd比如P3600或者三星的1715、HGST的sn100算没有确切消息是否支持还是确定不支持? ...

Intel的企业级DC P3500/3600/3700甚至消费级750的主控都是支持的,但是不见得有开启优化。另外他们的颗粒都是一样的,只是挑选的标准不同。

三星的1715和HGST的SN100甚至Memblaze和OCZ的NVMe都是PMC方案(Sierra Princeton),只是固件上的区别,具体优化了多少也是未知。

dboy99 发表于 2015-7-8 10:33 | 显示全部楼层
neeyuese 发表于 2015-7-8 09:42
Soft-based的方案可以把计算量丢给主机的,FPGA照样玩。

这也是一个办法,但是这样做的话ssd的通用性会不会大打折扣?
板砖财 发表于 2015-7-8 10:52 | 显示全部楼层
纠错再强,反复读取做LDPC算法,延时也会是大问题吧,就跟840 EVO 850 EVO长时间不通电惨烈读取掉速一样
guangyunjian 发表于 2015-7-8 11:08 | 显示全部楼层
dboy99 发表于 2015-7-8 10:33
这也是一个办法,但是这样做的话ssd的通用性会不会大打折扣?

ASIC能干的FPGA怎么干不了?
FPGA只不过功耗高,成本高。
ASIC是死的,FPGA是活的白纸。
未成熟的方案不会用到ASIC,除非是结构化ASIC,但也只是有弹性,改动过大还是没用。
baymax 发表于 2015-7-8 11:54 | 显示全部楼层
浴室大大是因为我那个提问才写的么?惊喜!太专业了,得漫漫消化
dboy99 发表于 2015-7-8 12:03 | 显示全部楼层
guangyunjian 发表于 2015-7-8 11:08
ASIC能干的FPGA怎么干不了?
FPGA只不过功耗高,成本高。
ASIC是死的,FPGA是活的白纸。

理论上FPGA当然可以干,可是实际上不但要看是否可行,还要看是否有效。

FPGA的灵活性很高,完全可以实现LDPC的硬编码,可是由于LDPC的复杂度很高而且SSD要实现多通道并发处理,从而导致逻辑规模会很大,这样的话只有高端的FPGA才能满足要求。而高端FPGA的价格大家都很清楚,在SSD上使用怎样看都不划算。
zero8177 发表于 2015-7-8 14:55 | 显示全部楼层
guangyunjian 发表于 2015-7-8 11:08
ASIC能干的FPGA怎么干不了?
FPGA只不过功耗高,成本高。
ASIC是死的,FPGA是活的白纸。

最终还是归结到成本和利润。没有利润的事情是很难做下去的。
neeyuese  楼主| 发表于 2015-7-8 15:04 | 显示全部楼层
FPGA要做LDPC的话那个成本上去很多,其实反过来想还不如把这部分成本直接增加在颗粒品质上。
szyzb 发表于 2015-7-8 15:54 | 显示全部楼层
学习专业知识。谢谢分享。
nighttob 发表于 2015-7-8 21:04 | 显示全部楼层
neeyuese 发表于 2015-7-8 15:04
FPGA要做LDPC的话那个成本上去很多,其实反过来想还不如把这部分成本直接增加在颗粒品质上。 ...

然而丧病的企业级厂家们既要颗粒品质还要超高可靠度
拿出的成品也是十分丧病的

http://www.sandisk.cn/about-sandisk/commercial-product-warranty-policy/
大家还都在PB级别挣扎的时候,人家已经到EB的境界了
这可比某些厂家自信多了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部