基于双层RAID信息的增强型纠错方法及深度纠错方法与流程

文档序号:26446259发布日期:2021-08-27 13:47阅读:79来源:国知局
本发明涉及数据存储
技术领域
:,具体涉及一种基于双层raid信息的增强型纠错方法及深度纠错方法。
背景技术
::ssd(solidstatedrive)固态驱动器,俗称固态硬盘,是用固态电子存储芯片阵列而制成的硬盘,通常包含三个大的部分,即ssd主控芯片、存储数据的闪存颗粒阵列以及缓存芯片。固态硬盘具有传统机械硬盘不具备的快速读写、质量轻、能耗低以及体积小等特点,使得其中消费级市场,数据中心和企业级市场中都得到了广泛的应用。闪存颗粒的一个特性就是在寿命周期内会出现不同程度的位反转,为了进一步提高ssd磁盘的寿命,存储厂商会在闪存颗粒之上通过ecc(errorcorrectioncode,随用户数据生成一起写入磁盘)纠错技术纠正位错误。在数据写入时采用ecc编码写入检验位,当数据由于位反转导致错误,读取数据时可以利用ecc检验位校正数据,并把正确数据返回主机。常用的ecc校正机制有bch(bose-chaudhuri-hocquenghem)、rs(reed-solomon)和ldpc(lowdensityparitycheck),可以实现ecc对应纠错能力的数据错误的检验和恢复,如果错误的bit位数超过ecc的纠错能力(称为uncorrectablebiterror),ecc是无法检验恢复的。如果主控芯片中采取了raid(redundantarrayofinexpensivedisks)架构,出现了ecc不可纠的情况可以采用raid机制来恢复。随着闪存颗粒的更新换代,从slc(单层存储单元)、mlc(双层存储单元)到tlc(三层存储单元)、qlc(四层存储单元),单位bit成本越来越低,寿命越来越短,即误码率会变高,对ecc的纠错能力也会要求更高。闪存厂家会在闪存颗粒中设置错误校验码空间(out-of-band,oob空间),纠错算法bch、rs和ldpc的纠错能力会受到oob大小的限制,越来越难满足tlc和qlc闪存的纠错能力要求。公开号为cn112383314b的中国专利公开了“一种基于raid信息的ldpc纠错方法”,该方法的原理是基于ldpc纠错算法的特性,绝大部分的数据在不可纠的状态下,经过ldpc的解码输出数据会比输入数据要好(更接近正确数据);并且,ldpc纠错算法包含每个比特的软信息,再利用raid的xor特性,巧妙的定位出可能出错的比特位,使处理后的数据更准确。经过该方法处理后的数据减轻了ldpc的负担,变相的提高ldpc纠错算法的能力。公开号为cn111679934b的中国专利公开了一种“基于raid信息的纠错方法、计算机可读存储介质及处理器”,该方法的原理是利用nand的vt特性分布,通过移动读阈值可以定位出区域2,即出错概率大的比特位;再利用raid的xor特性,替换出错概率大的比特位,使数据比特位经过处理后自带了置信度,处理后的数据更准确。本发明提出了一种基于双层raid信息的增强型纠错方法及深度纠错方法,也用到了xor操作,虽然三个专利中都有xor操作,但作用点和利用的原理是完全不同的;另外,当遇上一些对于用户来说非常重要的不可纠的数据时,上述两个专利的数据恢复能力方面还存在一定的欠缺。技术实现要素:本发明为了克服以上技术的不足,基于固态存储中有raid的架构,提供了一种基于双层raid信息的增强型纠错方法,通过增加一层raid信息保护即双层raid的思路,使ssd主控芯片的bch或rs或ldpc纠错算法的纠错能力增强,通过部分存储空间换寿命,极大的提高纠错能力,进而大幅度提高闪存颗粒的寿命周期。本发明还提出了一种深度纠错方法。本发明克服其技术问题所采用的技术方案是:一种基于双层raid信息的增强型纠错方法,当闪存颗粒中出现ecc不可纠的错误数据时,采用的纠错方法包括如下步骤:s1、确定ecc不可纠的数据a的地址,设该数据a在横向raid行中的位置位于x,其中1≤x≤n,对应的数据记为datax,该数据a在纵向raid行中的位置位于y’,其中1≤y’≤m’,对应的数据记为datay’,所述datax和datay’都是数据a,为同一份数据;s2、分别计算出经过横向raid行恢复和纵向raid行恢复计算得到的值draid和draid’,所述draid和draid’分别是对横向raid行和纵向raid行进行异或操作后得到的值;s3、对于不可纠的数据a进行重读,得到新的数据datanew,并对datanew进行异或和位与计算得到数据dataanew。进一步地,步骤s2中,draid的数据计算包括如下步骤:根据横向raid行的绑定规则和数据a的地址,计算出同一横向raid行中除了数据a以外的其他所有数据的地址,包括该横向raid行的校验码数据;根据计算得到的地址,读出相应的数据,并将这些数据经过ecc纠错后的输出数据逐一进行异或操作,得到draid,所述draid的运算式如下:draid=dxor_h^data1^data2^…^data(x-1)^data(x+1)^…^datan上式中,dxor_h为横向raid行的校验码数据,所述dxor_h=data1^data2^data3^…^datan,其中n的数量不受限制,^表示按比特位异或。进一步地,步骤s2中,draid’的数据计算包括如下步骤:根据纵向raid行的绑定规则和数据a的地址,计算出同一纵向raid行中除了数据a以外的其他所有数据的地址,包括该纵向raid行的校验码数据;根据计算得到的地址,读出相应的数据,并将这些数据经过ecc纠错后的输出数据逐一进行异或操作,得到draid’,所述draid’的运算式如下:draid’=dxor_v^data1’^data2’^…^data(y-1)’^data(y+1)’^…^datam’上式中,dxor_v为纵向raid行的校验码数据,所述dxor_v=data1’^data2’^data3’^…^datam’,其中m’的数量不受限制,^表示按比特位异或。进一步地,步骤s2中,在分别计算draid和draid’之前,将经过ecc纠错后的输出数据,无论是否出现ecc不可纠的情况,都逐一进行异或操作。进一步地,步骤s3中,dataanew的计算公式为:dataanew=datanew^((draid^datanew)&(draid’^datanew))。进一步地,步骤s3之后还包括步骤s4,所述步骤s4包括:对经过步骤s3处理得到的一帧新的数据再进行ecc解码。进一步地,经过ecc解码后,判断ecc解码是否成功:若成功,直接返回正确的数据;否则,返回解码失败的信息。本发明还提供了一种深度纠错方法,当上述所述的基于双层raid信息的增强型纠错方法对不可纠的数据a恢复失败时,则执行深度纠错方法,所述深度纠错方法包括如下步骤:(1)查找datax所在横向raid行的其他所有不可纠数据;(2)任取一个所在横向raid行的不可纠数据,通过上述所述的基于双层raid信息的增强型纠错方法进行恢复,如果可以恢复,则用恢复出的新数据覆盖之前的错误数据;(3)判断所在横向raid行的不可纠数据是否全部取完:若是,则执行下一步;否则,返回步骤(2)继续取所在横向raid行的不可纠数据;(4)查找datay’所在纵向raid行的其他所有不可纠数据;(5)任取一个所在纵向raid行的不可纠数据,通过上述所述的基于双层raid信息的增强型纠错方法进行恢复,如果可以恢复,则用恢复出的新数据覆盖之前的错误数据;(6)判断所在纵向raid行的不可纠数据是否全部取完:若是,则执行下一步;否则,返回步骤(5)继续取所在纵向raid行的不可纠数据;(7)在更新完所有横向raid行和纵向raid行的数据后,再次执行上述所述的基于双层raid信息的增强型纠错方法。进一步地,步骤(1)-(3)与步骤(4)-(6)的顺序可以调换,即,可以先执行上述所述的步骤(4)-(6),再执行上述所述的步骤(1)-(3),只要保证横向raid行的不可纠数据和纵向raid行的不可纠数据全部取完。本发明的有益效果是:1、本发明通过占用一部分用户空间,建立双层raid架构,基于双层raid的架构和已有的ecc算法,建立了一个新的算法。本发明巧妙的利用双层raid的信息,双层raid中都包含不可纠数据的出错比特位信息,有效标识出了不可纠数据的出错比特位;raid行中也有其他ecc不可纠数据的出错比特位的干扰,但是由于nand出错具有随机性,或者说不同nand在相同的比特位出错的概率十分小,所以经过与操作计算后,干扰会进一步下降,显著的减少nand读出数据的出错比特数。经过本发明方法的计算后,nand读出数据的错误大概率被计算所抵消,引入错误有限,使得nand的读出数据错误比特数大大降低,再经过ssd的纠错算法后,变相的提高了ssd纠错算法的纠错能力,提升了nand颗粒的寿命。2、本发明的方法使得ecc算法不受限制,传统的bch、rs和ldpc算法都适用,适用范围广。3、本发明与公开号为cn112383314b和公开号为cn111679934b的专利相比,至少包括两个创新点,第一,本发明的方法具有特殊的双重raid架构,此架构不仅作为本发明所述基于双层raid信息的增强型纠错方法的基础,还可以满足ssd深度纠错的需求,即不考虑对ssd控制器的读延时和读带宽的影响,尽力将用户数据恢复,这对于用户来说非常重要。第二,本发明利用的是两重raid的xor特性,由于横向raid和纵向raid都包括目标数据,利用“位与”操作可以直接提取目标数据的错误,利用构造这种特殊的双重raid架构以及利用raid的交叉点来提取目标数据的错误,使得处理的过程中标记错误的手段直接而有效,且没有任何限制。虽然本发明与公开号为cn112383314b和公开号为cn111679934b的专利中都有xor操作,但三者的作用点和利用的原理是完全不同的,公开号为cn112383314b的专利依赖ldpc纠错算法的设计,公开号为cn111679934b的专利依赖nand的vt特性分布,本发明最大的好处是仅利用了raid的xor特性,也是最稳定的特性,只要两层raid的架构形成,无论nand是否失效,或者是遇到了特殊的数据,本发明的方法都可以起作用。附图说明图1为本发明实施例所述的基于双层raid信息的增强型纠错方法的流程图。图2为本发明实施例所述的双层raid的分布示意图。具体实施方式为了便于本领域人员更好的理解本发明,下面结合附图和具体实施例对本发明做进一步详细说明,下述仅是示例性的不限定本发明的保护范围。实施例1本发明的实施例1提供了一种基于双层raid信息的增强型纠错方法,本实施例中,不限制闪存控制器中具体采用的是哪个层级的raid结构,只要符合下面所述约束的条件即可。具体地,如图1和图2所示,本实施例所述的一种基于双层raid信息的增强型纠错方法,当闪存颗粒中出现ecc不可纠的错误数据时,采用的纠错方法包括如下步骤:为了实现本实施例所述的纠错方法,需要增加一层raid保护,牺牲一部分nand存储空间。对于m’行raid行可以进行纵向绑定,dxor_v为纵向raid行的校验码数据。m’的大小可以根据用户所能承受的减少的空间来设计,总共的nand存储空间会减少1/(m’+1)的比例。步骤s1、确定ecc不可纠的数据a的地址。具体地,确定ecc不可纠的数据a的地址包括:设该数据a在横向raid行中的位置位于x,其中1≤x≤n,对应的数据记为datax,该数据a在纵向raid行中的位置位于y’,其中1≤y’≤m’,对应的数据记为datay’,所述datax和datay’都是数据a,为同一份数据。步骤s2、分别计算出经过横向raid行恢复和纵向raid行恢复计算得到的值draid和draid’,所述draid和draid’分别是对横向raid行和纵向raid行进行异或操作后得到的值。传统的raid恢复要求除了需要恢复的数据,raid行其他的数据都需要满足不可纠的条件才能raid恢复成功,但是本实施例所述的方法对此没有此限制,即,无论raid行其他的数据是否可纠,都需要参与运算。设dxor_h为横向raid行的校验码数据,所述dxor_h的表达式如下:dxor_h=data1^data2^data3^…^datan上式中,n的数量不受限制,^表示按比特位异或。设dxor_v为纵向raid行的校验码数据,所述dxor_v的表达式如下:dxor_v=data1’^data2’^data3’^…^datam’上式中,m’的数量不受限制,^表示按比特位异或。(1)draid的数据计算包括如下步骤:首先,根据横向raid行的绑定规则和数据a的地址,计算出同一横向raid行中除了数据a以外的其他所有数据的地址,包括该横向raid行的校验码数据都需要重新读一遍;其次,根据计算得到的地址,读出相应的数据,并将这些数据经过ecc纠错后的输出数据(无论是否出现ecc不可纠的情况)逐一进行异或操作,得到draid,所述draid的运算式如下:draid=dxor_h^data1^data2^…^data(x-1)^data(x+1)^…^datan。(2)draid’的数据计算包括如下步骤:首先,根据纵向raid行的绑定规则和数据a的地址,计算出同一纵向raid行中除了数据a以外的其他所有数据的地址,包括该纵向raid行的校验码数据都需要重新读一遍;其次,根据计算得到的地址,读出相应的数据,并将这些数据经过ecc纠错后的输出数据(无论是否出现ecc不可纠的情况)逐一进行异或操作,得到draid’,所述draid’的运算式如下:draid’=dxor_v^data1’^data2’^…^data(y-1)’^data(y+1)’^…^datam’。步骤s3、对于不可纠的数据a进行重读,得到新的数据datanew,并对datanew进行异或和位与计算得到数据dataanew,dataanew为纠错后的新的数据。具体地,所述dataanew的计算公式为:dataanew=datanew^((draid^datanew)&(draid’^datanew))。步骤s4、对经过步骤s3处理得到的一帧新的数据再进行ecc解码。经过上述数据处理之后,形成了一帧新的读出数据,需要对新的读出数据进行解码,所述解码采用现有的ecc解码方法,故此不再赘述。经过ecc解码后,需要判断ecc解码是否成功:若成功,直接返回正确的数据;否则,返回解码失败的信息,然后进入下一流程,下一流程是指控制器的其他流程,由fw来控制,可以是更强的纠错算法,也可以是报错给用户,具体取决于控制器。通过解码后,完成了本实施例所述的基于双层raid信息的增强型纠错方法的整个过程。本发明的关键点在于通过双层raid的信息将不可纠数据的出错的比特位标记出来,并反转。raid行中也有其他ecc不可纠数据的出错比特位的干扰,但是由于nand出错具有随机性,或者说不同nand在相同的比特位出错的概率十分小,所以经过与操作计算后,干扰会进一步下降。经过此种处理之后的数据利用了闪存颗粒出错概率筛选出目标数据的出错比特信息,从而大大提高了纠错算法的能力。实施例2实施例1所述的基于双层raid信息的增强型纠错方法可以解决一般ssd控制器遇到的ecc不可纠的场景,能够保证ssd控制器的正常读写顺利进行。当用户遇到一些非常重要的不可纠的数据时,本实施例提供了一种深度纠错方法,即不考虑对ssd控制器的读延时和读带宽的影响,尽力将用户数据恢复。如图2所示,所述深度纠错方法包括如下步骤:(1)查找datax所在横向raid行的其他所有不可纠数据;(2)任取一个所在横向raid行的不可纠数据,通过实施例1所述的基于双层raid信息的增强型纠错方法进行恢复,如果可以恢复,则用恢复出的新数据覆盖之前的错误数据;(3)判断所在横向raid行的不可纠数据是否全部取完:若是,则执行下一步;否则,返回步骤(2)继续取所在横向raid行的不可纠数据,直至所在横向raid行的不可纠数据全部取完;(4)查找datay’所在纵向raid行的其他所有不可纠数据;(5)任取一个所在纵向raid行的不可纠数据,通过实施例1所述的基于双层raid信息的增强型纠错方法进行恢复,如果可以恢复,则用恢复出的新数据覆盖之前的错误数据;(6)判断所在纵向raid行的不可纠数据是否全部取完:若是,则执行下一步;否则,返回步骤(5)继续取所在纵向raid行的不可纠数据,直至所在纵向raid行的不可纠数据全部取完;(7)在更新完所有横向raid行和纵向raid行的数据后,再次执行实施例1所述的基于双层raid信息的增强型纠错方法。上述,步骤(1)-(3)与步骤(4)-(6)的顺序可以整体调换,即,可以先执行上述所述的步骤(4)-(6),再执行上述所述的步骤(1)-(3),只要保证横向raid行的不可纠数据和纵向raid行的不可纠数据全部取完。本实施例所述的深度纠错方法可以根据需求,依据每一步的结果自由组合,也可以为了恢复数据datax(datay’),依次恢复m’+1行n+1列中所有的不可纠数据,来大大提升不可纠数据datax(datay’)的恢复概率。以上仅描述了本发明的基本原理和优选实施方式,本领域人员可以根据上述描述做出许多变化和改进,这些变化和改进应该属于本发明的保护范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1