通过半虚拟化驱动访问硬件的方法、后端驱动及前端驱动转让专利

申请号 : CN201210527643.2

文献号 : CN103870311B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 唐明

申请人 : 华为技术有限公司

摘要 :

本发明公开了一种通过半虚拟化驱动访问硬件的方法、后端驱动及前端驱动。一种通过半虚拟化驱动访问硬件的方法包括:特权虚拟机的后端驱动接收非特权虚拟机的前端驱动通过事件通道发送的目标事件通知;从I/O共享环中获取目标I/O请求,该目标I/O请求携带有目标授权项的标识;根据授权表,确定该目标授权项的标识对应的目标伪物理地址;根据预设的索引表,确定该目标伪物理地址对应的目标本地虚拟地址;利用该目标本地虚拟地址,读取该目标伪物理地址所对应目标共享内存资源中的网络数据,并将该网络数据转发给相应的硬件,以此实现对该硬件的本次访问。通过利用本方案,可以降低虚拟机网络时延机CPU占用率。

权利要求 :

1.一种通过半虚拟化驱动访问硬件的方法,其特征在于,适用于物理机上,所述物理机包括:虚拟机监控器、设置有后端驱动的特权虚拟机以及至少一设置有前端驱动的非特权虚拟机,其中,所述虚拟机监控器通过至少提供事件通道、授权表和I/O共享环协助所述前端驱动和所述后端驱动进行通信;所述方法包括:所述特权虚拟机的所述后端驱动接收所述非特权虚拟机的所述前端驱动通过所述事件通道发送的目标事件通知,其中,所述目标事件通知用于指示所述后端驱动从所述I/O共享环中获取目标I/O请求;

从所述I/O共享环中获取目标I/O请求,所述目标I/O请求携带有目标授权项的标识;

根据所述授权表,确定所述目标授权项的标识对应的目标伪物理地址,其中,所述授权表的授权项在所述非特权虚拟机初始化预先构建的共享内存池时被填充有所述共享内存池中的共享内存资源的伪物理地址,所述伪物理地址与所述授权项具有唯一对应性,且每一授权项唯一对应一标识,所述共享内存池为所述非特权虚拟机初始化所述前端驱动时由所述非特权虚拟机构建并初始化;

根据预设的索引表,确定所述目标伪物理地址对应的目标本地虚拟地址,其中,所述索引表在所述后端驱动实现所述非特权虚拟机与所述特权虚拟机之间的资源预映射过程中创建,其用于指明所述共享内存池中的共享内存资源与所述特权虚拟机的内存空间的映射关系;

利用所述目标本地虚拟地址,读取所述目标伪物理地址所对应目标共享内存资源中的网络数据,并将所述网络数据转发给相应的硬件,以此实现对所述硬件的本次访问。

2.根据权利要求1所述的方法,其特征在于,所述方法还包括:

在所述目标I/O请求完成后,通过所述事件通道向所述前端驱动反馈I/O请求完成通知,以指示所述前端驱动释放所述目标共享内存资源,将释放后的所述目标共享内存资源确定为所述共享内存池中处于非占用状态的共享内存资源。

3.根据权利要求1或2所述的方法,其特征在于,所述后端驱动实现所述非特权虚拟机与所述特权虚拟机之间的资源预映射过程,包括:所述后端驱动接收所述非特权虚拟机的所述前端驱动通过所述事件通道发送的初始化通知;

从所述I/O共享环中获取I/O请求,所述I/O请求中携带授权项的标识;

根据所述授权表,确定所述I/O请求中所述授权项的标识对应的伪物理地址;

将所述伪物理地址对应的共享内存资源映射到所述特权虚拟机的系统内存中,其中,所述伪物理地址与本地虚拟地址具有唯一对应性;

构建关于所述伪物理地址与相应的本地虚拟地址的映射关系的索引表。

4.根据权利要求1所述的方法,其特征在于,

所述前端驱动为半虚拟化网卡前端驱动,所述后端驱动为半虚拟化网卡后端驱动;

或者,

所述前端驱动为半虚拟化磁盘前端驱动,所述后端驱动为半虚拟化磁盘后端驱动;

或者,

所述前端驱动为半虚拟化USB前端驱动,所述后端驱动为半虚拟化USB后端驱动。

5.一种后端驱动,其特征在于,设置于物理机中的特权虚拟机中,所述物理机包括:虚拟机监控器、设置有后端驱动的特权虚拟机以及至少一设置有前端驱动的非特权虚拟机,其中,所述虚拟机监控器通过至少提供事件通道、授权表和I/O共享环协助所述前端驱动和所述后端驱动进行通信;所述后端驱动包括:目标事件通知接收单元,所述特权虚拟机的所述后端驱动接收所述非特权虚拟机的所述前端驱动通过所述事件通道发送的目标事件通知,并触发目标I/O请求获取单元,其中,所述目标事件通知用于指示所述后端驱动从所述I/O共享环中获取目标I/O请求;

所述目标I/O请求获取单元,用于从所述I/O共享环中获取目标I/O请求,并触发目标伪物理地址确定单元,所述目标I/O请求携带有目标授权项的标识;

所述目标伪物理地址确定单元,用于根据所述授权表,确定所述目标授权项的标识对应的目标伪物理地址,并触发目标本地虚拟地址确定单元,其中,所述授权表的授权项在所述非特权虚拟机初始化预先构建的共享内存池时被填充有所述共享内存池中的共享内存资源的伪物理地址,所述伪物理地址与所述授权项具有唯一对应性,且每一授权项唯一对应一标识,所述共享内存池为所述非特权虚拟机初始化所述前端驱动时由所述非特权虚拟机构建并初始化;

所述目标本地虚拟地址确定单元,用于根据预设的索引表,确定所述目标伪物理地址对应的目标本地虚拟地址,并触发网络数据处理单元,其中,所述索引表在第一预映射单元实现所述非特权虚拟机与所述特权虚拟机之间的资源预映射过程中创建,其用于指明所述共享内存池中的共享内存资源与所述特权虚拟机的内存空间的映射关系;

所述网络数据处理单元,用于利用所述目标本地虚拟地址,读取所述目标伪物理地址所对应目标共享内存资源中的网络数据,并将所述网络数据转发给相应的硬件,以此实现对所述硬件的本次访问;

所述第一预映射单元,用于实现所述非特权虚拟机与所述特权虚拟机之间的资源预映射。

6.根据权利要求5所述的后端驱动,其特征在于,还包括:

I/O请求完成通知发送单元,用于在所述目标I/O请求完成后,通过所述事件通道向所述前端驱动反馈I/O请求完成通知,以指示所述前端驱动释放所述目标共享内存资源,将释放后的所述目标共享内存资源确定为所述共享内存池中处于非占用状态的共享内存资源。

7.根据权利要求5或6所述的后端驱动,其特征在于,所述第一预映射单元,包括:初始化通知接收子单元,用于接收所述非特权虚拟机的所述前端驱动通过所述事件通道发送的初始化通知,并触发I/O请求获取子单元;

所述I/O请求获取子单元,用于从所述I/O共享环中获取I/O请求,所述I/O请求中携带授权项的标识,并触发伪物理地址确定子单元;

所述伪物理地址确定子单元,用于根据所述授权表,确定所述I/O请求中所述授权项的标识对应的伪物理地址,并触发资源映射子单元;

所述资源映射子单元,用于将所述伪物理地址对应的共享内存资源映射到所述特权虚拟机的系统内存中,并触发索引表构建子单元,其中,所述伪物理地址与本地虚拟地址具有唯一对应性;

所述索引表构建子单元,用于构建关于所述伪物理地址与相应的本地虚拟地址的映射关系的索引表。

8.一种通过半虚拟化驱动访问硬件的方法,其特征在于,适用于物理机上,所述物理机包括:虚拟机监控器、设置有后端驱动的特权虚拟机以及至少一设置有前端驱动的非特权虚拟机,其中,所述虚拟机监控器通过至少提供事件通道、授权表和I/O共享环协助所述前端驱动和所述后端驱动进行通信;所述方法包括:所述非特权虚拟机的所述前端驱动接收相应内核下发的网络数据,其中,所述网络数据为用于访问硬件的数据;

将预设的共享内存池中的处于非占用状态的共享内存资源作为所述网络数据对应的目标共享内存资源,所述共享内存池为所述非特权虚拟机初始化所述前端驱动时由所述非特权虚拟机构建并初始化;

确定所述授权表中所述目标共享内存资源的目标伪物理地址所在的目标授权项,其中,所述授权表的授权项在所述非特权虚拟机初始化所述共享内存池时被填充有所述共享内存池中的共享内存资源的伪物理地址,所述伪物理地址与所述授权项具有唯一对应性,且每一授权项唯一对应一标识;

将携带所述目标授权项的标识的目标I/O请求放入所述I/O共享环中,其中,所述目标I/O请求在所述前端驱动协助所述后端驱动实现所述非特权虚拟机与所述特权虚拟机之间的资源预映射的过程中构建;

通过所述事件通道向所述特权虚拟机的所述后端驱动发送目标事件通知,其中,所述目标事件通知用于指示所述后端驱动从所述I/O共享环中获取目标I/O请求。

9.根据权利要求8所述的方法,其特征在于,还包括:

当接收到所述后端驱动反馈的所述目标事件通知对应的请求完成通知后,释放所述目标共享内存资源,将释放后的所述目标共享内存资源确定为所述共享内存池中处于非占用状态的共享内存资源。

10.根据权利要求8或9所述的方法,其特征在于,所述非特权虚拟机初始化所述共享内存池的过程包括:所述非特权虚拟机将相应系统内存中的预设数量的内存资源作为处于非占用状态的共享内存资源;将所述共享内存资源的伪物理地址填充至所述授权表中的授权项,所述伪物理地址与所述授权项具有唯一对应性,且每一授权项唯一对应一标识;将所述共享内存资源和相应授权项的标识放置到所述共享内存池中;

其中,所述前端驱动协助所述后端驱动实现所述非特权虚拟机与所述特权虚拟机之间的资源预映射的过程,包括:所述前端驱动从所述共享内存池中获取所述授权项的标识;

构建携带所述授权项的标识的I/O请求,并将所述I/O请求放入I/O共享环中,其中,所述授权项的标识与所述I/O请求具有唯一对应性;

通过所述事件通道向所述特权虚拟机的所述后端驱动发送预设的初始化通知,其中,所述初始化通知用于指示所述后端驱动开启所述非特权虚拟机与所述特权虚拟机的资源预映射过程。

11.一种前端驱动,其特征在于,设置于物理机中的非特权虚拟机中,所述物理机包括:虚拟机监控器、设置有后端驱动的特权虚拟机以及至少一设置有前端驱动的非特权虚拟机,其中,所述虚拟机监控器通过至少提供事件通道、授权表和I/O共享环协助所述前端驱动和所述后端驱动进行通信;所述前端驱动包括:网络数据接收单元,用于接收相应内核下发的网络数据,并触发目标内存资源确定单元,其中,所述网络数据为用于访问硬件的数据;

所述目标内存资源确定单元,用于将预设的共享内存池中的处于非占用状态的共享内存资源作为所述网络数据对应的目标共享内存资源,并触发目标授权项确定单元,所述共享内存池为所述非特权虚拟机初始化所述前端驱动时由所述非特权虚拟机构建并初始化;

所述目标授权项确定单元,用于确定所述授权表中所述目标内存资源的目标伪物理地址所在的目标授权项,并触发目标I/O请求处理单元,其中,所述授权表的授权项在所述非特权虚拟机初始化所述共享内存池时被填充有所述共享内存池中的共享内存资源的伪物理地址,所述伪物理地址与所述授权项具有唯一对应性,且每一授权项唯一对应一标识;

所述目标I/O请求处理单元,用于将携带所述目标授权项的标识的目标I/O请求放入所述I/O共享环中,并触发目标事件通知发送单元,其中,所述目标I/O请求在第二预映射单元协助所述后端驱动实现所述非特权虚拟机与所述特权虚拟机之间的资源预映射的过程中构建;

所述目标事件通知发送单元,用于通过所述事件通道向所述特权虚拟机的所述后端驱动发送目标事件通知,其中,所述目标事件通知用于指示所述后端驱动从所述I/O共享环中获取目标I/O请求;

所述第二预映射单元,用于协助所述后端驱动实现所述非特权虚拟机与所述特权虚拟机之间的资源预映射。

12.根据权利要求11所述的前端驱动,其特征在于,还包括:

目标内存资源处理单元,用于当接收到所述后端驱动反馈的所述目标事件通知对应的请求完成通知后,释放所述目标共享内存资源,将释放后的所述目标共享内存资源确定为所述共享内存池中处于非占用状态的共享内存资源。

13.根据权利要求11或12所述的前端驱动,其特征在于,所述非特权虚拟机初始化所述共享内存池的过程包括:所述非特权虚拟机将相应系统内存中的预设数量的内存资源作为处于非占用状态的共享内存资源;将所述共享内存资源的伪物理地址填充至所述授权表中的授权项,所述伪物理地址与所述授权项具有唯一对应性,且每一授权项唯一对应一标识;将所述共享内存资源和相应授权项的标识放置到所述共享内存池中;

相应的,所述第二预映射单元,包括:

授权项标识确定子单元,用于从所述共享内存池中获取所述授权项的标识,并触发I/O请求处理子单元;

所述I/O请求处理子单元,用于构建携带所述授权项的标识的I/O请求,并将所述I/O请求放入I/O共享环中,并触发初始化通知发送子单元,其中,所述授权项的标识与所述I/O请求具有唯一对应性;

所述初始化通知发送子单元,用于通过所述事件通道向所述特权虚拟机的所述后端驱动发送预设的初始化通知,其中,所述初始化通知用于指示所述后端驱动开启所述非特权虚拟机与所述特权虚拟机的资源预映射过程。

说明书 :

通过半虚拟化驱动访问硬件的方法、后端驱动及前端驱动

技术领域

[0001] 本发明涉及虚拟机技术领域,特别是涉及一种通过半虚拟化驱动访问硬件的方法、后端驱动及前端驱动。

背景技术

[0002] 所谓Xen虚拟化技术分为三层:最底层为拥有最高特权级别的虚拟机监控器(Hypervisor),其直接运行于硬件之上,负责其上的虚拟机的内存分配和运行调度;往上为拥有直接操作底层硬件权限且唯一存在的特权虚拟机(Dom0),其为系统中运行的第一个虚拟机,负责其他非特权虚拟机(DomU)的管理;非特权虚拟机(DomU)没有直接操作硬件的权限,每个系统可以同时运行多个DomU,每个DomU对外表现为一个标准的物理机。
[0003] 在虚拟化环境下,若干DomU运行在同一物理机上,出于系统安全方面的考虑,DomU不能直接访问物理机上的各种物理设备(例如:网卡、磁盘设备等),而由Dom0通过模拟指令完成访问。但是,对于磁盘设备、网络设备等I/O访问非常频繁的物理设备而言,仅靠指令模拟的方式来访问硬件,其性能无法满足实际应用的需要。为了解决DomU通过模拟指令访问硬件性能差的问题,当前主要有两种方式用于提升虚拟机IO特性:(1)直接将物理机上真实的硬件透传给指定的DomU,相当于给予了指定的DomU直接操作硬件的特权;(2)采用半虚拟化驱动的方式。
[0004] 其中,半虚拟化驱动由前端驱动和后端驱动组成。所谓前端驱动为运行在DomU内核态的驱动程序,其负责创建虚拟设备,并且转发虚拟设备的I/O请求;所谓后端驱动为运行在Dom0内核态的驱动程序,其负责接收前端驱动转发的I/O请求,并且通过真正的设备驱动来访问物理设备,进而完成I/O请求;并且Hypervisor通过提供事件通道、授权表和I/O共享环缓冲区等技术来帮助前端驱动和后端驱动进行通信。其中,半虚拟化驱动方式对应的虚拟架构如图1所示。
[0005] 现有技术中,半虚拟化驱动的基本IO流程为:
[0006] 前端驱动接收到DomU内核下发的网络数据,从I/O共享环中取出一个I/O请求;
[0007] 前端驱动从授权表中申请授权项,在该授权项里填充该网络数据所在内存资源的伪物理地址,再将该授权项对应标识填充到上一步取出的I/O请求中;
[0008] 在虚拟机监控器的作用下,前端驱动通过事件通道向后端驱动发送事件通知;
[0009] 后端驱动通过事件通道接收前端驱动发送的事件通知;
[0010] 后端驱动从I/O共享环中取出前端驱动放入的I/O请求;
[0011] 后端驱动查询授权表,确定I/O请求中所填充的标识对应的该伪物理地址;
[0012] 通过共享内存技术,后端驱动查询到DomU中该伪物理地址所对应的物理地址,并将该物理地址通过本地伪物理地址映射到自身的本地虚拟地址,此后后端驱动通过访问该本地虚拟地址便能直接访问前端驱动接收到的网络数据;
[0013] 后端驱动将该网络数据发送给真实的设备驱动来访问物理设备,完成I/O请求;
[0014] 后端驱动接收到真实的设备驱动发回的响应,将其放入I/O共享环,并解除对前端驱动共享内存资源的映射关系,通过事件通道向前端驱动发送事件通知;
[0015] 前端驱动通过事件通道接收到后端驱动发送的事件通知;
[0016] 前端驱动从I/O共享环中取出响应进行处理,并回收共享内存资源。
[0017] 上述IO流程中,关键步骤在于:Dom0通过共享内存技术,将DomU指定的内存资源映射到自身的内存空间中,从而直接访问到DomU的内存资源,实现内存共享,最终完成网络数据从DomU转发到Dom0的过程。
[0018] 其中,每次由DomU向外界传输数据时,都需要将DomU中携带数据的内存资源动态映射给Dom0,由Dom0使用完数据之后再解除映射关系。由于每次I/O请求都涉及到共享内存的动态映射和解映射,当网络负载很高时,该方式需要频繁地更新伪物理地址到物理地址的映射关系,且每次更新都涉及到系统从Dom0切换到Hypervisor完成映射和解映射,这种频繁的切换导致虚拟机网络时延增长,同时CPU占用率较高。

发明内容

[0019] 本发明实施例提供了一种通过半虚拟化驱动访问硬件的方法、后端驱动及前端驱动,以降低虚拟机网络时延及CPU占用率,技术方案如下:
[0020] 第一方面,从特权虚拟机的后端驱动的角度,本发明实施例提供了一种通过半虚拟化驱动访问硬件的方法,适用于物理机上,所述物理机包括:虚拟机监控器、设置有后端驱动的特权虚拟机以及至少一设置有前端驱动的非特权虚拟机,其中,所述虚拟机监控器通过至少提供事件通道、授权表和I/O共享环协助所述前端驱动和所述后端驱动进行通信;所述方法包括:
[0021] 所述特权虚拟机的所述后端驱动接收所述非特权虚拟机的所述前端驱动通过所述事件通道发送的目标事件通知,其中,所述目标事件通知用于指示所述后端驱动从所述I/O共享环中获取目标I/O请求;
[0022] 从所述I/O共享环中获取目标I/O请求,所述目标I/O请求携带有目标授权项的标识;
[0023] 根据所述授权表,确定所述目标授权项的标识对应的目标伪物理地址,其中,所述授权表的授权项在所述非特权虚拟机初始化预先构建的共享内存池时被填充有所述共享内存池中的共享内存资源的伪物理地址,所述伪物理地址与所述授权项具有唯一对应性,且每一授权项唯一对应一标识,所述共享内存池为所述非特权虚拟机初始化所述前端驱动时由所述非特权虚拟机构建并初始化;
[0024] 根据预设的索引表,确定所述目标伪物理地址对应的目标本地虚拟地址,其中,所述索引表在所述后端驱动实现所述非特权虚拟机与所述特权虚拟机之间的资源预映射过程中创建,其用于指明所述共享内存池中的共享内存资源与所述特权虚拟机的内存空间的映射关系;
[0025] 利用所述目标本地虚拟地址,读取所述目标伪物理地址所对应目标共享内存资源中的网络数据,并将所述网络数据转发给相应的硬件,以此实现对所述硬件的本次访问。
[0026] 更进一步的,第一方面中所提供的通过半虚拟化驱动访问硬件的方法还包括:
[0027] 在所述目标I/O请求完成后,通过所述事件通道向所述前端驱动反馈I/O请求完成通知,以指示所述前端驱动释放所述目标共享内存资源,将释放后的所述目标共享内存资源确定为所述共享内存池中处于非占用状态的共享内存资源。
[0028] 其中,第一方面中所提供的通过半虚拟化驱动访问硬件的方法中,所述后端驱动实现所述非特权虚拟机与所述特权虚拟机之间的资源预映射过程,包括:
[0029] 所述后端驱动接收所述非特权虚拟机的所述前端驱动通过所述事件通道发送的初始化通知;
[0030] 从所述I/O共享环中获取I/O请求,所述I/O请求中携带授权项的标识;
[0031] 根据所述授权表,确定所述I/O请求中所述授权项的标识对应的伪物理地址;
[0032] 将所述伪物理地址对应的共享内存资源映射到所述特权虚拟机的系统内存中,其中,所述伪物理地址与本地虚拟地址具有唯一对应性;
[0033] 构建关于所述伪物理地址与相应的本地虚拟地址的映射关系的索引表。
[0034] 其中,所述前端驱动为半虚拟化网卡前端驱动,所述后端驱动为半虚拟化网卡后端驱动;
[0035] 或者,
[0036] 所述前端驱动为半虚拟化磁盘前端驱动,所述后端驱动为半虚拟化磁盘后端驱动;
[0037] 或者,
[0038] 所述前端驱动为半虚拟化USB前端驱动,所述后端驱动为半虚拟化USB后端驱动。
[0039] 第二方面,本发明实施例还提供一种后端驱动,设置于物理机中的特权虚拟机中,所述物理机包括:虚拟机监控器、设置有后端驱动的特权虚拟机以及至少一设置有前端驱动的非特权虚拟机,其中,所述虚拟机监控器通过至少提供事件通道、授权表和I/O共享环协助所述前端驱动和所述后端驱动进行通信;所述后端驱动包括:
[0040] 目标事件通知接收单元,所述特权虚拟机的所述后端驱动接收所述非特权虚拟机的所述前端驱动通过所述事件通道发送的目标事件通知,并触发目标I/O请求获取单元,其中,所述目标事件通知用于指示所述后端驱动从所述I/O共享环中获取目标I/O请求;
[0041] 所述目标I/O请求获取单元,用于从所述I/O共享环中获取目标I/O请求,并触发目标伪物理地址确定单元,所述目标I/O请求携带有目标授权项的标识;
[0042] 所述目标伪物理地址确定单元,用于根据所述授权表,确定所述目标授权项的标识对应的目标伪物理地址,并触发目标本地虚拟地址确定单元,其中,所述授权表的授权项在所述非特权虚拟机初始化预先构建的共享内存池时被填充有所述共享内存池中的共享内存资源的伪物理地址,所述伪物理地址与所述授权项具有唯一对应性,且每一授权项唯一对应一标识,所述共享内存池为所述非特权虚拟机初始化所述前端驱动时由所述非特权虚拟机构建并初始化;
[0043] 所述目标本地虚拟地址确定单元,用于根据预设的索引表,确定所述目标伪物理地址对应的目标本地虚拟地址,并触发网络数据处理单元,其中,所述索引表在第一预映射单元实现所述非特权虚拟机与所述特权虚拟机之间的资源预映射过程中创建,其用于指明所述共享内存池中的共享内存资源与所述特权虚拟机的内存空间的映射关系;
[0044] 所述网络数据处理单元,用于利用所述目标本地虚拟地址,读取所述目标伪物理地址所对应目标共享内存资源中的网络数据,并将所述网络数据转发给相应的硬件,以此实现对所述硬件的本次访问;
[0045] 所述第一预映射单元,用于实现所述非特权虚拟机与所述特权虚拟机之间的资源预映射。
[0046] 更进一步的,第二方面中所提供的后端驱动还包括:
[0047] I/O请求完成通知发送单元,用于在所述目标I/O请求完成后,通过所述事件通道向所述前端驱动反馈I/O请求完成通知,以指示所述前端驱动释放所述目标共享内存资源,将释放后的所述目标共享内存资源确定为所述共享内存池中处于非占用状态的共享内存资源。
[0048] 其中,第二方面中所提供的后端驱动中,所述第一预映射单元,包括:
[0049] 初始化通知接收子单元,用于接收所述非特权虚拟机的所述前端驱动通过所述事件通道发送的初始化通知,并触发I/O请求获取子单元;
[0050] 所述I/O请求获取子单元,用于从所述I/O共享环中获取I/O请求,所述I/O请求中携带授权项的标识,并触发伪物理地址确定子单元;
[0051] 所述伪物理地址确定子单元,用于根据所述授权表,确定所述I/O请求中所述授权项的标识对应的伪物理地址,并触发资源映射子单元;
[0052] 所述资源映射子单元,用于将所述伪物理地址对应的共享内存资源映射到所述特权虚拟机的系统内存中,并触发索引表构建子单元,其中,所述伪物理地址与本地虚拟地址具有唯一对应性;
[0053] 所述索引表构建子单元,用于构建关于所述伪物理地址与相应的本地虚拟地址的映射关系的索引表。
[0054] 第三方面,从非特权虚拟机的前端驱动的角度,本发明实施例还提供一种通过半虚拟化驱动访问硬件的方法,适用于物理机上,所述物理机包括:虚拟机监控器、设置有后端驱动的特权虚拟机以及至少一设置有前端驱动的非特权虚拟机,其中,所述虚拟机监控器通过至少提供事件通道、授权表和I/O共享环协助所述前端驱动和所述后端驱动进行通信;所述方法包括:
[0055] 所述非特权虚拟机的所述前端驱动接收相应内核下发的网络数据,其中,所述网络数据为用于访问硬件的数据;
[0056] 将预设的共享内存池中的处于非占用状态的共享内存资源作为所述网络数据对应的目标共享内存资源,所述共享内存池为所述非特权虚拟机初始化所述前端驱动时由所述非特权虚拟机构建并初始化;
[0057] 确定所述授权表中所述目标共享内存资源的目标伪物理地址所在的目标授权项,其中,所述授权表的授权项在所述非特权虚拟机初始化所述共享内存池时被填充有所述共享内存池中的共享内存资源的伪物理地址,所述伪物理地址与所述授权项具有唯一对应性,且每一授权项唯一对应一标识;
[0058] 将携带所述目标授权项的标识的目标I/O请求放入所述I/O共享环中,其中,所述目标I/O请求在所述前端驱动协助所述后端驱动实现所述非特权虚拟机与所述特权虚拟机之间的资源预映射的过程中构建;
[0059] 通过所述事件通道向所述特权虚拟机的所述后端驱动发送目标事件通知,其中,所述目标事件通知用于指示所述后端驱动从所述I/O共享环中获取目标I/O请求。
[0060] 更进一步的,第三方面中所提供的通过半虚拟化驱动访问硬件的方法,还包括:
[0061] 当接收到所述后端驱动反馈的所述目标事件通知对应的请求完成通知后,释放所述目标共享内存资源,将释放后的所述目标共享内存资源确定为所述共享内存池中处于非占用状态的共享内存资源。
[0062] 其中,第三方面中所提供的通过半虚拟化驱动访问硬件的方法中,所述非特权虚拟机初始化所述共享内存池的过程包括:
[0063] 所述非特权虚拟机将相应系统内存中的预设数量的内存资源作为处于非占用状态的共享内存资源;将所述共享内存资源的伪物理地址填充至所述授权表中的授权项,所述伪物理地址与所述授权项具有唯一对应性,且每一授权项唯一对应一标识;将所述共享内存资源和相应授权项的标识放置到所述共享内存池中;
[0064] 其中,所述前端驱动协助所述后端驱动实现所述非特权虚拟机与所述特权虚拟机之间的资源预映射的过程,包括:
[0065] 所述前端驱动从所述共享内存池中获取所述授权项的标识;
[0066] 构建携带所述授权项的标识的I/O请求,并将所述I/O请求放入I/O共享环中,其中,所述授权项的标识与所述I/O请求具有唯一对应性;
[0067] 通过所述事件通道向所述特权虚拟机的所述后端驱动发送预设的初始化通知,其中,所述初始化通知用于指示所述后端驱动开启所述非特权虚拟机与所述特权虚拟机的资源预映射过程。
[0068] 第四方面,本发明实施例还提供一种前端驱动,设置于物理机中的非特权虚拟机中,所述物理机包括:虚拟机监控器、设置有后端驱动的特权虚拟机以及至少一设置有前端驱动的非特权虚拟机,其中,所述虚拟机监控器通过至少提供事件通道、授权表和I/O共享环协助所述前端驱动和所述后端驱动进行通信;所述前驱动包括:
[0069] 网络数据接收单元,用于接收相应内核下发的网络数据,并触发目标内存资源确定单元,其中,所述网络数据为用于访问硬件的数据;
[0070] 所述目标内存资源确定单元,用于将预设的共享内存池中的处于非占用状态的共享内存资源作为所述网络数据对应的目标共享内存资源,并触发目标授权项确定单元,所述共享内存池为所述非特权虚拟机初始化所述前端驱动时由所述非特权虚拟机构建并初始化;
[0071] 所述目标授权项确定单元,用于确定所述授权表中所述目标内存资源的目标伪物理地址所在的目标授权项,并触发目标I/O请求处理单元,其中,所述授权表的授权项在所述非特权虚拟机初始化所述共享内存池时被填充有所述共享内存池中的共享内存资源的伪物理地址,所述伪物理地址与所述授权项具有唯一对应性,且每一授权项唯一对应一标识;
[0072] 所述目标I/O请求处理单元,用于将携带所述目标授权项的标识的目标I/O请求放入所述I/O共享环中,并触发目标事件通知发送单元,其中,所述目标I/O请求在第二预映射单元协助所述后端驱动实现所述非特权虚拟机与所述特权虚拟机之间的资源预映射的过程中构建;
[0073] 所述目标事件通知发送单元,用于通过所述事件通道向所述特权虚拟机的所述后端驱动发送目标事件通知,其中,所述目标事件通知用于指示所述后端驱动从所述I/O共享环中获取目标I/O请求;
[0074] 所述第二预映射单元,用于协助所述后端驱动实现所述非特权虚拟机与所述特权虚拟机之间的资源预映射。
[0075] 更进一步的,第四方面中所提供的前端驱动还包括:
[0076] 目标内存资源处理单元,用于当接收到所述后端驱动反馈的所述目标事件通知对应的请求完成通知后,释放所述目标共享内存资源,将释放后的所述目标共享内存资源确定为所述共享内存池中处于非占用状态的共享内存资源。
[0077] 其中,第四方面中所提供的前端驱动中,所述非特权虚拟机初始化所述共享内存池的过程包括:
[0078] 所述非特权虚拟机将相应系统内存中的预设数量的内存资源作为处于非占用状态的共享内存资源;将所述共享内存资源的伪物理地址填充至所述授权表中的授权项,所述伪物理地址与所述授权项具有唯一对应性,且每一授权项唯一对应一标识;将所述共享内存资源和相应授权项的标识放置到所述共享内存池中;
[0079] 相应的,所述第二预映射单元,包括:
[0080] 授权项标识确定子单元,用于从所述共享内存池中获取所述授权项的标识,并触发I/O请求处理子单元;
[0081] 所述I/O请求处理子单元,用于构建携带所述授权项的标识的I/O请求,并将所述I/O请求放入I/O共享环中,并触发初始化通知发送子单元,其中,所述授权项的标识与所述I/O请求具有唯一对应性;
[0082] 所述初始化通知发送子单元,用于通过所述事件通道向所述特权虚拟机的所述后端驱动发送预设的初始化通知,其中,所述初始化通知用于指示所述后端驱动开启所述非特权虚拟机与所述特权虚拟机的资源预映射过程。
[0083] 本发明实施例所提供的技术方案,由于非特权虚拟机预先构建一共享内存池,而特权虚拟机预先将该共享内存池中的共享内存资源映射到自身的内存空间中,并建立指明具体映射关系的索引表,以此实现了非特权虚拟机和特权虚拟机之间的资源预映射,因此,在非特权虚拟机访问硬件而向外界传输数据时,在前端驱动和后端驱动的网络通信过程中,由于无需进行非特权虚拟机和特权虚拟机之间的资源映射和解映射操作,可以完全避免特权虚拟机和虚拟机监控器之间的切换,从而降低了虚拟机网络时延机CPU占用率。

附图说明

[0084] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0085] 图1为现有的半虚拟化驱动方式所对应虚拟架构的示意图;
[0086] 图2为非虚拟化环境下的虚拟地址与物理地址的映射关系的结构示意图;
[0087] 图3为虚拟化环境下两级映射的示意图;
[0088] 图4为多虚拟机环境下分配物理内存的示意图;
[0089] 图5为虚拟机之间的内存共享的示意图;
[0090] 图6为本发明实施例所提供的一种通过半虚拟化驱动访问硬件的方法的第一种流程图;
[0091] 图7为本发明实施例所提供的一种通过半虚拟化驱动访问硬件的方法的第二种流程图;
[0092] 图8为本发明实施例所提供的一种通过半虚拟化驱动访问硬件方法对应虚拟架构的示意图;
[0093] 图9为本发明实施例所提供的一种后端驱动的结构示意图;
[0094] 图10为本发明实施例所提供的一种前端驱动的结构示意图。

具体实施方式

[0095] 为了清楚起见,首先对现有技术中的非虚拟化和虚拟化环境的内存访问方式、多虚拟机对物理内存的使用方式以及虚拟机之间的内存共享方式进行介绍,以明确虚拟化环境下的物理地址、伪物理地址及虚拟地址之间的关系,以及虚拟机之间的内存共享方式。第一,非虚拟化和虚拟化环境的内存访问方式
[0096] 在非虚拟化环景下:
[0097] 如图2所示,应用程序(application)使用VA(Virtual Address,虚拟地址)访问内存,该访问内存操作被CPU的MMU(Memory Management Unit,内存管理单元)单元转换为物理地址,然后物理地址被送到CPU的地址总线上指示将要访问内存单元。其中,MMU仅负责虚拟地址到物理地址的转换,其转换关系是由操作系统内核(kernel)定义的;kernel是整个物理机系统中特权级最高的程序,应用程序无特权,并且,非特权程序对内存的访问受到特权程序的管制,其目的是为了保护整个系统稳定性,避免非特权程序破坏系统。
[0098] 在虚拟化环景下:
[0099] 如图3所示,kernel不再是特权级最高的程序,取而代之的是虚拟机监控器(hypervisor),相应的特权级由高到低依次为:hypervisor、kernel、application。
[0100] 在虚拟化环境下,应用程序(其感觉不到虚拟化存在的,因此,和非虚拟化环境一样)使用VA访问内存,此时该访存操作被CPU的MMU单元映射到PA(Pseudo Physical Address,伪物理地址),然后PA被EPT/NPT(Extened Page Table mechanism/Nested Page Tables,扩展页表/嵌套页表)单元映射到真正物理内存的MA(Machine Address,机器地址),实现了采用两级映射的方式完成一次内存访问。
[0101] 增加第二级映射的原因是:①在虚拟化环境下虚拟机操作系统内核不再有最高的特权等级,其如果能直接访问到物理内存,则一个操作系统的错误内存操作将可能影响到同一台物理机上的其他虚拟机的内存,虚拟机操作系统间将失去独立性和隔离性,增加系统的不稳定性,所以虚拟机操作系统内核需要受限地访问PA,而hypervisor为虚拟机建立起PA到MA的映射关系;②传统的操作系统需要的是连续的物理内存,在虚拟化环境下虚拟机可能被多次启动、关闭,一段时间以后不能保证每个虚拟机能分配到连续的物理内存,所以必须提供一种抽象机制将不连续的物理内存映射成虚拟机操作系统可见的连续内存块(如图3:EPT/NPT将离散的MA映射成了Kernel能见到的连续的PA),使得传统的操作系统能正常运行。因此,虚拟化环境下增加了一级内存映射,采用了两级映射关系访问内存。
[0102] 第二,多虚拟机对物理内存的使用
[0103] 如图4所示,创建虚拟机时,hypervisor根据虚拟机的配置情况,为该虚拟机分配物理地址空间以及对应大小的物理内存,并建立起PA到MA的映射关系。PA之于虚拟机系统相当于MA之于物理机系统,默认情况下虚拟机总是认为自己独占地访问分配给它的PA。所以,多个虚拟机存在时,分配它们使用的物理内存是没有交集的。
[0104] 第三,虚拟机之间的内存共享
[0105] 如图5所示,以虚拟机Domain X共享PAx给虚拟机Domain Y为例,虚拟机之间共享内存的过程如下:
[0106] 共享内存操作的双方分别是Domain X和Domain Y两端的驱动程序(运行在kernel状态,可以看作是kernel的扩展);
[0107] Domain X首先申明PAx可以被Domain Y访问,其中,所申明的内容包括访问权限;
[0108] Domain Y的驱动在hypervisor的协助下将原来的PAy到MAy的映射关系解除,其中,MAy可以被hypervisor回收;
[0109] DomainY的驱动在hypervisor的协助下建立PAy到MAx的映射关系,其中,该映射关系包括映射权限,如果与Domain X申明的访问权限冲突,本步骤失败;
[0110] 通过上述方式,Domain X的PAx和Domain Y的PAy指向了同一块物理内存MAx,使得Domain Y的应用程序通过VAy或者Domain Y的kernel通过PAy访问内存时,能够和Domain X的应用程序通过VAx或者Domain X的kernel通过PAx访问同一块物理内存MAx,达到了共享内存的目的。
[0111] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0112] 为了降低虚拟机网络时延及CPU占用率,本发明实施例提供了一种通过半虚拟化驱动访问硬件的方法、后端驱动及前端驱动。
[0113] 基于上述现有技术中的非虚拟化和虚拟化环境的内存访问方式、多虚拟机对物理内存的使用方式以及虚拟机之间的内存共享方式,下面首先对本发明实施例所提供的一种通过半虚拟化驱动访问硬件的方法进行介绍。
[0114] 需要说明的是,本发明实施例所提供方法适用于物理机上,所述物理机包括:虚拟机监控器、设置有后端驱动的特权虚拟机以及至少一设置有前端驱动的非特权虚拟机,其中,该虚拟机监控器通过至少提供事件通道、授权表和I/O共享环协助该前端驱动和该后端驱动进行通信。本领域技术人员可以理解的是,不同的外部硬件对应不同的前端驱动和后端驱动,例如:该前端驱动可以为半虚拟化网卡前端驱动,而该后端驱动可以为半虚拟化网卡后端驱动;或者,该前端驱动可以为半虚拟化磁盘前端驱动,而该后端驱动可以为半虚拟化磁盘后端驱动;或者,该前端驱动可以为半虚拟化USB前端驱动,而该后端驱动可以为半虚拟化USB后端驱动,当然并不局限于此。图8为本发明的通过半虚拟化驱动访问硬件的方法所对应虚拟架构的结构示意图。
[0115] 为了实现本发明方案,该非特权虚拟机需要在初始化相应前端驱动时构建共享内存池,并对该共享内存池进行初始化。其中,该非特权虚拟机初始化该共享内存池的过程可以包括:
[0116] 该非特权虚拟机将相应系统内存中的预设数量的内存资源作为处于非占用状态的共享内存资源;
[0117] 将该共享内存资源的伪物理地址填充至该授权表中的授权项,该伪物理地址与该授权项具有唯一对应性,且每一授权项唯一对应一标识;
[0118] 将该共享内存资源和相应授权项的标识放置到该共享内存池中。
[0119] 需要说明的是,该非特权虚拟机初始化该共享内存池后,该非特权虚拟机的前端驱动需要协助所述特权虚拟机的后端驱动实现所述非特权虚拟机预所述特权虚拟机之间的资源预映射,进而实现后续的非特权虚拟机通过半虚拟化驱动访问硬件的方法。
[0120] 其中,该前端驱动协助该后端驱动实现该非特权虚拟机与该特权虚拟机之间的资源预映射的过程,可以包括:
[0121] 该前端驱动从该共享内存池中获取该授权项的标识;
[0122] 构建携带该授权项的标识的I/O请求,并将该I/O请求放入I/O共享环中,其中,该授权项的标识与I/O请求具有唯一对应性;
[0123] 通过该事件通道向该特权虚拟机的该后端驱动发送预设的初始化通知,其中,该初始化通知用于指示该后端驱动初始化通过半虚拟化驱动访问硬件的方法。
[0124] 相应的,该后端驱动实现该非特权虚拟机与该特权虚拟机之间的资源预映射过程,可以包括:
[0125] 该后端驱动接收该非特权虚拟机的该前端驱动通过该事件通道发送的初始化通知;
[0126] 从该I/O共享环中获取I/O请求,该I/O请求中携带授权项的标识;
[0127] 根据该授权表,确定所述I/O请求中所述授权项的标识对应的伪物理地址;
[0128] 将该伪物理地址对应的共享内存资源映射到该特权虚拟机的系统内存中,其中,该伪物理地址与本地虚拟地址具有唯一对应性;
[0129] 构建关于该伪物理地址与相应的本地虚拟地址的映射关系的索引表。综上可见,本发明实施例给出了:该非特权虚拟机预分配和该特权虚拟机预映射机制,即非特权虚拟机预先分配了一共享内存池,同时特权虚拟机将该共享内存池中的共享内存资源全部映射到自身的内存空间中,并且建立了索引表以指明具体映射关系。
[0130] 其中,将伪物理地址对应的共享内存资源映射到特权虚拟机的系统内存的方式可以利用上述的现有技术中的虚拟机间的共享内存映射方式,在此不再赘述。
[0131] 为了清楚起见,下面首先从非特权虚拟机的前端驱动角度对本发明实施例所提供的方法进行介绍。
[0132] 如图6所示,一种通过半虚拟化驱动访问硬件的方法,可以包括:
[0133] S101,非特权虚拟机的前端驱动接收相应内核下发的网络数据;
[0134] 其中,该网络数据为用于访问硬件的数据。
[0135] S102,将预设的共享内存池中的处于非占用状态的共享内存资源作为该网络数据对应的目标共享内存资源;
[0136] 其中,该共享内存池为所述非特权虚拟机初始化该前端驱动时由该非特权虚拟机构建并初始化。
[0137] 当非特权虚拟机的前端驱动接收到相应内核下发的网络数据时,表明该非特权虚拟机需要向外界传输数据(即访问外部硬件),此时,前端驱动可以从预设的共享内存池中选出处于非占用状态的共享内存资源,并将所选出的共享内存资源作为该网络数据对应的目标共享内存资源,使得通过访问该目标共享内存资源对应的目标伪物理地址即可访问到该网络数据。
[0138] 其中,作为该目标共享内存资源的共享内存资源属于被占用状态,其此时将不属于该共享内存池的处于非占用状态的共享内存资源。
[0139] 需要说明的是,该共享内存池、I/O共享环和授权表三者之间是相互独立的,如图8所示。
[0140] S103,确定授权表中该目标共享内存资源的目标伪物理地址所在的目标授权项;
[0141] 其中,该授权表的授权项在该非特权虚拟机初始化所述共享内存池时被填充有该共享内存池中的共享内存资源的伪物理地址,该伪物理地址与该授权项具有唯一对应性,且每一授权项唯一对应一标识。
[0142] S104,将携带该目标授权项的标识的目标I/O请求放入该I/O共享环中;
[0143] 其中,该目标I/O请求在该前端驱动协助该后端驱动实现该非特权虚拟机与该特权虚拟机之间的资源预映射的过程中构建。
[0144] 由于每一共享内存资源的伪物理地址预先填充至一授权项,因此,在确定出该网络数据对应的目标共享内存资源后,可以从授权表中确定出该目标共享内存资源的目标伪物理地址所在的目标授权项。而由于每一授权项唯一对应一标识,且每一授权项的标识预先唯一对应一I/O请求,因此,在确定出该目标授权项后,可以确定出该目标授权项的标识所对应的目标I/O请求,进而将该目标I/O请求放入I/O共享环中,以使得特权虚拟机的后端驱动在获得到相应通知后,能够从I/O共享环中获知该目标I/O请求,进而完成该目标I/O请求对应的IO流程,也就是硬件的本次访问。
[0145] S105,通过该事件通道向该特权虚拟机的该后端驱动发送目标事件通知。
[0146] 其中,该目标事件通知用于指示该后端驱动从该I/O共享环中获取目标I/O请求。
[0147] 在将该目标I/O请求放入到I/O共享环后,该前端驱动可以通过事件通道向该特权虚拟机的后端驱动发送目标事件通知,以通知该特权虚拟机的后端驱动从该I/O共享环中获取该目标I/O请求,进而执行本次IO流程。相应的,该特权虚拟机的该后端驱动在接收到该目标事件通知后,根据预设的索引表,确定该目标伪物理地址对应的目标本地虚拟地址,利用该目标本地虚拟地址,读取该目标伪物理地址所对应目标共享内存资源中的网络数据,并将该网络数据转发给相应的硬件,以此实现对该硬件的本次访问,其中,该索引表在该后端驱动实现该非特权虚拟机与该特权虚拟机之间的资源预映射过程中创建,其用于指明该非特权虚拟机对应共享内存池中的共享内存资源与该特权虚拟机的内存空间的映射关系。
[0148] 需要说明的是,更进一步的,当接收到该后端驱动反馈的该目标事件通知对应的请求完成通知后,释放该目标共享内存资源,将释放后的该目标共享内存资源确定为该共享内存池中处于非占用状态的共享内存资源。其中,当该后端驱动获取到该目标I/O请求后,可以根据授权表及预设的索引表来完成该目标I/O请求对应的IO流程,并在完成该目标I/O请求对应IO流程后,直接向该前端驱动反馈该目标事件通知对应的请求完成通知;而该前端驱动在接收到该后端驱动反馈的该目标事件通知对应的请求完成通知后,释放该目标共享内存资源,将释放后的该目标共享内存资源重新确定为该共享内存池中处于非占用状态的共享内存资源,以便下次执行IO流程时继续使用该目标内存资源。
[0149] 本实施例所提供的通过半虚拟化驱动访问硬件的方法中,非特权虚拟机的前端驱动将共享内存池中的共享内存资源作为所接收到网络数据对应的目标共享内存资源,并将携带该目标共享内存资源的目标伪物理地址所在授权项的标识的目标I/O请求放入I/O共享环中,进而向后端驱动发送目标事件通知,以指示后端驱动获取目标I/O请求,并通过预设的关于该非特权虚拟机对应共享内存池中的共享内存资源与该特权虚拟机的内存空间的映射关系的索引表,实现对该硬件的本次访问。可见,在前端驱动和后端驱动的网络通信过程中,由于无需进行非特权虚拟机和特权虚拟机之间的资源映射和解映射操作,可以完全避免特权虚拟机和虚拟机监控器之间的切换,从而降低了虚拟机网络时延机CPU占用率。
[0150] 下面从特权虚拟机的后端驱动的角度,对本发明实施例所提供的方法进行介绍。
[0151] 如图7所示,一种通过半虚拟化驱动访问硬件的方法,可以包括:
[0152] S201,该特权虚拟机的后端驱动接收该非特权虚拟机的前端驱动通过该事件通道发送的目标事件通知;
[0153] 其中,该目标事件通知用于指示该后端驱动从该I/O共享环中获取目标I/O请求。
[0154] S202,从I/O共享环中获取该目标I/O请求;
[0155] 其中,该目标I/O请求携带有目标授权项的标识。
[0156] 在特权虚拟机的后端驱动接收到该非特权虚拟机的前端驱动发送的目标事件通知后,得知该非特权虚拟机需要向外界传输数据,此时,需要从I/O共享环中获取相应的目标I/O请求,进而根据该目标I/O请求完成本次IO流程。
[0157] S203,根据该授权表,确定该目标授权项的标识对应的目标伪物理地址;
[0158] 其中,该授权表的授权项在该非特权虚拟机初始化预先构建的共享内存池时被填充有该共享内存池中的共享内存资源的伪物理地址,该伪物理地址与该授权项具有唯一对应性,且每一授权项唯一对应一标识,该共享内存池为该非特权虚拟机初始化该前端驱动时由所述非特权虚拟机构建并初始化。
[0159] S204,根据预设的索引表,确定该目标伪物理地址对应的目标本地虚拟地址;
[0160] 其中,该索引表在该后端驱动实现该非特权虚拟机与所述特权虚拟机之间的资源预映射过程中创建,其用于指明该共享内存池中的共享内存资源与该特权虚拟机的内存空间的映射关系。
[0161] 根据该目标I/O请求确定出目标授权项的标识后,可以根据授权表,确定该目标授权项的标识对应的目标伪物理地址,进而根据预设的关于伪物理地址与相应的本地虚拟地址的映射关系的索引表,确定出该目标伪物理地址对应的目标本地虚拟地址,而无需通过共享内存技术,查询到非特权虚拟机中该伪物理地址所对应的物理地址,并将该物理地址通过本地伪物理地址映射到自身的本地虚拟地址的过程,同时,由于不存在非特权虚拟机和特权虚拟机之间的本次资源映射操作,因此也不存在解映射操作。
[0162] S205,利用该目标本地虚拟地址,读取该目标伪物理地址所对应目标共享内存资源中的网络数据,并将该网络数据转发给相应的硬件。
[0163] 由于该目标本地虚拟地址与该目标伪物理地址指向同一物理内存,因此,后端驱动直接访问该本地虚拟地址即可读取到前端驱动所接收到的网络数据,并将该网络数据转发给真实的硬件,由该硬件完成该目标I/O请求,以此实现对该硬件的本次访问。
[0164] 需要说明的是,更进一步的,在目标I/O请求完成后,通过事件通道向相应的前端驱动反馈目标I/O请求完成通知。其中,当该目标I/O请求完成后,特权虚拟机的后端驱动并不解除对非特权虚拟机的共享内存资源的映射关系,而是直接向前端驱动反馈目标I/O请求完成通知,以指示所述前端驱动释放该目标内存资源,将释放后的该目标共享内存资源确定为该共享内存池中处于非占用状态的共享内存资源,以此完成对所述硬件的本次访问。
[0165] 本发明实施例所提供的技术方案,由于非特权虚拟机预先构建一共享内存池,而特权虚拟机预先将该共享内存池中的共享内存资源映射到自身的内存空间中,并建立指明具体映射关系的索引表,以此实现了非特权虚拟机和特权虚拟机之间的资源预映射,因此,在非特权虚拟机访问硬件而向外界传输数据时,在前端驱动和后端驱动的网络通信过程中,由于无需进行非特权虚拟机和特权虚拟机之间的资源映射和解映射操作,可以完全避免特权虚拟机和虚拟机监控器之间的切换,从而降低了虚拟机网络时延机CPU占用率。
[0166] 下面以半虚拟化网卡驱动作为具体的应用实例,对本发明实施例所提供的一种通过半虚拟化驱动访问硬件的方法进行介绍。
[0167] 需要说明的是,本发明实施例所提供方法适用于物理机上,所物理机包括:虚拟机监控器(Hypervisor)、设置有半虚拟化网卡后端驱动的特权虚拟机(Dom0)以及至少一设置有半虚拟化网卡前端驱动的非特权虚拟机(DomU),其中,该Hypervisor通过至少提供事件通道、授权表和I/O共享环协助半虚拟化网卡前端驱动和半虚拟化网卡后端驱动进行通信。其中,为了描述方便,将半虚拟化网卡前端驱动和半虚拟化网卡后端驱动统称为半虚拟化网卡驱动。
[0168] 其中,半虚拟化网卡驱动的初始化流程为:
[0169] (1)在DomU初始其半虚拟化网卡前端驱动时,创建自身的共享内存池并初始化该共享内存池:其中,DomU初始化其共享内存池的过程包括:
[0170] 从授权表中预先申请特定数量的授权项;
[0171] 从系统内存中预先分配相应数量的内存资源作为处于非占用状态的共享内存资源,将每个共享内存资源的伪物理地址填充到相应的授权项中;
[0172] 将填充有伪物理地址的所有授权项的标识和共享内存资源放入共享内存池中;
[0173] (2)该DomU的半虚拟化网卡前端驱动协助Dom0的半虚拟化网卡后端驱动实现DomU和Dom0之间的资源预映射过程包括:
[0174] 半虚拟化网卡前端驱动从该共享内存池中获取所有授权项的标识;
[0175] 构建授权项的标识对应的I/O请求,并将I/O请求放入至I/O共享环中,其中,该授权项的标识与I/O请求具有一一对应性;
[0176] 通过事件通道向该Dom0的半虚拟化网卡后端驱动发送预设的初始化通知,其中,该初始化通知为:该半虚拟化网卡后端驱动和该半虚拟化网卡前端驱动事先约定的;
[0177] 相应的,该Dom0的半虚拟化网卡后端驱动实现DomU和Dom0之间的资源预映射过程包括:
[0178] 半虚拟化网卡后端驱动接收到该初始化通知之后,从I/O共享环中取出半虚拟化网卡前端驱动发出的所有I/O请求;
[0179] 根据授权表,确定I/O请求中授权项的标识所对应的共享内存资源的伪物理地址;
[0180] 将伪物理地址对应的共享内存资源映射到特权虚拟机的系统内存中,其中,伪物理地址与本地虚拟地址具有一一对应性;
[0181] 构建关于该伪物理地址与相应的本地虚拟地址的映射关系的索引表。
[0182] 上述内容给出了DomU预分配和Dom0的预映射机制:DomU在预先分配了一共享内存池,同时Dom0预先将该共享内存池中的共享内存资源全部映射到了自身的内存空间中,并已建立了索引表以指明其中的具体映射关系。
[0183] 基于上述的半虚拟化网卡前端驱动预分配和的半虚拟化网卡后端驱动预映射机制,从DomU的半虚拟化网卡前端驱动角度,本发明实施例所提供的通过半虚拟化驱动访问硬件的方法可以包括:
[0184] (1)DomU的半虚拟化网卡前端驱动每次接收到内核下发的网络数据时,从预设共享内存池中申请处于非占用状态的共享内存资源作为目标共享内存资源;
[0185] (2)半虚拟化网卡前端驱动确定授权表中该目标共享内存资源的目标伪物理地址所在的目标授权项;
[0186] (3)半虚拟化网卡前端驱动将携带有该目标授权项的标识的目标I/O请求放入I/O共享环中;
[0187] (4)半虚拟化网卡前端驱动通过事件通道向Dom0的半虚拟化网卡后端驱动发送目标事件通知;
[0188] (5)当接收到该半虚拟化网卡后端驱动反馈的该目标事件通知对应的请求完成通知后,半虚拟化网卡前端驱动释放该目标共享内存资源,将释放后的该目标共享内存资源确定为该共享内存池中处于非占用状态的共享内存资源。
[0189] 基于上述的半虚拟化网卡前端驱动预分配和的半虚拟化网卡后端驱动预映射机制,从Dom0的半虚拟化网卡后端驱动角度,本发明实施例所提供的通过半虚拟化驱动访问硬件的方法可以包括:
[0190] (1)Dom0的半虚拟化网卡后端驱动接收DomU的半虚拟化网卡前端驱动发送的目标事件通知;
[0191] (2)半虚拟化网卡后端驱动从I/O共享环中获取相应的目标I/O请求,该目标I/O请求携带有目标授权项的标识;
[0192] (3)根据授权表,半虚拟化网卡后端驱动确定该目标授权项的标识对应的目标伪物理地址;
[0193] (4)根据预设的索引表,半虚拟化网卡后端驱动确定该目标伪物理地址对应的目标本地虚拟地址;
[0194] (5)利用该本地虚拟地址,半虚拟化网卡后端驱动读取该目标伪物理地址所对应目标内存资源中的网络数据,并将该网络数据转发给相应的硬件;
[0195] (6)在目标I/O请求完成后,半虚拟化网卡后端驱动通过事件通道向相应的半虚拟化网卡前端驱动反馈目标I/O请求完成通知,以指示该半虚拟化网卡前端驱动释放该目标共享内存资源,将释放后的该目标共享内存资源确定为该共享内存池中处于非占用状态的共享内存资源,以此完成对该网卡的本次访问。
[0196] 本发明实施例所提供的技术方案,由于DomU预先构建一共享内存池,而Dom0预先将该共享内存池中的共享内存资源映射到自身的内存空间中,并建立指明具体映射关系的索引表,以此实现了DomU和Dom0之间的资源预映射;因此,在DomU访问网卡而向外界传输数据时,在半虚拟化网卡前端驱动和半虚拟化网卡后端驱动的网络通信过程中,由于无需进行非特权虚拟机和特权虚拟机之间的资源映射和解映射操作,可以完全避免特权虚拟机和虚拟机监控器之间的切换,从而降低了虚拟机网络时延机CPU占用率。
[0197] 通过以上的方法实施例的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:只读存储器(ROM)、随机存取存储器(RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0198] 相应于上面的方法实施例,一方面,本发明实施例提供了一种后端驱动,其设置于物理机中的特权虚拟机中,所述物理机包括:虚拟机监控器、设置有后端驱动的特权虚拟机以及至少一设置有前端驱动的非特权虚拟机,其中,所述虚拟机监控器通过至少提供事件通道、授权表和I/O共享环协助所述前端驱动和所述后端驱动进行通信;如图9所示,所述后端驱动可以包括:
[0199] 目标事件通知接收单元110,所述特权虚拟机的所述后端驱动接收所述非特权虚拟机的所述前端驱动通过所述事件通道发送的目标事件通知,并触发目标I/O请求获取单元120,其中,所述目标事件通知用于指示所述后端驱动从所述I/O共享环中获取目标I/O请求;
[0200] 目标I/O请求获取单元120,用于从所述I/O共享环中获取目标I/O请求,并触发目标伪物理地址确定单元130,所述目标I/O请求携带有目标授权项的标识;
[0201] 目标伪物理地址确定单元130,用于根据所述授权表,确定所述目标授权项的标识对应的目标伪物理地址,并触发目标本地虚拟地址确定单元140,其中,所述授权表的授权项在所述非特权虚拟机初始化预先构建的共享内存池时被填充有所述共享内存池中的共享内存资源的伪物理地址,所述伪物理地址与所述授权项具有唯一对应性,且每一授权项唯一对应一标识,所述共享内存池为所述非特权虚拟机初始化所述前端驱动时由所述非特权虚拟机构建并初始化;
[0202] 目标本地虚拟地址确定单元140,用于根据预设的索引表,确定所述目标伪物理地址对应的目标本地虚拟地址,并触发网络数据处理单元150,其中,所述索引表在第一预映射单元160实现所述非特权虚拟机与所述特权虚拟机之间的资源预映射过程中创建,其用于指明所述共享内存池中的共享内存资源与所述特权虚拟机的内存空间的映射关系;
[0203] 网络数据处理单元150,用于利用所述目标本地虚拟地址,读取所述目标伪物理地址所对应目标共享内存资源中的网络数据,并将所述网络数据转发给相应的硬件,以此实现对所述硬件的本次访问;
[0204] 第一预映射单元160,用于实现所述非特权虚拟机与所述特权虚拟机之间的资源预映射。
[0205] 本发明实施例所提供的技术方案,由于非特权虚拟机预先构建一共享内存池,而特权虚拟机预先将该共享内存池中的共享内存资源映射到自身的内存空间中,并建立指明具体映射关系的索引表,以此实现了非特权虚拟机和特权虚拟机之间的资源预映射,因此,在非特权虚拟机访问硬件而向外界传输数据时,在前端驱动和后端驱动的网络通信过程中,由于无需进行非特权虚拟机和特权虚拟机之间的资源映射和解映射操作,可以完全避免特权虚拟机和虚拟机监控器之间的切换,从而降低了虚拟机网络时延机CPU占用率。
[0206] 更进一步的,该后端驱动还可以包括:
[0207] I/O请求完成通知发送单元,用于在所述目标I/O请求完成后,通过所述事件通道向所述前端驱动反馈I/O请求完成通知,以指示所述前端驱动释放所述目标共享内存资源,将释放后的所述目标共享内存资源确定为所述共享内存池中处于非占用状态的共享内存资源。
[0208] 其中,所述第一预映射单元160,可以包括:
[0209] 初始化通知接收子单元,用于接收所述非特权虚拟机的所述前端驱动通过所述事件通道发送的初始化通知,并触发I/O请求获取子单元;
[0210] 所述I/O请求获取子单元,用于从所述I/O共享环中获取I/O请求,所述I/O请求中携带授权项的标识,并触发伪物理地址确定子单元;
[0211] 所述伪物理地址确定子单元,用于根据所述授权表,确定所述I/O请求中所述授权项的标识对应的伪物理地址,并触发资源映射子单元;
[0212] 所述资源映射子单元,用于将所述伪物理地址对应的共享内存资源映射到所述特权虚拟机的系统内存中,并触发索引表构建子单元,其中,所述伪物理地址与本地虚拟地址具有唯一对应性;
[0213] 所述索引表构建子单元,用于构建关于所述伪物理地址与相应的本地虚拟地址的映射关系的索引表。
[0214] 另一方面,本发明实施例还提供了一种前端驱动,其设置于物理机中的非特权虚拟机中,所述物理机包括:虚拟机监控器、设置有后端驱动的特权虚拟机以及至少一设置有前端驱动的非特权虚拟机,其中,所述虚拟机监控器通过至少提供事件通道、授权表和I/O共享环协助所述前端驱动和所述后端驱动进行通信;如图10所示,所述前驱动可以包括:
[0215] 网络数据接收单元210,用于接收相应内核下发的网络数据,并触发目标内存资源确定单元220,其中,所述网络数据为用于访问硬件的数据;
[0216] 目标内存资源确定单元220,用于将预设的共享内存池中的处于非占用状态的共享内存资源作为所述网络数据对应的目标共享内存资源,并触发目标授权项确定单元230,所述共享内存池为所述非特权虚拟机初始化所述前端驱动时由所述非特权虚拟机构建并初始化;
[0217] 目标授权项确定单元230,用于确定所述授权表中所述目标内存资源的目标伪物理地址所在的目标授权项,并触发目标I/O请求处理单元240,其中,所述授权表的授权项在所述非特权虚拟机初始化所述共享内存池时被填充有所述共享内存池中的共享内存资源的伪物理地址,所述伪物理地址与所述授权项具有唯一对应性,且每一授权项唯一对应一标识;
[0218] 目标I/O请求处理单元240,用于将携带所述目标授权项的标识的目标I/O请求放入所述I/O共享环中,并触发目标事件通知发送单元250,其中,所述目标I/O请求在第二预映射单元260协助所述后端驱动实现所述非特权虚拟机与所述特权虚拟机之间的资源预映射的过程中构建;
[0219] 目标事件通知发送单元250,用于通过所述事件通道向所述特权虚拟机的所述后端驱动发送目标事件通知,其中,所述目标事件通知用于指示所述后端驱动从所述I/O共享环中获取目标I/O请求;
[0220] 第二预映射单元260,用于协助所述后端驱动实现所述非特权虚拟机与所述特权虚拟机之间的资源预映射。
[0221] 本实施例所提供的技术方案中,非特权虚拟机的前端驱动将共享内存池中的共享内存资源作为所接收到网络数据对应的目标共享内存资源,并将携带该目标共享内存资源的目标伪物理地址所在授权项的标识的目标I/O请求放入I/O共享环中,进而向后端驱动发送目标事件通知,以指示后端驱动获取目标I/O请求,并通过预设的关于该非特权虚拟机对应共享内存池中的共享内存资源与该特权虚拟机的内存空间的映射关系的索引表,实现对该硬件的本次访问。可见,在前端驱动和后端驱动的网络通信过程中,由于无需进行非特权虚拟机和特权虚拟机之间的资源映射和解映射操作,可以完全避免特权虚拟机和虚拟机监控器之间的切换,从而降低了虚拟机网络时延机CPU占用率。
[0222] 更进一步的,该前端驱动还可以包括:
[0223] 目标内存资源处理单元,用于当接收到所述后端驱动反馈的所述目标事件通知对应的请求完成通知后,释放所述目标共享内存资源,将释放后的所述目标共享内存资源确定为所述共享内存池中处于非占用状态的共享内存资源。
[0224] 其中,所述非特权虚拟机初始化所述共享内存池的过程可以包括:
[0225] 所述非特权虚拟机将相应系统内存中的预设数量的内存资源作为处于非占用状态的共享内存资源;将所述共享内存资源的伪物理地址填充至所述授权表中的授权项,所述伪物理地址与所述授权项具有唯一对应性,且每一授权项唯一对应一标识;将所述共享内存资源和相应授权项的标识放置到所述共享内存池中;
[0226] 相应的,第二预映射单元270,可以包括:
[0227] 授权项标识确定子单元,用于从所述共享内存池中获取所述授权项的标识,并触发I/O请求处理子单元;
[0228] 所述I/O请求处理子单元,用于构建携带所述授权项的标识的I/O请求,并将所述I/O请求放入I/O共享环中,并触发初始化通知发送子单元,其中,所述授权项的标识与所述I/O请求具有唯一对应性;
[0229] 所述初始化通知发送子单元,用于通过所述事件通道向所述特权虚拟机的所述后端驱动发送预设的初始化通知,其中,所述初始化通知用于指示所述后端驱动开启所述非特权虚拟机与所述特权虚拟机的资源预映射过程。
[0230] 对于装置或系统实施例而言,由于其基本相应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置或系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0231] 在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,在没有超过本申请的精神和范围内,可以通过其他的方式实现。当前的实施例只是一种示范性的例子,不应该作为限制,所给出的具体内容不应该限制本申请的目的。例如,所述单元或子单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或多个子单元结合一起。另外,多个单元可以或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
[0232] 另外,所描述系统,装置和方法以及不同实施例的示意图,在不超出本申请的范围内,可以与其它系统,模块,技术或方法结合或集成。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0233] 以上所述仅是本发明的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。