本文轉自:原文鏈接
全虛擬化(Full virtualization), 也稱為原始虛擬化技術, 是另一種虛擬化方法. 該模型使用虛擬機協調客戶操作系統和原始硬件,見圖1. 這里"協調"是一個關鍵詞, 因為VMM在客戶操作系統和裸硬件之間用于工作協調. 一些受保護的指令必須由Hypervisor(虛擬機管理程序)來捕獲和處理. 因為操作系統是通過Hypervisor來分享底層硬件.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖1. 全虛擬化: 使用Hypervisor分享底層硬件
全虛擬化的運行速度要快于硬件模擬, 但是性能方面不如裸機, 因為Hypervisor需要占用一些資源. 全虛擬化最大的優點是操作系統沒有經過任何修改. 它的唯一限制是操作系統必須能夠支持底層硬件(比如, PowerPC).
老機器上的Hypervisors
一些老的硬件如x86, 全虛擬化遇到了問題. 比如, 一些敏感的指令需要由VMM來處理(VMM不能設置陷阱). 因此, Hypervisors必須動態掃描和捕獲特權代碼來處理問題.
半虛擬化
半虛擬化(Paravirtualization)是另一種類似于全虛擬化的熱門技術. 它使用Hypervisor(虛擬機管理程序)分享存取底層的硬件,如圖2, 但是它的客戶操作系統集成了虛擬化方面的代碼. 該方法無需重新編譯或引起陷阱, 因為操作系統自身能夠與虛擬進程進行很好的協作.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖2. 半虛擬化: 通過客戶操作系統分享進程
上面提到過, 半虛擬化需要客戶操作系統做一些修改(配合Hypervisor), 這是一個不足之處. 但是半虛擬化提供了與原始系統相近的性能. 與全虛擬化一樣, 半虛擬化可以同時能支持多個不同的操作系統.
有這樣的疑問:
在半虛擬化的環境中,不能運行未經修改內核的操作系統,那么,cpu不支持vt,在宿主系統上跑的虛擬環境就可以稱為半虛擬化環境了,那么在cpu不支持vt的機器上vmwera可以運行xp,這個互相矛盾,為什么就可以運行呢?
PV vs. FV
PV(Para-Vritralization)和FV(Full-Vritralization)的差別,主要以guest OS的硬件仿真程度做區分。
FV:FV是一般較常看到的作法,所有的guest OS完全不會看到實際的硬件為何,只能使用由Supervisor所提供的所有虛擬硬件,因此,在這種機制下,guest OS動作的性能一定會大受虛擬接口的影響。另外還有一個特點,就是因為完全仿真的關系,不支持新的技術,連ACPI開關機的機制都無法使用,也就是當使用者在FV的guest OS下,若直接觸動關機的按鈕(這里的按鈕是由VMM所提供的,不是主機上的)會直接斷電,而不會進行關機程序。
PV:至于PV的作法,有鑒于一般Virtual Machine工具都是以完全仿真的方式,造成性能上的降低,因此,XEN在設計上,希望各操作系統可以在開發時就已經將XEN的技術包括進去,這樣在使用時,就可以用局部仿真的方式,讓操作系統可以直接使用到硬件中的CPU、內存等,而不需要通過XEN做仿真的操作。
這樣,若硬件都是由Virtual Machine仿真出來的,性能自然會變得比較慢,所以XEN所主推的概念就是,當操作系統默認支持XEN時就可以通過XEN的機制,直接使用到底層的硬件,而不是每個OS都要通過Hypervisor的接口,性能上就可大為提高。
在PV與FV的安裝上,對CPU的要求是有差異的。以PV而言,因為OS原本就支持XEN,所以不需要經過特殊的處理步驟,因此,對CPU來于,沒有特殊的要求,基本上都可以使用。
但FV就不同,因為FV模式是以完全仿真的方式進行,所以CPU必須要特別將此功能加入到CPU的核心中,因此,CPU是有特殊需求的。在Intel與AMD中針對Virtual Machine所加入的功能名稱不同,分別為Intel VT與AMD-V。
在目前Linux的世界,XEN并不是唯一的,除了XEN這一架構外,另外還有一個KVM(Kernel based Vitrual Machine),從2.6.20版本之后的Linux Kernel就支持其功能。因為KVM的做法是以原本Kernel為依據,只要將其module加載即可使用,唯一較XEN弱勢的是KVM以單一Full Virtuallization為服務方式。
虛擬化最近幾年取得了長足的進步,首先由于有大量的開源虛擬機管理程序在不斷發展,這個改進幾乎排除了操作系統與大功率服務器快速增長的利用之間的障礙,公司立即受益。知道最近,軟件仿真虛擬化一直是關注的焦點,兩個常見的軟件仿真虛擬化途徑是完全虛擬化和半虛擬化。對于完全虛擬化,通常調用管理程序或虛擬機監視器,存在于虛擬操作系統和硬件層之間,這個層在操作系統實例之間多路復用競爭系統資源。半虛擬化不同,管理程序在一個協作的環境中運作,因為每個客戶操作系統都知道它正運行在一個虛擬化環境中,因此每個使用管理程序的協作都在硬件下完成虛擬。
兩個途徑都有優勢也有劣勢,半虛擬化的主要優勢在于它運行盡可能快地基于軟件的虛擬化,以不支持有專利的操作系統為代價。完全虛擬化沒有這個限制,但是,完全虛擬化管理程序非常復雜。VMware,一個商業虛擬化解決方案,它就是一個完全虛擬化的例子,Xen,用戶模式Linux(UML)和其他提供的是半虛擬化解決方案。
簡單介紹一下基于硬件的虛擬化,這個線路已經變得模糊起來,隨著Intel的VT技術和AMD的SVM技術的出現,編寫一個管理程序變得更加簡單了,現在,保持管理程序復雜性到最小程度,對于完全虛擬化受益匪淺。
Xen作為最優秀的半虛擬化引擎,在基于硬件的虛擬化的幫助下,現在也支持完全虛擬化MS windows了。KVM是一個相對較新的簡單的,但也非常強大的虛擬化引擎,它已經集成到Linux內核中去了,讓內核天生有虛擬化的能力,因為KVM使用的是基于硬件的虛擬化技術,它不需要修改客戶操作系統,因此,部署在一個受支持的處理器上,它可以從Linux支持任何平臺。
一、Xen是一款虛擬化軟件,支持半虛擬化和完全虛擬化。它在不支持VT技術的cpu上也能使用,但是只能以半虛擬化模式運行。
二、半虛擬化的意思是需要修改被虛擬系統的內核,以實現系統能被完美的虛擬在Xen上面。完全虛擬化則是不需要修改系統內核則可以直接運行在Xen上面。
三、VMware是一款完全虛擬化軟件。完全虛擬的弱點是效率不如半虛擬化的高。半虛擬化系統性能可以接近在裸機上的性能。
四、 Xen是由一個后臺守護進程維護的,叫做xend,要運行虛擬系統,必須先將它開啟。它的配置文件在/etc/xen/xend-config.sxp,內容包括宿主系統的類型,網絡的連接結構、宿主操作系統的資源使用設定,以及vnc連接的一些內容。(如果你想增加一個虛擬網絡設備的話,是需要在這里設定的)
五、/etc/xen/auto 的含義是如果你想讓被虛擬系統隨著宿主系統一同啟動的話,就把虛擬系統的配置文件放到這個目錄下面來。
六、/etc/xen/scripts 是些腳本文件,用于初始化各種虛擬設備,比如虛擬網橋等。(如果要增加一個虛擬網絡設備,同樣需要在此處調節)
七、在/etc/xen下面會有些配置文件,這就是虛擬系統引導時所必須的些文件,里面記錄了引導和硬件信息。
八、Xen的配置工具有許多,我使用的是virt-manager(GUI)、virt-install和xm。第一個用于管理和安裝系統,第二個只用于安裝系統,第三個用于啟動系統。
九、安裝半虛擬Linux有兩種方法,一種是利用Linux的網絡安裝方式安裝,http、ftp、nfs方式都是可以的(特別注意:半虛擬環境下安裝Linux是不支持本地光驅或者iso鏡像安裝的!),并且RHEL5會自動生成配置文件。第二種是先建立鏡像文件,并格式化,然后掛載到本地文件系統上來,將虛擬系統需要用到的文件拷貝進去并修改,然后手工創建配置文件并啟動。
十、虛擬網絡設備有三種模式:bridge橋模式、router路由模式和nat模式。其中橋模式是默認模式,在這種模式下,虛擬系統和宿主系統被認為是并列的關系,虛擬系統被配置IP或者dhcp后即可聯通網絡。
十一、原來的iptables無法對橋模式下的數據包做處理,RHEL5的iptables中增加了一個physdev的模塊,可用iptables -m physdev -h查看幫助