kvm之虚拟化原理-cpu虚拟化【理论知识】
1、基础知识
1.1、时间分片
操作系统安装后,CPU默认情况下就是被虚拟化了的,只不过是基于"时间片"的方式,所以虚拟化技术也需要基于"分时技术"来实现,只不过比进程的虚拟化实现麻烦很多。原因就在于工作中的任务都是由进程来实现的。
1.2、系统调用
为了协调多任务,操作系统被分成了两段: 内核空间:接近硬件,主要执行特权指令 用户空间:执行普通的指令 用户空间的执行想要执行某些特权指令,就需要进行"系统调用"
1.3、虚拟机内部的cpu指令图
2、虚拟机操作宿主机的资源的方式
实现虚拟机操作宿主机的资源的方式很多,主要是通过以下几种方式来实现:模拟、完全虚拟化、硬件辅助虚拟化、半虚拟化
2.1、模拟
关机场景:
使用宿主机的进程来模拟虚拟机的CPU,那么虚拟机的操作指令都转发给宿主机的进程来执行,最终关闭宿主机的进程来模拟虚拟机的电源功能。
缺点:
虚拟机大量进程间的转换导致宿主机的cpu切片频繁发生,导致性能很不好。
2.2、完全虚拟化
完全虚拟化:各虚拟主机不知道自己是一个虚拟主机因为虚拟机指令转发给宿主机进程太消耗性能了,所以就出来了一种新的技术:BT(二进制转换)将虚拟机对特权指令的调用,在调用的那一刻直接翻译成对宿主机的特权指令的调用, 缺点: 比分时技术稍好一些,但性能依然很差,达到物理性能的80%。 某些用户空间指令没有必要翻译,可直接执行在主机的ring3上,
2.3、硬件辅助虚拟化
由于BT技术的缺点,所以有了第三种技术:HVM(硬件辅助技术),常见的有:Intel的VT-x或AMD的AMD-V宿主机通过硬件辅助技术生成一个ring-1,虚拟机上的其他指令直接在主机的ring3上执行,特权指令直接在ring0上运行,
宿主机CPU硬件可以直接将ring0上的特权指令转换成ring-1中的特权指令,然后执行指令。 据说:达到物理主机性能的85%。
2.4、半虚拟化
宿主机中接收虚拟机指令的组件叫hypervisor,它直接管理宿主机的CPU和mem硬件,不包括io硬件。
半虚拟化:修改操作系统的内核,让虚拟机的内核知道自己是在虚拟环境中,不能执行特权指令。虚拟主机发现要执行一个特权指令,那么虚拟主机内核向宿主机发起hyper call,交由宿主机的hypervisor组件去执行相应的硬件。
据说:达到物理主机性能的90~95%