KVM/ARM——基于ARM虚拟化扩展的VMM

1. 前言

ARM架构为了支持虚拟化做了些扩展,称为虚拟化扩展(Virtualization Extensions)。原先为VT-x创建的KVM(Linux-based Kernel Virtual Machine)适配了ARM体系结构,引入了KVM/ARM (the Linux ARM hypervisor)。KVM/ARM没有在hypervisor中引入复杂的核心功能,而是利用了Linux内核中现有的功能进行适配。KVM/ARM与Linux集成,在可移植性和硬件支持方面会有所收益。其实也可以开发独立的bare metal hypervisor,这样可能会有更好地性能,但这种方法在ARM上不太好使。

在下面,我们将描述KVM/ARM的设计如何使得它可以从现有kernel的集成中获益,同时利用硬件虚拟化特性。

2. Split-mode虚拟化

KVM/ARM利用了现有的kernel功能,例如调度器(scheduler),但KVM/ARM如果直接在EL2中运行Linux kernel,会存在两个问题。

第一,linux中与底层体系结构相关的代码是为在kernel模式下工作而编写的,不经过修改就不能在EL2中运行,因为EL2是一个完全不同于普通kernel模式的CPU模式。Linux kernel社区不太可能接受在EL2中运行kernel所需的重大更改。更重要的是,为了保持与没有EL2的硬件的兼容性并将Linux作为Guest OS运行,必须编写低级代码以在两种模式下工作,这可能会导致缓慢而复杂的代码路径。举个简单的例子,页表错误处理程序需要获取导致页表错误的虚拟地址。在EL2中,这个地址存储在与kernel模式不同的寄存器中。

第二,在EL2中运行整个内核会对本机性能产生不利影响。例如,EL2有自己独立的地址空间,但是kernel模式使用两个页表基本寄存器(TTBR)在user地址空间和kernel地址空间之间提供熟悉的3GB/1GB分割,而EL2使用单个页表寄存器,因此不能直接访问地址空间的user空间部分。经常使用的访问user内存的函数需要kernel显式地将用户空间数据映射到kernel地址空间,然后执行必要的拆解和TLB维护操作,从而导致ARM的性能不好。

综上所述,KVM/ARM引入了split-mode虚拟化,这种一种新的hypervisor设计方法,它将核心hypervisor分开,以便它可以跨不同的特权CPU模式运行,从而利用每种CPU模式提供的特定优势和功能。KVM/ARM使用split-mode虚拟化来利用EL2支持的ARM硬件虚拟化,同时利用在kernel模式下运行的现有Linux kernel服务。Split-mode虚拟化允许KVM/ARM与Linux kernel集成,而无需对现有代码库进行重大修改。

这是通过将hypervisor分成两个组件来实现的:lowvisor和highvisor,如图1所示。

图1 KVM/ARM系统架构

Lowvisor的设计是利用EL2中提供的硬件虚拟化支持来提供三个关键功能。首先,lowvisor通过适当的硬件配置来设置正确的执行上下文,并在不同的执行上下文之间实施保护和隔离。Lowvisor直接与硬件保护功能交互,因此非常关键,且代码库需要保持绝对最小。其次,lowvisor从VM执行上下文切到到host执行上下文,反之亦然。Host执行上下文用于运行hypervisor和host Linux kernel。我们将执行上下文称为一个世界,将从一个世界切换到另一个世界称为世界切换(world switch),因为系统的整个状态都发生了变化。由于lowvisor是唯一在EL2中运行的组件,因此只有它可以负责执行世界切换所需的硬件重新配置。第三,lowvisor提供了一个虚拟化Trap处理程序,它处理必须Trap到hypervisor的中断和异常。所有发送到hypervisor的Trap必须首先发送到lowvisor。在世界切换到highvisor完成后,lowvisor只执行所需的最少量的处理,并将要完成的大部分工作推迟到highvisor。

Highvisor作为host linux kernel的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷公子的藏经阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值