首页 > 代码库 > 基于LDPC的下一代SSD控制器的延迟问题

基于LDPC的下一代SSD控制器的延迟问题

基于LDPC的下一代SSD控制器的延迟问题

作者: Stephen Bates

延迟的多变性

        上一篇博文谈到了企业级谈到了企业级SSD控制器中纠错代码(ECCs)正在向低密度奇偶校验(LDPC)转化。文中还暗示到,这一转化将对下一代SSD控制器中的延迟带来深刻的影响,本文将就此作出进一步阐述。                  

     

        SSD中与LDPC ECC相关的延迟主要源于三处:

1.       LDPC编码过程

2.       NAND闪存上与数据首次读出数据相关的LDPC解码过程

3.       NAND闪存上与后续读出数据相关的LDPC解码过程

        高性能SSD中,与第一个源头相关的延迟可以忽略不计。它们通常利用回写缓存等技术而隐藏起来,不为用户所知。然而,与第二个及第三个源头相关的延迟无法对用户隐藏。

        接下来继续将第二个和第三个源头产生的延迟做进一步分析。下表展示了企业级SSD上与随机读相关的若干主要延迟组成要素。有趣的是,其中只有t_readt_ldpc两项具有可变性,并且,t_read的可变性要比t_ldpc大得多(60us vs. 19us)。 

项目

时间(us)

类别(us)

最大值(us)

说明

闪存读时间 (t_read)

60

80

120

当前MLC NAND 闪存常见、具有代表性的数值

转换时间 (t_trans)

10.2

10.2

10.2

假设操作为4KB 读,速度为400MT/s ONFI/TOGGLE.

LDPC 解码时间 (t_ldpc)

1

4

20

假设LDPC 解码器的每次迭代延迟为1us。最少迭代1次,通常迭代4次,最多20次。

        闪存读时间(t_read)的变化部分取决于页面索引(有些页面本质上比其他页面读出要快);其余的则随同一页面的单次读出而随机改变。对于基于LDPC和基于BCHSSD而言,该指标保持一致。

        LDPC解码时间的变化是从闪存解码数据所需迭代次数的函数。LDPC解码器通常采用迭代解码过程,在解码开始时迭代的次数通常是不可知的。常用的方法是给迭代次数设置上限,以便在解码失败时给t_ldpc一定限制。

        LDPC解码中的迭代次数取决于LDPC编码的参数以及NAND闪存上读操作发生区段上的出错数目,注意到这一点有助于我们进一步思考,因为它意味着可以通过控制上述的两项指标中任意一个或者二者来改变t_ldpc

        下图显示出:在多种NAND闪存出错率下,LDPC参数的选择均可以影响并改变t_ldpc

          NAND闪存出错数目很低时,t_ldpc对于ldpc1ldpc2是一样的。但是,随着出错数目的增加,相比ldpc1而言,ldpc2开始表现出较低的延迟(t_ldpc)。在SSD中,可以通过以下两种方式来利用这一发现:

1.       静态 LDPC配置如果想要获得最小化的延迟,则可以在SSD中选择使用ldpc2

2.       动态 LDPC配置如果SSD支持动态配置,则可以在NAND出错率较低时选择ldpc1(即在SSD生命周期伊始),继而随着SSD NAND闪存的老化,转向采用ldpc2

        值得注意的是,任何一个给定SSD控制器,都可能具备两种以上的LDPC代码供其选择,在此情形下,可以灵活地在LDPC代码的参数及与t_read相关的延迟之间进行折衷。

        如果起始的LDPC解码失败了,事情就更妙了。这种情况下,接下去要做的就是回到NAND闪存本身,开始朝软决策LDPC解码的方向努力。本系列博文中的下一篇将会研讨这个问题。