1. 程式人生 > >X86伺服器虛擬化的三種技術--(1)

X86伺服器虛擬化的三種技術--(1)


【說明】此文轉載自毛文波博士的部落格,簡明扼要地介紹了在x86伺服器虛擬化方法上的三個主要技術流派:Para-Virtualization, Full-Virtualization和Hardware-Assisted-Virtualization。此文說理透徹,語言流暢。 

雲端計算、SaaS等基於服務的計算模式最近異常灼熱。伺服器虛擬化技術尤其是對低端廉價x86伺服器的虛擬化已被公認為是實現這些計算模式的關鍵技術,對於能否廉價提供雲端計算、SaaS等服務至關重要。在x86伺服器虛擬化方法上有三個知名的技術流派:Para-Virtualization, Full-Virtualization和Hardware-Assisted-Virtualization。本文謹對這三種技術作簡要介紹。

Para-Virtualization(Citrix的Xen和Microsoft的Hyper-V為典型代表),直譯成中文是“在旁邊的虛擬化”。形象地說就是:在虛擬化軟體hypervisor上面跑著的諸多客戶虛擬機器(下稱guest VMs或guest OSes,客戶作業系統),在它們“旁邊”還跑著一個特別OS,叫做“管理OS”或“管理VM”(the Administrative OS/VM,用Citrix Xen的術語叫做Dom0,用MicrosoftHyper-V的術語:the Parent Partition)。這個“管理VM”是讓系統管理員用來管理hypervisor的。

客戶所使用的是那些在它旁邊跑的guestVMs(Citrix Xen叫做DomU,Microsoft Hyper-V叫做Child Partitions)。另外這個“管理OS”還採用native OS的方法管理整個硬體平臺上的所有輸入輸出裝置驅動器(IO device drivers),它裡面包含了平臺上所有輸入輸出裝置驅動器。也就是說Para-Virtualization方法在hypervisor裡不對裝置驅動器做虛擬(emulation),而僅對CPU和記憶體做虛擬,所以Para-Virtualization又被翻譯作“半虛擬化”。Para-Virtualization還有一個叫法:OS-Assisted-Virtualization,就是因為guest VMs需要“管理OS”協助。這可以形象地看作是guestOS自身不帶有裝置驅動器而“向旁尋找”幫助。

另外guest OS還會發出一小部分由於硬體不支援而無法被虛擬化的OS指令。在虛擬化理論中,這種不能被虛擬化的guest OS指令屬於“低特權態部件發出的敏感指令”:處於低特權態(使用者態)的guest OS如果對硬體發出這樣的指令,則處於高特權態(核心態)的hypervisor必須先對這些指令進行檢查作“無害化”處理後方能交給硬體機器做計算或處理服務。由於以前x86硬體設計上存在缺陷,這一類指令不能自動被hypervisor截獲(trap)。對於這些不能自動被hypervisor截獲的指令,Para-Virtualization技術採用了在guest OS中人為植入hypercalls的方法使程式流程主動進入hypervisor以獲得“無害化”處理。由於需要在guest OS中植入這些hypercalls, 所以Para-Virtualization技術需要對guest OS核心作修改後方能使用於VM內。這一點被認為是Para-Virtualization技術的一個缺點:比如對於非開放原始碼OS(如Windows 2000/XP)那就只有OS廠商才能製做guest OS。

Full-Virtualization(VMware的ESX)全虛擬化:對於前面提到的guestOS作為“低特權態部件發出的敏感指令”,VMware找到了一個“可執行程式碼翻譯”(binary translation)方法將這些指令的可執行程式碼轉變為一系列新的指令順序,翻譯得到的新指令順序不僅與原指令具有等價的語義,而且可以得到硬體虛擬化支援。這樣一來就無需再人為在guest OS中植入hypercalls了,所以未經修改的guest OS核心可以直接跑在VM裡面,而且guest OS更本無法分辨出自己到底是直接跑在機器硬體上還是在一個虛擬硬體的hypervisor上。

作為一個全虛擬化的hypervisor,ESX將硬體平臺上的所有的輸入輸出裝置也都虛擬化了,所以ESX裡面含有所有這些裝置驅動器,guest OS無須從一個“管理OS”來獲得裝置驅動器服務。ESX仍然有“管理OS”,叫做the Management Console,其作用是讓系統管理員管理ESX hypervisor,僅此而已。

Hardware-Assisted-Virtualization硬體協助的虛擬化:IntelVT-x與AMD-V。這兩家x86處理器廠商最近對處理器硬體作了修改,使前面提到的guest OS“低特權態部件發出的敏感指令”能夠自動被hypervisor截獲。所以在這種新機器上,Para-Virtualization就沒有必要再對guest OS核心作修改,Full-Virtualization也無必要對guest OS做可執行程式碼翻譯。所以我們也可以說,如果不考慮Para-Virtualization與Full-Virtualization在IO裝置處理上還有不同之處,那麼硬體協助的虛擬化技術已經取消了前兩種虛擬化技術之間的差別:兩者都可以被看作是全虛擬化技術。

Intel和AMD在對X86伺服器硬體協助的虛擬化技術上還做了如下重要工作:統一管理了平臺上輸入輸出裝置對記憶體的直接訪問(Direct Memory Access, DMA)。這改變了以前機器上輸入輸出裝置可以自由任意對記憶體進行直接訪問,這種“無政府主義”的危險狀態(非常危險!)。用硬體協助的虛擬化技術對DMA作統一管理,這對於x86平臺伺服器虛擬化技術運用到雲端計算加強雲端計算安全方面有很重要的意義。前面我們提到硬體協助的虛擬化技術取消了Para-Virtualization與Full-Virtualization之間的差別,這樣的說法沒有考慮到兩者在IO裝置管理上的不同之處。其實正是在對IO裝置DMA的統一管理方面,Citrix Xen或MS Hyper-V與VMware ESX有很不同的性質,在雲服務安全上有明顯的差異。