
¿Existe alguna forma de recuperar o evitar el uso de memoria de forma transparente por parte de un invitado qemu-kvm?
Escenario A:
Un invitado usa 8 GB de RAM durante las horas pico, vuelve a usar 4 GB por la noche, pero el invitado aún reclama 8 GB de RAM del anfitrión.
Escenario B:
Un invitado usa 2 GB de RAM, pero tiene 6 GB de RAM en la caché de la página. El invitado reclama 8 GB de RAM del host, pero hasta 6 GB podrían ser RAM que podrían tener más importancia en otro sistema invitado.
Lo primero que pensé sobre el globo fue que el invitado no "vería" el efecto del globo, pero al enviar el "globo 2048", la memoria dentro del invitado en realidad se reduce a ~2 GB.
Respuesta1
puedes encenderglobo automáticoen un invitado libvirt editando el XML:
<memballoon model='virtio'>
El dispositivo de globo de memoria virtual tomaun parámetro autodeflate
, que por defecto es off
. Configúrelo para on
habilitar la ampliación automática.
<memballoon model='virtio' autodeflate='on'>
Tenga en cuenta que no hay ninguna opción de GUI en virt-manager para habilitar o deshabilitar esta configuración.
Si está llamando a qemu manualmente (guarde su cordura y no lo haga), agréguelo ,automatic=true
al dispositivo de globo, por ejemplo -device virtio-balloon,automatic=true
.
El globo automático requiere qemu/kvm 1.3.1 o posterior.
Tenga en cuenta que esto probablemente no resolverá todos sus problemas de contención de memoria; Lo mejor es simplemente tener suficiente RAM para ejecutar todas sus máquinas virtuales.
Respuesta2
cronometra esto en la VM y/o el host de VM todas las noches después de las horas punta:
sincronización; eco 1 > /proc/sys/vm/drop_caches
elimina el caché fs y lo devuelve como memoria disponible al sistema, luego el KVM/hipervisor puede verlo como memoria libre y encontrar otros usos para él.
también funciona muy bien con sistemas acoplables