云计算概述 -- 虚拟化技术
什么是虚拟化
虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
虚拟化使用软件的方法重新定义划分IT资源,可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源利用率,使IT资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。
以上内容来自360百科。
虚拟化分类
1 基于VM对资源访问的模式进行分类
1.1 CPU运行级别
CPU一共有4个运行级别,但是一般来说只是涉及到两个级别,分别是Ring0和Ring3
Ring 0:权限最高,内核运行在Ring0,VMM或者hypervisor
Ring 3:权限最低,用户级别,没有权限操作硬件,如果需要调用硬件资源,那么需要切换到Ring0,这就叫上下文切换,可通过vmstat 查看cs列
[[email protected] ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 260 528572 0 2440100 0 0 94 69 226 128 11 4 85 0 0
[[email protected] ~]#
Ring 0是最高指令级别,也称为核心态,如果操作系统需要直接访问硬件和内存的时候,就需要使用特权指令去控制中断、修改页表、访问设备,因此特权指令需要运行在最高运行级别Ring 0 。Ring 3也称为用户态,不能直接执行特权指令,如果需要访问磁盘、写文件时,需要调用系统函数,这样的操作称为用户态到核心态。
我们的电脑操作系统运行的级别是Ring 0,虚拟机软件,比如VMware Workstation 作为一个软件,只能运行在Ring 3,那么VMware Workstation 上面安装的操作系统也属Ring 3,那么虚拟机是怎么运行Ring 0的指令的呢?
首先,虚拟机自己本身并不知道自己是虚拟机,虚拟机在调用资源的时候会把执行特权指令,但是这时候他所处的指令级别为Ring 3,这时候指令不符合将会报错。但是使用过虚拟机的同学都应该清楚,我们运行虚拟机的时候似乎完全没有错,跟物理机差不多,对吧?那因为我们系统中的虚拟机管理程序(VMM)在帮我我们避免这样的问题发生。
根据VMM实现虚拟机对硬件访问的方式,我们分为三种虚拟化。
1.2 全虚拟化
全虚拟化:虚拟机(Ring3)如果执行特权指令(Ring0),那么将会触发异常,因为虚拟机没有权限执行特权指令,VMM(Ring 0)会捕捉该异常,并对该异常做翻译,翻译为可执行的特权指令,然后将正确的结果返回给虚拟机。这时虚拟机会认为自己的特权指令工作正常,可以使用。
全虚拟化的问题:上下文切换过多,性能损耗非常大。(不过现在已经解决了这个问题,后面再讲)
1.3 半虚拟化
半虚拟化:让虚拟机知道自己在虚拟机上跑,工作在非Ring 0 状态,那么它原先在物理机上执行的一些特权指令,就会修改为其他方式,这种方式是可以和VMM约定好的,就像暗号一样,运行在半虚拟化上的虚拟机需要对内核进行定制化,XEN这种就是半虚拟化技术,这样就不会有异常捕捉和翻译的过程了,性能损耗低。
半虚拟化问题:只支持虚拟Linux主机,无法虚拟化Windows,因为Windows不开源,无法修改代码。
1.4 主流的虚拟化模式?
现在主流的虚拟化模式应该是全虚拟化,为什么呢?看了前面的同学可能会有疑惑,为什么不是半虚拟化?全虚拟化不是对CPU性能消耗很大嘛?
是这样的,现在CPU厂商都开始支持虚拟化了,而且是默认支持的,如果不支持的话我们可以在BIOS里面开启,比如英特尔的Intel-VT还有ADM-v。
Intel-VT 技术,支持Intel-VT 的CPU,有VMX root operation 和 VMX non-root operation两种模式,两种模式都支持Ring 0 ~ Ring 3 这 4 个运行级别。这下好了,VMM可以运行在VMX root operation模式下,客户OS运行在VMX non-root operation模式下。
也就说,硬件这层做了些区分,这样全虚拟化下,有些靠“捕获异常-翻译-模拟”的实现就不需要了。而且CPU厂商,支持虚拟化的力度越来越大,靠硬件辅助的全虚拟化技术的性能逐渐逼近半虚拟化,再加上全虚拟化不需要修改客户操作系统这一优势,全虚拟化技术应该是未来的发展趋势。
其实就是使用硬件辅助加速。
Xen是典型的半虚拟化,不过现在也支持硬件辅助的全虚拟化了,而KVM和Vmware一直都是全虚拟化。
其他分类
- 服务器虚拟化
- 桌面虚拟化
- 硬件虚拟化
- 应用虚拟化
个人笔记观点,部分内容参考互联网,如有建议或指教,请留言。
arppinging技术社区
欢迎关注的我的个人微信公众号
原文地址:http://blog.51cto.com/xiaowangzai/2123414