我的问题是关于中断以及来宾在 KVM 中执行时如何处理它们?
假设当 kvm 调用 vmentry 或 vmresume 时,来宾代码开始执行。现在当一个外部中断说定时器中断发生时,guest 将导致一个 vmexit。在 Vmexit 之后将执行 kvm 中的下一条指令,或者将调用主机中断调用者。如果 kvm 中的下一条指令被调用,那么 kvm 可以做它想做的任何事情,然后调用适当的主机中断处理程序。
谢谢,
我的问题是关于中断以及来宾在 KVM 中执行时如何处理它们?
假设当 kvm 调用 vmentry 或 vmresume 时,来宾代码开始执行。现在当一个外部中断说定时器中断发生时,guest 将导致一个 vmexit。在 Vmexit 之后将执行 kvm 中的下一条指令,或者将调用主机中断调用者。如果 kvm 中的下一条指令被调用,那么 kvm 可以做它想做的任何事情,然后调用适当的主机中断处理程序。
谢谢,
在 Intel VT-x 上,所有中断都会导致主机操作系统陷入陷阱。然后主机将确定中断是否为:
对于它自己(在这种情况下它会处理它,可能会导致 KVM 在相当长的一段时间内处于计划外);或者
对于来宾,在这种情况下,它将通知 KVM 有关中断。然后,KVM 将依次将中断注入来宾。(请注意,这部分 KVM 是在内核模式下运行的;但我想您仍然会认为这是 KVM)。
在任何一种情况下,主机操作系统都会首先获得控制权。
有点不相关,但是 VT-x 的一个扩展会让我们虚拟化人员更开心的是,如果某些中断可以直接发送给来宾,完全避免进入主机的陷阱(以及相关的性能损失)。唉,这似乎还没有出现在卡片上。