專利名稱:一種支持在線遷移的虛擬機間快速通信方法
技術領域:
本發(fā)明涉及操作系統(tǒng)領域中的虛擬機間通信方法,尤其是同一臺物理計算機上基 于共享內存的多個虛擬機間的通信方法。
背景技術:
隨著計算機和網絡技術的快速發(fā)展,用戶業(yè)務的種類持續(xù)增多、規(guī)模不斷增大,為 滿足用戶不斷增長的需求,通常用戶會購置更多的計算機來部署運行增加的業(yè)務;而與此 同時,多核處理器的出現使得計算機的處理能力快速提高,于是往往導致計算機利用率降 低、計算效能低下,且造成硬件資源和電能的浪費,出于管理和成本控制的考慮,需要減少 計算機的數量。另一方面,傳統(tǒng)的操作系統(tǒng)環(huán)境中,各組成之間耦合度較大,某個部件的失 效可能導致整個系統(tǒng)的故障或崩潰,需要有效隔離業(yè)務運行環(huán)境以提高失效范圍的可控 性,從而提高系統(tǒng)的安全性和可靠性。為了提高計算機系統(tǒng)的效能、安全和可靠性,出現了虛擬化方法,即通過虛擬機 監(jiān)控器 VMM (Virtual Machine Monitor)軟件對物理計算機的 CPU (Central Processing Unit,中央處理單元)、內存和其它硬件設備進行虛擬化,在一臺物理計算機上虛擬出多個 虛擬機VM(Virtual Machine),每個VM都運行一個客戶操作系統(tǒng)(Guest OS),也就是在一 臺物理計算機上運行多個客戶操作系統(tǒng),用于支持客戶操作系統(tǒng)運行的底層操作系統(tǒng)稱作 宿主操作系統(tǒng)(Host OS),VMM之上的各種操作系統(tǒng)通稱為域(Domain)。傳統(tǒng)的VMM,如Xen, 主要由中斷處理子模塊、CPU指令虛擬化子模塊、MMU虛擬化子模塊、事件注入子模塊、域間 共享內存子模塊、在線遷移(Live Migration)子模塊組成。早期的虛擬機方法主要應用于大型機和服務器領域,用于提高物理硬件利用率、 支持遺留系統(tǒng)等。近年來,隨著單機硬件性能的高速發(fā)展、對服務器整合、資源管理、降低能 耗、安全隔離和高可用需求的日益迫切,虛擬機方法進入了一個迅速發(fā)展的階段。使用虛擬 機技術帶來的一個顯著優(yōu)點就是可以通過VM的在線遷移來實現高效的負載均衡或容錯恢 復。在線遷移是指在不中斷服務的前提下,將正在運行的VM從一臺物理計算機移植到另一 臺物理計算機上。通過將VM從負載重的物理計算機在線遷移到負載輕的物理計算機,可實 現整個系統(tǒng)的負載均衡;通過將VM從出現故障的物理計算機在線遷移到正常運行的物理 計算機,無需中斷用戶通信,即可實現零宕機時間容錯恢復。傳統(tǒng)的VMM通過在線遷移子模 塊來支持VM的在線遷移。虛擬化技術在提高服務器資源整合能力、增強系統(tǒng)安全性和可靠性的同時,也帶 來了性能上的折損。對于運行在虛擬機中的諸如Web服務、高性能Grid應用、事務處理、分 布式圖形支持等網絡密集型應用程序而言,VM間的通信效率對于應用整體性能的提高至關 重要。因此,優(yōu)化VM間的通信效率十分必要,尤其是對于位于同一臺物理計算機上的不同 虛擬機間的通信,如果仍然采用跨物理計算機的虛擬機間通信方法,則數據傳輸路徑偏長, 不利于降低通信開銷。目前,位于同一臺物理計算機上不同虛擬機間的通信方法分為兩類,第一類方法為普通的網絡通信,它是面向TCP/IP網絡協(xié)議棧實現虛擬機間通信,其所有數據傳輸都經 過TCP/IP協(xié)議和網卡驅動程序進行處理,增加了報文傳輸開銷。隨著虛擬化技術的發(fā)展, 一臺物理主機上部署多個VM已成為普遍現象,若仍然通過TCP/IP協(xié)議進行同一物理計算 機上不同VM間的網絡通信,則性能損失較大。于是出現了第二類方法,該類方法針對通信 雙方位于同一臺物理計算機的特點,通過共享內存的方式實現VM之間的通信和信息交換。第二類基于共享內存的通信方法的代表性工作包括虛擬機通信接口套接字 VMCISocket(Virtual Machine Communication Interface Socket)、XenSocket、XWay、 IVC (Inter Virtual Machine Communication)、MNNet 和 XenLoop。不同于第一類虛擬機間 通信方法(第一類方法是將虛擬機VM_1中send_pr0cess進程的數據緩沖區(qū)通過VMM映射 到一塊物理內存,將發(fā)送的數據拷貝至該緩沖區(qū),然后將該物理內存中的數據拷貝到虛擬 機VM_2中recv_process進程映射的另一塊物理內存中,最后拷貝至recv_process的用戶 空間數據緩沖區(qū)中,這其中要進行VM與VMM之間的多次切換),數據首先被拷貝到VM_1和 VM_2之間建立的共享緩沖區(qū)中,接著VM_1通知VM_2有數據存放在共享內存中待讀取,VM_2 接到該通知后將數據從共享緩沖區(qū)中拷貝至VM_2的用戶空間,然后通知VM_1數據傳輸結 束,如果VM_1中發(fā)送進程由于共享緩沖區(qū)空間不足的原因處于睡眠狀態(tài),在它接收到該通 知后將被喚醒。與第一類方法相比,第二類方法減少了數據的拷貝次數以及VM與VMM之間 的切換次數,可有效減少VM間的通信開銷。按照實現層次、對應用編程是否透明、以及是否支持虛擬機的在線遷移,可分別對 第二類方法的上述代表工作進行分類 IP層之下、Socket和TCP/IP層、應用層三個實現層次MNet和XenLoop方法 在IP層以下實現,實現復雜度較大;IVC方法通過修改應用層的MPI庫實現,通用性較低; XenSocket和XWay方法則是在Socket、TCP/IP層實現。 應用編程的透明性應用編程透明使得程序開發(fā)和維護更為簡單,IVC、VMCI和 XenSocket方法引入了新的編程接口,對應用編程不透明;XWay、MNNet、XenLoop方法對應 用編程透明。 虛擬機在線遷移的支持是否支持VM運行時的在線遷移是衡量虛擬機間快速 通信機制的一個重要指標,VMCI、XenS0Cket、XWay和MNNet方法不支持虛擬機的在線遷移, IVC和XenLoop方法支持虛擬機的在線遷移。XWay方法是在IP之上的Socket與TCP/IP層實現且對應用編程透明,但該方法不 支持VM的在線遷移。根據目前公布的資料來看,該方法采用以下步驟完成同一物理計算機 上不同VM間的數據通信第一步,在客戶操作系統(tǒng)中構建VM間基于共享內存的通信支持機制。為了支持基 于共享內存的VM間通信,VM中的客戶操作系統(tǒng)不僅要提供TCP Socket協(xié)議,還要提供采 用共享內存的XWay通信協(xié)議。而傳統(tǒng)的Socket應用不支持這種專有協(xié)議,為了達到對應 用編程透明的目的,接收到Socket消息時需要能夠在TCP Socket協(xié)議和XWay協(xié)議之間切 換,因此首先構建一個XWay切換組件,XWay切換組件通過修改操作系統(tǒng)內核網絡協(xié)議棧、 并打操作系統(tǒng)內核補丁的方式實現。當有相關消息到達時,XWay切換組件根據Socket調 用信息判斷目標VM是在另一臺物理計算機上還是在本地物理計算機上,對于前者仍然使 用傳統(tǒng)的TCP Socket協(xié)議,對于第二種情況則切換到XWay協(xié)議進行處理。XWay協(xié)議的處理由XWay協(xié)議組件完成,它接收從XWay切換組件發(fā)出的數據傳輸請求,并建立源VM和目 標VM之間的基于共享內存的傳輸通道。XWay設備驅動組件控制和管理基于共享內存的傳 輸通道。XWay切換組件、XWay協(xié)議組件和XWay設備驅動組件三者自上而下共同完成客戶 操作系統(tǒng)中基于共享內存的通信支持的核心功能。第二步,建立通信源VM和目標VM之間的連接。當XWay切換組件接收到Socket 的連接請求時,首先建立一個TCP通道來傳輸連接建立過程中的控制信息,一旦連接建立, 該通道將被銷毀。接著XWay切換組件判斷源VM和目標VM是否在一臺物理計算機上,如果 是,則向XWay設備驅動組件發(fā)送請求,后者接收到請求后,將建立基于XWay協(xié)議的一組傳 輸通道。其中,每個傳輸通道由兩個環(huán)形隊列和一個事件通道組成,兩個環(huán)形隊列分別用于 發(fā)送數據和接收數據,事件通道用于在源VM和目標VM之間傳遞“有數據放入發(fā)送隊列”、 “接收者讀取接收隊列數據”等事件。第三步,源VM和目標VM之間的數據發(fā)送和接收。具體過程如下3. 1數據發(fā)送。當XWay切換組件接收到發(fā)送請求時,它將該請求轉發(fā)到XWay協(xié)議 組件,后者通過調用XWay設備驅動組件向發(fā)送隊列中寫數據。當發(fā)送隊列中空間不足時, 在非阻塞I/O模式下返回到XWay設備驅動中,在阻塞I/O模式下XWay設備驅動通知“發(fā)送 隊列空間不足”消息給XWay協(xié)議組件,后者負責查看發(fā)送隊列狀態(tài)變化,當發(fā)送隊列空間滿 足要求時,XWay設備驅動通知XWay協(xié)議層重發(fā)數據。3. 2數據接收。當XWay切換組件接收到數據接收請求時,將該請求轉發(fā)到XWay協(xié) 議組件,后者通過XWay設備驅動組件試圖從相應的接收隊列中讀取數據。如果接收隊列中 有數據,XWay設備驅動和XWay協(xié)議組件立即返回其中可用數據,即使實際數據量小于請求 接收的數據量。如果XWay設備驅動組件報告接收隊列空,且當前為阻塞I/O模式,XWay協(xié) 議組件開始等待,直到有數據存入接收隊列。這時XWay設備驅動組件發(fā)送“接收隊列非空” 消息給XWay協(xié)議組件,后者被喚醒,通過XWay設備驅動組件喚醒。如果XWay設備驅動組 件報告接收隊列空,且當前為非阻塞I/O模式,XWay協(xié)議組件則不做處理直接返回。第四步,關閉通信源VM和目標VM之間的連接。當XWay切換組件收到關閉連接請 求后,首先除去接收隊列到內核地址空間的映射,然后釋放發(fā)送隊列所占空間,最后釋放事 件通道。這種基于共享內存的通信方法的主要問題是1)不支持VM的在線遷移使用虛擬機技術帶來的一個顯著優(yōu)點就是可以通過VM在不同物理計算機之上的 遷移來達到負載均衡或容錯恢復等目的,是否支持VM運行時的在線遷移成為衡量虛擬機 間快速通信機制的一個重要指標。XWay通信方法中未提供遷移檢測、遷移后數據通道重建 及其它遷移相關的輔助處理方法,從而當正在進行通信的VM發(fā)生在線遷移時,將出現通信 失效。2)需要修改客戶操作系統(tǒng)內核代碼為了支持同一物理計算機上VM之間的快速通信,該方法必須實現一個可加載的 操作系統(tǒng)內核模塊,用于實現XWay切換組件、XWay協(xié)議組件和XWay設備驅動組件;操作系 統(tǒng)網絡協(xié)議棧的內核補丁,用于修改部分內核代碼,從而支持TCP協(xié)議和XWay協(xié)議之間的 切換;一個核外用戶態(tài)的守護程序,用于進行XWay通信管理和控制。這不但修改了操作系
10統(tǒng)內核已有組成代碼,而且實現了一個新的內核模塊和一個用戶態(tài)的守護程序,工作量大 且需要修改客戶操作系統(tǒng)內核代碼。綜上所述,支持同一物理計算機上VM間通信的兩類方法中,第一類方法數據拷貝 次數多,VMM和客戶操作系統(tǒng)之間的切換較為頻繁,因此通信開銷較大。而第二類方法的代 表性方法不能同時具備以下特征在Socket與TCP/IP層實現、對應用編程透明、支持虛擬 機在線遷移。如何提供一種在Socket與TCP/IP層實現、對應用編程透明、支持虛擬機在線遷移 的虛擬機間快速通信方法是本領域急需解決的技術問題。
發(fā)明內容
本發(fā)明要解決的技術問題是針對第二類基于共享內存的通信方法中XWay方法 不支持VM的在線遷移以及需要修改客戶操作系統(tǒng)內核代碼等問題,提供一種在Socket與 TCP/IP層實現、對應用編程透明、支持VM在線遷移且無需為客戶操作系統(tǒng)內核打補丁的同 一物理計算機上VM間的快速通信方法。本發(fā)明的技術方案是第一步,構造客戶操作系統(tǒng)中的共享內存通信支持模塊,擴展VMM功能,在已有計 算機硬件的基礎上,由擴展了的VMM和多個包括通信加速支持的VM組成一個虛擬機系統(tǒng)。1. 1在客戶操作系統(tǒng)中構建支持VM遷移的基于共享內存機制的通信加速內核模 塊。方法是不修改已有操作系統(tǒng)內核代碼,遵循標準的操作系統(tǒng)內核模塊開發(fā)接口、在 Socket通信層添加一個自包含可加載的通信加速內核模塊,并在該模塊內部構造并添加初 始化、系統(tǒng)調用分析器、連接管控、通告處理、數據傳輸管理、VM遷移支持共六個子模塊。具 體方法如下1.1.1構造并添加初始化子模塊。初始化子模塊在VM成功啟動且加載客戶操作 系統(tǒng)的通信加速內核模塊之后被觸發(fā),根據下述實現流程和與其它子模塊之間的接口來構 造并添加該子模塊根據當前VM的組ID配置,首先調用VMM的虛擬機組管理子模塊(虛擬 機組管理子模塊,參見第1. 2. 1步)來創(chuàng)建組或在相應的組中注冊該VM ;接著請求操作系 統(tǒng)保留連續(xù)的虛地址空間,并向VMM的域間共享內存子模塊發(fā)出請求,由其建立共享內存 緩沖區(qū),用于存放相互通信的VM的網絡連接以及將要被收發(fā)的數據等信息;然后調用VMM 的在線遷移子模塊以生成VM的當前位置號(虛擬機系統(tǒng)中每個VM唯一的位置標志信息) 并更新VMM的當前位置號表(VMM的在線遷移子模塊在共享內存中為其所在物理計算機上 的所有VM維護一個當前位置號表,每一項為VM的ID及其對應的當前位置號)。調用VM遷 移支持子模塊(VM遷移支持子模塊,參見第1. 1.6步),通知VM遷移支持子模塊獲取并維護 該VM的當前位置號的一個拷貝;當發(fā)生系統(tǒng)調用時轉到系統(tǒng)調用分析器子模塊(系統(tǒng)調用 分析器子模塊,參見第1. 1. 2步)進行對應用透明的通信加速。1. 1. 2構造并添加系統(tǒng)調用分析器子模塊。根據下述實現流程和與其它子模塊之 間的接口構造并添加該子模塊截獲來自網絡應用的系統(tǒng)調用請求,首先過濾掉與網絡操 作無關的系統(tǒng)調用,對于其它系統(tǒng)調用,如果是不同物理計算機上的VM間通信,則仍采用 面向TCP/IP網絡協(xié)議的傳統(tǒng)機制處理,如果是位于同一物理計算機上的VM間的通信,則調 用連接管控子模塊(連接管控子模塊,參見第1. 1. 3步)或數據傳輸管理子模塊(數據傳輸管理子模塊,參見第1. 1. 5步)進行創(chuàng)建或關閉連接、數據傳輸等操作。1. 1. 3構造并添加連接管控子模塊。連接管控子模塊負責網絡連接信息的維護和 管理,為網絡連接信息構造連接控制塊數據結構,該結構包含以下信息通信的VM雙方的 IP地址和端口號;I/O模式標志位(阻塞式或非阻塞式);一個發(fā)送緩沖區(qū)和一個接收緩 沖區(qū)(發(fā)送緩沖區(qū)和接收緩沖區(qū)對應不同的物理內存,本地接收緩沖區(qū)和遠地的發(fā)送緩沖 區(qū)共享同一片物理內存);等待發(fā)送的睡眠VM隊列、等待接收的睡眠VM隊列。在構造上述 數據結構之后,將所有連接控制塊組織成連接控制塊表,表中每一項為一個網絡連接的ID 號,以及該ID對應的連接控制塊。然后按照如下流程和與其它子模塊之間的接口構造并添 加連接管控子模塊在建立連接、關閉連接或進行數據收發(fā)時,被系統(tǒng)調用分析器子模塊、 數據傳輸子模塊(數據傳輸子模塊,參見第1. 1. 5步)或VM遷移支持子模塊(VM遷移支持 子模塊,參見第1. 1. 6步)調用,用于訪問VMM域間共享內存子模塊創(chuàng)建的共享內存,從而 創(chuàng)建、注冊、讀取、修改或回收連接控制塊,維持基于共享內存的通信連接。1. 1. 4構造并添加通告處理子模塊。按照如下流程和與其它子模塊之間的接口構 造并添加通告處理子模塊接收VMM通告管理子模塊(通告管理子模塊,參見第1. 2. 2步) 和事件注入子模塊轉發(fā)的與當前事件對應的中斷,讀取事件緩沖區(qū),獲取所需事件,事件類 型包括喚醒目標VM接收數據、喚醒源VM發(fā)送數據、網絡連接已關閉、數據緩沖區(qū)可被釋放 四種;根據事件類型喚醒源VM發(fā)送或目標VM接收數據、或通知通信另一方VM網絡連接已 關閉、數據緩沖區(qū)可被釋放。1. 1. 5構造并添加數據傳輸管理子模塊。數據傳輸管理子模塊用于處理數據發(fā)送 或接收請求,這些請求有兩個來源系統(tǒng)調用分析器子模塊和VM遷移支持子模塊(VM遷移 支持子模塊,參見第1. 1. 6步),其中VM遷移支持子模塊的請求是在發(fā)生在線遷移時,對已 發(fā)送但尚未接收到的數據的處理請求。按照如下流程和與其它子模塊之間的接口構造并添 加數據傳輸管理子模塊首先調用VM遷移支持子模塊判斷是否發(fā)生了在線遷移,若發(fā)生了 遷移,則可能出現數據丟失情況,需重建連接或者重傳數據,若未發(fā)生遷移,則向連接管控 子模塊發(fā)請求獲得連接控制塊,從而得到共享緩沖區(qū)的位置信息,接著通過該共享緩沖區(qū) 發(fā)送或接收數據。1. 1. 6構造并添加VM遷移支持子模塊。VM遷移支持子模塊被連接管控子模塊、數 據傳輸管理子模塊所調用,用以檢測是否發(fā)生了遷移并進行處理。按照如下流程和與其它 子模塊之間的接口構造并添加VM遷移支持子模塊在進行連接關閉、數據發(fā)送/接收等操 作時,判斷VM遷移支持子模塊維護的當前位置號拷貝與VMM在線遷移子模塊(在線遷移子 模塊,參見第1.2.3步)中當前位置號表中的當前位置號是否相同,如果不同,則表明發(fā)生 了遷移,這時首先讀取VMM在線遷移子模塊維護的當前位置號表中的當前位置號,并將其 更新到該VM的VM遷移支持子模塊維護的拷貝中,然后根據遷移的具體情況,重新建立TCP 連接或者基于共享內存的連接,并調用連接管控子模塊和數據傳輸管理子模塊對已經發(fā)送 但尚未接收的數據進行處理。1. 2擴展VMM功能,使VMM具有通信加速支持能力。方法是保留VMM已有的中斷處 理子模塊、CPU指令虛擬化子模塊、MMU虛擬化子模塊、事件注入子模塊、域間共享內存子模 塊和在線遷移子模塊,添加虛擬機組管理和通告管理兩個子模塊,并修改在線遷移子模塊, 具體方法如下
12\1.2.1構造并添加虛擬機組管理子模塊。虛擬機組管理子模塊將所有VM進行全 局分組管理,當通信雙方VM在同一虛擬機組時,采用基于共享內存的加速方法來加速通 信。按照如下流程和與其它子模塊之間的接口構造并添加虛擬機組管理子模塊虛擬機組 管理子模塊在啟動VM時根據VM的組信息配置來設置VM的組ID,具有相同組ID的VM構成 一個虛擬機組;在VM銷毀時虛擬機組管理子模塊將該VM從其虛擬組中刪除,判斷組內VM 成員數是否為0,若是0,則刪除該虛擬機組;虛擬機組管理子模塊在VM啟動或關閉時調用 通告管理子模塊為虛擬機組創(chuàng)建或回收事件緩沖區(qū)。1.2.2構造并添加通告管理子模塊。通告管理子模塊在VM啟動或關閉時被虛擬 機組管理子模塊調用為虛擬機組創(chuàng)建或回收事件緩沖區(qū),此時通告管理子模塊調用VMM的 域間共享內存子模塊完成事件緩沖區(qū)的內存映射。另外,通告管理子模塊還登記和緩存來 自VM的請求對應的事件,并通過通告處理子模塊向目標VM發(fā)送事件,發(fā)送事件的步驟是 根據當前VM的網絡連接信息,定位通信另一方VM對應的事件緩沖區(qū)位置;將當前事件類型 和參數登記到該事件緩沖區(qū)中;向通信另一方VM注入當前事件類型對應的中斷;中斷處理 完畢后清除事件緩沖區(qū)中的該事件。1.2.3修改在線遷移子模塊。保留VMM在線遷移子模塊的在線遷移功能,添加遷 移輔助處理功能。添加的遷移輔助處理功能與VMM在線遷移子模塊的原有在線遷移功能以 及VM的通信加速內核模塊之間的接口為在操作系統(tǒng)加載通信加速內核模塊時遷移輔助 處理功能被初始化子模塊調用;在接收到外部在線遷移命令并通過VMM在線遷移子模塊的 原有在線遷移功能完成VM的遷移后,遷移輔助處理功能被激活。遷移輔助處理的流程及其 與其它子模塊的接口具體如下在通信加速內核模塊被加載時,添加的遷移輔助處理功能 被通信加速內核模塊的初始化子模塊激活,生成VM的當前位置號,并在當前VMM的當前位 置號表中加入該VM的ID和當前位置號,調用通信加速內核模塊的VM遷移支持子模塊,使 后者獲取該VM當前位置號的一個拷貝,用于在數據傳輸和連接關閉時判斷VM是否發(fā)生了 遷移;在接收到外部在線遷移命令并通過原有在線遷移功能完成VM的遷移后,在線遷移子 模塊中添加的遷移輔助處理功能將當前VM遷移前所在物理計算機上的源VMM中保存的連 接控制塊、已發(fā)送和已接收字節(jié)數同步到遷移后的目標VMM中,然后通知目標VMM的在線遷 移子模塊生成被遷移VM的當前位置號,并更新當前位置號表中的信息。第二步,采用第一步構建的虛擬機系統(tǒng)對VM間通信進行加速,具體步驟為
2. 1 VMM啟動VM,VMM的虛擬機組管理子模塊對虛擬機系統(tǒng)中需要進行通信加速 的VM進行組管理。方法為2. 1. 1根據VM配置文件中的屬性值設置VM的IP為addr,其所屬組ID為gid (有 通信加速需求的VM被分配相同的組ID),組密鑰為key ;2. 1. 2判斷是否是首次在本VMM之上啟動虛擬機組ID為gid的VM 2. 1. 2. 1若是,則虛擬機組管理子模塊創(chuàng)建編號為gid的虛擬機組,其訪問密鑰 為 key ;2. 1. 2. 2若不是,則獲得gid對應的虛擬機組并判斷提供的key與虛擬機組的key 是否一致如果一致,則創(chuàng)建編號為gid的虛擬機組,其訪問密鑰為key,在虛擬機組的VM 鏈表中注冊本VM,向VMM中的域間共享內存子模塊發(fā)出請求,由后者為本VM創(chuàng)建事件緩沖 區(qū);如果不一致,則報“VM啟動失敗”信息。
2. 2通信加速內核模塊的初始化子模塊構建VM間通信加速和系統(tǒng)調用分析所需 的軟件環(huán)境,方法為2. 2. 1初始化子模塊請求操作系統(tǒng)保留連續(xù)的虛地址空間,并向VMM的域間共享 內存子模塊發(fā)出請求,由VMM建立共享內存緩沖區(qū),用于存放相互通信的VM的連接控制塊 信息、待傳輸的數據和待處理的事件。2. 2. 2初始化子模塊獲取當前VM的IP地址及其所在物理計算機的MAC (Media AccessControl)地址,調用VMM的在線遷移子模塊,通過函數轉換,生成該虛擬機系統(tǒng)中每 個VM唯一的位置標志信息——當前位置號。VMM的在線遷移子模塊在共享緩沖區(qū)中為所 有VM維護一個當前位置號表,存儲虛擬機系統(tǒng)中每個VM的ID及該VM的最新當前位置號。 在生成當前位置號后,初始化子模塊調用在線遷移子模塊將該VM的ID及其當前位置號加 入表中,并調用通信加速內核模塊的VM遷移支持子模塊,使得后者獲取并維護該VM的當前 位置號的一個拷貝。2. 3 VM客戶操作系統(tǒng)中的通信加速內核模塊接收應用程序或外部命令中的系統(tǒng) 調用,轉發(fā)給系統(tǒng)調用分析器子模塊,系統(tǒng)調用分析器子模塊首先旁路掉與網絡操作無關 的系統(tǒng)調用(按操作系統(tǒng)常規(guī)流程處理),然后選擇與網絡操作有關的系統(tǒng)調用分類進行 處理,完成同一物理計算機上的VM間的基于共享內存的快速通信。方法是2. 3. 1若當前系統(tǒng)調用的類別是建立網絡連接,則2.3. 1. 1連接管控子模塊首先通過VMM獲得當前VM的組ID及其所在物理計算機 的MAC地址,接著判斷通信雙方VM的虛擬組ID是否相同,如果通信雙方虛擬機組ID不同, 則無需進行通信加速,按操作系統(tǒng)常規(guī)的建立TCP網絡連接的流程處理;如果通信雙方虛 擬機組ID相同,則判斷通信雙方是否位于同一臺物理計算機上,按以下方法處理2. 3. 1. 1. 1如果通信雙方不位于同一臺物理計算機,則按操作系統(tǒng)常規(guī)的建立 TCP網絡連接的流程處理;2. 3. 1. 1. 2如果通信雙方位于同一臺物理計算機,且該系統(tǒng)調用對應的網絡連接 的連接控制塊尚未被添加到連接管控子模塊中的連接控制塊表中,即通信雙方位于同一臺 物理計算機且該系統(tǒng)調用對應的網絡連接尚未被注冊到連接管控子模塊中,則調用VMM的 域間共享內存子模塊,獲取源VM和目標VM的數據緩沖區(qū),初始化已發(fā)送和已接收的字節(jié)數 為0,在第2. 2. 1步中VMM建立的共享內存緩沖區(qū)中創(chuàng)建連接控制塊,設置連接控制塊的初 始值,分配用于數據發(fā)送或接收的共享緩沖區(qū),最后在連接管控子模塊中注冊該連接,即將 該連接對應的連接控制塊添加到連接控制塊表中。2. 3. 2若當前系統(tǒng)調用是數據發(fā)送操作,則2. 3. 2. 1通信加速內核模塊的數據傳輸管理子模塊調用VM遷移支持子模塊,判 斷其維護的該VM當前位置號拷貝與VMM當前位置號表中的對應當前位置號是否一致。如 果一致,表明通信雙方VM未發(fā)生遷移,轉第2. 3. 2. 2步進行基于共享內存的快速數據發(fā)送。 如果不一致,表明在進行該發(fā)送操作前該VM發(fā)生了遷移,進行遷移輔助處理VM遷移支持 子模塊讀取VMM的在線遷移子模塊維護的當前位置號表中的當前位置號,并將其更新到自 身維護的當前位置號拷貝中;為了對已經發(fā)送但尚未被接收到的數據進行處理,VM遷移支 持子模塊查詢連接管控子模塊中是否注冊了該連接對應的連接控制塊2.3.2. 1. 1如果注冊了,則表明遷移前通信雙方的VM位于同一臺物理計算機,采用的是基于共享內存的快速通信方法。讀取VMM中的已發(fā)送和已接收的字節(jié)數,若前者大 于后者,則表明第2. 3. 1. 1. 2步所分配的數據緩沖區(qū)中仍有數據未被目標VM所接收,數據 傳輸管理子模塊等待直到目標VM的接收緩沖區(qū)為空,并更新VMM中已接收的字節(jié)數,否則 表明數據均被接收。由于遷移后通信雙方不在同一臺物理計算機上,因此回收當前連接控 制塊和數據緩沖區(qū),將數據發(fā)送從基于共享內存的方式轉為基于TCP協(xié)議的方式,按操作 系統(tǒng)常規(guī)的基于TCP連接的數據發(fā)送流程處理。2.3.2. 1.2如果未注冊,則表明遷移前通信雙方的VM不在同一臺物理計算機上, 數據傳輸管理子模塊等待直到網絡上的數據被接收完畢。然后判斷遷移后通信雙方是否 在同一臺物理計算機上,若不是,則仍然采用基于TCP協(xié)議的方式發(fā)送數據,按操作系統(tǒng)常 規(guī)的基于TCP連接的數據發(fā)送流程處理;若是,則遷移后通信雙方在同一臺物理計算機上。 此時,判斷發(fā)送數據的當前VM的組ID與目標VM的組ID是否相同如果相同,則表明遷移 后源VM和目標VM位于同一物理計算機上且應采用共享內存方式對其通信進行加速,需要 建立基于共享內存的連接,于是將當前系統(tǒng)調用設置為該數據發(fā)送操作,以便在重建連接 后繼續(xù)本次數據發(fā)送,然后轉第2. 3. 1. 1步執(zhí)行;若不相同,則無需用共享內存方式加速通 信,仍然采用基于TCP協(xié)議的方式,按照操作系統(tǒng)常規(guī)流程基于TCP連接來發(fā)送數據。2. 3. 2. 2通信加速內核模塊的數據傳輸管理子模塊進行基于共享內存的快速數 據發(fā)送。數據傳輸管理子模塊首先讀取連接控制塊表,判斷是否存在當前發(fā)送操作對應的 連接,若不存在,則表明通信雙方VM不在同一臺物理計算機上,按操作系統(tǒng)常規(guī)流程基于 TCP連接來發(fā)送數據,否則判斷通信雙方VM的虛擬組ID相同,如果不相同,則按操作系統(tǒng)常 規(guī)流程基于TCP連接來發(fā)送數據,否則按照共享內存的方式進行快速的發(fā)送數據。設請求 發(fā)送的數據長度為m,連接控制塊中描述的發(fā)送緩沖區(qū)長度為n,方法是若m不小于n,則 向發(fā)送緩沖區(qū)傳輸n個字節(jié),并為已發(fā)送字節(jié)數加上n,設置請求發(fā)送的數據長度m = m-n ; 否則向發(fā)送緩沖區(qū)傳輸m個字節(jié),已發(fā)送字節(jié)數加m,請求發(fā)送的數據長度m設為0。如果 本次I/O為阻塞式且m>0,將本發(fā)送任務添加到連接控制塊的等待發(fā)送的睡眠VM隊列,調 用操作系統(tǒng)功能進行睡眠,直至目標VM通過通信加速內核模塊的通告處理子模塊傳遞接 收數據事件喚醒本任務時轉至第2. 3. 2步,否則若m > 0,直接轉第2. 3. 2步。2. 3. 3若當前系統(tǒng)調用是數據接收操作,則2. 3. 3. 1通信加速內核模塊的數據傳輸管理子模塊調用VM遷移支持子模塊,判 斷其維護的該VM當前位置號拷貝與VMM當前位置號表中的對應值是否一致。如果一致,表 明通信雙方VM未發(fā)生遷移,直接轉第2. 3. 3. 2步進行基于共享內存的快速數據接收。如果 不一致,表明在進行此接收操作前該VM發(fā)生了遷移,進行遷移輔助處理首先讀取VMM的在 線遷移子模塊維護的當前位置號表中的當前位置號,并將其更新到該VM的VM遷移支持子 模塊維護的拷貝中;為了對已經發(fā)送但尚未被接收到的數據進行處理,查詢連接管控子模 塊中是否注冊了該連接對應的連接控制塊2. 3. 3. 1. 1如果存在,則表明遷移前通信雙方的VM位于同一臺物理計算機上,采 用的是基于共享內存的快速通信方法。讀取VMM中的已發(fā)送和已接收的字節(jié)數,若前者大 于后者,則表明第2. 3. 1. 1.2步所分配的數據緩沖區(qū)中仍有數據未被目標VM所接收。由于 遷移后通信雙方不在同一臺物理計算機上,則當仍有數據未被接收時,首先請數據發(fā)送方 將用于發(fā)送的數據緩沖區(qū)中的數據重發(fā)一遍,接收完網絡上傳輸的剩余數據后,回收當前
15連接控制塊和數據緩沖區(qū),將數據發(fā)送從基于共享內存的方式轉為基于TCP協(xié)議的方式, 按操作系統(tǒng)常規(guī)流程基于TCP連接來接收數據。2. 3. 3. 1. 2如果不存在,則表明遷移前通信雙方的VM不在同一臺物理計算機上, 采用的是基于TCP的通信方式,數據傳輸管理子模塊等待目標VM繼續(xù)接收數據直到網絡上 的數據被接收完畢。然后判斷遷移后通信雙方是否在同一臺物理計算機上,若不是,則仍然 采用基于TCP協(xié)議的方式發(fā)送數據,按操作系統(tǒng)常規(guī)流程基于TCP連接來接收數據;若是, 則遷移后通信雙方在同一臺物理計算機上。此時,判斷接收數據的當前VM的組ID與源VM 的組ID是否相同如果相同,則表明遷移后源VM和目標VM位于同一物理計算機上且應采 用共享內存方式對其通信進行加速,需要建立基于共享內存的連接,于是將當前系統(tǒng)調用 設置為該數據接收操作,以便在重建連接后繼續(xù)本次數據接收,然后轉第2. 3. 1. 1步;若不 相同,則無需用共享內存方式加速通信,仍然采用基于TCP協(xié)議的方式,按照操作系統(tǒng)常規(guī) 流程基于TCP連接來接收數據。2. 3. 3. 2通信加速內核模塊的數據傳輸管理子模塊進行基于共享內存的快速數 據接收。通信加速內核模塊的數據傳輸管理子模塊首先讀取連接管控子模塊維護和管理的 連接控制塊表,判斷是否存在當前接收操作對應的連接,若不存在,則表明通信雙方VM不 在同一臺物理計算機上,轉操作系統(tǒng)常規(guī)流程基于TCP連接來接收數據,否則判斷通信雙 方VM的虛擬組ID相同,如果不相同,則轉操作系統(tǒng)常規(guī)流程基于TCP連接來接收數據,否 則按照共享內存的方式接收數據如果接收緩沖區(qū)不為空,則目標VM接收其中的數據,并 將已接收數據字節(jié)數增加相應的值。若接收操作完畢,則數據接收流程結束,否則按以下方 法處理2. 3. 3. 2. 1當本次I/O為非阻塞式時,轉第2. 3. 3步;2. 3. 3. 2. 2當本次I/O為阻塞式時,則將本接收任務添加到連接控制塊的等待接 收的睡眠VM隊列,調用操作系統(tǒng)功能進行睡眠,直至源VM通過通信加速內核模塊的通告處 理子模塊傳遞發(fā)送數據事件喚醒本任務,轉第2. 3. 3步。2. 3. 4若當前系統(tǒng)調用是關閉網絡連接,則2. 3. 4. 1通信加速內核模塊的連接管控子模塊調用VM遷移支持子模塊判斷其維 護的該VM當前位置號拷貝與VMM當前位置號表中的對應值是否一致。如果一致,表明通信 雙方VM未發(fā)生遷移,直接轉第2. 3. 4. 2步關閉連接。如果不一致,表明在即將關閉網絡連 接前VM發(fā)生了遷移,進行遷移輔助處理首先讀取VMM的在線遷移子模塊維護的當前位置 號表中的當前位置號,并將其更新到該VM的VM遷移支持子模塊維護的拷貝中;為了對已經 發(fā)送但尚未被接收到的數據進行處理,查詢連接管控子模塊中是否注冊了該連接對應的連 接控制塊2.3.4. 1. 1如果注冊了,則表明遷移前通信雙方的VM位于同一臺物理計算機上, 采用的是基于共享內存的快速通信方法。讀取VMM中的已發(fā)送和已接收的字節(jié)數,若前者 大于后者,則表明仍有數據未被接收。當仍有數據未被接收時,由于遷移后通信雙方VM不 在一臺物理計算機上,若當前VM是源VM,則等待直到目標VM的接收緩沖區(qū)為空,若當前VM 是目標VM,則請數據發(fā)送方將用于發(fā)送的數據緩沖區(qū)中的數據重發(fā)一遍,并接收網絡上傳 輸的重發(fā)數據。2.3.4. 1.2如果未注冊,則表明遷移前通信雙方的VM不在同一臺物理計算機上,采用的是基于TCP的通信方式。則判斷當前VM是源VM還是目標VM,如果當前VM為源VM, 則等待直至網上傳輸的數據被接收完畢;如果當前VM為目標VM,則讀取網絡上傳輸的剩余 數據。2. 3. 4. 2通信加速內核模塊的數據傳輸管理子模塊讀取連接管控子模塊維護和 管理的連接控制塊表,判斷是否存在當前操作對應的連接,若不存在,則表明通信雙方VM 不在同一臺物理計算機上,轉操作系統(tǒng)常規(guī)流程關閉TCP連接,否則判斷通信的另一方VM 是否在睡眠,若其正在睡眠,則請求VMM的通告管理子模塊通過事件緩沖區(qū)向對方發(fā)送事 件,用于通知后者網絡連接已經斷開且可以釋放數據緩沖區(qū),通告管理子模塊通過VMM的 事件注入子模塊向VM注入當前事件對應的中斷,VM中的通信加速內核模塊的通告處理子 模塊接收中斷。2. 3. 4. 3調用VMM的域間共享內存子模塊以釋放雙方的數據緩沖區(qū),判斷對方是 否已經關閉連接,如果已經關閉,則通過連接管控子模塊回收當前連接控制塊。2. 4 VMM關閉IP為addr、所屬組ID為gid、組密鑰為key的VM,VMM的虛擬機組 管理子模塊從組中刪除該VM。方法為2. 4. 1虛擬機組管理子模塊獲得gid對應的虛擬機組;2. 4. 2判斷提供的key與虛擬機組的key是否一致,如果不一致,則報“權限不夠, VM刪除失敗”信息,轉至操作系統(tǒng)常規(guī)流程;2. 4. 3調用通告管理子模塊處理當前VM的事件緩沖區(qū)中事件,當事件緩沖區(qū)為 空時,調用域間共享內存子模塊釋放事件緩沖區(qū)所占內存;2. 4. 4調用VMM進行常規(guī)的VM刪除流程2. 4. 4. 1如果刪除失敗,則報“VM刪除失敗”,轉至操作系統(tǒng)常規(guī)流程。2. 4. 4. 2如果刪除成功,則將當前VM從本虛擬機組信息中刪除,并報告“VM刪除 成功” ;VMM判斷當前虛擬機組是否為空,如果為空,則釋放本虛擬機組連接控制塊表所占用 的內存空間,并刪除組ID為gid的虛擬機組,報告“組ID為gid的虛擬機組已被刪除”。采用本發(fā)明能夠達到如下的技術效果1.采用本發(fā)明能夠極大地加速同一臺物理計算機上VM間的通信效率。普通的基 于網卡的通信方法對于同一臺物理計算機上VM間的通信而言,VMM和客戶操作系統(tǒng)之間的 切換次數以及數據拷貝次數比較多,性能損失較大。而本發(fā)明采用基于共享內存的方法,通 信雙方的VM共享位于同一臺物理計算機上的基于共享內存的數據緩沖區(qū),通過共享內存 的方式進行數據傳輸,VM與客戶操作系統(tǒng)之間的切換較少,且數據拷貝次數減少,能有效提 高通信效率。2.采用本發(fā)明能夠保證VM在線遷移時通信的正確性。首先,在發(fā)生遷移時支持連 接控制塊、當前位置號、已發(fā)送和已接收字節(jié)數的同步,為遷移檢測和在線數據收發(fā)和連接 重建提供了必要信息;第二,在VM遷移后,可通過通信加速內核模塊中的VM遷移支持子模 塊檢測到是否發(fā)生了遷移并根據實際情況進行處理;第三,有防止數據丟失機制,避免在共 享內存的加速I/O方式和TCP常規(guī)I/O方式間轉換時丟失正在傳輸的數據。3.本發(fā)明對用戶和編程者透明。本發(fā)明通過攔截系統(tǒng)調用進行分流處理的方式, 對同一臺物理計算機上的VM間的網絡操作進行基于共享內存的通信加速,底層共享內存 機制的實現對用戶透明,未對Socket接口以及其它網絡通信接口做過任何修改,應用程序仍然可使用標準的Socket接口進行通信。因此,用戶不感知底層支撐機制,且無需修改應 用編程和使用模式,另外,當網絡通信協(xié)議發(fā)生變化時,無需應用移植。4.采用本發(fā)明無需修改操作系統(tǒng)內核代碼。本發(fā)明遵循標準的操作系統(tǒng)內核模塊 開發(fā)接口,在Socket層實現一個自包含可加載的全新的通信加速內核模塊,未對操作系統(tǒng) 內核的固有組成做出改變,因此,無需修改客戶操作系統(tǒng)和宿主操作系統(tǒng)的代碼。
圖1為背景技術中第二類通信方法中XWay的虛擬機系統(tǒng)結構圖;圖2為本發(fā)明總體流程圖;圖3為本發(fā)明第一步構建的虛擬機系統(tǒng)的結構圖;圖4為本發(fā)明第1. 1. 3步構造的連接控制塊和連接控制塊表的數據結構;圖5為本發(fā)明快速通信所需的基于共享內存的數據和控制信息交互圖;圖6為本發(fā)明第1. 2. 3步收到外部在線遷移命令時的遷移輔助處理流程;圖7為本發(fā)明第2. 3. 1步支持VM在線遷移的連接建立流程圖;圖8為本發(fā)明第2. 3. 2步支持VM在線遷移的數據發(fā)送流程圖;圖9為本發(fā)明第2. 3. 3步支持VM在線遷移的數據接收流程圖;圖10為本發(fā)明第2. 3. 4步支持VM在線遷移的連接關閉流程圖。
具體實施例方式圖1是背景技術中第二類通信方法中XWay的虛擬機系統(tǒng)結構圖,該虛擬機系統(tǒng)自 下而上由三層組成最底層是物理計算機硬件,包括CPU、內存、網卡和磁盤等硬件設備;中 間層是虛擬機監(jiān)控器,由中斷處理子模塊、CPU指令虛擬化子模塊、MMU虛擬化子模塊、事件 注入子模塊、域間共享內存子模塊、在線遷移子模塊組成;最上層是宿主操作系統(tǒng)以及多個 客戶操作系統(tǒng),客戶操作系統(tǒng)包括核外用戶態(tài)的Socket應用、XWay守護進程,核內的操作 系統(tǒng)內核和XWay內核模塊,為了實現TCP Socket協(xié)議和XWay協(xié)議之間的透明切換,必須 在操作系統(tǒng)內核的網絡協(xié)議棧中添加用于實現XWay切換組件的內核補丁,XWay內核模塊 由XWay協(xié)議組件和XWay設備驅動組件組成。XWay協(xié)議組件包括連接管控子模塊和數據收 發(fā)請求處理子模塊。當有Socket調用消息到達時,操作系統(tǒng)內核中的XWay切換組件根據該信息判斷 目標VM是在另一臺物理計算機上還是就在本地物理計算機上,對于前者仍然使用傳統(tǒng)的 TCP協(xié)議,而對于第二種情況則切換到XWay協(xié)議進行處理。XWay協(xié)議組件接收從XWay切 換組件發(fā)出的數據傳輸請求,將與控制相關的請求轉發(fā)給連接管控子模塊處理,而與數據 傳輸相關的請求轉發(fā)給數據收發(fā)請求處理子模塊,連接管控子模塊和數據收發(fā)請求處理子 模塊進行控制管理或準備收發(fā)數據,并請求XWay設備驅動組件控制和管理基于共享內存 的傳輸通道,由傳輸通道管理子模塊建立或者維護源VM和目標VM之間的基于共享內存的 傳輸通道。圖2是本發(fā)明總體流程圖。第一步,首先構造支持VM遷移的基于共享內存機制 的通信加速內核模塊,方法是遵循標準的操作系統(tǒng)內核模塊開發(fā)接口、在Socket通信層添 加一個自包含可加載的內核模塊,在該模塊內部添加初始化、系統(tǒng)調用分析器、連接管控、通告處理、數據傳輸管理、VM遷移支持六個子模塊;然后擴展VMM功能,方法是保留VMM已 有的中斷處理子模塊、CPU指令虛擬化子模塊、MMU虛擬化子模塊、事件注入子模塊、域間共 享內存子模塊和在線遷移子模塊,添加虛擬機組管理和通告管理兩個子模塊,并修改在線 遷移子模塊;最后在已有計算機硬件的基礎上,由擴展了的VMM和多個包括通信加速支持 的VM組成一個虛擬機系統(tǒng)。第二步,采用第一步構建的虛擬機系統(tǒng)對VM間通信進行加速。 方法是首先VMM啟動VM,VMM的虛擬機組管理子模塊對虛擬機系統(tǒng)中需要進行通信加速 的VM進行組管理,接著構建VM間通信加速和系統(tǒng)調用分析所需的軟件環(huán)境,然后旁路掉與 網絡操作無關的系統(tǒng)調用,選擇與網絡操作有關的系統(tǒng)調用分類進行處理,完成同一物理 計算機上的VM間的支持在線遷移的基于共享內存的快速通信,包括建立網絡連接、發(fā)送數 據、接收數據和關閉網絡連接,最后VMM關閉指定VM,VMM的虛擬機組管理子模塊從組中刪 除該VM。圖3是為本發(fā)明第一步構建的虛擬機系統(tǒng)的結構圖,整個虛擬機系統(tǒng)從下至上也 被分成三個部分最底層是物理計算機的硬件;中間層是虛擬機監(jiān)控器;最上層是宿主操 作系統(tǒng)以及多個客戶操作系統(tǒng)。虛擬機監(jiān)控器由中斷處理子模塊、CPU指令虛擬化子模塊、MMU虛擬化子模塊、事 件注入子模塊、域間共享內存子模塊、在線遷移子模塊、虛擬機組管理子模塊和通告管理子 模塊組成。其中,前五個子模塊與背景技術中XWay使用的虛擬機監(jiān)控機中的五個子模塊完 全相同;為了同時支持快速通信和VM在線遷移功能,對虛擬機監(jiān)控器的在線遷移子模塊做 了修改,并添加了虛擬機組管理子模塊和通告管理子模塊??蛻舨僮飨到y(tǒng)包括核外用戶態(tài)的Socket應用、核內的操作系統(tǒng)內核和通信加速 內核模塊,不同于XWay方法,本發(fā)明不對操作系統(tǒng)內核代碼進行修改,且無需核外的守護 進程,另外,通信加速內核模塊也與XWay內核模塊不同。通信加速內核模塊由初始化子模 塊、系統(tǒng)調用分析器子模塊、連接管控子模塊、通告處理子模塊、數據傳輸管理子模塊、VM遷 移支持子模塊組成。連接管控子模塊與XWay協(xié)議組件中的連接管控子模塊在連接基本管 理功能上基本相同,用于處理與控制相關的請求,但增加了在線遷移的支持;數據傳輸管理 子模塊在數據傳輸功能上與XWay協(xié)議組件中的數據請求收發(fā)處理子模塊和XWay設備驅動 組件中的傳輸通道管理子模塊基本相同,用于處理與數據傳輸相關的請求,但增加了在線 遷移的支持;初始化子模塊、系統(tǒng)調用分析器子模塊和VM遷移支持子模塊是本發(fā)明為了實 現通信加速內核模塊初始化、系統(tǒng)調用過濾和分流處理和支持VM遷移而添加的子模塊。添 加或修改子模塊的方法如下;1)虛擬機組管理子模塊。虛擬機組管理子模塊將所有VM進行全局分組管理,當 通信雙方VM在同一虛擬機組時,采用基于共享內存的加速方法來加速通信。按照如下流程 和與其它子模塊之間的接口構造并添加虛擬機組管理子模塊虛擬機組管理子模塊在啟動 VM時根據VM的組信息配置來設置VM的組ID,具有相同組ID的VM構成一個虛擬機組;在 VM銷毀時虛擬機組管理子模塊將該VM從其虛擬組中刪除,判斷組內VM成員數是否為0,若 是0,則刪除該虛擬機組;虛擬機組管理子模塊在VM啟動或關閉時調用通告管理子模塊為 虛擬機組創(chuàng)建或刪除事件緩沖區(qū)。2)通告管理子模塊。通 告管理子模塊在VM啟動或關閉時被虛擬機組管理子模塊 調用為虛擬機組創(chuàng)建或回收事件緩沖區(qū),此時通告管理子模塊將調用域間共享內存子模塊完成事件緩沖區(qū)的內存映射。通告管理子模塊還登記和緩存來自VM的請求對應的事件,并 通過通告加速模塊的通告處理子模塊向目標VM發(fā)送事件,發(fā)送事件的步驟是根據當前VM 的網絡連接信息,定位通信另一方VM對應的事件緩沖區(qū)位置;將當前事件類型和參數登記 到該事件緩沖區(qū)中;向通信另一方VM注入當前事件類型對應的中斷;中斷處理完畢后清除 事件緩沖區(qū)中的該事件。3)在線遷移子模塊。保留VMM在線遷移子模塊的在線遷移功能,并添加遷移輔助 處理功能到在線遷移子模塊中。添加的遷移輔助處理功能與VMM在線遷移子模塊的原有在 線遷移功能以及VM的通信加速內核模塊之間的接口表現為在操作系統(tǒng)加載通信加速內 核模塊時遷移輔助處理功能被初始化子模塊調用;在接收到外部在線遷移命令并通過VMM 在線遷移子模塊的原有在線遷移功能完成VM的遷移后,遷移輔助處理功能被激活。遷移輔 助處理的流程及其與其它子模塊的接口具體如下在通信加速內核模塊被加載時,添加的 遷移輔助處理功能被通信加速內核模塊的初始化子模塊激活,生成VM的當前位置號,并在 當前VMM的當前位置號表中加入該VM的ID和當前位置號,調用通信加速內核模塊的VM遷 移支持子模塊,使后者獲取該VM當前位置號的一個拷貝,用于在數據傳輸和連接關閉時判 斷VM是否發(fā)生了遷移;在接收到外部在線遷移命令并通過原有在線遷移功能完成VM的遷 移后,在線遷移子模塊將當前VM遷移前所在物理計算機上的源VMM中保存的連接控制塊、 已發(fā) 送和已接收字節(jié)數同步到遷移后的目標VMM中,目標VMM的在線遷移子模塊生成被遷 移VM的當前位置號,更新當前位置號表中的信息。通信加速內核模塊中各個子模塊的構造和添加方法如下1)初始化子模塊。初始化子模塊在VM成功啟動且加載客戶操作系統(tǒng)的通信加速 內核模塊之后被觸發(fā),根據下述實現流程和與其它子模塊之間的接口來構造并添加該子模 塊根據當前VM的組ID配置,首先調用VMM的虛擬機組管理子模塊來創(chuàng)建組或在相應的組 中注冊該VM ;接著請求操作系統(tǒng)保留連續(xù)的虛地址空間,并向VMM的域間共享內存子模塊 發(fā)出請求,由其建立共享內存緩沖區(qū),用于存放相互通信的VM的網絡連接以及將要被收發(fā) 的數據等信息;然后調用VMM的在線遷移子模塊以生成VM的當前位置號并更新VMM的當 前位置號表。調用VM遷移支持子模塊,通知VM遷移支持子模塊獲取并維護該VM的當前位 置號的一個拷貝;當發(fā)生系統(tǒng)調用時轉到系統(tǒng)調用分析器子模塊進行對應用透明的通信加 速。2)系統(tǒng)調用分析器子模塊。根據下述實現流程和與其它子模塊之間的接口構造并 添加該子模塊截獲來自網絡應用的系統(tǒng)調用請求,首先過濾掉與網絡操作無關的系統(tǒng)調 用,對于其它系統(tǒng)調用,如果是不同物理計算機上的VM間通信,則仍采用面向TCP/IP網絡 協(xié)議的傳統(tǒng)機制處理,如果是位于同一物理計算機上的VM間的通信,則調用連接管控子模 塊或數據傳輸管理子模塊進行創(chuàng)建或關閉連接、數據傳輸等操作。3)連接管控子模塊。連接管控子模塊負責網絡連接信息的維護和管理,為網絡連 接信息構造連接控制塊數據結構,將所有連接控制塊組織成連接控制塊表,表中每一項為 一個網絡連接的ID號,以及該ID對應的連接控制塊(見圖4)。然后按照如下流程和與其 它子模塊之間的接口構造并添加連接管控子模塊在建立連接、關閉連接或進行數據收發(fā) 時,被系統(tǒng)調用分析器子模塊、數據傳輸子模塊或VM遷移支持子模塊調用,用于訪問VMM域 間共享內存子模塊創(chuàng)建的共享內存,從而創(chuàng)建、注冊、讀取、修改或回收連接控制塊,維持基于共享內存的通信連接。
4)通告處理子模塊。按照如下流程和與其它子模塊之間的接口構造并添加通告處 理子模塊接收VMM通告管理子模塊和事件注入子模塊轉發(fā)的與當前事件對應的中斷,讀 取事件緩沖區(qū),獲取所需事件,根據事件類型喚醒源VM發(fā)送或目標VM接收數據、或通知通 信另一方VM網絡連接已關閉、數據緩沖區(qū)可被釋放。5)數據傳輸管理子模塊。數據傳輸管理子模塊用于處理數據發(fā)送或接收請求,這 些請求有兩個來源系統(tǒng)調用分析器子模塊和VM遷移支持子模塊,其中第二類請求是在發(fā) 生在線遷移時,對已發(fā)送但尚未接收到的數據的處理請求。按照如下流程和與其它子模塊 之間的接口構造并添加數據傳輸管理子模塊首先調用VM遷移支持子模塊判斷是否發(fā)生 了在線遷移,若發(fā)生了遷移,則可能出現數據丟失情況,需重建連接或者重傳數據,若未發(fā) 生遷移,則向連接管控子模塊發(fā)請求獲得連接控制塊,從而得到共享緩沖區(qū)的位置信息,接 著通過該共享緩沖區(qū)發(fā)送或接收數據。6)VM遷移支持子模塊。VM遷移支持子模塊被連接管控子模塊、數據傳輸管理子模 塊所調用,用以檢測是否發(fā)生了遷移并進行處理。按照如下流程和與其它子模塊之間的接 口構造并添加VM遷移支持子模塊在進行連接關閉、數據發(fā)送/接收等操作時,判斷VM遷 移支持子模塊維護的當前位置號拷貝與VMM在線遷移子模塊中當前位置號表中的當前位 置號是否相同,如果不同,則表明發(fā)生了遷移,這時首先讀取VMM在線遷移子模塊維護的當 前位置號表中的當前位置號,并將其更新到該VM的VM遷移支持子模塊維護的拷貝中,然后 根據遷移的具體情況,必要時重新建立TCP連接或者基于共享內存的連接,并調用連接管 控子模塊和數據傳輸管理子模塊對已經發(fā)送但尚未接收的數據進行處理。圖4為本發(fā)明第1. 1. 3步構造的連接控制塊和連接控制塊表的數據結構。該數據 結構對應的連接信息由連接管控子模塊維護和管理,該數據結構為一個struct類型,包括 的域有通信的VM雙方的IP地址和端口號;I/O模式標志位(阻塞式或非阻塞式);一個 發(fā)送緩沖區(qū)和一個接收緩沖區(qū)(發(fā)送緩沖區(qū)和接收緩沖區(qū)對應不同的物理內存,本地接收 緩沖區(qū)和遠地的發(fā)送緩沖區(qū)共享同一片物理內存);等待發(fā)送的睡眠VM隊列、等待接收的 睡眠VM隊列。所有連接控制塊組織成連接控制塊表,表中每一項為一個網絡連接的ID號, 以及該ID對應的連接控制塊。圖5為本發(fā)明進行快速通信的基于共享內存的數據和控制信息示意圖。客戶操作 系統(tǒng)VM_1和客戶操作系統(tǒng)VM_2是進行通信的兩個VM,兩者通過共享內存的方式交互信息, 共享內存中包括連接控制塊信息、數據緩沖區(qū)和事件緩沖區(qū)。在第2. 2. 1步中,初始化子模塊請求操作系統(tǒng)保留連續(xù)的虛地址空間,并向VMM的 域間共享內存子模塊發(fā)出請求,由VMM建立共享內存緩沖區(qū),用于交互相互通信的VM的連 接信息、數據和事件。其中,連接控制塊和數據緩沖區(qū)的創(chuàng)建和獲取在第2. 3. 1步建立網 絡連接時完成,一般情況下,連接控制塊和數據緩沖區(qū)的回收在第2. 3. 4步關閉連接時完 成。當數據發(fā)送或接收過程中發(fā)生在線遷移時,如果遷移前通信雙方在同一臺物理計算機 上且在同一虛擬組中,而遷移后不在同一臺物理計算機上或不在同一虛擬組中,則在數據 發(fā)送或接收過程中回收當前控制塊以及數據緩沖區(qū)(參見第2. 3. 2. 1. 1步和第2. 3. 3. 1. 1 步)。數據通過數據緩沖區(qū)1和數據緩沖區(qū)2發(fā)送或接收,當VM_1為發(fā)送方、VM_2為接收方 時,VM_1的發(fā)送緩沖區(qū)映射為數據緩沖區(qū)1,VM_2的接收緩沖區(qū)也映射為數據緩沖區(qū)1 ;當VM_2為發(fā)送方、VM_1為接收方時,VM_2的發(fā)送緩沖區(qū)映射為數據緩沖區(qū)2,VM_1的接收緩沖區(qū)也映射為數據緩沖區(qū)2。事件緩沖區(qū)用于通信雙方VM間的事件通告,在VM啟動或關閉 時,由虛擬機組管理子模塊調用通告管理子模塊,后者為虛擬機組創(chuàng)建或回收事件緩沖區(qū)。圖6為本發(fā)明第1. 2. 3步收到外部在線遷移命令時的遷移輔助處理流程。在接收 到外部在線遷移命令并通過原有在線遷移功能完成VM的遷移后,在線遷移子模塊中添加 的遷移輔助處理功能首先將當前VM遷移前所在物理計算機上的源VMM中保存的連接控制 塊、已發(fā)送和已接收字節(jié)數同步到遷移后的目標VMM中,然后通知目標VMM的在線遷移子模 塊生成被遷移VM的當前位置號,并更新當前位置號表中的信息。以下是本發(fā)明第2. 3步的流程圖,分為四種情況,分別用圖7、圖8、圖9、圖10描 述。圖7描述了本發(fā)明第2. 3. 1步源VM與目標VM建立連接的流程。連接管控子模塊 首先通過VMM獲得當前VM的組ID及其所在物理計算機的MAC地址,接著判斷通信雙方VM 的虛擬組ID是否相同。如果通信雙方虛擬機組ID不同,則無需進行通信加速,按操作系統(tǒng) 常規(guī)的建立TCP網絡連接的流程處理。如果通信雙方虛擬機組ID相同,則判斷通信雙方是 否位于同一臺物理計算機上。如果通信雙方不位于同一臺物理計算機上,則按操作系統(tǒng)常 規(guī)的建立TCP網絡連接的流程處理。如果通信雙方位于同一臺物理計算機,且該系統(tǒng)調用 對應的網絡連接的連接控制塊尚未被添加到連接管控子模塊中的連接控制塊表中,即通信 雙方位于同一臺物理計算機且該系統(tǒng)調用對應的網絡連接尚未被注冊到連接管控子模塊 中,則調用VMM的域間共享內存子模塊,獲取源VM和目標VM的數據緩沖區(qū),初始化已發(fā)送 和已接收的字節(jié)數為0,在第2. 2. 1步中VMM建立的共享內存緩沖區(qū)中創(chuàng)建連接控制塊,設 置連接控制塊的初始值,分配用于數據發(fā)送或接收的共享緩沖區(qū),最后在連接管控子模塊 中注冊該連接,即將該連接對應的連接控制塊添加到連接控制塊表中。圖8描述了本發(fā)明第2. 3. 2步支持在線遷移的數據發(fā)送流程2. 3. 2. 1通信加速內核模塊的數據傳輸管理子模塊調用VM遷移支持子模塊,判 斷其維護的該VM當前位置號拷貝與VMM當前位置號表中的對應當前位置號是否一致。如 果一致,表明通信雙方VM未發(fā)生遷移,轉第2. 3. 2. 2步進行基于共享內存的快速數據發(fā)送。 如果不一致,表明在進行該發(fā)送操作前該VM發(fā)生了遷移,進行遷移輔助處理VM遷移支持 子模塊讀取VMM的在線遷移子模塊維護的當前位置號表中的當前位置號,并將其更新到自 身維護的當前位置號拷貝中;為了對已經發(fā)送但尚未被接收到的數據進行處理,VM遷移支 持子模塊查詢連接管控子模塊中是否注冊了該連接對應的連接控制塊,即在連接控制塊表 中查詢是否存在該連接對應的連接控制塊2. 3. 2. 1. 1如果存在,則表明遷移前通信雙方的VM位于同一臺物理計算機,采用 的是基于共享內存的快速通信方法。讀取VMM中的已發(fā)送和已接收的字節(jié)數,若前者大于 后者,則表明第2. 3. 1. 1. 2步所分配的數據緩沖區(qū)中仍有數據未被目標VM所接收,數據傳 輸管理子模塊等待直到目標VM的接收緩沖區(qū)為空,并更新VMM中已接收的字節(jié)數,否則表 明數據均被接收。由于遷移后通信雙方不在同一臺物理計算機上,因此回收當前連接控制 塊和數據緩沖區(qū),將數據發(fā)送從基于共享內存的方式轉為基于TCP協(xié)議的方式,按操作系 統(tǒng)常規(guī)的基于TCP連接的數據發(fā)送流程處理。2. 3. 2. 1. 2如果不存在,則表明遷移前通信雙方的VM不在同一臺物理計算機上,數據傳輸管理子模塊等待直到網絡上的數據被接收完畢。然后判斷遷移后通信雙方是否 在同一臺物理計算機上,若不是,則仍然采用基于TCP協(xié)議的方式發(fā)送數據,按操作系統(tǒng)常 規(guī)的基于TCP連接的數據發(fā)送流程處理;若是,則遷移后通信雙方在同一臺物理計算機上。 此時,判斷發(fā)送數據的當前VM的組ID與目標VM的組ID是否相同如果相同,則表明遷移 后源VM和目標VM位于同一物理計算機上且應采用共享內存方式對其通信進行加速,需要 建立基于共享內存的連接,于是將當前系統(tǒng)調用設置為該數據發(fā)送操作,以便在重建連接 后繼續(xù)本次數據發(fā)送,然后轉第2. 3. 1. 1步執(zhí)行;若不相同,則無需用共享內存方式加速通 信,仍然采用基于TCP協(xié)議的方式,按照操作系統(tǒng)常規(guī)流程基于TCP連接來發(fā)送數據。2. 3. 2. 2通信加速內核模塊的數據傳輸管理子模塊進行基于共享內存的快速數 據發(fā)送。數據傳輸管理子模塊首先讀取連接控制塊表,判斷是否存在當前發(fā)送操作對應的 連接,若不存在,則表明通信雙方VM不在同一臺物理計算機上,按操作系統(tǒng)常規(guī)流程基于 TCP連接來發(fā)送數據,否則判斷通信雙方VM的虛擬組ID相同,如果不相同,則按操作系統(tǒng)常 規(guī)流程基于TCP連接來發(fā)送數據,否則按照共享內存的方式進行快速的發(fā)送數據。設請求 發(fā)送的數據長度為m,連接控制塊中描述的發(fā)送緩沖區(qū)長度為n,方法是若m不小于n,則 向發(fā)送緩沖區(qū)傳輸n個字節(jié),并為已發(fā)送字節(jié)數加上n,設置請求發(fā)送的數據長度m = m-n ; 否則向發(fā)送緩沖區(qū)傳輸m個字節(jié),已發(fā)送字節(jié)數加m,請求發(fā)送的數據長度m設為0。如果 本次I/O為阻塞式且m > 0,將本發(fā)送任務添加到連接控制塊的等待發(fā)送的睡眠VM隊列,調 用操作系統(tǒng)功能進行睡眠,直至目標VM通過通信加速內核模塊的通告處理子模塊傳遞接 收數據事件喚醒本任務時轉至第2. 3. 2步,否則若m > 0,直接轉第2. 3. 2步。圖9描述了本發(fā)明第2. 3. 3步支持在線遷移的數據接收的流程2. 3. 3. 1通信加速內核模塊的數據傳輸管理子模塊調用VM遷移支持子模塊,判斷 其維護的該VM當前位置號拷貝與VMM當前位置號表中的對應值是否一致。如果一致,表明 通信雙方VM未發(fā)生遷移,直接轉第2. 3. 3. 2步進行基于共享內存的快速數據接收。如果不 一致,表明在進行此接收操作前該VM發(fā)生了遷移,進行遷移輔助處理首先讀取VMM的在線 遷移子模塊維護的當前位置號表中的當前位置號,并將其更新到該VM的VM遷移支持子模 塊維護的拷貝中;為了對已經發(fā)送但尚未被接收到的數據進行處理,查詢連接管控子模塊 中是否注冊了該連接對應的連接控制塊,即在連接控制塊表中查詢是否存在該連接對應的 連接控制塊2. 3. 3. 1. 1如果存在,則表明遷移前通信雙方的VM位于同一臺物理計算機上,采 用的是基于共享內存的快速通信方法。讀取VMM中的已發(fā)送和已接收的字節(jié)數,若前者大 于后者,則表明第2. 3. 1. 1.2步所分配的數據緩沖區(qū)中仍有數據未被目標VM所接收。由于 遷移后通信雙方不在同一臺物理計算機上,則當仍有數據未被接收時,首先請數據發(fā)送方 將用于發(fā)送的數據緩沖區(qū)中的數據重發(fā)一遍,接收完網絡上傳輸的剩余數據后,回收當前 連接控制塊和數據緩沖區(qū),將數據發(fā)送從基于共享內存的方式轉為基于TCP協(xié)議的方式, 按操作系統(tǒng)常規(guī)流程基于TCP連接來接收數據。2. 3. 3. 1. 2如果不存在,則表明遷移前通信雙方的VM不在同一臺物理計算機上, 采用的是基于TCP的通信方式,數據傳輸管理子模塊等待目標VM繼續(xù)接收數據直到網絡上 的數據被接收完畢。然后判斷遷移后通信雙方是否在同一臺物理計算機上,若不是,則仍然 采用基于TCP協(xié)議的方式發(fā)送數據,按操作系統(tǒng)常規(guī)流程基于TCP連接來接收數據;若是,
23則遷移后通信雙方在同一臺物理計算機上。此時,判斷接收數據的當前VM的組ID與源VM 的組ID是否相同如果相同,則表明遷移后源VM和目標VM位于同一物理計算機上且應采 用共享內存方式對其通信進行加速,需要建立基于共享內存的連接,于是將當前系統(tǒng)調用 設置為該數據接收操作,以便在重建連接后繼續(xù)本次數據接收,然后轉第2. 3. 1. 1步;若不 相同,則無需用共享內存方式加速通信,仍然采用基于TCP協(xié)議的方式,按照操作系統(tǒng)常規(guī) 流程基于TCP連接來接收數據。2. 3. 3. 2通信加速內核模塊的數據傳輸管理子模塊進行基于共享內存的快速數 據接收。通信加速內核模塊的數據傳輸管理子模塊首先讀取連接管控子模塊維護和管理的 連接控制塊表,判斷是否存在當前接收操作對應的連接,若不存在,則表明通信雙方VM不 在同一臺物理計算機上,轉操作系統(tǒng)常規(guī)流程基于TCP連接來接收數據,否則判斷通信雙 方VM的虛擬組ID相同,如果不相同,則轉操作系統(tǒng)常規(guī)流程基于TCP連接來接收數據,否 則按照共享內存的方式接收數據如果接收緩沖區(qū)不為空,則目標VM接收其中的數據,并 將已接收數據字節(jié)數增加相應的值。若接收操作完畢,則數據接收流程結束,否則按以下方 法處理2. 3. 3. 2. 1當本次I/O為非阻塞式時,轉第2. 3. 3步;2. 3. 3. 2. 2當本次I/O為阻塞式時,則將本接收任務添加到連接控制塊的等待接 收的睡眠VM隊列,調用操作系統(tǒng)功能進行睡眠,直至源VM通過通信加速內核模塊的通告處 理子模塊傳遞發(fā)送數據事件喚醒本任務,轉第2. 3. 3步。圖10描述了本發(fā)明第2. 3. 4步支持在線遷移的連接關閉的流程2. 3. 4. 1通信加速內核模塊的連接管控子模塊調用VM遷移支持子模塊判斷其維 護的該VM當前位置號拷貝與VMM當前位置號表中的對應值是否一致。如果一致,表明通信 雙方VM未發(fā)生遷移,直接轉第2. 3. 4. 2步關閉連接。如果不一致,表明在即將關閉網絡連 接前VM發(fā)生了遷移,進行遷移輔助處理首先讀取VMM的在線遷移子模塊維護的當前位置 號表中的當前位置號,并將其更新到該VM的VM遷移支持子模塊維護的拷貝中;為了對已經 發(fā)送但尚未被接收到的數據進行處理,查詢連接管控子模塊中是否注冊了該連接對應的連 接控制塊,即在連接控制塊表中查詢是否存在該連接對應的連接控制塊2. 3. 4. 1. 1如果存在,則表明遷移前通信雙方的VM位于同一臺物理計算機上,采 用的是基于共享內存的快速通信方法。讀取VMM中的已發(fā)送和已接收的字節(jié)數,若前者大 于后者,則表明仍有數據未被接收。當仍有數據未被接收時,由于遷移后通信雙方VM不在 一臺物理計算機上,若當前VM是源VM,則等待直到目標VM的接收緩沖區(qū)為空,若當前VM是 目標VM,則請數據發(fā)送方將用于發(fā)送的數據緩沖區(qū)中的數據重發(fā)一遍,并接收網絡上傳輸 的重發(fā)數據。2.3.4.1.2如果不存在,則表明遷移前通信雙方的VM不在同一臺物理計算機上, 采用的是基于TCP的通信方式。如果當前VM為源VM,則等待直至網上傳輸的數據被接收完 畢;如果當前VM為目標VM,則讀取網絡上傳輸的剩余數據。2. 3. 4. 2通信加速內核模塊的數據傳輸管理子模塊讀取連接管控子模塊維護和 管理的連接控制塊表,判斷是否存在當前操作對應的連接,若不存在,則表明通信雙方VM 不在同一臺物理計算機上,轉操作系統(tǒng)常規(guī)流程關閉TCP連接,否則判斷通信的另一方VM 是否在睡眠,若其正在睡眠,則請求VMM的通告管理子模塊通過事件緩沖區(qū)向對方發(fā)送事件,用于通知后者網絡連接已經斷開且可以釋放數據緩沖區(qū),通告管理子模塊通過VMM的 事件注入子模塊向VM注入當前事件對應的中斷,VM中的通信加速內核模塊的通告處理子 模塊接收中斷。 2. 3. 4. 3調用VMM的域間共享內存子模塊以釋放雙方的數據緩沖區(qū),判斷對方是 否已經關閉連接,如果已經關閉,則通過連接管控子模塊回收當前連接控制塊。
2權利要求
一種支持在線遷移的虛擬機間快速通信方法,其特征在于包括以下步驟第一步,構造客戶操作系統(tǒng)中的共享內存通信支持模塊,擴展虛擬機監(jiān)控器VMM功能,在已有計算機硬件的基礎上,由擴展了的VMM和多個包括通信加速支持的虛擬機VM組成一個虛擬機系統(tǒng),方法是1.1在客戶操作系統(tǒng)中構建支持VM遷移的基于共享內存機制的通信加速內核模塊,方法是不修改已有操作系統(tǒng)內核代碼,遵循標準的操作系統(tǒng)內核模塊開發(fā)接口、在Socket通信層添加一個自包含可加載的通信加速內核模塊,并在該模塊內部構造并添加初始化、系統(tǒng)調用分析器、連接管控、通告處理、數據傳輸管理、VM遷移支持共六個子模塊,方法是1.1.1構造并添加初始化子模塊根據當前VM的組ID配置,首先調用VMM的虛擬機組管理子模塊來創(chuàng)建組或在相應的組中注冊該VM;接著請求操作系統(tǒng)保留連續(xù)的虛地址空間,并向VMM的域間共享內存子模塊發(fā)出請求,由其建立共享內存緩沖區(qū);然后調用VMM的在線遷移子模塊以生成VM當前位置號并更新VMM的當前位置號表(VMM的在線遷移子模塊在共享內存中為其所在物理計算機上的所有VM維護一個當前位置號表,每一項為VM的ID及其對應的當前位置號);調用VM遷移支持子模塊,通知VM遷移支持子模塊獲取并維護該VM的當前位置號的一個拷貝;當發(fā)生系統(tǒng)調用時轉到系統(tǒng)調用分析器子模塊進行對應用透明的通信加速;1.1.2構造并添加系統(tǒng)調用分析器子模塊截獲來自網絡應用的系統(tǒng)調用請求,首先過濾掉與網絡操作無關的系統(tǒng)調用,對于其它系統(tǒng)調用,如果是不同物理計算機上的VM間通信,則仍采用面向TCP/IP網絡協(xié)議的傳統(tǒng)機制處理,如果是位于同一物理計算機上的VM間的通信,則調用連接管控子模塊或數據傳輸管理子模塊進行創(chuàng)建或關閉連接、數據傳輸;1.1.3構造并添加連接管控子模塊,連接管控子模塊負責網絡連接信息的維護和管理,為網絡連接信息構造連接控制塊;等待發(fā)送的睡眠VM隊列、等待接收的睡眠VM隊列;在構造上述數據結構之后,將所有連接控制塊組織成連接控制塊表,表中每一項為一個網絡連接的ID號,以及該ID對應的連接控制塊;然后按照如下流程和與其它子模塊之間的接口構造并添加連接管控子模塊在建立連接、關閉連接或進行數據收發(fā)時,被系統(tǒng)調用分析器子模塊、數據傳輸子模塊或VM遷移支持子模塊調用,用于訪問VMM域間共享內存子模塊創(chuàng)建的共享內存,從而創(chuàng)建、注冊、讀取、修改或回收連接控制塊,維持基于共享內存的通信連接;1.1.4構造并添加通告處理子模塊接收VMM通告管理子模塊和事件注入子模塊轉發(fā)的與當前事件對應的中斷,讀取事件緩沖區(qū),獲取所需事件,事件類型包括喚醒目標VM接收數據、喚醒源VM發(fā)送數據、網絡連接已關閉、數據緩沖區(qū)可被釋放四種;根據事件類型喚醒源VM發(fā)送或目標VM接收數據、或通知通信另一方VM網絡連接已關閉、數據緩沖區(qū)可被釋放;1.1.5構造并添加數據傳輸管理子模塊首先調用VM遷移支持子模塊判斷是否發(fā)生了在線遷移,若發(fā)生了遷移,則可能出現數據丟失情況,需重建連接或者重傳數據,若未發(fā)生遷移,則向連接管控子模塊發(fā)請求獲得連接控制塊,從而得到共享緩沖區(qū)的位置信息,接著通過該共享緩沖區(qū)發(fā)送或接收數據;1.1.6構造并添加VM遷移支持子模塊在進行連接關閉、數據發(fā)送/接收時,判斷VM遷移支持子模塊維護的當前位置號拷貝與VMM在線遷移子模塊中當前位置號表中的當前位置號是否相同,如果不同,則表明發(fā)生了遷移,這時首先讀取VMM在線遷移子模塊維護的當前位置號表中的當前位置號,并將其更新到該VM的VM遷移支持子模塊維護的拷貝中,然后根據遷移的具體情況重新建立TCP連接或者基于共享內存的連接,并調用連接管控子模塊和數據傳輸管理子模塊對已經發(fā)送但尚未接收的數據進行處理;1.2擴展VMM功能,使VMM具有通信加速支持能力,方法是保留VMM已有的中斷處理子模塊、CPU指令虛擬化子模塊、MMU虛擬化子模塊、事件注入子模塊、域間共享內存子模塊和在線遷移子模塊,添加虛擬機組管理和通告管理兩個子模塊,并修改在線遷移子模塊,具體方法如下1.2.1構造并添加虛擬機組管理子模塊虛擬機組管理子模塊在啟動VM時根據VM的組信息配置來設置VM的組ID,具有相同組ID的VM構成一個虛擬機組;在VM銷毀時虛擬機組管理子模塊將該VM從其虛擬組中刪除,判斷組內VM成員數是否為0,若是0,則刪除該虛擬機組;虛擬機組管理子模塊在VM啟動或關閉時調用通告管理子模塊為虛擬機組創(chuàng)建或回收事件緩沖區(qū);1.2.2構造并添加通告管理子模塊,通告管理子模塊在VM啟動或關閉時被虛擬機組管理子模塊調用為虛擬機組創(chuàng)建或回收事件緩沖區(qū),此時通告管理子模塊調用VMM的域間共享內存子模塊完成事件緩沖區(qū)的內存映射;通告管理子模塊還登記和緩存來自VM的請求對應的事件,并通過通告處理子模塊向目標VM發(fā)送事件,發(fā)送事件的步驟是根據當前VM的網絡連接信息,定位通信另一方VM對應的事件緩沖區(qū)位置;將當前事件類型和參數登記到該事件緩沖區(qū)中;向通信另一方VM注入當前事件類型對應的中斷;中斷處理完畢后清除事件緩沖區(qū)中的該事件;1.2.3修改在線遷移子模塊,保留VMM在線遷移子模塊的在線遷移功能,添加遷移輔助處理功能,遷移輔助處理功能與在線遷移功能以及VM的通信加速內核模塊之間的接口為在操作系統(tǒng)加載通信加速內核模塊時遷移輔助處理功能被初始化子模塊調用;在接收到外部在線遷移命令并通過VMM在線遷移子模塊的原有在線遷移功能完成VM的遷移后,遷移輔助處理功能被激活;遷移輔助處理的流程及其與其它子模塊的接口具體如下在通信加速內核模塊被加載時,添加的遷移輔助處理功能被通信加速內核模塊的初始化子模塊激活,生成VM的當前位置號,并在當前VMM的當前位置號表中加入該VM的ID和當前位置號,調用通信加速內核模塊的VM遷移支持子模塊,使后者獲取該VM當前位置號的一個拷貝,用于在數據傳輸和連接關閉時判斷VM是否發(fā)生了遷移;在接收到外部在線遷移命令并通過原有在線遷移功能完成VM的遷移后,在線遷移子模塊中添加的遷移輔助處理功能將當前VM遷移前所在物理計算機上的源VMM中保存的連接控制塊、已發(fā)送和已接收字節(jié)數同步到遷移后的目標VMM中,然后通知目標VMM的在線遷移子模塊生成被遷移VM的當前位置號,并更新當前位置號表中的信息;第二步,采用虛擬機系統(tǒng)對VM間通信進行加速,具體步驟為2.1 VMM啟動VM,VMM的虛擬機組管理子模塊對虛擬機系統(tǒng)中需要進行通信加速的VM進行組管理;2.2通信加速內核模塊的初始化子模塊構建VM間通信加速和系統(tǒng)調用分析所需的軟件環(huán)境;2.3 VM客戶操作系統(tǒng)中的通信加速內核模塊接收應用程序或外部命令中的系統(tǒng)調用,轉發(fā)給系統(tǒng)調用分析器子模塊,系統(tǒng)調用分析器子模塊首先旁路掉與網絡操作無關的系統(tǒng)調用,然后選擇與網絡操作有關的系統(tǒng)調用分類進行處理,完成同一物理計算機上的VM間的基于共享內存的快速通信,方法是2.3.1若當前系統(tǒng)調用的類別是建立網絡連接,則2.3.1.1連接管控子模塊首先通過VMM獲得當前VM的組ID及其所在物理計算機的MAC地址,接著判斷通信雙方VM的虛擬組ID是否相同,如果通信雙方虛擬機組ID不同,則無需進行通信加速,按操作系統(tǒng)常規(guī)的建立TCP網絡連接的流程處理;如果通信雙方虛擬機組ID相同,則判斷通信雙方是否位于同一臺物理計算機上,按以下方法處理2.3.1.1.1如果通信雙方不位于同一臺物理計算機,則按操作系統(tǒng)常規(guī)的建立TCP網絡連接的流程處理;2.3.1.1.2如果通信雙方位于同一臺物理計算機,且該系統(tǒng)調用對應的網絡連接的連接控制塊尚未被添加到連接管控子模塊中的連接控制塊表中,則調用VMM的域間共享內存子模塊,獲取源VM和目標VM的數據緩沖區(qū),初始化已發(fā)送和已接收的字節(jié)數為0,在第2.2.1步中VMM建立的共享內存緩沖區(qū)中創(chuàng)建連接控制塊,設置連接控制塊的初始值,分配用于數據發(fā)送或接收的共享緩沖區(qū),最后在連接管控子模塊中注冊該連接,即將該連接對應的連接控制塊添加到連接控制塊表中;2.3.2若當前系統(tǒng)調用是數據發(fā)送操作,則2.3.2.1通信加速內核模塊的數據傳輸管理子模塊調用VM遷移支持子模塊,判斷其維護的該VM當前位置號拷貝與VMM當前位置號表中的對應當前位置號是否一致;如果一致,表明通信雙方VM未發(fā)生遷移,轉第2.3.2.2步進行基于共享內存的快速數據發(fā)送;如果不一致,表明在進行該發(fā)送操作前該VM發(fā)生了遷移,進行遷移輔助處理VM遷移支持子模塊讀取VMM的在線遷移子模塊維護的當前位置號表中的當前位置號,并將其更新到自身維護的當前位置號拷貝中;為了對已經發(fā)送但尚未被接收到的數據進行處理,VM遷移支持子模塊查詢連接管控子模塊中是否注冊了該連接對應的連接控制塊2.3.2.1.1如果注冊了,讀取VMM中的已發(fā)送和已接收的字節(jié)數,若前者大于后者,則表明第2.3.1.1.2步所分配的數據緩沖區(qū)中仍有數據未被目標VM所接收,數據傳輸管理子模塊等待直到目標VM的接收緩沖區(qū)為空,并更新VMM中已接收的字節(jié)數,否則表明數據均被接收;回收當前連接控制塊和數據緩沖區(qū),將數據發(fā)送從基于共享內存的方式轉為基于TCP協(xié)議的方式,按操作系統(tǒng)常規(guī)的基于TCP連接的數據發(fā)送流程處理;2.3.2.1.2如果未注冊,數據傳輸管理子模塊等待直到網絡上的數據被接收完畢,然后判斷遷移后通信雙方是否在同一臺物理計算機上,若不是,則仍然采用基于TCP協(xié)議的方式發(fā)送數據,按操作系統(tǒng)常規(guī)的基于TCP連接的數據發(fā)送流程處理;若是,則遷移后通信雙方在同一臺物理計算機上;判斷發(fā)送數據的當前VM的組ID與目標VM的組ID是否相同如果相同,則表明遷移后源VM和目標VM位于同一物理計算機上且應采用共享內存方式對其通信進行加速,需要建立基于共享內存的連接,于是將當前系統(tǒng)調用設置為該數據發(fā)送操作,轉第2.3.1.1步執(zhí)行;若不相同,則仍然采用基于TCP協(xié)議的方式,按照操作系統(tǒng)常規(guī)流程基于TCP連接來發(fā)送數據;2.3.3若當前系統(tǒng)調用是數據接收操作,則2.3.3.1通信加速內核模塊的數據傳輸管理子模塊調用VM遷移支持子模塊,判斷其維護的該VM當前位置號拷貝與VMM當前位置號表中的對應值是否一致;如果一致,表明通信雙方VM未發(fā)生遷移,直接轉第2.3.3.2步進行基于共享內存的快速數據接收;如果不一致,表明在進行此接收操作前該VM發(fā)生了遷移,進行遷移輔助處理首先讀取VMM的在線遷移子模塊維護的當前位置號表中的當前位置號,并將其更新到該VM的VM遷移支持子模塊維護的拷貝中;為了對已經發(fā)送但尚未被接收到的數據進行處理,查詢連接管控子模塊中是否注冊了該連接對應的連接控制塊2.3.3.1.1如果注冊了,讀取VMM中的已發(fā)送和已接收的字節(jié)數,若前者大于后者,則表明第2.3.1.1.2步所分配的數據緩沖區(qū)中仍有數據未被目標VM所接收;由于遷移后通信雙方不在同一臺物理計算機上,則當仍有數據未被接收時,首先請數據發(fā)送方將用于發(fā)送的數據緩沖區(qū)中的數據重發(fā)一遍,接收完網絡上傳輸的剩余數據后,回收當前連接控制塊和數據緩沖區(qū),將數據發(fā)送從基于共享內存的方式轉為基于TCP協(xié)議的方式,按操作系統(tǒng)常規(guī)流程基于TCP連接來接收數據;2.3.3.1.2如果未注冊,數據傳輸管理子模塊等待目標VM繼續(xù)接收數據直到網絡上的數據被接收完畢;然后判斷遷移后通信雙方是否在同一臺物理計算機上,若不是,則仍然采用基于TCP協(xié)議的方式發(fā)送數據,按操作系統(tǒng)常規(guī)流程基于TCP連接來接收數據;若是,則遷移后通信雙方在同一臺物理計算機上;判斷接收數據的當前VM的組ID與源VM的組ID是否相同如果相同,則表明遷移后源VM和目標VM位于同一物理計算機上且應采用共享內存方式對其通信進行加速,需要建立基于共享內存的連接,于是將當前系統(tǒng)調用設置為該數據接收操作,以便在重建連接后繼續(xù)本次數據接收,然后轉第2.3.1.1步;若不相同,則無需用共享內存方式加速通信,仍然采用基于TCP協(xié)議的方式,按照操作系統(tǒng)常規(guī)流程基于TCP連接來接收數據;2.3.3.2通信加速內核模塊的數據傳輸管理子模塊進行基于共享內存的快速數據接收;通信加速內核模塊的數據傳輸管理子模塊首先讀取連接管控子模塊維護和管理的連接控制塊表,判斷是否存在當前接收操作對應的連接,若不存在,則表明通信雙方VM不在同一臺物理計算機上,轉操作系統(tǒng)常規(guī)流程基于TCP連接來接收數據,否則判斷通信雙方VM的虛擬組ID相同,如果不相同,則轉操作系統(tǒng)常規(guī)流程基于TCP連接來接收數據,否則按照共享內存的方式接收數據如果接收緩沖區(qū)不為空,則目標VM接收其中的數據,并將已接收數據字節(jié)數增加相應的值;若接收操作完畢,則數據接收流程結束,否則按以下方法處理2.3.3.2.1當本次I/O為非阻塞式時,轉第2.3.3步;2.3.3.2.2當本次I/O為阻塞式時,則將本接收任務添加到連接控制塊的等待接收的睡眠VM隊列,調用操作系統(tǒng)功能進行睡眠,直至源VM通過通信加速內核模塊的通告處理子模塊傳遞發(fā)送數據事件喚醒本任務,轉第2.3.3步;2.3.4若當前系統(tǒng)調用是關閉網絡連接,則2.3.4.1通信加速內核模塊的連接管控子模塊調用VM遷移支持子模塊判斷其維護的該VM當前位置號拷貝與VMM當前位置號表中的對應值是否一致;如果一致,表明通信雙方VM未發(fā)生遷移,直接轉第2.3.4.2步關閉連接;如果不一致,表明在即將關閉網絡連接前VM發(fā)生了遷移,進行遷移輔助處理首先讀取VMM的在線遷移子模塊維護的當前位置號表中的當前位置號,并將其更新到該VM的VM遷移支持子模塊維護的拷貝中;為了對已經發(fā)送但尚未被接收到的數據進行處理,查詢連接管控子模塊中是否注冊了該連接對應的連接控制塊2.3.4.1.1如果注冊了,讀取VMM中的已發(fā)送和已接收的字節(jié)數,若前者大于后者,則表明仍有數據未被接收;當仍有數據未被接收時,由于遷移后通信雙方VM不在一臺物理計算機上,若當前VM是源VM,則等待直到目標VM的接收緩沖區(qū)為空,若當前VM是目標VM,則請數據發(fā)送方將用于發(fā)送的數據緩沖區(qū)中的數據重發(fā)一遍,并接收網絡上傳輸的重發(fā)數據;2.3.4.1.2如果未注冊,則判斷當前VM是源VM還是目標VM,如果為源VM,則等待直至網上傳輸的數據被接收完畢;如果當前VM為目標VM,則讀取網絡上傳輸的剩余數據;2.3.4.2通信加速內核模塊的數據傳輸管理子模塊讀取連接管控子模塊維護和管理的連接控制塊表,判斷是否存在當前操作對應的連接,若不存在,則轉操作系統(tǒng)常規(guī)流程關閉TCP連接,否則判斷通信的另一方VM是否在睡眠,若其正在睡眠,則請求VMM的通告管理子模塊通過事件緩沖區(qū)向對方發(fā)送事件,用于通知后者網絡連接已經斷開且可以釋放數據緩沖區(qū),通告管理子模塊通過VMM的事件注入子模塊向VM注入當前事件對應的中斷,VM中的通信加速內核模塊的通告處理子模塊接收中斷;2.3.4.3調用VMM的域間共享內存子模塊以釋放雙方的數據緩沖區(qū),判斷對方是否已經關閉連接,如果已經關閉,則通過連接管控子模塊回收當前連接控制塊;2.4 VMM關閉IP為addr、所屬組ID為gid、組密鑰為key的VM,VMM的虛擬機組管理子模塊從組中刪除該VM。
2. 3. 4. 1. 1如果注冊了,讀取VMM中的已發(fā)送和已接收的字節(jié)數,若前者大于后者,則 表明仍有數據未被接收;當仍有數據未被接收時,由于遷移后通信雙方VM不在一臺物理計 算機上,若當前VM是源VM,則等待直到目標VM的接收緩沖區(qū)為空,若當前VM是目標VM, 則請數據發(fā)送方將用于發(fā)送的數據緩沖區(qū)中的數據重發(fā)一遍,并接收網絡上傳輸的重發(fā)數 據;2. 3. 4. 1. 2如果未注冊,則判斷當前VM是源VM還是目標VM,如果為源VM,則等待直至 網上傳輸的數據被接收完畢;如果當前VM為目標VM,則讀取網絡上傳輸的剩余數據;2. 3. 4. 2通信加速內核模塊的數據傳輸管理子模塊讀取連接管控子模塊維護和管理的 連接控制塊表,判斷是否存在當前操作對應的連接,若不存在,則轉操作系統(tǒng)常規(guī)流程關閉 TCP連接,否則判斷通信的另一方VM是否在睡眠,若其正在睡眠,則請求VMM的通告管理子 模塊通過事件緩沖區(qū)向對方發(fā)送事件,用于通知后者網絡連接已經斷開且可以釋放數據緩 沖區(qū),通告管理子模塊通過VMM的事件注入子模塊向VM注入當前事件對應的中斷,VM中的 通信加速內核模塊的通告處理子模塊接收中斷;2. 3. 4. 3調用VMM的域間共享內存子模塊以釋放雙方的數據緩沖區(qū),判斷對方是否已 經關閉連接,如果已經關閉,則通過連接管控子模塊回收當前連接控制塊;2. 4 VMM關閉IP為addr、所屬組ID為gid、組密鑰為key的VM,VMM的虛擬機組管理 子模塊從組中刪除該VM。2.如權利要求1所述的支持在線遷移的虛擬機間快速通信方法,其特征在于所述連接 控制塊數據結構包含以下信息通信的VM雙方的IP地址和端口號;I/O模式標志位;一個 發(fā)送緩沖區(qū)和一個接收緩沖區(qū),發(fā)送緩沖區(qū)和接收緩沖區(qū)對應不同的物理內存,本地接收 緩沖區(qū)和遠地的發(fā)送緩沖區(qū)共享同一片物理內存。
3.如權利要求1所述的支持在線遷移的虛擬機間快速通信方法,其特征在于所述虛擬 機組管理子模塊對虛擬機系統(tǒng)中需要進行通信加速的VM進行組管理的方法為3. 1根據VM配置文件中的屬性值設置VM的IP為addr,其所屬組ID為gid,有通信加 速需求的VM被分配相同的組ID,組密鑰為key ;3. 2判斷是否是首次在本VMM之上啟動虛擬機組ID為gid的VM 3. 2. 1若是,則虛擬機組管理子模塊創(chuàng)建編號為gid的虛擬機組,其訪問密鑰為key ;3.2. 2若不是,則獲得gid對應的虛擬機組并判斷提供的key與虛擬機組的key是否一 致如果一致,則創(chuàng)建編號為gid的虛擬機組,其訪問密鑰為key,在虛擬機組的VM鏈表中 注冊本VM,向VMM中的域間共享內存子模塊發(fā)出請求,由后者為本VM創(chuàng)建事件緩沖區(qū);如 果不一致,則報“VM啟動失敗”信息。
4.如權利要求1所述的支持在線遷移的虛擬機間快速通信方法,其特征在于所述初始 化子模塊構建VM間通信加速和系統(tǒng)調用分析所需的軟件環(huán)境的方法為4. 1初始化子模塊請求操作系統(tǒng)保留連續(xù)的虛地址空間,并向VMM的域間共享內存子 模塊發(fā)出請求,由VMM建立共享內存緩沖區(qū),用于存放相互通信的VM的連接控制塊信息、待 傳輸的數據和待處理的事件;4.2初始化子模塊獲取當前VM的IP地址及其所在物理計算機的MAC地址,調用VMM的 在線遷移子模塊,通過函數轉換,生成該虛擬機系統(tǒng)中每個VM唯一的位置標志信息——當 前位置號;VMM的在線遷移子模塊在共享緩沖區(qū)中為所有VM維護一個當前位置號表,存儲 虛擬機系統(tǒng)中每個VM的ID及該VM的最新當前位置號;在生成當前位置號后,初始化子模 塊調用在線遷移子模塊將該VM的ID及其當前位置號加入表中,并調用通信加速內核模塊 的VM遷移支持子模塊,使得后者獲取并維護該VM的當前位置號的一個拷貝。
5.如權利要求1所述的支持在線遷移的虛擬機間快速通信方法,其特征在于所述虛擬 機組管理子模塊從組中刪除IP為addr、所屬組ID為gid、組密鑰為key的VM的方法為5. 1虛擬機組管理子模塊獲得gid對應的虛擬機組;5. 2判斷提供的key與虛擬機組的key是否一致,如果不一致,則報“權限不夠,VM刪 除失敗”信息,轉至操作系統(tǒng)常規(guī)流程;5. 3調用通告管理子模塊處理當前VM的事件緩沖區(qū)中事件,當事件緩沖區(qū)為空時,調 用域間共享內存子模塊釋放事件緩沖區(qū)所占內存;5. 4調用VMM進行常規(guī)的VM刪除流程5. 4. 1如果刪除失敗,則報“VM刪除失敗”,轉至操作系統(tǒng)常規(guī)流程;5. 4. 2如果刪除成功,則將當前VM從本虛擬機組信息中刪除,并報告“VM刪除成功”; VMM判斷當前虛擬機組是否為空,如果為空,則釋放本虛擬機組連接控制塊表所占用的內存 空間,并刪除組ID為gid的虛擬機組,報告“組ID為gid的虛擬機組已被刪除”。
全文摘要
本發(fā)明公開了一種支持在線遷移的虛擬機間快速通信方法,方案是構造支持VM遷移的基于共享內存機制的通信加速內核模塊,在該模塊內部添加初始化、系統(tǒng)調用分析器、連接管控、通告處理、數據傳輸管理、VM遷移支持六個子模塊;擴展VMM功能,添加虛擬機組管理和通告管理兩個子模塊,并修改在線遷移子模塊;由VMM和VM組成一個虛擬機系統(tǒng),采用虛擬機系統(tǒng)對VM間通信進行加速對VM進行組管理,構建VM間通信加速和系統(tǒng)調用分析所需的軟件環(huán)境,旁路掉與網絡操作無關的系統(tǒng)調用,選擇與網絡操作有關的系統(tǒng)調用分類進行處理,完成同一物理計算機上的VM間的基于共享內存的快速通信。本發(fā)明在Socket與TCP/IP層實現、對應用編程透明、支持虛擬機在線遷移。
文檔編號H04L29/08GK101859263SQ201010198970
公開日2010年10月13日 申請日期2010年6月12日 優(yōu)先權日2010年6月12日
發(fā)明者任怡, 劉曉建, 吳慶波, 戴華東, 管劍波, 譚郁松 申請人:中國人民解放軍國防科學技術大學