使用 KVM 分配交换空间

使用 KVM 分配交换空间

考虑以下场景:具有 2 GiB 的主机运行一些使用 KVM 的来宾。每个客人通常不需要太多内存;他们每人获得 256 MiB,并且运行的服务大部分都是闲置的。然而,有时客人需要更多的内存。现在,每个来宾只有很少的 RAM,但有自己的交换空间。我注意到使用了一小部分交换空间。我从来没有遇到过该配置的问题,但只是出于好奇:

最优的掉期分配策略是什么?

  1. 从各自的磁盘为每个来宾分配自己的交换空间,并从主机只为来宾分配很少的内存。 (这就是我现在正在做的事情。)
  2. 为主机分配较大的交换空间,不为客户机分配更多交换空间,并为客户机分配更多内存。

内存膨胀有助于提高内存性能吗?

答案1

“有时客人需要更多内存”听起来像是一个很好的应用过度使用内存。这个想法是你为每个客人分配大量的内存(超过你实际可以分配的内存),因为他们通常不使用它。然后,您进行数学计算,以确保有足够的交换空间,以便来宾实际上可以在最坏的情况下交换到磁盘,在最坏的情况下,它们实际上都在使用所有内存。

交换空间继续主持人机器,它需要服从

主机交换空间 = 所有客户机内存的总和 + 建议的主机交换空间

为了保证它的安全。

因此,如果您有 10 个访客和 2 GiB RAM,您可以尝试类似的方法

  • 每个访客 512 MiB RAM(512 * 10 = 总共 5120 MiB)
  • 主机上的 2 GiB 交换

这意味着您的主机交换空间应至少为 512 * 10 + 2048 = 7168 MiB 才能安全地处理此问题,假设您可以将 2 GiB 交换空间专用于主机(对于那么小的主机内存,建议这样做)。

始终首先测试这些类型的设置,以确保您的机器可以处理它们。对它们进行基准测试就更好了,并且可以让您尝试不同的负载并选择最有效的一种。

答案2

@ndt 有一个很好的程序。我的场景不同,所以我采用不同的方法。

我的服务器有很多客人,他们都运行一个应用程序,通常是网络/邮件/文件服务器。里面的数据非常重要,所以经常做备份和快照。所以磁盘镜像越小越简单越好。所以我实际上不创建交换分区,而是创建交换文件。由于我没有具有高处理甚至内存需求的客人,因此他们的磁盘存储和内存都较小。交换文件位于 rootfs 内部。

这种设置节省了大量空间并简化了维护。正如我所说,这与其他情况不同。

答案3

接受的答案是错误的:

您还应该在虚拟机上启用交换空间,以便它知道 RAM 正在交换,并避免将其用于磁盘缓存和 IO 缓冲区。

如果您只在主机上启用交换,虚拟机将认为它有可用的实际 RAM 并使用它,而它将在主机上交换,从而产生不必要的瓶颈和冻结。这是你可能犯的最大错误。

您还应该使用不同的虚拟驱动器作为交换磁盘,因为您不想将其与其他数据驱动器一起进行快照/备份。

由于交换空间可能不稳定,因此您还可以使用cache=unsafe 或使用zram/z​​swap 以获得更好的性能。

还要记住,交换是好的,因为它可以释放不活动的 RAM,这些 RAM 稍后可以重新用于磁盘缓存和 IO 缓冲区。

相关内容