1.2.3 半虚拟化
半虚拟化又称准虚拟化、类虚拟化,是指通过对客户机进行源码级的修改,让客户机可以使用虚拟化的资源。由于需要修改客户机内核,因此半虚拟化一般都会被顺便用来优化I/O。客户机的操作系统通过高度优化的I/O协议,可以和VMM紧密结合达到近似于物理机的速度。
软件虚拟化可以在缺乏硬件虚拟化支持的平台上完全通过Hypervisor来实现对各个客户虚拟机的监控,从而保证它们之间彼此独立和隔离。但是软件虚拟化付出的代价是软件复杂度的增加和性能上的损失。降低这种损失的一种方法是修改客户机操作系统,让客户机操作系统知道自己运行在虚拟化环境下,且能够让客户机操作系统和虚拟机监控器协同工作,这也是半虚拟化由来。
半虚拟化使用Hypervisor分享存取底层的硬件,也利用Hypervisor来实现对底层硬件的共享访问。由于通过这种方法无须重新编译或捕获特权指令,使其性能非常接近物理机。
在半虚拟化解决方案中,客户机操作系统集成了虚拟化方面的代码,这些代码无须重新编译,这就使得客户机操作系统能够非常好地配合Hypervisor来实现虚拟化,因此宿主机操作系统能够与虚拟进程进行很好的协作。
半虚拟化解决方案中最经典的产品就是Xen,Xen是开源半虚拟化技术的一个例子。客户机操作系统在Xen的Hypervisor上运行之前,必须在内核层面进行某些改变,因此,Xen适用于BSD、Linux、Solaris以及其他开源操作系统,但不太适合Windows系列的专用操作系统。因为Windows系列不公开源代码,无法修改其内核。微软的Hyper-V所采用的技术和Xen类似,因此也可以把Hyper-V归属于半虚拟化的范畴。
半虚拟化需要客户机操作系统做一些修改来配合Hypervisor,这是一个不足之处,但是半虚拟化提供了与原始系统相近的性能,同时还能支持多个不同操作系统的虚拟化。图1-3所示在半虚拟化环境中,各客户操作系统运行的虚拟平台,以及修改后的客户机操作系统在虚拟平台上分享进程。
图1-3 半虚拟化通过修改后的客户机操作系统分享进程
总而言之,半虚拟化的优点为:与全虚拟化相比,架构更精简,在整体速度上有一定的优势。其缺点为:需要对客户机操作系统进行修改,在用户体验方面比较麻烦。例如,对于Xen而言,如果需要虚拟Linux操作系统作为客户机操作系统,就需要将Linux操作系统修改成Xen支持的内核才能使用。