Para-Virtualization, Full-Virtualization和Hardware-Assisted-Virtualization

 

vmware   xenserver   microsoft

 

 

在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,用Microsoft Hyper-V的術語:the Parent Partition)。 這個“管理VM”是讓系統管理員用來管理hypervisor的。 客戶所使用的是那些在它旁邊跑的guest VMs(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”協助。 這可以形象地看作是guest OS自身不帶有設備驅動器而“向旁尋找”幫助。 另外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)全虛擬化:
對於前面提到的guest OS作爲“低特權態部件發出的敏感指令”,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硬體協助的虛擬化:
Intel VT-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有很不同的性質,在系統服務安全上有明顯的差異。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章