硬件和软件对虚拟化的支持

构建虚拟机的体系结构要求 – 定理

严格虚拟化的Popek和Golberg准则
1、平等
虚拟机上的应用程序应该跟直接运行在计算机硬件上相同

2、安全
vmm必须是由硬件所控制的,不可以被运行的虚拟机所中断,虚拟机和计算机硬件是隔离的,并像是和在不同机器上运行一样。另外,虚拟机之间是隔离的,

3、效率
虚拟化环境下最坏的情况要比直接运行在硬件上差一点点。

未有体系结构支持的虚拟化
VMware

在1999年的时候,VMware就推出了第一代VMware Workstation,它也是第一个运行在32位x86上的vmm。VMware工作站将虚拟机的Popek和Goldberg的三个核心属性改编为基于x86的目标平台,如下所示:
1、平等性
x86-32架构有17条虚拟化敏感的非特权指令,这违反了严格虚拟化的Popek和Golberg标准。这就排除 了 传统陷入模拟虚拟化.的方法。事实上,英特尔公司的工程师们确信他们的处理器在任何实际意义上都不可能被虚拟化。VMware的解决方案将直接执行(在可能的情况下使用,特别是在运行应用程序时)与动态二进制转换(在需要的情况下,特别是在运行客户操作时)结合在一起。

虚拟化技术

半虚拟化 – guest os can perceive itself as a virtual machine
全虚拟化 – guest os

VT-X 下的cpu虚拟化 – 硬件支持全虚拟化

VT-X的设计要求

Intel虚拟化技术的一个核心设计目标是消除对CPU半虚拟化和二进制转换技术的需求,从而支持VMMs的实现,使其能够支持广泛的未修改的来宾操作系统,同时保持高水平的性能。
在设计vr -x时,英特尔的核心设计目标是完全满足Popek和Goldberg定理的要求,明确的目标是运行在基于vr -x的虚拟机监控程序上的虚拟机满足以下三个核心属性:等价性、安全性和性能。
等价性:Intel的架构师将VT-x设计为在虚拟硬件和底层硬件之间提供绝对的架构兼容性,进而与传统的x86-32和x86-64 ISA向后兼容。这比VMware Workstation雄心勃勃得多,VMware工作站实际上专注于一组定义良好的客户操作系统,以及Xen等半虚拟化方法,后者需要对内核进行修改,实际上只应用于开源操作系统。
安全性:基于动态二进制转换或半虚拟化的前虚拟机监控程序提供了安全性和隔离,但其推理涉及必须在软件中维护的复杂不变量,例如正确使用分段进行保护。通过专门为虚拟化设计的体系结构支持,一个简化得多的虚拟机监控程序可以提供相同的特性,但代码基数要小得多。这减少了虚拟机监控程序上的潜在攻击面和软件漏洞风险。
性能:具有讽刺意味的是,在现有的最先进的虚拟化技术之上提高性能并不是第一代虚拟化硬件支持的发布目标。
相反,一开始的目标仅仅是建立适当的体系结构,以及在体系结构和微观体系结构级别进行改进的路线图。实际上,具有虚拟化硬件支持的第一代处理器无法与使用DBT[3]的先进解决方案竞争。

VT-X 为了解决什么问题?
VT-X 引入的新的运行模式
VT-X 下虚拟机退出和切换的过程

vm 切换过程
1、将vcpu的所有状态保存在内存中
2、然后KVM基于虚拟机执行一级分派。exit_reason,对每个退出原因使用不同的处理程序(arch/x86/kvm/vmx.c中的handler_)。大多数处理程序都很简单
3、接下来进行通用处理或是依据VMCS字段来确定要执行的必要模拟步骤
通用的处理步骤:
①从客户虚拟内存(%cs:%eip)获取指令。首先,虚拟地址必须转换为线性地址,然后转换为客人物理地址,最后从内存中提取
②解码指令,提取其操作符和操作数。CISC的性质和x86-64指令的可变长度使得这个过程非常重要
③验证指令是否可以执行给定的虚拟CPU的当前状态,例如,特权指令只能在虚拟CPU为cpl0时执行
④从内存中读取任何内存读操作数,就像x86 CISC体系结构中的常见情况一样,使用与指令提取相同的虚拟到线性到客户物理的重定位步骤
⑤模拟解码指令,可以是x86体系结构中定义的任何指令。每个指令操作码都是通过它自己专用的仿真例程(源文件中的em_
)来模拟的。
⑥将任何内存写操作数写回客户虚拟机;和
⑦根据需要更新客户注册表和指令指针

显然,这些步骤是复杂的、昂贵的,并且充满了极端情况和可能的异常条件。图4.3进一步展示了复杂性,因为每个阶段都包含一个可能的异常情况,其中trap-and-仿真逻辑推断客户指令不能成功执行,而应该在客户虚拟CPU中生成一个错误,例如一个虚拟的#GP、#PF或#UD。此外,在一些罕见的情况下,指令模拟步骤可能导致实际硬件出现故障,比如除以0时。是否在图中以红色显示,导致了额外的复杂性

vm退出的原因
kvm中处理一个vmexit

kvm如何处理一个vmexit

kvm – 一个VT-X下的管理程序
具有扩展页表的MMU虚拟化。

在内存管理单元中没有任何体系结构支持的情况下,管理程序依赖影子分页来虚拟化内存。在影子分页中,hypervisor管理一组将虚拟内存映射到主机物理内存的页表(有关VMware实现的描述,请参阅3.2.5)。在软件中实现的影子分页可以说是管理程序中最复杂的子系统。它依赖内存跟踪来跟踪内存中页表结构的变化。影子分页还严重依赖启发式来确定应该跟踪哪些页面,因为页表可以位于物理内存中的任何位置,并且可以由客户操作系统自行分配和重新分配。此外,VT-x的引入对阴影分页的性能有负面影响(参见4.2.3)。
扩展页表为MMU虚拟化提供了体系结构支持。
扩展页表,也称为嵌套页表,消除了基于软件的影子分页的需要。该设计由Bhargava等人在2008年[35]发表,并在大约同一时间由AMD和英特尔的硅可用。
扩展页表在硬件上结合了x86的经典的硬件定义的页表结构(由来宾操作系统维护)和另一个页表结构(由hypervisor维护,它指定来宾物理到主机物理的映射)。这两种结构都类似地组织成树。

虚拟I/O
IO插入的好处

总之,经典的I/O虚拟化是通过I/O插入实现的,它提供了许多优点,比如添加了支持迁移的特性和状态封装。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值