【问题标题】:how KVM handle interruptKVM 如何处理中断
【发布时间】:2012-06-06 22:44:35
【问题描述】:

我一直在做 KVM 的工作,有几个问题想不通。

1> 正如我们所知,通常外部中断会导致 VMexit,如果是用于来宾,管理程序将注入虚拟中断。那么将注入哪个 irq(我的意思是用于索引来宾 IDT 的中断向量)? KVM 如何知道这一点(将主机 IRQ 与来宾虚拟 IRQ 关联)?

2> 如果分配给来宾的设备,管理程序会将该 IRQ 传递给来宾。通过跟踪代码,我发现主机 IRQ 与来宾的不同(我的意思是中断向量)。 KVM如何配置guest应该使用哪个中断向量?

3> 如果我们通过在 VMCS 中设置一些字段来配置不退出外部中断,那么在物理中断期间会发生什么? CPU会使用guest IDT来响应中断吗?如果是这样,KVM 是否可以重定向 CPU 以使用另一个 IDT 作为 guest(假设修改 IDTR)?

4> 访客 IDT 位于何处?这是在初始化 vcpu 和寄存器(包括 IDTR)时由 qemu 配置的吗?

我真的希望有人能回答我的问题。我将不胜感激。

谢谢

【问题讨论】:

    标签: linux-kernel virtualization qemu kvm


    【解决方案1】:

    1- 2- 代码在 irq_comm.c 中,非常复杂。对于来宾向量,管理程序捕获并监控来宾的 PCI 配置空间(这实际上是在 QEMU 中完成的 - 参见例如 kvm_msi_update - 但是对 KVM 的系统调用会使用数据更新它)。

    3- 是的。要设置另一个 IDT - 您需要更改 VMCS 中的 IDTR 字段。

    4- 来宾 IDT 由来宾代码配置。 QEMU/KVM 不直接参与其中。您需要配置执行控制以捕获 LIDT 以监控访客 IDTR 的更改。

    听起来您正在尝试从 ASPLOS'12 实施 ELI。 线下联系我(论文第二作者 - NA)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-01
      相关资源
      最近更新 更多