一种基于虚拟磁盘层的io流控制方法及装置的制造方法

文档序号:8942769阅读:481来源:国知局
一种基于虚拟磁盘层的io流控制方法及装置的制造方法
【技术领域】
[0001]本发明涉及计算机技术领域,具体涉及一种基于虚拟磁盘层的1流控制方法及
目.0
【背景技术】
[0002]传统的磁盘驱动建立在通用块设备层之下,当外部发送到块设备接口的Outstanding 10(未完成的10)超出磁盘硬件处理能力时,缓存到块设备队列Queue中,队列的深度Queue Depth可以设置,当块设备队列Queue中缓存的1个数超出Queue Depth长度时,阻塞1进程,直到因为下层1处理完毕使得队列长度小于Queue D印th,才能重新唤醒1进程。
[0003]但是,传统的磁盘驱动缓存队列方法有以下缺陷:第一,当缓存的1个数超出Queue Depth长度时,导致执行1的进程阻塞。在中高端存储设备上对随机1PS(Input/Output Operat1ns Per Second,即每秒进行读写操作的次数)的要求很高,要求达到10-100万级别,若发生进程阻塞-唤醒,会对1PS处理能力造成极大影响,导致性能不达标;第二,单个缓存队列会造成读10等待写10的情况,使得读10的响应时间增大并且不稳定。

【发明内容】

[0004]针对现有技术中存在的容易导致执行10的进程阻塞以及在读写并发情况下读10的相应时间大且不稳定的缺陷,本发明提供了一种基于虚拟磁盘层的10流控制方法及装置。
[0005]—方面,本发明提供的一种基于虚拟磁盘层的10流控制方法,包括:
[0006]建立虚拟磁盘;
[0007]在所述虚拟磁盘中设置读10队列和写10队列;
[0008]执行10读时,将读10缓存到读10队列中,执行写10时,将写10缓存到写10队列中。
[0009]进一步地,所述虚拟磁盘,将磁盘的几何空间划分为保留区和数据区。
[0010]进一步地,所述保留区包括:超级块区、位图bitmap索引区、坏块重定向索引区以及坏块重定向数据区。
[0011]进一步地,所述将读10缓存到读10队列中,将写10缓存到写10队列中的步骤之前,还包括:
[0012]针对每一个所述队列设定最大正在处理10个数的值threshold ;
[0013]判断所述队列的正在处理10个数是否大于threshold值,若是,则不执行,否则,依次发送待执行的10到所述队列中,直到所述队列的正在处理10个数等于threshold值。
[0014]进一步地,所述队列接收发送待执行的10时,相应的正在处理10个数加1,完成10时,相应的正在处理10个数减I。
[0015]另一方面,本发明还提供一种基于虚拟磁盘层的1流控制装置,包括:
[0016]建立模块,用于建立虚拟磁盘;
[0017]设置模块,用于在所述虚拟磁盘中设置读1队列和写1队列;
[0018]存储模块,用于执行1读时,将读1缓存到读1队列中,执行写1时,将写1缓存到写1队列中。
[0019]进一步地,所述建立模块具体用于:所述虚拟磁盘,将磁盘的几何空间划分为保留区和数据区。
[0020]进一步地,所述建立模块具体用于:所述保留区包括:超级块区、位图bitmap索引区、坏块重定向索引区以及坏块重定向数据区。
[0021]进一步地,所述存储模块还用于:
[0022]针对每一个所述队列设定最大正在处理1个数的值threshold ;
[0023]判断所述队列的正在处理1个数是否大于threshold值,若是,则不执行,否则,依次发送待执行的1到所述队列中,直到所述队列的正在处理1个数等于threshold值。
[0024]进一步地,所述存储模块还用于:所述队列接收发送待执行的1时,相应的正在处理1个数加1,完成1时,相应的正在处理1个数减I。
[0025]本发明提供的一种基于虚拟磁盘层的1流控制方法及装置,通过引入虚拟磁盘,在所述虚拟磁盘中设置读1队列和写1队列;执行读1时,将读1缓存到读1队列中,执行写1时,将写1缓存到写1队列中。可以实现应用于下层的任何类型的磁盘驱动,都不会产生阻塞进程导致的性能问题,使得1PS性能在磁盘驱动上不产生瓶颈。同时,降低了读写并发情况下读1的响应时间,提高了读1响应时间的稳定性。
【附图说明】
[0026]通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
[0027]图1是本发明一个实施例中一种基于虚拟磁盘层的1流控制方法的流程示意图;
[0028]图2是本发明一个实施例中发送b1的队列接口函数流程示意图;
[0029]图3是本发明一个实施例中一种基于虚拟磁盘层的1流控制装置的结构示意图。
【具体实施方式】
[0030]现结合附图和实施例对本发明技术方案作进一步详细阐述。
[0031]图1示出了本实施例中一种基于虚拟磁盘层的1流控制方法的流程示意图,如图1所示,本实施例提供的一种基于虚拟磁盘层的1流控制方法,包括:
[0032]SI,建立虚拟磁盘;
[0033]S2,在所述虚拟磁盘中设置读1队列和写1队列;
[0034]S3,执行1读时,将读1缓存到读1队列中,执行写1时,将写1缓存到写1队列中。
[0035]在本实施例中,为了让RAID (Redundant Arrays of independent Disks,磁盘阵列)更好的记录各种状态,适应各种磁盘,我们引入了虚拟磁盘Virtual Storage Disk(简称VSD)层。VSD将磁盘的几何空间做了重新划分,分为保留区和数据区。保留区由超级块区,bitmap索引区,坏块重定向索引区,坏块重定向数据区等组成。
[0036]上层的1要到达Disk,要通过VSD层转发,在VSD层做流控,就可以针对下层的各种Disk驱动做流控,与具体OS,Disk无关,具有很高的兼容性和扩展性。
[0037]我们在VSD设定了两个队列,读1的r_queue和写1的w_queue。
[0038]对每个队列上的10,若需要缓存,则缓存到队列,每个Queue结构中有最大正在处理10(pending 10)个数的设定值threshold,该值通过自测试程序产生,pending 1个数低于这个值不会造成底层的Disk驱动阻塞进程。
[0039]本实施例的具体工作流程:
[0040]执行1时,排队到对应的Queue (读1对应r_queue,写1对应w_queue):若Queue的pending 1大于threshold,则不执行;否则依次下发pendi
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1