Memory ballooning VMWare
VMware usa memory ballooning para evitar que el hypervisor tenga que usar swap cuando las maquinas virtuales usan más memoria de la disponible
Por defecto Linux intenta usar toda la memoria disponible llenando con buffers cache la que no usan las aplicaciones, por lo que siempre veremos mucha ocupación.
Cuando el hypervisor necesita reclamar memoria a las virtuales, les pide que “hinchen el globo“, por lo tanto el driver pide memoria y el Linux libera los buffers para entregarla al driver de ballooning, que a su vez comunica al hypervisor que dicha memoria la tiene reservada y por lo tanto la puede usar para otro fin.
# lsmod | grep ball vmware_balloon 7199 0
Mediante vmware-toolbox-cmd podemos ver si se ha hinchado el globo:
# vmware-toolbox-cmd stat balloon 1217 MHz
Curiosamente esta versión lo da en MHz, pero se tratan de MB.
Otro efecto colateral es que una vez hinchado el globo no nos va a cuadrar la memória en uso de los procesos (sin usar shared memory):
# echo $(ps auxf | awk '{ print $6 }' | grep -v RSS | paste -sd+ | bc -l)/1024 | bc -l 656.32421875000000000000
Con la memoria en uso quitando los buffers/cache:
# free -m total used free shared buffers cached Mem: 1873 1785 88 0 3 33 -/+ buffers/cache: 1748 125 Swap: 2015 258 1757
Añadiendo a la ecuación la memoria “robada” por el driver de ballooning vuelven a cuadrar los datos.
30. September 2014 at 7:29 am :
Otro método: https://access.redhat.com/solutions/445113
30. September 2014 at 7:32 am :
No lo puedo ver:
Subscriber content preview. For full access to the Red Hat Knowledgebase, please log in 🙁
30. September 2014 at 9:13 am :
* Mount debugfs filesystem by running:
# mount -t debugfs nodev /sys/kernel/debug
* Check /sys/kernel/debug/vmmemctl file:
current: line is showing the amount of memory in pages currently consumed by the balloon driver.
target: line is showing the amount of memory in pages the balloon driver is going to consume.
* To calulate the amount of memory the balloon driver has consumed, just multiply the number of pages by the page size of your hardware architecture
30. September 2014 at 9:25 am :
Muchas gracias! Mucho mejor que usar las herramientas de vmware que te dicen MHz!
30. September 2014 at 9:48 am :
x’D
30. September 2014 at 11:13 pm :
Osea, que le quita memoria a las maquinas virtuales. Estas, para darle memoria al hipervisor, lo que hacen es hinchar sus procesos (o algún proceso concreto de la VM), haciendo que el núcleo de las máquina virtuales, para entregar la memoria demandada, tenga que reducir sus buffers cache. Un truco interesante.
Me recuerda a un problema que tuvimos con Oracle 9/10 en máquinas Itanium con Red Hat 4, en las que los procesos de base de datos no podia usar la memoria de los buffers (incomprensiblemente, empezaba a utilizar swap, cuando la maquina tenia varios GB disponibles en buffers cache), así que creamos un programa en C que consumia toda la memoria de swap (haz malloc mientras haya memoria) y en ese caso, se venia obligado el núcleo a liberar memoria de buffers para el proceso tragón.
Otra forma de arreglarlo era desactivar el swap, en ese momento, el núcleo se veia obligado a liberara los buffer para dar cabida a lo que se le venia encima procedente del swap. Era como si tuviese mas prioridad los procesos de los buffers que los procesos de aplicaciones.