Intel的CPU將特權級別分為4個級別:RING0,RING1,RING2,RING3。Windows只使用其中的兩個級別RING0和RING3,RING0只給操作系統用,RING3誰都能用。如果普通應用程序企圖執行RING0指令,則Windows會顯示“非法指令”錯誤信息。
挑戰:
- 大部分modern CPU 並不支持可虛擬化, 如x86
- 需直接訪問內存和硬件的操作系統特權代碼必須在Ring 0執行
- CPU虛擬化必須在Guest OS下面添加VMM(Ring 0)
- 一些關鍵指令在非Ring 0權限級執行具有不同語義: 不能有效虛擬化,如POPF指令
- 非特權級指令可以查詢CPU的當前特權級, x86並不trap這些指令
CPU Virtualization Tech
全虛擬化(Full Virtulization)
簡介:主要是在客戶操作系統和硬件之間捕捉和處理那些對虛擬化敏感的特權指令,使客戶操作系統無需修改就能運行,速度會根據不同的實現而不同,但大致能滿足用戶的需求。這種方式是業界現今最成熟和最常見的,而且屬於 Hosted 模式和 Hypervisor 模式的都有,知名的產品有IBM CP/CMS,VirtualBox,KVM,VMware Workstation和VMware ESX(它在其4.0版,被改名為VMware vSphere)。
優點:Guest OS無需修改,速度和功能都非常不錯,更重要的是使用非常簡單,不論是 VMware 的產品,還是Sun(Oracle?)的 VirtualBox。
缺點:基於Hosted模式的全虛擬產品性能方面不是特別優異,特別是I/O方面。
未來:因為使用這種模式,不僅Guest OS免於修改,而且將通過引入硬件輔助虛擬化技術來提高其性能,我個人判斷,在未來全虛擬化還是主流。
半虛擬化(Parairtulization)
簡介:它與完全虛擬化有一些類似,它也利用Hypervisor來實現對底層硬件的共享訪問,但是由於在Hypervisor 上面運行的Guest OS已經集成與半虛擬化有關的代碼,使得Guest OS能夠非常好地配合Hyperivosr來實現虛擬化。通過這種方法將無需重新編譯或捕獲特權指令,使其性能非常接近物理機,其最經典的產品就是Xen,而且因為微軟的Hyper-V所采用技術和Xen類似,所以也可以把Hyper-V歸屬於半虛擬化。
優點:這種模式和全虛擬化相比,架構更精簡,而且在整體速度上有一定的優勢。
缺點:需要對Guest OS進行修改,所以在用戶體驗方面比較麻煩。
未來:我覺得其將來應該和現在的情況比較類似,在公有雲(比如Amazon EC2)平台上應該繼續占有一席之地,但是很難在其他方面和類似VMware vSphere這樣的全虛擬化產品競爭,同時它也將會利用硬件輔助虛擬化技術來提高速度,並簡化架構。
硬件輔助虛擬化(Hardware Assisted Virtualization)
簡介:Intel/AMD等硬件廠商通過對部分全虛擬化和半虛擬化使用到的軟件技術進行硬件化(具體將在下文詳述)來提高性能。硬件輔助虛擬化技術常用於優化全虛擬化和半虛擬化產品,而不是獨創一派,最出名的例子莫過於VMware Workstation,它雖然屬於全虛擬化,但是在它的6.0版本中引入了硬件輔助虛擬化技術,比如Intel的VT-x和AMD的AMD-V。現在市面上的主流全虛擬化和半虛擬化產品都支持硬件輔助虛擬化,包括VirtualBox,KVM,VMware ESX和Xen。
優點:通過引入硬件技術,將使虛擬化技術更接近物理機的速度。
缺點:現有的硬件實現不夠優化,還有進一步提高的空間。
未來:因為通過使用硬件技術不僅能提高速度,而且能簡化虛擬化技術的架構,所以預見硬件技術將會被大多數虛擬化產品所采用。
操作系統級虛擬化(Operating System Level Virtualization)
簡介:這種技術通過對服務器操作系統進行簡單地隔離來實現虛擬化,主要用於VPS。主要的技術有Parallels Virtuozzo Containers,Unix-like系統上的chroot和Solaris上的Zone等。
優點:因為它是對操作系統進行直接的修改,所以實現成本低而且性能不錯。
缺點:在資源隔離方面表現不佳,而且對Guest OS的型號和版本有限定。
未來:不明朗,我覺得除非有革命性技術誕生,否則還應該屬於小眾,比如VPS。