《KVM实战:原理、进阶与性能调优》 —2 KVM原理简介

举报
华章计算机 发表于 2019/11/24 20:34:19 2019/11/24
【摘要】 本节书摘来自华章计算机《KVM实战:原理、进阶与性能调优》一书中第2章,第2.1.1节,作者是任永杰 程舟。

第2章

KVM原理简介

2.1 硬件虚拟化技术

通过第1章的介绍,大家已经知道KVM虚拟化必须依赖于硬件辅助的虚拟化技术,本节就来介绍一下硬件虚拟化技术。

最早的硬件虚拟化技术出现在1972年的大型机IBM System/370 系统上,而真正让硬件虚拟化技术“走入寻常百姓家”的是2005年年末Intel发布的VT-x硬件虚拟化技术,以及AMD于2006年发布的AMD-V。本书中除了特别说明,默认以Intel的硬件虚拟化技术作为代表来介绍。

2.1.1 CPU虚拟化

CPU是计算机系统最核心的模块,我们的程序执行到最后都是翻译为机器语言在CPU上执行的。在没有CPU硬件虚拟化技术之前,通常使用指令的二进制翻译(binary translation)来实现虚拟客户机中CPU指令的执行,很早期的VMware就使用这样的方案,其指令执行的翻译比较复杂,效率比较低。所以Intel最早发布的虚拟化技术就是CPU虚拟化方面的,这才为本书的主角—KVM的出现创造了必要的硬件条件。

Intel在处理器级别提供了对虚拟化技术的支持,被称为VMX(virtual-machine extensions)。有两种VMX操作模式:VMX 根操作(root operation) 与VMX 非根操作(non-root operation)。作为虚拟机监控器中的KVM就是运行在根操作模式下,而虚拟机客户机的整个软件栈(包括操作系统和应用程序)则运行在非根操作模式下。进入VMX非根操作模式被称为“VM Entry”;从非根操作模式退出,被称为“VM Exit”。

VMX的根操作模式与非VMX模式下最初的处理器执行模式基本一样,只是它现在支持了新的VMX相关的指令集以及一些对相关控制寄存器的操作。VMX的非根操作模式是一个相对受限的执行环境,为了适应虚拟化而专门做了一定的修改;在客户机中执行的一些特殊的敏感指令或者一些异常会触发“VM Exit”退到虚拟机监控器中,从而运行在VMX根模式。正是这样的限制,让虚拟机监控器保持了对处理器资源的控制。

一个虚拟机监控器软件的最基础的运行生命周期及其与客户机的交互如图2-1所示。

 image.png

图2-1 VMM与Guest之间的交互

软件通过执行VMXON指令进入VMX操作模式下;在VMX模式下通过VMLAUNCH 和VMRESUME指令进入客户机执行模式,即VMX非根模式;当在非根模式下触发VM Exit时,处理器执行控制权再次回到宿主机的虚拟机监控器上;最后虚拟机监控可以执行VMXOFF指令退出VMX执行模式。

逻辑处理器在根模式和非根模式之间的切换通过一个叫作VMCS(virtual-machine control data structure)的数据结构来控制;而VMCS的访问是通过VMCS指针来操作的。VMCS指针是一个指向VMCS结构的64位的地址,使用VMPTRST和VMPTRLD指令对VMCS指针进行读写,使用MREAD、VMWRITE和VMCLEAR等指令对VMCS实现配置。

对于一个逻辑处理器,它可以维护多个VMCS数据结构,但是在任何时刻只有一个VMCS在当前真正生效。多个VMCS之间也是可以相互切换的,VMPTRLD指令就让某个VMCS在当前生效,而其他VMCS就自然成为不是当前生效的。一个虚拟机监控器会为一个虚拟客户机上的每一个逻辑处理器维护一个VMCS数据结构。

根据Intel的官方文档,我们这里列举部分在非根模式下会导致“VM Exit”的敏感指令和一些异常供读者朋友参考,这对于理解KVM的执行机制是必要的,因为KVM也必须按照CPU的硬件规范来实现虚拟化软件逻辑。

1)一定会导致VM Exit的指令:CPUID、GETSEC、INVD、XSETBV等,以及VMX 模式引入的INVEPT、INVVPID、VMCALL、VMCLEAR、VMLAUNCH、VMPTRLD、VMPTRST、VMRESUME、VMXOFF、VMXON等。

2)在一定的设置条件下会导致VM Exit的指令:CLTS、HLT、IN、OUT、INVLPG、INVPCID、LGDT、LMSW、MONITOR、MOV from CR3、MOV to CR3、MWAIT、MWAIT、RDMSR、RWMSR、VMREAD、VMWRITE、RDRAND、RDTSC、XSAVES、XRSTORS等。如在处理器的虚拟机执行控制寄存器中的“HLT exiting”比特位被置为1时,HLT的执行就会导致VM Exit。

3)可能会导致VM Exit的事件:一些异常、三次故障(Triple fault)、外部中断、不可屏蔽中断(NMI)、INIT信号、系统管理中断(SMI)等。如在虚拟机执行控制寄存器中的“NMI exiting”比特位被置为1时,不可屏蔽中断就会导致VM Exit。

最后提一下,由于发生一次VM Exit的代价是比较高的(可能会消耗成百上千个CPU执行周期,而平时很多指令是几个CPU执行周期就能完成),所以对于VM Exit的分析是虚拟化中性能分析和调优的一个关键点。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。