基于共享内存的多核虚拟机系统中的虚拟机间通信
摘要虚拟化技术已越来越多的应用在各种场合,在一些应用场景下特别是服务器整合应用场景下,对虚拟机系统中各个虚拟机间通信能力有着更迫切的要求。目前在Xen代表的虚拟系统中,虚拟机间基于共享内存的通信不仅要经过多次内存拷贝而且虚拟机间的切换也需要很大的性能开销。本文在深入研究的基础上提出一种基于共享内存和核间中断的多核虚拟机系统中虚拟机间的通信方式,实验证明该通信方式具有较高的带宽和性能。
【关键词】虚拟化 VM间通信 核间中断 Xen多核
1 Xen中虚拟机间通信方式
本文中所讨论的Xen虚拟机系统中虚拟机间通信方式均是基于共享内存技术的,XenSocket是具有高吞吐率的虚拟机间通信方式,它直接利用通信虚拟机间的循环缓冲区(共享内存)完成数据的传输而绕过了网络协议栈。接收数据的虚拟机分配128K的页面池并请求hypervisor让发送数据的虚拟机共享这些页面,这些页面被用作循环缓冲区,其核心的实现是用一个控制变量的高效数据传输算法,这个控制变量用于指示当前循环缓冲区中可以写多少字节的数据,发送方和接收放维护本地的读写偏移。XenSocket提供了一个单向的通信管道,一旦发送者向共享内存通道写入数据,接受者就可以立马可见发送者写入的数据。XenSocket最核心的操作是bind()和connect(),VM间必须要通过这两个操作完成协商控制信息和建立共享内存,当完成这两步以后数据通道将成功建立并可以开始传输数据。
XenLoop在网络层上拦截虚拟机发出的网络包并通过高速的、虚拟机间共享内存通道而不是通过虚拟的网络接口将网络包传送到同驻在一个物理平台上的其他虚拟机,XenLoop提供了一条高性能的、全透明的虚拟机间通信通道,虚拟机之间通过XenLoop提供的环路通道可以不借助任何第三方组件条件下实现虚拟机之间的透明通信。XenLoop借助已经存在的socket接口和库可以使应用程序不用修改,也不用重新编译和链接便可以在实现XenLoop机制的虚拟机间通信。此外,XenLoop通过实现一个自我包含的Linux内核模块使得不需要客户操作系统和Xen虚拟机监视器的任何修改就可以使用XenLoop。客户虚拟机可以通过XenLoop机制自动发现位于同一物理平台上的其他的VM,并在需要的时候自动与通信对象建立XenLoop通道,这个XenLoop通道绕过了通过Dom0的标准路径。
2 基于核间中断和共享内存相结合的虚拟机间通信方式
2.1 硬件支持
片上多核处理器中多个处理器核之间即是相互独立又是一个相互协作的整体,多核处理器出现就是为了加速程序的运行,提高硬件的性能,而不是将一个程序拆分成多个程序片段来执行,所以多核处理器中的多个处理器核之间在运行多个进程或线程的同时也需要相互的协作和通信;另外多核处理器在启动过程中也需要多个处理器核之间的相互协作,如主核初始化其他核的运行环境并通知其他核进行剩余的系统初始化工作。所以多核处理器在设计之初就考虑到多核处理器上多个处理器核心之间的通信方式,在现在的多核处理器产品中绝大多数都具备核间寄存器和通信功能,如IBM的CELL处理器是款高性能分布式计算机体系结构处理器和国产龙芯3A是一款MIPS体系结构的多核处理器都支持操作系统运行时的处理器核之间的中断和通信。
2.2 框架结构
基于核间中断和共享内存相结合的方式的虚拟机间通信方式框架主要包括虚拟机间通信模块、核间通信模块和共享内存模块三部分。虚拟机间通信模块位于客户操作系统中,其包括中断处理模块和提供给应用程序的通信接口,提供给应用程序的接口是通过向操作系统中添加系统调用实现的。在系统调用内部会先判断消息传递的大小,若在3个或3个字节以内将采用核间通信寄存器传输,若消息内容大小大于3个字节则采用共享内存传输数据,即虚拟机间通信是采用核间通信寄存器还是采用共享内存对于应用程序来说是透明的。若采用核间寄存器通信则调用VMM中的核间通信模块中的通信接口,采用共享内存作为通信介质则调用共享内存模块中的通信接口。
共享内存模块是相对独立的一个模块,考虑到虚拟机间通信频繁和通信效率,设计的高速虚拟机间通信系统中对共享内存的访问和申请为涉及到内存授权表等安全性限制,而是从虚拟机系统划分出一块单独的内存作为虚拟机间通信使用的共享内存,若采用Xen系统中基于内存授权表和页面反转等机制来实现和约束基于共享内存的虚拟机通信将在申请和访问共享内存需要经过VMM的安全性检查和页面授权工作,可能还会涉及到页面反转等操作,最后影响基于共享内存通信的通信效率。共享内存模块包括记录已分配的共享内存块链表、尚未分配的闲置的共享内存块链表和对共享内存块链表互斥访问的自旋锁以及基于核间中断的同步模块。
3 结束语
本文在深入研究Xen虚拟机间通信基础上,发现Xen中基于共享内存的虚拟机间通信方式中的页面反转、控制信息传输等降低了通信性能,由此提出基于核间中断和共享内存相结合的方式消除页面反转等开销提高通信效率,并实现类MPI接口来验证此种通信方式对性能的提升。
参考文献
[1] 张建.Xen虚拟机间通信优化研究与实现[D].上海交通大学,008.
[2]孟江涛,卢显良,董贵山. Xen的虚拟机网络优化研究[J].电子科技大学学报,2010(01).
[3] 团朱结,艾丽蓉.基于共享内存的Xen虚拟机间通信的研究[J].计算机技术与发展,2011(07).
[4] XenSocket:A High-Throughput Interdomain Transport for Virtual Machines,"in Mid-dleware '07: Proceedings of the ACM/IFIP/USENIX 2007 International Conference on Middleware[C].New York,NY,USA: Springer,November 2007,pp.184-203.
作者单位
河南职业技术学院河南省郑州市450046