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

X86 为什么要退出外部中断?,x86,virtual-machine,interrupt,virtualization,hypervisor,X86,Virtual Machine,Interrupt,Virtualization,Hypervisor,对于使用“英特尔VT-x”的VMM,为什么有人希望将VMCS中的外部中断退出位设置为0,而不是使用已发布的中断(假设体系结构同时支持这两种中断) 例如,如果您将外部中断退出位设置为0,那么如果来宾操作系统正在运行,那么现在将向主机操作系统发送中断。如果来宾也使用相同的中断向量,该如何处理?此问题与发布的中断处理无关。有许多不同的方法可以设计使用VMX的VMM。从您使用的术语“主机操作系统”来看,您可能正在考虑一种特定的VMM体系结构 由于外部中断退出控制位于VMCS中,VMM可以为每个VM设置不

对于使用“英特尔VT-x”的VMM,为什么有人希望将VMCS中的外部中断退出位设置为0,而不是使用已发布的中断(假设体系结构同时支持这两种中断)


例如,如果您将外部中断退出位设置为0,那么如果来宾操作系统正在运行,那么现在将向主机操作系统发送中断。如果来宾也使用相同的中断向量,该如何处理?此问题与发布的中断处理无关。

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

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

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

  • VMM是在发布的中断可用之前写入的
  • VMM设计用于不支持发布中断的平台
  • (可能)直接传递中断所需的处理器时间和电源更少,并且比使用已传递中断的延迟更低
  • POST中断处理旨在处理分配给来宾vcpu的中断。来宾vcpu当前可能未运行,并且在运行时,其运行的物理CPU可能会有所不同。此外,发布的中断处理支持中断传递延迟到vcpu恢复的情况。
    如果VMM希望主机中断总是立即传递到中断目标中指示的物理CPU,那么为这些中断使用已发布的中断可能没有任何价值

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

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

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

      • VMM是在发布的中断可用之前写入的
      • VMM设计用于不支持发布中断的平台
      • (可能)直接传递中断所需的处理器时间和电源更少,并且比使用已传递中断的延迟更低
      • POST中断处理旨在处理分配给来宾vcpu的中断。来宾vcpu当前可能未运行,并且在运行时,其运行的物理CPU可能会有所不同。此外,发布的中断处理支持中断传递延迟到vcpu恢复的情况。
        如果VMM希望主机中断总是立即传递到中断目标中指示的物理CPU,那么为这些中断使用已发布的中断可能没有任何价值

      这可能用于父分区VMC中的混合虚拟机监控程序,其中驱动程序位于父分区中,主机操作系统实际上作为来宾运行。正如您所说,我看不到这在2型虚拟机监控程序驱动程序上使用。这可能在父分区VMCS中的混合虚拟机监控程序上使用,其中驱动程序在父分区中,主机操作系统实际上作为来宾运行。正如您所说,我看不到它被用于2型虚拟机监控程序驱动程序。