CPU虚拟化

我们是光大科技有限公司智能云计算部云计算团队集团云项目组,致力于光大集团IaaS平台建设与维护工作,面向集团本部及子公司提供弹性、可扩展的IaaS平台服务。我团队在云计算、虚拟化、存储领域拥有多名经验丰富的技术专家,将不定期与大家分享原创技术文章和相关实践经验,期待与大家共同探讨和进步。

中央处理器(CPU),是计算机的主要设备之一,是计算机中的核心配件。在计算机体系结构中,CPU是对计算机的所有硬件资源(如存储器、输入输出单元)进行控制调配、执行通用运算的核心硬件单元。计算机系统中所有软件层的操作,最终都将通过指令集映射为对CPU的操作。

CPU虚拟化的发展促进服务器虚拟化的发展,作为云计算主要技术之一的服务器虚拟化,对云计算的发展也起到至关重要的作用。服务器虚拟化是将物理资源进行逻辑抽象化,使CPU、内存、I/O设备等变成虚拟化的“资源池”。在虚拟化技术中,虚拟化层通常被称为虚拟机监控器(Virtual Machine Monitor, VMM),也叫做Hypervisor。虚拟化的结构如下图所示:

实际的物理CPU通过虚拟化的技术,被抽象为虚拟的CPU,但是虚拟CPU的工作还是要落实在实际的物理CPU之上。从微观的角度来说,一个CPU在某一时刻也只能运行一个虚拟CPU的指令。CPU虚拟化又分为完全虚拟化、半虚拟化和硬件辅助虚拟化。

P1

完全虚拟化

完全虚拟化是给客户机提供一个完整的虚拟平台,包括处理器、内存和网络等,支持任何理论上可在真实物理平台上运行的操作系统,为虚拟机的配置提供了最大程度的灵活性,这是完全虚拟化无可比拟的优势。

完全虚拟化:虚拟机并不知道自己运行在虚拟的环境中,使用起来和真实的物理机上没有什么区别,这种虚拟环境就需要中间的软件来做支持,软件模拟出所有的物理硬件资源供虚拟客户机来使用。软件模拟的CPU Ring 0-3需要在调用物理CPU时候,转换成对应的物理CPU Ring 0-3指令。

CPU虚拟化

说白了,完全虚拟化,其实就是“骗”虚拟机。虚拟化软件模拟假的CPU,内存,网络,硬盘给虚拟机,在虚拟机自己看来,自己是一个完全体,自己感觉很良好,但是实际的工作步骤如下:

CPU虚拟化

完全虚拟化跑腿组(3)

CPU虚拟化

虚拟机内核

我要在CPU上跑一个指令!

虚拟化软件

没问题,你是内核嘛,可以跑!

CPU虚拟化

虚拟化软件

@物理机内核

报告管家,我管理的一个虚拟机要执行一个CPU指令,帮忙来一小段空闲的CPU时间,让我代他跑个指令。

CPU虚拟化
CPU虚拟化

物理机内核

你等会儿,CPU有哥们儿占着呢。

1分钟之后

CPU虚拟化

物理机内核

好啦,他终于跑完了,该你了。

虚拟化软件

我代他跑,终于跑完了,出来结果啦!

CPU虚拟化

虚拟化软件

@虚拟机内核

哥们儿,跑完啦!结果给你,我说你是内核吧,绝对有权限,没问题,下次跑指令找我啊!

CPU虚拟化
CPU虚拟化

虚拟机内核

看来我真的是内核呢。可是哥,好像这点指令跑的有点慢啊。

虚拟化软件

这就不错啦,好几个排着队跑呢。

CPU虚拟化
CPU虚拟化

╮( ̄▽ ̄\”\”)╭

CPU虚拟化
CPU虚拟化
CPU虚拟化

P2

半虚拟化

由于完全虚拟化的性能损失是很严重的,为了取得更高的性能,就需要让虚拟机内核加载特殊的驱动,修改客户虚拟机的操作系统,使虚拟机明确自己运行在虚拟的环境中。半虚拟化就是通过这种方式,让虚拟机内核从代码层面重新定位自己的身份,明确自己运行在非Ring 0状态。半虚拟化对CPU调用可以直接向VMM申请,可以与VMM很好地协同工作。

CPU虚拟化

例如Xen这种半虚拟化技术,客户机操作系统都是有一个专门的定制内核版本,和x86、MIPS、ARM这些内核版本等。这样一来,客户机就不会有捕获异常、翻译、模拟的过程了,性能损耗非常低,这就是Xen这种半虚拟化架构的优势。这也是为什么Xen的半虚拟化支持Linux内核,而不支持Windows内核的原因(微软不让改代码啊)。

P3

硬件辅助虚拟化

CPU虚拟化

图片来源于网络

针对完全虚拟化的效率极慢的问题,虚拟化软件想,“我能不能不当传话筒,还是要让虚拟机内核正视自己的身份,‘骗’你是内核,你还真喘上了!你不是物理机,你是虚拟机!”但是权限等级的问题就成了一个大问题,于是Intel的VT-x和AMD的AMD-V这两种技术就从硬件层面帮上了忙,它们和各自生产的CPU绑定,Intel CPU只能使用Intel VT-x,AMD CPU只能使用AMD-V。其核心思想都是通过引入新的指令和运行模式,使VMM和Guest OS分别运行在不同模式(ROOT模式和非ROOT模式)下,且Guest OS运行在Ring 0下。

Intel VT-x

Intel VT-x技术解决了早期x86架构在虚拟化方面存在的缺陷,可使未经修改的Guest OS运行在Ring 0,同时减少VMM对Guest OS的干预。通常情况下,Guest OS的指令可以直接下达到计算机系统硬件执行,而不需要经过VMM。当Guest OS执行到特殊指令的时候,系统会切换到VMM,让VMM来处理特殊指令,其技术简要构造如下图所示:

CPU虚拟化

图片来源于网络

VT-x提供了2个运行环境:根(Root)环境和非根(Non-root)环境。根环境专门为VMM准备,非根环境作为一个受限环境用来运行多个虚拟机。

CPU虚拟化

如上图所示,根操作模式与非根操作模式都有相应的Ring 0至Ring 3。VMM运行在根模式的Ring 0层,Guest的内核以及Guest的应用程序分别运行在非根模式的Ring 0层和Ring 3层。运行环境之间相互转化,从根环境到非根环境叫VM Entry;从非根环境到根环境叫VM Exit。VT-x定义了VM Entry操作,使CPU由根模式切换到非根模式,运行客户机操作系统指令。若在非根模式执行了敏感指令或发生了中断等,会执行VM Exit操作,切换回根模式运行VMM。

(敏感指令=特权指令+部分非特权指令,也就是说特权指令一定是敏感指令)

敏感指令的主要类型有:

  1. 有关对I/O设备使用的指令,如启动I/O设备指令、测试I/O设备工作状态和控制I/O设备动作的指令等。

  2. 有关访问程序状态的指令,如对程序状态字(PSW)的指令等。

  3. 存储特殊寄存器指令,如存取、中断寄存器/时钟寄存器等指令。

  4. 其他的特权指令。

AMD-V

AMD-V和Intel VT-x提供的特征大多功能类似,但名称不一样,尽管两者具有很多的相似性,但是在实现上对于VMM而言,是不兼容的。AMD-V的技术在传统的AMD x86-64的基础上引进了“guest”的操作模式。“guest”操作模式就是使CPU进入客户机操作系统运行时所处的模式。

  1. 首先,“guest”操作模式为客户机操作系统创建出一个不同于VMM的运行环境;

  2. 其次,“guest”操作模式不需要改变客户机操作系统已有的4个特权级机制,也就是说在“guest”操作模式下,客户机的操作系统内核依然是运行在Ring 0的状态下,用户程序依然运行在Ring 3的状态下,物理主机上的操作系统和VMM所在的操作模式依然和传统的x86是一样的,且称之为“host”操作模式;

  3. 最后,VMM通过执行VMRUN的指令,使CPU进入到“guest”操作模式,并且执行客户机操作系统中的程序。如果“guest”操作模式在客户机操作系统中运行的时候,遇到敏感的指令或者事件,就会执行虚机退出(VM-EXIT)的动作,使CPU调整到“host”模式进而执行VMM的指令。

“guest”模式的意义在于其让客户机操作系统处于完全不同的运行环境,而不需要改变客操作系统的代码。“guest”模式的设立在系统中建立了一个比 Ring 0更强的特权控制,即客户机操作系统的Ring 0特权必须让位于VMM的Ring 0特权。客户机操作系统上运行的那些特权指令,即便是在Ring 0上也变的可以被VMM截取的了。此外,VMM 还可以通过虚拟机控制块(Virtual Machine Control Block,VMCB)中的各种截取控制字段选择性的对指令和事情进行截取,或设置有条件的截取,所有的敏感的特权或非特权指令都在其控制之中。

CPU虚拟化经历了多次技术变革,最终悟出了它的人生真谛“要时刻明确自己的所处的环境,找准自己的定位,认识到自己的不足之后,痛定思痛,才能使自己更加完美。”

往期回顾

1丨云合景从,学无止境-光大科技企业智慧教育整体解决方案

2丨OAuth2.0协议及单点登录应用

3丨DevOps持续部署实践之特性开关

4丨金融智变,云管未来-智能多云管理平台(AICMP)

扫二维码|关注EBCloud

作者|赵春辉

原创文章,作者:EBCloud,如若转载,请注明出处:https://www.sudun.com/ask/32700.html

(0)
EBCloud's avatarEBCloud
上一篇 2024年4月2日 下午3:28
下一篇 2024年4月2日 下午3:28

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注