为什么可以在VM中部署一个虚拟机管理程序(它需要在物理硬件上)?
例如,XenServer (实际的管理程序)可以部署在ESX中吗?
为什么这是可能的(虽然由于许多原因不是一个好主意,但仍然有效)。
此外,为什么人们说管理程序需要物理硬件(从架构的角度来看,而不是明显的性能原因)。
谢谢
发布于 2011-01-15 04:28:55
裸金属管理程序 (如ESX,Hyper)是一个简单的操作系统,旨在控制和监控对硬件的访问。因此,虚拟机中的管理程序自然会控制和监视对其访问的硬件的访问。这是因为虚拟硬件看起来与真正的硬件完全一样。
另一方面,半虚拟化 (如Xen)并不将硬件架构传递给虚拟客户,而是提供了一个使用资源的API。因此,传统的操作系统(和管理程序)将无法在半虚拟化系统上运行。
发布于 2011-01-15 19:07:09
这取决于系统管理程序的类型。有些虚拟机监控程序可以在其他管理程序中部署。存在很多问题,64位下的硬件支持也不是很好。我必须强调,除了测试之外,您永远不会这样做--即使这样,它也只对测试某些功能有用(比如vMotion或VMware端的HA )。它不会给你任何的指示,说明软件在生产环境中的表现如何。
首先,您需要了解x86特权级别(环):http://en.wikipedia.org/wiki/Ring_(计算机)_(安全)
通常,一个操作系统(拥有对硬件的特权访问权限)将运行在环形0中,它的用户级程序(必须通过操作系统代理硬件交互)将在第3环中运行。当程序进行系统调用时,它会向操作系统传递一条消息,要求它在其Ring 0空间中运行特定的函数,并将其结果返回给Ring 3程序。
当您在软件中完全实现虚拟化(没有像Intel VT或AMD-V这样的硬件辅助)时,您实际上要做的是检查运行中的VM中代码的特权级别。在VMware中,这种技术称为二进制翻译。在第3环中运行的任何代码都继续运行在没有修改的第3环中。在Ring 0中运行的任何东西都是在环1中运行的,通过虚拟机监控程序的虚拟硬件代理了Ring 0的硬件访问。虚拟硬件只是一组软件,它告诉主机操作系统在它的Ring 0空间中做一些事情。
某些硬件不支持二进制转换,因为它不支持实现二进制转换所必需的环级别。值得注意的是,在大多数现代x86处理器的64位模式中,Rings 1和2并不存在(一些AMD确实支持它,但英特尔不支持)。因此,二进制翻译通常仅限于32位来宾操作系统.
因为当您使用带有二进制翻译的hypervisor时,您已经在使用Ring 1,所以您不能在另一个管理程序中运行BT管理程序。(好吧,假设有人可以写一个虚拟机监控程序,当它本身被虚拟化时,它可以使用环状2。这是一个边缘的情况,我认为没有人做过。)
准虚拟化管理程序(如Xen )在类似的前提下工作。准虚拟化虚拟机监控程序使用经过特别修改的客户内核,这些内核不是在Ring 0中运行,而是知道它们不是在物理硬件上运行,而是使用特殊方法与虚拟机监控程序通信。由于半虚拟化完全在操作系统已经使用的环级别内工作,我相信您应该能够运行任意嵌套级别的半虚拟化管理程序,只要虚拟机管理程序本身不需要任何直接的硬件访问。很明显,你能走多深是有实际限制的,正如前面提到的那样,性能不会很好。
另一方面,硬件扩展的工作方式与二进制翻译相反--它们提供了一个超级特权管理程序级别,或者称为Ring -1 (位于Ring 0下面的一个级别),它不加修改地运行所有的Ring 0代码。当这些指令集正在使用时,Ring -1提供了一个环境,在这个环境中虚拟机的Ring 0操作被虚拟机管理程序捕获和处理,而不需要分析运行中的代码。
您不能同时使用硬件扩展运行两个管理程序,即使您试图并行运行它们。例如,如果已经使用VirtualBox使用硬件虚拟化支持运行虚拟机,则无法在Windows 7中运行Windows模式。
这给我们留下的是,您可以使用硬件虚拟化在管理程序中运行二进制翻译管理程序,但不能相反。此外,虚拟机监控程序通常只能运行32位的来宾,但性能影响通常不像其他海报所建议的那么大。(需要大量内存访问的应用程序,如数据库服务器,仍然会受到影响,因为它们必须经过两组虚拟页表。)大多数管理程序将检测到它们何时在另一个管理程序中运行,并拒绝运行。有些管理程序在测试能力下工作得很好;例如,您可以在VMware工作站下运行多个VMware ESXi实例(但您只能在托管于VMware工作站的任何ESXi虚拟机中使用BT模式)。
Xen不执行二进制转换--它要么使用硬件辅助虚拟化,要么执行半虚拟化。在另一个管理程序下运行Xen半虚拟化是可能的,但您不能以这种方式使用完全的硬件虚拟化来运行Xen is虚拟机。
希望这能有所帮助。
发布于 2014-03-15 10:54:03
你不能在任何虚拟机上运行Hyper-V。它必须直接在硬件上运行。您可以在某些虚拟化系统下安装Hyper-V角色,但不能运行vm。但是,您可能可以运行Hyper-V管理器程序。
https://serverfault.com/questions/222746
复制相似问题