为什么可以在虚拟机管理程序内部署虚拟机管理程序?

为什么可以在虚拟机管理程序内部署虚拟机管理程序?

为什么据称需要在物理硬件上部署的虚拟机管理程序可以部署在虚拟机中?

例如,XenServer(实际的虚拟机管理程序)可以部署在 ESX VM 中?

为什么这是可能的(虽然由于许多原因这不是一个好主意,但仍然有效)。

此外,为什么人们说虚拟机管理程序需要物理硬件(从架构的角度来看,而不是明显的性能原因)。

谢谢

答案1

裸机虚拟机管理程序(例如 ESX、Hyper-V)只是一个旨在控制和监控硬件访问的操作系统。因此,虚拟机中的虚拟机管理程序自然会控制和监控对其有权访问的硬件的访问。这是因为虚拟硬件看起来与真实硬件完全一样。

半虚拟化另一方面,半虚拟化技术(例如 Xen)并不将硬件架构传递给虚拟客户机,而是提供 API 来使用资源。因此,传统操作系统(和虚拟机管理程序)无法在半虚拟化系统上运行。

答案2

这取决于虚拟机管理程序的类型。有些虚拟机管理程序可以部署在其他虚拟机管理程序中。有很多陷阱,而且 64 位硬件支持不佳。我必须强调,除了测试之外,你永远不会这样做——即使这样,它也只对测试某些功能有用(比如 VMware 端的 vMotion 或 HA)。它不会给你任何有关软件在生产环境中表现如何的指示。

首先,您需要了解 x86 特权级别(环): http://en.wikipedia.org/wiki/Ring_(computer_security)

通常,操作系统(具有对硬件的特权访问)将在 Ring 0 中运行,而其用户级程序(必须通过操作系统代理硬件交互)将在 Ring 3 中运行。当程序进行系统调用时,它会向操作系统传递一条消息,要求其在 Ring 0 空间中运行特定功能并将结果返回给 Ring 3 程序。

当您完全用软件实现虚拟化(无需 Intel VT-x 或 AMD-V 等硬件辅助)时,您实际上要做的是检查正在运行的虚拟机内代码的权限级别。在 VMware 中,这种技术称为二进制转换。在 Ring 3 中运行的任何代码都会继续在 Ring 3 中运行,无需修改。在 Ring 0 中运行的任何代码都会在 Ring 1 中运行,Ring 0 硬件访问通过虚拟机管理程序的虚拟硬件进行代理。虚拟硬件只是一组软件,它告诉主机操作系统在其 Ring 0 空间中执行某些操作。

某些硬件不支持二进制转换,因为它不支持实现二进制转换所需的 Ring 级别。值得注意的是,大多数现代 x86 处理器的 64 位模式中都不存在 Ring 1 和 Ring 2(某些 AMD CPU 支持,但 Intel 不支持)。因此,二进制转换通常仅限于 32 位客户操作系统。

由于您在使用具有二进制转换的虚拟机管理程序时已经在使用 Ring 1,因此您无法在另一个虚拟机管理程序中运行 BT 虚拟机管理程序。(好吧,假设有人可以编写一个虚拟机管理程序,当它本身被虚拟化时,它会使用 Ring 2。这是一个非常极端的情况,我认为没有人这样做过。)

半虚拟化虚拟机管理程序(如 Xen)的工作原理类似。半虚拟化虚拟机管理程序使用经过特殊修改的客户内核,这些内核知道自己不在物理硬件上运行,而不是在 Ring 0 中运行,并且经过编码以使用特殊方法与虚拟机管理程序通信。由于半虚拟化完全在操作系统已使用的 Ring 级别内运行,因此我相信只要虚拟机管理程序本身不需要任何直接硬件访问,您就应该能够运行任意嵌套级别的半虚拟化虚拟机管理程序。显然,您可以达到的实际深度存在限制,并且如上所述,性能不会很好。

另一方面,硬件扩展的工作方式与二进制翻译相反——它们提供超级特权的虚拟机管理程序级别或 Ring -1(位于 Ring 0 之下一个级别),它运行所有未修改的 Ring 0 代码。当使用这些指令集时,Ring -1 提供了一个环境,虚拟机的 Ring 0 操作被虚拟机管理程序捕获和处理,而无需对正在运行的代码进行任何分析。

您无法同时运行两个使用硬件扩展的虚拟机管理程序,即使您尝试并排运行它们。例如,如果您已经使用 VirtualBox 运行使用硬件虚拟化支持的虚拟机,则无法在 Windows 7 中运行 Windows XP Mode。

这给我们留下的结果是,您可以使用硬件虚拟化在虚拟机管理程序内运行二进制转换虚拟机管理程序,但不能反过来。此外,虚拟机管理程序中的虚拟机管理程序通常只能运行 32 位客户机,但性能影响通常不像其他一些发帖者所说的那么大。(需要大量内存访问的应用程序,如数据库服务器,仍会受到影响,因为它们必须经过两组虚拟页表。)大多数虚拟机管理程序会检测到它们在另一个虚拟机管理程序内运行时,并拒绝运行。一些虚拟机管理程序在测试能力下工作得很好;例如,您可以在 VMware Workstation 下运行多个 VMware ESXi 实例(但您只能在 VMware Workstation 下托管的任何 ESXi 虚拟机中使用 BT 模式)。

Xen 不执行二进制转换——它要么使用硬件辅助虚拟化,要么执行半虚拟化。可以在另一个虚拟机管理程序下运行半虚拟化的 Xen,但您无法以这种方式使用完全硬件虚拟化运行 Xen-under-ESX 虚拟机。

希望这可以帮助。

答案3

您无法在任何虚拟机中运行 Hyper-V。它必须直接在硬件上运行。您可以在某些虚拟化系统下安装 Hyper-V 角色,但无法运行虚拟机。不过,您可能能够运行 Hyper-V 管理器程序。

答案4

为什么据称需要在物理硬件上部署的虚拟机管理程序可以部署在虚拟机中?

它不能——但性能良好。

此外,为什么人们说虚拟机管理程序需要物理硬件(从架构的角度来看,而不是明显的性能原因)。

为什么累圆?

虚拟机管理程序通常使用硬件虚拟化功能。虚拟层内的客户端应用程序不支持这些功能。基本上,处理器有一个用于虚拟机管理程序的工作模式,还有一个用于普通操作系统的工作模式,普通操作系统无法切换回虚拟机管理程序模式。

如果没有硬件虚拟化,您就必须模拟这些东西,并且实际上解释许多处理器指令(通过程序),其结果比硬件级别慢得多。

相关内容