首页 / 专利库 / 软件 / 虚拟层 / 一种基于虚拟磁盘层的IO流控制方法及装置

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

阅读:956发布:2024-02-14

专利汇可以提供一种基于虚拟磁盘层的IO流控制方法及装置专利检索,专利查询,专利分析的服务。并且本 发明 涉及计算机技术领域,具体涉及一种基于虚拟磁盘层的IO流控制方法及装置。本发明提供的一种基于虚拟磁盘层的IO流控制方法及装置,通过引入虚拟磁盘,在所述虚拟磁盘中设置读IO队列和写IO队列;执行读IO时,将读IO缓存到读IO队列中,执行写IO时,将写IO缓存到写IO队列中。可以实现应用于下层的任何类型的磁盘驱动,都不会产生阻塞 进程 导致的性能问题,使得IOPS性能在磁盘驱动上不产生 瓶颈 。同时,降低了读写并发情况下读IO的响应时间,提高了读IO响应时间的 稳定性 。,下面是一种基于虚拟磁盘层的IO流控制方法及装置专利的具体信息内容。

1.一种基于虚拟磁盘层的IO流控制方法,其特征在于,所述方法包括:
建立虚拟磁盘;
在所述虚拟磁盘中设置读IO队列和写IO队列;
执行读IO时,将读IO缓存到读IO队列中,执行写IO时,将写IO缓存到写IO队列中。
2.根据权利要求1所述的方法,其特征在于,所述虚拟磁盘,将磁盘的几何空间划分为保留区和数据区。
3.根据权利要求2所述的方法,其特征在于,所述保留区包括:超级区、位图bitmap索引区、坏块重定向索引区以及坏块重定向数据区。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述将读IO缓存到读IO队列中,将写IO缓存到写IO队列中的步骤之前,还包括:
针对每一个所述队列设定最大正在处理IO个数的值threshold;
判断所述队列的正在处理IO个数是否大于threshold值,若是,则不执行,否则,依次发送待执行的IO到所述队列中,直到所述队列的正在处理IO个数等于threshold值。
5.根据权利要求4所述的方法,其特征在于,所述队列接收发送待执行的IO时,相应的正在处理IO个数加1,完成IO时,相应的正在处理IO个数减1。
6.一种基于虚拟磁盘层的IO流控制装置,其特征在于,所述装置包括:
建立模块,用于建立虚拟磁盘;
设置模块,用于在所述虚拟磁盘中设置读IO队列和写IO队列;
存储模块,用于执行读IO时,将读IO缓存到读IO队列中,执行写IO时,将写IO缓存到写IO队列中。
7.根据权利要求6所述的装置,其特征在于,所述建立模块具体用于:所述虚拟磁盘,将磁盘的几何空间划分为保留区和数据区。
8.根据权利要求7所述的装置,其特征在于,所述建立模块具体用于:所述保留区包括:超级块区、位图bitmap索引区、坏块重定向索引区以及坏块重定向数据区。
9.根据权利要求6至8任一项所述的装置,其特征在于,所述存储模块还用于:
针对每一个所述队列设定最大正在处理IO个数的值threshold;
判断所述队列的正在处理IO个数是否大于threshold值,若是,则不执行,否则,依次发送待执行的IO到所述队列中,直到所述队列的正在处理IO个数等于threshold值。
10.根据权利要求9所述的装置,其特征在于,所述存储模块还用于:所述队列接收发送待执行的IO时,相应的正在处理IO个数加1,完成IO时,相应的正在处理IO个数减1。

说明书全文

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

技术领域

[0001] 本发明涉及计算机技术领域,具体涉及一种基于虚拟磁盘层的IO流控制方法及装置。

背景技术

[0002] 传统的磁盘驱动建立在通用设备层之下,当外部发送到块设备接口的Outstanding IO(未完成的IO)超出磁盘硬件处理能时,缓存到块设备队列Queue中,队列的深度Queue Depth可以设置,当块设备队列Queue中缓存的IO个数超出Queue Depth长度时,阻塞IO进程,直到因为下层IO处理完毕使得队列长度小于Queue Depth,才能重新唤醒IO进程。
[0003] 但是,传统的磁盘驱动缓存队列方法有以下缺陷:第一,当缓存的IO个数超出Queue Depth长度时,导致执行IO的进程阻塞。在中高端存储设备上对随机IOPS(Input/Output Operations Per Second,即每秒进行读写操作的次数)的要求很高,要求达到10-100万级别,若发生进程阻塞-唤醒,会对IOPS处理能力造成极大影响,导致性能不达标;第二,单个缓存队列会造成读IO等待写IO的情况,使得读IO的响应时间增大并且不稳定。

发明内容

[0004] 针对现有技术中存在的容易导致执行IO的进程阻塞以及在读写并发情况下读IO的相应时间大且不稳定的缺陷,本发明提供了一种基于虚拟磁盘层的IO流控制方法及装置。
[0005] 一方面,本发明提供的一种基于虚拟磁盘层的IO流控制方法,包括:
[0006] 建立虚拟磁盘;
[0007] 在所述虚拟磁盘中设置读IO队列和写IO队列;
[0008] 执行IO读时,将读IO缓存到读IO队列中,执行写IO时,将写IO缓存到写IO队列中。
[0009] 进一步地,所述虚拟磁盘,将磁盘的几何空间划分为保留区和数据区。
[0010] 进一步地,所述保留区包括:超级块区、位图bitmap索引区、坏块重定向索引区以及坏块重定向数据区。
[0011] 进一步地,所述将读IO缓存到读IO队列中,将写IO缓存到写IO队列中的步骤之前,还包括:
[0012] 针对每一个所述队列设定最大正在处理IO个数的值threshold;
[0013] 判断所述队列的正在处理IO个数是否大于threshold值,若是,则不执行,否则,依次发送待执行的IO到所述队列中,直到所述队列的正在处理IO个数等于threshold值。
[0014] 进一步地,所述队列接收发送待执行的IO时,相应的正在处理IO个数加1,完成IO时,相应的正在处理IO个数减1。
[0015] 另一方面,本发明还提供一种基于虚拟磁盘层的IO流控制装置,包括:
[0016] 建立模块,用于建立虚拟磁盘;
[0017] 设置模块,用于在所述虚拟磁盘中设置读IO队列和写IO队列;
[0018] 存储模块,用于执行IO读时,将读IO缓存到读IO队列中,执行写IO时,将写IO缓存到写IO队列中。
[0019] 进一步地,所述建立模块具体用于:所述虚拟磁盘,将磁盘的几何空间划分为保留区和数据区。
[0020] 进一步地,所述建立模块具体用于:所述保留区包括:超级块区、位图bitmap索引区、坏块重定向索引区以及坏块重定向数据区。
[0021] 进一步地,所述存储模块还用于:
[0022] 针对每一个所述队列设定最大正在处理IO个数的值threshold;
[0023] 判断所述队列的正在处理IO个数是否大于threshold值,若是,则不执行,否则,依次发送待执行的IO到所述队列中,直到所述队列的正在处理IO个数等于threshold值。
[0024] 进一步地,所述存储模块还用于:所述队列接收发送待执行的IO时,相应的正在处理IO个数加1,完成IO时,相应的正在处理IO个数减1。
[0025] 本发明提供的一种基于虚拟磁盘层的IO流控制方法及装置,通过引入虚拟磁盘,在所述虚拟磁盘中设置读IO队列和写IO队列;执行读IO时,将读IO缓存到读IO队列中,执行写IO时,将写IO缓存到写IO队列中。可以实现应用于下层的任何类型的磁盘驱动,都不会产生阻塞进程导致的性能问题,使得IOPS性能在磁盘驱动上不产生瓶颈。同时,降低了读写并发情况下读IO的响应时间,提高了读IO响应时间的稳定性附图说明
[0026] 通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
[0027] 图1是本发明一个实施例中一种基于虚拟磁盘层的IO流控制方法的流程示意图;
[0028] 图2是本发明一个实施例中发送bio的队列接口函数流程示意图;
[0029] 图3是本发明一个实施例中一种基于虚拟磁盘层的IO流控制装置的结构示意图。

具体实施方式

[0030] 现结合附图和实施例对本发明技术方案作进一步详细阐述。
[0031] 图1示出了本实施例中一种基于虚拟磁盘层的IO流控制方法的流程示意图,如图1所示,本实施例提供的一种基于虚拟磁盘层的IO流控制方法,包括:
[0032] S1,建立虚拟磁盘;
[0033] S2,在所述虚拟磁盘中设置读IO队列和写IO队列;
[0034] S3,执行IO读时,将读IO缓存到读IO队列中,执行写IO时,将写IO缓存到写IO队列中。
[0035] 在本实施例中,为了让RAID(Redundant Arrays of independent Disks,磁盘阵列)更好的记录各种状态,适应各种磁盘,我们引入了虚拟磁盘Virtual Storage Disk(简称VSD)层。VSD将磁盘的几何空间做了重新划分,分为保留区和数据区。保留区由超级块区,bitmap索引区,坏块重定向索引区,坏块重定向数据区等组成。
[0036] 上层的IO要到达Disk,要通过VSD层转发,在VSD层做流控,就可以针对下层的各种Disk驱动做流控,与具体OS,Disk无关,具有很高的兼容性和扩展性。
[0037] 我们在VSD设定了两个队列,读IO的r_queue和写IO的w_queue。
[0038] 对每个队列上的IO,若需要缓存,则缓存到队列,每个Queue结构中有最大正在处理IO(pending IO)个数的设定值threshold,该值通过自测试程序产生,pending IO个数低于这个值不会造成底层的Disk驱动阻塞进程。
[0039] 本实施例的具体工作流程:
[0040] 执行IO时,排队到对应的Queue(读IO对应r_queue,写IO对应w_queue):若Queue的pending IO大于threshold,则不执行;否则依次下发pending IO到Queue中,直到Queue的pending IO等于threshold;
[0041] 发送IO时,相应Queue的pending_io_num++;
[0042] 完成IO时,相应Queue的pending_io_num--;
[0043] 本发明提供的一种基于虚拟磁盘层的IO流控制方法,通过引入虚拟磁盘,在所述虚拟磁盘中设置读IO队列和写IO队列;执行读IO时,将读IO缓存到读IO队列中,执行写IO时,将写IO缓存到写IO队列中。可以实现应用于下层的任何类型的磁盘驱动,都不会产生阻塞进程导致的性能问题,使得IOPS性能在磁盘驱动上不产生瓶颈。同时,降低了读写并发情况下读IO的响应时间,提高了读IO响应时间的稳定性。
[0044] 如图2所示,本实施例中发送bio的queue接口函数流程:
[0045] bio_q_make_request(bio_queue_t*q,struct bio*bio)–->try_submit_queue_bio(q,bio)
[0046] 其中try_submit_queue_bio具体如下:
[0047] S01,判断bio是读还是写,选择对应的队列对象
[0048] S02,对选择的队列,根据正在处理的IO个数和threshold值计算出可取出多少个IO,移动相应个数的IO到临时的work_queue中
[0049] S03,遍历work-queue,发送其中的IO到下层接口(_submit_q_bio_no_acct)。
[0050] 另一方面,如图3所示,本实施例还提供一种基于虚拟磁盘层的IO流控制装置,包括:
[0051] 建立模块101,用于建立虚拟磁盘;
[0052] 设置模块102,用于在所述虚拟磁盘中设置读IO队列和写IO队列;
[0053] 存储模块103,用于执行读IO时,将读IO缓存到读IO队列中,执行写IO时,将写IO缓存到写IO队列中。
[0054] 进一步地,所述建立模块101具体用于:所述虚拟磁盘,将磁盘的几何空间划分为保留区和数据区。
[0055] 进一步地,所述建立模块101具体用于:所述保留区包括:超级块区、位图bitmap索引区、坏块重定向索引区以及坏块重定向数据区。
[0056] 进一步地,所述存储模块103还用于:
[0057] 针对每一个所述队列设定最大正在处理IO个数的值threshold;
[0058] 判断所述队列的正在处理IO个数是否大于threshold值,若是,则不执行,否则,依次发送待执行的IO到所述队列中,直到所述队列的正在处理IO个数等于threshold值。
[0059] 进一步地,所述存储模块103还用于:所述队列接收发送待执行的IO时,相应的正在处理IO个数加1,完成IO时,相应的正在处理IO个数减1。
[0060] 本发明提供的一种基于虚拟磁盘层的IO流控制装置,通过引入虚拟磁盘,在所述虚拟磁盘中设置读IO队列和写IO队列;执行读IO时,将读IO缓存到读IO队列中,执行写IO时,将写IO缓存到写IO队列中。可以实现应用于下层的任何类型的磁盘驱动,都不会产生阻塞进程导致的性能问题,使得IOPS性能在磁盘驱动上不产生瓶颈。同时,降低了读写并发情况下读IO的响应时间,提高了读IO响应时间的稳定性。
[0061] 虽然结合附图描述了本发明的实施方式,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈