一种基于磁盘i/o队列的磁盘阵列写方式选择方法

文档序号:9452790阅读:639来源:国知局
一种基于磁盘i/o队列的磁盘阵列写方式选择方法
【技术领域】
[0001]本发明属于计算机磁盘阵列技术领域,具体涉及通过磁盘输入/输出(I/O)队列实现高效磁盘阵列写方式选择方法。
【背景技术】
[0002]美国计算机协会出版的《1988年ACM SIGMOD国际会议上的数据管理的会议记录〉〉(Proceedings of the 1988 ACM SIGMOD internat1nal conference on Managementof data,1988年第I版,第109?116页)所介绍的磁盘阵列(A Case for RedundantArrays of Inexpensive Disks (RAID))充分利用每个磁盘的并行性,并引进校验块(parity)保证数据的安全性。在实现RAID技术的Linux操作系统内核中,对每一个条带上的写方式有两种选择,分别是“读-改-写”(read-modify-write)方式和“读-重构-写” (read-construct-write)方式。自Linux 2.6版本发行以来,对RAID中写方式的选择一直都是采用产生最少磁盘请求的写方式,这种方法没有考虑到磁盘上的具体请求状态,因此可能会造成某一块磁盘负载过多,而其他磁盘比较空闲的情况,降低阵列的并行性,产生较高的响应延迟和降低系统的带宽。

【发明内容】

[0003]本发明的目的是提出一种磁盘阵列写方式选择方法,以克服现有技术的上述缺陷,在保证低开销的情况下,增强阵列的并行性,缩短请求的平均响应时间,提高系统的带宽。
[0004]本发明基于磁盘1/0队列的磁盘阵列写方式选择方法,其特征在于包括以下步骤:
[0005]第一步:设计存储结构
[0006]采用一组结构来存放磁盘阵列中每个磁盘1/0队列中读请求个数和写请求个数,其中,磁盘数为N的磁盘阵列中,包含N个条目存放磁盘1/0队列中读请求个数,N个条目存放磁盘1/0队列写请求个数,每个条目占用4字节;
[0007]第二步:计算预读请求个数
[0008]当写请求的数目不足以构建一个新的条带时,计算新的校验位:根据该条带中数据块和校验块进行异或运算得到新的校验块;统计该条带中不在内存中的块的个数,即预读请求个数;分别计算“读-改-写”方式产生的预读请求个数Num_rmw和“读-重构-写”方式产生的预读请求个数Num_rcw ;
[0009]第三步:写方式选择策略
[0010]设定一个范围在[0,N]的阀值T表示每次进行写方式选择所造成的额外负载上限;
[0011]如果“读-改-写”方式产生的预读请求个数减去“读-重构-写”方式产生的预读请求个数的差值大于T,则选用“读-重构-写”方式;
[0012]如果“读-重构-写”方式产生的预读请求个数减去“读-改-写”方式产生的预读请求个数的差值大于T,则选用“读-改-写”方式;
[0013]如果“读-改-写”方式产生的预读请求个数减去“读-重构-写”方式产生的预读请求个数的绝对值小于等于T,则按写方式分别计算相关磁盘I/O队列预算延迟:读请求个数+写请求个数X磁盘的写延迟/读延迟的比值;计算采用“读-改-写”方式需要读取的每个磁盘I/o队列的预算延迟,从中选取最大磁盘I/O队列预算延迟Max_rmw ;再计算采用“读-重构-写”方式需要读取的每个磁盘I/O队列的预算延迟,从中选取最大磁盘I/O队列预算延迟Max_rcw ;
[0014]在“读-改-写”方式产生的预读请求个数减去“读-重构-写”方式产生的预读请求个数的绝对值小于等于T的情况下,若“读-改-写”方式的最大磁盘I/O队列预算延迟大于“读-重构-写”方式的最大磁盘I/O队列预算延迟,就选用“读-重构-写”方式;若“读-重构-写”方式的最大磁盘I/O队列预算延迟大于“读-改-写”方式的最大磁盘I/o队列预算延迟,就选用“读-改-写”方式;若“读-改-写”方式的最大磁盘I/O队列预算延迟等于“读-重构-写”方式的最大磁盘I/o队列预算延迟,再根据“读-改-写”方式产生的预读请求个数和“读-重构-写”方式产生的预读请求个数的大小关系进行抉择:当“读-改-写”方式产生的预读请求个数小于“读-重构-写”方式产生的预读请求个数时,就选用“读-改-写”方式;当“读-改-写”方式产生的预读请求个数大于等于“读-重构-写”方式产生的预读请求个数时,就选用“读-重构-写”方式;
[0015]第四步:维护存储结构
[0016]在选定好一种写方式后,下发读请求到对应的磁盘I/O队列中,将第一步中的存储结构所对应的磁盘的读请求数加I。
[0017]上述本发明的基于磁盘I/O队列的磁盘阵列写方式选择方法,采取了设计存储结构、计算预读请求个数、写方式选择策略和维护存储结构的操作步骤;由于在处理写请求和更新校验块时,根据下层磁盘上的I/o队列中的读请求个数和写请求个数计算最大磁盘I/O队列预算延迟来确定写方式,与传统的磁盘阵列写方式选择相比,在保证系统可以承受的负载下避免了某一磁盘负载过多,而其他磁盘比较空闲的这种情况,增强了磁盘阵列的并行性,缩短了请求的平均响应时间,并提高了系统的带宽。
【附图说明】
[0018]图1为磁盘阵列条带组织示意图。
[0019]图2表示磁盘阵列中各个磁盘的I/O队列状态示意图。
[0020]图3表示采用“读-改-写”方式更新校验块示意图。
[0021]图4表示采用“读-重构-写”方式更新校验块示意图。
[0022]图5为按照本发明方法进行磁盘阵列写方式选择的总体操作流程示意图。
【具体实施方式】
[0023]下面结合附图通过具体实施例对本发明基于磁盘I/O队列的磁盘阵列写方式选择方法作进一步的详细说明。
[0024]实施例1:
[0025]本实施例基于磁盘I/O队列的磁盘阵列写方式选择方法,具体包括以下步骤:
[0026]第一步:存储结构设计
[0027]附图1给出了整个磁盘阵列的条带组织示意图。这是由8块磁盘(编号为DO?D7)构成的RAID5阵列,磁盘采用固态硬盘,其读延迟是25微秒/页,写延迟是200微秒/页。每个方块表示一个块,大小为4KB,每一行代表一个条带,每个条带由8个块组成,条带大小为32KB。对每个块进行编号<i,j>,i表示所在的磁盘编号Di,j表示所在的条带编号,附图1中有4个条带,编号分别为0、1、2、3和4。在附图1中,编号DO?D6的磁盘中存放条带中的数据块,编号D7磁盘存放校验块。本实施例基于附图1的磁盘阵列结构进行基于磁盘I/O队列的磁盘阵列写方式选择方法。
[0028]附图2给出了通过本存储结构记录的磁盘阵列中各个磁盘I/O队列中待处理的读请求个数和写请求个数的示意图。磁盘阵列中编号DO?D7磁盘的I/O队列中待处理的读请求个数分别为10、20、12、20、30、15、23和15。磁盘阵列中编号DO?D7磁盘的I/O队列中待处理的写请求个数分别为5、50、13、10、64、22、30和35。
[0029]第二步:计算预读请求个数
[0030]当下发的写请求数目不足以构建一个新的条带时,此时需要更新条带中的校验块,附图3给出了由编号A、B、C、D、E、F、G和P这8个块组成的一个条带,其中编号A、B、C、D、E、F和G的方块代表条带中的数据块,编号P的方块代表条带中的校验块。此时有两个写请求到来,分别是将编号B的方块和编号E的方块中的数据更新为编号B’和E’方块中的数据。为了数据的一致性,在更新数据块的同时也要更新校验块。在更新校验块时需要读取条带中的其他方块中的数据,但是条带中的其他方块的数据又不一定全部存放在内存中,此时需要下发预读请求,将相应的方块中的数据从磁盘上读取到内存中以计算新的
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1