Skip to Content

Virtualization

傳統的電腦主機(Server,Desktop,Laptop)安裝完一種作業系統(Windows , Linux ...),就只能提供其作業系統所能提供的服務,我們無法在同一主機上同時提供 Windows 的服務又同時提供 Linux 的服務,或者其他作業系統的服務.也因此虛擬化由此誕生.

為什麼需要虛擬化 Virtualization,現在的 CPU 運算能力太強了,所以大部分的 Server 的 CPU 很少運作在高峰,所以大部分的時間都是在 idle ,所以把一台server 當做很多台來使用,讓虛擬化的工作方式來發揮最大的效應,那虛擬化有什麼好處.
1.省電 (多台 Server 可以簡化成少數幾台虛擬機器,不再需要一大堆的不同的 server 來管理不同的事)
2.省成本 (以一檔百,Server 數少了當然就可以省下成本,相對的管理成本也就降低了)
3.集中管理 (有統一的管理介面,)
4.省錢 (省電,省成本當然就省錢 "重點")
5.省硬碟空間 (虛擬化的優點就是不需預先配置大量的硬碟空間,只需要相對應的空間即可,也可依需要放大空間)
6. 節省下的機房空間可以做很多別的事.
7.容易備份,轉移,升級系統 (反正什麼都是模擬出來的,可以很方便的做備份,轉移,升級)

不過並不是每一台 Server 都適合轉入虛擬化的環境,虛擬化的環境同時分享 CPU 和記憶體以及硬碟的硬體資源,當原先的 Server 在這幾項資源有吃重的影響時這些 Server 暫時不適合轉入到虛擬化的環境,除非你可以提供更高效能的主機或是高傳輸效能的 I/O 裝置給 Server.一般要虛擬化的環境會建議使用高效能的 I/O 裝置如 FC SAN.因為當 Guest OS 增加時硬碟的效能就會受到考驗了.加上虛擬化對於硬體的支援還是有些許的要求,如 XenServer 在使用上 CPU 和系統必須支援虛擬化 Intel VT 或者 AMD-V 的環境,而且還需要特定的儲存裝置或是網路卡.所以一般的 Server 還不能擔當這個重責大任.

目前虛擬化可以分成下面這幾種.
1 - Full Virtualization 使用的是 - Binary Translation
2 - 另一種需要修改作業系統的核心才能支援 - Paravirtualization
3 - Hardware-assisted virtualization 這也是最新的方式需要有硬體(CPU) 的支援 - Intel VT 或者 AMD-V
4 - Application-Level Virtualization 不需要 VT 或是額外的硬體來支援

上面的種類的產品一開始會讓使用者搞不清楚到底是要用什麼產品,這一類的產品多到不勝枚舉.基本上企業要用的就是可以全虛擬化的環境如 Full Virtualization 或是 Paravirtualization 這一類像是 VMware ESX 或是 XenServer.至於學生而言可以在原先的 Windows 系統下使用 Linux 或是其他非 Windows 系統.就可以直接選擇 Application-Level Virtualization 像是 VMware Server 等的產品.

Ring
在還未解說 CPU 虛擬化之前先解釋一個東西就是 Ring(環), 在 Intel x86 系統架構下為了保護指令的運行,提供了 4 種不同 Privilege 特權級別的指令.也就是俗稱的 Ring,可以區分成為 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 - Hardware-assisted virtualization 這也是最新的方式需要有硬體(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 的模式轉換.

目前 Intel 推出含有 VT 的技術包括了下面幾項.
VT-x 這是屬於 IA-32 和 Intel 64 架構的
VT-i 這是屬於 Itanium 架構的
目前 Intel 推出的 CPU 並未包過下面這兩項,這是未來 Intel 將計畫推出的.
VT-d refers to Intel VT for Directed I/O
VT-c refers to Intel VT for Connectivity

4 - Application-Level Virtualization
還有一種是 Application-Level Virtualization 他是架構在其他作業系統上的,像是 VMware ServerVirtualBox.它的架構很簡單,它只是一個作業系統下的一個應用程式,優點是它不需要 VT 或是額外的硬體來支援,但相對的缺點就是他的效能相對的不佳.它提供一個全虛擬化的架構虛擬出來的作業系統幾乎都可以包括,像是 Windows, Linux ,Netware 都有支援,如果你沒有特別的需求可以考慮這一類的虛擬化方式.它像是其他虛擬化的環境為每個虛擬出來的 Guest OS 提供了獨立不受其他的 Guest OS 影響的獨立環境,但整體是你的最原始的作業系統沒有被破壞.做出來的 Guest Os 還可以輕易的移到不同的機台下繼續使用.

在正式講 Virtualization 時我先介紹一下針對虛擬化我的的裝置硬體有什麼改變.
1.CPU
2.Memory
3.Networking
4.I/O Devices

目前有推出 Virtualization 有主要的下面4家廠商
1.Microsoft 的 Virtual Server
2.Vmware 的一系列產品.
3.Citrix 的 Xen.
4.Sun 的 VirtualBox

這邊介紹一下常用的幾種 virtualization 的應用
1.VMware

2.XEN
3.Ubuntu - KVM(Kernel Based Virtual Machine)
大多數的 Linux 版本虛擬化技術都採用 Xen 作為的基礎,如 RedHat 或是 SLES(SuSE Linux Enterprise Server).不過也是有例外的如 Ubuntu 就是採用 KVM(Kernel Based Virtual Machine) 做為虛擬化技術的基礎.有興趣可以參考 :
https://help.ubuntu.com/community/KVM
http://www.linux-kvm.org/page/Main_Page

4.Solaris - Virtual-Box

5.Windows - Virtual Server

7.XEN - RHEL5

參考網頁:
http://phorum.study-area.org/index.php/topic,51291.0.html
http://phorum.study-area.org/index.php/topic,48739.html
http://www.ithome.com.tw/itadm/article.php?c=50025&s=5
http://www.virtuatopia.com/index.php/Main_Page