一种SR‑IOV环境下多虚拟机并发DMA的顺序调度方法及系统与流程

文档序号:12733184阅读:241来源:国知局
一种SR‑IOV环境下多虚拟机并发DMA的顺序调度方法及系统与流程

本发明涉及PCIe高速总线的数据传输的技术领域,尤其涉及了一种SR-IOV环境下多虚拟机并发DMA的顺序调度方法及系统。



背景技术:

虚拟化技术、多任务以及超线程技术是完全不同的,多任务是指在一个操作系统中多个程序同时一起运行,虚拟化技术中是可以同时运行多个操作系统,而且每一个操作系统中都有多个程序运行,每一个操作系统都运行在一个虚拟的CPU或者是虚拟主机上,而超线程技术只是单CPU模拟双CPU来平衡程序运行性能,这两个模拟出来的CPU是不能分离的,只能协同工作。另外,虚拟化方案主要有两种,软件虚拟化和硬件虚拟化,其中,软件虚拟化是以前主流的解决方案,但该方案存在的主要缺点是因为数据流在软件中分层传输,大大降低了实际的数据传输效率,更重要的是在当前大数据和云计算的趋势下,无法满足更高更快数据传输速率的需求,而采用硬件虚拟化技术使得数据流不需要经过软件的分层传递,直接在内存和硬件外围设备之间进行透传,大大提高了数据流的传输速度。

目前的硬件虚拟化技术是单根IO虚拟化(SR-IOV)技术,SR-IOV是一种规范,使得单根端口下的单个快速外围组件互连(PCIe)物理设备显示为管理程序或客户机操作系统的多个单独的物理设备。

SR-IOV使用的物理功能(PF)和虚拟功能(VF)为SR-IOV设备管理全局的功能,PF是完整的PCIe功能,其包含用于配置和管理SR-IOV功能的SR-IOV扩展功能,另外,PF可以配置和控制PCIe设备,且PF具有将数据移入和移出设备的完整功能,VF是轻量级的PCIe功能,其包含数据移动所需的所有资源,且具有一套经过仔细精简的配置资源集。

支持SR-IOV的PCIe设备将其多个实例提供给客户机操作系统实例和管理程序,提供的虚拟功能数量取决于设备,对于要运行的已启用SR-IOV的PCIe设备,在客户机驱动程序或管理程序实例中,必须具备适当的BIOS和硬件支持以及SR-IOV支持。

在目前很多高速数据处理应用场景中,针对存储器的读写事物处理占主导地位,在基于PCIe的高速数据传输应用中,PCIe端点(Endpoint)设备要发挥出最大的数据传输效能,同时尽可能地减少主机CPU的占用率,就要采用DMA方式,就是由PCIe端点设备主动地向主机内存发起DMA读请求,然后接收传输进来的数据,或者由PCIe端点设备主动地对主机内存发起DMA写请求,以完成数据传输功能。依照SR-IOV规范,可以在一个PCIe设备里面实现多个虚拟设备VF,这样操作系统支持的某个虚拟机就可以与某一个特定的VF绑定在一起,独享对这个虚拟设备VF的访问。通常,每个设备都是采用DMA工作方式,当只有一个虚拟设备工作时,情况很简单。但是当操作系统里的多个虚拟机分别与PCIe设备的不同虚拟设备一一绑定后,就存在多个虚拟机并发DMA的情形。不管PCIe设备内部有多少个虚拟设备,这些虚拟设备都必须通过PCIe设备的物理传输通道来进行数据传输,而且这个通道是独一的,因此当多个虚拟机对应的PCIe设备内的虚拟设备并发DMA时,如何让这些并发的DMA分别有序的进行是一个至关重要的问题。



技术实现要素:

本发明所要解决的技术问题是:当多个虚拟机对应的PCIe总线设备内的虚拟设备并发DMA时,现有技术无法使上述并发的DMA分别有序的进行。

为解决上述技术问题,本发明提供了一种SR-IOV环境下多虚拟机并发DMA的顺序调度方法,该调度方法包括如下步骤:

S1,多个虚拟机分别向PCIe设备发送DMA请求命令,PCIe设备将所述的DMA请求命令分别存储到PCIe设备内的各命令寄存器组内;

S2,设计排队注册的机制:对多个虚拟机进行排队注册、生成虚拟机号码,并将注册后的虚拟机号码存储在PCIe设备内的第一寄存器内;

S3,当第一寄存器存储一个虚拟机号码,则PCIe设备内的第二寄存器内相应的存储标记由0置成1;

S4,设计一套自动循环检测的状态机,状态机按顺序循环地检测第二寄存器,若检测到的存储标记是1,则PCIe设备自动开启与该存储标记对应的虚拟机号码对应的虚拟机DMA读取操作;

S5,启动DMA读取操作后,PCIe设备接收由所述虚拟机发送的数据,并将数据存储到PCIe设备内与所述虚拟机对应的虚拟机存储器中;

S6,S5中当所述虚拟机的数据全部被存储到虚拟机存储器中后,第二寄存器与所述虚拟机相对应的存储标记清0;

S7,自动循环检测的状态机按顺序继续监测第二寄存器内下一个存储标记,循环检测。

进一步,所述S1中PCIe设备解析DMA请求命令,根据解析结果判断出与该DMA请求命令对应的虚拟机,并将该DMA请求命令存储到PCIe设备内与该虚拟机对应的命令寄存器组内。

上述进一步的有益效果:设计DMA命令寄存器组,分别对应于不同的虚拟机,使得并发虚拟机DMA请求命令的发送彼此独立,互不干扰。

进一步,所述S2中,排队注册机制是按照时间的先后顺序进行排队注册的,对多个虚拟机进行排队注册是根据对多个虚拟机发送的DMA请求命令到达PCIe设备的时间先后顺序进行排队注册的。

进一步,所述S2中,注册后的号码是按照顺序依次存储在PCIe设备内的第一寄存器内的。

进一步,所述S3中,第二寄存器与第一寄存器一一对应,当第一寄存器按顺序存储一个虚拟机号码,则第二寄存器相应地将存储标记按顺序由0置成1。

本发明的有益效果:设计了DMA排队注册机制以及虚拟机循环自动检测状态机,可以使得多虚拟机的DMA在状态机的控制下自动有序执行,不需要PCIe设备内的CPU的参与,不仅减轻了PCIe设备内CPU的负担,也大大提高了多虚拟机并发DMA的数据传输速度。

本发明还涉及一种SR-IOV环境下多虚拟机并发DMA的顺序调度系统,该调度系统包括:多个虚拟机、一个PCIe设备;所述PCIe设备内包括:多个命令寄存器组、第一寄存器、第二寄存器、多个虚拟机存储器、自动循环检测的状态机;所述的多个虚拟机通过PCIe总线与PCIe设备内的的虚拟设备联系;多个命令寄存器组,用于存储多个虚拟机发送的DMA请求命令;第一寄存器,用于存储多台虚拟机注册后的注册号码;第二寄存器,用于根据第一寄存器存储的注册号码对应做存储标记;多个虚拟机存储器,用于存储虚拟机DMA返回来的数据;自动循环检测的状态机,用于检测第二寄存器。

进一步,所述的多个命令寄存器组,用于存储多个虚拟机发送的DMA请求命令,所述的DMA请求命令是经过PCIe设备解析的。

进一步,所述的第一寄存器与第二寄存器一一对应。

进一步,该系统还包括:自动循环检测的状态机,用于检测第二寄存器,当检测到的存储标记为1时,与该结果对应的虚拟机自动开启DMA读取操作,虚拟机向PCIe设备发送数据;若检测的存储标记为0时,状态机继续监测下一个存储标记。

进一步,所述的第二寄存器还用于当开启DMA读取操作的虚拟机的数据全部被存储到虚拟机存储器中后,第二寄存器与该虚拟机相对应的存储标记清0。

上述进一步的有益效果:设计了DMA排队注册机制以及虚拟机循环自动检测状态机,可以使得多虚拟机的DMA在状态机的控制下自动有序执行,不需要PCIe设备内的CPU的参与,不仅减轻了PCIe设备内CPU的负担,也大大提高了多虚拟机并发DMA的数据传输速度。

附图说明

图1为本发明的一种SR-IOV环境下多虚拟机并发DMA的顺序调度方法流程图;

图2为本发明一种SR-IOV环境下多虚拟机并发DMA的顺序调度方法的示意图;

图3为本发明一种SR-IOV环境下多虚拟机并发DMA的顺序调度方法的示意图。

具体实施方式

以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。

本发明中下面所述的多个均为至少2个,如:多个虚拟机为至少2个虚拟机;多个命令寄存器组为至少2个命令寄存器组。

如图1所示,本发明的一种SR-IOV环境下多虚拟机并发DMA的顺序调度方法,该调度方法包括如下步骤:

S1,多个虚拟机分别向PCIe设备里面对应的虚拟设备发送DMA请求命令,DMA请求命令通过PCIe总线传输到PCIe设备,PCIe设备解析所述的DMA请求命令,若解析出来是虚拟机VF1的DMA请求命令,并将所述的DMA请求命令存储到与该虚拟机对应的PCIe设备内的命令寄存器组内;

S2,设计一个按时间先后顺序排队注册的机制,将DMA请求命令按照到达PCIe设备的时间先后顺序,对多台虚拟机进行排队注册,并将注册后的虚拟机号码按顺序依次存储在PCIe设备内的第一寄存器内;

S3,PCIe设备内的第二寄存器与第一寄存器一一对应,当第一寄存器按顺序存储一个虚拟机号码,则第二寄存器想应地将存储标记按顺序由0置成1;

S4,设计一套自动循环检测的状态机,状态机按顺序循环地检测第二寄存器,若检测到的存储标记是1,状态机读取第一寄存器内与该存储标记对应的虚拟机号码,PCIe设备自动开启与虚拟机号码对应的虚拟机DMA读取操作;

S5,启动DMA读取操作后,PCIe设备接收由该虚拟机发送的DMA数据,并将DMA数据存储到PCIe设备内与该虚拟机对应的虚拟机存储器中;

S6,当S5中该虚拟机DMA数据全部被存储到虚拟机存储器中后,第二寄存器与该虚拟机相对应的存储标记清0;

S7,自动循环检测的状态机按顺序继续监测第二寄存器内下一个存储标记,循环检测,直到第二寄存器内所有存储标记都被清0。

一种SR-IOV环境下多虚拟机并发DMA的顺序调度系统,该调度系统包括:多个虚拟机、一个PCIe设备;所述PCIe设备内包括:多个命令寄存器组、第一寄存器、第二寄存器、自动循环检测的状态机;所述的多个虚拟机指的是操作系统里的多个独立的应用程序,通过PCIe总线与PCIe设备的虚拟设备联系起来;多个命令寄存器组,多个命令寄存器组,用于存储多个虚拟机发送的DMA请求命令,所述的DMA请求命令是经过PCIe设备解析的;第一寄存器,用于存储多个虚拟机注册后的注册号码;第二寄存器,用于根据第一寄存器存储的注册号码对应做存储标记;其中,第一寄存器与第二寄存器是一一对应的;多个虚拟机存储器,用于存储虚拟机DMA返回的数据;自动循环检测的状态机,用于检测第二寄存器。

该系统还包括:自动循环检测的状态机,用于检测第二寄存器,当检测到的存储标记为1时,与该结果对应的虚拟机自动开启DMA读取操作,虚拟机向PCIe设备发送数据;若检测的存储标记为0时,状态机继续监测下一个存储标记。

第二寄存器还用于当开启DMA读取操作的虚拟机的数据全部被存储到虚拟机存储器中后,第二寄存器与该虚拟机相对应的存储标记清0。

具体实施例

如图2所述,从图中可以看出,PCIe设备内部为每一个虚拟机都配置了单独的命令寄存器组以记录从虚拟机传来的DMA请求命令;此外,PCIe设备内部还为每一个独立的虚拟机都配置了单独的虚拟机存储器,以存储从虚拟机上层传输进来的数据。

如图3所述,从图中可以看出,PCIe设备对不同虚拟机发来的DMA读命令进行注册,第一个到来的虚拟机DMA请求命令被注册到队列中的第一号位置,同时一号位置的标志为从0被置为1,表明该位置有DMA读任务存在;后续到来的虚拟机DMA读任务按照到达时间的先后顺序依次排队,并在对应的标志位置1。

该方案设计了DMA命令寄存器组和虚拟机存储器,其中虚拟机存储器,是用来存储虚拟机DMA返回来的数据,每一个虚拟机都会与一个它所绑定的虚拟设备的虚拟机存储器所对应,该虚拟机启动DMA操作后,PCIe设备返回的数据就存储在该虚拟机所对应的虚拟机存储器中,虚拟设备的虚拟机存储器是彼此独立的。,命令寄存器组和虚拟机存储器分别对应于不同的虚拟机,这样,并发虚拟机DMA的命令的发送和虚拟机DMA返回数据的存储彼此独立,互不干扰。设计了DMA排队注册机制以及虚拟机循环自动检测状态机,可以使得多虚拟机的DMA在状态机的控制下自动有序执行,不需要PCIe设备内的CPU的参与,不仅减轻了PCIe设备内CPU的负担,也大大提高了多虚拟机并发DMA的数据传输速度。

支持硬件虚拟化SR-IOV的PCIe设备允许多个不同的虚拟机并发的进行工作,这个一个PCIe设备可以在操作系统上被虚拟成多个独立的虚拟设备VF,这些不同的虚拟设备分别以VF1、VF2、…,VFn标识。

实施例

步骤1,并发虚拟机DMA命令发送

当上述不同的虚拟机并发工作时,在不同或相同的时刻,各虚拟机分别向各自对应的虚拟设备VF1、VF2、…、VFn等发送DMA请求命令,这些不同虚拟机对各自对应的虚拟设备发送的DMA请求命令,通过PCIe总线传输到PCIe设备,PCIe设备解析这些到来的数据包,并解析出这些数据包的含义,如果解析出来的数据包是针对虚拟机VF1的DMA命令,那该命令就被存储到图2所示的虚拟机VF1对应的VF1命令寄存器组。

步骤2,并发虚拟机DMA排队注册

设计了一个排队机制,该排队机制的思想是按照不同虚拟机的DMA命令到达PCIe设备的先后时间顺序进行排队注册,最先到达的排在最前面,最后到达的排在最后面,从图3可以看到,这个排队机制采用了两个寄存器。第一寄存器是虚拟机号登记寄存器,按照各虚拟机DMA命令到来的先后顺序,对各虚拟机进行排队,最先到达的虚拟机VFn1排在该寄存器的首位,并把该虚拟机对应的虚拟机号码n1,记录在这个位置,第二个到达的虚拟机VFn2排在第二位,并把该虚拟机对应的虚拟机号码n2记录在这个位置;后续到达的虚拟机依次类推排队注册。

第二寄存器是队列任务标志寄存器,当最先到达的虚拟机VFn1注册好后,队伍任务标志寄存器的最高位由0置成1,表明当前位置有DMA的任务;第二个到达的虚拟机VFn2次高位由0置成1,其他后续到达的任务依次照此处理。

步骤3,启动虚拟机DMA操作

设计了一套自动循环检测状态机,当该状态机从头到尾循环的检测队列任务标志寄存器,当发现队列任务标志位某一位为0时,接着去搜寻后续的队列标志位,当发现第一个不为0的标志位时,然后读取对应该位置的虚拟机号登记寄存器,读出对应的虚拟机号码,然后启动该虚拟机的DMA操作,一旦启动该虚拟机的DMA操作,PCIe设备内对应于该虚拟机的DMA通道就启动,然后PCIe设备接收该虚拟机从外部传递到PCIe设备内部的数据,并将这些数据存储在与该虚拟机对应的虚拟机存储器中。

步骤4,队列任务标志寄存器位清0,启动下一个虚拟机DMA任务

虚拟机DMA的数据可大可小,对于数据量大的DMA读,需要虚拟机的DMA控制器发出多次DMA命令才能得到全部的数据。因此,自动循环检测状态机,一定要等到当前的虚拟机DMA命令全部发送出去才能将当前虚拟机对应的队列任务标志寄存器位清0。然后顺序检测下一个不为零的标志位,一旦发现有新的不为0的标志位,就启动下一个虚拟机DMA任务。

步骤5,依次类推,循环执行

当队列里没有待处理的虚拟机DMA或者队列搜索到队列结尾时,重新返回到队列初始搜索状态,循环检测。

在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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