ARM系列 -- 虚拟化(三)

简介: ARM系列 -- 虚拟化(三)

为了实现虚拟化,虚拟机需要控制系统资源。但是实际的系统资源是在hypervisor直接控制之下,为了实现隔离和安全等方面的考虑,不可能让虚拟机直接控制这些系统资源。

比如,虚拟机想根据具体情况去做电源管理。一个解决办法就是利用“陷入和模拟(Trap and Emulate)”模型。当虚拟机想要执行特权指令时,会触发异常,陷入到hypervisor,随后由hypervisor模拟执行。

对于VM来说,一个直接分配的外设是真实的物理设备,并映射到IPA地址空间,所以VM可以直接软件访问该设备。

但是对于VM来说,一个虚拟设备是hypervisor模拟出来的,VM认为可以通过软件直接访问,但实际上是要通过hypervisor的。为了模拟一个外围设备,hypervisor不仅需要知道访问了哪个外设,还需要知道访问了该外设中的哪个寄存器,访问是读还是写,访问的大小,以及用于传输数据的寄存器。

从地址开始,异常模型引入了FAR_ELx寄存器。在处理stage 1 faults时,这些寄存器报告触发异常的虚拟地址。虚拟地址对hypervisor没有帮助,因为hypervisor通常不知道guest OS如何配置其虚拟地址空间。

对于stage 2 faults,还有一个附加寄存器HPFAR_EL2,用于报告中止的地址的IPA。

由于IPA空间由hypervisor控制,因此它可以使用此信息来确定需要模拟的寄存器。

异常模型显示ESR_ELx寄存器如何报告有关异常的信息。对于触发stage2 fault的单个通用寄存器加载或存储,提供了附加的综合征信息。此信息包括访问的大小和源或目标寄存器,并允许hypervisor确定对虚拟外设的访问类型。

下图展示了一个陷入,然后模拟访问的过程。

  • VM的软件尝试访问虚拟外设,这个例子当中是虚拟UART的接收FIFO。
  • 该访问被stage 2转换block住,导致一个abort异常被送到EL2。
    异常处理程序查询ESR_EL2关于异常的信息,如访问长度,目的寄存器,是load或store操作。
    异常处理程序查询HPFAR_EL2,取得发生abort的IPA地址。
  • Hypervisor使用来自ESR_EL2和HPFAR_EL2的信息来标识所访问的虚拟外围设备寄存器。此信息允许hypervisor模拟该操作。然后通过ERET返回vCPU。指令在LDR之后重新执行。

到目前为止,我们已经考虑了来自处理器的不同访问类型。系统中的其它主机(如DMA控制器)可能分配给VM使用。我们也需要一些方法来将stage 2的保护延伸到那些主机上。考虑一个不使用虚拟化的DMA控制器的系统,如下图所示:

DMA控制器将通过驱动程序编程,通常在内核空间中。内核空间驱动程序可以确保操作系统级内存保护不被破坏。这意味着一个应用程序不能使用DMA访问它不应该看到的内存。

让我们考虑同一个系统,但是操作系统运行在一个虚拟机中,如下图所示:

在此系统中,hypervisor使用stage 2在虚拟机之间提供隔离。软件查看内存的能力受到hypervisor的限制。允许VM中的驱动程序直接与DMA控制器交互会产生两个问题:

  • 隔离:DMA控制器不受stage 2表的约束,可以用来破坏VM的沙箱。
  • 地址空间:有两个转换阶段,内核认为是PAs的是IPAs。DMA控制器仍然可以看到PAs,因此内核和DMA控制器具有不同的内存视图。为了克服这个问题,hypervisor可以捕获VM和DMA控制器之间的每个交互,提供必要的转换。但是当内存碎片化时,此过程效率低下且存在问题。

除了捕获和模拟驱动程序访问之外,另一种方法是扩展stage 2机制,以覆盖其它主机,如我们的DMA控制器。当这种情况发生时,这些主机还需要一个MMU。这称为系统内存管理单元(System Memory Management,SMMU):

这样,hypervisor只要负责对SMMU进行编程,以便上游的主机(在示例中是DMA控制器)可以看到与分配给它的VM相同的内存视图。在intel体系中,对应的是IOMMU,名字虽然不一样,但是原理是一样的。

最后,再来强调一下陷入与模拟。看这个例子,CPU在idle时可以执行WFI(wait for interrupt)指令来进入低功耗模式。当在OS的idle loop里面执行WFI时,会陷入到hypervisor里面模拟。这时hypervisor通常会调度另一个vCPU执行。

使用陷入和模拟的另一个例子是提供寄存器的虚拟值。例如,ID_AA64MMFR0_EL1报告对处理器中内存系统相关功能的支持。操作系统可能在引导时读取此寄存器,以确定内核中要启用的功能。

而Hypervisor可能希望向OS提供一个不同的值,也就是虚拟值。为此,hypersivor启用覆盖寄存器读取的陷阱。在陷入异常情况下,hypervisor确定触发了哪个陷阱,然后模拟操作。

使用陷入来虚拟化操作需要大量计算。比如功能寄存器ID_AA64MMFR0_EL1,不经常被操作系统访问。当将对这些寄存器的访问捕获到虚拟机监控程序中以模拟读取时,计算是可以接受的。

但是对于访问频率高的寄存器,比如MPIDR_EL1,或者在性能关键代码中,需要尽可能地优化陷入,对这些寄存器,ARM提供了其它策略,hypervisor可以在进入VM时先配置好这些寄存器的值。例如,当VM中读到MPIDR_EL1时会自动返回VMPIDR_EL2的值而不发生陷入。



目录
相关文章
|
8月前
|
存储 监控 安全
ARM系列 -- 虚拟化(二)
ARM系列 -- 虚拟化(二)
113 0
|
8月前
|
安全 Linux KVM
ARM系列 -- 虚拟化(一)
ARM系列 -- 虚拟化(一)
165 0
|
传感器 缓存 虚拟化
「Arm Arch」 虚拟化微架构
「Arm Arch」 虚拟化微架构
143 0
|
7天前
|
人工智能 芯片 Windows
ARM架构PC退货率与CEO策略透视
ARM架构PC退货率与CEO策略透视
|
2月前
|
机器学习/深度学习 弹性计算 人工智能
阿里云服务器架构有啥区别?X86计算、Arm、GPU异构、裸金属和高性能计算对比
阿里云ECS涵盖x86、ARM、GPU/FPGA/ASIC、弹性裸金属及高性能计算等多种架构。x86架构采用Intel/AMD处理器,适用于广泛企业级应用;ARM架构低功耗,适合容器与微服务;GPU/FPGA/ASIC专为AI、图形处理设计;弹性裸金属提供物理机性能;高性能计算则针对大规模并行计算优化。
|
3月前
|
编解码 弹性计算 应用服务中间件
阿里云服务器Arm计算架构解析:Arm计算架构云服务器租用收费标准价格参考
阿里云服务器架构分为X86计算、Arm计算、高性能计算等多种架构,其中Arm计算架构以其低功耗、高效率的特点受到广泛关注。本文将深入解析阿里云Arm计算架构云服务器的技术特点、适用场景以及包年包月与按量付费的收费标准与最新活动价格情况,以供选择参考。
|
3月前
|
机器学习/深度学习 弹性计算 编解码
阿里云服务器计算架构X86/ARM/GPU/FPGA/ASIC/裸金属/超级计算集群有啥区别?
阿里云服务器ECS提供了多种计算架构,包括X86、ARM、GPU/FPGA/ASIC、弹性裸金属服务器及超级计算集群。X86架构常见且通用,适合大多数应用场景;ARM架构具备低功耗优势,适用于长期运行环境;GPU/FPGA/ASIC则针对深度学习、科学计算、视频处理等高性能需求;弹性裸金属服务器与超级计算集群则分别提供物理机级别的性能和高速RDMA互联,满足高性能计算和大规模训练需求。
106 6
|
3月前
|
存储 Docker 容器
ARM架构鲲鹏主机BClinux离线安装docker步骤
下载并安装适用于ARM架构的Docker CE二进制文件,解压后移动至/usr/bin目录。创建docker组,配置systemd服务脚本(docker.service、docker.socket、containerd.service),重载systemd配置,启动并启用docker服务。编辑daemon.json配置存储驱动、镜像加速地址等,最后拉取所需镜像。
74 0
|
3月前
|
NoSQL MongoDB Docker
求助,有没有大神可以找到arm64架构下mongodb的3.6.8版本的docker镜像?
在Docker Hub受限的情况下,寻求适用于ARM架构的docker镜像资源或拉取链接,以便在x86架构上获取;内网中的机器为ARM架构,因此优先请求适合ARM的Docker镜像或Dockerfile,非常感激您的帮助。
|
5月前
|
机器学习/深度学习 算法 数据库
阿里云服务器架构区别解析:从X86计算、Arm计算到高性能计算架构的区别参考
在我们选择阿里云服务器的架构时,选择合适的云服务器架构对于提升业务效率、保障业务稳定至关重要。阿里云提供了多样化的云服务器架构选择,包括X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器以及高性能计算等。本文将深入解析这些架构的特点、优势及适用场景,以供参考和选择。
阿里云服务器架构区别解析:从X86计算、Arm计算到高性能计算架构的区别参考

热门文章

最新文章

相关课程

更多