一种提升固态硬盘阵列系统修复性能的编码和修复方法

文档序号:1639690 发布日期:2019-12-20 浏览:43次 >En<

阅读说明:本技术 一种提升固态硬盘阵列系统修复性能的编码和修复方法 (Coding and repairing method for improving repairing performance of solid state disk array system ) 是由 潘玉彪 侯济恭 林运国 温廷羲 于 2019-09-18 设计创作,主要内容包括:本发明属于计算机固态硬盘阵列存储系统技术领域,公开了一种提升固态硬盘阵列系统修复性能的编码和修复方法,首先针对固态硬盘阵列系统提出利用A个线性无关的编码算法共同保护阵列系统;其次当阵列中一块数据块需要更新时,在编码集里采用与原先不同的编码算法对该数据块以及对应的校验块进行更新,在提供相同可靠性的前提下不会增加额外的存储开销;接着更新操作发生后原先版本的数据被标记为无效,但阵列系统依旧能够利用开放通道固态硬盘的特点找到该被标记为无效的数据块或校验块,并进行数据修复。本发明提出的修复算法将利用被标记为无效的数据块和校验块信息参与数据修复,进而提升修复性能,缩短修复时间。(The invention belongs to the technical field of computer solid state disk array storage systems, and discloses a coding and repairing method for improving the repairing performance of a solid state disk array system, which firstly proposes to jointly protect the array system by utilizing A linear irrelevant coding algorithms aiming at the solid state disk array system; secondly, when a data block in the array needs to be updated, the data block and a corresponding check block are updated in the coding set by adopting a coding algorithm different from the original coding algorithm, so that the extra storage overhead is not increased on the premise of providing the same reliability; and then the data of the original version is marked as invalid after the updating operation occurs, but the array system can still find the data block or the check block marked as invalid by utilizing the characteristics of the open channel solid state disk and carry out data repair. The repair algorithm provided by the invention utilizes the data block and check block information marked as invalid to participate in data repair, thereby improving the repair performance and shortening the repair time.)

一种提升固态硬盘阵列系统修复性能的编码和修复方法

技术领域

本发明属于计算机固态硬盘阵列存储系统技术领域,尤其涉及一种提升固态硬盘阵列系统修复性能的编码和修复方法。

背景技术

基于闪存的固态硬盘已经被广泛部署在服务器和数据中心当中。服务器和数据中心通常会利用阵列技术(RAID)为系统提供可靠性并支持特定数量的硬盘发生错误。据统计,硬盘错误对于大规模存储系统来说是非常常见的。当错误发生时,阵列系统需要消耗额外的带宽资源做数据修复工作进而影响用户访问性能;此外,如果不进行快速修复,当另外的硬盘发生故障且超过系统可以容忍的硬盘故障数,则系统的所有数据都将变得不可靠。因此如何提升修复性能、缩短修复时间成为阵列系统非常值得研究的课题。

已有的解决方法都是针对基于传统硬盘的阵列系统,并未考虑到固态硬盘的固有物理特点,因此还存在可提升的空间。例如,固态硬盘采取异地更新策略,导致盘内存在着被标记为无效的数据块;再如,当前流行的开放通道的固态硬盘使得固态硬盘不再是一个黑盒,上层的系统也能够看到并获取闪存芯片上的数据。

综上所述,现有技术存在的问题是:

(1)现有技术中,都是针对一种编码方程为阵列进行保护,因此修复过程中的数据读取量不存在下降的空间。

(2)现有技术中,没有针对固态硬盘阵列系统,利用开放通道固态硬盘及其物理特点,不能提升修复性能;而且现有技术修复时间长。

解决上述技术问题的难度:如何利用固态硬盘的物理特点,减少修复过程中所需要的数据读取量,进而提升修复性能。包括,设计合适的数据结构和算法,利用固态硬盘的已有特点(即利用无效但存在固态硬盘内部的数据页)减少数据修复所需要的时间。

解决上述技术问题的意义:固态硬盘已经逐渐取代传统硬盘成为数据中心底层存储介质的首选,但硬盘错误对于大规模存储系统来说是非常常见的。而利用固态硬盘无效页,能减少数据修复所需要的数据读取量,进而加快修复速度,提升修复带宽。

发明内容

针对现有技术存在的问题,本发明提供了一种提升固态硬盘阵列系统修复性能的编码和修复方法。

本发明是这样实现的,一种提升固态硬盘阵列系统修复性能的编码和修复方法,通过设置A个(A为系统参数)线性无关的编码方程为固态硬盘阵列系统提供可靠性保障;

当更新发生时,循环依次交替使用不同的编码方程对同一个编码集合进行校验块编码;

当数据被更新时,将老版本数据所在的页面地址写入新页面的OOB中;

为阵列的所有条带设置对应的Bitmap_1数组,通过该数组内部特定元素的值,表示对应条带最近一次更新采用A个编码方程中的哪一个进行编码;

为阵列的所有条带设置对应的Bitmap_2数组,通过该数据内部特定元素的值,表示对应条带在做修复时采用多个编码方程共同求解还是采用传统方法求解;

数据在写入时,如果是随机写入,则依次交替采用多个编码方程对该编码集合进行校验块编码,如果是连续写入,则采用与上一次更新使用的编码方程对本次更新进行校验块编码;

数据修复时,根据Bitmap_2和Bitmap_1的值选择使用多个编码方程共同修复或者使用单个编码方程进行修复。

具体包括:

首先假定固态硬盘阵列系统由N块固态硬盘构成,即N块数据页面构成一个编码集合;并设置A个线性无关的编码方程,共同为阵列系统提供可靠性保障,其中A为系统参数,可以设置为2,3或4,下述描述以A=2为例。

假定2个线性无关的编码方程为其中“+/*”为有限域运算,X1/X2/Y1/Y2为编码方程的参数,其在每个方程中,一半的数据的编码参数为X1或X2,一半的数据的编码参数为Y1或;

如果编码集合采用第一个编码方程进行编码之后,则当编码集合内部一块数据页面发生更新时则采用第二个编码方程进行编码;随后,该编码集合又有一块数据页面发生更新则又采用第一个编码方程进行编码;循环依次交替使用不同的编码方程对同一个编码集合进行编码;

使用Bitmap_1数组结构。其中Bitmap_1的数组大小为阵列中的编码集合(条带)数量,且一一对应;如果对应位置为0,则表示该编码集合采用第一个编码方程进行编码,如果对应位置为1,则表示该编码集合采用第二个编码方程进行编码;

使用Bitmap_2数组结构。其中Bitmap_2的数组大小也为阵列中的编码集合(条带)数量,且一一对应;如果对应位置为0,则表示该编码集合采用传统方法修复数据,如果对应位置为1,则表示该编码集合采用2个编码方程的方法修复数据;

当某个数据页面更新时,系统将该页面新版本数据写入新的页面,将老版本数据所在页面标记无效,并在新版本页面的OOB部分写入老版本无效页数据的地址,以便阵列系统在数据修复时能够读取最新版本的前一个版本无效数据,进而加速数据修复过程。

进一步,提升固态硬盘阵列系统修复性能的编码方法的写流程为:

1)将写入请求拆分成隶属于一个或多个编码集合的请求;

2)对于导入到每个编码集合的写请求,判断是否为连续请求?如果是,转3);否则,跳转8);

3)对于一个编码集合里连续多个页面的写请求,首先将Bitmap_2数组的对应位置置0;即如果接下来要修复该编码集合的数据,则用传统的修复算法修复;

4)判断Bitmap_1数组对应位置是否为0?如果为0,则转5);否则,转6);

5)采用第一个编码方程利用RRW或RMW方法该编码集合的校验块进行更新;转7);

6)采用第二个编码方程利用RRW或RMW方法该编码集合的校验块进行更新;

7)将该连续请求的新数据页面连续写入分配好的空白页,且将多个原始页面标记为无效;转13);

8)对于独立的随机写请求,首先将Bitmap_2数组的对应位置置1;即如果接下来要修复该编码集合的数据,则用两个线性无关的编码方程进行修复;

9)判断Bitmap_1数组对应位置是否为0?如果为0,则转10);否则,转11);

10)表示前一次使用第一个编码方程进行编码计算,因此此时采用第二个编码方程为校验块进行更新,并将对应的Bitmap_1位置置1;转12);

11)表示前一次使用第二个编码方程进行编码计算,因此此时采用第一个编码方程为校验块进行更新,并将对应的Bitmap_1位置置0;

12)为该页面分配空间,写入新数据,并在新数据页面的OOB处写入前一个版本的页面地址;最后将前一个版本的页面标记为无效;

13)写入操作完成。

进一步,提升固态硬盘阵列系统修复性能的编码方法的修复流程为:

(1)系统需要修复某个编码集合中的特定块

(2)判断Bitmap_2对应位置是否为0;如果为0,则转(3);否则,转(4);

(3)读取该编码集合的其他页面数据(共N-1块),使用传统的修复方法进行修复;如果该编码集合对应的Bitmap_1为0,则采用第一个编码方程修复如果该编码集合对应的Bitmap_1为1,则采用第二个编码方程修复转(6);

(4)判断需要修复的是否为校验块或最近一次更新的数据块?如果是,转(3);否则,转(5);

(5)采用系统设定的两个线性无关的编码方程,利用无效页数据,进行数据修复。具体为,根据

组成的线性无关方程组,读取页面数据CN,D1,(其中前两个为无效页,后两个为有效页),和(全为有效页)修复

(6)修复完成。

本发明的另一目的在于提供一种实施所述提升固态硬盘阵列系统修复性能的编码和修复方法的固态硬盘阵列系统。

本发明的另一目的在于提供一种计算机可读存储介质,包括计算机程序,当其在计算机上运行时,使得计算机执行所述的提升固态硬盘阵列系统修复性能的编码和修复方法。

本发明针对固态硬盘阵列系统,利用开放通道固态硬盘及其物理特点,在不增加存储空间的前提下,设计提升修复性能的编码方法和修复算法。该发明包括,首先针对固态硬盘阵列系统提出利用A(A是系统参数,可以进行设置,一般设置为2/3/4)个线性无关的编码算法共同保护阵列系统;传统的阵列系统只只用一种编码算法为阵列提供保护,例如RAID-6采用RDP编码算法或者EVENODD算法或者RS编码算法。其次,当阵列中一块数据块需要更新时,在编码集里采用与原先不同的编码算法对该数据块以及对应的校验块进行更新,因此在提供相同可靠性的前提下,该发明不会增加额外的存储开销。接着,更新操作发生后,虽然原先版本的数据被标记为无效,但阵列系统依旧能够利用开放通道固态硬盘的特点找到该被标记为无效的数据块或校验块。最后,当数据修复发生时,该发明提出的修复算法将利用被标记为无效的数据块和校验块信息参与数据修复,进而提升修复性能,缩短修复时间。

附图说明

图1是本发明实施例提供的提升固态硬盘阵列系统修复性能的编码方法的写流程图。

图2是本发明实施例提供的提升固态硬盘阵列系统修复性能的编码方法的修复流程图。

图3是本发明实施例提供的本发明修复需要读取的页面数与传统方法需要读取的页面数对比图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

现有技术中,没有针对固态硬盘阵列系统,利用开放通道固态硬盘及其物理特点,在不增加存储空间的前提下,不能提升修复性能;而且现有技术修复时间长。

针对现有技术存在的问题,本发明提供了一种提升固态硬盘阵列系统修复性能的编码和修复方法,下面结合附图对本发明作详细的描述。

本发明实施例提供的提升固态硬盘阵列系统修复性能的编码和修复方法包括:通过设置A个(A为系统参数)线性无关的编码方程为固态硬盘阵列系统提供可靠性保障;当更新发生时,循环依次交替使用不同的编码方程对同一个编码集合进行校验块编码;当数据被更新时,将老版本数据所在的页面地址写入新页面的OOB中;为阵列的所有条带设置对应的Bitmap_1数组,通过该数组内部特定元素的值,表示对应条带最近一次更新采用A个编码方程中的哪一个进行编码;为阵列的所有条带设置对应的Bitmap_2数组,通过该数据内部特定元素的值,表示对应条带在做修复时采用多个编码方程共同求解还是采用传统方法求解;数据在写入时,如果是随机写入,则依次交替采用多个编码方程对该编码集合进行校验块编码,如果是连续写入,则采用与上一次更新使用的编码方程对本次更新进行校验块编码;数据修复时,根据Bitmap_2和Bitmap_1的值选择使用多个编码方程共同修复或者使用单个编码方程进行修复。

具体包括:

首先,本发明假定固态硬盘阵列是由N块固态硬盘构成的RAID5系统,其中系统参数A设置为2,即表示使用2个线性无关的编码算法共同保护RAID5阵列。如果编码集合采用第一个编码方程进行编码之后,则当编码集合内部一块数据页面发生更新时则采用第二个编码方程进行编码;随后,该编码集合又有一块数据页面发生更新则又采用第一个编码方程进行编码;循环依次交替使用不同的编码方程对同一个编码集合进行编码。假定,这两个编码方程为,其中“+/*”为有限域运算,X1/X2/Y1/Y2为编码方程的参数,其在每个方程中,一半的数据的编码参数为X1或X2,一半的数据的编码参数为Y1或Y2,且两个方程线性无关。

接着,采用开放通道的固态硬盘作为底层存储介质,因此阵列系统能够看到并读取固态硬盘内部的无效页面。基于此,当某个数据页面更新时,系统将该页面新版本数据写入新的页面,将老版本数据所在页面标记无效,并在新版本页面的OOB部分写入老版本无效页数据的地址,以便阵列系统在数据修复时能够读取最新版本的前一个版本无效数据,进而加速数据修复过程。

然后,使用Bitmap_1数组结构。其中Bitmap_1的数组大小为阵列中的编码集合(条带)数量,且一一对应;如果对应位置为0,则表示该编码集合采用第一个编码方程进行编码,如果对应位置为1,则表示该编码集合采用第二个编码方程进行编码;例如Bitmap_1[0]=0,表示第0个编码集合(条带)采用第一个编码方程进行编码。

此外,使用Bitmap_2数组结构。其中Bitmap_2的数组大小也为阵列中的编码集合(条带)数量,且一一对应;如果对应位置为0,则表示该编码集合采用传统方法修复数据,如果对应位置为1,则表示该编码集合采用2个编码方程的方法修复数据。使用Bitmap_2数组的目的在于必须考虑修复算法的完备性和编码方法的更新复杂度,例如无效页数据被垃圾回收操作收回,则该编码集合(条带)将无法使用两个编码方程进行数据修复;再如,如果遇到连续的写入操作,则采用沿用原先的编码方程,利用Read-Modify-Write(RMW)或Read-Reconstruction-Write(RRW)进行校验数据的更新,因此此时将Bitmap_2对应的位置置0,该编码集合(条带)将使用传统的方法进行数据修复。

基于上述提出的两个线性无关编码方程共同保护阵列系统的思想及相应使用的数据结构,最后以算法描述的形式阐述写流程和修复流程。假定,RAID5阵列系统由N块开放通道的固态硬盘构成,两个线性无关的编码方程分别为,(1)(2)其中“+/*”为有限域运算,X1/X2/Y1/Y2为编码方程的参数,只要线性无关即可,一半的数据的编码参数为X1或X2,一半的数据的编码参数为Y1或Y2

如图1所示,本发明实施例提供的提升固态硬盘阵列系统修复性能的编码方法的写流程包括:

101、将写入请求拆分成隶属于一个或多个编码集合的请求。

102、对于导入到每个编码集合的写请求,判断是否为连续请求?如果是,转103。否则,跳转108。

103、对于一个编码集合里连续多个页面的写请求,首先将Bitmap_2数组的对应位置置0。即如果接下来要修复该编码集合的数据,则用传统的修复算法修复。

104、判断Bitmap_1数组对应位置是否为0?如果为0,则转105。否则,转106。

105、采用第一个编码方程利用RRW或RMW方法该编码集合的校验块进行更新。转107。

106、采用第二个编码方程利用RRW或RMW方法该编码集合的校验块进行更新。

107、将该连续请求的新数据页面连续写入分配好的空白页,且将多个原始页面标记为无效。转113。

108、对于独立的随机写请求,首先将Bitmap_2数组的对应位置置1;即如果接下来要修复该编码集合的数据,则用两个线性无关的编码方程进行修复;

109、判断Bitmap_1数组对应位置是否为0?如果为0,则转110;否则,转111。

110、表示前一次使用第一个编码方程进行编码计算,因此此时采用第二个编码方程为校验块进行更新,并将对应的Bitmap_1位置置1。转112。

111、表示前一次使用第二个编码方程进行编码计算,因此此时采用第一个编码方程为校验块进行更新,并将对应的Bitmap_1位置置0。

112、为该页面分配空间,写入新数据,并在新数据页面的OOB处写入前一个版本的页面地址。最后将前一个版本的页面标记为无效。

113、写入操作完成。

图2为本发明实施例提供的提升固态硬盘阵列系统修复性能的编码方法的修复流程包括:

201、系统需要修复某个编码集合中的特定块

202、判断Bitmap_2对应位置是否为0。如果为0,则转203。否则,转204。

203、读取该编码集合的其他页面数据(共N-1块),使用传统的修复方法进行修复。如果该编码集合对应的Bitmap_1为0,则采用第一个编码方程修复如果该编码集合对应的Bitmap_1为1,则采用第二个编码方程修复转206。

204、判断需要修复的是否为校验块或最近一次更新的数据块?如果是,转203。否则,转205。

205、采用系统设定的两个线性无关的编码方程,利用无效页数据,进行数据修复。

具体为,根据

组成的线性无关方程组,读取页面数据CN,D1,(其中前两个为无效页,后两个为有效页),和(全为有效页)修复

206、修复完成。

以上所述,本发明以RAID5阵列为例,且系统参数设置为2,即采用两个线性无关的编码方程共同为基于固态硬盘的阵列系统提供可靠性。但本发明的保护范围不局限于此,例如本发明依旧可以运用到容多错的阵列系统,或者当阵列系统规模很大时将系统参数调整为3或者4,以进一步提升修复性能。

下面结合实施例对本发明作进一步描述。

实施例

本发明将以系统参数A为2,且阵列级别为5,作为实施例,描述本发明所采用的技术方案。

阵列级别为5,指该基于固态硬盘的阵列系统为RAID5系统,系统由N个固态硬盘构成,且一个编码集合包含N-1块数据块和1块校验块,且该编码集合中的校验块,由该编码集合的数据块根据特定编码算法产生。例如,编码集合有以下其中D表示数据块,共N-1块,C表示校验块,共1块,且CN由前N-1块数据块编码得到,最后编码集合内的数据块和校验块分别写入阵列当中不同的固态硬盘内部。

系统参数A为2,则表示使用2个线性无关的编码算法共同保护RAID5阵列。如,两种编码算法共同保护RAID5阵列。其中“+/*”为有限域运算,X1/X2/Y1/Y2为编码方程的参数,且两个方程线性无关。本发明采用两个编码算法,当该编码集合中的某块数据页面更新时,就交替使用。例如,先采用第一个编码方程对编码集合中的数据块进行编码,产生校验块CN。当编码集合中的D1需要更新为时,则采用第二个编码方程进行编码,生产校验块由于每次使用一个编码方程,因此不增加存储开销,而一遇到数据块更新就换另一个编码方程进行校验块的重新计算。依次交替使用两个编码方程。因此,当D1更新为时,校验块CN更新为只不过CN编码方式不同。该思想为本发明的最大创新之处。

当上述编码集合中D1更新为时,校验块CN更新为之后,其中一块数据块损坏,例如损坏需要进行数据修复。对于传统的方法而言,系统需要读取编码集合中剩下的N-2块数据块和1块校验块,共N-1块,进行修复;而本发明中D2参与了两个方程的编码,即:

则上述公式可以转为:

由于,本发明的阵列系统基于开放通道固态硬盘,因此虽然CN和D1在更新后被标记为无效,但从阵列系统级别依旧可以读取到无效页。本发明要修复可以利用上述两个线性无关的编码方程,读取CN,D1,四块页面,解出再读取最终解出则本发明需要读取块页面。当N大于等于7时(如下图仿真实验),本发明修复需要读取的页面数小于传统方法需要读取的页面数。当前大规模存储系统的硬盘数一般超过10个,有的系统甚至超过20个或者更多,因此本发明将有效减少修复过程中需要的页面读取量,提升修复性能。如图3所示。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

14页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种NVM芯片可靠性测试系统及测试方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!