隨這幾年電腦硬體快速發展,INTEL與AMD 又推出多核心技術,隨之虛擬化技術變成非常重要與方便的應用.
傳統虛擬化軟體台為 Hypervisor Type 2如Virtual PC,VMware GSX Server .VMware workstation ,QMEU.缺點則是效能不佳.並且資源分配性不好.
OSSLab 主要討論的虛擬化技術以Hypervisor Type 1 (底層虛擬化技術)為主,所謂的Hypervisor Type 1 ,是指虛擬化主控平台與作業系統結合為一的架構.好處是能夠100%控制硬體並且獲得最佳效能.儘管Hypervisor Type 1 效能佳.但是下面應用用途無法應用.
Hypervisor Type 1 又分為全虛擬化跟半虛擬化 以下解說
Ring
在還未解說 CPU 虛擬化之前先解釋一個東西就是 Ring(環), 在 Intel CPU 的系統運行下可以區分成 Ring 0,Ring 1,Ring 2 和 Ring 3.Ring 0 擁有最高的權限,通常是由系統核心才會有 Ring0 的權限,Ring 0 可以直接和硬體溝通讀取 IO,CPU,Memory 與周邊裝置.其次是 Ring 1,以此類推.一般 Kernel,driver 會存在 Ring 0.一般 AP 存在 Ring 3,一般的作業系統也只運用到 Ring 0 和 Ring3.採取這種方式的優點是一般運行的程式沒有辦法直接與硬體溝通,所以不會有像 Window 3.1 時一樣的狀況發生,一個程式就能把整個系統摧毀(Crash)掉
VMM(Virtual Machine Monitor)
一個機台要能同時執行很多作業系統時不能像是傳統的方式讓 OS 的核心存放在 Ring0.取而代之的就是 VMM((Virtual Machine Monitor) 也可以稱作 Hybervisor.也為了虛擬化的資源分配管理,所以必須有一個東西來管理所有虛擬化的作業系統(Guest OS).也就是所謂的 VMM(Virtual Machine Monitor).
此時的 VMM 主要工作為
‧ 模擬出一個完整的硬體環境給每一個 Guest OS
‧ 分配硬體支援給每一個 Guest OS
‧ 每一個 Guest OS 都是獨立出來不會被彼此影響的
1 - Full Virtualization 使用的是 - Binary Translation
也正因為 Intel CPU 架構的關係,不少的 CPU 指令必須執行在 Ring 0 底下,而傳統的作業系統核心也必須放在 Ring 0 讓他們能直接存取硬體.所以一開始的虛擬化幾乎不能在 X86的系統上使用.但是 VMware 使用了一種方式讓虛擬化能夠執行在 X86 的系統上.他們使用一種稱為 Binary Translation 加上 direct execution 的方式,所謂的 Binary translation 就是將原本要執行不能虛擬化的指令(nonvirtualizable instructions)VMM 會轉換成另一種語法,然後再交由 VMM 去執行.就像是 Guest OS 要將資料寫入硬碟中,但是其實 Guest OS 的硬碟可能只是硬碟中的一塊磁碟區塊(partition)或是檔案(Loop file),所以 VMM 會把他的請求轉換成另一種方式再來向硬體提出要求.而不再是用原本的指令去執行了.至於 direct execution 是一般性的指令不需要在 Ring0 才能執行就直接可以向硬體提出請求.
這樣的缺點是會造成效率的低落,但好處是虛擬出來的作業系統(Guest OS)並不知道有 VMM 的存在,他會以為自己擁有整個機器,而且虛擬出來的作業系統(Guest OS)也不需要修改核心去配合 VMM.加上 VMM 會去虛擬整個機器包括了虛擬化的 BIOS,devices 和 memory的管理,.而且每一個虛擬出來的作業系統(Guest OS)都是獨立而且安全性高不會受到其他虛擬出來的作業系統(Guest OS)影響.
目前採用這種方式的有 VMware’s 全系列 virtualization products 和 Microsoft Virtual Server.
2 - 另一種需要修改作業系統的核心才能支援 - Paravirtualization
剛才有說明為什麼在一般 x86 系統下沒有辦法做虛擬化,大部分的原因是不能虛擬化的指令(nonvirtualizable instructions)必須直接在 Ring 0 執行.但是 Paravirtualization 使用了另一種方式,修改虛擬化作業系統(Guest OS)的核心,讓虛擬的作業系統(Guest OS)可以直接將不能虛擬化的指令(nonvirtualizable instructions)自動轉換成 VMM 可以執行的指令(hypercall),再由 VMM 去向硬體提出請求.所以像是(Windows 2000/XP)不能去修改它的核心(Microsoft 也不願意讓別人來修改它的核心),所以無緣使用 Paravirtualization.而所謂的 hypercall 就像是 OS kernel 的 syscall 只不過 hypercall 是針對 hypvisor(VMM)的.
目前採用這種方式的有 open source Xen project.
3 - 這也是最新的方式需要有硬體(CPU) 的支援 - Intel VT 或者 AMD-V
在沒有 VT 的時代 VMM 是直接載入在 Ring 0 裡面,Dom0 的 kernel 則是被放在 Ring1(Dom0 是第一個在 Xen 底下運行的虛擬機器).後來產生出的 DomU 也是存放在 Ring1(需為 Para-Virtualized,沒有 VT 的支援 Xen 不支援 full-Virtualized).不過一般的 AP 還是運行在 Ring 3.也正因為如此 Para-Mode 的 Guest OS 必須知道 VMM 的存在.此時是不支援 Full-Mode 的.後來有了 VT 這一項技術.VMM 和Guest OS(Para/Full-Mode)都可以直接執行在 Ring0 運行.不過 VMM 是存在比 Guest OS 還要低的一層.
Root Mode Privilege Levels.不能虛擬化的指令(nonvirtualizable instructions)會自動被 hypervisor 截取不需要再經過 binary translation 或 paravirtualization 的模式轉換.
(以上引用自http://benjr.tw/?q=node/81)
OSSLab 新架構二號機將各家Hypervisor Type 1 軟體安裝於FC Storage 中的不同lun.並且以遠端控制卡去做設定選定那套Hypervisor Type 1環境,可全測試功能與效能.至於VM檔案也置於FC SAN Storage.
關於 Xen vs. VMware 兩系統比較的文章
還在為要使用 Xen 或 VMware 傷腦筋嗎?作決定前不妨先看看人家對這個的一些看法。
(thx 曰:vmware 的測試報告有待懷疑,基本上在PV環境下 ,Guest os 為 Linux 的話 VMware Infrastructure 3應該是低落於 Xen 20-30% 不過UI 管理部份,Xen確實略輸點)
Xen 由劍橋大學所開發半虛擬化Code,原本需要修改os kernel,但是與VT 功能cpu相配合用後.便不需要修改kernel
KVM 不支持 SMP CPU(已無此限制)
http://www.linux-kvm.com/content/run...ows-smp-guests
KVM 不支持 Host os(VMM) 與Guest os 之間網路
(引用自 https://twiki.cern.ch/twiki/bin/view...ualization/KVM 有待考證)
OpenVZ 的 Host OS 和 Guest OS 需要一樣
有下面特點
OpenVZ很適合一些主機商使用配上vtonf
MS 的虛擬化軟體
FAQ |
■ 如何檢查 CPU 有否支援 Intel-VT 或 AMD-V 的虛擬化技術?
官方網站查詢
Intel
http://compare.intel.com/pcc/default.aspx?familyID=1
AMD
http://products.amd.com/en-us/
Linux 下查詢法
CPU 是 Intel 時:
#grep vmx /proc/cpuinfo
Intel -> vmx
CPU 是 AMD 時:
#grep svm /proc/cpuinfo
AMD -> svm
See Also (虛擬機之家, )