Un host ESXi utiliza varias técnicas para optimizar el consumo de RAM de las máquinas virtuales. en este post comentamos Transparent Page Sharing.
Page Sharing: Este método comparte páginas de memoria entre máquinas virtuales.
Por motivos de seguridad fue deshabilitado por defecto en vSphere 6.0 indicado en KB.2080735 En el mismo KB se indica:
What is the risk for information disclosure due to Transparent Page Sharing?
Currently, VMware believes that the risk of information disclosure described in the recent academic papers leveraging TPS between Virtual Machines is very small in real world conditions.
The conditions under which the researchers were able to extract AES encryption keys are very specific and are unlikely to be present in a real world deployment.
Para más información de esta investigación: https://eprint.iacr.org/2014/435.pdf
VMware añadió 2 modos de funcionamineto para Page Sharing:
– inter-VM: se deduplicarán las páginas de memoria de diferentes máquinas virtuales.
– intra-VM: cada máquina virtual tiene sus páginas de memoria de forma independiente, estas puede ser deduplicadas sólo en una misma máquina virtual.
En las best practices VMware indica que puede ser util para entornos de VDI. También existe otra variable en juego, las páginas largas de memoria (2MB) no son utilizadas con page sharing, con lo que sólo es útil en páginas de memoria pequeñas. En este KB.1021095 se indica el motivo de no utilizar páginas de 2 MB
The probability of finding two large pages that are identical is very low.
The overhead of performing a bit-by-bit comparison for a 2MB page is much higher than for a 4KB page.
Con esta información sabemos que habilitarlo puede no ser tan óptimo. En el documento de recomendaciones de rendimiento para vSphere 7.0 se indica cómo habilitar Page Sharing:
To enable inter-VM page sharing between all virtual machines on an ESXi host, set the host configuration option Mem.ShareForceSalting to 0. This duplicates the original default behavior of pre-6.0 versions of vSphere.
Activamos esta opción en un ESXi 7.0 u1
Después de cambiar este parámetro es necesario reinicar el ESXi. La siguiente captura muestra un ESXi con 4 máquinas virtuales Centos 8 y 3 máquina virtulales vCLS
Las máquinas virtuales Centos 8 apenas tienen consumo de RAM, se observa en la captura que el sistema está ahorrando 75 MB. El proceso de verificación de páginas idénticas de memoria para crear un puntero de acceso a ese bloque de memoria se realiza cada 60 minutos. En un entorno productivo con más máquinas virtuales activas el resultado ofrecerá un valor más interesante.
En sistemas windows server 2012/2016/2019 por defecto tiene un tamaño de página larga de 2Mb. Ídem en sistemas Linux Red Hat/Centos 7/8 por defecto tienen como tamaño de página 2MB. En el kernel de Linu se introdujo esta optimización de tamaño de páginas de memoria desde la versión 3.18. En un sistema Linux se puede verificar el tamaño de página con el siguiente comando:
[root@localhost ~]# cat /proc/meminfo |grep Hugepagesize
Hugepagesize: 2048 kB
Por tanto, los sistemas operativos harán uso de páginas de memoria de 4KB en ocasiones puntuales, más bien en momentos de falta de memoria RAM.