最近所寫的一些文章,被搜尋最多次的算是 Workstation 8,果然較為大眾熟知的產品,總是得到最多的關注。既然如此,那就再談一些 Workstation 8 的虛擬化。看過電影 "全面啟動" 嗎? 你是否知道你現在身處在哪一層虛擬的夢境?
當我在看這部電影時,對於夢中夢的內容直覺反應就是:這不就是 Nested VM 嗎? 在 VMWare 虛擬化的世界裡,我們可以用這種方式搭建一層又一層的 VM,讓每層的 Guest OS 都活在夢境之中。(如果看倌不知道什麼是 Nested VM,請參閱小弟的書,裡面採用的 vSphere in a box 就是利用這種方式,以一部實體電腦建構出 vSphere 虛擬世界)
那麼,VMware Workstation 8 的 Nested VM 又有什麼新意?
有些事情說來話長,有些觀念必須要加以釐清,小弟將這些內容以 FAQ 的方式呈現,並嘗試將其運作解釋清楚 (某些細節很難三言兩語表述,請見諒):
VMware Workstation 虛擬化軟體,是一種 hypervisor 嗎?
是的,它屬於 Type 2 hypervisor。關於 hypervisor 的相關資訊請參閱這裡: http://vlife.pixnet.net/blog/post/18754670
什麼是 Nested VM?
拜 CPU 硬體輔助虛擬化以及 VMware 原本的全虛擬化技術之賜,我們可以實現在單一部個人電腦上搭建 vSphere 平台來做測試。Intel VT 與 AMD-V 可以讓 hypervisor VMM 處於 Ring -1 的Root mode,所以可以先以 VMware Workstation 或 VMware Player 來安裝 ESXi 5,這時是採用 CPU 硬體輔助虛擬化,讓 ESXi 自己本身成了 VM (可稱為 Nested ESXi)。而 ESXi 安裝完成之後,變成了是「外層」的虛擬機器,別忘了 ESXi 本身亦擁有 hypervisor,可以再創建內層 VM 出來。
被虛擬化後的 ESXi 可以再創建內層 VM,怎麼做到的?
因為實體機器啟用了硬體輔助虛擬化,所以 Root Mode 由 VMware Workstation 掌控,而非 ESXi。此時 ESXi 依靠的就是全虛擬化技術:Binary Translation。VMware 是全虛擬化技術的廠商,透過 Binary Translation 來運作全虛擬化的好處,就是即便 hypervisor 沒有 64 位元 CPU 或 Intel VT / AMD-V 硬體輔助虛擬化,依然能夠創建 VM。所以這一層的 ESXi 可透過全虛擬化來產生下一層的 VM。
注意,此時的實體機器,已經有三層的 OS 了。
第一層:實體機安裝的 host OS
第二層:Workstation 創建的 Nested ESXi
第三層:Nested ESXi 創建的 Guet OS (Windows、Linux)
Nested VM 的限制?
這就是要談的重點,本來 Nested VM 的限制是第三層的 Guest OS 只能安裝 32 位元,不能是 64 位元。也不能在第二層安裝 Hyper-V 來產生第三層VM,因為 Hyper-V 須要用到 CPU 輔助虛擬化,必須由它來掌控 Root mode 才行。
我曾經一度以為這已經是極限了,上述兩點限制應該沒辦法再突破,沒想到 VMware 又辦到了!!!
現在 Workstation 8 可以達成:
第一層 / host OS ==> 第二層 / Workstation 創建 ESXi ===> 第三層 / ESXi 創建 64 位元 OS (Windows、Linux)
或是
第一層 / host OS ==> 第二層 / Workstation 創建 Hyper-V 可稱為 (Nested Hyper-V) ===> 第三層 / Hyper-V 創建 64 位元 OS
也可以像電影那樣,創造出第四層夢境:
第一層 / host OS ==> 第二層 / Workstation 創建的 ESXi ===> 第三層 / ESXi 再創建 ESXi ==> 第四層 / ESXi 創建 32 位元 OS (Windows、Linux)
VMware 是怎麼做到的?
它抽象化了 Intel-VT-x / AMD-V,也就是 "硬體輔助虛擬化也被虛擬化了",可以直接由第二層 VM 的 hypervisor 來控制。在 Hardware Version 8 的 CPU 設定裡,勾選一個 Virtualize Intel-VT-x/EPT or AMD-V/RVI 選項,然後再到 Hyper-V VM 的 VMX 檔新增一行 hypervisor.cpuid.v0 = "FALSE" 即可。
既然第二層 VM 可以運用到 CPU 硬體輔助虛擬化,第三層的 ESXi 就可以用 Binary Translation 來達成第四層虛擬化。
這也就是為何半虛擬化的 Hyper-V 能變成 VM 的緣故,照一般而言是無法做到的,由於找不到相關技術文件,我現在還不知道運作原理,只能說 VMware 實在太厲害了。
可以在第二層同時創建 ESXi 與 Hyper-V 嗎?
行。VMware 實在太厲害了。
可在 Nested Hyper-V 裡再創建 ESXi 嗎?
行。VMware 實在太厲害了。
可以用原生 ESXi 取代第一層 host OS 嗎?
行。參考這裡:http://www.vcritical.com/2011/07/vmware-vsphere-can-virtualize-itself/#comment-12442
Nested VM 方式效能如何?
就像電影一樣,每一層運作都有延遲,層層虛擬化的關係,第一層的一瞬間,第四層可能要經歷很久。
可以在第四層再安裝 64 位元 OS 或是 ESXi嗎?
你還想進入第五層? 應該是會陷入混沌吧..... 我認為是不行,你可以試試看再告訴我。
原本以為只有我,看到電影全面啟動有這種感想,但是在 virtuallyGhetto 看到他的第一張圖,我不禁笑了出來,原來大家想的都一樣啊..... 所以就把相關 FAQ 寫出來了。
那就決定了,乾脆第二本書,書名就叫虛擬化全面啟動好了 Orz
還有,今天借用這個版面,哀悼一位改變世界的人物....... 不論你喜不喜歡他,我們都不能否認,他是偉大的。
Steve, Great Jobs.
Rest In Peace.