本文從如下幾個方面介紹虛擬化的一些常識:
虛擬化層次的分類及舉例;
系統虛擬化簡史;
VMM分類;
典型的虛擬化產品;
Xen。linux
虛擬化層次分類及舉例
指令級虛擬化編程
Bochswindows
QEMU安全
硬件級虛擬化服務器
VMware網絡
Xen架構
KVM編程語言
操做系統級虛擬化性能
Linux-VServer優化
OpenVZ
編程語言級虛擬化
JVM
.NETCLI
程序級虛擬化
Wine
系統虛擬化簡史(硬件級虛擬化)
歷史上第一個虛擬機是1965年左右IBM公司開發的system/360 model 40 VM。其最初的設計目的是將當時最早進的虛擬內存的概念延展到計算機的其餘子系統,搭建一個時分共享的系統,運行多個單用戶的操做系統,以實現多個用戶對 昂貴的物理計算機資源的共享。
以後,隨着時分多用戶操做系統的發展,虛擬化技術真正成熟是在15年後的IBM VM/370系統中。做爲一個標誌性的系統,VM/370的許多原理至今還在IBM的z系統大型機上使用。VM/370運行在IBM System/370大型機上,並虛擬出同體繫結構的System/370虛擬機。因爲System/370硬件的優秀設計,對VM/370的實現提供了 完整而高效的支持,以VM/370爲表明的虛擬機和系統虛擬化技術完整實現了虛擬機的思想。
VM/370上實現的是徹底虛擬化(Full Virtualization),他所抽象的虛擬計算機具備徹底的物理計算機特性。
在同一個時代,IBM M44/44x系統中,出現了半虛擬化(partial-virtualization)(某些書中將para virtualization稱爲半虛擬化,他們不是一個概念),半虛擬化(partial-virtualization)提供了對底層硬件的部分模 擬,以知足某些專門的軟件的執行環境,可是不能運行全部可能運行在物理機上的軟件。
伴隨着硬件的發展,從20世紀90年代後期開始,臺式計算機的性能逐漸達到支持多個系統同時運行的水平。在大型機上沉寂一時的虛擬化技術,在小型機 和微型機領域開始迅速升溫。1997年,在斯坦福大學開發的Disco系統中探索了在共享內存的大規模多處理器系統上運行普通的桌面操做系統。基於 Disco系統的研究經驗,Disco開發者們繼續進行了我的計算機虛擬化技術的研究,以後就有了1998年的Vmware公司的誕生。
在我的計算機領域普遍使用x86體系結構的先天設計,存在對系統虛擬化的支持缺陷或虛擬化漏洞(virtualization hole)。 在x86體系結構上的虛擬化技術,都須要用軟件的方法來彌補系統結構設計上的不足。例如,採用代碼掃描或修補方法(Scan and patch)或二進制代碼翻譯(binary translation)技術來實現基於軟件的徹底虛擬化,但這樣作勢必帶來性能上的損失及很是大的軟件複雜度。
這種狀況下,學術界提出了另外一種思路來客服體系結構上的缺陷,叫類虛擬化技術(Para virtualization)(一些書上稱半虛擬化)。其主要思想是經過客戶機操做系統與虛擬化管理層的協同設計,由虛擬化管理層軟件提供一個近似於原 物理系統,但又不徹底相同(與原系統)的虛擬平臺,以免虛擬化漏洞和實現更高的虛擬化效率。虛擬化技術須要修改操做系統的源代碼來與下層的虛擬化管理層 軟件協同工做,從而避免體系結構上的缺陷。
美國華盛頓大學的Denali項目和原子英國劍橋大學的Xen項目都支持類虛擬化。
雖然上訴兩種基於軟件的方法都可以實現系統虛擬化,但他們各自存在不可迴避的問題。基於軟件的徹底虛擬化方法不可避免的致使性能的降低,同時伴隨着一些兼容性上的損失(這裏的兼容性是指?);而修改操做系統的方法對於現有系統的移植和伴隨着內核升級的維護提出了要求 ,而且對於非開源的操做系統也有侷限性。
從根本上解決系統結構上的缺陷,最好的方法是從體系結構自己入手。intel和AMD在2006年後都逐步推出了帶有硬件虛擬化支持的處理器,從根 本上保證了x86架構是一個可虛擬化的架構。VMM軟件能夠利用這些硬件虛擬化技術,實現基於硬件的全虛擬化,這樣操做系統不須要作任何修改就能夠運行在 虛擬機上。
除了x86處理器架構加入了硬件虛擬化支持,IBM power 2001年,Sun SPARC 2005年也在處理器中加入了虛擬化的支持。但IBM和Sun都採用了基於硬件的類虛擬化策略,除了在硬件中加入了對虛擬化的支持,還在固件層加入了相應 的類虛擬化VMM層,上層的操做系統 須要根據 VMM層接口進行修改。提供了從處理器到固件層到操做系統層對虛擬化的全面協同支持。
今天的大部分服務器和臺式機處理器都已經有了對虛擬化的支持,但只是解決了處理器層如何更好的支持虛擬化的問題,爲了使虛擬化解決方案更加高效,計 算機系統各個層次都在逐漸加入對虛擬化的硬件支持,逐漸造成一個對虛擬化更好支持的虛擬化生態系統。以intel爲例,除了處理器中的vt技術外,芯片中 開始提供針對I/O虛擬化功能的vt-d技術,網卡中也開始提供更好的網絡虛擬化支持的多隊列的VMDq技術。與此同時PCI標準組織也在積極的指定在 PCI設備級對虛擬化進行支持的單根PCI橋IOV和多跟PCI橋IOV標準。
從20世紀90年代發展至今,虛擬化軟件取得了長足的發展。很是多的虛擬機軟件涌現除了,如KVM、virtualbox、微軟的virtual pc 、hyper-v、Sun的xVm、Oracle的Oracle VM。
VMM分類(硬件級虛擬化)
按虛擬平臺分類
根據VMM所根據的虛擬平臺類型能夠將VMM分紅兩類:
第一類VMM虛擬的是現實存在的平臺,而且在客戶機操做系統看來,虛擬的平臺和現實的平臺是同樣的,客戶機操做系統察覺不到是運行在一個虛擬平臺上。這樣的虛擬平臺能夠運行現有的操做系統,無須對操做系統進行任何修改,所以這種方式被稱爲徹底虛擬化(full virtualization)。徹底虛擬化有軟件輔助的徹底虛擬化和硬件輔助的徹底虛擬化。
第二類VMM虛擬的平臺是現實中不存在的,而是通過VMM從新定義的,這樣的虛擬平臺須要對所運行的客戶機操做系統進行或多或少的修改使之適應虛擬環境,所以客戶機操做系統知道其運行在虛擬平臺上,而且會去主動適應。這種方式被稱爲類虛擬化(para virtualization)。另外,一個VMM能夠既提供徹底虛擬化的虛擬平臺,又提供類虛擬化的虛擬平臺。
按VMM實現結構分類
Hypervisor模型
在Hypervisor模型中,VMM能夠看做是一個完備的操做系統,不過和傳統操做系統不一樣的是,VMM是爲虛擬化而設計的,具有虛擬化功能。
在Hypervisor模型中,VMM同時具體物理資源的管理功能和虛擬化功能,所以,物理資源的虛擬化的效率會高一些,同時他不依賴於其餘操做系統,虛擬機的安全只與VMM安全有關,不像宿主型的VMM,虛擬機的安全與VMM和操做系統相關。
一樣因爲Hypervisor模型中,VMM徹底擁有物理資源,所以須要對物理資源進行管理,包括設備驅動,這些開發的工做量是很大的。
宿主模型
物理資源由宿主機操做系統管理,宿主機操做系統是傳統操做系統,VMM經過調用宿主機操做系統的服務來得到資源提供虛擬化服務。VMM建立出虛擬機以後,一般將虛擬機做爲宿主機操做系統的一個進程參與調度。
宿主模型最大的優勢是能夠充分利用現有操做系統的設備驅動程序,VMM無須爲各種I/O設備從新實現驅動程序,能夠專一於物理資源的虛擬化。宿主模型也能夠利用宿主機操做系統的調度、電源管理燈其餘功能。
因爲宿主操做系統設計開發之初並無考慮虛擬化的支持,所以VMM虛擬化的效率和功能會受到必定影響。另外虛擬機的安全會依賴於VMM和宿主機操做系統的安全。
混合模型
混合模型是上述兩種模式的匯合體,VMM仍然位於最底層,用於全部物理資源。但與Hypervisor模型不一樣的時,VMM不會控制大部分I/O設 備,會有一個運行在特權虛擬機中的特權操做系統控制大部分硬件,分擔VMM的一些職責。處理器和內存的虛擬化由VMM完成,I/O的虛擬化則由VMM和特 權操做系統共同合做來完成。
典型的虛擬化產品
VMware ESX Server 3
基於Hypervisor模型,直接運行在物理硬件上,無須操做系統,是一款面向企業級應用的產品。既支持徹底虛擬化也支持類虛擬化,新版本中也開始採用了硬件虛擬化技術。
VMware Server
宿主模型,面向服務端入門級產品,宿主操做系統能夠是windows或者linux。因爲採用宿主模型,VMware Server支持的硬件種類要比ESX Server多,此外VMware Server是免費的。
VMware Workstation
也是宿主模型,是VMware面向桌面的主打產品。宿主操做系統能夠是windows或者linux。VMware Workstation支持徹底虛擬化。與VMware Server不一樣,VMware workstation專門針對桌面應用作了優化。
VMware Fusion
宿主模型,與VMware Workstation基本相同,VMware Workstation運行在Windows和Linux上,VMware Fusion運行在基於Intel Mac硬件平臺的Mac OS X。
Virtual PC
Miscrosoft 面向桌面的虛擬化產品,宿主模型,宿主操做系統是Windows,早期採用軟件虛擬化方式,基於Binary Translation技術。新版本中已經支持硬件虛擬化技術。
Virtual Server
Miscrosoft 面向服務器的入門級虛擬化產品,也是宿主模型,宿主操做系統能夠是Windows XP和Windows Server 2003等。新版本中也開始支持硬件虛擬化技術。
Windows Server 2008
2008是Miscrosoft 推出的新一代服務器操做系統,其中一項重要的新功能是虛擬化。Server 2008的虛擬化架構採用混合模型, 其重要的部件之一Hyper-V做爲Hypervisor運行中最底層,Server 2008自己做爲特權操做系統運行在Hyper-V之上。Server 2008採用硬件虛擬化技術,必須運行在支持Intel VT技術或者AMD-V技術的處理器上。Server2008的虛擬化功能是純64位,只運行在Server 2008 64位版本中。客戶機操做系統支持32位和64位,支持 對稱多處理器的客戶機操做系統等。
Xen
從技術角度來講,Xen基於混合模型。特權操做系統(Domain0)能夠是Linux、Sorlaris以及NetBSD。Xen 1.0 2.0實現了類虛擬化,3.0支持基於硬件技術的徹底虛擬化。
KVM
KVM採用的是基於Intel VT技術的硬件虛擬化方法。從架構上看,能夠認爲KVM是宿主模型,Linux是宿主操做系統。但隨着愈來愈多的虛擬化功能被加入到Linux中,也有人認爲Linux已是一個Hypervisor,所以KVM是Hypervisor 模型。KVM和Linux內核結合的很是好,但KVM還處在發展階段。
Xen
Xen是一個虛擬化平臺,它來之於一項學術研究成果,現已發展成一個重要的開源項目。
Xen的獨特之處在於,當它第一次發佈時,使用了半虛擬化(para virtualization)來運行像linux這樣的常規操做系統。半虛擬化須要修改運行在Xen之上的操做系統,既提高了性能又簡化了Xen自己。
通常來講,操做系統內核是運行在計算機上的最有特權的軟件,但在虛擬化的狀況下,系統管理程序是最有特權的,操做系統內核是在相對較低的權限下運 行。若是操做系統如今試圖執行一些特權指令,那他們會失敗,失敗的方式是相當重要的。若是他們引發系統管理程序會捕獲的一個錯誤,系統管理程序能夠恰當的 模擬這個指令並繼續控制虛擬機。而後x86上存在一些默默失敗而不觸發系統管理程序的指令。對於虛擬化來講這是壞消息,由於這妨礙了操做系統在虛擬機上適 當的工做。廣泛的技術(至少在Xen以前)是在運行時掃描操做系統代碼,尋找特定的指令並用直接調用系統管理程序的代碼替換他們(什麼技術?怎麼實 現?)。雖然這具備理想的兼容性,但在性能上有很大的開銷。
當發佈Xen時,它代表,經過放棄理想的兼容性,性能會顯著的提升。
半虛擬化的觀點是移除一個架構(如x86)中難以虛擬化或若是進行虛擬化開銷很大的全部特性,用於虛擬化層直接通訊的半虛擬化操做替換他們。
一個操做系統的半虛擬化就是重寫與半虛擬化架構不兼容的全部代碼。對linux內核,Xen只修改或增長2995行代碼,就可使它能在Xen上運行。
Xen是原生式虛擬化的一個例 子。另外一種方式是宿主操做系統上運行一個系統管理程序。這種狀況下,每一個虛擬機實際上成了宿主操做系統的一個進程。宿主式系統管理程序一般用於工做站的虛 擬化產品中,例如vmware。這種方式的主要優勢在於:安裝一個宿主式的系統管理程序就像安裝一個新應用程序同樣簡單,反之,安裝一個原生的系統管理程 序(如Xen)就像安裝一個新的操做系統。所以宿主式虛擬化更適合非專業的用戶。
另外一方面,原生式的系統管理程序的優勢在於它能夠得到更好的性能。宿主式虛擬機更容易用於桌面虛擬化。
Xen3.0版本開始支持基於intel vt和amd v硬件技術的全虛擬化。
原文連接:http://itblogs.ga/blog/20141217203759/