应用于SSD上的基于RAID的多重增强型纠错方法与流程

文档序号:37970692发布日期:2024-05-13 12:18阅读:9来源:国知局
本发明涉及数据存储,具体涉及一种应用于ssd上的基于raid的多重增强型纠错方法。
背景技术
::1、ssd(solid state drive)固态驱动器,俗称固态硬盘,是用固态电子存储芯片阵列而制成的硬盘,通常包含三个大的部分,即ssd主控芯片、存储数据的闪存颗粒阵列以及缓存芯片。固态硬盘具有传统机械硬盘不具备的快速读写、质量轻、能耗低以及体积小等特点,使得其中消费级市场、数据中心和企业级市场中都得到了广泛的应用。2、闪存颗粒的一个特性就是在寿命周期内会出现不同程度的位反转,为了进一步提高ssd磁盘的寿命,存储厂商会在闪存颗粒之上通过ecc(error correction code,随用户数据生成一起写入磁盘)纠错技术纠正位错误。在数据写入时采用ecc编码写入校验位,当数据由于位反转导致错误,读取数据时可以利用ecc校验位校正数据,并把正确数据返回主机。在存储领域业界,常用的ecc校正机制有bch(bose-chaudhuri-hocquenghem)、rs(reed-solomon)和ldpc(low density parity check),可以实现ecc对应纠错能力的数据错误的检验和恢复,如果错误的比特位数超过ecc的纠错能力(称为uncorrectable bit error),ecc是无法检验恢复的。3、随着闪存颗粒的更新换代,从slc(单层存储单元)、mlc(双层存储单元)到tlc(三层存储单元)、qlc(四层存储单元),单位比特成本越来越低,寿命越来越短,即误码率会变高,对ecc的纠错能力也会要求更高。闪存厂家会在闪存颗粒中设置错误校验码空间(out-of-band,oob空间),纠错算法bch的纠错能力会受到oob大小的限制,越来越难满足tlc和qlc闪存的纠错能力要求。4、针对数据要求较高的场景,例如企业级ssd控制器,通常会要求很高的数据纠错能力和解决通道失效的问题。业界通用的纠错算法存在纠错能力不够的问题,普遍的做法是在主控芯片中采取了raid架构作为第二层纠错机制,在出现了ecc不可纠的情况可以采用raid来恢复,有限地提高ecc的纠错能力,目前常用的raid5算法在出现单通道失效的场景下能够复原数据,即只能解决单通道失效的问题,但不能提高系统的数据纠错能力。另外,业界中常用的ldpc+raid5算法的配置,存在ssd控制器纠错能力不够的问题。专利号为zl2022104424604的发明专利“一种应用于ssd上的双层纠错方法”能解决ssd控制器纠错能力不够的问题,但是满足不了单通道失效的问题。5、另外,众所周知,raid5使用单个奇偶校验块来提供冗余容错能力,这意味着如果一块磁盘发生故障,数据可以被重建,但是不能两块磁盘同时故障。raid6在资料储存上,它会针对每一个要储存的档案来产生两份相对应的奇偶校验信息,因此它可以在两颗硬盘同时故障时,在替换的两颗新硬盘里分别还原出原有的资料,来提供比raid5模式更高的资料储存安全性。但是仅仅采用raid架构给ecc带来的纠错能力提升的幅度有限,不能满足企业级客户对数据保护的要求。技术实现思路1、本发明为了克服以上技术的不足,提出了一种应用于ssd上的基于raid的多重增强型纠错方法,该方法通过增加有限的冗余空间,来支持数据组中多份数据失效,能够在现有闪存控制器架构的前提下,提高纠错能力,进而延长nand闪存颗粒的寿命。2、传统的raid6架构通过将x份原始数据,增加2份奇偶校验信息作为冗余数据,这样可以通过任意x份数据还原出2份失效的原始数据,以此获取对双通道失效的保护。本发明基于nand出错是随机比特错误的特点,并借鉴raid6架构,依然通过为x份原始数据增加2份数据作为冗余空间,但是生成2份冗余数据的计算方法与raid6不同,改进后的新的纠错算法不仅保留了raid6的优势,还能够支持双通道失效,而且极大程度地提高了数据纠错能力,对于数据组中多份数据失效也能以较高的概率恢复,使其更适用于ssd企业级架构上,进而大幅度延长了nand闪存颗粒的寿命周期。3、本发明克服其技术问题所采用的技术方案是:4、一种应用于ssd上的基于raid的多重增强型纠错方法,包括第一层纠错方法、第二层纠错方法和第三层纠错方法,三层纠错方法均包括编码过程和解码过程;设每x份原始数据增加2份数据作为冗余数据,设原始数据块为s且包括x份数据,设2份冗余数据分别为p和q,设1份数据的大小为mkb且是第一层纠错方法中使用的纠错算法码长的y倍,1≤x≤128,1≤m≤16,y≥3,x、m和y均为整数;5、通过第二层纠错方法和第三层纠错方法对原始数据块s进行编码,包括:首先对冗余数据p和q进行初始化,然后依次对冗余数据q和p进行更新,其中,对冗余数据p更新时,将原始数据块s进行分组,最后将更新后的冗余数据q和p接在原始数据块s后,组成新的数据块s';6、对数据进行解码,包括:当数据sn通过第一层纠错方法解码失败时,则启动第二层纠错方法进行解码;第二层纠错方法中,首先根据编码过程中对原始数据块s的分组方法,判断sn的同组数据以及对应生成的冗余数据p,然后把同组中除sn数据的其他数据全部读出并进行异或操作,其中,数据sn是新的数据块s'中的某一数据且0≤n≤xy-1;若第二层纠错方法解码成功,则退出,反之,则启动第三层纠错方法;第三层纠错方法中,首先读出数据块s'中除数据sn外的其他所有数据以及冗余数据p和q,分两部分完成;第一部分:将读出的数据复制y份,至少经过左移和异或操作后,再与数据sn进行异或操作,得到y份通过计算获得的关于数据sn的比特翻转信息;第二部分:在读出数据的同时,根据编码过程中对原始数据块s的分组方法,将读出的数据分组并根据组别进行异或操作,然后选取数据sn所在组的结果与数据sn进行异或操作,得到1份通过计算获得的关于数据sn的比特翻转信息;将第一部分和第二部分获得的共y+1份关于数据sn的比特翻转信息分别进行与操作,得到最终的数据sn的比特翻转信息n*,再将读出的数据sn与n*进行异或操作后得到新的数据sn',将新的数据sn'送入第一层纠错方法进行解码。7、进一步地,第一层纠错方法包括但不限于bch、rs、ldpc中的任意一种。8、进一步地,当第一层纠错方法完成编码过程后,接着进行第二层纠错方法和第三层纠错方法的编码过程,其中,第二层纠错方法和第三层纠错方法共同对原始数据块s进行编码,三层纠错方法的编码过程均在执行第一层纠错方法的解码之前完成。9、进一步地,通过第二层纠错方法和第三层纠错方法对原始数据块s进行编码,具体包括如下:10、步骤s1.1:根据第一层纠错方法中使用的纠错算法码长,将原始数据块s编号为s0、s1、s2、…、s(xy-1),将冗余数据p编号为p0、p1、…、p(y-1),将冗余数据q编号为q0、q1、…、q(y-1);11、步骤s1.2:分别对p0、p1、…、p(y-1)和q0、q1、…、q(y-1)进行初始化;12、步骤s1.3:对q0、q1、…、q(y-1)进行更新;13、步骤s1.4:对p0、p1、…、p(y-1)进行更新;14、步骤s1.5:将更新后的冗余数据p和q接在原始数据块s后,组成大小为(x+2)mkb的新的数据块s'。15、进一步地,步骤s1.3中,对q0、q1、…、q(y-1)进行更新,具体包括如下:16、将s0、s1、s2、…、s(xy-1)各复制y份,分别送入y路数据流,先经过数据移动模块分别左移ib、2ib、3ib、…、yib,左移后的数据再分别与对应的q0、q1、…、q(y-1) 按比特位进行异或操作,异或的结果分别更新对应的q0、q1、…、q(y-1),直至s0、s1、s2、…、s(xy-1)全部更新完对应的q0、q1、…、q(y-1)。17、进一步地,步骤s1.3的过程用公式表示如下:18、q0=s0^(s1<<1b)^(s2<<2b)^…^(sn<<nb)^…^(s(xy-1)<<(xy-1)b) (1)19、q1=s0^(s1<<2b)^(s2<<4b)^…^(sn<<2nb)^…^(s(xy-1)<<(2(xy-1))b) (2)20、q2=s0^(s1<<3b)^(s2<<6b)^…^(sn<<3nb)^…^(s(xy-1)<<(3(xy-1))b) (3)21、…22、q(y-1)=s0^(s1<<yb)^(s2<<2yb)^…^(sn<<ynb)^…^(s(xy-1)<<(y(xy-1))b)(4)。23、进一步地,步骤s1.4中,对p0、p1、…、p(y-1)进行更新,具体包括如下:24、步骤s1.41:将s0、s1、s2、…、s(xy-1) 按顺序等分成y组,每组中包括x份数据;25、步骤s1.42:将经过步骤s1.41把s0、s1、s2、…、s(xy-1)分成的每组数据分别与p0、p1、…、p(y-1) 按比特位进行异或操作,直至s0、s1、s2、…、s(xy-1)中的所有数据与p0、p1、…、p(y-1) 按比特位进行异或操作完毕;26、步骤s1.43:通过步骤s1.3得到的更新后的q0、q1、…、q(y-1)分别对步骤s1.42得到的p0、p1、…、p(y-1)再进行更新,具体是,q0、q1、…、q(y-1)分别与对应的p0、p1、…、p(y-1) 按比特位进行异或操作,完成对p0、p1、…、p(y-1)的数据更新。27、进一步地,步骤s1.4的过程用公式表示如下:28、p0=s0^(y^…^s((x-1)y)^q0 (5)29、p1=s1^s(y+1)^…^s((x-1)y+1)^q1 (6)30、p2=s2^s(y+2)^…^s((x-1)y+2)^q2 (7)31、…32、p(y-1)=s(y-1)^s(2y-1)^…^s(xy-1)^q(y-1) (8)。33、进一步地,对数据进行解码,具体包括如下:34、步骤s2.1:当数据sn通过第一层纠错方法解码失败时,则启动第二层纠错方法对数据sn进行解码;35、步骤s2.2:预设中间变量eq0、eq1、eq2、…、eq(y-1)并进行初始化;36、步骤s2.3:根据数据sn的地址和数据sn在新的数据块s'中的序号,判断出数据sn会参与生成数据p的哪部分数据,假设数据sn参与生成数据pa,其中,a为n除以y得到的余数,0≤a≤y-1;37、步骤s2.4:根据数据pa的计算公式,判断除数据sn以外的所有参与数据pa计算的数据的地址和数据pa的地址;38、步骤s2.5:将步骤s2.4计算得到的所有地址取出,根据地址读出相应的数据进行解码:如果该数据解码成功,则将该数据与对应的eqa按比特位进行异或操作,其中,eqa为eq0、eq1、eq2、…、eq(y-1)中的数据;如果该数据解码失败,则转到步骤s2.7;39、步骤s2.6:当步骤s2.5的地址全部取完,则eqa更新完毕,解码成功并退出;40、步骤s2.7:启动第三层纠错方法,再预设中间变量r0'、r1'、r2'、…、r(y-1)',并对中间变量r0'、r1'、r2'、…、r(y-1)'以及步骤s2.2预设的中间变量eq0、eq1、eq2、…、eq(y-1)全部进行初始化;41、步骤s2.8:根据数据sn的地址和数据绑定规则,计算得到包含数据sn的新的数据块s'的所有数据的地址;42、步骤s2.9:将步骤s2.8计算得到的地址取出,并删除数据sn的地址,得到数据si,其中,0≤i≤xy-1且i≠n,然后对r0'、r1'、r2'、…、r(y-1)'进行更新;43、步骤s2.10:对eq0、eq1、eq2、…、eq(y-1)进行更新;44、步骤s2.11:通过步骤s2.3中得到的数据sn参与生成数据pa,选出对应的eqa;45、步骤s2.12:根据数据sn的地址读出数据sn,将数据sn分别与r0'、r1'、r2'、…、r(y-1)'和eqa按比特位进行异或操作,然后再按比特位进行与操作,得到数据sn的比特翻转信息n*;46、步骤s2.13:将步骤s2.12读出的数据sn与步骤s2.12计算得到的n*按比特位进行异或操作后,得到新的数据sn',将新的数据sn'送入第一层纠错方法进行解码。47、进一步地,中间变量eq0、eq1、eq2、…、eq(y-1)和中间变量r0'、r1'、r2'、…、r(y-1)'均包括y份数据,eq0、eq1、eq2、…、eq(y-1)中的每1份数据的大小和r0'、r1'、r2'、…、r(y-1)'中的每1份数据的大小均与数据sn的大小相同。48、进一步地,步骤s2.9中,将步骤s2.8计算得到的地址取出,并删除数据sn的地址,得到数据si,其中,0≤i≤xy-1且i≠n,然后对r0'、r1'、r2'、…、r(y-1)'进行更新,具体包括如下:49、步骤s2.91:依次取出所有数据si的地址,根据地址读出对应的数据,即si,将数据si各复制y份,分别送入y路数据流,然后送入数据移动模块,按照i的值分别左移ib、2ib、…、yib;50、步骤s2.92:将步骤s2.91左移后的数据分别与对应的r0'、r1'、r2'、…、r(y-1)'按照比特位进行异或操作,异或的结果更新r0'、r1'、r2'、…、r(y-1) ';51、步骤s2.93:判断所有的数据si的地址是否都取完:若是,则执行下一步,若否,则返回步骤s2.91;52、步骤s2.94:取出经过步骤s2.8得到的数据块s'中所有冗余数据的地址,将对应的数据读出,即,p0、p1、…、p(y-1)和q0、q1、…、q(y-1);53、步骤s2.95:将步骤s2.94中读出的冗余数据q0、q1、…、q(y-1)分别与经过步骤s2.92得到的r0'、r1'、r2'、…、r(y-1) '按照比特位进行异或操作,异或的结果更新r0'、r1'、r2'、…、r(y-1) ';54、步骤s2.96:将步骤s2.95得到的r0'、r1'、r2'、…、r(y-1)'送入数据移动模块,分别右移nb、2nb、…、ynb,右移后的结果更新r0'、r1'、r2'、…、r(y-1)',完成对r0'、r1'、r2'、…、r(y-1)'的更新。55、进一步地,步骤s2.9的过程用公式表示如下:56、r0'=(s0^(s1<<1b)^(s2<<2b)^…^(s(n-1)<<(n-1)b)^(s(n+1)<<(n+1)b)^…^(s(xy-1)<<(xy-1)b)^q0)>>nb (9)57、r1'= (s0^(s1<<2b)^(s2<<4b)^…^(s(n-1)<<2(n-1)b)^(s(n+1)<<2(n+1)b)^…^(s(xy-1)<<2(xy-1)b)^q1)>>2nb (10)58、r2'= (s0^(s1<<3b)^(s2<<6b)^…^(s(n-1)<<3(n-1)b)^(s(n+1)<<3(n+1)b)^…^(s(xy-1)<<3(xy-1)b)^ q2)>>3nb (11)59、…60、r(y-1)'= (s0^(s1<<yb)^(s2<<2yb)^…^(s(n-1)<<y(n-1)b)^s(n+1)<<y(n+1)b)^…^(s(xy-1)<<y(xy-1)b)^q(y-1))>>ynb (12)。61、进一步地,步骤s2.10中,对eq0、eq1、eq2、...、eq(y-1)进行更新,具体包括如下:62、步骤s2.101:将步骤s2.9取出的数据si,依次送入到p解码模块中,按照同余规则,分别与对应的eq0、eq1、eq2、...、eq(y-1) 按照比特位进行异或操作;63、步骤s2.102:判断经过步骤s2.9得到的所有的数据si的地址是否都取完:若是,则进行下一步;否则,返回步骤s2.101;64、步骤s2.103:将读出的冗余数据p和q与对应的eq0、eq1、eq2、...、eq(y-1)按照比特位进行异或操作,得到的结果更新eq0、eq1、eq2、...、eq(y-1)。65、进一步地,步骤s2.10的过程用公式表示如下:66、eqz=sz1^sz2^sz3^…^szx^qz^pz (13)67、其中,0≤z≤y-1,0≤z1≤y-1且z1≠n,y≤z2≤2y-1且z2≠n,2y≤z3≤3y-1且z3≠n,…,(x-1)y≤zx≤xy-1且zx≠n。68、进一步地,步骤s2.12中,数据sn的比特翻转信息n*的计算过程用公式表示如下:69、n* = (r0'^sn)&(r1'^sn)&(r2'^sn)&…&(r(y-1)'^sn)&(eqa^sn) (14)。70、进一步地,步骤s2.13中,新的数据sn'的计算公式如下:71、sn' = sn^n* (15)。72、本发明的有益效果是:73、1、配置灵活,可以通过控制x的大小来满足客户对冗余空间的设定,以便在纠错能力和冗余空间两者中达到平衡;可以通过控制y的大小来满足不同的第一层纠错方法的码长的设置。74、2、可以保护双通道失效的场景,对数据的保护能力更强。75、3、纠错性能高,例如:即使在nand生命末期,在每14份数据生成2份冗余码的配置下,不仅可以万无一失地保护其中2份数据,并且可以纠正14份原始数据中出现7至8份数据出错的场景;相比常用的算法raid5和raid6只能纠正单位数据中出现1份或2份通道失效的场景,本发明极大地提高了纠错能力,延长了闪存颗粒的寿命。76、4、本发明与raid架构有相同点,都是对设定好的数据块进行绑定操作。但是本发明对数据块的选择更加灵活,raid架构对数据块进行绑定时会考虑不同的数据块分布在不同的nand核或者不同的通道中,以降低一个数据块中出现纠错失败的数据的个数。但是本发明中没有这种限制,数据块中不同的数据可以集中在一个block中,甚至是一个page中,都会有很好的效果。77、从理论和实验的结果看来,本发明的方法极大地增强了传统ssd纠错算法的纠错能力,延长了闪存颗粒的寿命。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1