一种基于共享内存的虚拟机通信方法

文档序号:6575620阅读:264来源:国知局
专利名称:一种基于共享内存的虚拟机通信方法
技术领域
本发明涉及虚拟机的域间通信领域,特别是涉及一种基于共享内存的高效虚拟机通信方法。
背景技术
虚拟机(Virtual Machine: VM)是支持多操作系统并行运行在单个物理服务器上的一种 系统,能够提供更加有效的底层硬件使用。在虚拟机中,中央处理器芯片从系统其它部分划 分出一段存储区域,操作系统和应用程序运行在"保护模式"环境下。由于虚拟化技术最大 的优势在于他可以创建虚拟机从而为那些共享同一物理硬件平台资源的服务应用提供独立的 功能和性能。虚拟机能够提高系统范围内的利用率降低整个系统的操作开销。虚拟机监视器
(Virtual Machine Monitor: VMM)是一个用于协调管理在同一宿主机内虚拟机的软件层, 它通常通过硬件或者是软件部件的帮组来强化虚拟机之间的独立性。例如开源虚拟机监视器 Xen,它是由剑桥大学开发的开源的,它提供一种称之为半虚拟化技术,使得虚拟机能够获得 接近宿主机的高性能。Xen监视器(Hypervisor)运行在系统特权最高级,有一个可信的虚 拟机称为domain 0来协助管理其他处于非特权级的虚拟机。
从安全的角度来看,加强虚拟机之间的独立性是十分重要的。但是独立性也会成为在同 一宿主机内的虚拟机之间通信的障碍。目前在同一物理机上的虚拟机采用前端-后端驱动进行 通信。参阅图1所示,在目前Xen通信结构中将网络驱动分为两部分,前端驱动和后端驱动。 后端驱动位于domain 0中,前端驱动位于客户虚拟机中。虛拟机之间的通信放弃了低层次的 实际物理网络硬件进行通信,而是通过高层次的抽象网络驱动进行通信。这样做可以使得虚 拟机只需要知道使用的是网络驱动,而不用去关心使用的是什么样的网络驱动。虚拟机之间 要进行通信时,通信一方将通信数据通过前端驱动将数据发送给位于domain 0中的后端驱动。 在Xen结构中只有domain 0能够实际访问所有的物理设备资源,后端驱动在接收到数据包后, 根据数据包中的地址再经由物理网卡转发到目的IP。由于我们研究的是位于同一物理机上虚 拟机之间的通信,因此前面是经过物理网卡的一个回路,将数据包发送到了该宿主机上的另 一个虚拟机的前端驱动,然后交由应用处理。
通过上面对现有的位于同一宿主机上的虚拟机通信流程分析,不难发现通信通路很长,
4需要第三方的参与(domain 0的参与)才能完成通信。位于同一宿主机内的虚拟机之间通信 方法和位于网络中不同宿主机的虚拟机通信方法一样。该方法忽略了位于同一宿主虚拟机实 际上是共享了共同的物理资源,如内存、CPU等。从而造成虚拟机之间通信效率低,通信资 源利用率。在很多应用场景下需要用到虚拟机之间的通信,其通信效率直接影响到整体性能。 比如,分布式高性能计算机应用可能有两个进程位于同一物理机上的不同虚拟机,它们之间 可能因为要使用MPI库进行通信。在网络服务中,为了满足一个用户的事件请求,运行在一 个虚拟机内的服务程序可能需要和在另一个虚拟机内的数据库服务程序进行通信。在这些应 用中,都希望能够最大化通信吞吐量最小化延迟。
虚拟机之间的独立性是虚拟化技术的关键所在,这一特性直接影响了位于同一宿主机上 虚拟机之间的通信性能。随着虚拟技术的广泛应用,虚拟机之间的通信性能提高的需求增大, 研究高性能的虚拟机之间的通信方法是十分必要和迫切的。为了提高虚拟机之间的通信性能, 有必要对虚拟机的特性进行分析,结合虚拟机共享物理资源的特性设计新的通信方法。因此, 本发明提出的基于共享内存的虚拟机通信方法对提高虚拟机通信性能、合理有效地使用虚拟 机网络资源具有非常重要的意义。

发明内容
本发明以提供直接、高效的虚拟机通信为目标,以共享内存为核心思想,解决虚拟机通
信性能低的问题。具体包括
1. 在物理资源层,以共享内存环结构为基础,设计无锁的可异步并发访问的共享内存访问 方法。该方法思想在于虚拟机中多个进程对该结构访问时,不需要进行明显的同步操作。
2. 在虚拟资源层,以事件通道为基础,建立虚拟机之间的通信通路,同时在虚拟机内部设 计了虚拟处理器的动态绑定事件通道方法,实现虚拟机之间的通信通路。在虚拟机监视 器中设计事件通道表,给虚拟机间通信提供必要的信息。
3. 在可信虚拟机中(domain 0),设计虚拟机动态发现机制以及虚拟机信息维护方法。虚拟 机动态发现机制在于当有新的虚拟机创建或是有虚拟机迁移或销毁时,可信虚拟机能够 及时发现,并记录相关信息。虚拟机信息维护是将在同一宿主机内的虚拟机的信息进行 收集和整理。
4. 在客户虚拟机,设计虚拟机通信管理方法,该方法主要用于和可信虚拟机进行一些必要 的信息通信,以及和其他虚拟机进行通信前的必要通信通路准备工作。
与现有技术相比,本发明的创新之处在于抓住在同一宿主机的虚拟机共享物理资源的特性,基于共享内存实现高效的虚拟机通信。具体体现在
1. 虚拟机发现,让虚拟机感知到位于同一宿主机上的其他虚拟机。对于位于不同宿主机上的虚拟机之间的通信只能采用传统的通信方法,对于同一宿主机的虚拟机可以采用更直接高效的通信方法,但是首先需要让虚拟机感知到其他虚拟机的存在。
2. 相比传统通信通路需要第三方的参与,本发明提供直接的、高效的通信通路。当虚拟机要进行通信时,通过和通信方建立通信通道,直接进行数据通信。
本发明提出一种基于共享内存的虚拟机通信方法,该方法在具有如下结构的系统上实现:
该系统具有Xen监视器,该Xen监视器作为虚拟机监视器监管其他运行在实际物理机上的虚拟机,该系统具有特权虚拟机,该特权虚拟机拥有所有权限,可以直接访问物理资源,该系
统还具有多个客户虚拟机,客户虚拟机之间进行通信,该方法的特征在于包括如下步骤
1) 在Xen监视器中维护一张事件通道表,用于记录物理机上所有客户虚拟机的信息,在每个客户虚拟机内维护 一份事件通道表拷贝;
2) Xen监视器为新创建的客户虚拟机及与其通信的一客户虚拟机创建一对实际物理共享内存环形队列第一实际物理内存环形队列和第二实际物理内存环形队列,所述实际物理共享内存环形队列用于客户虚拟机之间的数据通信;
3) 在参与通信的两个客户虚拟机本地各自设置两个虚拟共享内存环形队列虚拟数据发送共享内存环形队列和虚拟数据接收共享内存环形队列,两个客户虚拟机各自将本地虚拟共享内存环形队列映射到其所属的实际物理共享内存环形队列;在映射过程中,第一客户虚拟机的虚拟数据发送共享内存环形队列和第二客户虚拟机的虚拟数据接收共享内存环形队列共同映射到第一实际物理共享内存环形队列;第一客户虚拟机的虚拟数据接收共享内存环形队列和
第二客户虚拟机的虚拟数据发送共享内存环形队列共同映射到第二实际物理共享内存环形队列;
4) 所述新建客户虚拟机为与其通信的客户虚拟机创建一事件通道,并将该事件通道信息发送给与所述新建客户虚拟机通信的虚拟客户机,事件通道用于在通信的两个虚拟机之间传送信号告知事件发生;
5) 当虚拟机之间需要通信时,通讯发起方根据通信目的IP地址査询本地事件通道表从而知道通信目的是否是在同一宿主机上,如在同一宿主机上,客户虚拟机将要发送的数据写入本地虚拟数据发送共享内存环形队列;通信目的客户虚拟机会从事件通道得知数据到来,从本地虚拟数据接收共享内存环形队列读取数据。
事件通道表包含三个属性Domain、 IP、 Port, Domain为唯一标识每个虚拟机的ID号,
6IP为虚拟机的IP地址,Port为虚拟机对应的事件通道端口号,表信息由特权虚拟机进行维护更新,特权虚拟机每隔一段时间对宿主机上的所有客户虚拟机进行信息收集然后更新该表。Xen监视器定时向客户虚拟机发送最新事件通道表拷贝。
步骤4)中,与所述新建客户虚拟机通信的客户虚拟机根据接收到的事件通道信息在本地随机选出一个虚拟CPU绑定到该事件通道,绑定结束后返回给所述新建客户虚拟机一个确认信息。
每对通信的客户虚拟机之间只有一个通信通道,每个客户虚拟机内有多个虚拟CPU, —次只能有一个虚拟CPU拥有通信通道的控制权;在同一客户虚拟机内的虚拟CPU通过发送核
间通信进行协商,完成事件通道控制权的转移。
客户虚拟机需要进行通信时,根据通信目的客户虚拟机的IP地址在事件通道表中进行检
索,获取domain号,再根据domain号检索port 。


图1 Xen前端后端通信体系结构图
图2基于共享内存的虚拟机通信体系结构图
图3共享内存数据传输机制设计图
图4事件通道表设计图
图5事件通道建立
具体实施例方式
参阅图2,本发明通过共享内存和事件通道的综合设计,在位于同一宿主机的虚拟机之间构适通信通路。以此为S础,通虹在狩权虚拟机和各尸遝拟机干的议计虚拟机友现机制和虚拟机通信管理机制,实现虚拟机之间的高效通信。在任意一对虚拟机之间有一个通信通道,该通道包括一个事件通道和两个共享内存环行队列。事件通道用于在通信虚拟机之间传送信号告知事件发生,共享内存环队列用于虚拟机之间的数据通信。由于特权虚拟机拥有最高权限,因此在特权虚拟机中设计一个虚拟机发现模块用于收集和管理位于该宿主机上所有客户虚拟机的信息。为了使得所有客户虚拟机能够在有限的权限下高效的访问到由特权虚拟机收集到得其他虚拟机的相关信息,本发明同时在Xen监视器中维护一张事件通道表用于记录位于该宿主机上所有的虚拟机以及虚拟机之间的事件通道信息。特权虚拟机中的虚拟机发现模块会定时更新事件通道表中的信息以保证信息的有效性。在客户虚拟机中设计管理模块,用于发现其他虚拟机的存在、管理本地通信通路、管理本地虚拟机和其他虚拟机之间的通信以及管理本地虚拟CPU的动态绑定到通信通路上。
参阅图3,本发明首先在物理资源层设计了高效的共享内存数据传输机制。Xen中的授权表提供了一个在虚拟机之间共享内存的机制。每个虚拟机都有自己的授权表,由Xen监视器统一管理。虚拟机通过授权表告诉Xen监视器其他虚拟机对其所有的共享内存所拥有的权限。授权表的这个特性允许虚拟机之间通过共享内存进行通信。虚拟机可以通过共享内存进行数据拷贝。本发明基于共享内存设计环形队列来存储通信信息。环形队列是一个生产者-消费者的环形缓存,这样可以避免了生产者和消费者之间的同步操作。该环形队列有两个指针:front和back, front指向环形队列头,back指向环形队列尾。当生产者生产了一个数据,即通信一方向环形队列插入一个数据,back指针加l;当消费者消费了一个数据,即通信目的方从环形队列中取走了一个数据,front指针加1。这样的设计不用考虑生产者和消费者之间的同步问题,同时当有多个生产者或是消费者要访问环形队列时,通过一个访问锁就可以保证它们之间的互斥访问而不需要更多的同步操作。对于每一对通信虚拟机,在每个虚拟机本地都有两个虚拟的共享内存环形队列,即只有结构,但是不实际分配物理空间。在这两个环形队列中, 一个用于数据发送, 一个用于数据接收。同时本发明在Xen虚拟机监视器中为每一对虚拟机创建两个共享内存环形队列,并为其分配实际物理共享内存空间。通信虚拟机将本地的虚拟共享内存环形队列映射到位于Xen虚拟机监视器中的实际物理共享内存环形队列。映射步骤如下
a) 客户虚拟机1将本地虚拟数据发送共享内存环形队列映射到实际物理共享内存环形队列1
b) 客户虚拟机1将本地虚拟数据接收共享内存环形队列映射到实际物理共享内存环形队列2
c) 客户虚拟机2将本地虚拟数据发送共享内存环形队列映射到实际物理共享内存环形队列1
d) 客户虚拟机2将本地虚拟数据接收共享内存环形队列映射到实际物理共享内存环形队列2
通过上述映射方法使得客户虚拟机1中的虚拟数据发送共享内存环形队列和客户虚拟机2中的虚拟数据接收共享内存环形队列映射到同一实际物理共享内存环形队列。这样,客户虚拟机1对本地虚拟数据发送共享内存环形队列中写入数据的操作等同于向客户虚拟机2的本地虚拟数据接收共享内存环形队列的数据写入操作。同样的,客户虚拟机1中的虚拟数据接收共享内存环形队列和客户虚拟机2中的虚拟数据发送共享内存环形队列映射到同一实际物理共享内存环形队列。通过这种映射方法,从而使得只需要进行一次的内存拷贝操作就可以完成虚拟机之间的数据传输。
在虚拟资源层,我们通过在每一对通信的客户虚拟机之间建立事件通道进行异步通信。每个虚拟机都会于位于同一宿主机上每个其他客户虚拟建立一个事件通道用于通信。为了管理众多事件通道,本发明在Xen虚拟机监视器中建立了一张事件通道表,如图4所示。事件通道表包含三个属性
> Domain:即domain ID,在Xen体系结构中用domain ID来唯一标识位于其上的每一个虚拟机
> IP:虚拟机的IP地址
> Port:事件通道端口号,可以唯一标识宿主机上的事件通道。
在Xen系统结构中事件通道和端口几乎是等价的。 一个事件通道是两个端口的抽象,端口是用于指明绑定到哪个事件通道的标识。当创建了一个事件通道,它的一端连着创建它的虚拟机,另一端可以允许一个其他虚拟机来连接。两个虚拟机连接到得端口号是一样的,因此端口号可以唯一标识一个事件通道。通过上述事件通道表的设计,可以使得所有虚拟机感知到其他虚拟机的存在,同时通过査询事件通道表可以知道在众多事件通道中连接哪个事件通道可以和目的客户虚拟机进行通信。当一个客户虚拟机想向另一个客户虚拟机发起通信时,它可以按照如下步骤查到绑定到哪个事件通道端口进行通信
a) 根据目的虚拟机的IP地址浏览事件通道表,获取目的虚拟机的VM一ID
b) 根据获取的虚拟机的VM—ID査找该虚拟机所拥有的事件通道端口号集合
c) 根据自身VMJD查找自己所拥有的事件通道端口号集合
d) 将两个集合进行交集获得一个事件通道端口号事件通道表的信息由特权虚拟机进行维护更新,每个客户虚拟机在创建时会发送一个通
知信息给特权虚拟机中的虚拟机发现模块,该模块会为该客户虚拟机建立一个记录,并自此开始定期追踪该虚拟机的信息。通信当客户虚拟机迁移或是销毁,同样会发送一个通知信息给特权虚拟机,特权虚拟机会在事件通道表中删除该虚拟机的记录以及所有和该虚拟机相关的事件通道信息记录。为了提高客户虚拟机访问事件通道表的性能,在每个客户虚拟机本地维护一个事件通道表的拷贝。当客户虚拟机创建时,特权虚拟机会发送一个事件通道表的拷贝给客户虚拟机。这样客户虚拟机在本地即可高效的査询了,而不用再访问处于特权级的Xen监视器。为了保持每个客户虚拟机本地的事件通道表的有效性,特权虚拟机定时更新每个客户虚拟机的本地事件通道表。在每对客户虚拟机之间只存在一个通信通路,每个虚拟机内有多个虚拟CPU,因此在每个虚拟机内部需要有一套协调虚拟CPU使用唯一的通信通路的机制。为此,本发明在每个虚拟机内部设计了一个动态事件通道绑定机制来协调事件通道的控制权在虚拟CPU之间传递,具体步骤如下
a) 请求虚拟CPU 1向拥有事件通道控制权的虚拟CPU 2发送核间通信信息包,请求获得事件通道的控制权
b) 虚拟CPU 2侦听到事件通道请求,查看目前对事件通道的使用状况,如果正在使用则进入步骤c),如果事件通道未使用,则进入步骤d)
c) 虚拟CPU 2释放事件通道,通过核间通信向虚拟CPU l发送事件通道闲置请求成功信息包
d) 虚拟CPU 2继续使用事件通道,通过核间通信向虚拟CPU 2发送事件通道忙,请求失败信息包
e) 虚拟CPU 1侦听到CPU 2的反馈信息,若返回信息为请求失败,虚拟CPU l等待一定时间间隔再转入步骤a).若返回信息为请求成功,则转入步骤f)
f) 虚拟CPU l获得事件通道的控制权,将自己绑定到事件通道,进行通信当一个新的客户虚拟机被创建后,该虚拟机会和特权虚拟机进行必要的注册信息交流,
在事件通道表中进行注册,客户虚拟机先在本地创建两个虚拟共享内存环形队列和一个事件通道,然后和所有其他在该宿主机上的客户虚拟机之间建立通信通道,具体如图5所示。
客户虚拟机之间的通信通道建立过程类似于客户端和服务器建立连接的过程。在建立过程中我们将拥有较小的虚拟机ID号的客户虚拟机作为服务器(客户虚拟机1),另一个客户虚拟机作为客户端(客户虚拟机2)。首先客户虚拟机1在本地共享内存中设置两个虚拟共享内存环形队列SEND和RECV,前者用于发送数据,后者用于接收数据。客户虚拟机l然后向Xen虚拟机监视器发起共享内存请求,在Xen监视器中创建两个实际物理共享内存环形队列。然后将本地的虚拟共享内存环形队列按照前面所述方法映射到实际物理共享内存环形队列。同时,客户虚拟机1会创建一个事件通道,该事件通道一端绑定到客户虚拟机1的一个虚拟CPU,然后暴露另一个端口以供通信的客户虚拟机绑定。客户虚拟机1将创建通道的信息封装成数据包发送给客户虚拟机2,信息包含以下内容
> SEND地址客户虚拟机1的虚拟发送共享内存环形队列映射到实际物理共享内存环形队列的地址
> RECV地址客户虚拟机1的虚拟接收共享内存环形队列映射到实际物理共享内存环形队列的地址
> Port号事件通道的另一个端口,用于给通信另一方绑定
10客户虚拟机2侦听并接受到该信息,然后根据信息中的共享内存地址,将自己的本地虚拟接收共享内存环形队列映射到SEND地址,将本地的虚拟发生共享内存环形队列映射到RECV地址。同时,选择一个虚拟CPU绑定到事件通道的端口上。至此,客户虚拟机l和客户虚拟机2之间的通信通路建立完成。客户虚拟机2会构造一个确认数据包返回给客户虚拟机1。为了保证建立信息包不丢失,客户虚拟机1在期待时间内没有收到来自客户虚拟机2的确认信息包,会重新启动创建连接过程,如果失败超过三次,则客户虚拟机1放弃建立连接,并将错误信息返回给特权虚拟机。
权利要求
1、一种基于共享内存的虚拟机通信方法,该方法在具有如下结构的系统上实现该系统具有Xen监视器,该Xen监视器作为虚拟机监视器监管其他运行在实际物理机上的虚拟机,该系统具有特权虚拟机,该特权虚拟机拥有所有权限,可以直接访问物理资源,该系统还具有多个客户虚拟机,客户虚拟机之间进行通信,该方法的特征在于包括如下步骤1)在Xen监视器中维护一张事件通道表,用于记录物理机上所有客户虚拟机的信息,在每个客户虚拟机内维护一份事件通道表拷贝;2)Xen监视器为新创建的客户虚拟机及与其通信的一客户虚拟机创建一对实际物理共享内存环形队列第一实际物理内存环形队列和第二实际物理内存环形队列,所述实际物理共享内存环形队列用于客户虚拟机之间的数据通信;3)在参与通信的两个客户虚拟机本地各自设置两个虚拟共享内存环形队列虚拟数据发送共享内存环形队列和虚拟数据接收共享内存环形队列,两个客户虚拟机各自将本地虚拟共享内存环形队列映射到其所属的实际物理共享内存环形队列;在映射过程中,第一客户虚拟机的虚拟数据发送共享内存环形队列和第二客户虚拟机的虚拟数据接收共享内存环形队列共同映射到第一实际物理共享内存环形队列;第一客户虚拟机的虚拟数据接收共享内存环形队列和第二客户虚拟机的虚拟数据发送共享内存环形队列共同映射到第二实际物理共享内存环形队列;4)所述新建客户虚拟机为与其通信的客户虚拟机创建一事件通道,并将该事件通道信息发送给与所述新建客户虚拟机通信的虚拟客户机,事件通道用于在通信的两个虚拟机之间传送信号告知事件发生;5)当虚拟机之间需要通信时,通讯发起方根据通信目的IP地址查询本地事件通道表从而知道通信目的是否是在同一宿主机上,如在同一宿主机上,客户虚拟机将要发送的数据写入本地虚拟数据发送共享内存环形队列;通信目的客户虚拟机会从事件通道得知数据到来,从本地虚拟数据接收共享内存环形队列读取数据。
2、 根据权利要求1所述的方法,其特征在于事件通道表包含三个属性D咖ain、 IP、 Port,Domain为唯一标识每个虚拟机的ID号,IP为虚拟机的IP地址,Port为虚拟机对应的事件通道端口号,表信息由特权虚拟机进行维护更新,特权虚拟机每隔一段时间对宿主机上的所有客户虚拟机进行信息收集然后更新该表。
3、 根据权利要求1所述的方法,其特征在于Xen监视器定时向客户虚拟机发送最新事件通道表拷贝。
4、 根据权利要求1所述的方法,其特征在于步骤4)中,与所述新建客户虚拟机通信的客户虚拟机根据接收到的事件通道信息在本地随机选出一个虚拟CPU绑定到该事件通道,绑定结束后返回给所述新建客户虚拟机一个确认信息。
5、 根据权利要求1所述的方法,其特征在于每对通信的客户虚拟机之间只有一个通信通道,每个客户虚拟机内有多个虚拟CPU, 一次只能有一个虚拟CPU拥有通信通道的控制权;在同一客户虚拟机内的虚拟CPU通过发送核间通信进行协商,完成事件通道控制权的转移。
6、 根据权利要求1和2所述的方法,其特征在于客户虚拟机需要进行通信时,根据通信目的客户虚拟机的IP地址在事件通道表中进行检索,获取do腿in号,再根据domain号检索porto
全文摘要
一种基于共享内存的虚拟机通信方法。在位于同一宿主机上的客户虚拟机之间建立通信通道,由位于客户虚拟机中的管理模块创建,该通道包含两个虚拟共享内存环形队列用于接收和发送数据,一个事件通道用于发送事件信号。在Xen虚拟机监视器中为每对客户虚拟机维护两个共享内存环形队列,通信双方将本地虚拟共享内存环形队列映射到这两个队列,进而实现高带宽的数据通路。特权虚拟机中的虚拟机发现模块会在Xen虚拟机监视器中维护一张事件通道表用于收集位于同一宿主机上的所有客户虚拟机的信息,同时在每个客户虚拟机本地维护一个事件通道表的拷贝,该拷贝定时被更新,为通信提供必要的信息。客户虚拟机通过查询事件通道表获取通信目的地通信通道信息,通过通信通道实现虚拟机之间的高性能通信。
文档编号G06F9/54GK101667144SQ200910093469
公开日2010年3月10日 申请日期2009年9月29日 优先权日2009年9月29日
发明者良 张, 白跃彬, 成 罗 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1