Armv8-A虚拟化手册(3)

6. 虚拟化异常

        在系统中中断被硬件用于发送事件给软件。比如,GPU可能发送中断通知它完成了渲染帧。

        使用虚拟化的系统更复杂。一些中断可能由hypervisor自己处理。其他中断可能来自分配了虚拟机的设备,并且需要由虚拟机中的软件来处理。中断目标的虚拟机也可能在中断被接受时没有运行。

        这意味着你需要机制来支持hypervisor来处理EL2中的一些中断的处理。同时也需要机制在虚拟机中将一些中断发给某些虚拟机或某些VCPU。

        为了使能这些机制,架构支持一些虚拟中断:vIRQ, vFIQ和vSErrors。这些虚拟中断行为像物理中断(IRQ, FIQ和SErrors),但仅执行在EL0和EL1被发起。在执行在EL2或EL3时不能接受虚拟中断。

NOTE: 总结来説,安全状态的虚拟化支持在Armv8.4-A被引入。对于在安全EL0/1发起的虚拟中断,安全EL2需要被支持和使能。否则在安全状态的虚拟中断不会被发起。

6.1 使能虚拟中断

        为发起虚拟中断到EL0/1,hypervisor必须设置HCR_EL2中的相关位。比如,为使能vIRQ发送,hypervisor必须设置HCR_EL2.IMO。这个设置路由物理IRQ异常到EL2,并使能虚拟异常的发起到EL1。

        根据每种中断类型控制虚拟中断。在理论上,虚拟机可以配置为接受物理FIQ和虚拟IRQ。特别是这并不常见。虚拟机通常被配置为只接受虚拟中断。

​​​​​​​6.2 产生虚拟中断

这里有两种机制产生虚拟中断:

  1. 在core内部,在HCR_EL2进行控制;
  2. 使用GICv2或后续版本的中断控制器;

首先我们看机制1。在HCR_EL2中有三个位来控制虚拟中断的产生:

  1. VI = 设置此位注册一个vIRQ;
  2. VF= 设置此位注册一个vFIQ;
  3. VSE= 设置此位注册一个vSError;

        设置这些位中的一个等于中断控制器发起一个中断信号给vCPU。产生的虚拟中断受PSTATE屏影响,像正常的中断一样。

        这个机制使用很简单,但缺点是它仅提供一种方法来产生。然后hypervisor被要求模拟在虚拟机中中断控制器的操作。总结来説,在软件中陷入和模拟操作可能涉及过度,这最好避免过度操作如中断。

        第二个选择是使用GIC来产生虚拟中断。从ARM GICv2,GIC可以通过提供物理CPU接口和虚拟CPU接口发起物理和虚拟中断,如下图所示:

         这两个接口相同,除了一个发起物理中断,另一个发起虚拟中断。hypervisor可以映射虚拟CPU接口到一个虚拟机中,允许虚拟机中的软件来直接与GIC通信。这个方法的优点为hypervisor仅需要建立虚拟接口,并且不需要模拟。这个方法减少异常被陷入到EL2的次数,并且因此减少虚拟中断的过度。

NOTE: 虽然ARM GICv2可能被用来Armv8-A设计,GICv3和GICv4通常被使用。

​​​​​​​6.3 发起中断到vCPU的例子

        到目前为止,我们看到了虚拟中断是如何使能和产生的。让我们看一个发起虚拟中断到vCPU的例子。在这个例子中,我们将考虑一个物理外设被赋予给虚拟机,如下图所示:

 这个图呈现如下步骤:

  1. 物理外设发起中断信号到GIC;
  2. GIC产生一个物理中断异常,或IRQ或FIQ,通过HCR_EL2.IMO/FMO来路由中断到EL2。hypervisor区分外设并决定它是否被赋予到虚拟机。它判断中断被发送给哪个vCPU。
  3. hypervisor配置GIC来发起物理中断作为虚拟中断给vCPU。GIC将发起vIRQ或vFIQ信号,但在EL2时处理器将忽略这个信号;
  4. hypervisor将控制返回给vCPU;
  5. 现在处理器在EL0或EL1,来自GIC的虚拟中断可以被处理。虚拟中断受PSTATE异常屏所限。

        例子展现了一个物理中断以虚拟中断被发送。例子符合stage2转换中描述的外设模型。对于虚拟中断,hypervisor可以创建一个虚拟中断,而不需要将其与物理中断关联。

​​​​​​​6.4 中断屏蔽和虚拟中断

        在异常模型中,我们引入在PSTATE中引入中断屏蔽位,PSTATE.I对应IRQ,PSTATE.F对应FIQ,PSTATE.A对应SErrors。当运行在虚拟环境中,这些屏蔽稍微有些不同方式。

        比如,对于IRQ,我们已经看到设置HCR_EL2.IMO做两件事情:

  1. 路由物理IRQ到EL2;
  2. 在EL0和EL1使能发起vIRQ;

        这个设置也修改PSTATE.I屏蔽在应用。在EL0和EL1,如果HCR_EL2.IMO=1,PSTATE.I运行在vIRQ而不是pIRQ。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值