use*_*939 6 virtualization kvm qemu linux-kernel
我一直在做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)时配置的?
我真的希望有人可以回复我的问题.我将非常感激.
谢谢
小智 6
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)。