◎標題:在VMware Workstation 6.x中安裝ESX Server 3.5技術解說 (2008/4/15)
◎前言:Workstation、ESX Server都是VMware的虛擬化軟體,差別在於前者採用Hosted VM,後者則是Native VM。如果在Workstation中再安裝ESX Server,也就是ESX Server變成Workstation上的一部虛擬機器,Linux/Windows等虛擬機器再建置於ESX Server上…
這不就是虛擬化中的虛擬化嗎?理論上似乎不可能…
◎ESX in a Box架構解說
不過,現在平臺真的可以做到虛擬化中的虛擬化,條件是底層的硬體中,處理器必須內建AMD Pacifica/Intel VT-x指令集,以及第一層虛擬化軟體(也就是Workstation)必須支援這個硬體輔助指令。其實現的架構如下圖所示。
備用圖(原解析度)
從圖1中我們看到2種虛擬機器,VM_w代表Workstation上的一個虛擬機器,但裡面的OS其實是ESX Server;VM_s代表ESX Server上的虛擬機器,裡面的OS就是一般的Linux/Windows等Guest OS。
接下來,分析一下圖1中各層的硬體。紅色編號1所在的是真實的硬體,這裡的處理器必須內建Pacifica/VT-x指令集;編號3是第一層虛擬化硬體,這是由Workstation所模擬出來的,其架構是Intel 440BX晶片組為主的平臺;編號5則是第二層虛擬化硬體,是由ESX Server所模擬出來的,架構也是Intel 440BX晶片組的平臺。至於紅色編號2所指是Workstation 6.x中的VMMonitor,負責管理真實的底層硬體資源,編號4所指的則是ESX Server中的VMM(或Hypervisor),負責將第一層虛擬硬體資源配置到VM_s這些虛擬機器上。
看起來似乎沒什麼不對。回憶一下以前文章所解說的,VMware Workstation屬於Hosted VM(請參考下圖2),它與Host OS都位於Ring 0這個特權層,其虛擬機器則在Ring 1/2/3。因此,將ESX Server當成Workstation中的一部虛擬機器時,在架構不變的狀態下,ESX Server上是無法再安裝虛擬機器所需的Guest OS,因為底層的虛擬硬體都是Intel 440BX平臺,而IA-32架構限制所有特權指令集僅能在Ring 0中執行。可是ESX Server已經在Ring 1/2/3,所以裡面的虛擬機器已沒有機會處於Ring 0。
備用圖(原解析度)
不過,以前文章提過Intel VT-x硬體輔助指令集下,區分成2個特權空間(Privilege Space),分別是VMX Root Mode與VMX Non-Root Mode,請參考圖1的右上方。對Workstation來說,其VMM與Host OS處於VMX Root Mode中的Ring 0(請參考編號2旁的箭頭指向VMX Root Mode),而裡面的虛擬機器(VM_w)則處於VMX Non-Root Mode的Ring 0(請參考編號4旁的箭頭指向VMX Non-Root Mode);於是這時候安裝ESX Server成為其中一部虛擬機器,ESX Server的VMM還是在Ring 0(VMX Non-Root Mode),以致於ESX Server上面還可以再建置虛擬機器(VM_s)。從VM_s來看,底層的ESX Server是處於Ring 0,符合IA-32架構的規範,而ESX Server會將VM_s所使用的Guest OS降為Ring 1/2/3,所有特權指令依靠VMM轉換,此外,因為ESX Server處於VMX Non-Root Mode中的Ring 0,所以它無法察覺自己已「被虛擬化」。這就是硬體指令集所造成的虛擬化中的虛擬化。
可是,這只能當成測試用系統,不建議用在實際的虛擬化應用上。網友可以從圖中看到Guest OS所發出的特權指令,到達底層真實的硬體時,經過2道VMM虛擬層的指令轉換,這會損耗虛擬化效率。
同樣的道理,或許Citrix XenServer也能實現虛擬化中的虛擬化。Xen在Pacifica/VT-x支援下,可以做到(Full) Virtualization與Para-virtualization,硬體配備較高的網友或許可以分享這方面的經驗。