2 控制内存分配
在ESXi上,VMkernel管理所有的计算机内存,内存中的一部分由VMkernel消耗用以运行自身代码及存储数据,剩余的部分供虚拟机及其虚拟机监控程序(VMX)使用。如所有物理资源一样,内存是有限资源。管理员借助预留、限制和共享三种机制可以更精细地控制ESXi分配内存。三种机制vSphere客户端设置界面如图 2所示。(本节主要参考自文献[2] 11.2.2控制内存分配)
图 2 vSphere客户端的内存控制界面
2.1 内存预留技术
预留(Reservation)技术确保虚拟机至少分配预留值相应的真实物理内存。虚拟机启动的必备条件是ESXi主机具有预留值相应的可用物理内存,若内存不足,虚拟机启动将被拒绝。虚拟机启动后,主机会根据实际使用情况分配内存,预留值以下的内存将无条件分配,低于预留值部分的内存用后主机也不会将其收回。预留技术虽然确保了虚拟机具有一定容量的可用内存,但是预留的内存一旦分配,主机就无法再回收利用,降低内存使用效率,减少同时可运行的虚拟机数量。
2.2 内存限制技术
限制(Limit)技术控制虚拟机分配的真实物理内存低于限制值。实施限制时,任何虚拟机操作系统都无法意识到自身受到了限制,系统不仅始终认为自己拥有配置的内存容量,还会按照该容量继续进行使用。通常情况下,当需要降低ESXi主机上的物理内存使用率并且可以接受负面性能影响时,限制技术只是一种临时性措施。
2.3 内存共享技术
共享(Shares)技术为虚拟机请求内存建立优先级,共享值通常指定为高、正常或低,分别按照4:2:1的比例分配内存值,还可以选择自定义为各虚拟机分配特定的份额。虚拟机请求的内存应该大于其预留值,小于限制值。只有当虚拟机正在请求的内存超出ESXi主机能够提供的最大容量时,共享技术才会起作用。假设虚拟机A和B的共享值分别为1000MB、2000MB,A和B其它配置均相同且ESXi不能使用其它内存管理技术回收内存。当虚拟机A和B同时请求内存超过主机所能提供的最大值时,虚拟机A每分配1个内存页面,虚拟机B将分配2个内存页面。
2.4 内存开销
ESXi主机在运行管理虚拟机的过程中,除了分配给虚拟机使用的内存外,还会引起两种内存开销:一是运行VMkernel系统及其上各种守护进程所消耗的内存;二是为每个虚拟机运行各自的虚拟机监控程序(VMM)所消耗的内存,该内存会随着虚拟机配置的内存和CPU数量增加而提高,具体情况如表 1所示。
表 1 虚拟机上的示例开销内存
| 内存 | 1 vcpu | 2 vcpus | 4 vcpus | 8 vcpus |
|---|---|---|---|---|
| 256 | 20.29 | 24.28 | 32.23 | 48.16 |
| 1024 | 25.90 | 29.91 | 37.86 | 53.82 |
| 1024 | 48.64 | 52.72 | 60.67 | 76.78 |
| 1024 | 139.62 | 143.98 | 151.93 | 168.60 |