对服务器虚拟化技术的补充
在2013年3月9号发表的文章中谈到了虚拟化,主要介绍了程序虚拟化(常见的就是Java虚拟机);混合虚拟化(常见的有微软的Virtual PC;VMware的VMware Workstation;VirtualBox等)和裸金属架构虚拟化(常见的有VMware ESX Server,微软的Hyper-V(微软2003年收购Connectix后获得的技术发展而来),思杰收购的XenServer(源于英国剑桥大学计算机实验室开发的一个Xen虚拟化开源项目))。
后来有人问及还有全虚拟化,半虚拟化,操作系统虚拟化等,然后说我是不是搞错了,搞混了。其实我想说你们没有错,多种名词和说法可以,我的那种说法也是对的――问题的主要原因,是“横看成林侧成峰,远近高低各不同”,“仁者见仁,智者见智”,也就是说看法和角度不同而已。
下面我再对全虚拟化,半虚拟化,操作系统寄生虚拟化等给予说明。
程序虚拟化和混合虚拟化,一般都不能用在服务器、数据中心层面的,为什么:效率太低,依赖性太大,不用多说。
能用在服务器、数据中心层面的虚拟化技术,硬要分类,可以说有裸金属架构虚拟化(典型的代表就是常见的有VMware ESX Server,微软的Hyper-V,思杰的XenServer)和寄生内核虚拟化(典型代表是KVM,Kernel-based Virtual Machine,意为基于内核的虚拟机;2008年9月,红帽收购了名叫Qumranet的以色列公司得到KVM的虚拟化技术;VMWare现在也朝着内核寄生架构走,因为他的Hypervisor需要管理),两者区别简单表示如下图八所示。

(图八、络金属架构虚拟化和寄生内核虚拟化)
可见,这种基于内核的虚拟化技术性能稍低前者,因为至少多了一层开销。
同时我也谈及VMware ESX Server由于把底层物理硬件的驱动程序整合到Hypervisor管理层中,所以管理层显得比较胖,我们不妨称其为胖虚拟化。这种架构对于底层物理硬件的要求比较高,兼容性和安全性的挑战比较高。
微软的Hyper-V,Hypervisor管理层仅用于管理CPU和内存,而不包含底层物理硬件的驱动程序,所以管理层显得比较瘦,我们不妨称其为瘦虚拟化。由于不包含硬件驱动,所以代码量比较小,安全性更高、兼容性也更好。
也就是说,从Hypervisor层来看,又可分为胖虚拟化和搜虚拟化。
另外,从支持的来宾操作系统和性能上来说,又可以分为半虚拟化,全虚拟化。下面给予说明。
半虚拟化(ParaVirtulization)
简介:它利用CPU的虚拟化技术来实现Hypervisor对底层硬件的共享访问,但是由于在Hypervisor 上面运行的来宾操作系统已经集成与半虚拟化有关的代码,使得来宾操作系统能够非常好地配合Hyperivosr来实现虚拟化。通过这种方法将无需重新编译或捕获特权指令,使其性能非常接近物理机,其最经典的产品就是微软的Hyper-V,思杰的Xen,
可见对应上面的�C虚拟化
。
优点:这种模式和全虚拟化相比,架构更精简,而且在整体速度上有一定的优势。
缺点:需要对来宾操作系统进行修改,所以在支持的来宾操作系统方面比较少。
全虚拟化(FullVirtulization)
简介:它与半虚拟化有一些类似,它也利用Hypervisor在客户操作系统和硬件之间捕捉和处理那些对虚拟化敏感的特权指令,使客户操作系统无需修改就能运行,速度会根据不同的实现而不同(
它有借助CPU硬件的技术实现,也有软件完全模拟的部分)
,大致能满足用户的需求。这种方式有KVM,VMware ESX,
可见对应上面的胖虚拟化
。
。
优点:无需修改就能支持几乎所有的来宾操作系统,也就是说兼容性不错。
缺点:因为某些部分有模拟的功能,所以I/O和性能方面相对前者较差。
两者的差别,可以用下图九合图十表示。
(图九、半虚拟化)

(图十、全虚拟化)