【问题标题】:what if run 2 type-2 VMX hypervisors in one x86 host?如果在一台 x86 主机上运行 2 个 type-2 VMX 虚拟机管理程序会怎样?
【发布时间】:2018-05-10 05:07:31
【问题描述】:

在Intel VMX操作中,首先需要调用VMXON(VMXON_REGION)在CPU中启用VMX,然后再调用VMPTRLD(VMCS_REGION)
我的问题来了。
如果两个托管的虚拟机管理程序同时在一台 X86 主机上运行怎么办? 第一个 VMXON 运行良好,但第二个 VMXON 将失败。
并且2个hypervisor可能调用VMPTRLD(VMCS_REGION_a)VMPTRLD(VMCS_REGION_b),CPU中当前的VMCS发生了变化,会不会导致其他hypervisor崩溃或者它们可以共存?
从我的 SDM 阅读来看,我认为它们不能共存,也许我又错过了一些重要的东西。

请帮忙澄清一下。

【问题讨论】:

    标签: linux windows x86 virtualization


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 你的解释很有道理。正如您所说,共存的 VMM 可能会崩溃或未定义的行为。我想通过在一台主机上运行 KVM、VBX 或 Simics 来验证这一点。
    猜你喜欢
    • 2011-02-14
    • 2014-11-19
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 2011-09-22
    • 2016-02-26
    相关资源
    最近更新 更多