我应该用哪种虚拟机?(终)
系列文章导航:
以下是我个人的一些主观感受,没有任何客观数据支持。
————————
按实现方式来划分,从下面几个方面做一个比较
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都支持了。