有关VM内存分配的build议General / Hyper-V

我有一个关于虚拟机设置的基本问题。 我正在使用Hyper-V,但我认为这个问题很普通。 这是一个家庭办公室,我想在没有太多工作的情况下在虚拟机上获得相当好的性能。 我使用虚拟机来testing/debugging我的软件。 理想情况下,我会把所有的操作系​​统都启动,但是只有一个(大部分时间可能是零)会一次被激活。

有没有一些内存分配给VM的一般准则? 在一个极端情况下,您可以将内存总数除以虚拟机的数量(总共4 GB,每个虚拟机4 GB – > 1 GB)。 在极端的另一端,你可以给每个虚拟机全部内存,让操作系统进行仲裁。 我猜想都是错的! 我正在寻找合理的performance“经验法则”。 我不知道虚拟机服务器如何pipe理虚拟机的内存。

我问这个问题是因为我错误地认为Hyper-V(2008 R2版本)可以dynamic地为虚拟机提供额外的内存,如果有额外的可用的话。 我的想法是,只要我的使用量一次只能达到一个虚拟机,我就可以分配内存。 由于Hyper-V想要在启动时为每个虚拟机分配固定内存,因此我需要closures一些虚拟机,只运行我需要的虚拟机,或者设置虚拟机以降低内存分配,并确保物理内存为足够用于所有的分配加上Hyper-V进程和(可能)主机操作系统。

听起来像VMWare有更多的选项沿着这些线路,正如提供的答案中所述。 [/编辑]

谢谢,Brett

一般来说,您想知道在最坏的情况下,所有标准function都有足够的物理RAM可以从RAM可靠地运行。 这个幻数是从操作系统到操作系统的,而且根据你把客户操作系统的使用情况而有很大的不同。 你可以高兴地启动Windows 2003服务器,有几百兆内存,一些30M以下的Linux压缩发行版,等等,但是如果你想用多千兆字节数据库在你的客户机上运行SQL Server,那么你将要想要确保它实际上有真正的RAM备份它认为它具有的RAM的几个。

虚拟机pipe理程序如何处理RAM在供应商和产品之间变化很大。 Hyper-V不支持所谓的内存过度分配,因此您仅限于根据实际可用的内存分配内存。 VMware的ESX允许过度提交,为争用仲裁(共享)设置规则,以便控制虚拟机繁忙时发生的情况,以及物理RAM的总量不足以满足负载。 在Hyper-V环境中,您没有这个级别的控制权限,所以您必须预先分配足够的RAM。

VMware还有其他一些技巧来帮助解决内存过度提交问题。 透明页面共享和内存膨胀。

透明页面共享基本上是RAM的单一实例存储 – 虚拟机监控程序监控分配给每个虚拟机的RAM块,如果发现共同块存在于多个虚拟机中,它只保留一个副本并指向所有虚拟机 – 如果有虚拟机试图写入该块它分裂副本,以便不会发生坏事。 在同类VM环境中,这可以节省相当数量的RAM,而不会影响性能。

内存膨胀是一种机制,允许虚拟机pipe理程序“借用”分配给一个虚拟机的内存,并通过在前者中使用一个客户操作系统驱动程序给予该虚拟机一个更重要的内存,在该虚拟机内分配一大块内存。 分配之后,pipe理程序可以安全地重新分配气球驱动程序分配给内存的物理RAM。 这样做的好处在于,与Hypervisor将Guest虚拟机的内存交换到磁盘以重新分配内存的直接方法相比,丢失物理内存的Guest虚拟机意识到内存正在被某些东西使用, “借来的”RAM将被分配给访客中的任何重要系统function的风险显着降低。

编辑补充说:我从来没有试图看到,当您尝试启动虚拟机将会超出物理内存的可用空间时,Hyper-V会发生什么情况,我可以find的所有文档都指出虚拟机的所有内容你为他们configuration的RAM,然后pipe理程序和主机操作系统分配剩下的东西。 Hyper-V没有任何机制将最小的RAM内存应用到虚拟机,然后从池中分配剩余的内存,尽pipe它为CPU资源提供了这样的机制。 再次,VMware的ESX \ ESXi确实提供了这个选项。

值得一提的是,您还需要计划pipe理程序和主机操作系统所需的物理内存(如果您正在运行裸机Hyper-V服务器,则忽略后者)。 微软针对Hyper-V的性能调整build议表明,除了虚拟机中的XGig内存之外,您还需要:

  • pipe理程序为300 MB
  • 加上分配给每个虚拟机的第一个RAM的32 MB
  • 为每个分配给每个虚拟机的RAM增加了8 MB
  • 外加512 MB用于在根分区上运行的主机操作系统

如果你没有足够的物理内存,那么性能会受到严重的影响,甚至可能会有稳定性。

这不是一个通用的问题,因为Hyper-V不能像VMWare那样进行内存页面共享,该技术可以极大地改变分配虚拟机内存的方式。 如果Hyper-V支持它,我build议你分配一个起始数量的虚拟机,然后查看每个虚拟机随着时间的推移实际使用情况,在你发现更多关于它的行为的时候改变分配。

Windows Server 2008 R2 中的 Hyper-V 确实支持dynamic内存function(我正在运行SP1 – 不确定它是否在RTM版本中)。 我意识到你的问题是相当古老的,所以当你问它时可能不会。

我开始为每个访客虚拟机分配静态内存,但是很快把我的服务器最大化了。 dynamic内存可让您分配每个虚拟机的初始(可能较低)金额和最高金额。 它会根据需要分配内存,也会恢复未使用的内存。 您必须编辑每个虚拟机的设置才能设置 – 创build新虚拟机时不可用。 我刚刚重新configuration了一堆虚拟机来使用dynamic内存,并将我的整体内存承诺降低了近一半。

Hyper-V管理器截图显示分配的内存

我为dynamic内存configuration的虚拟机显示当前的内存需求和状态。 突出显示的虚拟机仍在运行1 GB的初始分配。 Exchange服务器(从上面的第二个)是一个大肥猪,并已经吹起了其最初的1GB,并分配了更多。 该function允许一个可configuration的缓冲区(默认为20%),因此Hyper-V已经为Exchange提供了额外的需求量。