如何仅在Hyper-V 2012主机分区上为VM预留RAM?

我有一种情况,当我认为它应该时,Hyper-V 2012群集节点不能支持2个虚拟机。 目前,我正在玩96GB内存,我想有2个47GB的虚拟机运行(静态RAM)。 这留下2GB的主机,这应该是很多。 但是,我不能运行第二个虚拟机,因为软件抱怨没有足够的内存。

接下来,我把每个虚拟机减less到了46GB,但是它仍然不支持2个虚拟机。 从节点运行“taskmgr”,报告51GB“正在使用”,“44.9GB”可用。 我不明白为什么一个46GB的虚拟机会在主机分区中产生5GB的开销。 查看正在运行的进程,列出的RAM加起来不到500MB。

我想告诉Hyper-V只保留2GB的所有内容,仅用于虚拟机使用。

另外,知道为什么pipe理程序“需要”5GB会更好。 有没有一种方法可以告诉Hyper-V在内部使用什么内存? 还是有一个新的Hyper-V 2012计算主机实际需要多lessRAM(因为2GB没有削减)?

编辑 – 2014-02-14

在查看了4个不同的Hyper-V Server 2012r2主机和2008r2之后,非分页池随物理安装的RAM线性增长。 如果CPU是AMD或Intel,则无关紧要。 主机是否是Windows群集的一部分并不重要。 主机是否join到域中并不重要。 主机上运行多less个虚拟机(或者这些虚拟机占用多less内存)并不重要。 最后,我认为这也是2012r1的行为,因为当2012r2主机都是2012r1的时候,我有这些症状。

在所有情况下,我发现将安装的RAM(以GB为单位)乘以0.0425会告诉你有多lessRAM(以GB为单位)丢失到非分页池。 (这是一个非常接近的估计。)

所以直到微软修正他们的软件,或者正式承认这个行为是通过devise的,答案是使用每个人通常使用的计算(如下面的答案中所示),然后在上面的计算结果上加上帐户内存,你会失去非分页池。 ( 或者,如果你喜欢,我在这里有一个例子的摘要。 )

PS:我觉得重要的是要注意我已经写了“GB”,但是我只是使用了Windows的报告。 Windows和RAMMap报告的数字不是GB / KB,但实际上是GiB / KiB,所以将非分页池计算结果乘以1024,与RAMMap报告的“K”数相比较。

资源

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

作为一般的经验法则,计划为根分区分配至less512 MB的内存,以提供诸如I / O虚拟化,快照文件支持和子分区pipe理之类的服务。

300 + 32 +(45 * 8)= 692MB对于第一台虚拟机

692 + 32 +(45 * 8)= 1084

经验法则总计1084 + 512 = 1596MB

所以这只是虚拟机pipe理程序的消耗。 现在考虑到即使configuration了第一个虚拟机,也使用了超过5 GB的空间。 我build议在命令提示符下查看tasklist的输出,并查找使用RAM的服务器进程