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

上传人:54 文档编号:971738 上传时间:2018-03-22 格式:PDF 页数:14 大小:651.10KB
返回 下载 相关 举报
摘要
申请专利号:

CN200910080995.6

申请日:

2009.03.31

公开号:

CN101557420A

公开日:

2009.10.14

当前法律状态:

授权

有效性:

有权

法律详情:

专利权人的姓名或者名称、地址的变更IPC(主分类):H04L 29/08变更事项:专利权人变更前:上海视聪网络信息技术有限公司变更后:上海君是信息科技有限公司变更事项:地址变更前:201401 上海市奉贤区环城西路2200号第一幢2128室变更后:200233 上海市徐汇区桂平路92号202-35室|||专利权的转移IPC(主分类):H04L 29/08变更事项:专利权人变更前权利人:北京航空航天大学变更后权利人:上海视聪网络信息技术有限公司变更事项:地址变更前权利人:100191 北京市海淀区学院路37号北京航空航天大学计算机学院变更后权利人:201401 上海市奉贤区环城西路2200号第一幢2128室登记生效日:20150512|||授权|||实质审查的生效IPC(主分类):H04L 29/08申请日:20090331|||公开

IPC分类号:

H04L29/08; H04L12/46; H04L12/26; G06F9/455

主分类号:

H04L29/08

申请人:

北京航空航天大学

发明人:

祝明发; 李胜召; 马 博; 肖利民; 郝沁汾

地址:

100191北京市海淀区学院路37号北京航空航天大学计算机学院

优先权:

专利代理机构:

北京慧泉知识产权代理有限公司

代理人:

王顺荣;唐爱华

PDF下载: PDF下载
内容摘要

一种虚拟机监控器高效网络通信的实现方法,由两个部分组成:1.在虚拟机监控器中实现一个独立的Bridge模块,该模块将直接从主机网卡获取的数据包通过用户态通信机制以广播或者多播的形式发往虚拟机或虚拟机组,并将接收到的虚拟机或虚拟机组的数据包发送到主机网卡的发送队列中,提高虚拟机监控器与虚拟机之间的网络通信速度。2.避免虚拟机监控器与虚拟机的频繁切换。每隔固定时间,虚拟机退出到虚拟机监控器中轮询数据包接收队列,将所有数据包一起处理,减少虚拟机与主机的切换次数,进一步提高虚拟机监控器与虚拟机之间的网络通信的效率。该方法直接从主机网卡获取数据包,提高虚拟机监控器网络通信的速度,具有很好的实用价值。

权利要求书

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),轮询是否有数据包到虚拟机的网卡空间并处理。

说明书

虚拟机监控器高效网络通信的实现方法
(一)技术领域
本发明主要是涉及虚拟机监控器(Virtual Machine Monitor,简称VMM)网络通信的高效实现方法以及优化硬件虚拟化技术,实现多虚拟机环境下高效接收主机网络数据包的机制以及虚拟机与主机和外界之间的通信,并通过优化硬件虚拟化技术,降低虚拟机占用的主机资源。属于计算机虚拟机监控器技术领域
(二)背景技术
1、虚拟化技术和虚拟机监控器
虚拟化技术出现于上世纪六七十年代,主要应用在大型机上,初衷是为了实现更高的设备利用率,使多个用户能够尽可能的利用大型机丰富的系统资源,节省成本。虚拟化技术通过软件手段对计算机中的重要的接口进行模拟和抽象,从而实现虚拟化软件。根据虚拟化软件所处的位置以及它所虚拟的接口的不同,虚拟化技术又分为系统级虚拟化技术和进程级虚拟化技术。进程级虚拟化技术中的虚拟化软件称为运行时(Runtime),以虚拟应用二进制接口(ABI,Applicatl/OnBinary 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-1”(AMD)级或者“root模式”(Intel)。同时,硬件虚拟化架构还定义了虚拟机控制结构体,(对于AMD的SVM架构来说是Virtual Machine ControlBlocks(VMCB),对于Intel的VT架构来说是Virtual Machine ControlStruct(VMCS)),该结构体用于对异常行为的控制,并且不允许在处理器核心之间共享,它控制着虚拟机监控器和客户操作系统的切换。
硬件虚拟化技术引入了一些新的指令。用来运行一个客户操作系统,管理客户操作系统的状态信息,实现客户操作系统同VMM的交互等等。VMM通过建立正确的虚拟机控制结构体,运行特定指令初始客户操作系统的运行。客户操作系统初始完毕后,会一直运行到下一次VMEXIT条件发生,此时控制权返回到VMM。发生VMEXIT时,客户操作系统的状态信息,包括发生VMEXIT的原因,都存放在了虚拟机控制结构体的状态域中。VMM从虚拟机控制结构体中获取被截获的指令或行为,通过模拟、忽略或者改变执行方式的方法来进行相应操作,进而更新虚拟机控制结构体的相关状态信息。系统开发人员可以自行规定VMM对客户操作系统监管的程度,这是通过设置产生VMEXIT的条件的规模来决定的。针对每一种VMEXIT条件,VMM都必须有相应的处理程序来实现在客户操作系统中该条件想要的结果,然后将该结果转化为适当的形式写入虚拟机控制结构体,进而在客户操作系统进入时返回给客户操作系统。由于虚拟机的每一次I/O操作都回引起虚拟机与主机之间的切换,因此虚拟机会占用主机大量的资源。
3、虚拟机的网络通信
虚拟机的网络通信一般都是由虚拟机监控器提供一个特殊的虚拟设备,例如虚拟网卡(Virtual Ethernet,vE),在多个虚拟机环境下要共享主机的网络数据包则需要虚拟网桥(Virtual Bridge,VB)实现数据包的广播或多播发送,以开源虚拟机KVM(Kernel-base Virtual Machine,基于内核的虚拟机)为例,它使用Linux中的虚拟网卡TUN/TAP和虚拟网桥与主机和外界进行通信。由于TUN/TAP集成了字符设备和网络设备,其中网络设备TAP负责接受和发送数据包,而字符设备TUN负责数据包在用户空间和内核空间的拷贝。当数据包到达主机网络网卡之后,网卡驱动判断时候是否有网桥存在,如果存在将数据包通过网桥广播转发至网络设备TAP的数据包接收队列,然后TAP通知字符设备TUN有数据包到达,这时TUN从数据包接收队列将数据包从内核空间拷贝至用户空间,再将数据包拷贝至虚拟机网卡的内存空间,之后虚拟机网卡更新中断,将网卡某些位置位,虚拟机发现网卡有数据包到来,则执行I/O指令,导致虚拟机退出到KVM中,在KVM中解析执行失败的I/O指令,模拟该指令的执行,并向虚拟机的中断描述符表中注入中断,之后恢复虚拟机的运行,在虚拟机的操作系统中,调用网卡的中断处理函数,从而完成数据包的接收。由于过多的虚拟设备导致数据包的传输路径比较长,传输效率比较低,尤其是在多虚拟机环境下,这种网络通信方式会导致虚拟机无法实时可靠的得到数据包。
(三)发明内容
1、目的
本发明的目的是为虚拟机监控器提供一种新的网络通信模型,它实现了虚拟机与主机以及与外界之间高效的通信方式,减少虚拟机与主机的切换次数,并降低虚拟机的开销,特别是在多虚拟机环境下,提高虚拟机处理数据包的效率,这样在物理服务器上部署虚拟机监控器,可以将主机收到的数据包全部高效的转发给一个或多个虚拟机,从而可以使运行与虚拟机之内的客户操作系统高效的运行业务程序,实现资源的整合,提高物理服务器的利用率。
2、技术方案
本发明一种虚拟机监控器高效网络通信的实现方法,其技术方案由以下两个部分组成:
(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 bitmap中清除该I/O端口的允许位,关闭对该端口的操作引起的虚拟机退出,查看数据包接收队列,判断其中数据包的个数是否超过p个,如果不是则读取所有的数据包,如果是则读取p个数据包,进入下述步骤(3)处理读到的数据包;
步骤(3):将p个数据包拷贝至虚拟机的网卡空间后,向虚拟机的中断描述符表中注入中断,之后重新进入虚拟机,虚拟机重新运行后,会发现虚拟机网卡有数据到来,从而触发虚拟机的网卡驱动程序,从而完成虚拟机的网络数据包的接收;
步骤(4):每隔一定时间重复步骤(2)和步骤(3),轮询是否有数据包到虚拟机的网卡空间并处理。
3优点及效果
本发明一种虚拟机监控器高效网络通信的实现方法,其优点及效果是:
首先,该方法直接从物理网卡获取数据包,并通过用户态通信机制以广播或多播的形式发送到一个或多个虚拟机中,从而取代了虚拟网桥,虚拟网卡,虚拟字符设备等,提高虚拟机监控器网络通信的速度;其次,该方法每隔固定时间,让虚拟机退出到虚拟机监控器中轮询数据包接收队列,将所有数据包一起处理,减少虚拟机与主机的切换次数,进一步提高虚拟机监控器网络通信的效率。在高速网络环境中,可以将所有数据包拷贝给虚拟机,因此本发明提出了一种全新的虚拟机监控器网络通信模型,具有很好的实用价值和前景。
(四)附图说明
图1系统总体框架示意图
图2虚拟机监控器网络模型对应示意图
图3虚拟机监控器网络数据处理示意图
(五)具体实施方式
参见图1、图2、图3所示,本发明一种虚拟机监控器的高效网络通信的实现方法,其具体实现方式由以下两个部分组成:
1、实现一个独立的Bridge模块,在这个模块中使用用户态通信机制维持虚拟机与主机和外界的通信,并实现了虚拟机多播组,每一个虚拟机可以属于一个多播组中,利用数据包的多播机制将数据包同时发送给多个虚拟机,提高在多虚拟机环境下数据包传输的效率,从而替代虚拟网桥、虚拟机字符设备和虚拟网络设备,其具体步骤如下:
步骤1:当Bridge模块装载进内核时,创建用户态通信套接字,并注册处理数据包的函数,当有数据包到Bridge模块时,由该函数将数据包发送自虚拟机。如果虚拟机启动时启用了网络设备,则在虚拟机监控器初始化网络设备时,初始化一个数据处理线程用来维持网络通信。在这个线程分别一个初始化数据包接收和发送队列,之后在这个线程中利用用户态通信机制向Bridge模块注册一个虚拟机网络设备,封装一个Netlink数据包向内核发送,在其中包含虚拟机的进程描述符和要加入的广播组,在虚拟机监控器中解析这个数据包,得到并保存虚拟机的进程描述符,并将其加入相应的广播组中;
步骤2:在主机网卡的驱动程序中定义一个钩子函数,当Bridge模块装载进内核时,通过对该钩子函数的赋值,从而建立与主机网卡驱动的联系,当主机网卡收到数据包后,触发网卡的驱动程序,在网卡的驱动程序中判断该钩子函数是否赋值,如果已经赋值,则通过Bridge模块将数据包广播发送到加入广播组的每一个虚拟机中;
步骤3:在虚拟机监控器中,利用Bridge模块将数据包发送到数据处理线程,读取数据包,解析之后将其拷贝到虚拟机网卡的内存空间;之后通过虚拟机网卡置位,虚拟机执行I/O指令导致其退出到虚拟机监控器中,在虚拟机监控器中将中断注入到虚拟机的中断描述符表中,模拟I/O指令的执行,恢复虚拟机运行,完成数据包的接收;
步骤4:当虚拟机发送数据包时,虚拟机执行I/O指令,将数据包放到网卡的内存区域,导致虚拟机退出到虚拟机监控器中。在虚拟机监控器中得到I/O指令的内容及操作的端口等信息,之后将通过指令模拟的方式执行数据包的拷贝,从虚拟机的网卡空间拷贝到通信线程的数据包发送队列,通过用户态通信的机制发送出去;
2、利用轮询机制减少虚拟机与主机的切换次数,轮询到来的网络I/O事件,进一步提高虚拟机监控器与虚拟机之间的的网络通信效率,其具体步骤如下:
步骤1:数据包到达虚拟机的网卡之后,更行终端,使得虚拟机退出到虚拟机监控器中,在虚拟机监控器中解析导致退出的指令,得到该I/O操作的端口,激活数据处理函数;
步骤2:在数据处理函数中,首先在虚拟机控制结构(VMCS)中的I/O bitmap中清除该I/O端口的允许位,关闭对该端口的操作引起的虚拟机退出,查看数据包接收队列,判断其中数据包的个数是否超过p个,如果不是则读取所有的数据包,如果是则读取p个数据包,进入步骤5处理读到的数据包;
步骤3:将p个数据包拷贝完成后,向虚拟机的中断描述符表中注入中断,之后重新进入虚拟机,触发虚拟机的网卡驱动程序,从而完成虚拟机的网络数据包的接收;
步骤4:每隔一定时间重复步骤4和步骤5,轮询是否有数据包到来虚拟机的网卡空间并处理。

虚拟机监控器高效网络通信的实现方法.pdf_第1页
第1页 / 共14页
虚拟机监控器高效网络通信的实现方法.pdf_第2页
第2页 / 共14页
虚拟机监控器高效网络通信的实现方法.pdf_第3页
第3页 / 共14页
点击查看更多>>
资源描述

《虚拟机监控器高效网络通信的实现方法.pdf》由会员分享,可在线阅读,更多相关《虚拟机监控器高效网络通信的实现方法.pdf(14页珍藏版)》请在专利查询网上搜索。

一种虚拟机监控器高效网络通信的实现方法,由两个部分组成:1.在虚拟机监控器中实现一个独立的Bridge模块,该模块将直接从主机网卡获取的数据包通过用户态通信机制以广播或者多播的形式发往虚拟机或虚拟机组,并将接收到的虚拟机或虚拟机组的数据包发送到主机网卡的发送队列中,提高虚拟机监控器与虚拟机之间的网络通信速度。2.避免虚拟机监控器与虚拟机的频繁切换。每隔固定时间,虚拟机退出到虚拟机监控器中轮询数据包。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 电学 > 电通信技术


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1