CN100470507C - 磁盘阵列结构中进行回写的方法 - Google Patents
磁盘阵列结构中进行回写的方法 Download PDFInfo
- Publication number
- CN100470507C CN100470507C CNB2003101140909A CN200310114090A CN100470507C CN 100470507 C CN100470507 C CN 100470507C CN B2003101140909 A CNB2003101140909 A CN B2003101140909A CN 200310114090 A CN200310114090 A CN 200310114090A CN 100470507 C CN100470507 C CN 100470507C
- Authority
- CN
- China
- Prior art keywords
- write
- disk
- stripe unit
- read
- data
- 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.)
- Expired - Lifetime
Links
- 238000000034 method Methods 0.000 title claims abstract description 37
- 230000004044 response Effects 0.000 claims abstract description 32
- 238000012545 processing Methods 0.000 claims description 30
- 239000011159 matrix material Substances 0.000 claims description 14
- 238000012795 verification Methods 0.000 claims description 14
- 208000006011 Stroke Diseases 0.000 claims description 8
- 238000000354 decomposition reaction Methods 0.000 claims description 8
- 230000005856 abnormality Effects 0.000 claims description 7
- 206010008190 Cerebrovascular accident Diseases 0.000 claims description 6
- 210000000056 organ Anatomy 0.000 claims description 6
- 239000007787 solid Substances 0.000 claims description 6
- 241001269238 Data Species 0.000 claims description 2
- 230000008569 process Effects 0.000 abstract description 15
- 238000005516 engineering process Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 8
- 230000000875 corresponding effect Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 239000012141 concentrate Substances 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 230000007812 deficiency Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000002679 ablation Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- SBNFWQZLDJGRLK-UHFFFAOYSA-N phenothrin Chemical compound CC1(C)C(C=C(C)C)C1C(=O)OCC1=CC=CC(OC=2C=CC=CC=2)=C1 SBNFWQZLDJGRLK-UHFFFAOYSA-N 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000005728 strengthening Methods 0.000 description 1
Images
Abstract
一种磁盘阵列结构中进行回写的方法,高速缓存(Cache)按照一定的策略选取要回写的区域,对回写区域数据进行预处理,集中批量下发对磁盘的子读请求,对返回的子读请求响应进行处理,再集中批量下发对磁盘的子写请求,对返回的子写请求响应进行处理。本发明中Cache对回写区域的选择保证了最需要回写的数据得到回写,回写完成后能够空出尽量多的Cache空间,而且每次回写磁头的移动固定在一个区域中,有效减少了回写中磁头的定位时间,Cache提供给RAID的最小单位是分条单元,而且所有分条的读、写请求按磁盘集中下发,从而对该磁盘的读、写请求能够进行有效地合并和调度,进而提高了回写效率。
Description
技术领域
本发明涉及数据的存储,尤其涉及一种磁盘阵列结构中进行回写的方法。
背景技术
随着计算机应用领域的不断拓宽,用户对于存储系统的容量要求越来越大,对其可靠性、可用性要求越来越高,速度要求也越来越快。微处理器的处理速度相应提高很快。但是作为主要外存的磁盘由于机械运动的限制,其速度改善不大(存取时间停留在毫秒级),这样就大大限制了SAN(存储区域网络)系统的整体性能。解决这个瓶颈的带Cache(高速缓存)的磁盘阵列结构(RAID),以其高效、快速、大容量、高可靠性和灵活、价廉的优点在高性能计算机存储中占主导地位。
磁盘阵列技术将普通硬盘组成一个磁盘阵列,在主机写入数据时,RAID控制器把主机要写入的数据分解为多个数据块,然后并行写入磁盘阵列;主机读取数据时,RAID控制器并行读取分散在磁盘阵列中各个硬盘上的数据,把它们重新组合后提供给主机。由于采用并行读写操作,从而提高了存储系统的存取程度。此外,RAID磁盘阵列还可以采用镜像、奇偶校验等措施,来提高系统的容错能力,保证数据的可靠性。
根据RAID所采用的方法不同,可以将其分为0-5六个级别:
RAID 0:即数据分条技术,主机要求写入数据时,RAID控制器将数据分成许多块,然后并行地将它们写到磁盘阵列中的各个硬盘上;读出数据时,RAID控制器从各个硬盘上读取数据,把这些数据恢复为原来顺序后传给主机。整个逻辑盘的数据是被分条(stripped)分布在多个物理磁盘上,可以并行读/写,提供最快的速度,但没有冗余能力。这种方法的优点是采用数据分块、并行传送方式,能够提高主机读写速度,并且磁盘阵列中存储空间没有冗余。但它对系统的可靠性没有任何提高,任一个硬盘介质出现故障时,系统无法恢复。
RAID 1:它把磁盘阵列中的硬盘分成相同的两组,互为镜像,当任一磁盘介质出现故障时,可以利用其镜像上的数据恢复,从而提高系统的容错能力。对数据的操作仍采用分块后并行传输方式。所以RAID 1不仅提高了读写速度,也加强系统的可靠性。但其缺点是硬盘的利用率低,冗余度为50%。
RAID 2/RAID 4:这两个级别在实际中很少应用,多数系统也不支持,这里不作介绍。
RAID 3:同RAID 0一样,RAID 3也采用数据分块并行传送的方法,但所不同的是它在数据分块之后计算它们的奇偶校验和,然后把分块数据和奇偶校验信息一并写到硬盘阵列中。采用这种方法对数据的存取速度和可靠性都有所改善,当阵列中任一硬盘损坏时,可以利用其它数据盘和奇偶校验盘上的信息重构原始数据。在硬盘利用率方面,RAID 3比RAID 1要高,例如由5个硬盘组成的阵列,冗余度只有20%。不过,RAID 3也有缺点,由于奇偶校验信息固定存储在一个硬盘上,使该硬盘负担较重,从而产生新的瓶颈。
RAID 5:与RAID 3所采用的数据处理方法相似,所不同的是它把奇偶较验信息交叉写到阵列中的每个硬盘上,从而克服了RAID 3中的瓶颈问题。
如图1所示为RAID 5中分条单元及分条的结构示意图,整个逻辑盘的数据是按分条分布在物理磁盘1、磁盘2、磁盘3和磁盘4上,可以并行读/写,主机访问的逻辑盘地址是按照D1、D2、D3、D4、......D11、D12顺序编排的。其中分条1由分条单元D1、D2、D3和校验单元P组成。
目前在带Cache(高速缓存)的磁盘阵列结构中普遍采用快速写技术(Fast Write),即当主机写请求到来时,数据块写进Cache后即发响应完成信号,实际回写操作在后台异步实现,减少了写请求响应时间。因为实际写入过程延迟,所以同磁道或柱面的数据可以一次写入,从而减少了磁盘寻道次数。将多个小块写合并成一次大块或满块写,有效减少了小块写的比例,减少了磁盘写入次数。
回写是将Cache中写数据写入磁盘的过程,回写时间=磁头定位时间(寻道时间和旋转延迟)+数据传输时间,相对来说磁头定位时间是很长的(毫秒级别),而数据传输时间跟写数据的大小有关,且没有优化的余地,因此要提高回写效率,主要是减少磁头定位时间。
RAID5技术将若干个物理磁盘捆绑在一起提供给用户,通过为用户数据维护校验数据达到单盘故障仍能恢复数据的功能。用户认为这若干个磁盘是一个磁盘(逻辑盘)。
其中,最常用的校验数据公式为:
分条中的校验数据=该分条中所有用户数据分条单元数据的异或
如图2所示,就是校验数据P=D0XOR D1 XOR D2(其中,XOR为异或操作)。
每次对磁盘的写,代表D0、D1或者D2有数据发生变化,此时校验数据已经过时,不能用以故障恢复,因此RAID5技术对于每次写都需要重新生成新校验数据。为了使得每次生成校验数据发生的读写次数最少,引入大写和小写两个概念。
对于分条中大多数分条单元的写,如分条中包含D0、D1、D2,用户需要写D0、D1,采用大写方式。即把磁盘中D2数据读出,然后根据P=D0XOR D1 XOR D2直接得到新校验数据。
对于分条中小部分分条单元的写,如分条中包含D0、D1、D2、D3,用户需要写D0,采用小写方式。因为假如此时用大写方式,为了计算校验数据需要把D1、D2、D3全部读出来,才能根据P=D0 XOR D1 XOR D2XOR D3计算出来。此时可以用另外一个公式,也就是小写计算校验数据的公式:
新校验数据=旧校验数据XOR旧数据XOR新数据
此时只需要读磁盘的D0数据和旧校验数据P就可以计算出校验数据,比采用大写方式读取的分条单元数少。
满写,即当整个分条的数据全部在CACHE中,不需要从磁盘读出时,此时只需要利用P=D0 XOR D1 XOR D2 XOR D3直接计算出校验数据,直接写磁盘就可以了,不用读磁盘数据。
前面对大写、小写和满写的原理进行了介绍,下面结合图示对大写和小写的流程进行具体说明:
如图2所示,小写是RAID5的一种写技术,一般用于当“脏分条单元(即包含写数据的分条单元,比如图1中的D0)”个数<(1/2×成员磁盘个数(图中等于4))时的写,其写过程为:
1)从磁盘读出“脏分条单元”的原有数据D0old;
2)从磁盘读出“脏分条单元”对应的原校验数据Pold;
3)根据表达式
〔(原有数据)XOR(新数据)〕XOR(原有校验数据)=新的校验数据
异或生成新的校验数据:Pnew=D0old XOR D0new XOR Pold;
4)将“脏分条单元”和新的校验数据写入磁盘,即将“脏分条单元”的新数据写入D0,新的检验数据写入P中。
如图3所示,大写是RAID5的一种写技术,一般用于当“脏分条单元(即包含写数据的分条单元,比如图2中的D0、D1)”个数≥(1/2×成员磁盘个数(图中等于4))时的写,其写过程为:
1)对未被主机更新的分条单元,从磁盘读出数据D2old;
2)计算新的校验数据Pnew=D0new XOR D1new XOR D2old;
3)将“脏分条单元”和新的校验数据写入磁盘,即将“脏分条单元”的新数据写入D0、D1,新的检验数据写入P中。
业界对回写的实现则是各显神通,但大多数研究都集中在如何选取回写的时机和回写的数据,以达到回写效率最高。这些研究包括:
IBM(国际商用机器公司)的专利US6192450“Destage of Data forWrite Cache”,采用LRU(最近最少使用)算法确定某个需要回写的数据(作为种子结点),每次回写由该种子结点确定的一个工作集进行回写。
EMC公司(美国信息存储厂商)的专利US6304946“System andMethod for Optimizing Cache Write Backs to Disks”,从当前磁头位置来决定回写的结点,从而达到减小回写代价的目的,采用Write(写)树快速查找相邻块,以便合并写操作。
HDS(日立数据系统公司)的专利US6327673“STORAGE UNITSUBSYSTEM”,主机写请求到达时,判断新的写数据需要生成新校验数据的信息是否在Cache中,如果不全在,则从磁盘读入(包括旧数据、旧校验数据),并生成校验数据写入Cache,Cache选定时间采用一定的回写策略将数据写入磁盘。其中,主机写请求写入Cache后就返回,向主机报告写完成,以上校验数据相关过程和主机读写过程独立。
这些专利从某些方面研究了提高回写效率的措施,但都没能从整个系统(结合CACHE、RAID和磁盘通道处理)的角度来关注提高回写操作本身的效率,从而无法达到回写效率最优的目的。
目前通常的技术是:如图4所示,对于Cache的回写请求,按照RAID5的地址映射算法进行地址映射,将请求拆分成以分条为单位进行处理。对每个分条,先加分条锁,然后根据请求判断写类型是小写、大写还是满写。对于大写,需要下发分条中请求的补集部分的各磁盘旧数据子读请求;对于小写,需要读取分条中请求部分的各磁盘旧数据子读请求;对于满写,则直接异或生成校验数据,下发磁盘的子写请求(新数据和新校验数据)。
如图5所示,磁盘子读请求返回时,判断是否该分条的子读请求均返回。如果全部返回,则异或生成校验数据,下发磁盘的子写请求(新数据和新校验数据)。
如图6所示,磁盘子写请求返回后,判断是否该分条中的所有子写请求返回。如果是,对该分条解锁。
该方案RAID5的回写需要按分条对写请求进行处理,分条的非满写(大写和小写)步骤包括先下发旧数据的子读请求,等待返回,再做异或后下发新数据的子写请求。当下发的某个分条的子读请求返回时,系统开始逐步下发给磁盘处理程序的子写请求。这种方案业务流程不保证同一磁盘的数据同时下发,而且读写请求混杂在一起下发,Cache未保证每次下发的分条尽量集中在相邻区域,这样导致磁盘处理合并效率比较低。
假如Cache回写请求中的分条脏数据是不连续的,对于大写和小写,该方案需要下发给磁盘若干个很可能极小的读写请求,而磁盘对于少量数据的读写效率是极其低下的,对一个分条单元下发若干个读请求的时间耗费远比直接读取一个分条单元的时间要长,这样Cache回写的效率很低。
上文都是以分条单元为最小单位来解释大写、小写,但实际上分条单元(SU)可能大小为5Kbyte,用户可能每次只写很小的一个数据块(BLOCK)。BLOCK是磁盘操作的最小数据单元,一般是512Byte。如图7所示,图中数字代表地址,如分条0中的0~7代表了8个Block。用户如果需要写第8、10、19个Block(即分条脏数据不连续),则需要更新分条0中的校验数据P0和P2。P0对应的是脏块Block10,P2对应的是脏块Block8和19。按照小写方式,更新P0需要读取磁盘的Block10和P0,更新P2需要读取磁盘的Block8、Block19和P2,这样就会下发很多小块的读写请求,导致Cache回写的效率很低。
发明内容
本发明所要解决的技术问题是:克服现有的带Cache的磁盘阵列结构中回写效率低的不足,提供一种磁盘阵列结构中进行回写的方法,从而提高Cache回写效率,优化存储系统性能。
本发明为解决上述技术问题所采用的技术方案为:
这种磁盘阵列结构中进行回写的方法,包括以下步骤:
A1、高速缓存(Cache)按照一定的策略选取要回写的区域;
A2、对回写区域数据进行预处理,集中批量下发对磁盘的子读请求;
A3、对返回的磁盘子读请求响应进行处理;
A4、集中批量下发对磁盘的子写请求;
A5、对返回的磁盘子写请求响应进行处理;
所述步骤A2中,对回写区域数据的预处理包括以下步骤:
B1、将回写区域分解成包含分条单元的矩阵,矩阵的横、纵坐标分别为最大分条个数和磁盘阵列组中成员磁盘个数;
B2、对分条单元做地址映射,得到磁盘标识和起始的物理地址;
B3、根据脏数据是否满及分条中脏数据特征对分条单元做读、写标记。
所述步骤A1中,Cache选取回写区域的策略为:选择最近最少使用的数据所在的区域;或优先选择大量连续数据所在区域;或统计所有区域中的脏块数量,优先回写超过平均脏块数量的区域。
所述步骤A1中,Cache选取回写区域的策略还包括同一时间内一个磁盘阵列(RAID)组中只有一个区域在回写。
所述步骤B3中,对分条单元中脏且不满的分条单元做读满标记,确保磁盘阵列处理的最小单元为分条单元。
所述步骤B3中,在对某分条单元做读磁盘标记前,向Cache查询其旧数据是否为满,如果是,则不做标记;否则:
如果脏分条单元个数等于成员磁盘个数,则满写,对所有分条单元做回写标记;
如果脏分条单元个数大于等于成员磁盘个数的二分之一,则大写,对干净分条单元做读磁盘标记,对脏分条单元做写标记,对校验分条单元做写标记;
如果脏分条单元个数小于成员磁盘个数的二分之一,则小写,对脏分条单元、校验分条单元做读磁盘标记,对脏分条单元、校验分条单元做写磁盘标记。
对当前分条的读写标记完成后,如果发现本分条没有读磁盘请求标记,则提前启动对此分条的异或处理生成新校验数据。
所述步骤A3中,对返回的磁盘子读请求响应进行处理包括:
如果请求响应正常返回,则对以将分条单元变为满为目的的读,将读取的旧数据写入Cache;
如果此请求响应对应分条的所有读请求都已返回,则对本分条进行异或处理;
如果请求响应异常返回,则放弃此区域的回写,向Cache报告区域回写失败,并对后续此区域返回的读磁盘响应作简单抛弃处理。
所述的集中批量下发对磁盘的子读请求是对分条单元矩阵的每一列,发所有置了读标记的分条单元的读磁盘请求;所述的集中批量下发对磁盘的子写请求是对分条单元矩阵的每一列,发所有置了写标记的分条单元的写磁盘请求。
所述的步骤A5中,循环读取磁盘返回的写请求响应消息,如果磁盘返回异常,报告磁盘失败;如果磁盘返回正常,则判断是否所有写请求都已返回,如果是,则通知Cache此区域回写完成。
本发明的有益效果为:本发明中Cache对回写区域的选择保证了最需要回写的数据得到回写,回写完成后能够空出尽量多的Cache空间;而且每次回写磁头的移动固定在一个区域中,有效减少了回写中磁头的定位时间。
本发明中Cache提供给RAID的最小单位是分条单元,保证了回写模块发送给磁盘的读写请求都是分条单元级别的,这样克服了分条脏数据不连续所带来的回写效率低的不足。回写区域的回写分成预回写和回写两个阶段,通过先对分条单元作读、写标记,保证了所有分条的读、写请求可按磁盘集中下发给磁盘通道处理模块,从而磁盘通道处理模块对该磁盘的请求能够进行有效地合并和调度,进而提高了回写效率。
本发明站在系统的级别,对回写的整个流程进行优化,从回写的源头Cache开始,历经RAID处理模块和磁盘通道处理模块,提高了回写效率,优化了系统性能。
附图说明
图1为RAID5中分条单元及分条的结构示意图;
图2为RAID5中小写示意图;
图3为RAID5中大写示意图;
图4为现有的回写预处理流程图;
图5为现有的读返回处理流程图;
图6为现有的写返回处理流程图;
图7为分条脏数据不连续结构示意图;
图8为本发明回写原理模块示意图。
具体实施方式
下面根据附图和实施例对本发明作进一步详细说明:
本发明旨在提高存储系统中Cache的回写效率,站在系统的级别,对回写的整个流程进行优化。从回写的源头Cache开始优化,历经RAID处理模块和磁盘通道处理模块,专门对回写提供一套流程以提高效率。
首先在Cache中,每次选择一个区域进行回写,并且确保同一时间内一个RAID组中只有一个区域在回写,以保证在这一段时间内每个磁盘磁头的移动固定在一个区域中,有效减少回写中磁头定位时间,从而极大地提高磁盘读写效率。
在Cache中帮助RAID屏蔽掉BLOCK的概念。由于主机写请求的最小单位不确定,导致Cache中回写分条中的脏数据可能不连续,而RAID对于这种不连续的分条的回写将下发BLOCK级别的磁盘读写请求,导致效率低下。本发明中Cache提供给RAID的最小单位是分条单元,保证了RAID发送给磁盘通道处理模块的读写请求都是分条单元级别的,从而提高磁盘读写效率。
本发明将回写区域的回写分成两个阶段:读阶段(或称为预回写阶段)和写阶段。分条的非满写(大写和小写)步骤包括先下发旧数据的子读请求,等待返回,再做异或后下发新数据的子写请求。如果将工作集中所有分条的读作为一个阶段按磁盘集中下发给磁盘通道处理模块,写作为另一个阶段也按磁盘集中下发,磁盘通道处理模块就能够对该磁盘的请求进行有效的合并和调度,进而提高回写效率。
假如一个RAID组包括四个成员磁盘,回写是需要读磁盘然后写磁盘的。如果一次回写包括10个分条的回写,通常对四个成员磁盘都有一部分读操作和一部分写操作。譬如对磁盘1有5个分条单元的读,8个分条单元的写,则把对5个分条单元的读请求集中下发给磁盘处理程序,由于这些分条单元地址相邻,磁盘定位时间一般只需一次,就可以提高回写效率。
如图8所示,本发明RAID处理模块由RAID5预处理子模块、读响应处理子模块及写响应处理子模块组成。RAID5预处理子模块主要功能为,对RAID5类型的区域先做矩阵分解、映射、读写标记,再批量下发读磁盘请求;读响应处理子模块对读磁盘请求响应进行正常、异常处理;写响应处理子模块为对写磁盘请求响应的正常、异常处理。
回写的数据流向过程如下:
(1)Cache下发要回写的区域,Cache选择回写区域的原则可以有:
A、写Cache的LRU(最近最少使用)链表结点所在区域;
B、大量连续数据所在区域(大量连续定义为存在满分条N,N+1...,N+m,m值大于一给定值);
C、Cache统计所有区域中的脏块数量,优先回写超过平均脏块数量的区域;
D、同一时间内一个RAID组中只有一个区域在回写。
(2)调用RAID5的分解函数将此区域分解成包含分条单元的矩阵;
预处理子模块将区域分解成包含分条单元的矩阵:M×N,M为区域包含最大分条个数,N为RAID组中成员磁盘个数;
(3)循环对区域中的可回写分条做下面的处理:
调用MAP的函数(地址映射函数)对分条单元做地址映射,并根据脏数据是否满、分条中脏数据特征做读写标记;
A、调用地址映射模块的函数对分条中每个分条单元做地址映射,得到磁盘标识(DISKID)和起始的物理LBA(逻辑扇区地址);
B、对分条中脏且不满的分条单元做读满标记,确保RAID处理的最小单元为分条单元;
C、再根据RAID组状态对分条做RAID处理的读写标记,在对某分条单元做读磁盘标记前,向Cache查询其旧数据是否为满,如果是则不做标记;否则,
a)如果脏分条单元个数等于成员磁盘个数,则满写,对所有分条单元做回写标记;
b)如果脏分条单元个数大于等于成员磁盘个数/2,则大写,对干净分条单元做读磁盘标记,对脏分条单元做写标记,对校验分条单元做写标记;
c)如果脏分条单元个数小于成员磁盘个数/2,则小写,对脏分条单元、校验分条单元做读磁盘标记,对脏分条单元、校验分条单元做写磁盘标记;
D、对当前分条做RAID处理的读写标记完成后,如果发现本分条没有读磁盘请求标记,则提前启动对此分条的XOR(异或)处理生成新校验数据。
(4)调用批量磁盘处理函数对分条单元矩阵批量下发读磁盘请求(即循环对分条单元矩阵的每一列,下发所有置了读标记的分条单元的读磁盘请求),并记录下发读磁盘请求总个数;
(5)读磁盘响应返回;
(6)循环读取磁盘返回的读请求响应消息,并处理:
A、如果请求正常返回,则对以将分条单元变为“满”为目的的读,要将读取的旧数据写入Cache;
B、如果此请求响应对应分条的所有读请求都已返回,则按XOR规则完成本分条的所有XOR操作;
C、如果此请求响应对应区域的所有读请求都已返回,跳至步骤8。
(7)如果请求响应异常返回,则进行异常处理:
A、报告磁盘失败;
B、放弃此区域的回写,向Cache报告区域回写失败;
C、对后续此区域返回的读磁盘响应作简单抛弃处理。
(8)所有读请求都已返回,并处理完成后,调用磁盘通道处理模块的接口函数进行批量下发写磁盘请求,即循环对分条单元矩阵的每一列,发所有置了写标记的分条单元的写磁盘请求,并记录下发写磁盘请求总个数。
(9)写磁盘通道处理模块响应返回消息队列;
(10)对每个磁盘通道处理模块写响应进行处理,包括异常处理;
(11)如果所有写请求都已返回,则通知Cache此区域回写完成。
循环读取磁盘返回的写请求响应消息,如果磁盘返回异常,报告磁盘失败;如果磁盘返回正常,判断是否所有写请求都已返回,如果是,则通知CACHE此区域回写完成。
所有XOR在分条所有读磁盘都返回以后开始(根据分条读磁盘的个数来判断),XOR的单位都是分条单元大小,生成新校验XOR的源数据,在小写时,为所有脏分条单元的旧数据、所有脏分条单元的新数据、校验分条单元的旧数据;在大写时,为所有干净分条单元的旧数据、所有脏分条单元的新数据;在满写时,为所有脏分条单元的新数据;生成新校验XOR的结果数据是校验分条单元。
本发明站在系统的级别,对回写的整个流程进行优化,从回写的源头Cache开始,历经RAID处理模块和磁盘通道处理模块,提高了回写效率,优化了系统性能。
Claims (10)
1、一种磁盘阵列结构中进行回写的方法,其特征在于,包括以下步骤:
A1、高速缓存按照一定的策略选取要回写的区域;
A2、对回写区域数据进行预处理,集中批量下发对磁盘的子读请求;
A3、对返回的磁盘子读请求响应进行处理;
A4、集中批量下发对磁盘的子写请求;
A5、对返回的磁盘子写请求响应进行处理;
其中,所述步骤A2中,对回写区域数据的预处理包括以下步骤:
B1、将回写区域分解成多个分条单元;
B2、对分条单元做地址映射,得到磁盘标识和起始的物理地址;
B3、根据脏数据是否满及分条中脏数据特征对分条单元做读、写标记。
2、根据权利要求1所述的磁盘阵列结构中进行回写的方法,其特征在于:所述步骤A1中,高速缓存选取回写区域的策略为:选择最近最少使用的数据所在的区域;或优先选择大量连续数据所在区域;或统计所有区域中的脏块数量,优先回写超过平均脏块数量的区域。
3、根据权利要求2所述的磁盘阵列结构中进行回写的方法,其特征在于:所述步骤A1中,高速缓存选取回写区域的策略还包括同一时间内一个磁盘阵列组中只有一个区域在回写。
4、根据权利要求1、2或3所述的磁盘阵列结构中进行回写的方法,其特征在于:所述步骤B1中将回写区域分解成多个分条单元包括以下步骤:
将回写区域分解成包含分条单元的矩阵,矩阵的横、纵坐标分别为最大分条个数和磁盘阵列组中成员磁盘个数。
5、根据权利要求4所述的磁盘阵列结构中进行回写的方法,其特征在于:所述步骤B3中,对分条单元中脏且不满的分条单元做读满标记,确保磁盘阵列处理的最小单元为分条单元。
6、根据权利要求4所述的磁盘阵列结构中进行回写的方法,其特征在于:所述步骤B3中,在对某分条单元做读磁盘标记前,向高速缓存查询其旧数据是否为满,如果是,则不做标记;否则:
如果脏分条单元个数等于成员磁盘个数,则满写,对所有分条单元做回写标记;
如果脏分条单元个数大于等于成员磁盘个数的二分之一,则大写,对干净分条单元做读磁盘标记,对脏分条单元做写标记,对校验分条单元做写标记;
如果脏分条单元个数小于成员磁盘个数的二分之一,则小写,对脏分条单元、校验分条单元做读磁盘标记,对脏分条单元、校验分条单元做写磁盘标记。
7、根据权利要求4所述的磁盘阵列结构中进行回写的方法,其特征在于:对当前分条的读写标记完成后,如果发现本分条没有读磁盘请求标记,则提前启动对此分条的异或处理生成新校验数据。
8、根据权利要求1所述的磁盘阵列结构中进行回写的方法,其特征在于:所述步骤A3中,对返回的磁盘子读请求响应进行处理包括:
如果请求响应正常返回,则对以将分条单元变为满为目的的读,将读取的旧数据写入高速缓存;
如果此请求响应对应分条的所有读请求都已返回,则对本分条进行异或处理;
如果请求响应异常返回,则放弃此区域的回写,向高速缓存报告区域回写失败,并对后续此区域返回的读磁盘响应作简单抛弃处理。
9、根据权利要求4所述的磁盘阵列结构中进行回写的方法,其特征在于:所述的集中批量下发对磁盘的子读请求是对分条单元矩阵的每一列,发所有置了读标记的分条单元的读磁盘请求;所述的集中批量下发对磁盘的子写请求是对分条单元矩阵的每一列,发所有置了写标记的分条单元的写磁盘请求。
10、根据权利要求1所述的磁盘阵列结构中进行回写的方法,其特征在于:所述的步骤A5中,循环读取磁盘返回的写请求响应消息,如果磁盘返回异常,报告磁盘失败;如果磁盘返回正常,则判断是否所有写请求都已返回,如果是,则通知高速缓存此区域回写完成。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2003101140909A CN100470507C (zh) | 2003-11-12 | 2003-11-12 | 磁盘阵列结构中进行回写的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2003101140909A CN100470507C (zh) | 2003-11-12 | 2003-11-12 | 磁盘阵列结构中进行回写的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1617110A CN1617110A (zh) | 2005-05-18 |
CN100470507C true CN100470507C (zh) | 2009-03-18 |
Family
ID=34760141
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2003101140909A Expired - Lifetime CN100470507C (zh) | 2003-11-12 | 2003-11-12 | 磁盘阵列结构中进行回写的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100470507C (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070214313A1 (en) * | 2006-02-21 | 2007-09-13 | Kalos Matthew J | Apparatus, system, and method for concurrent RAID array relocation |
CN102063271B (zh) * | 2010-12-17 | 2014-08-13 | 曙光信息产业(北京)有限公司 | 一种磁盘外置Cache基于状态机的写回方法 |
CN102446261A (zh) * | 2011-11-15 | 2012-05-09 | 浪潮电子信息产业股份有限公司 | 一种提高raid写效率的方法 |
CN102722340A (zh) * | 2012-04-27 | 2012-10-10 | 华为技术有限公司 | 数据处理方法、装置及系统 |
CN103577349B (zh) * | 2013-11-06 | 2016-11-23 | 华为技术有限公司 | 在高速缓存中选择数据进行刷盘的方法和装置 |
CN103645995B (zh) * | 2013-12-04 | 2016-12-07 | 华为技术有限公司 | 写数据的方法及装置 |
CN104090728B (zh) * | 2014-07-02 | 2017-07-14 | 浙江宇视科技有限公司 | 一种动态调整存储设备Cache读写命令数的方法和装置 |
CN104461382B (zh) * | 2014-11-26 | 2018-06-19 | 华为技术有限公司 | 运行多个文件系统的文件服务器的内部写方法和服务器 |
CN105988735B (zh) * | 2015-03-06 | 2019-03-19 | 华为技术有限公司 | 数据写入控制装置及方法 |
CN106033320B (zh) * | 2015-03-11 | 2020-04-14 | 中兴通讯股份有限公司 | 高性能廉价磁盘冗余阵列raid机制的处理方法及装置 |
CN105516548B (zh) * | 2015-11-27 | 2019-01-11 | 中央电视台 | 一种文件预读方法及装置 |
CN107168892A (zh) | 2017-03-29 | 2017-09-15 | 联想(北京)有限公司 | 一种数据的写入方法及装置 |
CN111124258B (zh) * | 2018-10-31 | 2024-04-09 | 深信服科技股份有限公司 | 全闪存阵列的数据存储方法、装置、设备及可读存储介质 |
CN112073253B (zh) * | 2019-06-10 | 2022-03-18 | 烽火通信科技股份有限公司 | 一种业务性能的处理方法及系统 |
-
2003
- 2003-11-12 CN CNB2003101140909A patent/CN100470507C/zh not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
CN1617110A (zh) | 2005-05-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100470507C (zh) | 磁盘阵列结构中进行回写的方法 | |
CN101976175B (zh) | 一种水平型分组并行集中校验的磁盘阵列的构建方法 | |
US6941420B2 (en) | Log-structure array | |
US7069383B2 (en) | Apparatus and method for reallocating logical to physical disk devices using a storage controller, with access frequency and sequential access ratio calculations and display | |
US7506187B2 (en) | Methods, apparatus and controllers for a raid storage system | |
CN105138292A (zh) | 磁盘数据读取方法 | |
CN100377060C (zh) | 盘阵列装置和数据恢复方法 | |
CN101976178B (zh) | 一种垂直排布集中校验的节能型磁盘阵列的构建方法 | |
CN101351760A (zh) | 用于在高电源效率的大容量可扩展存储系统中存取辅助数据的方法和系统 | |
CN103049222A (zh) | 一种raid5的写io优化处理方法 | |
CN101082853A (zh) | 闪速存储器存储系统 | |
CN101976177B (zh) | 一种垂直型分组并行集中校验的磁盘阵列的构建方法 | |
CN101604250A (zh) | 储存虚拟化系统中更新实体储存装置的控制程序的方法 | |
CN101976174A (zh) | 一种垂直排布分布校验的节能型磁盘阵列的构建方法 | |
US20100115310A1 (en) | Disk array apparatus | |
CN101976176B (zh) | 一种水平型分组并行分布校验的磁盘阵列的构建方法 | |
CN101770413A (zh) | 冗余磁盘阵列重建的方法及设备 | |
JP3099930B2 (ja) | ディスクアレイ装置 | |
CN111857540A (zh) | 数据存取方法、装置和计算机程序产品 | |
JPH1063576A (ja) | 階層ディスク装置およびその制御方法 | |
JPH0744331A (ja) | ディスクアレイ装置およびその制御方法 | |
CN101149946B (zh) | 一种处理流媒体数据的方法 | |
JPH0934651A (ja) | ディスクアレイ装置 | |
EP0661639A1 (en) | Data prefetch in mass data storage systems | |
JP2000305721A (ja) | データディスクアレイ装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CX01 | Expiry of patent term |
Granted publication date: 20090318 |
|
CX01 | Expiry of patent term |