很抱歉,这篇文章的延迟。 我无法及时到达此职位,并想确保它已被充分研究。 本系列的最后一篇文章比较了ARM和x86世界中的硬件支持。 如前一篇文章所述,ARM将虚拟化纳入其体系结构的最大原因是要在服务器市场上与x86相适应。 因此,我认为有必要对x86和ARM硬件对虚拟化的支持进行比较。
添加到两个ISA的扩展具有相似的范围。 这并不奇怪,因为它们具有相同的目标。 这些目标是由Popek和Goldberg于1974年首先确定的:
- 在VMM下运行的程序应表现出与直接在等效计算机上运行时表现出的行为基本相同的行为。
- VMM必须完全控制虚拟化资源。
- 在没有VMM干预的情况下,必须执行统计上占主导地位的机器指令。
每种方法的实现和所选择的折衷方案之间仍然存在差异,这使案例研究变得有趣。
玩家们
ARM体系结构归ARM所有。 ARM设计自己的处理器,并将其架构许可给其他一些芯片制造商。 在x86世界中,英特尔和AMD都有自己的产品。 英特尔的产品属于虚拟化技术或VT的统称。 VT由VT-x组成,它包含了核心方面的功能; VT-d,包含IOMMU; VT-c,它涵盖了网络接口。 AMD的核心侧虚拟化产品以AMD-V商标销售,而IOMMU则以AMD-Vi商标销售。 英特尔和AMD产品在实现细节上有所不同,但在架构上比ARM产品更为紧密。
设计理念
两种体系结构中对虚拟化的支持都相似,但是实现细节由每种体系结构的设计原理所着色。 因此,在开始比较每种体系结构的细节之前,我们需要讨论指导每种体系结构设计的一般哲学。
RISC与CISC
当我们比较x86虚拟化与ARM虚拟化时,随着CISC和RISC计算机的出现,它们各自的血统。 在CISC(复杂指令集计算机)中,指令功能更强大,并试图弥合汇编程序员与机器之间的语义鸿沟。 在RISC(精简指令集计算机)中,指令更简单,为软件提供了更大的灵活性。 每种哲学在实现难度,代码密度和编译器支持方面都有权衡。
向后兼容
ARM和x86中的扩展大部分都向后兼容现有软件。 英特尔历来在提供向后兼容性方面都付出了额外的努力。 正是这种努力使得实验可以像下面的视频所示:
向后兼容的承诺使软件移植变得更加容易。 但是随着时间的流逝,它会导致体系结构崩溃,使实现更加困难。 它还可以防止重大的范式转移。 尽管ARM提供了向后兼容性,但通常来说ARM更愿意进行重大的体系结构更改。
生态系统
两种体系结构之间的许多差异源于ARM和Intel的不同业务模型。 ARM是一家不制造产品的IP公司。 它设计了体系结构,处理器内核和系统IP块。 客户可以选择购买全部或部分产品,并根据需要定制SoC。
另一方面,英特尔制造自己的内核,芯片组,并为OEM提供参考设计。 定制几乎没有,英特尔是系统中所有模块的所有者,但通过标准接口进行通信的外部设备除外。 AMD在大多数情况下以自上而下的设计理念以相同的方式运行。
功能实现比较
从高层次上讲,每种体系结构所支持的功能都非常相似。 它们都支持两个阶段的翻译。 英特尔称其为扩展页表,AMD称其为快速虚拟索引。 它们都支持由管理程序进行的异常和中断拦截以及来宾中的中断触发。 它们将主机状态与VM状态保持分开。
权限等级
在x86中,期望处理器可以立即运行Windows或任何其他操作系统,而无需进行任何重大更改。 系统管理程序必须是可以安装在操作系统上的受信任程序。 因此,管理程序使用特殊的虚拟化指令(包括用于启用和禁用管理程序的指令)作为特权模式的一部分。 启用管理程序后,将为主机和VM级别创建特权分离。
这与ARM世界中特权的组织方式截然不同。 开发人员对ARM的期望不一样。 直到最近,大多数商用ARM设备都不允许用户购买和使用他们选择的软件。 这使设备制造商可以对该软件进行重大更改。 实施虚拟化时,ARM在x86世界中没有相同的限制。 由于此ARM的特权级别方法与x86不同,因此在ARM中,虚拟机管理程序是一种新模式,具有比常规内核更高的特权级别。 使用虚拟机监控程序需要更改引导代码,并且与在未更改的操作系统上将虚拟机监控程序作为应用程序运行不兼容。
虚拟机条目
VT-x增强功能为每个VM创建了一个称为VMCS(虚拟机控制状态)的内存映射区域。 设置该区域的状态为所有寄存器的状态,并使用VM启动指令将该状态镜像到处理器上。 AMD具有相似的指令和相似的数据结构。
另一方面,ARM并未简化这些软件,而是希望虚拟机管理程序手动修改其需要修改的所有寄存器。 甚至没有启动虚拟机的特殊说明。 在启动VM的ARM体系结构中,管理程序将异常链接寄存器(ELR)设置到所需的PC(x86中的程序计数器,指令指针)并执行异常返回。
这与ARM是RISC架构而x86是CISC架构相一致。 与启动VM类似,创建了类似的结构来处理x86世界中的进程细节,而在ARM中,它完全由OS维护。
异常拦截
ARM允许将大多数异常重定向到管理程序。 ARM体系结构允许拦截中断。 有一种特殊的模式,它允许直接在管理程序下运行应用程序,并且该模式允许拦截未定义的指令和管理程序调用异常,但是启用此模式将禁用内核级别。 但是,在ARM体系结构中,没有将页面错误从内核重定向到管理程序的策略。
在x86中,页面错误可以重定向到管理程序。 这使系统管理程序可以为访客分页出异常向量,并有助于提供影子页表。 此功能在x86中是必需的,因为最初引入对虚拟化的硬件支持时,它不包含对两步走的支持。 在实现虚拟化时,ARM体系结构要求实现两步走。 由于2阶段的tablewalk通常比影子页表具有更高的性能并且更易于实现,因此缺少此功能对于ARM体系结构来说不是问题。
IOMMU和设备
ARM和x86芯片组都支持我们在Post 3中讨论的功能。 需要注意的一件事是,IOMMU不需要核心支持,因此在ARM世界中,与使用ARM产品相比,客户有可能选择自己的IOMMU实现。 除了已经提到的IOMMU,还有其他重要的实现。 为PCI-Express设备的IOMMU 定义了一个标准 。 此外,自AGP开始,图形卡就已支持GART IOMMU。
不同的设备可能为虚拟化提供不同数量的支持。 这可能包括在多个虚拟机之间共享设备。 例如,英特尔的VT-c允许在多个虚拟机之间共享以太网控制器。
总之,ARM和x86都具有用于虚拟化的类似硬件扩展。 这是可以预期的,因为两种架构都在争夺同一市场。 如上所述,每种方法的实现方式都有所不同,它反映了每种体系结构的血统。 ARM对虚拟化的支持指出了一个有趣的未来。
如需进一步阅读,请查看以下链接:
- http://support.amd.com/us/Processor_TechDocs/24593_APM_v2.pdf
- http://www.intel.com/content/www/us/en/virtualization/virtualization-technology-connectivity-technology-brief.html
- http://download.intel.com/products/processor/manual/325462.pdf
翻译自: https://www.javacodegeeks.com/2013/05/arm-virtualization-arm-vs-x86-part-5.html