计算虚拟化
介绍
把物理主机上物理资源(CPU,内存,IO外设),通过虚拟化层抽象成超量、等量的逻辑资源(虚拟CPU,虚拟内存,虚拟IO设备),然后重新组合形成新的虚拟主机。
实现方式
全虚拟化
靠虚拟化引擎实现
半虚拟化
靠修改虚拟机内核引擎实现
硬件辅助虚拟化
靠硬件辅助实现
对象
CPU
用户态和内核态
资源管控、安全
部署虚拟化后的用户态和内核态
发现问题
不同操作系统的虚拟机(linux,Windows等)指令集存在差异化,有些虚拟机的请求指令,物理机操作系统内核无法识别。
其实CPU虚拟化做的事情就是“翻译”。
解决问题
软件翻译法(全虚拟化)
- 说明
设计一个翻译器,即VMM,虚拟机通过运行在内核态的VMM程序,实现指令集翻译,然后进行调用。
- 缺点
软件翻译法(半虚拟化)
- 说明
不通过VMM进行指令集翻译,而是在Guest OS内修改,然后直接访问物理机内核,调用外设。
- 缺点
硬件翻译法(硬件辅助虚拟化)
- 说明
通过外部硬件模块来实现指令集翻译,然后调用外设,提升运算兴性能。
- 缺点
内存
传统物理机内存机制
部署虚拟化后的内存访问机制
发现问题
虚拟化后转换过程变成:
虚拟机进程内存逻辑地址-》虚拟机物理内存地址;
虚拟机物理内存地址(物理机进程逻辑地址)-》物理机物理内存地址
解决问题
一层映射表法(全虚拟化)
新建一个软件映射表,由VMM主动负责和虚拟机沟通,实现虚拟机内进程逻辑地址和物理机物理地址直接映射,实现高效转换。
一层映射表法(半虚拟化)
修改虚拟机内核,让虚拟机可以直接访问物理机映射表,实现高效转换。
两层映射表法(硬件辅助虚拟化)
在虚拟机内部的地址转换,通过硬件支持,提高转换效率。各大厂商相继推出了硬件辅助的内存虚拟化技术,如Intel的EPT(Extended Page Table)和AMD的NPT(Nested Page Table)。
IO设备
全虚拟化
VMM模拟IO设备,和硬件无关,可以模拟任意硬件设备;即,模拟虚拟机中的IO设备,又需要调度物理机中的IO设备,性能低。
半虚拟化(不概述)
把VMM工作细化,实现流水线作业
后端:VMM只负责调度物理机中的IO资源
前端:虚拟机中的IO设备模拟交由专门驱动负责
硬件辅助虚拟化
IO设备自身支持虚拟化,不需要VMM实现,性能高
注:在虚拟化中有一种直通设备,只给某一个VM来用(独享,比如VMWARE的直通设备)
实现技术(虚拟化引擎)
VMWare
Xen
hyper-v
KVM
qume
资源规划
CPU虚拟化
- 公式
- 不考虑损耗公式(估算)
- 考虑损耗公式
CPU超分配规划建议
- 建议一
- 建议二
内存虚拟化
公式