云计算常见虚拟化的类型有三种,各自特点如下所述:
一、全虚拟化(Full Virtulization)(vmware、kvm)
简介:主要是在客户操作系统和硬件之间捕捉和处理那些对虚拟化敏感的特权指令,使客户操作系统无需修改就能运行,速度会根据不同的实现而不同,但大致能满足用户的需求。这种方式是业界现今最成熟和最常见的,而且属于 Hosted 模式和 Hypervisor 模式的都有,知名的产品有IBM CP/CMS,VirtualBox,KVM,VMware Workstation和VMware ESX(它在其4.0版,被改名为VMware vSphere)。
【优点】Guest OS无需修改,速度和功能都非常不错,更重要的是使用非常简单,不论是 VMware 的产品,还是Sun(Oracle?)的 VirtualBox。
【缺点】基于Hosted模式的全虚拟产品性能方面不是特别优异,特别是I/O方面。
【未来】因为使用这种模式,不仅Guest OS免于修改,而且将通过引入硬件辅助虚拟化技术来提高其性能,我个人判断,在未来全虚拟化还是主流。
CPU全虚拟化:采用二进制代码动态翻译技术,即在执行时动态地重写虚拟机的执行代码,需要在VMM监控和模拟的位置(即敏感指令前)插入陷入指令的技术。
【优点】Guest OS无需修改即可运行。
【缺点】动态翻译会带来一定的性能开销。
二、半虚拟化(Parairtulization)(xen)
简介:它与完全虚拟化有一些类似,它也利用Hypervisor来实现对底层硬件的共享访问,但是由于在Hypervisor 上面运行的Guest OS已经集成与半虚拟化有关的代码,使得Guest OS能够非常好地配合Hyperivosr来实现虚拟化。通过这种方法将无需重新编译或捕获特权指令,使其性能非常接近物理机,其最经典的产品就是Xen,而且因为微软的Hyper-V所采用技术和Xen类似,所以也可以把Hyper-V归属于半虚拟化。
【优点】这种模式和全虚拟化相比,架构更精简,而且在整体速度上有一定的优势。
【缺点】需要对Guest OS进行修改,所以在用户体验方面比较麻烦。
【未来】觉得其将来应该和现在的情况比较类似,在公有云(比如Amazon EC2)平台上应该继续占有一席之地,但是很难在其他方面和类似VMware vSphere这样的全虚拟化产品竞争,同时它也将会利用硬件辅助虚拟化技术来提高速度,并简化架构。
CPU半虚拟化:通过修改Guest OS的内核源代码,将待监控的操作替换为对VMM的超级调用(Hypercall)
【优点】避免了“二进制代码动态翻译”这种开销较大的做法,性能方面得到了很大的提升。
【缺点】需要修改Guest OS的源代码,使虚拟机上的操作系统类型受到限制,不开源的操作系统(如windows系统???那pv-driver呢?)就很难移植到半虚拟化的vmm平台上。
三、硬件辅助虚拟化(Hardware Assisted Virtualization)(kvm、vmware、xen均可以用该技术)
简介:Intel/AMD等硬件厂商通过对部分全虚拟化和半虚拟化使用到的软件技术进行硬件化(具体将在下文详述)来提高性能。硬件辅助虚拟化技术常用于优化全虚拟化和半虚拟化产品,而不是独创一派,最出名的例子莫过于VMware Workstation,它虽然属于全虚拟化,但是在它的6.0版本中引入了硬件辅助虚拟化技术,比如Intel的VT-x和AMD的AMD-V。现在市面上的主流全虚拟化和半虚拟化产品都支持硬件辅助虚拟化,包括VirtualBox,KVM,VMware ESX和Xen。
【优点】通过引入硬件技术,将使虚拟化技术更接近物理机的速度。(半虚拟化vmm能够在不修改guest os内核的基础上,同时支持两种不同的虚拟化架构,xen是最大的受益者)。
【缺点】现有的硬件实现不够优化,还有进一步提高的空间。
【未来】因为通过使用硬件技术不仅能提高速度,而且能简化虚拟化技术的架构,所以预见硬件技术将会被大多数虚拟化产品所采用