基于核间寄存器的多核虚拟机系统中虚拟机间通信研究

2012-11-21 11:46
长江大学学报(自科版) 2012年19期
关键词:间通信共享内存寄存器

张 峰 黄 景

(安徽水利水电职业技术学院电子系,安徽 合肥 231603) (中国科学技术大学计算机科学与技术学院,安徽 合肥 230027)

基于核间寄存器的多核虚拟机系统中虚拟机间通信研究

张 峰 黄 景

(安徽水利水电职业技术学院电子系,安徽 合肥 231603) (中国科学技术大学计算机科学与技术学院,安徽 合肥 230027)

随着虚拟化技术越来越多地应用在各种场合以及多核虚拟机系统上运行更多网络密集型和分布式应用程序,使得多核虚拟机系统对虚拟机间通信性能有着更高要求。在研究虚拟机间通信过程和多核核间通信过程的基础上,对基于核间寄存器的多核虚拟机系统中虚拟机间的通信框架结构进行设计,并实现了类MPI接口。试验结果表明,上述研究能够增加通信带宽并改善通信性能。

虚拟化;虚拟机间通信;核间寄存器;多核处理器

近年来,虚拟化技术愈来愈多地应用在服务器整合领域和网络应用领域,上述领域的多核虚拟机系统中虚拟机之间往往是相互协作的关系,彼此之间需要频繁通信,这对虚拟机间通信性能提出了很高的要求。为此,笔者对基于核间寄存器的多核虚拟机系统中虚拟机间通信进行了研究。

1 核间寄存器概述

多核虚拟机系统中虚拟机间通信要利用多核处理器中配置的核间寄存器,借以实现同驻一个物理平台上的虚拟机系统中2个虚拟机间及运行其上的进程间的通信[1]。多核处理器在设计之初就考虑到多核处理器上多个处理器核之间的通信方式,目前绝大多数多核处理器产品都具备核间寄存器和通信功能。如国产龙芯3A是一款MIPS体系结构的多核处理器,在龙芯3A多核处理器中每个处理器核都配置了8个核间中断寄存器以支持多核BIOS启动和操作系统运行时的处理器核之间的中断和通信,表1所示是对龙芯3A多核处理器核间寄存器功能描述。

表1 龙芯3A多核处理器核间寄存器功能描述

2 多核虚拟机系统中虚拟机间通信的框架结构设计

多核虚拟机系统中虚拟机间通信的框架结构如图1所示。

图1 多核虚拟机系统中虚拟机间通信的框架结构

2.1虚拟机间通信模块

虚拟机间通信模块包括核间寄存器中断模块和提供给应用程序的通信接口模块,其主要功能是完成消息判断并将消息通过核间寄存器发送或通过共享内存传输和从核间通信模块或共享内存模块接收数据。

2.2核间通信模块

表2 核间通信消息格式定义

核间通信模块的主要功能是完成消息格式定义和通过核间寄存器操作接口完成实际的核间通信寄存器的读写操作,并触发相应的核间中断,最后通知虚拟机客户操作系统处理核间中断[2]。如多核处理器中核间寄存器是64bit位,可将最后4个bit位设置为消息标记位,每次从核间寄存器中取出数据时先取得这4个bit位,其值及对应的消息格式如表2所示。当有进程向核间通信寄存器写入数据后会触发核间中断,核间中断处理程序会根据消息类型(即最后4bit位值)进行消息处理,程序中定义为:

图2 共享内存模块工作流程图

2.3共享内存模块

共享内存模块是相对独立的一个模块。由hypervisor程序分配合适大小的独立共享内存,在启动和加载虚拟机时将共享内存起始地址和大小信息传递给加载的虚拟机并直接将地址空间映射到虚拟机可访问的地址空间中,虚拟机拥有对共享内存的读写权利,而共享内存的管理则由共享内存模块完成[3]。共享内存模块工作大体流程图如图2所示。

3 类MPI接口的实现

为改善多核虚拟机系统中虚拟机间通信的性能,对类MPI接口进行设计,具体内容如下。

(1)void SNOO_MPI_Init(char * name)。初始化类MPI的运行环境,以name为关键字申请共享内存并将其映射到自己可访问的地址控制,记录程序运行中所起的进程数以及其运行所在的处理器核。

(2)void SNOO_MPI_Finalize(void)。使程序安全退出类MPI环境,释放初始化函数申请的共享内存,清除相关数据结构中的内容。

(3)void SNOO_MPI_Comm_size(int *size)。仅获取程序运行所起的进程数。

(4)void SNOO_MPI_Comm_rank(int *rank)。仅获取进程运行所在处理器核。

5)void SNOO_MPI_Send(void *message,int count,int dest,int flag,MPI_Datatype datatype,MPI_Comm comm)。该函数将起始地址为message的count个数据类型为datatype的数据发送到类MPI进程号为dest的MPI进程,其中flag表示消息标记,comm表示通信域。在该类MPI内部实现中调用了共享内存模块和核间通信模块的接口,发送消息时判断消息大小(count*sizeof(datatype))是否超过核间寄存器容量大小。

6)void SNOO_MPI_Recv(void *message,int count,int source,MPI_Datatype datatype,int flag,MPI_Comm comm)。该函数的作用是从MPI进程号为source的进程接收count个数据类型为datatype的数据放到起始地址为message的缓冲区,flag为消息标志,comm为通信域。在接口内部也涉及到核间通信模块和共享内存模块,当发送方通过核间寄存器发送数据时,核间寄存器处理程序会把数据直接放在接收方的缓冲区中;当发送方通过共享内存发送数据时,该函数会从进程运行所在处理器核对应的共享内存中读取数据放到缓冲区中。

4 试验分析

图3 2种MPI接口带宽比较

采用一款MIPS64体系结构多核处理器作为试验平台,配置12个主频为800MHz的CPU核,主频为800MHz的DDR2内存4G,每个核配置了64bit的核间通信寄存器。在消息缓冲区大小不同的情况下,测量类MPI接口和MPICH2接口在试验平台上传输1G数据时的带宽大小,试验结果如图3所示。从图3可以看出,随着消息缓冲区大小的增加,类MPI接口的带宽比MPICH2接口的带宽增大得更加显著,说明类MPI接口可以有效改善通信带宽。

5 结 语

由于多核虚拟机系统上运行更多网络密集型和分布式应用程序,使得多核虚拟机系统对虚拟机间通信性能有着更高要求。针对上述情况,对基于核间寄存器的多核虚拟机系统中虚拟机间通信框架结构进行设计,并实现了类MPI接口。试验表明,上述研究能够增加通信带宽并改善通信性能,能够满足多核虚拟机系统对虚拟机间通信性能的要求。

[1]张建.Xen虚拟机间通信优化研究与实现[D].上海:上海交通大学,2008.

[2]孟江涛,卢显良,董贵山.Xen的虚拟机网络优化研究[J].电子科技大学学报,2010(1):106-109.

[3]朱团结,艾丽蓉.基于共享内存的Xen虚拟机间通信的研究[J].计算机技术与发展,2011,21(7):5-8,12.

10.3969/j.issn.1673-1409(N).2012.07.045

TP393

A

1673-1409(2012)07-N132-03

2012-04-25

张峰(1974-),男,2000年大学毕业,讲师,现主要从事计算机应用方面的教学与研究工作。

[编辑] 李启栋

猜你喜欢
间通信共享内存寄存器
STM32和51单片机寄存器映射原理异同分析
Lite寄存器模型的设计与实现
通过QT实现进程间的通信
综合航电分区间通信元模型设计研究
一种适用于远距离星间链路通信的设计
基于Linux内核的文件服务器模型的研究与构建
基于PCI总线的多处理器协同机制研究
工信部:未来1到2年增设七个国家级骨干直联点
一种高效RTAI 共享内存管理层的研究与实现*
高速数模转换器AD9779/AD9788的应用