CPU虚拟化
首先,在传统计算机当中,如何使用CPU:1、操作系统独占CPU 2、操作系统拥有对CPU的最高权限 (ring0)
ring0 操作系统内核使用 特权指令
ring1 2 驱动程序使用 很少使用
ring3 应用程序使用 非特权指令
引入虚拟化之后,出现两个问题:
1、hypervisor运行多个VM,VM、hypervisor都要使用CPU,如何共享
2、VM作用应用程序,只允许使用ring3,但vm中也有操作系统,需要使用ring0,指令越级。
1、VM使用vCPU,hypervisor将vCPU调度到PCPU上运行,实现物理CPU资源的分时复用
2、经典虚拟化->二进制翻译“全虚拟化”->操作系统辅助的“半虚拟化”->硬件辅助的“全虚拟化”
KVM CPU虚拟化三种模式:
1、客户机模式:对应非根模式 主要用于处理guestOS非IO类代码
2、内核态模式:对应根模式ring0 vm entry vm exit
3、用户态模式:对应根模式ring3 主要用于处理guestOS IO类代码
KVM:1、kvm模块 运行在内核态 2、qemu模块 运行在用户态
vm entry:当需要运行非IO类代码,需要进入客户机模式(非根),entry
vm exit:当不需要运行非IO类代码,退出客户机模式(根),exit
正常运行,不需要进行切换
虚拟化开销:1、由根模式下vmm处理,带来开销 2、entry \exit的切换开销
vmm与hypervisor的关系?
1、绝大部分情况下,相等
2、vmm大于hypervisor,在hypervisor上加了libvirt
内存虚拟化
Native操作系统对内存的认识与管理达成以下两点认识:
内存都是从物理地址0开始的
内存都是连续的
引入虚拟化后出现的问题:
从物理地址0开始的:物理地址0只有一个,无法同时满足所有客户机从0开始的要求;
地址连续:虽然可以分配连续的物理地址,但是内存使用效率不高,缺乏灵活性。
VMM需要处理以下两个问题:
1、维护客户机物理地址到宿主机物理地址之际间的映射关系。GPA -> HPA
2、截获虚拟机对客户机物理地址的访问,并根据映射关系转换为宿主机物理地址。(GVA ->) GPA -> HVA -> HPA
GVA: Guest Virtual Address 客户机虚拟地址:虚拟机操作系统使用的地址
GPA: Guest Physical Address 客户机物理地址:虚拟机所认为的机器地址
HVA: Host Virtual Address 宿主机虚拟地址:qemu-kvm在机器上,申明一段连续的大小的地址,用于分配给虚拟机使用。
HPA: Host Physical Address 宿主机物理地址:机器地址
(GVA ->) GPA:操作系统本身就具备MMU模块,可以实现虚拟地址到物理地址的转换。
GPA -> HVA -> HPA:
如何解决以上的问题?
一、软件方式
xen同时具备半虚、全虚,以xen为例子。
1、直接模式
在半虚拟化情况下,guest OS是经过修改,是知道自己跑在虚拟化环境下。直接实现GPA -> HPA。此张表保存在vm中。
2、影子列表
在全虚拟化情况下,guest OS没有经过修改,不知道自己跑在虚拟化环境下。在hypervisor中,引入虚拟的MMU,实现GPA -> HVA -> HPA。此张表保存在hypervisor中。hypervisor需要做两次转换,压力较大。性能比较差。
二、硬件方式
intel ept:直接在CPU上,实现GPA -> HVA -> HPA,在CPU上保存此张表。
amd npt:也是类似的方式,直接在CPU上,实现GPA -> HVA -> HPA,在CPU上保存此张表。
硬件方式与影子列表:
1、性能较好。
2、减少软件厂商的工作。
1、KVM属于哪种虚拟化类型?CPU虚拟化是属于半虚、还是全虚?
2、CPU虚拟化是有哪些方式?
3、如何区分半虚还是全虚?xen是属于哪种方式?
4、kvm有哪些部分组成?分别运行在哪里?
5、内存虚拟化有哪些实现方式?分别有哪些缺点?
6、cpu有哪些运行模式?分别做什么的?
虚拟化类型:
1、寄居虚拟化 workstations
2、裸金属虚拟化 xen vmware esxi
3、混合虚拟化 kvm
4、操作系统虚拟化 容器
IO虚拟化:
全模拟
HW=> Host Kernel
Host Kerne=>qemu
qemu=>kvm
kvm=>guest
Virtio
HW=> Host Kernel
Host Kerne=>qemu
Qemu=>guest
Vhost
HW=> Host Kernel
Host Kernel=> Guest
CSBS VBS 云服务器、云硬盘备份(ebackup)
CSDR 云服务器容灾(主备容灾)
CSHA 云服务器高可用(双活容灾)
VHA 云硬盘高可用(本地高可用)