8.1.1 KVM简介
在新时代数据中心,虚拟化技术已打破传统的运维技术和管理技术。Intel公司在早期就已认识到虚拟化技术的重要性。从服务器硬件层虚拟化技术来讲,就不得不提及VT-X虚拟化技术,VT-X技术是Intel公司开发的CPU硬件层的虚拟化技术。但是从操作系统内部查看CPU的标志时,支持硬件虚拟化的判断标准为:是否有VMX,vmx是什么,它与虚拟化有什么关系。下面将详细进行介绍。
1.VMM管理
VMM(Virtual Machine Monitor,虚拟机监视器)在宿主机上表现为提供虚拟机CPU、内存以及一系列硬件虚拟机的实体,这个实体在KVM体系中就是一个进程,如qemu-kvm。VMM负责管理虚拟机的资源,并拥有所有虚拟机资源的控制权,包括切换虚拟机的CPU上下文等。
2.Guest
Guest可能是一个操作系统,也可能是一个二进制程序。在虚拟化层,用户使用的是一套完整的操作系统,而在服务器资源管理层,它是二进制程序的定义。对于VMM来说,Guest就是一堆指令集,只需要知道入口(rip寄存器值)就可以加载。Guest运行时需要虚拟机CPU,当Guest代码运行的时候,处于VMX non-root模式,此模式下,该用什么指令就用什么指令,该用什么寄存器就用什么寄存器,该用Cache就用Cache,但是在执行到特殊指令的时候(比如Demo中的out指令),把CPU控制权交给VMM,由VMM来处理特殊指令,完成硬件操作。
3.CPU运行级别
在物理层,CPU支持ring 0~ring 3四个等级,但是Linux只使用了其中的两个等级,即ring 0和ring 3。当CPU寄存器标示了当前CPU处于ring 0级别的时候,表示此时CPU运行的是内核的代码。而当CPU处于ring 3级别的时候,表示此时CPU运行的是用户级别的代码。当发生系统调用或者进程切换的时候,CPU会从ring 3级别转到ring 0级别。ring 3级别是不允许执行硬件操作的,所有硬件操作都需要内核提供的系统调用来完成。
4.VMX模式
为了从CPU层面支持VT技术,Intel公司在ring 0~ring 3的基础上扩展了传统的x86处理器架构,引入了VMX模式,VMX分为root和non-root。VMM运行在VMX root模式;Guest运行在VMX non-root模式。
有了CPU的运行级别和VMX,就可以看看CPU虚拟化的基本运行情况了。Guest OS里的内核运行于VMX non-root模式下的ring 0;Guest OS里的应用程序运行于VMX non-root模式下的ring 3;Host OS的内核和VMM运行于VMX root模式下的ring 0。虽然Guest OS的内核也运行于ring 0,但由于是VMX non-root模式,所以不能操作某些资源,不能运行敏感指令。Guest也支持ring 0~ring 3四个等级,但是它并不知道自己处于VMX non-root模式下。