我正在使用Intel VT-x在KVM上运行来宾OS。我试图了解以非root用户模式运行NMI时如何处理。英特尔VT-x是否会自动在客户机上导致NMI,或者Linux内核的kvm子系统将NMI发送到VCPU?尽管我已经在来宾操作系统中注册了NMI处理程序,但是在非root用户执行过程中,我只会获得主机NMI触发器。
答案 0 :(得分:2)
这是该问题的部分答案。我可以描述处理器在发生NMI时的工作方式,但是我不知道KVM会做什么。
如果NMI退出控件为0,并且在VMX非根模式下到达NMI,则NMI通过来宾的IDT传递给来宾。
如果NMI Exiting控件为1,则NMI导致VM退出。 [Intel SDM,第3卷,第24.6.1节,表24-5]
可能KVM将此控件设置为1。在这种情况下,处理器不会自动处理NMI。当VM退出时,由KVM决定如何处理它。它可以通过主机IDT将NMI传递给主机,也可以将其注入来宾。