我應該用哪種虛擬機?(終)
系列文章導航:
以下是我個人的一些主觀感受,沒有任何客觀數據支持。
————————
按實現方式來劃分,從下面幾個方面做一個比較
CPU效率:
軟虛擬和硬件虛擬基本差不多,但是模擬的CPU速度最慢,而且不是慢一點半點。
內存效率:
大家都差不多,即便是QEMU這樣的模擬器加上了KQEMU的加速,也能湊合。
內存占用:
硬虛擬的一大軟肋。軟虛擬可以輕松地在一臺機器上安裝十多個虛擬機,但是硬虛擬就很難做到。主要的障礙是硬虛擬上的操作系統彼此獨立,而且主流的操作系統對內存消耗都是非常貪婪的(用盡最后一個比特)。
I/O效率:
硬虛擬的另一大軟肋。在Guest操作系統上裝特殊的驅動,然后通過虛擬的總線(Hyper-V的VMBus)把操作直接委托給Host來完成,速度有所提升。但是由于DMA的緣故,在AMD/Intel不推出硬件支持的情況下,沒法有根本改觀。
可管理型:
硬虛擬的弱項。控制Guest操作系統基本上都是靠在Guest操作系統上安裝控制軟件來完成的。在沒有控制軟件的幫助下,就是關閉操作系統之類的事情都無法完成,要強制關機。軟虛擬在這個方面非常方便。
安全性:
軟虛擬的大軟肋。就是Unix的chroot,人稱jail系統。但是越獄的事情時有發生。硬虛擬,特別是純硬件的全虛擬,有很高的安全性,能夠真正達到沙箱(sandbox)的效果。
通用性:
軟虛擬機的大軟肋。最明顯的是Virtuozzo,這個windows下唯一的操作系統級別的虛擬化技術,它只支持Windows Server 2003 r2 sp2。硬虛擬在沒有驅動加速的情況下,通用性一般是比較好的。但是如果需要驅動加速,仍然是要給每個不同平臺寫不同的驅動。
————————
按我用過的產品來分,大概列出它們的一些特色和適用的場合
Hyper-V
實現:硬件虛擬(對于Windows和Suse Linux支持驅動加速的半虛擬)
特色:對Windows支持好,將來支持會更好。管理型不錯,微軟有一套管理工具。
適用:負載不高的服務器,安全性敏感的場合,開發。
Virtual Server/PC
實現:硬件虛擬
特色:使用簡單,和Windows集成好。性能差。
適用:開發,負載非常低的服務器
Vmware Workstation/GSX Server
實現:硬件虛擬
特色:使用簡單,支持多平臺。性能差。
適用:非Windows平臺的開發,以及負載非常低的服務器
Virtual Box
實現:硬件虛擬
特色:另外一個Virtual PC或者Vmware Workstation
Vmware ESX Server
實現:硬件虛擬機+對主流平臺的驅動加速+內存優化
特色:硬虛擬中的速度標桿,成熟
使用:負載中等的服務器
Xen
實現:同Vmware ESX Server
特色:速度也很快,有開源社區支持(不過Windows優化那部分沒有開源。。。)
適用:負載中等的服務器
QEMU
實現:動態編譯模擬器+KQEMU(內存加速)
特色:兼容性好,支持多CPU。
適用:玩具?
KVM
實現:硬件虛擬+Linux平臺的驅動加速和內存優化+Windows平臺的網卡加速
特色:后起之秀,有強大的社區和大公司支持。直接整合進Linux內核
適用:Linux平臺上的開發與不重要的服務器
Virtuozzo
實現:操作系統虛擬化
特色:Windows下的唯一操作系統級別虛擬化產品(也有Linux版本OpenVZ)
適用:大規模的虛擬服務器部署,虛擬主機提供商
————————
做開發的:
Windows用Virtual PC,Linux用Vmware
做中低負載服務器:
Vmware ESX,Xen,KVM,Hyper-V
做高負載,高密度服務器:
Virtuozzo,OpenVZ,Linux系的chroot族產品,Solaris Zone
————————
狀態管理
最后來關注一下虛擬機的一個非常重要的特性,狀態管理。功能強弱排列:
靜態磁盤狀態
最弱,不支持Differencing。Xen?Virtuozzo?
動態磁盤狀態
支持Differencing
靜態內存狀態
支持把內存狀態存檔和恢復,但是需要重啟,所謂Snapshot。大部分虛擬機都支持到這(Virtual PC,Vmware Workstation。。。)
動態內存狀態
動態記錄內存狀態和恢復。QEMU/KVM
全管理
包括網卡狀態等都管理了。從而能夠實現Live Migration(動態遷移)。Hyper-V 2.0的重要目標就是這個了。所以從角度來說,硬虛擬最成熟的還是Vmware ESX,其次是Xen。KVM也不能小視,短短時間連Live Migration都支持了。