張 峰 黃 景
(安徽水利水電職業技術學院電子系,安徽 合肥 231603) (中國科學技術大學計算機科學與技術學院,安徽 合肥 230027)
基于核間寄存器的多核虛擬機系統中虛擬機間通信研究
張 峰 黃 景
(安徽水利水電職業技術學院電子系,安徽 合肥 231603) (中國科學技術大學計算機科學與技術學院,安徽 合肥 230027)
隨著虛擬化技術越來越多地應用在各種場合以及多核虛擬機系統上運行更多網絡密集型和分布式應用程序,使得多核虛擬機系統對虛擬機間通信性能有著更高要求。在研究虛擬機間通信過程和多核核間通信過程的基礎上,對基于核間寄存器的多核虛擬機系統中虛擬機間的通信框架結構進行設計,并實現了類MPI接口。試驗結果表明,上述研究能夠增加通信帶寬并改善通信性能。
虛擬化;虛擬機間通信;核間寄存器;多核處理器
近年來,虛擬化技術愈來愈多地應用在服務器整合領域和網絡應用領域,上述領域的多核虛擬機系統中虛擬機之間往往是相互協作的關系,彼此之間需要頻繁通信,這對虛擬機間通信性能提出了很高的要求。為此,筆者對基于核間寄存器的多核虛擬機系統中虛擬機間通信進行了研究。
多核虛擬機系統中虛擬機間通信要利用多核處理器中配置的核間寄存器,借以實現同駐一個物理平臺上的虛擬機系統中2個虛擬機間及運行其上的進程間的通信[1]。多核處理器在設計之初就考慮到多核處理器上多個處理器核之間的通信方式,目前絕大多數多核處理器產品都具備核間寄存器和通信功能。如國產龍芯3A是一款MIPS體系結構的多核處理器,在龍芯3A多核處理器中每個處理器核都配置了8個核間中斷寄存器以支持多核BIOS啟動和操作系統運行時的處理器核之間的中斷和通信,表1所示是對龍芯3A多核處理器核間寄存器功能描述。

表1 龍芯3A多核處理器核間寄存器功能描述
多核虛擬機系統中虛擬機間通信的框架結構如圖1所示。

圖1 多核虛擬機系統中虛擬機間通信的框架結構
2.1虛擬機間通信模塊
虛擬機間通信模塊包括核間寄存器中斷模塊和提供給應用程序的通信接口模塊,其主要功能是完成消息判斷并將消息通過核間寄存器發送或通過共享內存傳輸和從核間通信模塊或共享內存模塊接收數據。
2.2核間通信模塊

表2 核間通信消息格式定義
核間通信模塊的主要功能是完成消息格式定義和通過核間寄存器操作接口完成實際的核間通信寄存器的讀寫操作,并觸發相應的核間中斷,最后通知虛擬機客戶操作系統處理核間中斷[2]。如多核處理器中核間寄存器是64bit位,可將最后4個bit位設置為消息標記位,每次從核間寄存器中取出數據時先取得這4個bit位,其值及對應的消息格式如表2所示。當有進程向核間通信寄存器寫入數據后會觸發核間中斷,核間中斷處理程序會根據消息類型(即最后4bit位值)進行消息處理,程序中定義為:


圖2 共享內存模塊工作流程圖
2.3共享內存模塊
共享內存模塊是相對獨立的一個模塊。由hypervisor程序分配合適大小的獨立共享內存,在啟動和加載虛擬機時將共享內存起始地址和大小信息傳遞給加載的虛擬機并直接將地址空間映射到虛擬機可訪問的地址空間中,虛擬機擁有對共享內存的讀寫權利,而共享內存的管理則由共享內存模塊完成[3]。共享內存模塊工作大體流程圖如圖2所示。
為改善多核虛擬機系統中虛擬機間通信的性能,對類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為通信域。在接口內部也涉及到核間通信模塊和共享內存模塊,當發送方通過核間寄存器發送數據時,核間寄存器處理程序會把數據直接放在接收方的緩沖區中;當發送方通過共享內存發送數據時,該函數會從進程運行所在處理器核對應的共享內存中讀取數據放到緩沖區中。

圖3 2種MPI接口帶寬比較
采用一款MIPS64體系結構多核處理器作為試驗平臺,配置12個主頻為800MHz的CPU核,主頻為800MHz的DDR2內存4G,每個核配置了64bit的核間通信寄存器。在消息緩沖區大小不同的情況下,測量類MPI接口和MPICH2接口在試驗平臺上傳輸1G數據時的帶寬大小,試驗結果如圖3所示。從圖3可以看出,隨著消息緩沖區大小的增加,類MPI接口的帶寬比MPICH2接口的帶寬增大得更加顯著,說明類MPI接口可以有效改善通信帶寬。
由于多核虛擬機系統上運行更多網絡密集型和分布式應用程序,使得多核虛擬機系統對虛擬機間通信性能有著更高要求。針對上述情況,對基于核間寄存器的多核虛擬機系統中虛擬機間通信框架結構進行設計,并實現了類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年大學畢業,講師,現主要從事計算機應用方面的教學與研究工作。
[編輯] 李啟棟