虚拟机监控器高效网络通信的实现方法

文档序号:7699450阅读:605来源:国知局
专利名称:虚拟机监控器高效网络通信的实现方法
技术领域
本发明主要是涉及虚拟机监控器(Virtual Machine Monitor,简称VMM)网 络通信的高效实现方法以及优化硬件虚拟化技术,实现多虚拟机环境下高效接收 主机网络数据包的机制以及虚拟机与主机和外界之间的通信,并通过优化硬件虚 拟化技术,降低虚拟机占用的主机资源。属于计算机虚拟机监控器技术领域。
(二)
背景技术
1、虚拟化技术和虚拟机监控器
虚拟化技术出现于上世纪六七十年代,主要应用在大型机上,初衷是为了实 现更高的设备利用率,使多个用户能够尽可能的利用大型机丰富的系统资源,节 省成本。虚拟化技术通过软件手段对计算机中的重要的接口进行模拟和抽象,从 而实现虚拟化软件。根据虚拟化软件所处的位置以及它所虚拟的接口的不同,虚 拟化技术又分为系统级虚拟化技术和进程级虚拟化技术。进程级虚拟化技术中的 虚拟化软件称为运行时(Runtime),以虚拟应用二进制接口 (ABI, Applicatl/On Binary Interface)为目标。系统级虚拟化技术中的虚拟化软件称为虚拟机监控器 (VMM),以虚拟指令集系统架构(ISA, Instructl/On System Architecture)为目标。 系统级虚拟化的核心是构建虚拟机监视器,然后在其上创建虚拟机,将本来直接 运行于实际硬件平台的操作系统放在虚拟机中运行,这样的操作系统称为客户操 作系统(Guest OS),其中原本可直接运行的某些操作通过虚拟层来运行。系统 级虚拟化软件分为三种类型,1)基于硬件的虚拟机监控器,以XEN为代表。2) 基于主机操作系统的虚拟机监控器,以VMware、 kvm为代表。3)双向设计的虚 拟机。通过虚拟机监控器可以在单个物理服务器上运行多个虚拟机,每个虚拟机封 装一个客户操作系统,使得运行在各个客户操作系统中的程序具有很好的安全隔 离性和可扩展性,实现服务整合,极大的提高了各种资源的利用率。
通过使用虚拟化技术,服务器被逻辑地分为-"个主机, 一个虚拟机监控器和 多个虚拟机。主机接收来自网络上的数据,然后将这些数据多路复用到多个虚拟 机上。每个虚拟机运行一个操作系统,使用复用的数据在操作系统上执行一个网 络监控程序。虚拟机监控器隔离虚拟机并通过调度解决它们之间的冲突问题。此 外,整个架构应具有很好的隔离性、可扩展性和可靠性,且能够简单方便的进行 部署和管理维护。由于虚拟机监控器的网络性能的优劣很大程度上决定了网络监 控系统的效率,因此优化虚拟机监控器的网络性能是很值得研究的。 2、硬件虚拟化技术
虚拟化技术通过VMM,可以将底层的硬件资源加以抽象来呈现给客户操作 系统,从而可以隐藏底层硬件真正的细节,为客户操作系统虚拟出一个抽象的硬 件层。因为软件虚拟化技术的种种难以克服缺点,CPU厂商推出了基于CPU的 硬件虚拟化技术。支持虚拟技术的CPU带有特别优化过的指令集来控制虚拟过 程,通过这些指令集,VMM会很容易实现,而且相比软件的虚拟实现方式会很 大程度上提高性能。硬件虚拟化技术可提供基于芯片的功能,借助兼容VMM软 件能够改进纯软件解决方案。由于虚拟化硬件可提供全新的架构,支持操作系统 直接在上面运行,从而无需进行二进制转换,减少了相关的性能开销,极大简化 了VMM设计,进而使VMM能够按通用标准进行编写,性能更加强大。
一个使用硬件虚拟化的虚拟机监控器负责为多个客户操作系统系统提供硬 件支持,同时保证各个客户操作系统的安全性,高效性以及资源的隔离性。硬件 虚拟化技术提供虚拟机监控器(VMM)和客户操作系统之间快速切换的机制, 有选择的截获客户操作系统中的指令和行为的能力,DMA对内存存取操作的保 护,对中断处理以及虚拟中断的支持,提供标有guest/host标记的TLB以减少虚 拟化的负担等等。
硬件虚拟化架构定义了一个异常行为集合,该集合包括所有可能影响VMM或客户操作系统的指令或事件,通过截获该集合中的异常行为来进行相应操作。 相对于在x86体系结构下的最高特权级是ring 0级,硬件虚拟化架构定义了一些新 的指令、寄存器以及控制域来实现一个更高特权级的模式,该特权级也被称为
"ring-l" (AMD)级或者"root模式"(Intel)。同时,硬件虚拟化架构还定义了 虚拟机控制结构体,(对于AMD的SVM架构来说是Virtual Machine Control Blocks(VMCB),对于Intel的VT架构来说是Virtual Machine Control S加ct(VMCS)),该结构体用于对异常行为的控制,并且不允许在处理器核心之 间共享,它控制着虚拟机监控器和客户操作系统的切换。
硬件虚拟化技术引入了一些新的指令。用来运行一个客户操作系统,管理客 户操作系统的状态信息,实现客户操作系统同VMM的交互等等。VMM通过建立 正确的虚拟机控制结构体,运行特定指令初始客户操作系统的运行。客户操作系 统初始完毕后,会一直运行到下一次VMEXIT条件发生,此时控制权返回到VMM。 发生VMEXIT时,客户操作系统的状态信息,包括发生VMEXIT的原因,都存放在 了虚拟机控制结构体的状态域中。VMM从虚拟机控制结构体中获取被截获的指 令或行为,通过模拟、忽略或者改变执行方式的方法来进行相应操作,进而更新 虚拟机控制结构体的相关状态信息。系统开发人员可以自行规定VMM对客户操 作系统监管的程度,这是通过设置产生VMEXIT的条件的规模来决定的。针对每 一种VMEXIT条件,VMM都必须有相应的处理程序来实现在客户操作系统中该条 件想要的结果,然后将该结果转化为适当的形式写入虚拟机控制结构体,进而在 客户操作系统进入时返回给客户操作系统。由于虚拟机的每一次l/0操作都回引 起虚拟机与主机之间的切换,因此虚拟机会占用主机大量的资源。
3、虚拟机的网络通信
虚拟机的网络通信一般都是由虚拟机监控器提供一个特殊的虚拟设备,例如 虚拟网卡(Virtual Ethernet, VE),在多个虚拟机环境下要共享主机的网络数据 包则需要虚拟网桥(Virtual Bridge, VB)实现数据包的广播或多播发送,以开源 虚拟机KVM(Kernel-base Virtual Machine,基于内核的虚拟机)为例,它使用Linux 中的虚拟网卡TUN/TAP和虚拟网桥与主机和外界进行通信。由于TUN/TAP集成了字符设备和网络设备,其中网络设备TAP负责接受和发送数据包,而字符设备 TUN负责数据包在用户空间和内核空间的拷贝。当数据包到达主机网络网卡之 后,网卡驱动判断时候是否有网桥存在,如果存在将数据包通过网桥广播转发至 网络设备TAP的数据包接收队列,然后TAP通知字符设备TUN有数据包到达, 这时TUN从数据包接收队列将数据包从内核空间拷贝至用户空间,再将数据包 拷贝至虚拟机网卡的内存空间,之后虚拟机网卡更新中断,将网卡某些位置位, 虚拟机发现网卡有数据包到来,则执行l/0指令,导致虚拟机退出到KVM中, 在KVM中解析执行失败的I/O指令,模拟该指令的执行,并向虚拟机的中断描 述符表中注入中断,之后恢复虚拟机的运行,在虚拟机的操作系统中,调用网卡 的中断处理函数,从而完成数据包的接收。由于过多的虚拟设备导致数据包的传 输路径比较长,传输效率比较低,尤其是在多虚拟机环境下,这种网络通信方式 会导致虚拟机无法实时可靠的得到数据包。

发明内容
1 、目的
本发明的目的是为虚拟机监控器提供一种新的网络通信模型,它实现了虚拟 机与主机以及与外界之间高效的通信方式,减少虚拟机与主机的切换次数,并降 低虚拟机的开销,特别是在多虚拟机环境下,提高虚拟机处理数据包的效率,这 样在物理服务器上部署虚拟机监控器,可以将主机收到的数据包全部高效的转发 给一个或多个虚拟机,从而可以使运行与虚拟机之内的客户操作系统高效的运行 业务程序,实现资源的整合,提高物理服务器的利用率。
2 、技术方案
本发明一种虚拟机监控器高效网络通信的实现方法,其技术方案由以下两个 部分组成
(1)、实现一个独立的Bridge模±央,在这个模块中使用用户态通信机制维持虚拟 机与主机和外界的通信,并实现了虚拟机多播组,每一个虚拟机属于一个多播组, 利用数据包的多播机制将数据包同时发送给多个虚拟机,提高在多虚拟机环境下数据包传输的效率,从而替代虚拟网桥、虚拟字符设备和虚拟网络设备,其具体 步骤如下
歩骤l:当Bridge模块装载进内核时,创建用户态通信套接字,并注册处理 数据包的函数,当有数据包到Bridge模块时,由该函数将数据包发送至虚拟机。 如果虚拟机启动时启用了网络设备,则在虚拟机监控器初始化网络设备时,初始 化一个数据处理线程用来维持网络通信。在这个线程中分别初始化一个数据包接 收和发送队列,之后在这个线程中利用用户态通信机制向Bridge模块注册一个虚 拟机网络设备,封装一个Netlink数据包向内核发送,在其中包含虚拟机的进程 描述符和要加入的广播组,在虚拟机监控器中解析这个数据包,得到并保存虚拟 机的进程描述符,并将其加入相应的广播组中;
步骤2:在主机网卡的驱动程序中定义一个钩子函数,当Bridge模块装载进 内核时,通过对该钩子函数的赋值,从而建立与主机网卡驱动的联系,当主机网 卡收到数据包后触发主机网卡的驱动程序,在主机网卡的驱动程序中判断该钩子 函数是否赋值,如果已经赋值,则通过该钩子函数将数据包的信息反馈给Bridge 模块,Bridge模块根据数据包的信息决定是否发送到一个虚拟机或是一个广播 组;
步骤3:在虚拟机监控器中,利用Bridge模块将数据包发送到数据处理线程, 读取数据包,解析之后将该数据包拷贝到虚拟机网卡的内存空间;之后通过虚拟 机网卡置位,虚拟机执行l/0指令导致虚拟机退出到虚拟机监控器中,在虚拟机 监控器中将中断处理过程,即中断注入到虚拟机的中断描述符表中,模拟l/0指 令的执行,恢复虚拟机运行,完成数据包的接收;
步骤4:当虚拟机发送数据包时,虚拟机执行l/0指令,将数据包放到虚拟 机网卡的内存区域,令虚拟机退出到虚拟机监控器中。在虚拟机监控器中得到1/0 指令的内容及操作的端口等信息,之后将通过指令模拟的方式执行数据包的拷 贝,从虚拟机的网卡空间拷贝到通信线程的数据包发送队列,通过用户态通信机 制发送出去;(2)、利用轮询机制减少虚拟机与主机的切换次数,轮询到来的网络l/0事件,进 一步提高虚拟机监控器与虚拟机之间的的网络通信效率,其具体歩骤如下
歩骤(l):将数据包拷贝到虚拟机的网卡空间后,更新中断,使得虚拟机退出 到虚拟机监控器中,在虚拟机监控器中解析导致退出的指令,得到该i/o指令的 内容及操作的端口,激活数据处理函数;
步骤(2):在数据处理函数中,首先在虚拟机控制结构(VMCS)中的I/O bitmap 中清除该l/0端口的允许位,关闭对该端口的操作引起的虚拟机退出,査看数据 包接收队列,判断其中数据包的个数是否超过p个,如果不是则读取所有的数据 包,如果是则读取p个数据包,进入下述步骤(3)处理读到的数据包;
步骤(3):将p个数据包拷贝至虚拟机的网卡空间后,向虚拟机的中断描述符 表中注入中断,之后重新进入虚拟机,虚拟机重新运行后,会发现虚拟机网卡有 数据到来,从而触发虚拟机的网卡驱动程序,从而完成虚拟机的网络数据包的接 收;
步骤(4):每隔一定时间重复步骤(2)和步骤(3),轮询是否有数据包到虚拟机的 网卡空间并处理。 3优点及效果
本发明一种虚拟机监控器高效网络通信的实现方法,其优点及效果是 首先,该方法直接从物理网卡获取数据包,并通过用户态通信机制以广播或 多播的形式发送到一个或多个虚拟机中,从而取代了虚拟网桥,虚拟网卡,虚拟 字符设备等,提高虚拟机监控器网络通信的速度;其次,该方法每隔固定时间,
让虚拟机退出到虚拟机监控器中轮询数据包接收队列,将所有数据包一起处理, 减少虚拟机与主机的切换次数,进一步提高虚拟机监控器网络通信的效率。在高 速网络环境中,可以将所有数据包拷贝给虚拟机,因此本发明提出了一种全新的 虚拟机监控器网络通信模型,具有很好的实用价值和前景。


图1系统总体框架示意2虚拟机监控器网络模型对应示意图 图3虚拟机监控器网络数据处理示意图
具体实施例方式
参见图l、图2、图3所示,本发明一种虚拟机监控器的高效网络通信的实现 方法,其具体实现方式由以下两个部分组成
1、实现一个独立的Bridge模块,在这个模块中使用用户态通信机制维持虚拟机 与主机和外界的通信,并实现了虚拟机多播组,每一个虚拟机可以属于一个多播 组中,利用数据包的多播机制将数据包同时发送给多个虚拟机,提高在多虚拟机 环境下数据包传输的效率,从而替代虚拟网桥、虚拟机字符设备和虚拟网络设备, 其具体步骤如下
歩骤l:当Bridge模块装载进内核时,创建用户态通信套接字,并注册处理 数据包的函数,当有数据包到Bridge模块时,由该函数将数据包发送自虚拟机。 如果虚拟机启动时启用了网络设备,则在虚拟机监控器初始化网络设备时,初始 化一个数据处理线程用来维持网络通信。在这个线程分别一个初始化数据包接收 和发送队列,之后在这个线程中利用用户态通信机制向Bridge模块注册一个虚拟 机网络设备,封装一个Netlink数据包向内核发送,在其中包含虚拟机的进程描 述符和要加入的广播组,在虚拟机监控器中解析这个数据包,得到并保存虚拟机 的进程描述符,并将其加入相应的广播组中;
步骤2:在主机网卡的驱动程序中定义一个钩子函数,当Bridge模块装载进 内核时,通过对该钩子函数的赋值,从而建立与主机网卡驱动的联系,当主机网 卡收到数据包后,触发网卡的驱动程序,在网卡的驱动程序中判断该钩子函数是 否赋值,如果已经赋值,则通过Bridge模块将数据包广播发送到加入广播组的每 一个虚拟机中;
步骤3:在虚拟机监控器中,利用Bridge模块将数据包发送到数据处理线程, 读取数据包,解析之后将其拷贝到虚拟机网卡的内存空间;之后通过虚拟机网卡 置位,虚拟机执行l/0指令导致其退出到虚拟机监控器中,在虚拟机监控器中将中断注入到虚拟机的中断描述符表中,模拟l/0指令的执行,恢复虚拟机运行, 完成数据包的接收;
歩骤4:当虚拟机发送数据包时,虚拟机执行l/0指令,将数据包放到网卡 的内存区域,导致虚拟机退出到虚拟机监控器中。在虚拟机监控器中得到l/0指 令的内容及操作的端口等信息,之后将通过指令模拟的方式执行数据包的拷贝, 从虚拟机的网卡空间拷贝到通信线程的数据包发送队列,通过用户态通信的机制 发送出去;
2、利用轮询机制减少虚拟机与主机的切换次数,轮询到来的网络l/0事件,进 一步提高虚拟机监控器与虚拟机之间的的网络通信效率,其具体步骤如下
歩骤l:数据包到达虚拟机的网卡之后,更行终端,使得虚拟机退出到虚拟 机监控器中,在虚拟机监控器中解析导致退出的指令,得到该l/0操作的端口, 激活数据处理函数;
歩骤2:在数据处理函数中,首先在虚拟机控制结构(VMCS)中的I/O bitmap 中清除该l/0端口的允许位,关闭对该端口的操作引起的虚拟机退出,查看数据 包接收队列,判断其中数据包的个数是否超过p个,如果不是则读取所有的数据 包,如果是则读取p个数据包,进入步骤5处理读到的数据包;
步骤3:将p个数据包拷贝完成后,向虚拟机的中断描述符表中注入中断, 之后重新进入虚拟机,触发虚拟机的网卡驱动程序,从而完成虚拟机的网络数据 包的接收;
步骤4:每隔一定时间重复步骤4和步骤5,轮询是否有数据包到来虚拟机 的网卡空间并处理。
权利要求
1、一种虚拟机监控器高效网络通信的实现方法,其特征在于它是由以下两个部分组成(1)、实现一个独立的Bridge模块,在这个模块中使用用户态通信机制维持虚拟机与主机和外界的通信,并实现虚拟机多播组,每一个虚拟机属于一个多播组,利用数据包的多播机制将数据包同时发送给多个虚拟机,提高在多虚拟机环境下数据包传输的效率,从而替代虚拟网桥、虚拟字符设备和虚拟网络设备,其具体步骤如下步骤1当Bridge模块装载进内核时,创建用户态通信套接字,并注册处理数据包的函数,当有数据包到Bridge模块时,由该函数将数据包发送至虚拟机;如果虚拟机启动时启用了网络设备,则在虚拟机监控器初始化网络设备时,初始化一个数据处理线程用来维持网络通信;在这个线程中分别初始化一个数据包接收和发送队列,之后在这个线程中利用用户态通信机制向Bridge模块注册一个虚拟机网络设备,封装一个Netlink数据包向内核发送,在其中包含虚拟机的进程描述符和要加入的广播组,在虚拟机监控器中解析这个数据包,得到并保存虚拟机的进程描述符,并将其加入相应的广播组中;步骤2在主机网卡的驱动程序中定义一个钩子函数,当Bridge模块装载进内核时,通过对该钩子函数的赋值,从而建立与主机网卡驱动的联系,当主机网卡收到数据包后触发主机网卡的驱动程序,在主机网卡的驱动程序中判断该钩子函数是否赋值,如果已经赋值,则通过该钩子函数将数据包的信息反馈给Bridge模块,Bridge模块根据数据包的信息决定是否发送到一个虚拟机或是一个广播组;步骤3在虚拟机监控器中,利用Bridge模块将数据包发送到数据处理线程,读取数据包,解析之后将该数据包拷贝到虚拟机网卡的内存空间;之后通过虚拟机网卡置位,虚拟机执行I/O指令导致虚拟机退出到虚拟机监控器中,在虚拟机监控器中将中断注入到虚拟机的中断描述符表中,模拟I/O指令的执行,恢复虚拟机运行,完成数据包的接收;步骤4当虚拟机发送数据包时,虚拟机执行I/O指令,将数据包放到网卡的内存区域,导致虚拟机退出到虚拟机监控器中;在虚拟机监控器中得到I/O指令的内容及操作的端口信息,之后将通过指令模拟的方式执行数据包的拷贝,从虚拟机的网卡空间拷贝到通信线程的数据包发送队列,通过用户态通信机制发送出去;(2)、利用轮询机制减少虚拟机与主机的切换次数,轮询到来的网络I/O事件,进一步提高虚拟机监控器与虚拟机之间的的网络通信效率,其具体步骤如下步骤(1)将数据包拷贝到虚拟机的网卡空间后,更新中断,使得虚拟机退出到虚拟机监控器中,在虚拟机监控器中解析导致退出的指令,得到该I/O指令的内容及操作的端口,激活数据处理函数;步骤(2)在数据处理函数中,首先在虚拟机控制结构VMCS中的I/O位图中清除该I/O端口的允许位,关闭对该端口的操作引起的虚拟机退出,查看数据包接收队列,判断其中数据包的个数是否超过p个,如果不是则读取所有的数据包,如果是则读取p个数据包,进入下述步骤(3)处理读到的数据包;步骤(3)将p个数据包拷贝至虚拟机的网卡空间后,向虚拟机的中断描述符表中注入中断,之后重新进入虚拟机,虚拟机重新运行后,会发现虚拟机网卡有数据到来,从而触发虚拟机的网卡驱动程序,从而完成虚拟机的网络数据包的接收;步骤(4)每隔一定时间重复步骤(2)和步骤(3),轮询是否有数据包到虚拟机的网卡空间并处理。
全文摘要
一种虚拟机监控器高效网络通信的实现方法,由两个部分组成1.在虚拟机监控器中实现一个独立的Bridge模块,该模块将直接从主机网卡获取的数据包通过用户态通信机制以广播或者多播的形式发往虚拟机或虚拟机组,并将接收到的虚拟机或虚拟机组的数据包发送到主机网卡的发送队列中,提高虚拟机监控器与虚拟机之间的网络通信速度。2.避免虚拟机监控器与虚拟机的频繁切换。每隔固定时间,虚拟机退出到虚拟机监控器中轮询数据包接收队列,将所有数据包一起处理,减少虚拟机与主机的切换次数,进一步提高虚拟机监控器与虚拟机之间的网络通信的效率。该方法直接从主机网卡获取数据包,提高虚拟机监控器网络通信的速度,具有很好的实用价值。
文档编号H04L29/08GK101557420SQ20091008099
公开日2009年10月14日 申请日期2009年3月31日 优先权日2009年3月31日
发明者李胜召, 祝明发, 肖利民, 郝沁汾, 博 马 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1