译者的废话
这是Red Hat RHEL 7文档中关于KVM虚拟机超量分配的说明文档,这里说的KVM,应该就是适用QEMU管理的KVM虚拟机的,因为在启动QEMU虚拟机的时候,只要-smp N
和-m N
参数分别就可以指定虚拟机的vCPU数和内存数,我实际实验发现,它们是都可以超过实际的物理CPU核数和内存大小的。
硬件资源超量分配,说的好听是节约资源,但是资源的分配超的不切实际,也就是”VPS超售”的万恶之源。。。比如一个4核8G内存的服务器,碰上黑心商家,不知道会被分出多少个1核1G内存的小崽子呢。。。不过这里Red Hat只是给出技术上的建议,没有提及VPS超售问题。嗯,做技术,不可耻。。。
原文:
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Virtualization_Deployment_and_Administration_Guide/chap-Overcommitting_with_KVM.html#sect-Overcommitting_with_KVM-Introduction
简介
KVM hypervisor支持CPU和内存的超量分配。超量分配就是划分的虚拟CPU(vCPUs)或者内存比系统的实际物理资源多。通过CPU的超量分配,使用中的虚拟服务器或桌面就可以在更少的服务器上跑了,节省了不少系统资源,同时会减少电源、冷却等硬件方面的投资。
由于大多数进程始终不能访问其分配的内存的100%,因此KVM虚拟机可以利用此行为来分配给客户机虚拟机的多于实际可用的内存空间。
内存的超量分配
注意!
超量分配不是内存问题的一个理想解决方案,因为推荐的方法是当内存短缺时给每个虚拟机guest分配更少的内存,或者给host增加更多的物理内存,或者使用交换空间(swap)。如果你决定超量分配内存,实施操作前一定要确保足够的测试。可以联系Red Hat支持来协助进行超量分配。(- -! Red Hat的文档,233333)
在KVM管理程序上运行的虚拟机是没有分配到实际的物理RAM的专用块的。相反,每个guest都作为Linux的一个进程运行,host的Linux内核仅在请求时才分配内存。 此外,主机的内存管理器还可以将guest虚拟机的内存在自己的物理内存和交换空间之间随时传输。这就是为什么超载需要在主机物理机上分配足够的交换空间来容纳所有的guest,以保证主机的进程有足够的内存。 作为基本规则,host的操作系统本身如果需要最多4G的内存,那么的这个host需要至少4GB的交换空间。 有关详细信息,请参阅示例7.1“内存超量分配实例”。
Red Hat知识库有一篇关于安全有效地确定交换分区大小的文章。(- -!)
注意!
以下示例仅作为配置交换的指导,列出的设置可能不是用您的环境。
- 示例7.1 内存超量分配实例
ExampleServer1:具有32GB的物理RAM。 该系统正在配置为运行50个guest虚拟机,每个虚拟机需要1GB的虚拟内存。 如上所述,主机的系统本身最多需要4GB(guest除外)以及另外4GB作为最小的交换空间。
交换空间的计算如下:
1. 计算所有虚拟机总和所需的内存量 – 在此示例中:(50个虚拟机*每个虚拟机1GB的内存)= 50GB
2. 将虚拟机的内存量与主机操作系统内存量和主机最小交换空间量相加 – 在此示例中:50GB guest内存+ 4GB host的操作系统+ 4GB最小swap= 58GB
3. 把物理RAM量从这个数上减去 – 在这个例子中: 58GB – 32GB = 26GB
4. 最后的结果及时需要分配的交换空间量 – 在这个例子中为26GB。
注意
过度配置不适用于所有虚拟机,但已被发现可以在桌面虚拟化设置中进行工作,更适用于同时使用较小的密集使用情况或运行多个运行KSM的相同guest。 在更改这些设置之前请小心。
有关KSM和过度配置的更多信息,请参阅“Red Hat Enterprise Linux 7虚拟化调优和优化指南”。
虚拟CPU(VCPUS)的超量分配
KVM虚拟机管理程序支持过度使用虚拟化CPU(vCPU)。只要客户机虚拟机的负载限制允许,虚拟化的CPU可以被超量分配,过度使用vCPU时请小心,因为接近100%的负载可能会导致请求被丢弃或响应超时。
在Red Hat Enterprise Linux 7中,超量分配多于1个vCPU(称为symmetric multiprocessing虚拟机, 对称多处理虚拟机)是可能的,但是如果虚拟机运行的核心数如果多于物理核心数,会导致性能的下降。比如,具有4个vCPU的虚拟机不适合在有双核CPU的host机上运行。SMP虚拟机分配核心数如果超过了实际的物理核心数,会导致很大的性能下降。因为程序会得到比请求少的CPU时间。
使用KVM虚拟机,一些处理开销是固有的。 CPU过量使用可能会增加SMP开销,因为使用时间分片来为客户端分配资源可以使guest内部的CPU间通信速度更慢。如果guest有很大数量的vCPU,或者有较大超额比率,这个开销会增加。
当单个主机有多个guest虚拟机时,虚拟化CPU最佳,而与主机CPU数相比,每个guest虚拟机具有少量的vCPU。 Linux调度程序对这种类型的负载非常有效。 KVM可以很安全地将负载低于100%的guest以5个vCPU(5个虚拟机)对应1个的比例分配。 KVM管理程序将在所有虚拟机之间切换,确保负载均衡。
为了获得最佳性能,Red Hat建议为一个虚拟机分配那个虚拟机内的程序所需的vCPU数即可。
重要
使用100%内存或处理资源的应用程序在超量分配的环境中可能会变得不稳定。所以在没有大量测试的情况下,不要在生产环境中过度使用内存或CPU,因为CPU超量分配率和SMP的数量是与工作负载无关的。