麻豆精品无码国产在线播放,国产亚洲精品成人AA片新蒲金,国模无码大尺度一区二区三区,神马免费午夜福利剧场

一種使用多隊列技術的虛擬機網絡性能優化的實現方法

文檔序號:6362582閱讀:301來源:國知局
專利名稱:一種使用多隊列技術的虛擬機網絡性能優化的實現方法
技術領域
本發明采用基于Virtio的多隊列虛擬化技術,涉及計算機虛擬化技術中的IO虛擬化。尤其涉及一種使用多隊列技術的虛擬機網絡性能優化的實現方法,它是一種虛擬化網絡中采用多隊列方法實現虛擬機和宿主機之間交互的實現方法,屬于計算機技術領域。
背景技術
早在上個世紀60年代末70年代初IBM公司就在大型機上實現了商用的虛擬機,諸多文獻描述了 IBM在OS 360使用的虛擬機的實現以及經典的虛擬機體系結構并描述了利用虛擬機監控器實現虛擬化的方法。研究人員總結了第三代計算機可虛擬性 (Virtualizability):指出可虛擬性主要依賴于計算機指令集中敏感指令集的存在方式。 同時總結了可虛擬性的兩個重要定理定理一對于任何通常意義上的第三代計算機,如果該計算機敏感指令集是特權指令集的子集,就可以在此計算機上創建一個虛擬機監控器。定理二 對于任何通常意義上的第三代計算機,如果該計算機的用戶敏感指令集是特權指令集的子集,就可以在此計算機上創建一個混合式(hybrid)的虛擬機監控器。由于大多數計算機并不滿足定理一的要求,所以一些文獻放松了要求只要符合定理二的要求就可以利用陷入-模擬的方式(trap-and-emulate)完成虛擬化??商摂M化的關鍵是對敏感的非特權指令的處理。對這種指令的不同處理方式引發了下面幾種不同的虛擬化方式。I)基于二進制翻譯的全虛擬化(Full Virtualization with Binary Translation)。這種方式動態的掃描二進制代碼,將敏感指令替換為跳轉到相應模擬例程。 通過這種方式避免敏感指令的產生。VMware公司已經可以提供基于這種方式的商業化解決方案。這是目前唯一的在IA32/Intel 64體系結構下不需要特殊硬件輔助實現全虛擬化的方式。但這種方案也存在明顯的缺陷由于要動態的監控并即時翻譯二進制碼,性能上會有所損失。2)硬件輔助的虛擬化(Hardware Assisted Virtualization)。這種方式通過擴展指令集,通過硬件完成傳統虛擬機監控器(Virtual Machine Monitor, VMM)所需要的陷入以及狀態切換。通過這種方式可以極大地簡化虛擬機的設計。但是由于硬件在狀態切換的時候會保存整個處理器的狀態并切換地址空間,由此帶來的開銷不可忽略,特別是在虛擬機與虛擬機監控器頻繁切換的情況下。本發明專利采用的就是這種方式實現VMM。3)準虛擬化(Para-virtualization)。這種方式通過靜態的改寫客戶操作系統源代碼,通過客戶操作系統與虛擬機監控器顯示協作的方式完成虛擬化策略。開放源代碼的虛擬機監控器Xen就是基于這種技術。這種技術通過VM對VMM的感知,避免了傳統陷入-模擬方式效率較低的問題,但需要對客戶操作系統源代碼進行修改。10設備虛擬化在虛擬環境里,1/0面臨的問題是現實中外設資源是有限的,為了滿足多個客戶機操作系統對外設訪問的需求,VMM必須通過I/O虛擬化的方式復用有限的外設資源?,F代計算機環境中,I/O設備種類豐富,不同廠商生產的具有不同編程接口的I/O設備使I/O 虛擬化的難度相當大。根據不同I/O設備的特點和用途,虛擬化系統中的I/O設備可以分為5類 專用設備(Dedicated Devices) 可分割設備(Partitioned Devices) 共享設備(Shared Devices) 偽脫機設備(Spooled Devices) 物理不存在的設備I/O虛擬化作為系統虛擬化的重要組成部分,同樣可按照實現技術分為軟件I/O 全虛擬化、I/o類虛擬化和硬件輔助I/O全虛擬化。在軟件完全虛擬化、類虛擬化和硬件輔助全虛擬化等虛擬化環境中,I/O設備的虛擬化都不盡相同,其核心在于I/o設備原生驅動(Legacy Driver)的存放位置以及VMM對 I/O設備的處理方式。軟件完全虛擬化中,VMM必須模擬設備硬件,它是在會話的最低級別進行模擬的 (例如,網絡驅動程序)。盡管在該抽象中模擬很干凈,但它同時也是最低效、最復雜的。在類虛擬化中,Guest OS和VMM能夠共同合作,讓模擬更加高效。隨著硬件輔助全虛擬化技術的出現,新的處理器通過加入虛擬化的高級指令來讓Guest OS到VMM的切換更加地高效。 此外,硬件也隨著I/O虛擬化的發展而不斷改進。1)1/0全虛擬化軟件完全虛擬化環境下,一般使用I/O模擬的方式來虛擬化I/O設備。在I/O虛擬化中,設備模型用于完成目標設備的模擬,設備請求的處理和響應。設備模型模擬目標設備的軟件接口,使Guest OS能夠用目標設備的驅動來驅動虛擬設備,進而透明地對虛擬設備進行操作。為了模擬目標設備軟件接口,設備模型也需要同時實現目標設備的功能。這些功能是基于軟件實現的。故設備模型所模擬的目標設備與宿主機的硬件不存在直接的關聯與對應關系,而是建立在一定的運行環境之上。對于不同結構的虛擬機,其設備模型的工作方式是類似的VMM捕獲對虛擬設備地址區域的讀寫操作、捕獲對設備的訪問;在真實硬件設備需要產生中斷時,VMM還必須能觸發Guest OS的中斷。但是,對于不同結構的虛擬機,設備模型所運行的環境和位置可以是不同的。VMware Workstation和KVM都采用宿主操作系統結構,即它們的VMM運行于一個傳統操作系統之上。這類VMM無法獲得對硬件資源的完全控制,因此通常采用軟件模擬的方法來虛擬1/0設備。Guest OS的1/0操作會被VMM捕獲,并轉交給Host OS的一個用戶態進程,該進程通過對Host OS的系統調用來模擬設備的行為。VMware ESX Server對網卡,磁盤等關鍵設備采用了全虛擬化方法。它采用獨立監控器模型,VMM直接運行于硬件之上,直接操作硬件設備。Guest OS看到的是一組統一的虛擬1/0設備。對這些虛擬設備的每一個1/0操作都會陷入到VMM中,由VMM對1/0指令進行解析并映射到實際物理設備,然后直接控制硬件完成。這種方法能夠獲得較好的性能,對客戶操作系統也完全透明。但是由于VMM需要直接控制各種I/O設備,其設計會變的非常復雜,而且無法應對設備的快速更新。模擬技術的最大好處就是不需要修改客戶設備驅動,但其缺點在于效率很低,模擬的難度大。這種方法最大性能開銷在于處理器模式切換包括Guest OS到VMM的切換, 以及從內核帶VMM到用戶態I/O模擬進程的切換。故優化上主要策略就是減少模式切換。 為了減少模式切換,VMware Workstation中的許多I/O指令直接在VMM中處理,只有遇到真正會改變物理設備狀態的操作(如讀寫磁盤,網絡數據包收發),才會切換到I/O模擬進程中進一步處理。2) I/O類虛擬化在完全虛擬化中,I/O驅動包括Guest OS的硬件驅動,設備模擬及VMM中的真實硬件驅動。而類虛擬化不需要這種冗余的三層結構,I/o交互能夠以高于I/O指令級別的抽閑來實現。類虛擬化環境下,Guest OS的內核被修改,原生設備驅動從Guest OS中移出,放入了一個經過VMM授權的設備虛擬機中(Device VM),其余虛擬機中Guest OS的I/O請求都交由這個設備虛擬機處理。而在Guest OS內部,系統為每個虛擬I/O設備安裝一個特殊驅動,該驅動負責I/O請求的傳遞。設備虛擬機在經過VMM授權后,解析受到的I/O請求并映射到實際物理設備,最后交給它的原聲設備驅動程序來控制硬件完成。目前,基于類虛擬化思想的I/O虛擬化有多種主要的實現,如Xen的I/O虛擬化和 Virtio 框架。 3)硬件輔助I/O全虛擬化硬件輔助I/O全虛擬化廣泛應用于Xen中。Xen在引入了硬件虛擬化技術后,其 VMM能夠支持未修改內核的Guest OS。盡管未修改內核的Guest OS中含有I/O設備的驅動程序,但是同類虛擬化一樣,Xen同樣不允許Guest OS直接訪問真實物理硬件,而是通過 VMM單獨授權的虛擬機間接訪問。Xen的特權虛擬機中采用設備模型為未修改內核的Guest OS提供各種I/O設備的抽象。虛擬機內的Guest OS借助于這些虛擬設備來完成虛擬I/O 設備的訪問,而這些虛擬I/O設備訪問與實際硬件的交互則通過特權虛擬機的設備驅動完成。Virtio虛擬化框架Virtio是類虛擬化的VMM中的一組通用模擬設備的抽象。Virtio由Rusty Russell開發,他當時的目的是支持自己的虛擬化解決方案lguest。Virtio允許VMM導出一組通用的模擬設備,并通過一個通用的應用編程接口(API)讓它們變得可用。有了類虛擬化VMM之后,Guest OS能夠實現一組通用的接口,在一組后端驅動程序之后采用特定的設備模擬。后端驅動程序不需要是通用的,因為它們只實現前端所需的行為。Virtio API依賴一個簡單的緩沖抽象來封裝Guest OS需要的命令和數據。除了 ill立而驅動程序(在Guest OS中實現)和后纟而驅動程序(在VMM中實現)之外,Virtio還定義了兩個層來支持Guest OS到VMM的通信。在頂級(稱為Virtio)的是虛擬隊列接口, 它在概念上將前端驅動程序附加到后端驅動程序。驅動程序可以使用O個或多個隊列,具體數量取決于需求。例如,Virtio網絡驅動程序使用兩個虛擬隊列(一個用于接收,另一個用于發送),而Virtio塊驅動程序僅使用一個虛擬隊列。虛擬隊列實際上被實現為跨越 Guest OS和VMM的銜接點。但這可以通過任意方式實現,前提是Guest OS和VMM以相同的方式實現它。

發明內容
I 目的本發明提供了一種使用多隊列技術的虛擬機網絡性能優化的實現方法,它主要采用多隊列虛擬化隊列的虛擬化技術,為上層客戶操作系統提供更好更迅速的網絡服務。2技術方案2. I方法概述本發明專利基于kvm-linux操作系統的虛擬機模塊kernel based virtual machine,其特點是通過將虛擬機和宿主機之間的單虛擬隊列通信改變為多個虛擬隊列,使得虛擬機和宿主機之間的網絡數據傳輸速度加快。2. 2總體設計多隊列思路是將發送/接收隊列并行化,使多個隊列可以同時發送/接收數據。 將單隊列擴展成多隊列需要對qemu(涉及kvm的IO虛擬化的模塊之一)、vhost(涉及kvm 的IO虛擬化的模塊之一),客戶機的virtio-net進行修改。因為在初始化完成之后,vhost 與客戶機之間的通信是通過kvm內核模塊進行,不需要qemu進行任何操作,所以對qemu的修改僅限于vhost和virtio-net初始化、提供給用戶的使用接口。對vhost進行多隊列擴展關鍵在于設計數據結構,相關的修改包括了 vhost系統調用、內核線程創建等。客戶機 virtio-net是以網卡驅動的形式存在的,要實現多隊列,就是要實現多隊列網卡驅動,對其修改的關鍵也在于數據結構的設計上,以及隊列選擇機制,相關的修改包括virtio-net設備探測、隊列選擇等。以上三部分的修改不是孤立的,必須作為一個整體考慮qemU需要向 vhost、virtio-net傳遞是否啟用多隊列、隊列數量等信息,vhost、virtio-net也需要去檢查這些信息;vhost中的隊列與virtio-net中的隊列也是--對應的。綜上所述,本發明一種使用多隊列技術的虛擬機網絡性能優化的實現方法,該方法具體步驟如下步驟一對QEMU的網絡初始化部分進行修改,通過修改QEMU,增加對于多隊列的支持。這部分的修改主要涉及以下兩個部分I. QEMU TAP (qemu模塊中和數據傳輸有關的部分)初始化修改數據結構使得能夠支持多隊列,修改了對應隊列的文件描述符,增加了用于指示描述符個數的項等。針對于數據結構的改變,修改相應的函數以適應新的數據結構。增加檢測是否啟用多隊列的功能,當不啟用多隊列的時候,支持原本的單隊列傳輸。2. Vhost_net (vhost模塊中和網絡相關的部分)初始化修改數據結構以支持多隊列。調用修改后的vhost多隊列的ioctl系統調用,用于創建和控制隊列。步驟二 對vhost多隊列的修改,是為了支持QEMU對多隊列的使用和vhost-net于一個隊列使用一個線程進行數據傳輸的修改和系統調用的修改。I.有關隊列使用線程的修改在非多隊列情況下,一個vhost_dev (虛擬機網絡中的虛擬設備)對應一個內核線程,但是現在要實現多隊列,就需要多個內核線程。因此需要一個隊列對應一個線程。我們主要對以下幾個數據結構進行重新設計和修改Vh0St_deV的修改主要針對于內核線程和隊列進行映射之后,存在一些不再需要的項;vhost_virtqueue中需要指定隊列號,并且對于每一個隊列標識它所在的工作隊列;因為前兩個數據結構的修改,與其相關的數據結構vhost_poll和vhost_net也要針對于前面的改動而做一些修改。與這些數據結構相關的函數也需要根據數據結構的修改進行相應的調整。2.系統調用的修改具體修改包括將open中原先初始化隊列的工作移到ioctl中,因為需要QEMU傳遞隊列數量到內核態,open系統調用無法滿足次要求,而ioctl可以;將release釋放函數由原來釋放發送/接收隊列擴展成釋放指定個數中增加初始化隊列的工作,對清理隊列的操作進行修改,將清理單隊列變成清理多個隊列。步驟三對vhost-net (vhost模塊中和網絡相關的部分)多隊列網卡的修改,使得虛擬網卡支持多隊列的傳輸。具體的修改包括增加feature的支持;向virtio_net_ config數據結構中增加用于說明多隊列數目的項;將virtnet_info數據結構中的接收虛擬隊列rvq和發送虛擬隊列svq單獨作為新的數據結構。(3)優點及效果通過基于virtio的多隊列的技術,本發明為kvm虛擬機的網絡提供了可靠的優化方法,提升了虛擬機的網絡傳輸性能。經測試,本優化方法能夠在保持平均CPU利用率不變的情況下,提升大數據包的平均傳輸吞吐量20%以上。本發明在現有的成熟技術基礎上進行創新,實施不難,具有良好的使用和發展前景。


圖I未使用多隊列的KVM網絡函數及模塊框架2使用多隊列的KVM網絡函數及模塊框架3本發明流程框中符號說明如下圖1、2中的字母符號內容都表示函數名稱。
具體實施例方式見圖I、圖2、圖3,本發明一種使用多隊列技術的虛擬機網絡性能優化的實現方法,該方法具體步驟如下步驟一對QEMU的網絡初始化部分進行修改,通過修改QEMU,增加對于多隊列的支持。這部分的修改主要涉及以下兩個部分I、QEMU TAP (qemu中和數據傳輸有關的部分)初始化修改數據結構使得能夠支持多隊列,修改了對應隊列的文件描述符,增加了用于指示描述符個數的項等。針對于數據結構的改變,修改相應的函數以適應新的數據結構。增加檢測是否啟用多隊列的功能,當不啟用多隊列的時候,支持原本的單隊列傳輸。2、Vhost_net (vhost模塊中和網絡相關的部分)初始化修改數據結構以支持多隊列。調用修改后的vhost多隊列的ioctl系統調用,用于創建和控制隊列。步驟二 對vhost多隊列的修改,是為了支持QEMU對多隊列的使用和vhost-net 多隊列網卡的支持,主要包括針對于一個隊列使用一個線程進行數據傳輸的修改和系統調用的修改。I、有關隊列使用線程的修改在非多隊列情況下,一個vhost_dev (虛擬機網絡中的虛擬設備)對應一個內核線程,但是現在要實現多隊列,就需要多個內核線程。因此需要一個隊列對應一個線程。我們主要對以下幾個數據結構進行重新設計和修改Vh0St_deV的修改主要針對于內核線程和隊列進行映射之后,存在一些不再需要的項;vhost_virtqueue中需要指定隊列號,并且對于每一個隊列標識它所在的工作隊列;因為前兩個數據結構的修改,與其相關的數據結構vhost_poll和vhost_net也要針對于前面的改動而做一些修改。與這些數據結構相關的函數也需要根據數據結構的修改進行相應的調整。2、系統調用的修改具體修改包括將open中原先初始化隊列的工作移到ioctl中,因為需要QEMU傳遞隊列數量到內核態,open系統調用無法滿足次要求,而ioctl可以;將release釋放函數由原來釋放發送/接收隊列擴展成釋放指定個數中增加初始化隊列的工作,對清理隊列的操作進行修改,將清理單隊列變成清理多個隊列。步驟三對vhost-net (vhost模塊中和網絡相關的部分)多隊列網卡的修改,使得虛擬網卡支持多隊列的傳輸。具體的修改包括增加feature的支持;向virtio_net_ config數據結構中增加用于說明多隊列數目的項;將virtnet_info數據結構中的接收虛擬隊列rvq和發送虛擬隊列svq單獨作為新的數據結構。
權利要求
1. 一種使用多隊列技術的虛擬機網絡性能優化的實現方法,其特征在于該方法具體步驟如下步驟一對QEMU的網絡初始化部分進行修改,通過修改QEMU,增加對于多隊列的支持; 這部分的修改涉及以下兩個部分1.qemu模塊中和數據傳輸有關的部分——QEMU TAP初始化修改數據結構使得能夠支持多隊列,修改了對應隊列的文件描述符,增加了用于指示描述符個數的項;針對于數據結構的改變,修改相應的函數以適應新的數據結構;增加檢測是否啟用多隊列的功能,當不啟用多隊列的時候,支持原本的單隊列傳輸;2.vhost模塊中和網絡相關的部分-Vhost_net初始化修改數據結構以支持多隊列;調用修改后的vhost多隊列的ioctl系統調用,用于創建和控制隊列;步驟二 對vhost多隊列的修改,是為了支持QEMU對多隊列的使用和vhost-net多隊列網卡的支持,包括針對于一個隊列使用一個線程進行數據傳輸的修改和系統調用的修改;1.有關隊列使用線程的修改在非多隊列情況下,一個虛擬機網絡中的虛擬設備vhost_dev對應一個內核線程,但是現在要實現多隊列,就需要多個內核線程,因此需要一個隊列對應一個線程;對以下幾個數據結構進行重新設計和修改Vh0St_deV的修改針對于內核線程和隊列進行映射之后,存在一些不再需要的項;vhost_virtqueue中需要指定隊列號,并且對于每一個隊列標識它所在的工作隊列;因為前兩個數據結構的修改,與其相關的數據結構 vhost_poll和vhost_net也要針對于前面的改動而做一些修改;與這些數據結構相關的函數也需要根據數據結構的修改進行相應的調整; ·2.系統調用的修改具體修改包括將open中原先初始化隊列的工作移到ioctl中,因為需要QEMU傳遞隊列數量到內核態,open系統調用無法滿足次要求,而ioctl可以;將release釋放函數由原來釋放發送/接收隊列擴展成釋放指定個數中增加初始化隊列的工作,對清理隊列的操作進行修改,將清理單隊列變成清理多個隊列;步驟三對vhost模塊中和網絡相關的部分-vhost-net多隊列網卡的修改,使得虛擬網卡支持多隊列的傳輸;具體的修改包括增加feature的支持;向virtio_net_config 數據結構中增加用于說明多隊列數目的項;將virtnet_info數據結構中的接收虛擬隊列 rvq和發送虛擬隊列svq單獨作為新的數據結構。
全文摘要
一種使用多隊列技術的虛擬機網絡性能優化的實現方法,它有三大步驟步驟一對QEMU的網絡初始化部分進行修改,通過修改QEMU,增加對于多隊列的支持;步驟二對vhost多隊列的修改,是為了支持QEMU對多隊列的使用和vhost-net多隊列網卡的支持,包括針對于一個隊列使用一個線程進行數據傳輸的修改和系統調用的修改;步驟三對vhost模塊中和網絡相關的部分——vhost-net多隊列網卡的修改,使得虛擬網卡支持多隊列的傳輸。本發明通過設計和實現虛擬機到宿主機的多個虛擬隊列,來實現增加虛擬機網絡數據流量和吞吐量的目的。該方法構思巧妙、科學合理,在計算機技術領域內具有良好的使用價值和廣闊的應用前景。
文檔編號G06F9/46GK102591715SQ20121000217
公開日2012年7月18日 申請日期2012年1月5日 優先權日2012年1月5日
發明者肖利民, 許航, 雷松松 申請人:北京航空航天大學
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
主站蜘蛛池模板: 米易县| 聂拉木县| 平泉县| 吉水县| 凤阳县| 五大连池市| 武功县| 凤庆县| 淅川县| 五华县| 新田县| 塔河县| 张掖市| 桃园市| 建始县| 新绛县| 姚安县| 桓台县| 治多县| 博兴县| 乌拉特中旗| 迭部县| SHOW| 石棉县| 调兵山市| 孟村| 扶沟县| 南宫市| 襄城县| 班玛县| 高唐县| 会理县| 宁晋县| 姜堰市| 康定县| 津南区| 长岛县| 通江县| 镇康县| 黑龙江省| 濮阳县|