《KVM实战:原理、进阶与性能调优》 —1.2.3 半虚拟化和全虚拟化
1.2.3 半虚拟化和全虚拟化
1.半虚拟化
通过上一节的描述,大家可以理解,最理想的虚拟化的两个目标如下:
1)客户机完全不知道自己运行在虚拟化环境中,还以为自己运行在原生环境里。
2)完全不需要VMM介入客户机的运行过程。
纯软件的虚拟化可以做到第一个目标,但性能不是很好,而且软件设计的复杂度大大增加。
那么如果放弃第一个目标呢?让客户机意识到自己是运行在虚拟化环境里,并做相应修改以配合VMM,这就是半虚拟化(Para-Virtualization)。一方面,可以提升性能和简化VMM软件复杂度;另一方面,也不需要太依赖硬件虚拟化的支持,从而使得其软件设计(至少是VMM这一侧)可以跨平台且是优雅的。“本质上,准虚拟化弱化了对虚拟机特殊指令的被动截获要求,将其转化成客户机操作系统的主动通知。但是,准虚拟化需要修改客户机操作系统的源代码来实现主动通知。”典型的半虚拟化技术就是virtio,使用virtio需要在宿主机/VMM和客户机里都相应地装上驱动。
2.全虚拟化
与半虚拟化相反的,全虚拟化(Full Virtualization)坚持第一个理想化目标:客户机的操作系统完全不需要改动。敏感指令在操作系统和硬件之间被VMM捕捉处理,客户操作系统无须修改,所有软件都能在虚拟机中运行。因此,全虚拟化需要模拟出完整的、和物理平台一模一样的平台给客户机,这在达到了第一个目标的同时也增加了虚拟化层(VMM)的复杂度。
性能上,2005年硬件虚拟化兴起之前,软件实现的全虚拟化完败于VMM和客户机操作系统协同运作的半虚拟化,这种情况一直延续到2006年。之后以Intel VT-x、VT-d为代表的硬件虚拟化技术的兴起,让由硬件虚拟化辅助的全虚拟化全面超过了半虚拟化。但是,以virtio为代表的半虚拟化技术也一直在演进发展,性能上只是略逊于全虚拟化,加之其较少的平台依赖性,依然受到广泛的欢迎。
- 点赞
- 收藏
- 关注作者
评论(0)