En este blog, estaré hablando sobre cómo podemos optimizar la utilización de memoria RAM en nuestro ambiente de prueba HomeLab. El objetivo principal de este procedimiento es que podamos tener mayores niveles de consolidación a la hora de realizar nuestros laboratorios.

Transparent Page Sharing (TPS) es un método por el cual se eliminan las copias de páginas de memoria duplicadas. En otras palabras, el concepto de TPS es algo similar a la deduplicación. Esto ayuda al servidor de ESXi a liberar bloques de memoria repetidos de una máquina virtual permitiendo aumentar los niveles de consolidación.

Text

Si desean saber un poco más sobre TPS sus beneficios y riesgos pueden acceder el siguiente enlace Transparent Page Sharing (TPS) in hardware MMU systems . Aunque se sabe que el uso de TPS puede ser una alarma de seguridad, entiendo que no representa un riesgo importante en un entorno de pruebas como el nuestro. Les facilito una referencia para esta información:

In a nutshell, independent research indicates that TPS can be abused to gain unauthorized access to data under certain highly controlled conditions. In line with its secure by default security posture, VMware has opted to change the default behavior of TPS and provide customers with a configurable option for selectively and more securely enabling TPS in their environment.

Disabling TPS in vSphere – Impact on Critical Applications

Nota: Te muestro cómo cambiar este valor usando PowerShell porque te permite hacer el cambio en varios servidores al mismo tiempo

Para empezar debemos verificar qué valor está configurado actualmente en los servidores ESXi. Para realizar esta tarea utilizamos el comando Get-VMHost para extraer la información de los servidores conectados al vCenter. El resultado se envía al comando Get-AdvancedSetting -Name Mem.ShareForceSalting que nos permite extraer el valor configurado en la variable Mem.ShareForceSalting.

PS /home/blabla> Get-VMHost | Get-AdvancedSetting -Name Mem.ShareForceSalting | Select-Object Entity,Name,Value,Type | Format-Table -Wrap -AutoSize

Entity                           Name                  Value   Type
------                           ----                  -----   ----
(esxsvr-00f.zenprsolutions.local Mem.ShareForceSalting     2 VMHost)
comp-02a.zenprsolutions.local    Mem.ShareForceSalting     2 VMHost
comp-01a.zenprsolutions.local    Mem.ShareForceSalting     2 VMHost

PS /home/blabla> 

En este ejemplo en particular los servidores ESXi están configurados con un valor por defecto de #2. Utilizando la documentación de VMware como referencia, este valor indica que la función TPS Inter-VM está desactivada.

Text

Para activar la función TPS Inter-VM utilizamos el comando Set-AdvancedSetting con el valor de #0. Cabe mencionar que este comando se puede activar con las VMs encendidas o sin que el servidor esté en mantenimiento.

PS /home/blabla> Get-VMHost -Name esxsvr-00f.zenprsolutions.local | Get-AdvancedSetting -Name Mem.ShareForceSalting | Set-AdvancedSetting -Value 0        

Perform operation?
Modifying advanced setting 'Mem.ShareForceSalting'.
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): Y

Name                 Value                Type                 Description
----                 -----                ----                 -----------
Mem.ShareForceSalting 0                    VMHost               

PS /home/blabla> 

De nuevo validamos con el comando Get-AdvancedSetting si el valor configurado es el que especificamos anteriormente.

PS /home/blabla> Get-VMHost | Get-AdvancedSetting -Name Mem.ShareForceSalting | Select-Object Entity,Name,Value,Type | Format-Table -Wrap -AutoSize

Entity                          Name                  Value   Type
------                          ----                  -----   ----
esxsvr-00f.zenprsolutions.local Mem.ShareForceSalting     0 VMHost
comp-02a.zenprsolutions.local   Mem.ShareForceSalting     2 VMHost
comp-01a.zenprsolutions.local   Mem.ShareForceSalting     2 VMHost

PS /home/blabla> 

Para esta prueba encendimos 23 máquinas virtuales (Windows) para poner el servidor en modo de contención y así poder ver qué beneficios tiene el TPS. Este resultado que les muestro a continuación representa las estadísticas de memoria del servidor ESXi obtenidas con el comando esxtop. Aquí podemos ver las estadísticas antes de que configuráramos la función TPS Inter-VM con el valor #2. La variable que vemos en negrita PSHARE/MB representa el valor de memoria compartida que tiene actualmente el servidor, es decir, solo se está utilizando TPS en modo Intra-VM. Esta variable tiene un valor de 1400/MB.

2:58:11pm up 50 min, 722 worlds, 23 VMs, 45 vCPUs; MEM overcommit avg: 1.10, 1.10, 0.99
PMEM  /MB: 65398   total: 2139     vmk,60782 other, 2358 free
VMKMEM/MB: 65073 managed:  1265 minfree,  7501 rsvd,  57572 ursvd,  high state
PSHARE/MB:    1648  shared,     248  (common:    1400 saving)

Ahora pasamos a validar el beneficio de tener habilitada la función TPS Inter-VM con el valor #0 en nuestro clúster. Como se puede ver en el siguiente resultado del comando esxtop, hubo un ahorro sustancial (32097/MB) de memoria. Esto nos permitió aumentar los niveles de consolidación de nuestro HomeLab.

3:36:46pm up  1:29, 1024 worlds, 23 VMs, 45 vCPUs; MEM overcommit avg: 1.05, 1.05, 0.95
PMEM  /MB: 65398   total: 2262     vmk,60078 other, 3057 free
VMKMEM/MB: 65073 managed:  1265 minfree,  9092 rsvd,  55980 ursvd, clear state
PSHARE/MB:   33038  shared,     941  (common:   32097 saving)

Hasta Luego Amigos!

Text