KVM如何处理中断

时间:2012-06-06 22:44:35

标签: linux-kernel virtualization qemu kvm

我一直在做KVM的事情并且有一些无法弄清楚的问题。

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

2 - ;如果将分配的设备发送给访客,则管理程序将向访客提供该IRQ。通过跟踪代码,我发现主机IRQ与客户的不同(我的意思是中断向量)。 KVM如何配置访客应该使用哪个中断向量?

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

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

我真的希望有人可以回复我的问题。我将非常感激。

由于

1 个答案:

答案 0 :(得分:2)

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

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

4-访客IDT由访客代码配置。 QEMU / KVM没有直接参与其中。您需要将执行控件配置为在LIDT上进行陷阱,以便监视来宾IDTR的更改。

听起来你正试图从ASPLOS'12实施ELI。 离线与我联系(论文的第二作者 - NA)。