为什么要让外部中断退出?

时间:2019-02-14 01:33:42

标签: x86 virtual-machine interrupt virtualization hypervisor

对于使用Intel VT-x的VMM,为什么有人会想将VMCS中的外部中断退出位设置为0,而不是使用发布的中断(假设架构同时支持这两者)?

例如,如果将外部中断退出位设置为0,则如果来宾正在运行,则发往主机OS的中断现在将传递给来宾OS。如果客户也使用相同的中断向量,将如何处理?此问题与发布的中断处理无关。

1 个答案:

答案 0 :(得分:2)

设计使用VMX的VMM有很多不同的方法。从术语“主机操作系统”的使用看来,您可能正在考虑一种特定的VMM架构。

由于外部中断退出控件位于VMCS中,因此VMM可以为每个VM进行不同的设置。如果存在主机OS和来宾OS,则VMM一定会在来宾的VMCS中将外部中断退出控制设置为1,但在主机OS的VMCS中可以将其设置为0。 (在某些VMM设计中,主机OS在VMX根模式下运行或在关闭VMX的情况下运行,因此这并不适用;但是在某些VMM中,主机OS(也称为服务OS,根分区或Dom0)在操作系统中运行。 VM。)

关于为什么VMM可以这样做而不是设置流程发布的中断控制的原因,有以下几种可能的原因:

  • VMM是在发布的中断可用之前编写的。
  • VMM设计为在不支持发布的中断的平台上工作。
  • (可能)与使用发布的中断相比,直接传递中断需要更少的处理器时间和功耗,并且延迟更短。
  • 发布的中断处理旨在处理分配给来宾vcpu的中断。来宾vcpu可能当前未在运行,并且在运行时,其运行的物理CPU可能会有所不同。此外,发布的中断处理还支持在vcpu恢复之前可以推迟中断传递的情况。
    如果VMM希望始终将主机中断始终传递到中断目标中指示的物理CPU,则对于这些中断使用发布的中断可能没有任何价值。