标签:监控 之一 计算 云计 权限 项目 缺陷 linux内核 启动
我们是光大科技有限公司智能云计算部云计算团队集团云项目组,致力于光大集团IaaS平台建设与维护工作,面向集团本部及子公司提供弹性、可扩展的IaaS平台服务。我团队在云计算、虚拟化、存储领域拥有多名经验丰富的技术专家,将不定期与大家分享原创技术文章和相关实践经验,期待与大家共同探讨和进步。
中央处理器(CPU),是计算机的主要设备之一,是计算机中的核心配件。在计算机体系结构中,CPU是对计算机的所有硬件资源(如存储器、输入输出单元)进行控制调配、执行通用运算的核心硬件单元。计算机系统中所有软件层的操作,最终都将通过指令集映射为对CPU的操作。
CPU虚拟化的发展促进服务器虚拟化的发展,作为云计算主要技术之一的服务器虚拟化,对云计算的发展也起到至关重要的作用。服务器虚拟化是将物理资源进行逻辑抽象化,使CPU、内存、I/O设备等变成虚拟化的“资源池”。在虚拟化技术中,虚拟化层通常被称为虚拟机监控器(Virtual Machine Monitor, VMM),也叫做Hypervisor。虚拟化的结构如下图所示:
实际的物理CPU通过虚拟化的技术,被抽象为虚拟的CPU,但是虚拟CPU的工作还是要落实在实际的物理CPU之上。从微观的角度来说,一个CPU在某一时刻也只能运行一个虚拟CPU的指令。CPU虚拟化又分为完全虚拟化、半虚拟化和硬件辅助虚拟化。
完全虚拟化是给客户机提供一个完整的虚拟平台,包括处理器、内存和网络等,支持任何理论上可在真实物理平台上运行的操作系统,为虚拟机的配置提供了最大程度的灵活性,这是完全虚拟化无可比拟的优势。
完全虚拟化:虚拟机并不知道自己运行在虚拟的环境中,使用起来和真实的物理机上没有什么区别,这种虚拟环境就需要中间的软件来做支持,软件模拟出所有的物理硬件资源供虚拟客户机来使用。软件模拟的CPU Ring 0-3需要在调用物理CPU时候,转换成对应的物理CPU Ring 0-3指令。
说白了,完全虚拟化,其实就是“骗”虚拟机。虚拟化软件模拟假的CPU,内存,网络,硬盘给虚拟机,在虚拟机自己看来,自己是一个完全体,自己感觉很良好,但是实际的工作步骤如下:
1):虚拟机内核:我要在CPU上跑一个指令!
2):虚拟化软件:没问题,你是内核嘛,可以跑!
3):虚拟化软件转过头去找物理机内核:报告管家,我管理的一个虚拟机要执行一个CPU指令,帮忙来一小段空闲的CPU时间,让我代他跑个指令。
4):物理机内核:你等会儿,CPU有哥们儿占着呢。(过了一会儿)好啦,他终于跑完了,该你了。
5):虚拟化软件:我代他跑,终于跑完了,出来结果啦!
6):虚拟化软件转头给虚拟机内核:哥们儿,跑完啦!结果给你,我说你是内核吧,绝对有权限,没问题,下次跑指令找我啊!
7):虚拟机内核:看来我真的是内核呢。可是哥,好像这点指令跑的有点慢啊。
8):虚拟化软件:这就不错啦,好几个排着队跑呢。
由于完全虚拟化的性能损失是很严重的,为了取得更高的性能,就需要让虚拟机内核加载特殊的驱动,修改客户虚拟机的操作系统,使虚拟机明确自己运行在虚拟的环境中。半虚拟化就是通过这种方式,让虚拟机内核从代码层面重新定位自己的身份,明确自己运行在非Ring 0状态。半虚拟化对CPU调用可以直接向VMM申请,可以与VMM很好地协同工作。
例如Xen这种半虚拟化技术,客户机操作系统都是有一个专门的定制内核版本,和x86、MIPS、ARM这些内核版本等。这样一来,客户机就不会有捕获异常、翻译、模拟的过程了,性能损耗非常低,这就是Xen这种半虚拟化架构的优势。这也是为什么Xen的半虚拟化支持Linux内核,而不支持Windows内核的原因(微软不让改代码啊)。
针对完全虚拟化的效率极慢的问题,虚拟化软件想,“我能不能不当传话筒,还是要让虚拟机内核正视自己的身份,‘骗’你是内核,你还真喘上了!你不是物理机,你是虚拟机!”但是权限等级的问题就成了一个大问题,于是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技术解决了早期x86架构在虚拟化方面存在的缺陷,可使未经修改的Guest OS运行在Ring 0,同时减少VMM对Guest OS的干预。通常情况下,Guest OS的指令可以直接下达到计算机系统硬件执行,而不需要经过VMM。当Guest OS执行到特殊指令的时候,系统会切换到VMM,让VMM来处理特殊指令,其技术简要构造如下图所示:
VT-x提供了2个运行环境:根(Root)环境和非根(Non-root)环境。根环境专门为VMM准备,非根环境作为一个受限环境用来运行多个虚拟机。
如上图所示,根操作模式与非根操作模式都有相应的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。
(敏感指令=特权指令+部分非特权指令,也就是说特权指令一定是敏感指令)
敏感指令的主要类型有:
l 有关对I/O设备使用的指令,如启动I/O设备指令、测试I/O设备工作状态和控制I/O设备动作的指令等。
l 有关访问程序状态的指令,如对程序状态字(PSW)的指令等。
l 存储特殊寄存器指令,如存取、中断寄存器/时钟寄存器等指令。
l 其他的特权指令。
AMD-V和Intel VT-x提供的特征大多功能类似,但名称不一样,尽管两者具有很多的相似性,但是在实现上对于VMM而言,是不兼容的。AMD-V的技术在传统的AMD x86-64的基础上引进了“guest”的操作模式。“guest”操作模式就是使CPU进入客户机操作系统运行时所处的模式。
“guest”模式的意义在于其让客户机操作系统处于完全不同的运行环境,而不需要改变客操作系统的代码。“guest”模式的设立在系统中建立了一个比 Ring 0更强的特权控制,即客户机操作系统的Ring 0特权必须让位于VMM的Ring 0特权。客户机操作系统上运行的那些特权指令,即便是在Ring 0上也变的可以被VMM截取的了。此外,VMM 还可以通过虚拟机控制块(Virtual Machine Control Block,VMCB)中的各种截取控制字段选择性的对指令和事情进行截取,或设置有条件的截取,所有的敏感的特权或非特权指令都在其控制之中。
CPU虚拟化经历了多次技术变革,最终悟出了它的人生真谛“要时刻明确自己的所处的环境,找准自己的定位,认识到自己的不足之后,痛定思痛,才能使自己更加完美。”
标签:监控 之一 计算 云计 权限 项目 缺陷 linux内核 启动
原文地址:https://www.cnblogs.com/zhaochunhui/p/13722742.html