虚拟化技术,类型,KSM个人总结

CPU工作原理
 

CPU工作原理
 
敏感指令引入虚拟化后,虚拟机中的系统(guest OS)就不能运行在Ring 0上。因此,原本需要在最高级别下执行的指令就不能够直接执行,这些指令叫做敏感指令集。后来人们给linux内核植入一些代码(windows内核没有开源无法修改),这些敏感指令交由VMM(Virtual MachineMonitor,虚拟机监控器)处理执行。当执行这些指令时,都由VMM捕获翻译。效率非常低下。

现在的虚拟化叫做基于硬件完全虚拟化。VMware是基于软件的完全虚拟化,不在意cpu是否支持虚拟化。
 
敏感指令集包括:
1.企图访问或修改虚拟机模式或机器状态的指令。
2.企图访问或修改敏感寄存器或存储单元,如时钟寄存器、中断寄存器等的指令。
3.企图访问存储保护系统或内存、地址分配系统的指令。
4.所有I/O指令。
2、半虚拟化
虚拟机需要使用到的网卡驱动,硬盘驱动,使用的半虚拟化技术驱动优于传统设备。如virtI0、vmware tools都是半虚拟化驱动。提升虚拟机的性能。
3、硬件虚拟化(本地虚拟化)
后来,CPU厂商,开始支持虚拟化了,情况有发生变化,拿X86 CPU来说,引入了Intel-VT 技术,支持Intel-VT 的CPU,有VMXroot operation 和 VMX non-root operation两种模式,两种模式都支持Ring 0 ~ Ring 3 这 4 个运行级别。这下好了,VMM可以运行在VMX root operation模式下,虚拟机运行在VMX non-root operation模式下。也就说,硬件这层做了些区分,这样全虚拟化下,有些靠“捕获异常-翻译-模拟”的实现就不需要了。而且CPU厂商,支持虚拟化的力度越来越大,靠硬件辅助的全虚拟化技术的性能逐渐逼近半虚拟化,再加上全虚拟化不需要修改客户操作系统这一优势,全虚拟化技术应该是未来的发展趋势。因为在硬件虚拟化下虚拟机guest OS也可以工作在Ring0,所以虚拟机支持虚拟机里面运行虚拟机,支持虚拟机的嵌套。
 
1、CPU虚拟化  intel的 VT-X,AMD-V
2、MMU虚拟化 intel EPT ,AMD RVI
3、I/O虚拟化  intel VT-D,AMD IOMMU
 
IntelVT-x,AMD-V :CPU虚拟化技术 cat /proc/cpuinfo  查看是否有vtx(intel)  svm(AMD)
 
intelVT-D 直接IO:英特尔VT-d通过减少 VMM 参与管理 I/O 流量的需求,不但加速了数据传输,而且消除了大部分的性能开销。这是通过使 VMM将特定 I/O 设备安全分配给某一个单独的虚拟机使用。每个设备在系统内存中都有一个专用区域,只有该设备及其分配的客户操作系统才能对该区域进行访问。可直接在客户操作系统与为其分配的设备之间进行传输。减少了的 VMM 负载,进一步缩减服务器CPU的负载。
 
AMDIOMMU:将一个网卡分给很多个虚拟机
 
IntelVT-C:两大技术VMDq和VMDc;
传统虚拟化环境中,VMM 必须对每个单独的数据进行分类,并将其发送到为其分配的虚拟机。这样会占用大量的处理器周期。而借助 VMDq,该分类功能可由网卡内的专用硬件来执行,VMM 只需负责将预分类的数据包组发送到适当的客户操作系统。这将减缓 I/O 延迟。虚拟机直接互连(VMDc)支持虚拟机直接访问网络 I/O 硬件,减轻VMM的负担,从而显著提升虚拟性能。
 
IntelEPT, AMD RVI 嵌套页表:虚拟机调用的内存需要映射物理内存,这个虚拟机内存是按需分配,需要多少内存才会映射物理内存。正常情况下CPU需要消耗更多的周期来映射物理内存到虚拟机,MMU(内存管理单元)虚拟化允许CPU硬件来映射内存页,减少VMM的负担。
三、KSM
KSM  kernel same-page merging,优点:相同物理内存片只保留1份,多个虚拟机共享这一份内存。缺点:kernel每隔一段时间扫描一下内存,会带来一定开销。

执行 ksctlinfo | start | stop


四、远程协议
Redhat  vnc
微软    rdp
思杰    ica
华为    hdp
开源    spice

猜你喜欢

转载自www.linuxidc.com/Linux/2016-05/130878.htm