systemadmin.es > Virtualización > Memory ballooning VMWare

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.

6 comments to “Memory ballooning VMWare”

  1. Otro método: https://access.redhat.com/solutions/445113

  2. No lo puedo ver:

    Subscriber content preview. For full access to the Red Hat Knowledgebase, please log in 🙁

  3. * 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

  4. Muchas gracias! Mucho mejor que usar las herramientas de vmware que te dicen MHz!

    # mount -t debugfs nodev /sys/kernel/debug
    # cat  /sys/kernel/debug/vmmemctl 
    target:                    0 pages
    current:                   0 pages
    rateNoSleepAlloc:      16384 pages/sec
    rateSleepAlloc:         2048 pages/sec
    rateFree:              16384 pages/sec
    
    timer:               1262125
    start:                     1 (   0 failed)
    guestType:                 1 (   0 failed)
    lock:               42930821 (18310 failed)
    unlock:             42912511 (   0 failed)
    target:              1262125 (   0 failed)
    primNoSleepAlloc:   42930821 (   0 failed)
    primCanSleepAlloc:         0 (   0 failed)
    primFree:           42912511
    errAlloc:              18310
    errFree:               18310
    
  5. x’D

  6. 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.

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>