17.4. KVM 中的过量使用

KVM 管理程序支持 CPU 和内存的过量使用。过量使用是分配超过系统中物理资源的虚拟 CPU 或者内存。如果过量使用 CPU,那么未利用的虚拟服务器或者桌面就可运行一些服务器,继而可以减少费用。

Xen 支持

Xen 管理程序不支持 CPU 过量使用。在 Xen 管理程序中过量使用 CPU 可导致系统不稳定并使主机和虚拟客户端崩溃。

过量使用内存

大多数操作系统和应用程序不会总是使用 100% 可用 RAM。KVM 可利用这种行为让虚拟客户端使用超过物理可用的内存量。

在 KVM 中,虚拟机是 Linux 进程。KVM 管理程序中的客户端没有为其分配的物理 RAM 块,而是作为进程工作。每个进程在其需要时为其分配更多内存。KVM 使用这个方法在客户端操作系统需要更多或者较少内存时为其进行分配。客户端使用的物理内存只比虚拟操作系统要使用的物理内存稍多一些。

当物理内存消耗殆尽或者某个进程有时不活跃时,Linux 会将进程内存运动到 swap 中。Swap 通常是在硬盘或者固定状态驱动器中 Linux 用来扩展虚拟内存的分区。Swap 比 RAM 的速度稍慢。

因为 KVM 虚拟机是 Linux 进程,所以如果虚拟客户端处于空闲状态或者没有大量使用,则会将该客户端使用的内存放入 swap 中。内存使用量可超过 swap 和物理 RAM 的总和。如果虚拟客户端使用其全部 RAM 则会造成一些问题。 如果虚拟机没有足够 swap 空间,则会启动将进程切换到 swap 中的 pdflush 进程,即清除进程。pdflush 会杀死进程来释放内存以便系统不至于崩溃。pdflush 可能会销毁导致文件系统出错虚拟客户端或者其他系统进程,并导致虚拟客户端无法引导。

Warning

如果没有足够的可用 swap,客户端操作系统将强制关闭。这可能导致对客户端无法操作。要避免这种情况出现,请不要使用超过可用 swap 内存的量。

swap 分区是用来将未使用的内存交换到硬盘中以便提高内存性能。默认 swap 分区大小是根据 RAM 大小和过量使用比例来计算的。如果您要在 KVM 中过量使用内存,则建议您为 swap 分区分配较大的看见。推荐的过量使用比例为 50%(0.5)。计算方程式为:

  1. (0.5 * RAM) + (overcommit ratio * RAM) = Recommended swap size

红帽知识库有一篇论述了安全有效地确定 swap 分区大小的文章。

内存过量使用比例最多可以是系统中物理 RAM 量的十倍。这只可在某些应用程序负载中使用(例如:桌面虚拟化用量在 100% 以下)。设定过量使用比例不是一个固定的方程式,您必须为您的环境进行测试并优化该比例。

过量使用的虚拟 CPU

KVM 管理程序支持过量使用的虚拟 CPU。只要虚拟客户端负载限制允许即可过量使用虚拟 CPU。当过量使用 VCPU 时要小心,因为负载接近 100% 时可能导致释放请求或者不可用响应次数。

过量使用虚拟 CPU 的最佳时机是当每个虚拟客户端只有一个 VCPU 的时候。Linux 调度程序对这种类型的负载非常有效。KVM 在比例为 5 VPCU,负载不超过 100% 时应该可安全支持客户端。过量使用单一 VCPU 虚拟客户端不会有问题。

您过量使用的对称多进程客户端数量不能超过处理核的物理数量。例如:有四个 VCPU 的客户端不能在使用双核处理器的主机中运行。过量使用对称多进程客户端的数量如果超过处理核的物理数量将导致性能严重下降。

分配客户端 VCPU 的数量不超过物理核的数量是可以的,也可以正常工作。例如:在四核主机中运行有四个 VCPU 的虚拟客户端。未达到 100% 负载的客户端在这种设置中可有效工作。

总是先测试

在没有进行大规模测试前不要在产品环境中过量使用内存或者 CPU。使用 100% 内存或者进程资源的应用程序可能在过量使用的环境中变得不稳定。部署前必须进行测试。