一種虛擬機域間通信模式的動態透明切換方法【
技術領域:
】[0001]本發明涉及云計算、操作系統、網絡通信虛擬化領域中基于系統調用截獲的虛擬機域間通信模式的動態透明切換方法。【
背景技術:
】[0002]虛擬化技術已成為云計算環境IaaS(InfrastructureasaService)層的重要使能技術之一。它通過虛擬機監控器VMM(VirtualMachineMonitor)軟件對物理計算機的CPU、內存、I/O等設備進行虛擬化,在一臺物理計算機(簡稱物理機)上虛擬出多個虛擬機VM(VirtualMachine,也稱虛擬機域),每個VM都運行一個客戶操作系統(Guest0S,客戶機)。VMM與一個特權虛擬機域(DomO或Host0S,宿主機)協調,保證位于同一物理計算機上的VM之間的相互隔離,支持無需宕機的前提下將VM從一臺物理機在線迀移(LiveMigration)到另一臺物理機。虛擬化技術在VM功能和性能隔離、基于VM在線迀移的負載均衡和系統容錯、應用移植性、提高資源利用率、降低運維難度和成本等方面的優勢使其被廣泛應用于以Amazon為代表的大型數據中心和云計算環境的IaaS平臺中,其典型應用涵蓋高性能計算、大規模分布式計算、Web事務處理,等等,對于這類應用,網絡通信是其負載的重要組成部分。[0003]通常將位于同一物理機上的VM稱為共生(co-located)VM。導致VM間通信性能折損的一個重要原因在于基于VMM的VM間通信并不區分數據傳輸請求是否來自于共生VM,即并不判斷通信雙方是否具有共生關系。這就使得無論通信雙方VM是否位于同一物理機上,都將采用基于TCP/IP的虛擬網絡遠程通信模式,通信數據的發送和接收均需經過多層網絡協議棧,通信路徑比較長,且各VM與DomO/VMM之間的上下文切換比較頻繁,通信性能開銷較大。而共生VM間的通信已成為虛擬網絡通信負載中不可忽視的組成部分,對于位于同一物理機上的共生VM間通信而言,基于TCP/IP的遠程通信模式會產生不必要的性能損耗。因此,如何面向共生VM進行通信優化成為一個值得關注的問題。一類現有的方法是建立共生關系感知(Co-locationAware)的虛擬機域間通信優化機制,S卩通過判斷通信雙方VM是否在同一臺物理機上來區別處理:對于共生VM域間的通信,采用本地共享內存機制建立共享內存通道,以取代通信路徑較長的基于TCP/IP的通信路徑,從而降低通信開銷,該通信模式稱為本地模式;對于不在同一臺物理機上的非共生VM,仍采用基于TCP/IP的傳統方式進行通信,該通信模式稱為遠程模式。該方法支持面向共生VM的域間通信優化,可有效縮短基于TCP/IP的虛擬網絡通信路徑長度、并減少上下文切換次數,從而提高運行在VM中的以Web系統、高性能Grid應用、在線事務處理、分布和并行計算系統等為代表的網絡通信密集型應用的通信效率。[0004]VM在線迀移是虛擬化技術的重要特性,VM在線迀移是指在不中斷服務的前提下,將正在運行的VM從一臺物理機移植到另一臺物理機上,該特性能夠有效支持系統負載平衡、容錯恢復、降低能耗及提高可管理性,設計良好的共生關系感知的虛擬機域間通信優化機制在提高虛擬機域間通信效率的同時不應破壞該特性,這就為該類機制的構建帶來了一定難度,為了保持VM在線迀移特性,需支持虛擬機域間通信的本地模式和遠程模式之間的透明切換。如何在保證通信模式切換對用戶透明的前提下,支持VM在線迀移、共生VM動態發現和共生VM集合維護、以及虛擬機域間通信模式的切換,且以較小的性能開銷實現虛擬機域間通信模式切換,是本領域技術人員極為關注的技術問題。[0005]目前,已有的支持VM在線迀移的共生關系感知的虛擬機域間通信機制有IVC(Inter_VMCommunication)、XWAY、XenLoop和MMNet(Memory-MappedNetwork)。然而,IVC和XWAY采用預先設置的方式來靜態確定參與通信的各臺物理機上的共生VM集合,能夠支持共生VM之間本地通信模式與非共生VM之間遠程通信模式之間的自動切換,但由于VM在線迀移發生的時機并不總是預先確定的,這類方法不能支持兩種通信模式之間對用戶的透明切換。而XenLoop和MMNet均支持VM在線迀移、共生VM動態發現和共生VM集合維護、以及虛擬機域間通信模式的透明切換。但XenLoop和MMNet都是IP層之下完成網絡請求的截獲,由于其請求截獲機制在TCP/IP網絡協議棧中所處層次較低,與更高層次的截獲方法相比,數據傳輸需要經過更長的通信路徑,且需要在所經過的網絡協議棧中逐層進行數據封裝或解封,帶來的性能開銷較大。[0006]鑒于此,本發明提出一種新的支持VM在線迀移的共生關系感知且開銷更小的虛擬域間通信機制。【
發明內容】[0007]本發明要解決的技術問題是:針對目前Linux系統中共生關系感知的虛擬機域間通信模式切換方法的不足,即要么不能在支持在線迀移的同時保證用戶透明性、要么實現層次偏底層、通信效率較低,提出一種基于系統調用截獲的虛擬機域間通信模式的透明切換方法,該方法通過動態發現共生VM、以及截獲網絡請求相關的系統調用(系統調用是由操作系統實現提供的所有系統調用所構成的集合即程序接口或應用編程接口,是應用程序同系統之間的接口)的手段來實現虛擬機域間通信時本地模式與遠程模式之間的透明切換,使得用戶透明性和通信效率得以兼顧,同時,該方法還具有支持VM在線迀移、無需修改操作系統內核等特點。[0008]其基本思想是:為網絡通信相關的系統調用分別構造對應的自定義處理函數,將系統調用的原有缺省處理函數替換為自定義函數,自定義函數根據在截獲網絡通信相關系統調用請求時所獲取的通信雙方VM信息、利用已構造的共生VM動態發現和發布、共生VM集合維護機制來判定通信雙方VM是否是共生VM,若是共生VM,則采用基于共享內存的本地通信模式,否則,重定向到操作系統中原有的面向TCP/IP的缺省處理函數進行處理。[0009]本發明的技術方案是:在客戶機操作系統中構建域間通信優化內核模塊,在宿主機中構建共生VM動態發現與發布模塊,該模塊由共生VM動態發現和共生VM發布兩個子模塊組成。[0010]在描述本發明的具體思想之前,首先對本發明所用到的幾大重要數據結構及其操作進行說明。[0011]1.系統調用表(sys_call_table):Linux系統分為內核態和用戶態,用戶程序無法直接運行內核態的函數,必須借助系統調用實現,如建立網絡連接,發送網絡數據,接收網絡數據等。系統調用表是Linux系統內核中固有的數據結構,由系統調用號和處理函數地址組成,在用戶程序進行系統調用時,首先會傳入系統調用號和參數,系統再通過系統調用號在系統調用表中找到相應的處理函數地址,最后找到相應的處理函數對參數進行處理。本發明的技術方案針對系統調用表的操作主要有:[0012]a)更改系統調用表所在頁的讀寫屬性:為了安全起見,系統調用表的初識屬性是只讀,為了能夠替換處理函數地址,需要將系統調用表的屬性更改為可寫屬性。[0013]b)備份原處理函數地址:即將原處理函數地址值取出,賦給函數備份指針。[0014]c)替換處理函數地址:將系統調用表中的處理函數地址更改為自定義的處理函數地址。[0015]d)恢復系統調用原處理函數地址:將原處理函數備份指針重新寫到系統調用表相應位置。[0016]在本發明技術方案中,要截獲的系統調用是網絡請求相關系統調用,主要有:建立網絡連接,發送網絡數據,接收網絡數據,關閉網絡連接。[0017]2.宿主機共生VM列表:存放的是本物理機上存在共生關系的VM,每個列表項由〈DomID,IP>二元組組成,DomID是指客戶機的ID,IP是客戶機的IP地址,若系統中有n個存在共生關系的VM,則宿主機共生VM列表有n個列表項,第i項代表的是VMi。本發明的技術方案針對宿主機共生VM列表的操作主要有:[0018]a)初始化:僅從內存中申請一段空間,列表項數目為零。[0019]b)插入:當發現系統中有新的共生VM,則獲取它的DomID和IP,插入到宿主機共生VM列表中,宿主機共生VM列表項數目加一。[0020]C)刪除:當發現系統中有共生VM銷毀,或者停止使用域間通信優化功能,則將這一VM對應的列表項刪除,列表項數目減一。[0021]d)銷毀:將宿主機共生VM列表的內存空間釋放,返還給系統。[0022]3.客戶機共生VM列表:存放的是與客戶機存在共生關系的VM,每個列表項由〈DomID,IP>二元組和一個Hash表指針組成,二元組如上所述,Hash表指針指向一個本地通信連接Hash表。若系統中存在n個共生VM,則每個客戶機中的共生VM列表中有n-1項,第i項代表代表第i個共生VM,表項中的Hash表指針指向客戶機與VMi之間的本地通信連接Hash表。對于客戶機共生VM列表的操作,主要有:[0023]a)初始化:向系統申請一段內存空間,列表數目為0。[0024]b)插入:將列表中不存在的二元組〈DomID,IP>插入到客戶機共生VM列表中,并初始化一張本地通信連接Hash表,再將新插入的列表項中Hash表指針指向Hash表地址,最后客戶機共生VM列表項數目加1。[0025]c)刪除:找到要刪除的列表項,先將列表項中Hash表指針所指向的本地通信連接Hash表銷毀,再將列表項刪除,最后客戶機共生VM列表項數目減1。[0026]d)銷毀:先刪除所有的列表項,再將客戶機共生VM列表所占內存空間釋放。[0027]e)查找:傳入通信的ip地址,查找列表項中是該ip地址對應的項在哪,若找到,則將列表項位置返回,否則返回"-1",代表該ip地址代表的機器與本客戶機不存在共生關系。[0028]4.本地通信連接Hash表:Hash表中存放的每一項代表本VM與某共生VM之間的一組本地通信連接,若本VM與VMi(兩者為共生VM關系)存在n組本地通信連接,則客戶機共生VM列表第i項Hash表指針所指向的Hash表就存在n項。Hash表項以通信端口號為關鍵字做Hash運算并存放以下數據:通信端口號;發送緩沖區地址和大小、接收緩沖區地址和大小。本發明技術方案中,針對本地通信連接Hash表的操作主要有:[0029]a)初始化:為本地通信連接Hash表申請一段內存空間,返回值是這段內存空間的首地址。此時Hash表項數目為0。[0030]b)插入:當要建立一組本地通信連接的時候,會對本地通信連接Hash表進行插入操作。插入之前,應先建立本地通信連接,建立本地通信連接過程如下:本地通信連接發起者(某VM)首先向VMM申請數據發送緩沖區、數據接收緩沖區和事件緩沖區,再將所申請的這三個緩沖區的地址及通信端口號發送給本地通信連接響應者(另一VM),響應者新建Hash表項當前第1頁1 2 3 4 5