英特尔VT-x : How NMI is delivered to guest OS

标签 intel interrupt virtualization kvm

我正在使用 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/

相关文章:

c - 为什么 10/3 在 C 中是准确的?

c++ - 如何在 64 位 Ubuntu 系统上安装简单的 Intel C/C++ 编译器?

assembly - 是否可以在VM中使用VMX CPU指令?

c - 程序集分析在C中调用的system()函数

gcc - 了解新的 gcc 序言

java - Java 中有什么方法可以记录*每个*线程中断吗?

c - wait() 函数(在 LINUX 中)什么时候响应中断?

多线程程序的C++定时器中断

angular - 如何将 cdk-virtual-scroll 与 ngx-infinite-scroll 一起使用