周四,AMD 为 Linux 内核推出了一个开源补丁,该补丁将在其Zen 4 CPU上启用虚拟 NMI 或不可屏蔽中断支持。Linux OS 中处理器的这一特殊功能是英特尔在过去十年中一直支持其 CPU 的竞争对手。
AMD Zen 4 CPU 将为其新 CPU 支持 VNMI,以实现竞争对手英特尔在过去十年中提供支持的虚拟化
VNMI 支持允许 CPU ID 检测该功能,但由于 AMD 发布的严重延迟,该公司可能选择在今年晚些时候新的 Zen 4 架构之前不完全启动它。
目前,NMI 使用事件注入机制交付给来宾。事件注入机制不会阻止后续 NMI 的传递。因此,Hypervisor 需要在发送新的 NMI 之前跟踪 NMI 的交付及其完成(通过拦截 IRET)。
虚拟 NMI (VNMI) 允许管理程序使用事件注入机制将 NMI 注入来宾,这意味着不需要跟踪来宾 NMI 和拦截 IRET。为了实现这一点,VNMI 功能在
VMCB intr_control -
V_NMI(11) 中提供了虚拟化 NMI 和 NMI_MASK 功能位 - 指示虚拟 NMI 是否在来宾中挂起。
V_NMI_MASK(12) - 指示虚拟 NMI 是否在来宾中被屏蔽。
V_NMI_ENABLE(26) - 为来宾启用 NMI 虚拟化功能。
当 Hypervisor 想要注入 NMI 时,它会设置 V_NMI 位,处理器将清除 V_NMI 位并设置 V_NMI_MASK 表示客户机正在处理 NMI,客户机处理完 NMI 后,处理器将在成功完成 IRET 时清除 V_NMI_MASK指令 或者如果在传递虚拟 NMI 时发生 VMEXIT。
Phoronix 的 Michael Larabel表示,VNMI 仅用于优化 AMD 自己的虚拟化客户的效率,这些虚拟客户不需要自己遵循 NMI 状态,而不必担心在 NMI 处理完成时拦截中断返回或 IRET。早在 2008 年,英特尔就已经在 Linux 平台中使用了这种虚拟化技术。