如何在 Hyper-V 2012 主机分区上仅为虚拟机保留 RAM?

如何在 Hyper-V 2012 主机分区上仅为虚拟机保留 RAM?

我遇到过一种情况,Hyper-V 2012 集群节点无法支持 2 个虚拟机,而我认为它应该可以。目前,我正在使用 96GB RAM,我想运行 2 个 47GB 的虚拟机(静态 RAM)。这样主机就剩下 2GB,这应该足够了。但是,我无法运行第二台虚拟机,因为软件抱怨没有足够的内存。

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

我想告诉 Hyper-V 明确保留除 2GB 之外的所有空间仅供 VM 使用。

此外,如果能知道虚拟机管理程序为何“需要” 5GB 就更好了。有没有办法知道 Hyper-V 在内部使用 RAM 做什么?或者 Hyper-V 2012 是否有新的计算方法来确定主机实际需要多少 RAM(因为 2GB 不够用)?

编辑 - 2014-02-14

在审查了 4 个不同的 Hyper-V Server 2012r2 主机和 2008r2 之后,非分页池随物理安装的 RAM 线性增长。CPU 是 AMD 还是 Intel 并不重要。主机是否属于 Windows 群集并不重要。主机是否加入域并不重要。主机上运行着多少个虚拟机(或这些虚拟机消耗了多少 RAM)也不重要。最后,我认为这也是 2012r1 的行为,因为当 2012r2 主机都是 2012r1 时,我就出现了这些症状。

在所有情况下,我发现将已安装的 RAM 数量(以 GB 为单位)乘以 0.0425 即可知道非分页池中丢失了多少 RAM(以 GB 为单位)。(这是非常接近估计。)

因此,直到微软修复他们的软件,或正式承认这种行为是设计使然之前,答案是使用每个人都常用的计算方法(如下面的答案所示),然后添加上述计算的结果来解释你将因非分页池而丢失的 RAM。(或者,如果您愿意,我在这里有一个带有示例的摘要。

PS:我觉得需要注意的是,我一直在写“GB”,但我只是使用 Windows 报告的内容。Windows 和 RAMMap 报告的数字不是 GB/KB,而是 GiB/KiB,因此将非分页池计算的结果乘以 1024,以将其与 RAMMap 报告的“K”数字进行比较。

答案1

来源

300 MB 用于虚拟机管理程序,32 MB 用于分配给每个虚拟机的第一个 GB RAM,另外每个分配给每个虚拟机的额外 GB RAM 需要 8 MB,再加上 512 MB 用于在根分区上运行的主机操作系统

一般来说,计划为根分区分配至少 512 MB 内存,以提供 I/O 虚拟化、快照文件支持和子分区管理等服务。

第一个虚拟机需要 300+32+(45*8)=692MB

对于两个虚拟机来说,692+32+(45*8)=1084

1084+512=1596MB 总核算经验法则

因此,这只是虚拟机管理程序的消耗。现在考虑到,即使配置了第一个虚拟机,您也使用了超过 5 GB 的内存。我建议查看命令提示符中的 tasklist 输出,并查找消耗 RAM 的服务器进程

相关内容