一种RAID重建的方法、系统及RAID与流程

文档序号:12176269阅读:650来源:国知局
一种RAID重建的方法、系统及RAID与流程

本发明涉及计算机存储技术领域,特别涉及一种RAID重建的方法、系统及RAID。



背景技术:

RAID(Redundant Arrays of Independent Disks,RAID),独立冗余磁盘阵列,是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。同时RAID还提供不同程度的冗余能力(RAID0除外),当阵列中的一块磁盘出现故障时,通过冗余数据,可以将故障盘中的数据恢复到热备盘上。从而保证了用户数据的完整性。

RAID根据冗余能力和性能,可划分为不同的等级。目前常用的有RAID0、RAID1、RAID10、RAID5、RAID6、RAID7等。

RAID的实现技术主要有两种,一种是镜像技术,像RAID1,一种是条带技术,像RAID5、RAID6。镜像技术是当一块磁盘故障时,可以通过故障盘的镜像直接将数据拷贝到热备盘上,从而恢复了故障盘。条带技术是当一块磁盘故障时,可以利用条带技术,使用其它磁盘中的数据,重新计算出故障盘上的数据到热备盘上,从而恢复了故障盘。

恢复数据到热备盘的过程称为RAID rebuild(重建)。对于镜像RAID(例如RAID1,RAID10)的rebuild过程相对比较简单。它的实现过程主要分两个阶段,第一阶段是读取一个正常镜像中的数据,第二阶段是将读取的数据拷贝到热备盘中。对于条带RAID(例如RAID5,RAID6)它们的rebuild过程相对复杂。第一阶段读取正常磁盘中的数据,第二阶段对读取的数据进行计算,以恢复丢失数据,第三阶段下发恢复数据到热备盘中。

目前传统RAID都是采用单一线程来处理上述三个阶段,虽然有使用异步拷贝技术,异步计算校验技术,但某一时刻对镜像或条带的处理还是串行进行的。在处理一个镜像或条带时,其它的镜像或条带不能进行处理。利用传统RAID,如果坏掉一个盘,进行重建通常要花费十多个小时,甚至二十多个小时。因此,如何提高RAID重建的速度,是本领域技术人员需要解决的技术问题。



技术实现要素:

本发明的目的是提供一种RAID重建的方法、系统及RAID,利用流水线的方式将RAID重建的工作并行执行,而不是再使用单一的重构线程对RAID进行重建,充分发挥CPU的并行性,提高重建RAID的速度,即大大缩短重建时间。

为解决上述技术问题,本发明提供一种RAID重建的方法,包括:

当RAID触发重建时,RAID主线程创建三个线程;其中,三个线程中均包含有条带队列;三个线程并行的按照对应的条带队列中条带的顺序依次执行线程操作,当各条带队列中均不含有条带时,完成RAID重建;

其中,第一线程,用于根据磁盘扇区获取空闲条带,并按照空闲条带宽度下发读取数据请求,并把所述空闲条带加入到该线程的条带队列中,当所述空闲条带内所有磁盘中的数据读取完毕后将对应条带发送到第二线程;

第二线程,用于按照条带队列中条带的顺序依次对条带进行异或运算处理,并将对应条带发送到第三线程;

第三线程,用于按照条带队列中条带的顺序依次将条带中的数据下发到热备磁盘。

其中,当RAID触发重建时,RAID主线程创建三个线程,包括:

当RAID存在故障磁盘时触发RAID重建,RAID主线程创建三个线程,并分别将三个线程进行CPU绑定。

其中,读取条带对应磁盘数据,并将对应条带发送到第二线程,包括:

根据磁盘扇区以固定数据长度作为步长申请空闲条带作为当前条带;

申请成功后,对RAID中正常磁盘按照当前条带宽度下发起读操作请求并加入条带队列,在发起读操作请求后处理下一个步长的数据;

当所述当前条带中读操作对应数据成功返回到所述当前条带缓存区后,将所述当前条带发送到第二线程。

其中,对条带进行异或运算处理,并将对应条带发送到第三线程,包括:

对当前条带发起异或运算请求,并在发起异或运算请求后处理下一个条带;

当所述当前条带成功执行异或运算后,将所述当前条带发送到第三线程。

其中,将条带中的数据下发到热备磁盘,包括:

将当前条带中异或运算的结果数据下发到热备磁盘中。

本发明还提供一种RAID重建的系统,包括:

主线程模块,用于当RAID触发重建时,RAID主线程创建三个线程;其中,三个线程中均包含有条带队列;三个线程并行的按照对应的条带队列中条带的顺序依次执行线程操作,当各条带队列中均不含有条带时,完成RAID重建;

第一线程模块,用于根据磁盘扇区获取空闲条带,并按照空闲条带宽度下发读操作请求,并把所述空闲条带加入到该线程的条带队列中,当所述空闲条带内所有磁盘中的数据读取完毕后将对应条带发送到第二线程;

第二线程模块,用于按照条带队列中条带的顺序依次对条带进行异或运算处理,并将对应条带发送到第三线程;

第三线程模块,用于按照条带队列中条带的顺序依次将条带中的数据下发到热备磁盘。

其中,所述主线程模块具体用于当RAID存在故障磁盘时触发RAID重建,RAID主线程创建三个线程,并分别将三个线程进行CPU绑定。

其中,所述第一线程模块,包括:

条带申请单元,用于根据磁盘扇区以固定数据长度作为步长申请空闲条带作为当前条带;

读操作单元,用于申请成功后,对RAID中正常磁盘按照当前条带宽度下发起读操作请求并加入条带队列,在发起读操作请求后处理下一个步长的数据;

第一发送单元,用于当所述当前条带中读操作对应数据成功返回到所述当前条带缓存区后,将所述当前条带发送到第二线程。

其中,所述第二线程模块,包括:

异或运算单元,用于对当前条带发起异或运算请求,并在发起异或运算请求后处理下一个条带;

第二发送单元,用于当所述当前条带成功执行异或运算后,将所述当前条带发送到第三线程。

本发明还提供一种RAID,包括:根据上述任一项所述的RAID重建的系统。

本发明所提供的RAID重建的方法,包括:当RAID触发重建时,RAID主线程创建三个线程;其中,三个线程中均包含有条带队列;三个线程并行的按照对应的条带队列中条带的顺序依次执行线程操作,当各条带队列中均不含有条带时,完成RAID重建;其中,第一线程,用于根据磁盘扇区获取空闲条带,并按照空闲条带宽度下发读操作请求,并把所述空闲条带加入到该线程的条带队列中,当所述空闲条带内所有磁盘中的数据读取完毕后将对应条带发送到第二线程;第二线程,用于按照条带队列中条带的顺序依次对条带进行异或运算处理,并将对应条带发送到第三线程;第三线程,用于按照条带队列中条带的顺序依次将条带中的数据下发到热备磁盘;

可见,该方法将重建的过程划分3个阶段,处理过程更加清晰,使用流水线处理,充分利用并行操作,提高了条带的处理速度,缩短了RAID重建的时间,克服了传统的RAID在重建时,每个条带都是串行处理的,且只有一个线程,不能充分发挥多核的优势的缺点;本发明还提供RAID重建的系统及RAID,具有上述有益效果,在此不再赘述。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例所提供的RAID重建的方法的执行示意图;

图2为本发明实施例所提供的RAID重建的系统的结构框图。

具体实施方式

本发明的核心是提供一种RAID重建的方法、系统及RAID,利用流水线的方式将RAID重建的工作并行执行,而不是再使用单一的重构线程对RAID进行重建,充分发挥CPU的并行性,提高重建RAID的速度,即大大缩短重建时间。

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

从以上两种情况来看,RAID的重建过程是固定模式的,每个阶段的边界是清晰的。每个阶段都可以看作是一个独立的工作。完全可以使用一个独立部件(或线程)来完成。因此,本实施例提出了一种基于流水线方式的重建方案,充分利用多核的并行计算,提高重建RAID的速度。从而大大缩短重建时间。具体过程如下:

请参考图1,本实施例所提供的RAID重建的方法可以包括:

当RAID触发重建时,RAID主线程创建三个线程;其中,三个线程中均包含有条带队列;三个线程并行的按照对应的条带队列中条带的顺序依次执行线程操作,当各条带队列中均不含有条带时,完成RAID重建;

具体的,当RAID存在故障磁盘时触发RAID重建,RAID主线程创建三个线程,并分别将三个线程进行CPU绑定。

其中,第一线程,用于根据磁盘扇区获取空闲条带,并按照空闲条带宽度下发读操作请求,并把所述空闲条带加入到该线程的条带队列中,当所述空闲条带内所有磁盘中的数据读取完毕后将对应条带发送到第二线程;即负责读取正常磁盘中的数据。

第二线程,用于按照条带队列中条带的顺序依次对条带进行异或运算处理,并将对应条带发送到第三线程;即负责读取数据运算,防止数据丢失,进行数据恢复。

第三线程,用于按照条带队列中条带的顺序依次将条带中的数据下发到热备磁盘。即负责将恢复后的数据下发到正常的热备盘中。

下面以RAID5进行重建为例说明上述并行线程重建过程:

每个条带会经历三个阶段:第一阶段读取正常磁盘中的数据,第二阶段对读取的数据进行计算,以恢复丢失数据,第三阶段下发恢复数据到热备盘中。分别为每一个阶段创建一个线程,如果是多核CPU,每一个线程绑定当一个CPU核。这样相当于每一个核,都独立做一种工作。也相当于每一种工作有一个独立部件进行处理。每一个线程中保存有一个条带队列,当该队列中有条带时,该部件就对条带进行专职的处理工作。

从图1中也可以看到当重建运行后,条带个数大于三个之后,每个时刻三个进程在执行对应的进程操作,即在满流水工作时,每一个周期可以并行处理3个条带。性能比原来提高了将近3倍左右。

基于上述技术方案,本发明实施例提的RAID重建的方法,利用流水线的方式将RAID重建的工作并行执行,而不是再使用单一的重构线程对RAID进行重建,充分发挥CPU的并行性,提高重建RAID的速度,即大大缩短重建时间。

基于上述实施例,第一线程读取条带对应磁盘数据,并将对应条带发送到第二线程,包括:

根据磁盘扇区以固定数据长度作为步长申请空闲条带作为当前条带;

申请成功后,对RAID中正常磁盘按照当前条带宽度下发起读操作请求并加入条带队列,在发起读操作请求后处理下一个步长的数据;

当所述当前条带中读操作对应数据成功返回到所述当前条带缓存区后,将所述当前条带发送到第二线程。

具体的,第一线程首先要按照固定数据长度(例如4k)申请空闲条带。申请成功之后,就对正常磁盘发起读操作。下发结束之后就开始处理下一个步长的数据(即按照固定数据长度(例如4k)申请空闲条带,申请成功之后,就对正常磁盘发起读操作)。当一个条带的所有的数据都成功返回之后,就将此条带转交到下一个阶段(即第二线程)去处理,同时叫醒第二个阶段的线程。

基于上述实施例,第二线程对条带进行异或运算处理,并将对应条带发送到第三线程,包括:

对当前条带发起异或运算请求,并在发起异或运算请求后处理下一个条带;

当所述当前条带成功执行异或运算后,将所述当前条带发送到第三线程。

具体的,第二个阶段的处理线程开始对条带进行异或运算。由于异或运算也通常采用异步接口进行计算,所以第二线程的主要工作是为异步运算准备源数据和运算结果缓冲区,以及发起异或请求。除此之外还有条带状态的转换和异常操作处理(例如用于当异或运算执行失败时,对应的具体操作)。一旦发起异或请求之后开始处理下一个条带。如果异或运算执行成功,则将此条带转交给下一个阶段(即第三线程),并叫醒第三阶段的线程。

基于上述实施例,第三线程将条带中的数据下发到热备磁盘,包括:

将当前条带中异或运算的结果数据下发到热备磁盘中。

具体的,第三个阶段的处理线程(即第三线程)开始对条带中计算结果数据下发到磁盘。此阶段的主要工作对计算出的结果数据作为BIO数据,下发到热备盘中。这样一个重建条带的正常流水就结束了。

当重建结束时就解除该线程对CPU核的绑定,同时该线程也进行销毁,节省空间。

下面以RAID5数据盘为例进行说明,RAID5数据盘有三块磁盘构成,分别是disk0,disk1,disk2,有1个热备盘S0。当disk2磁盘坏掉时,RAID将开始对disk0和disk1数据进行异或运算,计算出disk2的数据,恢复到热备盘S0上。其具体过程如下:

1、当RAID中有一个磁盘坏掉后例如disk2磁盘坏掉时,将被RAID踢出触发重构。

2、RAID主线程创建3个线程th1,th2,th3,并分别进行CPU绑定。

3、线程th1负责遍历整个热备盘的所有扇区,以4k为步长,申请条带,读取disk0和disk1中的数据到条带缓冲区。发起读取请求后就处理下一个条带;同时叫醒th2。

4、线程th2负责把disk0和disk1中数据组织到一起交由异或部件进行异或运算。发起异或请求后就处理下一个条带;同时叫醒th3。

5、线程th3负责重新组织异或的结果,并将数据下发到热备盘S0中。

6、当所有扇区遍历完成后,便恢复了所有数据。

基于上述技术方案,本发明实施例提供的RAID重建的方法,将重建的过程划分3个阶段,处理过程更加清晰,使用流水线处理,充分利用并行操作,提高了条带的处理速度,缩短了RAID重建的时间,克服了传统的RAID在重建时,每个条带都是串行处理的,且只有一个线程,不能充分发挥多核的优势的缺点。

下面对本发明实施例提供的RAID重建的系统及RAID进行介绍,下文描述的RAID重建的系统及RAID与上文描述的RAID重建的方法可相互对应参照。

请参考图2,图2为本发明实施例所提供的RAID重建的系统的结构框图;该系统可以包括:

主线程模块100,用于当RAID触发重建时,RAID主线程创建三个线程;其中,三个线程中均包含有条带队列;三个线程并行的按照对应的条带队列中条带的顺序依次执行线程操作,当各条带队列中均不含有条带时,完成RAID重建;

第一线程模块200,用于根据磁盘扇区获取空闲条带,并按照空闲条带宽度下发读操作请求,并把所述空闲条带加入到该线程的条带队列中,当所述空闲条带内所有磁盘中的数据读取完毕后将对应条带发送到第二线程;

第二线程模块300,用于按照条带队列中条带的顺序依次对条带进行异或运算处理,并将对应条带发送到第三线程;

第三线程模块400,用于按照条带队列中条带的顺序依次将条带中的数据下发到热备磁盘。

基于上述实施例,所述主线程模块100具体用于当RAID存在故障磁盘时触发RAID重建,RAID主线程创建三个线程,并分别将三个线程进行CPU绑定。

基于上述实施例,所述第一线程模块200,包括:

条带申请单元,用于根据磁盘扇区以固定数据长度作为步长申请空闲条带作为当前条带;

读操作单元,用于申请成功后,对RAID中正常磁盘按照当前条带宽度下发起读操作请求并加入条带队列,在发起读操作请求后处理下一个步长的数据;

第一发送单元,用于当所述当前条带中读操作对应数据成功返回到所述当前条带缓存区后,将所述当前条带发送到第二线程。

基于上述实施例,所述第二线程模块300,包括:

异或运算单元,用于对当前条带发起异或运算请求,并在发起异或运算请求后处理下一个条带;

第二发送单元,用于当所述当前条带成功执行异或运算后,将所述当前条带发送到第三线程。

基于上述实施例,所述第三线程模块400具体为将当前条带中异或运算的结果数据下发到热备磁盘中。

基于上述任意实施例,本发明还提供一种RAID,包括:根据上述任意实施例所述的RAID重建的系统。

其中,所述RAID可以为传统RAID也可以为分布式RAID。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

以上对本发明所提供的RAID重建的方法、系统及RAID进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1