專利名稱:虛擬機監(jiān)控器高效網(wǎng)絡(luò)通信的實現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明主要是涉及虛擬機監(jiān)控器(Virtual Machine Monitor,簡稱VMM)網(wǎng) 絡(luò)通信的高效實現(xiàn)方法以及優(yōu)化硬件虛擬化技術(shù),實現(xiàn)多虛擬機環(huán)境下高效接收 主機網(wǎng)絡(luò)數(shù)據(jù)包的機制以及虛擬機與主機和外界之間的通信,并通過優(yōu)化硬件虛 擬化技術(shù),降低虛擬機占用的主機資源。屬于計算機虛擬機監(jiān)控器技術(shù)領(lǐng)域。
(二)
背景技術(shù):
1、虛擬化技術(shù)和虛擬機監(jiān)控器
虛擬化技術(shù)出現(xiàn)于上世紀六七十年代,主要應(yīng)用在大型機上,初衷是為了實 現(xiàn)更高的設(shè)備利用率,使多個用戶能夠盡可能的利用大型機豐富的系統(tǒng)資源,節(jié) 省成本。虛擬化技術(shù)通過軟件手段對計算機中的重要的接口進行模擬和抽象,從 而實現(xiàn)虛擬化軟件。根據(jù)虛擬化軟件所處的位置以及它所虛擬的接口的不同,虛 擬化技術(shù)又分為系統(tǒng)級虛擬化技術(shù)和進程級虛擬化技術(shù)。進程級虛擬化技術(shù)中的 虛擬化軟件稱為運行時(Runtime),以虛擬應(yīng)用二進制接口 (ABI, Applicatl/On Binary Interface)為目標。系統(tǒng)級虛擬化技術(shù)中的虛擬化軟件稱為虛擬機監(jiān)控器 (VMM),以虛擬指令集系統(tǒng)架構(gòu)(ISA, Instructl/On System Architecture)為目標。 系統(tǒng)級虛擬化的核心是構(gòu)建虛擬機監(jiān)視器,然后在其上創(chuàng)建虛擬機,將本來直接 運行于實際硬件平臺的操作系統(tǒng)放在虛擬機中運行,這樣的操作系統(tǒng)稱為客戶操 作系統(tǒng)(Guest OS),其中原本可直接運行的某些操作通過虛擬層來運行。系統(tǒng) 級虛擬化軟件分為三種類型,1)基于硬件的虛擬機監(jiān)控器,以XEN為代表。2) 基于主機操作系統(tǒng)的虛擬機監(jiān)控器,以VMware、 kvm為代表。3)雙向設(shè)計的虛 擬機。通過虛擬機監(jiān)控器可以在單個物理服務(wù)器上運行多個虛擬機,每個虛擬機封 裝一個客戶操作系統(tǒng),使得運行在各個客戶操作系統(tǒng)中的程序具有很好的安全隔 離性和可擴展性,實現(xiàn)服務(wù)整合,極大的提高了各種資源的利用率。
通過使用虛擬化技術(shù),服務(wù)器被邏輯地分為-"個主機, 一個虛擬機監(jiān)控器和 多個虛擬機。主機接收來自網(wǎng)絡(luò)上的數(shù)據(jù),然后將這些數(shù)據(jù)多路復(fù)用到多個虛擬 機上。每個虛擬機運行一個操作系統(tǒng),使用復(fù)用的數(shù)據(jù)在操作系統(tǒng)上執(zhí)行一個網(wǎng) 絡(luò)監(jiān)控程序。虛擬機監(jiān)控器隔離虛擬機并通過調(diào)度解決它們之間的沖突問題。此 外,整個架構(gòu)應(yīng)具有很好的隔離性、可擴展性和可靠性,且能夠簡單方便的進行 部署和管理維護。由于虛擬機監(jiān)控器的網(wǎng)絡(luò)性能的優(yōu)劣很大程度上決定了網(wǎng)絡(luò)監(jiān) 控系統(tǒng)的效率,因此優(yōu)化虛擬機監(jiān)控器的網(wǎng)絡(luò)性能是很值得研究的。 2、硬件虛擬化技術(shù)
虛擬化技術(shù)通過VMM,可以將底層的硬件資源加以抽象來呈現(xiàn)給客戶操作 系統(tǒng),從而可以隱藏底層硬件真正的細節(jié),為客戶操作系統(tǒng)虛擬出一個抽象的硬 件層。因為軟件虛擬化技術(shù)的種種難以克服缺點,CPU廠商推出了基于CPU的 硬件虛擬化技術(shù)。支持虛擬技術(shù)的CPU帶有特別優(yōu)化過的指令集來控制虛擬過 程,通過這些指令集,VMM會很容易實現(xiàn),而且相比軟件的虛擬實現(xiàn)方式會很 大程度上提高性能。硬件虛擬化技術(shù)可提供基于芯片的功能,借助兼容VMM軟 件能夠改進純軟件解決方案。由于虛擬化硬件可提供全新的架構(gòu),支持操作系統(tǒng) 直接在上面運行,從而無需進行二進制轉(zhuǎn)換,減少了相關(guān)的性能開銷,極大簡化 了VMM設(shè)計,進而使VMM能夠按通用標準進行編寫,性能更加強大。
一個使用硬件虛擬化的虛擬機監(jiān)控器負責為多個客戶操作系統(tǒng)系統(tǒng)提供硬 件支持,同時保證各個客戶操作系統(tǒng)的安全性,高效性以及資源的隔離性。硬件 虛擬化技術(shù)提供虛擬機監(jiān)控器(VMM)和客戶操作系統(tǒng)之間快速切換的機制, 有選擇的截獲客戶操作系統(tǒng)中的指令和行為的能力,DMA對內(nèi)存存取操作的保 護,對中斷處理以及虛擬中斷的支持,提供標有g(shù)uest/host標記的TLB以減少虛 擬化的負擔等等。
硬件虛擬化架構(gòu)定義了一個異常行為集合,該集合包括所有可能影響VMM或客戶操作系統(tǒng)的指令或事件,通過截獲該集合中的異常行為來進行相應(yīng)操作。 相對于在x86體系結(jié)構(gòu)下的最高特權(quán)級是ring 0級,硬件虛擬化架構(gòu)定義了一些新 的指令、寄存器以及控制域來實現(xiàn)一個更高特權(quán)級的模式,該特權(quán)級也被稱為
"ring-l" (AMD)級或者"root模式"(Intel)。同時,硬件虛擬化架構(gòu)還定義了 虛擬機控制結(jié)構(gòu)體,(對于AMD的SVM架構(gòu)來說是Virtual Machine Control Blocks(VMCB),對于Intel的VT架構(gòu)來說是Virtual Machine Control S加ct(VMCS)),該結(jié)構(gòu)體用于對異常行為的控制,并且不允許在處理器核心之 間共享,它控制著虛擬機監(jiān)控器和客戶操作系統(tǒng)的切換。
硬件虛擬化技術(shù)引入了一些新的指令。用來運行一個客戶操作系統(tǒng),管理客 戶操作系統(tǒng)的狀態(tài)信息,實現(xiàn)客戶操作系統(tǒng)同VMM的交互等等。VMM通過建立 正確的虛擬機控制結(jié)構(gòu)體,運行特定指令初始客戶操作系統(tǒng)的運行。客戶操作系 統(tǒng)初始完畢后,會一直運行到下一次VMEXIT條件發(fā)生,此時控制權(quán)返回到VMM。 發(fā)生VMEXIT時,客戶操作系統(tǒng)的狀態(tài)信息,包括發(fā)生VMEXIT的原因,都存放在 了虛擬機控制結(jié)構(gòu)體的狀態(tài)域中。VMM從虛擬機控制結(jié)構(gòu)體中獲取被截獲的指 令或行為,通過模擬、忽略或者改變執(zhí)行方式的方法來進行相應(yīng)操作,進而更新 虛擬機控制結(jié)構(gòu)體的相關(guān)狀態(tài)信息。系統(tǒng)開發(fā)人員可以自行規(guī)定VMM對客戶操 作系統(tǒng)監(jiān)管的程度,這是通過設(shè)置產(chǎn)生VMEXIT的條件的規(guī)模來決定的。針對每 一種VMEXIT條件,VMM都必須有相應(yīng)的處理程序來實現(xiàn)在客戶操作系統(tǒng)中該條 件想要的結(jié)果,然后將該結(jié)果轉(zhuǎn)化為適當?shù)男问綄懭胩摂M機控制結(jié)構(gòu)體,進而在 客戶操作系統(tǒng)進入時返回給客戶操作系統(tǒng)。由于虛擬機的每一次l/0操作都回引 起虛擬機與主機之間的切換,因此虛擬機會占用主機大量的資源。
3、虛擬機的網(wǎng)絡(luò)通信
虛擬機的網(wǎng)絡(luò)通信一般都是由虛擬機監(jiān)控器提供一個特殊的虛擬設(shè)備,例如 虛擬網(wǎng)卡(Virtual Ethernet, VE),在多個虛擬機環(huán)境下要共享主機的網(wǎng)絡(luò)數(shù)據(jù) 包則需要虛擬網(wǎng)橋(Virtual Bridge, VB)實現(xiàn)數(shù)據(jù)包的廣播或多播發(fā)送,以開源 虛擬機KVM(Kernel-base Virtual Machine,基于內(nèi)核的虛擬機)為例,它使用Linux 中的虛擬網(wǎng)卡TUN/TAP和虛擬網(wǎng)橋與主機和外界進行通信。由于TUN/TAP集成了字符設(shè)備和網(wǎng)絡(luò)設(shè)備,其中網(wǎng)絡(luò)設(shè)備TAP負責接受和發(fā)送數(shù)據(jù)包,而字符設(shè)備 TUN負責數(shù)據(jù)包在用戶空間和內(nèi)核空間的拷貝。當數(shù)據(jù)包到達主機網(wǎng)絡(luò)網(wǎng)卡之 后,網(wǎng)卡驅(qū)動判斷時候是否有網(wǎng)橋存在,如果存在將數(shù)據(jù)包通過網(wǎng)橋廣播轉(zhuǎn)發(fā)至 網(wǎng)絡(luò)設(shè)備TAP的數(shù)據(jù)包接收隊列,然后TAP通知字符設(shè)備TUN有數(shù)據(jù)包到達, 這時TUN從數(shù)據(jù)包接收隊列將數(shù)據(jù)包從內(nèi)核空間拷貝至用戶空間,再將數(shù)據(jù)包 拷貝至虛擬機網(wǎng)卡的內(nèi)存空間,之后虛擬機網(wǎng)卡更新中斷,將網(wǎng)卡某些位置位, 虛擬機發(fā)現(xiàn)網(wǎng)卡有數(shù)據(jù)包到來,則執(zhí)行l(wèi)/0指令,導(dǎo)致虛擬機退出到KVM中, 在KVM中解析執(zhí)行失敗的I/O指令,模擬該指令的執(zhí)行,并向虛擬機的中斷描 述符表中注入中斷,之后恢復(fù)虛擬機的運行,在虛擬機的操作系統(tǒng)中,調(diào)用網(wǎng)卡 的中斷處理函數(shù),從而完成數(shù)據(jù)包的接收。由于過多的虛擬設(shè)備導(dǎo)致數(shù)據(jù)包的傳 輸路徑比較長,傳輸效率比較低,尤其是在多虛擬機環(huán)境下,這種網(wǎng)絡(luò)通信方式 會導(dǎo)致虛擬機無法實時可靠的得到數(shù)據(jù)包。
發(fā)明內(nèi)容
1 、目的
本發(fā)明的目的是為虛擬機監(jiān)控器提供一種新的網(wǎng)絡(luò)通信模型,它實現(xiàn)了虛擬 機與主機以及與外界之間高效的通信方式,減少虛擬機與主機的切換次數(shù),并降 低虛擬機的開銷,特別是在多虛擬機環(huán)境下,提高虛擬機處理數(shù)據(jù)包的效率,這 樣在物理服務(wù)器上部署虛擬機監(jiān)控器,可以將主機收到的數(shù)據(jù)包全部高效的轉(zhuǎn)發(fā) 給一個或多個虛擬機,從而可以使運行與虛擬機之內(nèi)的客戶操作系統(tǒng)高效的運行 業(yè)務(wù)程序,實現(xiàn)資源的整合,提高物理服務(wù)器的利用率。
2 、技術(shù)方案
本發(fā)明一種虛擬機監(jiān)控器高效網(wǎng)絡(luò)通信的實現(xiàn)方法,其技術(shù)方案由以下兩個 部分組成
(1)、實現(xiàn)一個獨立的Bridge?!姥耄谶@個模塊中使用用戶態(tài)通信機制維持虛擬 機與主機和外界的通信,并實現(xiàn)了虛擬機多播組,每一個虛擬機屬于一個多播組, 利用數(shù)據(jù)包的多播機制將數(shù)據(jù)包同時發(fā)送給多個虛擬機,提高在多虛擬機環(huán)境下數(shù)據(jù)包傳輸?shù)男剩瑥亩娲摂M網(wǎng)橋、虛擬字符設(shè)備和虛擬網(wǎng)絡(luò)設(shè)備,其具體 步驟如下
歩驟l:當Bridge模塊裝載進內(nèi)核時,創(chuàng)建用戶態(tài)通信套接字,并注冊處理 數(shù)據(jù)包的函數(shù),當有數(shù)據(jù)包到Bridge模塊時,由該函數(shù)將數(shù)據(jù)包發(fā)送至虛擬機。 如果虛擬機啟動時啟用了網(wǎng)絡(luò)設(shè)備,則在虛擬機監(jiān)控器初始化網(wǎng)絡(luò)設(shè)備時,初始 化一個數(shù)據(jù)處理線程用來維持網(wǎng)絡(luò)通信。在這個線程中分別初始化一個數(shù)據(jù)包接 收和發(fā)送隊列,之后在這個線程中利用用戶態(tài)通信機制向Bridge模塊注冊一個虛 擬機網(wǎng)絡(luò)設(shè)備,封裝一個Netlink數(shù)據(jù)包向內(nèi)核發(fā)送,在其中包含虛擬機的進程 描述符和要加入的廣播組,在虛擬機監(jiān)控器中解析這個數(shù)據(jù)包,得到并保存虛擬 機的進程描述符,并將其加入相應(yīng)的廣播組中;
步驟2:在主機網(wǎng)卡的驅(qū)動程序中定義一個鉤子函數(shù),當Bridge模塊裝載進 內(nèi)核時,通過對該鉤子函數(shù)的賦值,從而建立與主機網(wǎng)卡驅(qū)動的聯(lián)系,當主機網(wǎng) 卡收到數(shù)據(jù)包后觸發(fā)主機網(wǎng)卡的驅(qū)動程序,在主機網(wǎng)卡的驅(qū)動程序中判斷該鉤子 函數(shù)是否賦值,如果已經(jīng)賦值,則通過該鉤子函數(shù)將數(shù)據(jù)包的信息反饋給Bridge 模塊,Bridge模塊根據(jù)數(shù)據(jù)包的信息決定是否發(fā)送到一個虛擬機或是一個廣播 組;
步驟3:在虛擬機監(jiān)控器中,利用Bridge模塊將數(shù)據(jù)包發(fā)送到數(shù)據(jù)處理線程, 讀取數(shù)據(jù)包,解析之后將該數(shù)據(jù)包拷貝到虛擬機網(wǎng)卡的內(nèi)存空間;之后通過虛擬 機網(wǎng)卡置位,虛擬機執(zhí)行l(wèi)/0指令導(dǎo)致虛擬機退出到虛擬機監(jiān)控器中,在虛擬機 監(jiān)控器中將中斷處理過程,即中斷注入到虛擬機的中斷描述符表中,模擬l/0指 令的執(zhí)行,恢復(fù)虛擬機運行,完成數(shù)據(jù)包的接收;
步驟4:當虛擬機發(fā)送數(shù)據(jù)包時,虛擬機執(zhí)行l(wèi)/0指令,將數(shù)據(jù)包放到虛擬 機網(wǎng)卡的內(nèi)存區(qū)域,令虛擬機退出到虛擬機監(jiān)控器中。在虛擬機監(jiān)控器中得到1/0 指令的內(nèi)容及操作的端口等信息,之后將通過指令模擬的方式執(zhí)行數(shù)據(jù)包的拷 貝,從虛擬機的網(wǎng)卡空間拷貝到通信線程的數(shù)據(jù)包發(fā)送隊列,通過用戶態(tài)通信機 制發(fā)送出去;(2)、利用輪詢機制減少虛擬機與主機的切換次數(shù),輪詢到來的網(wǎng)絡(luò)l/0事件,進 一步提高虛擬機監(jiān)控器與虛擬機之間的的網(wǎng)絡(luò)通信效率,其具體歩驟如下
歩驟(l):將數(shù)據(jù)包拷貝到虛擬機的網(wǎng)卡空間后,更新中斷,使得虛擬機退出 到虛擬機監(jiān)控器中,在虛擬機監(jiān)控器中解析導(dǎo)致退出的指令,得到該i/o指令的 內(nèi)容及操作的端口,激活數(shù)據(jù)處理函數(shù);
步驟(2):在數(shù)據(jù)處理函數(shù)中,首先在虛擬機控制結(jié)構(gòu)(VMCS)中的I/O bitmap 中清除該l/0端口的允許位,關(guān)閉對該端口的操作引起的虛擬機退出,査看數(shù)據(jù) 包接收隊列,判斷其中數(shù)據(jù)包的個數(shù)是否超過p個,如果不是則讀取所有的數(shù)據(jù) 包,如果是則讀取p個數(shù)據(jù)包,進入下述步驟(3)處理讀到的數(shù)據(jù)包;
步驟(3):將p個數(shù)據(jù)包拷貝至虛擬機的網(wǎng)卡空間后,向虛擬機的中斷描述符 表中注入中斷,之后重新進入虛擬機,虛擬機重新運行后,會發(fā)現(xiàn)虛擬機網(wǎng)卡有 數(shù)據(jù)到來,從而觸發(fā)虛擬機的網(wǎng)卡驅(qū)動程序,從而完成虛擬機的網(wǎng)絡(luò)數(shù)據(jù)包的接 收;
步驟(4):每隔一定時間重復(fù)步驟(2)和步驟(3),輪詢是否有數(shù)據(jù)包到虛擬機的 網(wǎng)卡空間并處理。 3優(yōu)點及效果
本發(fā)明一種虛擬機監(jiān)控器高效網(wǎng)絡(luò)通信的實現(xiàn)方法,其優(yōu)點及效果是 首先,該方法直接從物理網(wǎng)卡獲取數(shù)據(jù)包,并通過用戶態(tài)通信機制以廣播或 多播的形式發(fā)送到一個或多個虛擬機中,從而取代了虛擬網(wǎng)橋,虛擬網(wǎng)卡,虛擬 字符設(shè)備等,提高虛擬機監(jiān)控器網(wǎng)絡(luò)通信的速度;其次,該方法每隔固定時間,
讓虛擬機退出到虛擬機監(jiān)控器中輪詢數(shù)據(jù)包接收隊列,將所有數(shù)據(jù)包一起處理, 減少虛擬機與主機的切換次數(shù),進一步提高虛擬機監(jiān)控器網(wǎng)絡(luò)通信的效率。在高 速網(wǎng)絡(luò)環(huán)境中,可以將所有數(shù)據(jù)包拷貝給虛擬機,因此本發(fā)明提出了一種全新的 虛擬機監(jiān)控器網(wǎng)絡(luò)通信模型,具有很好的實用價值和前景。
圖1系統(tǒng)總體框架示意2虛擬機監(jiān)控器網(wǎng)絡(luò)模型對應(yīng)示意圖 圖3虛擬機監(jiān)控器網(wǎng)絡(luò)數(shù)據(jù)處理示意圖
具體實施例方式
參見圖l、圖2、圖3所示,本發(fā)明一種虛擬機監(jiān)控器的高效網(wǎng)絡(luò)通信的實現(xiàn) 方法,其具體實現(xiàn)方式由以下兩個部分組成
1、實現(xiàn)一個獨立的Bridge模塊,在這個模塊中使用用戶態(tài)通信機制維持虛擬機 與主機和外界的通信,并實現(xiàn)了虛擬機多播組,每一個虛擬機可以屬于一個多播 組中,利用數(shù)據(jù)包的多播機制將數(shù)據(jù)包同時發(fā)送給多個虛擬機,提高在多虛擬機 環(huán)境下數(shù)據(jù)包傳輸?shù)男?,從而替代虛擬網(wǎng)橋、虛擬機字符設(shè)備和虛擬網(wǎng)絡(luò)設(shè)備, 其具體步驟如下
歩驟l:當Bridge模塊裝載進內(nèi)核時,創(chuàng)建用戶態(tài)通信套接字,并注冊處理 數(shù)據(jù)包的函數(shù),當有數(shù)據(jù)包到Bridge模塊時,由該函數(shù)將數(shù)據(jù)包發(fā)送自虛擬機。 如果虛擬機啟動時啟用了網(wǎng)絡(luò)設(shè)備,則在虛擬機監(jiān)控器初始化網(wǎng)絡(luò)設(shè)備時,初始 化一個數(shù)據(jù)處理線程用來維持網(wǎng)絡(luò)通信。在這個線程分別一個初始化數(shù)據(jù)包接收 和發(fā)送隊列,之后在這個線程中利用用戶態(tài)通信機制向Bridge模塊注冊一個虛擬 機網(wǎng)絡(luò)設(shè)備,封裝一個Netlink數(shù)據(jù)包向內(nèi)核發(fā)送,在其中包含虛擬機的進程描 述符和要加入的廣播組,在虛擬機監(jiān)控器中解析這個數(shù)據(jù)包,得到并保存虛擬機 的進程描述符,并將其加入相應(yīng)的廣播組中;
步驟2:在主機網(wǎng)卡的驅(qū)動程序中定義一個鉤子函數(shù),當Bridge模塊裝載進 內(nèi)核時,通過對該鉤子函數(shù)的賦值,從而建立與主機網(wǎng)卡驅(qū)動的聯(lián)系,當主機網(wǎng) 卡收到數(shù)據(jù)包后,觸發(fā)網(wǎng)卡的驅(qū)動程序,在網(wǎng)卡的驅(qū)動程序中判斷該鉤子函數(shù)是 否賦值,如果已經(jīng)賦值,則通過Bridge模塊將數(shù)據(jù)包廣播發(fā)送到加入廣播組的每 一個虛擬機中;
步驟3:在虛擬機監(jiān)控器中,利用Bridge模塊將數(shù)據(jù)包發(fā)送到數(shù)據(jù)處理線程, 讀取數(shù)據(jù)包,解析之后將其拷貝到虛擬機網(wǎng)卡的內(nèi)存空間;之后通過虛擬機網(wǎng)卡 置位,虛擬機執(zhí)行l(wèi)/0指令導(dǎo)致其退出到虛擬機監(jiān)控器中,在虛擬機監(jiān)控器中將中斷注入到虛擬機的中斷描述符表中,模擬l/0指令的執(zhí)行,恢復(fù)虛擬機運行, 完成數(shù)據(jù)包的接收;
歩驟4:當虛擬機發(fā)送數(shù)據(jù)包時,虛擬機執(zhí)行l(wèi)/0指令,將數(shù)據(jù)包放到網(wǎng)卡 的內(nèi)存區(qū)域,導(dǎo)致虛擬機退出到虛擬機監(jiān)控器中。在虛擬機監(jiān)控器中得到l/0指 令的內(nèi)容及操作的端口等信息,之后將通過指令模擬的方式執(zhí)行數(shù)據(jù)包的拷貝, 從虛擬機的網(wǎng)卡空間拷貝到通信線程的數(shù)據(jù)包發(fā)送隊列,通過用戶態(tài)通信的機制 發(fā)送出去;
2、利用輪詢機制減少虛擬機與主機的切換次數(shù),輪詢到來的網(wǎng)絡(luò)l/0事件,進 一步提高虛擬機監(jiān)控器與虛擬機之間的的網(wǎng)絡(luò)通信效率,其具體步驟如下
歩驟l:數(shù)據(jù)包到達虛擬機的網(wǎng)卡之后,更行終端,使得虛擬機退出到虛擬 機監(jiān)控器中,在虛擬機監(jiān)控器中解析導(dǎo)致退出的指令,得到該l/0操作的端口, 激活數(shù)據(jù)處理函數(shù);
歩驟2:在數(shù)據(jù)處理函數(shù)中,首先在虛擬機控制結(jié)構(gòu)(VMCS)中的I/O bitmap 中清除該l/0端口的允許位,關(guān)閉對該端口的操作引起的虛擬機退出,查看數(shù)據(jù) 包接收隊列,判斷其中數(shù)據(jù)包的個數(shù)是否超過p個,如果不是則讀取所有的數(shù)據(jù) 包,如果是則讀取p個數(shù)據(jù)包,進入步驟5處理讀到的數(shù)據(jù)包;
步驟3:將p個數(shù)據(jù)包拷貝完成后,向虛擬機的中斷描述符表中注入中斷, 之后重新進入虛擬機,觸發(fā)虛擬機的網(wǎng)卡驅(qū)動程序,從而完成虛擬機的網(wǎng)絡(luò)數(shù)據(jù) 包的接收;
步驟4:每隔一定時間重復(fù)步驟4和步驟5,輪詢是否有數(shù)據(jù)包到來虛擬機 的網(wǎng)卡空間并處理。
權(quán)利要求
1、一種虛擬機監(jiān)控器高效網(wǎng)絡(luò)通信的實現(xiàn)方法,其特征在于它是由以下兩個部分組成(1)、實現(xiàn)一個獨立的Bridge模塊,在這個模塊中使用用戶態(tài)通信機制維持虛擬機與主機和外界的通信,并實現(xiàn)虛擬機多播組,每一個虛擬機屬于一個多播組,利用數(shù)據(jù)包的多播機制將數(shù)據(jù)包同時發(fā)送給多個虛擬機,提高在多虛擬機環(huán)境下數(shù)據(jù)包傳輸?shù)男?,從而替代虛擬網(wǎng)橋、虛擬字符設(shè)備和虛擬網(wǎng)絡(luò)設(shè)備,其具體步驟如下步驟1當Bridge模塊裝載進內(nèi)核時,創(chuàng)建用戶態(tài)通信套接字,并注冊處理數(shù)據(jù)包的函數(shù),當有數(shù)據(jù)包到Bridge模塊時,由該函數(shù)將數(shù)據(jù)包發(fā)送至虛擬機;如果虛擬機啟動時啟用了網(wǎng)絡(luò)設(shè)備,則在虛擬機監(jiān)控器初始化網(wǎng)絡(luò)設(shè)備時,初始化一個數(shù)據(jù)處理線程用來維持網(wǎng)絡(luò)通信;在這個線程中分別初始化一個數(shù)據(jù)包接收和發(fā)送隊列,之后在這個線程中利用用戶態(tài)通信機制向Bridge模塊注冊一個虛擬機網(wǎng)絡(luò)設(shè)備,封裝一個Netlink數(shù)據(jù)包向內(nèi)核發(fā)送,在其中包含虛擬機的進程描述符和要加入的廣播組,在虛擬機監(jiān)控器中解析這個數(shù)據(jù)包,得到并保存虛擬機的進程描述符,并將其加入相應(yīng)的廣播組中;步驟2在主機網(wǎng)卡的驅(qū)動程序中定義一個鉤子函數(shù),當Bridge模塊裝載進內(nèi)核時,通過對該鉤子函數(shù)的賦值,從而建立與主機網(wǎng)卡驅(qū)動的聯(lián)系,當主機網(wǎng)卡收到數(shù)據(jù)包后觸發(fā)主機網(wǎng)卡的驅(qū)動程序,在主機網(wǎng)卡的驅(qū)動程序中判斷該鉤子函數(shù)是否賦值,如果已經(jīng)賦值,則通過該鉤子函數(shù)將數(shù)據(jù)包的信息反饋給Bridge模塊,Bridge模塊根據(jù)數(shù)據(jù)包的信息決定是否發(fā)送到一個虛擬機或是一個廣播組;步驟3在虛擬機監(jiān)控器中,利用Bridge模塊將數(shù)據(jù)包發(fā)送到數(shù)據(jù)處理線程,讀取數(shù)據(jù)包,解析之后將該數(shù)據(jù)包拷貝到虛擬機網(wǎng)卡的內(nèi)存空間;之后通過虛擬機網(wǎng)卡置位,虛擬機執(zhí)行I/O指令導(dǎo)致虛擬機退出到虛擬機監(jiān)控器中,在虛擬機監(jiān)控器中將中斷注入到虛擬機的中斷描述符表中,模擬I/O指令的執(zhí)行,恢復(fù)虛擬機運行,完成數(shù)據(jù)包的接收;步驟4當虛擬機發(fā)送數(shù)據(jù)包時,虛擬機執(zhí)行I/O指令,將數(shù)據(jù)包放到網(wǎng)卡的內(nèi)存區(qū)域,導(dǎo)致虛擬機退出到虛擬機監(jiān)控器中;在虛擬機監(jiān)控器中得到I/O指令的內(nèi)容及操作的端口信息,之后將通過指令模擬的方式執(zhí)行數(shù)據(jù)包的拷貝,從虛擬機的網(wǎng)卡空間拷貝到通信線程的數(shù)據(jù)包發(fā)送隊列,通過用戶態(tài)通信機制發(fā)送出去;(2)、利用輪詢機制減少虛擬機與主機的切換次數(shù),輪詢到來的網(wǎng)絡(luò)I/O事件,進一步提高虛擬機監(jiān)控器與虛擬機之間的的網(wǎng)絡(luò)通信效率,其具體步驟如下步驟(1)將數(shù)據(jù)包拷貝到虛擬機的網(wǎng)卡空間后,更新中斷,使得虛擬機退出到虛擬機監(jiān)控器中,在虛擬機監(jiān)控器中解析導(dǎo)致退出的指令,得到該I/O指令的內(nèi)容及操作的端口,激活數(shù)據(jù)處理函數(shù);步驟(2)在數(shù)據(jù)處理函數(shù)中,首先在虛擬機控制結(jié)構(gòu)VMCS中的I/O位圖中清除該I/O端口的允許位,關(guān)閉對該端口的操作引起的虛擬機退出,查看數(shù)據(jù)包接收隊列,判斷其中數(shù)據(jù)包的個數(shù)是否超過p個,如果不是則讀取所有的數(shù)據(jù)包,如果是則讀取p個數(shù)據(jù)包,進入下述步驟(3)處理讀到的數(shù)據(jù)包;步驟(3)將p個數(shù)據(jù)包拷貝至虛擬機的網(wǎng)卡空間后,向虛擬機的中斷描述符表中注入中斷,之后重新進入虛擬機,虛擬機重新運行后,會發(fā)現(xiàn)虛擬機網(wǎng)卡有數(shù)據(jù)到來,從而觸發(fā)虛擬機的網(wǎng)卡驅(qū)動程序,從而完成虛擬機的網(wǎng)絡(luò)數(shù)據(jù)包的接收;步驟(4)每隔一定時間重復(fù)步驟(2)和步驟(3),輪詢是否有數(shù)據(jù)包到虛擬機的網(wǎng)卡空間并處理。
全文摘要
一種虛擬機監(jiān)控器高效網(wǎng)絡(luò)通信的實現(xiàn)方法,由兩個部分組成1.在虛擬機監(jiān)控器中實現(xiàn)一個獨立的Bridge模塊,該模塊將直接從主機網(wǎng)卡獲取的數(shù)據(jù)包通過用戶態(tài)通信機制以廣播或者多播的形式發(fā)往虛擬機或虛擬機組,并將接收到的虛擬機或虛擬機組的數(shù)據(jù)包發(fā)送到主機網(wǎng)卡的發(fā)送隊列中,提高虛擬機監(jiān)控器與虛擬機之間的網(wǎng)絡(luò)通信速度。2.避免虛擬機監(jiān)控器與虛擬機的頻繁切換。每隔固定時間,虛擬機退出到虛擬機監(jiān)控器中輪詢數(shù)據(jù)包接收隊列,將所有數(shù)據(jù)包一起處理,減少虛擬機與主機的切換次數(shù),進一步提高虛擬機監(jiān)控器與虛擬機之間的網(wǎng)絡(luò)通信的效率。該方法直接從主機網(wǎng)卡獲取數(shù)據(jù)包,提高虛擬機監(jiān)控器網(wǎng)絡(luò)通信的速度,具有很好的實用價值。
文檔編號H04L29/08GK101557420SQ20091008099
公開日2009年10月14日 申請日期2009年3月31日 優(yōu)先權(quán)日2009年3月31日
發(fā)明者李勝召, 祝明發(fā), 肖利民, 郝沁汾, 博 馬 申請人:北京航空航天大學(xué)