在我使用过的各种主机系统(无论是 Hyper-V、VMware 还是 KVM)上设置虚拟机时,我总是分配与物理内存配置相匹配的 RAM 数量 - 例如,要添加 1GB RAM,我会添加 1024MB,对于 6GB RAM,我会添加 6 x 1024 = 6144MB。
我意识到我从来没有想过为什么我会这样做,这只是我以前工作时做事的方式,我从未质疑过。
因此,我的问题是,除了这意味着虚拟化操作系统可以将分配的 RAM 整齐地四舍五入到最接近的 GB 之外,分配不是 2 的幂或其倍数的 RAM 是否有什么缺点?例如,添加 500MB RAM、750MB RAM 或 1001MB RAM 会有什么缺点吗?
或者,有没有什么优势可以使这成为推荐的做法?
就主机操作系统而言,我没有明确回答这个问题,因为我有兴趣看看针对不同的主机是否有不同的考虑因素。
答案1
没什么缺点。您可以根据需要添加 RAM。CPU 也一样。如果您需要 3 个 vCPU 或 4 个或 5 个,您可以根据需要分配。
有些管理员喜欢看到 512 和 1024 的倍数,但实际上这并不重要。
答案2
不,没有优点/缺点。系统管理员倾向于使用圆形尺寸,我也是。
我可以构建一个非常小的 Linux 系统并为其分配 403 MB 的 RAM,系统将分配其运行所需的内存。但是,您找不到 403 MB 的 RAM 模块,因为一切都以 2 的幂运行。因此只需四舍五入到最适合您的构建即可。
我曾经在单个 esxi 中虚拟化 Windows 和 Linux 操作系统,并为 Ubuntu 分配了 768MB 内存,为 Windows 分配了 3328MB 内存,对两者都很好,总共 4GB。如果我的内存更少,我就会失去它。
答案3
分配的 RAM 数量不是 2 的幂或其倍数有什么缺点吗?
首先。请记住,每个整数都是 2 的幂的倍数。因此,真正的问题是您是否应该将自己限制为某些乘数或某些 2 的幂。
物理机通常配备的内存是 2 的幂的一个小倍数(1、3 或 5)。但这种情况并不适用于虚拟机。
但是,页面大小是虚拟机所关心的问题。有些架构只支持两种可能的页面大小。常见的 32 位架构支持正好 4KB 和 4MB 的页面。常见的 64 位架构支持正好 4KB 和 2MB 的页面。
如果分配给虚拟机的内存始终为 4MB 的倍数,则底层代码使用大页面来优化性能将更为实用。出于这些原因,我建议将内存设置为 4MB 的倍数。
我确实希望设计合理的软件能够将大小四舍五入为 4MB 的倍数,如果这样更有利的话。但如果您一开始就选择 4MB 的倍数,那么您对软件正确处理这些极端情况的依赖就会减少。
除此之外,我认为分配给虚拟机的 RAM 数量应尽可能准确,只要您可以预测它们的需求即可。如果您预测虚拟机需要 500MB 到 750MB 才能获得最佳性能,则分配 752MB。我认为没有理由将其四舍五入为 768MB 或 1024MB。
这伙伴内存分配某些系统使用的方法设计用于处理 2 的幂。但是,只需稍加努力,该方法便可用于处理非 2 的幂的大小。即使在内存大小为 2 的倍数的物理机器上,仍有可能部分物理内存无法供伙伴分配器使用。因此,可以预期,使用此方法的每个操作系统都可以确保其他内存大小可以正常工作。