我正在使用 Intel VT-x 的 KVM 上运行客户操作系统。我试图了解 NMI 在非 root 模式下运行时如何处理。 Intel VT-x 是否会自动在客户机上引发 NMI,或者 Linux 内核的 kvm 子系统将 NMI 发送到 VCPU?尽管我已在 guest 操作系统中注册了 NMI 处理程序,但我仅在非 root 执行期间获得主机 NMI 触发器。
最佳答案
这是问题的部分答案。我可以描述发生 NMI 时处理器会做什么,但我不知道 KVM 会做什么。
如果 NMI 退出控制为 0 并且 NMI 在 VMX-非 root 模式下到达,则 NMI 将通过访客的 IDT 传递给访客。
如果 NMI 退出控制为 1,则 NMI 会导致 VM 退出。 [英特尔 SDM,第 3 卷,第 24.6.1 节,表 24-5]
可能 KVM 将此控制设置为 1。在这种情况下,处理器不会自动处理 NMI。当VM退出时,由KVM如何处理。它可以通过主机IDT将NMI传递给主机,也可以将其注入(inject)到 guest 中。
关于英特尔VT-x : How NMI is delivered to guest OS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51754557/