7

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

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

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

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

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

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

谢谢

4

1 回答 1

3

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)。

于 2012-06-07T07:56:20.513 回答