关于在虚拟机内部允许虚拟内存有什么看法?
例如,一台具有 8 Gig 内存的主机,我可以运行 4 个 VM,每个 VM 具有 2 Gig(大约)并且不会有主机交换。但是,在每个 VM 中,我可以有一个 2Gig 的页面文件,因此虚拟服务器有 4Gig 的可用内存,2 个物理 2 个虚拟。
或者...我可以给每个 VM 4 Gig 的“内存”,让主机使用 8Gig 的实际内存和 8G 的虚拟内存,并且每个 VM 中没有页面文件。每个 VM 仍将具有“4Gig”,但分页将发生在主机上。
我的温暖模糊部分说在每个客人中设置分页就像你在真正的服务器上一样,你很好。但是我的分析方面看到了过度使用主机内存和在 VM 中没有分页的两个主要优点。首先,虚拟内存的 IO 然后由更接近裸机的主机操作系统处理,因此应该更快。其次,只有在主机没有可用内存时才需要分页。如果客人想要 4Gig,但其他客人没有使用他们的内存,则不需要分页。
想法?
我不是虚拟化专家(事实上,我认为大多数情况下它是错误的工具),但从我所读到的内容来看,您的客户操作系统不应该被允许交换。防止交换的主要原因是它代表了一种猜测操作系统占用主机大部分 IO 带宽的方式。
此外,您不想向您的猜测操作系统假装主机拥有比它拥有的更多的物理内存,因为这会导致主机大量交换,但是在猜测操作系统内部调试性能问题将非常困难,因为从他们的角度来看看来它们没有交换,来宾中的任何操作系统级别工具都不会显示它。
甚至可能使用 Xen 和 VmWare 之类的工具,由于使用了 baloon 内存驱动程序,您无法在主机操作系统上过度使用内存。
这在很大程度上取决于主机操作系统上过度使用内存的后果。例如,如果我让 Linux 内存不足杀手杀死我的虚拟机,我会更加恼火。我倾向于为每个客户操作系统留出一个较小的、单独的、预先分配的、独立于快照的(如果适用于您的 VM 解决方案)虚拟磁盘,确保托管该磁盘映像的文件没有碎片和/或在快速驱动器上,并配置来宾交换空间驻留在该虚拟磁盘上。今天的 Hypervisor 内存管理已经足够好,不会感觉到 OOM 主机交换和 OOM 来宾交换之间的区别,而且我可以独立微调来宾行为。两全其美。
VM 中的自己交换是关于更好地隔离资源。这样的虚拟机将无法满足其 RAM 需求来拖累主机——它已经受到限制。而且,如果您将交换放在 VM 系统以外的磁盘上,您甚至可以为其设置不安全的缓存策略。
但是“外部”交换是关于更好地利用资源,而不是。
就是这样:隔离与利用——你的选择。
由于 IO 问题,我不会给您的 Guest 虚拟内存。我也不会给您的主机虚拟内存和来宾太多的物理内存,因为来宾实际上不会意识到它使用的是虚拟内存而不是物理内存。
除了购买更多内存之外,这不会给您留下任何解决方案。您真的无法获得更多内存的替代方案。它是如此便宜,如果您的服务器可以支持更多,我会得到更多。