本发明属于固态盘存储技术领域,更具体地,涉及一种基于可变码率的纠错码提高固态盘的可靠性方法。
背景技术:
基于闪存的固态硬盘(solid state disk,简称SSD)是一种以半导体闪存芯片作为存储部件的新型存储设备,由于不包含任何机械部件,与传统机械硬盘相比,固态硬盘在读写性能、功耗、抗震性等方面有着明显的优势。
固态硬盘以闪存芯片作为存储部件。目前,由于单个闪存芯片的容量和性能有限,固态硬盘中一般都整合了多个芯片,并且将芯片以多通道的形式组织起来。除了闪存芯片,固态硬盘中还包括处理器、内存芯片,主机接口管理模块,以及闪存接口管理模块等。固态硬盘的内部结构如图1所示。固态硬盘的主控制器同主机系统之间通过主机接口按照特定的接口协议进行通信,实现对固态硬盘的正确访问。内存一般包括两个部分:动态随机访问存储器(dynamic random access memory,简称DRAM)和静态随机访问存储器(static random access memory,简称SRAM)。DRAM是数据缓冲区,用于存放部分经常访问的数据;SRAM是映射表缓冲区,用于存放部分经常用到的地址映射关系。将部分经常读写的数据和映射关系缓存起来,一方面可以提高固态硬盘整体的读写性能,另一方面可以减少对底层闪存介质的擦/写操作,提高固态硬盘的使用寿命。
随着固态盘中闪存制成工艺的发展,每个单元存储的比特数量增多,造成固态盘容量变大,带来较高存储密度的同时,比特错误率增加,数据可靠性遭到破坏。为了保证数据的可靠性,纠错码被运用到固态盘的控制器中,传统的方法采用同一码率的纠错码来保证数据的整体可靠性,当固态盘闪存块在使用的开始阶段,具有较少数量的擦写循环,比特错误率较低,所需要的冗余比特数量较少(较低能力的纠错码),如果在开始阶段就使用这种同一码率的纠错码会造成一定的空间和相应的计算开销,引起读延迟增加。为了在纠错性能和计算、空间开销之间取得平衡,我们根据闪存块的不同使用情况,采用不同码率的LDPC码来保证数据的可靠性,这种方法可以根据块的使用情况设计最合适码率的LDPC码,不仅保证了数据的可靠性,延长了固态盘的使用寿命,而且节省了一定的开销,提高了纠错性能和译码速度。
然而,现有的纠错算法存在以下几个明显的不足之处:1、现有的固态盘采用同一码率的纠错码来保证固态盘使用的寿命周期中数据的整体可靠性,在固态盘闪存块使用的早期阶段,擦写次数较少,比特错误率较低,这样采用同一码率的纠错码会带来空间和计算开销;2、现有的纠错码算法没有能够充分考虑固态盘中每个块的使用情况和每个块的保存时间,造成较低效率的纠错;3、现有的纠错码算法没有根据每个块经历的不同擦写循环和每个块错误程度的变化设计不同纠错能力(不同码率的纠错码具有不同的纠错能力)的纠错码来提高纠错性能和节省相应的开销。
技术实现要素:
针对现有技术的以上缺陷或改进需求,本发明提供了一种基于可变码率的纠错码提高固态盘的可靠性方法,其目的在于,根据固态盘中闪存块的使用情况和块保存时间的长短设计不同码率的LDPC码,提高数据可靠性和延长固态盘寿命的同时,从而能够有效地降低闪存页的备用区的冗余空间的开销和相应的计算复杂度。
为实现上述目的,按照本发明的一个方面,提供了一种基于可变码率的纠错码提高固态盘的可靠性方法,其特征在于,包括步骤:
(1)接收主机发出的顺序读请求,并根据该顺序读请求获取固态盘闪存块的擦写次数阈值参数N和块的保存时间阈值参数T;
(2)判断要读取的固态盘闪存块的擦写次数是否大于N,如果是,则转入步骤(3),否则转入步骤(13);
(3)判断要读取的固态盘闪存块的保存时间是否大于T,如果是,则转入步骤(4),否则转入步骤(9);
(4)判断该要读取的固态盘闪存块是否已被标记为易出错的块,如果是,则转入步骤(5),否则转入步骤(9);
(5)接收主机发出的顺序读请求,对该固态盘闪存块中的数据进行读取纠正错误,选择具有低码率r2的LDPC码对读取的数据进行纠正,其中r2表示码率;
(6)判断步骤(5)中的软判决译码是否成功,如果是,则转入步骤(7),否则转入步骤(8);
(7)直接进行译码后的码字输出,其中码字就是固态盘闪存页面中的数据比特与LDPC生成的多余比特组成的一个向量;
(8)向用户通知LDPC码字最终译码失败并输出结果;
(9)接收主机发出的顺序读请求,对该固态盘闪存块中的数据进行读取纠正错误,选择具有低码率r2的LDPC码对读取的数据进行纠正;
(10)判断步骤(9)中的硬判决译码是否成功,如果是,则转入步骤(11),否则转入步骤(12);
(11)直接输出被译码的LDPC码字,然后过程结束;
(12)对读取的数据进行软判决译码,如果软判决译码成功,则返回步骤(7),否则返回步骤(8);
(13)接收主机发出的顺序读请求,对该固态盘闪存块中的数据进行读取纠正错误,选择具有高码率r1的LDPC码对读取的数据进行纠正,其中r1表示码率;
(14)判断步骤(13)中的硬判决译码是否执行成功,如果是,则返回步骤(11),否则返回步骤(12)。
优选地,步骤(4)中,如果固态盘闪存块比特错误率在[1×10-3,5×10-3]这个范围,则其为易坏块。
优选地,步骤(5)中,码率等于固态盘闪存块中的页面大小除以该页面大小与LDPC生成多余的比特数据的和,纠正译码方法直接采用软判决译码方法。
优选地,步骤(9)中,纠正译码方法采用硬判决译码方法,低码率指的是LDPC用以纠正错误而生成的多余比特的数量多,从而需要较高能力的LDPC码。
优选地,步骤(13)中,纠正译码方法采用硬判决译码方法,高码率指的是LDPC用以纠正错误而生成的多余比特的数量较少,从而需要较低能力的LDPC码。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
(1)本发明能够根据不同的情况设计不同码率的LDPC码,提高可靠性的同时,降低了空间和计算开销;
(2)本发明在设计相应码率的LDPC码时,能够充分考虑到每个固态盘闪存块经历的不同擦写循环和每个块错误程度以及保存时间的变化。根据特有的情况设计针对性的LDPC码。
(3)本发明能够在提升SSD的使用寿命和数据可靠性的同时,能够在纠错性能、空间和计算开销之间取得最大化的平衡。
附图说明
图1为现有固态硬盘内部结构示意图。
图2为本发明可变码率LDPC码设计结构图。
图3为本发明基于可变码率的纠错码提高固态盘的可靠性方法的流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
本发明的结构设计图如图2所示,不同码率的纠错码方法根据每个块所经历的不同擦写循环,添加不同的冗余比特数量,设计出具有不同纠错能力的纠错码方案,在保证可靠性的同时,最大化的降低空间和计算开销,进而提升译码吞吐量和系统读性能。设计不同码率的纠错码保证数据的可靠性,我们采用的是不同码率的LDPC码,因为LDPC码具有优异的纠错性能,其译码传递的是一种置信息,在译码的同时能够充分考虑通道的特征对译码的影响,能够以最快的方式进行译码,尽可能的降低系统响应时间,提升系统的性能。
本发明设计的不同码率的LDPC码有两个过程,第一是不同码率的LDPC码的编码,第二是不同码率的LDPC码的译码(如图2所示)。首先是进行第一个过程(LDPC码的编码),待编码的数据开始会进入到LDPC码的选择器中,LDPC码选择器会根据块擦写循环记录,该块的保存时间和该块是否是容易出错的块,选择合适的编码方式(高码率r1LDPC码或低码率r2LDPC码),已经被编码的数据会被写入固态盘闪存阵列中(写入到不同的块中),同时被写入数据的块会被标记相应的信息,即是每个块所采用的编码方式信息,这样当数据被读出的时候,被标记的块信息也被同时读出,译码器会根据被读出的块标记信息,进行相应的译码,提高译码的效率。在固态盘闪存块最初开始使用的时候,经历的擦写次数较少,比特错误率相对的较低,我们可以使用较少的冗余比特数量,因为开始阶段只需要较低能力的纠错码,我们采用较高码率的LDPC码,译码时,使用比特翻转译码算法(一种硬判决译码算法),这样在保证可靠性的同时,能够提高译码速度。当块经历了较高的擦写循环时,我们采用较低码率的LDPC码,较低码率的LDPC码具有较多的冗余比特数量从而具有较强的纠错能力,在采用较低码率的同时,不同的译码方法也被采用,如果经历了较高数量擦写循环的块且该块数据的保存时间较长,同时该块又容易出错那我们直接使用LDPC码的软判决译码方法,因为软判决译码具有较好的纠错性能,如果该块具有较高的擦写循环且保存时间较长,但是不容易出错,在译码时,我们可以先采用硬判决译码,如果硬判决译码失败时,我们再采用软判决译码方法,当进行硬判决译码时,我们可以同时进行软判决译码检测,提高并行性,这样一旦硬判决译码失败时,可以直接进行软判决译码,能够节省相应的译码时间,提高译码效率。
本发明是根据不同的环境使用不同码率的LDPC码来保证数据的可靠性,码率和相应的译码方法的选择是根据固态盘闪存块的使用情况、块中数据保存时间长短和块的错误率的情况而定。如图3所示,本发明基于可变码率的纠错码提高固态盘的可靠性方法包括如下步骤:
(1)接收主机发出的顺序读请求,并根据该顺序读请求获取固态盘闪存块的擦写次数阈值参数N(N的取值范围为5000次到7000次)和块的保存时间阈值参数T(T的取值范围为6个月到1年);
(2)判断要读取的固态盘闪存块的擦写次数是否大于N,如果是,则转入步骤(3),否则转入步骤(13);
(3)判断要读取的固态盘闪存块的保存时间是否大于T,如果是,则转入步骤(4),否则转入步骤(9);
(4)判断该要读取的固态盘闪存块是否已被标记为易出错的块,如果是,则转入步骤(5),否则转入步骤(9),其中易出错的块的比特错误率的范围为[1×10-3,5×10-3],如果固态盘闪存块比特错误率属于该范围,就为易坏块;
(5)接收主机发出的顺序读请求,对该固态盘闪存块中的数据进行读取纠正错误,选择具有低码率r2的LDPC码对读取的数据进行纠正,纠正译码方法直接采用软判决译码方法(优选最小和译码方法),其中r2表示码率;具体而言,码率就等于固态盘闪存块中的页面大小(比如2KB)除以该页面大小与LDPC生成多余的比特数据的和,软判决译码就是一种信息传播译码算法,是一种循环迭代译码方法,输入和输出的是比特正确性的概率信息;
(6)判断步骤(5)中的软判决译码是否成功,如果是,则转入步骤(7),否则转入步骤(8);
(7)直接进行译码后的码字输出,其中码字就是固态盘闪存页面中的数据比特与LDPC生成的多余比特组成的一个向量;
(8)向用户通知LDPC码字最终译码失败并输出结果;
(9)接收主机发出的顺序读请求,对该固态盘闪存块中的数据进行读取纠正错误,选择具有低码率r2的LDPC码对读取的数据进行纠正,纠正译码方法采用硬判决译码方法(优选比特翻转译码方法);具体而言,低码率意味着LDPC用以纠正错误而生成的多余比特的数量较多,即需要较高能力的LDPC码;
(10)判断步骤(9)中的硬判决译码是否成功,如果是,则转入步骤(11),否则转入步骤(12);
(11)直接输出被译码的LDPC码字,然后过程结束;
(12)对读取的数据进行软判决译码,如果软判决译码成功,则返回步骤(7),否则返回步骤(8);
(13)接收主机发出的顺序读请求,对该固态盘闪存块中的数据进行读取纠正错误,选择具有高码率r1的LDPC码对读取的数据进行纠正,纠正译码方法采用硬判决译码方法,其中r1表示码率;具体而言,高码率意味着LDPC用以纠正错误而生成的多余比特的数量较少,即需要较低能力的LDPC码;
(14)判断步骤(13)中的硬判决译码是否执行成功,如果是,则返回步骤(11),否则返回步骤(12)。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。