hypervisor

hypervisor:一種運行在物理服務器和操做系統之間的中間層軟件,能夠容許多個操做系統和應用共享一套基礎物理硬件。能夠將hypervisor看作是虛擬環境中的「元」操做系統,能夠協調訪問服務器上的全部物理設備和虛擬機,因此又稱爲虛擬機監視器(virtual machine monitor)。hypervisor是全部虛擬化技術的核心,非中斷的支持多工做負載遷移是hypervisor的基本功能。當服務器啓動並執行hypervisor時,會給每一臺虛擬機分配適量的內存,cpu,網絡和磁盤資源,而且加載全部虛擬機的客戶操做系統。linux

如下內容來自https://www.ibm.com/developerworks/cn/linux/l-hypervisor/編程

很是不錯的介紹,分享給你們。服務器

hypervisor 之於操做系統相似於操做系統之於進程。它們爲執行提供獨立的虛擬硬件平臺,而虛擬硬件平臺反過來又提供對底層機器的虛擬的完整訪問。但並非全部 hypervisor 都是同樣的,這是件好事,由於 Linux 就是以靈活性和選擇性著稱。本文首先簡要介紹虛擬化和 hypervisor,而後探索兩個基於 Linux 的 hypervisor。網絡

虛擬化和 hypervisor架構

咱們首先花一點時間理解爲何虛擬化很重要,以及 hypervisor 的扮演的角色。(要更多地瞭解這兩個主題,請參見 參考資料)。函數

在本文中,虛擬化 就是經過某種方式隱藏底層物理硬件的過程,從而讓多個操做系統能夠透明地使用和共享它。這種架構的另外一個更常見的名稱是平臺虛擬化。在典型的分層架構中,提供平臺虛擬化的層稱爲 hypervisor (有時稱爲虛擬機管理程序 或 VMM)。來賓操做系統稱爲虛擬機(VM),由於對這些 VM 而言,硬件是專門針對它們虛擬化的。圖 1 簡單的展現了這個分層架構。工具

圖 1. 顯示經常使用硬件虛擬化的簡單分層架構性能

顯示經常使用硬件虛擬化的簡單分層架構
平臺虛擬化的好處不少。美國環境保護署(EPA)報告的一組有趣的統計數據就證實了其好處。EPA 研究服務器和數據中心的能源效率時發現,實際上服務器只有 5% 的時間是在工做的。在其餘時間,服務器都處於 「休眠」 狀態。在單個服務器上的虛擬化平臺可以改善服務器的利用率,可是減小服務器的數量纔是它的最大功用。減小服務器數量意味着減小不動資產、能耗、冷卻和管理成本。使用更少的硬件還能提升可靠性。總之,平臺虛擬化不只帶來技術優點,還能創形成本和能源優點。優化

在圖 1 中能夠看到,hypervisor 是提供底層機器虛擬化的軟件層(在某些狀況下須要處理器支持)。並非全部虛擬化解決方案都是同樣的,您能夠在 參考資料 中瞭解更多的虛擬化方式。繼續討論進程,操做系統將對機器的底層資源的訪問虛擬化爲進程。hypervisor 也作同樣的事情,但其對象不是進程,而是整個來賓操做系統。操作系統

hypervisor 分類

hypervisor 能夠劃分爲兩大類。首先是類型 1,這種 hypervisor 是直接運行在物理硬件之上的。其次是類型 2,這種 hypervisor 運行在另外一個操做系統(運行在物理硬件之上)中。類型 1 hypervisor 的一個例子是基於內核的虛擬機(KVM —— 它自己是一個基於操做系統的 hypervisor)。類型 2 hypervisor 包括 QEMU 和 WINE。

 

hypervisor 的構成

hypervisor(不論是什麼類型)僅是一個從其來賓操做系統抽象機器硬件的分層應用程序。經過這種方式,每一個來賓操做系統看到的僅是一個 VM 而不是真實的硬件機器。咱們大體看一下 hypervisor 的內部組成,以及它在 VM(來賓操做系統)上的表示。

在較高級別上,hypervisor 須要少許設施啓動來賓操做系統:一個須要驅動的內核映像、一個配置(好比 IP 地址和所需的內存量)、一個磁盤盒一個網絡設備。磁盤和網絡設備一般映射到機器的物理磁盤和網絡設備(如圖 2 所示)。最後,須要使用一組來賓操做系統工具啓動和管理來賓操做系統。

圖 2. 在假設 hypervisor 中的最小資源映射

在假設 hypervisor 中的最小資源映射
而後,一個簡化的 hypervisor 架構實現最後的關鍵功能,從而使來賓操做系統能夠和宿主操做系統同時運行。實現這個功能須要一些特定的要素,如圖 3 所示。首先,相似於將用戶空間應用程序和內核函數鏈接起來的系統調用,一個一般可用的虛擬化調用(hapercall,hypervisor 對操做系統進行的系統調用)層容許來賓系統向宿主操做系統發出請求。能夠在內核中虛擬化 I/O,或經過來賓操做系統的代碼支持它。故障必須由 hypervisor 親自處理,從而解決實際的故障,或將虛擬設備故障發送給來賓操做系統。hypervisor 還必須處理在來賓操做系統內部發生的異常。(畢竟,來賓操做系統發生的錯誤僅會中止該系統,而不會影響 hypervisor 或其餘來賓操做系統)。hypervisor 的核心要素之一是頁映射器,它將硬件指向特定操做系統(來賓或 hypervisor)的頁。最後,須要使用一個高級別的調度器在hypervisor和來賓操做系統之間傳輸控制。

圖 3. 簡化的基於 Linux 的hypervisor

簡化的基於 Linux 的hypervisor


Linux hypervisor

本文探索兩個基於 Linux 的 hypervisor 解決方案。首先是 KVM,它是首個被集成到 Linux 內核的 hypervisor 解決方案,而且實現了完整的虛擬化。其次是 Lguest,這是一個實驗 hypervisor,它經過少許的更改提升準虛擬化。

KVM

KVM 針對運行在 x86 硬件硬件上的、駐留在內核中的虛擬化基礎結構。KVM 是第一個成爲原生 Linux 內核(2.6.20)的一部分的 hypervisor,它是由 Avi Kivity 開發和維護的,如今歸 Red Hat 全部。

這個 hypervisor 提供 x86 虛擬化,同時擁有到 PowerPC® 和 IA64 的通道。另外,KVM 最近還添加了對對稱多處理(SMP)主機(和來賓)的支持,而且支持企業級特性,好比活動遷移(容許來賓操做系統在物理服務器之間遷移)。

KVM 是做爲內核模塊實現的,所以 Linux 只要加載該模塊就會成爲一個hypervisor。KVM 爲支持 hypervisor 指令的硬件平臺提供完整的虛擬化(好比 Intel® Virtualization Technology [Intel VT] 或 AMD Virtualization [AMD-V] 產品)。KVM 還支持準虛擬化來賓操做系統,包括 Linux 和 Windows®。

這種技術由兩個組件實現。第一個是可加載的 KVM 模塊,當在 Linux 內核安裝該模塊以後,它就能夠管理虛擬化硬件,並經過 /proc 文件系統公開其功能(見圖 4)。第二個組件用於 PC 平臺模擬,它是由修改版 QEMU 提供的。QEMU 做爲用戶空間進程執行,而且在來賓操做系統請求方面與內核協調。

圖 4. KVM hypervisor 的高級別視圖

KVM hypervisor的高級別視圖
當新的操做系統在 KVM 上啓動時(經過一個稱爲 kvm 的實用程序),它就成爲宿主操做系統的一個進程,所以就能夠像其餘進程同樣調度它。但與傳統的 Linux 進程不同,來賓操做系統被 hypervisor 標識爲處於 「來賓」 模式(獨立於內核和用戶模式)。

每一個來賓操做系統都是經過 /dev/kvm 設備映射的,它們擁有本身的虛擬地址空間,該空間映射到主機內核的物理地址空間。如前所述,KVM 使用底層硬件的虛擬化支持來提供完整的(原生)虛擬化。I/O 請求經過主機內核映射到在主機上(hypervisor)執行的 QEMU 進程。

KVM 在 Linux 環境中以主機的方式運行,不過只要底層硬件虛擬化支持,它就可以支持大量的來賓操做系統。您能夠在 參考資料 部分找一個到受支持的來賓操做系統的列表。

Lguest(之前的 lhype)

Lguest hypervisor 由澳大利亞 IBM 的 Rusty Russell 開發,它採用徹底不一樣的方式實現虛擬化。Lguest 並無爲運行任意操做系統提供完整的虛擬化支持,而是爲支持 x86 的 Linux 來賓操做系統(也稱爲Linux-on-Linux 虛擬化)提供輕量級準虛擬化。這意味着來賓操做系統知道本身正在被虛擬化,而且這同時還會改進性能。可是,Lguest 不須要 QEMU 提供平臺虛擬化(像在 KVM 中同樣)來改進性能。使用 Lguest 這種方法還減小了總代碼需求,僅需在來賓操做系統和宿主操做系統中使用一個瘦層。如今,咱們探索這些變化,並查看 Lguest 環境的高級別架構。

如圖 5 所示,來賓操做系統包含一個 Lguest 代碼瘦層(根據定義,就是準虛擬化)。這段代碼提供許多服務。在最高的級別,有一些代碼能夠決定正在啓動的內核是否被虛擬化。此外,還有一個經過虛擬化調用將特權操做發送給宿主操做系統的抽象層(經過 paravirt_ops 實現)。例如,來賓操做系統不能禁用中斷,以使這些請求在宿主操做系統中執行。您還可找到一個爲來賓操做系統實現設備抽象的總線,以及一組實現控制檯、虛擬塊驅動器和虛擬網絡驅動器(容許與其餘來賓通訊)的簡單驅動器。

圖 5. 實現 x86 準虛擬化的 Lguest 的架構

實現 x86 準虛擬化的 Lguest 的架構
內核部分被實現爲可加載的模塊,即lg.ko。這個模塊包含來賓操做系統通向宿主內核的接口。第一個組件是切換器,它實現一種方法,讓來賓操做系統在執行時根據上下文進行切換。這個模塊還實現 /proc 文件系統代碼(針對 /dev/lguest),該代碼實現到內核和驅動器(包括虛擬化調用)的用戶空間接口。還有一些代碼經過使用影子頁表(shadow page-table)和管理 x86 區段來提供內存映射。

最後,內核中的 Documentation 子目錄包含啓動實用程序(lguest),用於啓動新的來賓操做系統實例。這個文件負責兩項任務,即便用和記錄。

Lguest 從 2.6.23(2007 年 10 月)開始就成爲主流內核,而且由 Rusty Russell 開發和維護。它大約包含 5000 行源代碼,包括用戶空間實用程序。儘管 Lguest 很簡單(聽說是這樣的),但它能提供真正的準虛擬化。不過簡單性每每與侷限性相隨。例如,Lguest 僅虛擬化其餘支持 Lguest 的來賓操做系統,而且目前僅能用於 x86 架構。儘管存在這些限制,Lguest 仍然提供一種有趣的虛擬化方式,而且對任何但願研究 Rusty 的代碼的人員公開。

 

Linux hypervisor 的益處

使用 Linux 做爲內核開發 hypervisor 有實實在在的好處。最明顯的是, 以 Linux 爲基礎開發 hypervisor 受益於穩步前進的 Linux,以及爲改進 Linux 投入的大量工做。從典型的優化、bug 修復、調度和內存管理創新到支持不一樣處理器架構,Linux 都是一個不斷進步的平臺(引自 Salisbury 市的 John 的 「站在巨人的肩膀上」 一文)。

不久前已經證實,經過向 KVM 添加一個內核模塊,就能夠將 Linux 內核轉變爲 hypervisor。Lguest 進一步改進了這種方法,而且經過受限制的準虛擬化進一步簡化了該解決方案。

使用 Linux 做爲平臺的另外一個奇特好處是,除了能夠將該平臺用做 hypervisor 以外,您還能夠將其用做操做系統。所以,除了能夠在 Linux hypervisor 上運行多個來賓操做系統以外,您還能夠在該級別上運行其餘傳統的應用程序。因此,沒必要擔憂帶有新的應用編程接口(API)的新平臺,由於您擁有用於開發應用程序的標準 Linux 平臺(若是須要監控應用程序或 hypervisor)。標準協議(TCP/IP)和其餘有用的應用程序(Web 服務器)和來賓操做系統都是可用的。回顧一下討論 KVM 時的 圖 4:除了來賓操做系統以外,還使用了修改了 KVM 的 QEMU。這是一個標準進程,並展現了 Linux 做爲 hypervisor 的強大之處。KVM 在平臺虛擬化中利用 QEMU,並使用 Linux 做爲hypervisor,所以實現了這個構思,即讓來賓操做系統可以和其餘 Linux 應用程序協調執行。

相關文章
相關標籤/搜索