CN114550806A - 一种应用于ssd上的双层纠错方法 - Google Patents
一种应用于ssd上的双层纠错方法 Download PDFInfo
- Publication number
- CN114550806A CN114550806A CN202210442460.4A CN202210442460A CN114550806A CN 114550806 A CN114550806 A CN 114550806A CN 202210442460 A CN202210442460 A CN 202210442460A CN 114550806 A CN114550806 A CN 114550806A
- Authority
- CN
- China
- Prior art keywords
- data
- error correction
- correction method
- layer
- layer error
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/38—Response verification devices
- G11C29/42—Response verification devices using error correcting codes [ECC] or parity check
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1068—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Error Detection And Correction (AREA)
- Detection And Correction Of Errors (AREA)
Abstract
本发明公开了一种应用于SSD上的双层纠错方法,包括第一层纠错方法和第二层纠错方法,两层纠错方法均包括编码过程和解码过程,设每x份原始数据增加1份数据作为冗余数据,首先通过第二层纠错方法对原始数据块进行编码,当数据Sn通过第一层纠错方法发生解码失败时,启动第二层纠错方法对Sn进行解码,得到新的数据Sn',将Sn'再送入第一层纠错方法进行解码,由于在第二层纠错方法的解码计算时,已经消除了数据Sn绝大多数的比特翻转错误,所以再次经过第一层纠错方法的解码成功的概率很大。本发明的双层纠错方法使得成本开销得到了有效的控制,并且纠错能力大幅度增强,进而大幅度延长闪存颗粒的寿命周期。
Description
技术领域
本发明涉及数据存储技术领域,具体涉及一种应用于SSD上的双层纠错方法。
背景技术
SSD(Solid State Drive)固态驱动器,俗称固态硬盘,是用固态电子存储芯片阵列而制成的硬盘,通常包含三个大的部分,即SSD主控芯片、存储数据的闪存颗粒阵列以及缓存芯片。固态硬盘具有传统机械硬盘不具备的快速读写、质量轻、能耗低以及体积小等特点,使得其中消费级市场、数据中心和企业级市场中都得到了广泛的应用。
闪存颗粒的一个特性就是在寿命周期内会出现不同程度的位反转,为了进一步提高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是无法检验恢复的。对于纠错能力要求较高的场景,例如企业级SSD控制器,业界通用的纠错算法存在纠错能力不够的问题,这就需要在通用的纠错算法之后增加一层算法来解决纠错能力不够的问题。业界中常用的第二层算法是RAID算法,它能解决SSD控制器纠错能力不够,SSD单通道失效的问题。
但是众所周知,RAID5增加一份冗余数据块,能恢复一份数据块错误,RAID6增加两份冗余数据块,能恢复两份数据块错误。RAID架构纠错能力提升的幅度有限,而且纠错能力提升的幅度跟冗余空间设置的大小有关,带来极大的成本开销。例如,传统的RAID算法作为传统的纠删码EC(Erasure Code),将x份原始数据,增加y份数据作为冗余空间,并能通过x+y份中的任意x份数据还原出原始数据。该方法的存储成本是1+y/x,通常y<x,也就是说通过增大存储成本,来换取支持数据中y个盘失效,这种方法的成本开销很大。
发明内容
本发明为了克服以上技术的不足,提供了一种应用于SSD上的双层纠错方法,第二层纠错方法通过将每x份原始数据增加1份数据作为冗余数据,来换取支持多个盘失效,使得成本开销得到了有效的控制,并且纠错能力大幅度增强,进而大幅度延长闪存颗粒的寿命周期。
本发明克服其技术问题所采用的技术方案是:
一种应用于SSD上的双层纠错方法,包括第一层纠错方法和第二层纠错方法,两层纠错方法均包括编码过程和解码过程,设每x份原始数据增加1份数据作为冗余数据,设1份数据的大小为mKB且是第一层纠错方法中使用的纠错算法码长的y倍,1≤x≤128,1≤m≤16,y≥3,x、m和y均为整数;原始数据块S的大小为xmKB,根据第一层纠错方法中使用的纠错算法码长将原始数据块编号为S0、S1、S2、…、S(xy-1),冗余数据Q的大小为mKB,将冗余数据编号为Q0、Q1、…、Q(y-1);
通过第二层纠错方法对原始数据块S进行编码,编码过程包括:
首先,对Q0、Q1、…、Q(y-1)初始化;其次,将S0、S1、S2、…、S(xy-1)各复制y份分别送入y路数据流,依次进行移位操作,再与对应的Q0、Q1、…、Q(y-1)进行异或操作,异或的结果分别更新对应的Q0、Q1、…、Q(y-1),直至S0、S1、S2、…、S(xy-1)更新完对应的Q0、Q1、…、Q(y-1);最后,将冗余数据Q接在原始数据块S后,组成大小为(x+1)mKB的新的数据块;
当数据Sn通过第一层纠错方法发生解码失败时,启动第二层纠错方法对Sn进行解码,其中,数据Sn是经过第二层纠错方法编码后的新的数据块中的某一数据且0≤n≤xy-1,解码过程包括:
首先,计算得到包含数据Sn的数据块地址,按照数据块地址读出Si和冗余数据Q,0≤i≤xy-1且i≠n;其次,预设中间变量R0'、R1'、R2'、…、R(y-1)'并对其进行初始化;将Si各复制y份分别送入y路数据流,依次进行移位操作,再分别与R0'、R1'、R2'、…、R(y-1)'进行异或操作,并更新R0'、R1'、R2'、…、R(y-1)';Si计算完成后,送入冗余数据Q,与对应的数据流的R0'、R1'、R2'、…、R(y-1)'进行异或操作,并更新R0'、R1'、R2'、…、R(y-1)';然后,将R0'、R1'、R2'、…、R(y-1)'进行移位操作,完成R0'、R1'、R2'、…、R(y-1)'的计算;接着,将Sn分别与R0'、R1'、R2'、…、R(y-1)'进行异或操作后,再进行与操作,得到Sn的比特翻转信息n*;最后,将Sn与n*进行异或操作后,再送入第一层纠错方法进行解码。
进一步地,第一层纠错方法包括但不限于BCH、RS、LDPC中的任意一种。
进一步地,当第一层纠错方法完成编码过程后,接着进行第二层纠错方法的编码过程,两层纠错方法的编码过程均在执行第一层纠错方法的解码之前完成。
进一步地,通过第二层纠错方法对原始数据块S进行编码,具体包括:
步骤101、将Q0、Q1、…、Q(y-1)初始化为0;
步骤102、将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);
步骤103、通过增补模块将冗余数据Q接在原始数据块S后,组成大小为(x+1)m KB的新的数据块。
进一步地,步骤102的过程用公式表示如下:
Q0=S0^(S1<<1B)^(S2<<2B)^…^(Sn<<nB)^…^(S(xy-1)<<(xy-1)B) (1)
Q1=S0 ^ (S1<<2B) ^ (S2<<4B) ^…^ (Sn<<2nB)^…^ (S(xy-1)<< (2 (xy-1))B) (2)
Q2=S0 ^ (S1<<3B) ^ (S2<<6B) ^…^ (Sn<<3nB)^…^ (S(xy-1)<<(3 (xy-1))B)(3)
…
Q(y-1)=S0^(S1<<yB)^(S2<<2yB)^…^(Sn<<ynB)^…^(S(xy-1)<<(y(xy-1))B)(4)。
进一步地,通过第二层纠错方法对数据Sn进行解码,具体包括:
步骤201、预设中间变量R0'、R1'、R2'、…、R(y-1)'并将其初始化为0;
步骤202、根据数据Sn的地址和第二层纠错方法的数据块绑定规则,计算得到包含数据Sn的数据块地址,包括数据Si的地址和数据Qj的地址,并删除数据Sn的地址,其中,0≤i≤xy-1且i≠n,0≤j≤y-1;
步骤203、依次取出步骤202计算得到的所有数据Si的地址,根据地址读出对应的数据,即Si,将Si各复制y份,分别送入y路数据流,然后送入数据移动模块,按照i的值分别左移iB、2iB、…、yiB;
步骤204、将步骤203左移后的数据分别与对应的R0'、R1'、R2'、…、R(y-1)'按照比特位进行异或操作,异或的结果更新R0'、R1'、R2'、…、R(y-1)';
步骤205、判断步骤202中得到的数据Si是否都完成计算:若是,则执行下一步,若否,则返回步骤203;
步骤206:取出步骤202计算得到的所有数据Qj的地址,根据地址读出对应的数据,即Qj,将Qj与对应的R0'、R1'、R2'、…、R(y-1)'按照比特位进行异或操作,异或的结果更新R0'、R1'、R2'、…、R(y-1)';
步骤207、将步骤206得到的R0'、R1'、R2'、…、R(y-1)'送入数据移动模块,分别右移nB、2nB、…、ynB,结果更新R0'、R1'、R2'、…、R(y-1)',完成R0'、R1'、R2'、…、R(y-1)'的计算;
步骤208、根据Sn的地址读出数据Sn,将数据Sn分别与步骤207得到的R0'、R1'、R2'、…、R(y-1)'进行异或操作后,再进行与操作,得到Sn的比特翻转信息n*;
步骤209、将步骤208读出的数据Sn与步骤208计算得到的n*进行异或操作,得到新的数据Sn',将Sn'送入第一层纠错方法进行解码。
进一步地,中间变量R0'、R1'、R2'、…、R(y-1)'为y份数据,其每1份数据的大小与数据Sn的大小相同。
进一步地,通过步骤203、步骤204、步骤206和步骤207中的左移操作、异或操作和右移操作对R0'、R1'、R2'、…、R(y-1)'进行计算的公式表示如下:
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 (5)
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 (6)
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 (7)
…
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 (8)。
进一步地,步骤208中,Sn的比特翻转信息n*的计算过程用公式表示如下:
n* = (R0'^Sn) & (R1'^Sn) & (R2'^Sn) &…& (R(y-1)'^Sn) (9)。
进一步地,步骤209中,新的数据Sn'的计算公式如下:
Sn' = Sn^ n* (10)。
本发明的有益效果是:
1、配置灵活,可以根据客户的需求配置第二层纠错算法所需要的冗余空间。
2、纠错性能高,比如,即使在NAND生命末期,在每16份数据生成1份冗余码的配置下,可以纠正16份数据中出现6~7份数据不可纠的场景,相比较常用算法RAID5和RAID6只能纠正单位数据中出现1份和2份数据不可纠的场景,本发明极大的提高了纠错能力,延长了闪存颗粒的寿命。
3、本发明与RAID架构有相同点,都是对设定好的数据块进行绑定操作。但是本发明对数据块的选择更加灵活,RAID架构对数据块进行绑定时会考虑不同的数据块分布在不同的NAND核或者不同的通道中,以降低一个数据块中出现纠错失败的数据的个数;但是本发明没有这种限制,数据块中不同的数据可以集中在一个Block中,甚至是一个page中,都会取得很好的效果。
从理论和实验的结果看来,本发明的纠错方法极大的增强了传统SSD纠错算法的纠错能力,延长了闪存颗粒的寿命。
附图说明
图1为本发明所述的第二层纠错方里法的编码过程的原理图。
图2为本发明实施例举例说明的第二层纠错方法的编码过程原理图。
图3为本发明所述的第二层纠错方法的解码过程的原理图。
图4为本发明实施例举例说明的第二层纠错方法的解码过程原理图。
图5为本发明所述的第二层纠错方法的解码过程的流程图。
图6为本发明实施例举例说明的第二层纠错方法的解码过程的流程图。
具体实施方式
为了便于本领域人员更好的理解本发明,下面结合附图和具体实施例对本发明做进一步详细说明,下述仅是示例性的不限定本发明的保护范围。
如图1-图6所示,本发明公开了一种应用于SSD上的双层纠错方法,包括第一层纠错方法和第二层纠错方法,两层纠错方法均包括编码过程和解码过程,其中,第一层纠错方法采用现有的纠错方法,包括但不限于BCH、RS、LDPC中的任意一种,由于第一层纠错方法的编码和解码过程都是现有的,此处不再赘述。
本发明最主要的创新点在于第二层纠错方法,第二层纠错方法的编码过程和解码过程均是本发明的创新之处。所述第二层纠错方法通过将每x份原始数据增加1份数据作为冗余数据,来换取支持多个盘失效,使得成本开销得到了有效的控制,并且纠错能力大幅度增强,进而大幅度提高闪存颗粒的寿命周期。
本发明所述的第二层纠错方法中,设每x份原始数据增加1份数据作为冗余数据,x的取值可以由客户自定义,按照客户能接受的冗余比例来设置,本发明中优选1≤x≤128;设1份数据的大小为mKB,1份冗余数据的大小和1份原始数据的大小都是mKB,理论上m的取值只要是正整数都可以,但如果m的取值过大,硬件实现的复杂度会增大,不利于硬件实现,故本发明取1≤m≤16;另外一个限制是,1份数据的大小是第一层纠错方法中使用的纠错算法码长的y倍,本发明取y≥3,如果y小于3,应用第二层纠错方法的纠错能力会大大降低,如果y值太大,硬件实现太复杂,一般来说,y取值为4是最佳值。此外,x、m和y均为整数。
设原始数据块S包括x份原始数据,则其大小为xmKB,根据第一层纠错方法中使用的纠错算法码长将原始数据块编号为S0、S1、S2、…、S(xy-1);冗余数据Q的大小为mKB,将冗余数据编号为Q0、Q1、…、Q(y-1)。
一、第二层纠错方法的编码过程:
当第一层纠错方法完成编码过程后,接着进行第二层纠错方法的编码过程,两层纠错方法的编码过程均在执行第一层纠错方法的解码之前完成,本实施例中,通过第二层纠错方法对原始数据块S进行编码,如图1所示,图1中的DU是数据移动模块,本实施例中的左移或右移都是指循环左移或循环右移,比如:数据a为4B数据,其中a0、a1、a2、a3为1B数据,a={a0,a1,a2,a3},a<<1B={a1,a2,a3, a0}。
通过第二层纠错方法对原始数据块S进行编码,具体包括:
步骤101、将Q0、Q1、…、Q(y-1)初始化为0,目的是在后面进行更新时,不会受到初始值的干扰。
步骤102、将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),用公式表示如下:
Q0=S0^(S1<<1B)^(S2<<2B) ^…^ (Sn<<nB)^…^(S(xy-1)<<(xy-1)B) (1)
Q1=S0 ^ (S1<<2B) ^ (S2<<4B) ^…^ (Sn<<2nB)^…^ (S(xy-1)<< (2 (xy-1))B) (2)
Q2=S0 ^ (S1<<3B) ^ (S2<<6B) ^…^ (Sn<<3nB)^…^ (S(xy-1)<<(3 (xy-1))B)(3)
…
Q(y-1)=S0 ^ (S1<<yB) ^ (S2<<2yB) ^…^ (Sn<<ynB)^…^ (S(xy-1)<<(y (xy-1))B) (4)
其中,n的取值是0≤n≤xy-1。
步骤103、通过增补模块将冗余数据Q接在原始数据块S后,组成大小为(x+1)m KB的新的数据块,新的数据块用于第二层纠错方法。
下面通过一个具体实例对第二层纠错方法对原始数据块S进行编码的过程进行详细描述,不失一般性的,本实施例取x=15,m=4,y=4,那么原始数据块S的大小是15*4KB,假设第一层纠错方法中使用的纠错算法码长为1KB,那么每一份4KB的数据可以分成4个第一层纠错方法中使用的纠错算法的码长。以第一层纠错方法中使用的纠错算法码长为单元,给原始数据块编号为S0、S1、S2、…、S59;最终增加的冗余数据为Q,大小为4KB,编号为Q0、Q1、Q2、Q3。上述取值只是一个举例,本发明所述的纠错方法并不限于该取值,不作为对本发明所述纠错方法的限制。如图2所示,具体包括:
步骤101、将Q0、Q1、Q2、Q3初始化为0。
步骤102、将S0复制4份,分别送入4路数据流,先送入数据移动模块进行左移,分别左移0B、0B、…、0B,即S0不左移,因为S0的序号为0,再分别送入按比特异或模块中与对应的Q0、Q1、Q2、Q3 按比特位进行异或操作,异或的结果分别更新对应的Q0、Q1、Q2、Q3;
将S1复制4份,分别送入4路数据流,先送入数据移动模块进行左移,分别左移1B、2B、3B、4B,左移后的数据再分别送入按比特异或模块中与对应的Q0、Q1、Q2、Q3按比特位进行异或操作,异或的结果分别更新对应的Q0、Q1、Q2、Q3;
将S2复制4份,分别送入4路数据流,先送入数据移动模块进行左移,分别左移2B、4B、3B、4B,左移后的数据再分别送入按比特异或模块中与对应的Q0、Q1、Q2、Q3按比特位进行异或操作,异或的结果分别更新对应的Q0、Q1、Q2、Q3;
以此类推,直至S59更新完对应的Q0、Q1、Q2、Q3。
步骤102的过程用公式表示如下:
Q0=S0 ^ (S1<< 1B) ^ (S2<<2B) ^ …^ (Sn<<nB)^ …^ (S59<< 59B) (1-1)
Q1=S0 ^ (S1<<2B) ^ (S2<<4B) ^ …^ (Sn<<2nB)^ …^ (S59<< 118B) (2-1)
Q2=S0 ^ (S1<<3B) ^ (S2<<6B) ^ …^ (Sn<<3nB)^ …^ (S59<<177B) (3-1)
Q3=S0 ^ (S1<<4B) ^ (S2<<8B) ^ …^ (Sn<<4nB)^ …^ (S59<<236B) (4-1)
其中,n的取值范围是0≤n≤59。
步骤103、通过增补模块将冗余数据Q接在原始数据块S后,组成大小为60 KB的新的数据块,将所述新的数据块用于第二层纠错方法。
二、第二层纠错方法的解码过程:
当数据Sn通过第一层纠错方法发生解码失败时,启动第二层纠错方法对Sn进行解码,其中,数据Sn是经过第二层纠错方法编码后的新的数据块中的某一数据且0≤n≤xy-1,如图3和5所示,解码过程包括:
步骤201、预设中间变量R0'、R1'、R2'、…、R(y-1)'并将其初始化为0,所述中间变量R0'、R1'、R2'、…、R(y-1)'为y份数据,其每1份数据的大小与数据Sn的大小相同,将中间变量初始化为0的目的是在后面进行更新时,不会受到初始值的干扰。
步骤202、根据数据Sn的地址和第二层纠错方法的数据块绑定规则,计算得到包含数据Sn的数据块地址,包括数据Si的地址和数据Qj的地址,并删除数据Sn的地址,其中,0≤i≤xy-1且i≠n,0≤j≤y-1。实际上,步骤202与步骤201可以调换顺序,先执行哪一个均可以。
步骤203、依次取出步骤202计算得到的所有数据Si的地址,根据地址读出对应的数据,即Si,将Si各复制y份,分别送入y路数据流,然后送入数据移动模块,按照i的值分别左移iB、2iB、…、yiB。
步骤204、将步骤203左移后的数据分别与对应的R0'、R1'、R2'、…、R(y-1)'按照比特位进行异或操作,异或的结果更新R0'、R1'、R2'、…、R(y-1)'。
步骤205、判断步骤202中得到的数据Si是否都完成计算:若是,则执行下一步,若否,则返回步骤203。
步骤206:取出步骤202计算得到的所有数据Qj的地址,根据地址读出对应的数据,即Qj,将Qj与对应的R0'、R1'、R2'、…、R(y-1)'按照比特位进行异或操作,异或的结果更新R0'、R1'、R2'、…、R(y-1)'。
步骤207、将步骤206得到的R0'、R1'、R2'、…、R(y-1)'送入数据移动模块,分别右移nB、2nB、…、ynB,结果更新R0'、R1'、R2'、…、R(y-1)',完成R0'、R1'、R2'、…、R(y-1)'的计算。
步骤208、根据Sn的地址读出数据Sn,将数据Sn分别与步骤207得到的R0'、R1'、R2'、…、R(y-1)'进行异或操作后,再进行与操作,得到Sn的比特翻转信息n*。
步骤209、将步骤208读出的数据Sn与步骤208计算得到的n*进行异或操作,得到新的数据Sn',将Sn'送入第一层纠错方法进行解码,由于在第二层纠错方法的解码计算时,已经消除了数据Sn绝大多数的比特翻转错误,所以再经过第一层纠错方法的解码成功的概率很大。自此,第二层解码步骤完成。
整个解码过程用公式表示如下:
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 (5)
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 (6)
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 (7)
…
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 (8)
n* = (R0'^Sn) & (R1'^Sn) & (R2'^Sn) &…& (R(y-1)'^Sn) (9)
Sn' = Sn^ n* (10)
下面通过一个具体实例对第二层纠错方法的解码过程进行详细描述,解码过程与编码过程相对应,x=15,m=4,y=4;当数据S10通过第一层纠错方法发生解码失败时,本实施例只是举例说明S10通过第一层纠错方法中发生解码失败,n也可以取其他值,仅是示例而已,不作为对n的限制,解码过程如图4和图6所示,具体包括如下:
步骤201、预设中间变量R0'、R1'、R2'、R3'并将其初始化为0,所述中间变量R0'、R1'、R2'、R3'为4份数据,其每1份数据的大小与数据S10的大小相同。
步骤202、根据数据S10的地址和第二层纠错方法的数据块绑定规则,计算得到包含数据S10的数据块地址,包括数据Si的地址和数据Qj的地址,并删除第一层纠错方法发生纠错失败的数据S10的地址,其中,0≤i≤59且i≠10,0≤j≤3。
步骤203、依次取出步骤202计算得到的所有数据Si的地址,根据地址读出对应的数据,即Si,将Si各复制4份,分别送入4路数据流,然后送入数据移动模块,按照i的值分别左移iB、2iB、3iB、4iB。
步骤204、将步骤203左移后的数据分别与对应的R0'、R1'、R2'、R3'按照比特位进行异或操作,异或的结果更新R0'、R1'、R2'、R3'。
步骤205、判断步骤202中得到的数据Si是否都完成计算:若是,则执行下一步,若否,则返回步骤203。
步骤206:取出步骤202计算得到的所有数据Qj的地址,根据地址读出对应的数据,即Qj,将Qj与对应的R0'、R1'、R2'、R3'按照比特位进行异或操作,异或的结果更新R0'、R1'、R2'、R3'。
步骤207、将步骤206得到的R0'、R1'、R2'、R3'送入数据移动模块,分别右移10B、20B、30B、40B,结果更新R0'、R1'、R2'、R3',完成R0'、R1'、R2'、R3'的计算。
步骤208、根据S10的地址读出数据S10,将数据S10分别与步骤207得到的R0'、R1'、R2'、R3'进行异或操作后,再进行与操作,得到S10的比特翻转信息n*。
步骤209、将步骤208读出的数据S10与步骤208计算得到的n*进行异或操作,得到新的数据S10',将S10'送入第一层纠错方法进行解码,由于在第二层纠错方法的解码计算时,已经消除了数据S10绝大多数的比特翻转错误,所以再经过第一层纠错方法的解码成功的概率很大。自此,第二层解码步骤完成。
R0'= (S0 ^ (S1<<1B) ^ (S2<<2B) ^ …^ (S9<<9B) ^ (S11<<11B)^… ^ (S59<<59B) ^ Q0)>>10B (5-1)
R1'= (S0 ^ (S1<<2B) ^ (S2<<4B) ^ …^ (S9<<18B) ^ (S11<<22B) ^…^ (S59<<118B) ^ Q1)>>20B (6-1)
R2'= (S0 ^ (S1<<3B) ^ (S2<<6B) ^ …^ (S9<<27B) ^ (S11<<33B)^…^ (S59<<177B) ^ Q2)>>30B (7-1)
R3'= (S0 ^ (S1<<4B) ^ (S2<<8B) ^ … ^ (S9<<36B) ^ (S11<<44B) ^…^(S59<<236B) ^ Q3)>>40B (8-1)
n* = (R0'^S10) & (R1'^S10) & (R2'^S10) & (R3'^S10) (9-1)
通过第二层解码后得到的新的数据S10',即,S10' = S10^ n* (10-1)
在NAND生命末期运用本发明所述的应用于SSD上的双层纠错方法,可以发现,在每16份数据生成1份冗余码的配置下,可以纠正16份数据中出现6~7份数据不可纠的场景,相比较常用算法RAID5和RAID6只能纠正单位数据中出现1份和2份数据不可纠的场景,本发明极大的提高了纠错能力,延长了闪存颗粒的寿命。
以上仅描述了本发明的基本原理和优选实施方式,本领域人员可以根据上述描述做出许多变化和改进,这些变化和改进应该属于本发明的保护范围。
Claims (10)
1.一种应用于SSD上的双层纠错方法,其特征在于,包括第一层纠错方法和第二层纠错方法,两层纠错方法均包括编码过程和解码过程,设每x份原始数据增加1份数据作为冗余数据,设1份数据的大小为mKB且是第一层纠错方法中使用的纠错算法码长的y倍,1≤x≤128,1≤m≤16,y≥3,x、m和y均为整数;原始数据块S的大小为xmKB,根据第一层纠错方法中使用的纠错算法码长将原始数据块编号为S0、S1、S2、…、S(xy-1),冗余数据Q的大小为mKB,将冗余数据编号为Q0、Q1、…、Q(y-1);
通过第二层纠错方法对原始数据块S进行编码,编码过程包括:
首先,对Q0、Q1、…、Q(y-1)初始化;其次,将S0、S1、S2、…、S(xy-1)各复制y份分别送入y路数据流,依次进行移位操作,再与对应的Q0、Q1、…、Q(y-1)进行异或操作,异或的结果分别更新对应的Q0、Q1、…、Q(y-1),直至S0、S1、S2、…、S(xy-1)更新完对应的Q0、Q1、…、Q(y-1);最后,将冗余数据Q接在原始数据块S后,组成大小为(x+1)mKB的新的数据块;
当数据Sn通过第一层纠错方法发生解码失败时,启动第二层纠错方法对Sn进行解码,其中,数据Sn是经过第二层纠错方法编码后的新的数据块中的某一数据且0≤n≤xy-1,解码过程包括:
首先,计算得到包含数据Sn的数据块地址,按照数据块地址读出Si和冗余数据Q,0≤i≤xy-1且i≠n;其次,预设中间变量R0'、R1'、R2'、…、R(y-1)'并对其进行初始化;将Si各复制y份分别送入y路数据流,依次进行移位操作,再分别与R0'、R1'、R2'、…、R(y-1)'进行异或操作,并更新R0'、R1'、R2'、…、R(y-1)';Si计算完成后,送入冗余数据Q,与对应的数据流的R0'、R1'、R2'、…、R(y-1)'进行异或操作,并更新R0'、R1'、R2'、…、R(y-1)';然后,将R0'、R1'、R2'、…、R(y-1)'进行移位操作,完成R0'、R1'、R2'、…、R(y-1)'的计算;接着,将Sn分别与R0'、R1'、R2'、…、R(y-1)'进行异或操作后,再进行与操作,得到Sn的比特翻转信息n*;最后,将Sn与n*进行异或操作后,再送入第一层纠错方法进行解码。
2.根据权利要求1所述的应用于SSD上的双层纠错方法,其特征在于,第一层纠错方法包括但不限于BCH、RS、LDPC中的任意一种。
3.根据权利要求1所述的应用于SSD上的双层纠错方法,其特征在于,当第一层纠错方法完成编码过程后,接着进行第二层纠错方法的编码过程,两层纠错方法的编码过程均在执行第一层纠错方法的解码之前完成。
4.根据权利要求1所述的应用于SSD上的双层纠错方法,其特征在于,通过第二层纠错方法对原始数据块S进行编码,具体包括:
步骤101、将Q0、Q1、…、Q(y-1)初始化为0;
步骤102、将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);
步骤103、通过增补模块将冗余数据Q接在原始数据块S后,组成大小为(x+1)m KB的新的数据块。
5.根据权利要求4所述的应用于SSD上的双层纠错方法,其特征在于,步骤102的过程用公式表示如下:
Q0=S0 ^ (S1<< 1B) ^ (S2<<2B) ^…^ (Sn<<nB)^…^ (S(xy-1)<< (xy-1)B) (1)
Q1=S0 ^ (S1<<2B) ^ (S2<<4B) ^…^ (Sn<<2nB)^…^ (S(xy-1)<< (2 (xy-1))B)(2)
Q2=S0 ^ (S1<<3B) ^ (S2<<6B) ^…^ (Sn<<3nB)^…^ (S(xy-1)<<(3 (xy-1))B)(3)
…
Q(y-1)=S0 ^ (S1<<yB) ^ (S2<<2yB) ^…^ (Sn<<ynB)^…^ (S(xy-1)<<(y (xy-1))B) (4)。
6.根据权利要求4或5所述的应用于SSD上的双层纠错方法,其特征在于,通过第二层纠错方法对数据Sn进行解码,具体包括:
步骤201、预设中间变量R0'、R1'、R2'、…、R(y-1)'并将其初始化为0;
步骤202、根据数据Sn的地址和第二层纠错方法的数据块绑定规则,计算得到包含数据Sn的数据块地址,包括数据Si的地址和数据Qj的地址,并删除数据Sn的地址,其中,0≤i≤xy-1且i≠n,0≤j≤y-1;
步骤203、依次取出步骤202计算得到的所有数据Si的地址,根据地址读出对应的数据,即Si,将Si各复制y份,分别送入y路数据流,然后送入数据移动模块,按照i的值分别左移iB、2iB、…、yiB;
步骤204、将步骤203左移后的数据分别与对应的R0'、R1'、R2'、…、R(y-1)'按照比特位进行异或操作,异或的结果更新R0'、R1'、R2'、…、R(y-1)';
步骤205、判断步骤202中得到的数据Si是否都完成计算:若是,则执行下一步,若否,则返回步骤203;
步骤206:取出步骤202计算得到的所有数据Qj的地址,根据地址读出对应的数据,即Qj,将Qj与对应的R0'、R1'、R2'、…、R(y-1)'按照比特位进行异或操作,异或的结果更新R0'、R1'、R2'、…、R(y-1)';
步骤207、将步骤206得到的R0'、R1'、R2'、…、R(y-1)'送入数据移动模块,分别右移nB、2nB、…、ynB,结果更新R0'、R1'、R2'、…、R(y-1)',完成R0'、R1'、R2'、…、R(y-1)'的计算;
步骤208、根据Sn的地址读出数据Sn,将数据Sn分别与步骤207得到的R0'、R1'、R2'、…、R(y-1)'进行异或操作后,再进行与操作,得到Sn的比特翻转信息n*;
步骤209、将步骤208读出的数据Sn与步骤208计算得到的n*进行异或操作,得到新的数据Sn',将Sn'送入第一层纠错方法进行解码。
7.根据权利要求6所述的应用于SSD上的双层纠错方法,其特征在于,中间变量R0'、R1'、R2'、…、R(y-1)'为y份数据,其每1份数据的大小与数据Sn的大小相同。
8.根据权利要求6所述的应用于SSD上的双层纠错方法,其特征在于,通过步骤203、步骤204、步骤206和步骤207中的左移操作、异或操作和右移操作对R0'、R1'、R2'、…、R(y-1)'进行计算的公式表示如下:
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 (5)
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 (6)
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 (7)
…
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 (8)。
9.根据权利要求6所述的应用于SSD上的双层纠错方法,其特征在于,步骤208中,Sn的比特翻转信息n*的计算过程用公式表示如下:
n* = (R0'^Sn) & (R1'^Sn) & (R2'^Sn) &…& (R(y-1)'^Sn) (9)。
10.根据权利要求6所述的应用于SSD上的双层纠错方法,其特征在于,步骤209中,新的数据Sn'的计算公式如下:
Sn' = Sn^n* (10)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210442460.4A CN114550806B (zh) | 2022-04-26 | 2022-04-26 | 一种应用于ssd上的双层纠错方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210442460.4A CN114550806B (zh) | 2022-04-26 | 2022-04-26 | 一种应用于ssd上的双层纠错方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114550806A true CN114550806A (zh) | 2022-05-27 |
CN114550806B CN114550806B (zh) | 2022-08-05 |
Family
ID=81667167
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210442460.4A Active CN114550806B (zh) | 2022-04-26 | 2022-04-26 | 一种应用于ssd上的双层纠错方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114550806B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116028260A (zh) * | 2023-01-09 | 2023-04-28 | 海光信息技术股份有限公司 | 数据的处理方法、处理装置以及存储系统 |
CN118016134A (zh) * | 2024-04-09 | 2024-05-10 | 杭州阿姆科技有限公司 | 应用于ssd上的基于raid的多重增强型纠错方法 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006135584A (ja) * | 2004-11-05 | 2006-05-25 | Sharp Corp | データ伝送システム |
CN102571106A (zh) * | 2012-01-04 | 2012-07-11 | 记忆科技(深圳)有限公司 | 具有双层纠错能力的bch编码器和解码器 |
US20130179750A1 (en) * | 2010-12-15 | 2013-07-11 | Kabushiki Kaisha Toshiba | Semiconductor storage device and method of controlling the same |
JP2013214212A (ja) * | 2012-04-02 | 2013-10-17 | Toshiba Corp | メモリコントローラ、半導体記憶装置および復号方法 |
US20170222754A1 (en) * | 2016-01-28 | 2017-08-03 | Lg Electronics Inc. | Error correcting coding method based on cross-layer error correction with likelihood ratio and apparatus thereof |
CN109981117A (zh) * | 2019-03-18 | 2019-07-05 | 北京无极芯动科技有限公司 | 一种四模前向纠错码处理器 |
CN110471789A (zh) * | 2019-07-02 | 2019-11-19 | 深圳市金泰克半导体有限公司 | 固态硬盘纠错方法及固态硬盘 |
CN111327397A (zh) * | 2020-01-21 | 2020-06-23 | 武汉大学 | 一种信息数据纵向冗余校验纠错编解码方法 |
US10713160B1 (en) * | 2019-01-30 | 2020-07-14 | Phison Electronics Corp. | Data writing method, memory control circuit unit and memory storage device |
US20200250034A1 (en) * | 2019-01-31 | 2020-08-06 | Qatar Foundation For Education, Science And Community Development | Data storage methods and systems |
CN112383314A (zh) * | 2021-01-12 | 2021-02-19 | 杭州阿姆科技有限公司 | 一种基于raid信息的ldpc纠错方法 |
CN113541856A (zh) * | 2020-04-16 | 2021-10-22 | 华为技术有限公司 | 数据恢复方法及装置 |
-
2022
- 2022-04-26 CN CN202210442460.4A patent/CN114550806B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006135584A (ja) * | 2004-11-05 | 2006-05-25 | Sharp Corp | データ伝送システム |
US20130179750A1 (en) * | 2010-12-15 | 2013-07-11 | Kabushiki Kaisha Toshiba | Semiconductor storage device and method of controlling the same |
CN102571106A (zh) * | 2012-01-04 | 2012-07-11 | 记忆科技(深圳)有限公司 | 具有双层纠错能力的bch编码器和解码器 |
JP2013214212A (ja) * | 2012-04-02 | 2013-10-17 | Toshiba Corp | メモリコントローラ、半導体記憶装置および復号方法 |
US20170222754A1 (en) * | 2016-01-28 | 2017-08-03 | Lg Electronics Inc. | Error correcting coding method based on cross-layer error correction with likelihood ratio and apparatus thereof |
US10713160B1 (en) * | 2019-01-30 | 2020-07-14 | Phison Electronics Corp. | Data writing method, memory control circuit unit and memory storage device |
US20200250034A1 (en) * | 2019-01-31 | 2020-08-06 | Qatar Foundation For Education, Science And Community Development | Data storage methods and systems |
CN109981117A (zh) * | 2019-03-18 | 2019-07-05 | 北京无极芯动科技有限公司 | 一种四模前向纠错码处理器 |
CN110471789A (zh) * | 2019-07-02 | 2019-11-19 | 深圳市金泰克半导体有限公司 | 固态硬盘纠错方法及固态硬盘 |
CN111327397A (zh) * | 2020-01-21 | 2020-06-23 | 武汉大学 | 一种信息数据纵向冗余校验纠错编解码方法 |
CN113541856A (zh) * | 2020-04-16 | 2021-10-22 | 华为技术有限公司 | 数据恢复方法及装置 |
CN112383314A (zh) * | 2021-01-12 | 2021-02-19 | 杭州阿姆科技有限公司 | 一种基于raid信息的ldpc纠错方法 |
Non-Patent Citations (2)
Title |
---|
NING ZHENG: "Joint Decoding of RAID-ECC Solutions for SSDs", 《2017 55TH ANNUAL ALLERTON CONFERENCE ON COMMUNICATION, CONTROL, AND COMPUTING (ALLERTON)》 * |
PRADEEP SUBEDI等: "A hybrid erasure-coded ECC scheme to improve performance and reliability of solid state drives", 《2014 IEEE 33RD INTERNATIONAL PERFORMANCE COMPUTING AND COMMUNICATIONS CONFERENCE (IPCCC)》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116028260A (zh) * | 2023-01-09 | 2023-04-28 | 海光信息技术股份有限公司 | 数据的处理方法、处理装置以及存储系统 |
CN116028260B (zh) * | 2023-01-09 | 2024-02-27 | 海光信息技术股份有限公司 | 数据的处理方法、处理装置以及存储系统 |
CN118016134A (zh) * | 2024-04-09 | 2024-05-10 | 杭州阿姆科技有限公司 | 应用于ssd上的基于raid的多重增强型纠错方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114550806B (zh) | 2022-08-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11405058B2 (en) | Stopping criteria for layered iterative error correction | |
CN114550806B (zh) | 一种应用于ssd上的双层纠错方法 | |
KR102645583B1 (ko) | 예측성 메모리 유지보수 | |
US8239734B1 (en) | Efficient data storage in storage device arrays | |
US8321762B2 (en) | Method for creating an error correction coding scheme | |
CN101635158B (zh) | 编码和/或解码系统数据的方法、装置、系统和体系结构 | |
US7900118B2 (en) | Flash memory system and method for controlling the same | |
US8694865B2 (en) | Data storage device configured to reduce buffer traffic and related method of operation | |
US9396062B1 (en) | Group based codes for multi-dimensional recording (MDR) | |
US10326479B2 (en) | Apparatuses and methods for layer-by-layer error correction | |
US20110283166A1 (en) | Storage device having a non-volatile memory device and copy-back method thereof | |
US10243588B2 (en) | Error correction code (ECC) decoders sharing logic operations, memory controllers including the error correction code decoders, and methods of decoding error correction codes | |
CN111696615A (zh) | 存储器系统和操作存储器系统的方法 | |
US10756764B2 (en) | Memory system and control method | |
US20200210277A1 (en) | Data storage device employing multi-level parity sectors for data recovery procedure | |
US8856616B1 (en) | Two dimensional encoding for non-volatile memory blocks | |
CN1959648B (zh) | 创建纠错编码方案的方法和减少数据损失的设备 | |
JP2001211086A (ja) | 選択的可変冗長性を具備する誤り訂正符号を与えるシステム及び方法 | |
CN110532128B (zh) | 一种降低数据更新代价的纠删码编码及数据重构方法 | |
CN118016134B (zh) | 应用于ssd上的基于raid的多重增强型纠错方法 | |
US11204834B1 (en) | Implementation of keeping data integrity in multiple dimensions | |
CN114968648A (zh) | 在存储器系统中使用错误校正码的设备和方法 | |
KR102532611B1 (ko) | 컨트롤러 및 그것의 동작 방법 | |
TWI392239B (zh) | Encoders, Decoders and Access Systems with Reed Solomon Error Correction Mechanism | |
CN116805506A (zh) | 存储系统、控制其的方法和用于对信息位进行编码的装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |