如果在一台 x86 主机中 运行 2 个 type-2 VMX 管理程序怎么办?

what if run 2 type-2 VMX hypervisors in one x86 host?

在Intel VMX操作中,首先需要在CPU中调用VMXON(VMXON_REGION)启用VMX,然后VMPTRLD(VMCS_REGION)
我的问题来了。
如果两个托管的管理程序在一个 X86 主机中同时 运行 怎么办? 第一个 VMXON 运行良好,但第二个 VMXON 将失败。
并且 2 个管理程序可能会调用 VMPTRLD(VMCS_REGION_a)VMPTRLD(VMCS_REGION_b),CPU 中的当前 VMCS 已更改,是否会导致另一个管理程序崩溃或它们可以相互共存?
根据我对 SDM 的阅读,我认为它们不能共存,也许我又错过了一些重要的事情。

请帮忙澄清一下。

你是对的,英特尔 VT-x 的当前状态不允许并排并发运行两个独立的虚拟机监视器 (VMM)。它们会造成系统资源冲突,从而导致未定义的行为,包括虚拟机 (VM) 崩溃、挂起或重新启动,可能还有数据损坏。

例如,同时为不同的可视化解决方案加载内核驱动程序是不安全的,甚至不启动 VM。例如,我遇到过问题KVM 和 Virtualbox 或 KVM 和 Simics VMP 一起加载。

一个 VMM 不可能安全地阻止另一个 VMM 的加载或操作。 一个 VMM 可靠地检测其他 VMM 的存在甚至是有问题的,因为 VMXON/VMXOFF 可以在操作系统 (OS) 运行期间动态完成,并且没有硬件资源可以充当互斥的虚拟化资源的对象或锁。

唯一适用于现代硬件的方法是让主机 OS 提供 API 来调解对底层虚拟化资源的请求(VMXON/VMXOFF、VMPTRLD、VMLAUNCH/VMRESUME 等)并让所有 VMM 同意使用此 API。此类功能适用于 Apple Mac OS X,并且最近适用于 Microsoft Windows 系统。但是,有人可能会争辩说这些 API 在某种程度上限制了 VMM 作者。