KVM虚拟化CPU和内存

1.CPU虚拟化

​ X86架构的CPU具有ring0~ring3四种运行等级。其中运行在ring0上的叫做特权指令,运行在ring3上的叫做非特权指令。可以理解为:特权指令在linux的内核态,非特权指令在linux的用户态。

​ 现在假如有多个虚拟机共用一套CPU。可想而知,运行在ring3上的并不会对其他虚拟机产生影响,但是运行在ring0上的指令有可能会对其他的虚拟机产生影响。所以,解决这个的方案一定分为两大类:1.每个虚拟机单独使用一个CPU。2.有一个中间层可以统一管理虚拟机CPU的状态使得每个虚拟机都认为自己是独立的。这时就出现了两种方案:纯软模拟和XEN。纯软模拟性能极差,XEN可扩展性和泛用性不强。随着发展intel修改CPU硬件推出新方案:基于硬件CPU虚拟化的intel-VT技术(VMX架构)。

1.1 什么是VMX架构?

​ VMX架构是基于intel-VT-x技术的一个实现。VT-x技术将CPU分成两种模式:1.根模式(VMX root operation)。2.非根模式(VMX non-root operation)。VMM(虚拟机监控器)运行在根模式下,vm运行在非根模式下。CPU轮流进行两种模式(root、non-root)的切换来分别执行VMM和VM指令,使得两个指令不冲突,这就是CPU虚拟化技术的核心。图1可以很清晰的看出VMM和VM之间的切换。这里需要注意的是vm exit并不能被Guest(vm)调用,只能当虚拟机发生异常中断或者VMM调用来实现。

在这里插入图片描述

图1

到这里不难看出两种模式的切换一定离不开上下文的保存(如果没有上下文的保存,那切换回来之后根本不知道原来执行到了哪里)所以又引出了VMCS区域。

1.2 什么是VMCS?

VMCS(Wirtual-Machine control structure, 虚拟机控制结构)。VMCS不仅可以保存Guest的上下文,还可以控制root和non-root之间的切换。VMCS实际上是一个指向真实内存的指针。每个VCPU都对应一个VMCS。需要注意的是VMCS只保存VM的上下文。

1.3 什么是CPU的虚拟化?

上面总结起来就是CPU的虚拟化。如下说明

KVM中vCPU在三种模式下执行:

1) 客户模式(Guest Mode)运行GuestOS,执行Guest非IO操作指令。

为什么会有Guest Mode?是为了提高虚拟机内整体的性能

2) 用户模式(User Mode)运行QEMU,实现IO模拟与管理。

3) 内核模式(Kernel Mode)运行KVM内核,实现模式的切换(VM Exit/VM Entry),执行特权与敏感指令。

​ 如图2,KVM内核加载时执行VMXON指令进入VMX操作模式,VMM进入VMX Root模式,可执行VMXOFF指令退出。GuestOS执行特权或敏感指令时触发VM Exit,系统挂起GuestOS,通过VMCALL调用VMM切换到Root模式执行,VMExit开销是比较大的。VMM执行完成后,可执行VMLANCH或VMRESUME指令触发VM Entry切换到Non-root模式,系统自动加载GuestOS运行。

​ VMX定义了VMCS(Virtual Machine Control Structure)数据结构来记录vCPU相关的寄存器内容与控制信息,发生VMExit时需要查询和更新VMCS。VMM为每个vCPU维护一个VMCS,存储在内存中VMCS区域,通过VMCS指针进行管理。VMCS主要包括3部分信息:

1)control data主要保存触发模式切换的事件及原因;

2)Guest state 保存Guest运行时状态,在VM Entry时加载;

3)Host state保存VMM运行时状态,在VM Exit时加载。通过读写VMCS结构对Guest进行控制。

在这里插入图片描述

图2

​ 总结:这种让CPU在两个特权级别之间的切换来实现VMs和VMM的协同运行,就是kvm的CPU虚拟化

CPU虚拟化源码解读:https://www.cnblogs.com/LoyenWang/p/13796537.html

1.4 kvm的CPU虚拟化我们可以在此基础上开发什么?

1)热迁移

2)依据业务调度优化

整体拉看CPU需要修改的较少。

2.内存虚拟化

​ 内存存放CPU将要执行的指令或数据,内存大小与访问效率对系统性能至关重要。内存虚拟化目标是保障内存空间的合理分配、管理,隔离,以及高效可靠地使用。需要将Guest线性虚拟内存地址GVA(Guest Virtual Address)转换为Host上的物理内存地址HPA(Host Physical Address )。没有硬件辅助虚拟化之前,VMM为每个Guest维护一份影子页表(Shadow Page Table),通过软件维护GVA到HPA的映射,由于内存访问与更新频繁导致影子页表的维护复杂,开销较大。所以,Intel和AMD分别引入了EPT(Extend page table)和NPT(Nested page table)作为CPU内存管理单元MMU的扩展,通过硬件来实现GVA、GPA到HPA的转换。以EPT举例,什么是EPT?图3中步骤1–>2–>3–>4是影子页表实现方式(纯软)。从1–>2–>4是硬件EPT的实现方式。EPT主要是提高寻页速度从而提高虚拟机性能

在这里插入图片描述

图3

3.总结

虚拟机化的本质是使用qemu的软件模拟硬件,但是模拟的方式较慢,需要加速;所以,才会出现KVM

虚拟化主要模拟CPU、内存、网络、存储,这些都有不同的加速方式。通过KVM虚拟CPU和内存合一看出:

CPU和内存主要是使用硬件辅助虚拟化进行加速的,需要配备特殊的硬件才能工作。(如intel和AMD特有的CPU)。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值