首页 > 编程知识 正文

硬件辅助的虚拟化必须CPU本身支持虚拟化,Cpu虚拟化技术

时间:2023-05-04 05:12:37 阅读:280294 作者:850

系统虚拟化的核心任务是CPU虚拟化,本篇博客主要介绍kvm中采用的cpu虚拟化技术。

硬件辅助CPU虚拟化技术——VT-x

Intel VT中的VT-x(Intel Virtualization technology for x86)技术扩展了传统的IA32处理器架构,为IA32架构的处理器虚拟化提供了硬件支持。

VMX操作模式

VT-x引入了两种操作模式,统称为VMX操作模式。
1. 根操作模式:VMM运行所处的模式。
2. 非根操作模式:客户机运行所处的模式。

这两种操作模式和IA32特权级0 ~ 特权级3是正交的,即每种操作模式下都有相应的特权级0 ~ 特权级3。

所以在VT-x使用的情况下,描述程序运行在某个特权级,例如特权级0,还必须指出当前是处于根模式还是非根模式。

为什么要引入两种操作模式?

指令的虚拟化是通过“陷入再模拟“的方式实现的,而IA32架构有19条敏感指令不能通过这种方法处理,导致了虚拟化漏洞。

最直接的解决办法,是使这些敏感指令能触发异常——但这种方法会改变这些指令的语义,导致与原有软件不兼容。

为此,就引入了新的模式。

在非根模式下,所有敏感指令(包括19条不能被虚拟化的敏感指令)的行为都被重新定义,使得它们能不经虚拟化就直接运行或通过“陷入再模拟”的方式来处理。

在根模式下,所有指令的行为和传统IA32一样,没有改变,因此原有的软件都能正常运行。

VM-Exit和VM-Entry

VT-x中,非根模式下敏感指令引起的“陷入”被称为VM-Exit。
VM-Exit发生时,CPU自动从非根模式切换成根模式。

相应的,VT-x也定义了VM-Entry,该操作由VMM发起,(通过VMLAUCH/VMRESUME指令),通常是调度某个客户机运行,此时CPU从根模式切换到非根模式。

VMCS

为了更好地支持CPU虚拟化,VT-x引入了VMCS(虚拟机控制结构)。
VMCS保存虚拟CPU需要的相关状态,例如CPU在根模式和非根模式下的特权寄存器的值。

VMCS主要供CPU使用,CPU在发生VM-Exit和VM-Entry时,都会自动查询和更新VMCS。

VMM可以通过指令来配置VMCS,进而影响CPU的行为。

VMCS是保存在内存中的数据结构,包含了虚拟CPU的相关寄存器的内容和虚拟CPU相关的控制信息,每个VMCS对应一个虚拟CPU。

VMCS在使用时需要与物理CPU绑定,它们是一对一的关系。
绑定到某一个物理CPU的VMCS可以解除这种绑定关系,然后重新绑定到另一个物理CPU上。

这种绑定关系的变化称为VMCS的“迁移”。
VMPTRLD <VMCS地址>:将指定的VMCS与执行该指令的物理CPU绑定。
VMCLEAR:将执行该指令的物理CPU与它的VMCS解除绑定。

VMCS主要的信息存放在VMCS数据域中,VT-x提供了两条指令用于访问VMCS。
VMREAD <索引>:读VMCS中“索引”指定的域
VMWRITE<索引><数据>:写VMCS中“索引”指定的域

VM-Entry

VM-Entry是指CPU从根模式切换到非根模式,从软件角度,是指CPU从VMM切换到客户机执行。

这个操作通常由VMM主动发起,在发起之前,VMM会设置好VMCS相关域的内容,例如客户机状态域,宿主机状态域等,然后执行VM-Entry指令。


VM-Entry的具体行为由VMCS数据域中的VM-Entry控制域规定。
VM-Entry控制域中有3部分,IA-32e mode guest,MSR VM-Entry控制, 事件注入控制。

如果1~4步的检查没有通过,CPU会报告VM-Entry失败。
如果都正常通过了,处理器就会把执行环境从VMM切换到客户机环境,开始执行客户机指令。

事件注入,中断注入 VM-Exit

VM-Exit是指CPU从非根模式切换到根模式,从客户机切换到VMM的操作。
引发VM-Exit的原因很多,例如在非根模式执行了敏感指令,发生了中断等。

VM-Execution控制域

VM-Execution控制域用来控制CPU在非根模式运行时的行为,根据虚拟机的实际应用,VMM可以通过配置VM-Execution控制域达到性能优化等目的。

VM-Execution控制域主要控制三个方面

控制某条敏感指令是否产生VM-Exit,如果产生,则由VMM模拟该指令。在某些敏感指令不产生VM-Exit时,控制该指令的行为。异常和中断是否产生VM-Exit。 VM-Exit控制域 VM-Exit信息域

VM-Exit信息域提供以下四种信息。

基本的VM-Exit信息,包括如下内容:1)Exit Reason:提供了VM-Exit的基本原因 VM-Exit的具体过程

CPU将此次VM-Exit的原因信息记录到VMCS相应的信息域中,VM-Entry interruption-information 字段的有效位被清零。

CPU状态保存到VMCS客户机状态域。根据设置,CPU也可能将客户机的MSR保存到VM-exit MSR-store区域。

根据VMCS中宿主机状态域和VM-Exit控制域中的设置,将宿主机状态加载到相应CPU寄存器。CPU也可能根据VM-exit MSR-store区域来加载VMM的MSR。

CPU由非根模式切换到了根模式,从宿主机状态域中CS:RIP指定的VM-Exit入口函数开始执行。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。