概述
1、 计算虚拟化包括了“一虚多”和“多虚一”;现在阶段硬件能力过盛,一虚多”成为主流。
2、 裸金属架构更适合部署在资源池内如VMWARE、CitrixXenServerv、RHEV,适合企业使用,寄居架构适合单机,适合个人折腾。
3、 全虚拟化和半虚拟化各有优缺点。KVM发展迅猛,XEN开始走入暮年。
其实,对于应用来看,虚拟机就是一台X86服务器。所以能运行在X86服务器上的应用,也能运行在虚拟机上。虚拟机的构成和物理机也完全一致,主要是CPU、内存、硬盘,输入、输出设备。但是虚拟机的这些“构件”都是虚拟或共享的,都可以由所在的物理机提供出来的,但是为了实现虚拟机的迁移功能,虚拟机的硬盘最好由和这台物理服务器相连的共享存储提供。
CPU虚拟化技术主要分为两大部分。一是将CPU核运行时间进行切片,通过VMM(虚拟化层管理)调度,将CPU运行时间片分配、调度到不同的虚拟机上,当虚拟机运行完成或超时,将这个时间片控制权交回VMM,再进行下一次的调度。分配给应用的vCPU不是固定在某个CPU上,它只是可以执行命令的一个或几个时间片,这一次分配在这些物理核上,下一次分配在另外一些核上。通过时间片,可以提高物理CPU的利用率。原来物理机的CPU好比是私家车,上下班的时候在路上跑,平时都停在路边;CPU被时间切片被调度后就像加入“优步”的私家车,一直在路上跑,有需求就搭客运营,提高了利用率。
二是CPU需要“欺骗”虚拟机上的操作系统(guest OS)执行敏感指令。CPU是通过Ring级别来进行访问控制的,级别共分4层,RING0,RING1,RING2,RING3。RING0层拥有最高的权限,是个操作系统使用的,可以访问所有层的数据,而其他驱动程序位于RING1、RING2层,RING3可以运行应用。每一层只能访问本层以及权限更低层的数据。如果普通应用程序企图执行RING0指令,则会认为“非法指令”错误信息。但是在虚拟机内,RING0被比guest OS更“低级”的VMM所霸占,只能运行在RONG1。而操作系统的有些指令一定要在RING0执行的,这些指令叫做敏感指令。RING0已经被“控制者”霸占,在执行浙西敏感指令时候就会出现异常而“陷入”,执行一定会出现异常。如何处理“陷入”的敏感指令就是CPU虚拟化需要干的事情。
解决这个冲突,有2种方法:软件模拟和硬件支持(Intel VT-x和AMD SVM)。
软件模拟的方式就是当这些“陷入”的指令被送到VMM层进行模拟并执行,并将执行的结果返回到虚拟机的guest OS。模拟执行的方法有很多种,典型的有解释执行和二进制执行。软件模拟的方法效率相对硬件支持要低,所以在采购资源池的X86服务器都要求采购带有Intel VT-x和AMD SVM标志的64位服务器,因为现在CPU硬件就可以解决这个问题。
以Intel VT-x为例,VT-x提供了一套称作VMX的新的工作模式,工作在该模式下的处理器又具有两类操作模式:VMX root operation和VMX non-root operation。VMM占据VMX root operation,而guest OS使用VMX non-root operation。对操作系统来说,VMX non-root operation模式与传统的x86处理器兼容,最大的差别在于当虚拟机执行一些访问全局资源的指令时将导致虚拟机退出操作(VM-Exit),从而使VMM获得控制权,以便对访问全局资源的指令进行模拟。然后,VMM可以通过虚拟机进入操作(VM-Entry)使虚拟机重新获得控制权。
虚拟化的CPU和物理机的CPU还是有一定的差别。就像上面的例子,物理机的CPU是固定被操作系统占用的,用和不用,都是被一个操作系统控制的,所有CPU配置越大,不会影响应用的执行,只是CPU的利用率越来越低。但是虚拟CPU就不一样了,当你配置的CPU的核数越多,本质上是等待相应核数的时间片,而且VMM的调度程序一定要等到配置的vCPU的核数全部到位后,才能执行,所以在超配的情况下,核数越多,等待的时间越长。在虚拟CPU下,配置的原则是在满足需求的情况下CPU数量越少越好。也可以再看一下我以前写的文章《基础知识——CPU的分配原则》。
还有一个需要注意的,虚拟机的时钟会比实际的慢。因为计算机的时间是通过CPU的主频计算出来的,虚拟机的时间也是靠vCPU计算出来的,而vCPU经常被调度到其他虚拟机上,“时间被偷走了”,虚拟机上的时间走的慢。所以虚拟机最好连接时间同步服务器。
最后
以上就是帅气滑板为你收集整理的基础知识:虚拟机的构成和cpu的虚拟化的全部内容,希望文章能够帮你解决基础知识:虚拟机的构成和cpu的虚拟化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复