QEMU-KVM: Aumentar la memoria RAM “en vivo”. Método 2

QEMU, al fin y al cabo, no es más que un emulador muy similar a veces a lo que sería…tu portátil. En el funcionamiento normal de QEMU existen métodos para insertar y extraer periféricos USB, discos, “devices” en general.

De manera que, si tu linux lo soporta, ¿porqué no simular que conectamos o desconectamos DIMMs completos de RAM en vivo?

Eso es lo que implementaron los desarrolladores de QEMU hace un tiempo, la capacidad para insertar y desconectar DIMMs de RAM sin tener que reiniciar el servidor. Ahora bien, tiene su truco. Al igual que en la placa base de tu portátil, existe una especificación que asocia ciertos módulos de RAM a un procesador. Es como cuando conectáis un servidor con dos procesadores, y tenéis que colocar RAM en un lado de la placa asociada a un procesador, y la otra parte en el otro lado, asociada al otro procesador.

Eso mismo, se puede  hacer en QEMU. Y es un poco engorroso porque a la hora de colocar un DIMM de RAM tienes que ver los “huecos” que tienes libres en la “placa base” simulada, para poder enganchar el DIMM de RAM en el sitio adecuado.

 

Antes de nada, recordad que en QEMU, con libvirtd,  si queremos ser capaces de modificar la RAM en vivo, hay que especificarle un “máximo” de RAM y un valor con el que arranca. En el caso de libvirt, tenemos que definir ese máximo, y , de paso, definir un nodo NUMA (aunque esté mal dicho, vamos a decir que es una serie de huecos disponibles)

En este caso, definimos un máximo de 16 GB y un valor actual de RAM de 1 GB. Y le especificamos, que el nodo NUMA de ID 0, puede estar asociado a las CPUs (virtuales) de ID 0 al 2.

Como casi todo en libvirt, se puede definir un DIMM de memoria RAM en formato XML.

En este caso, un DIMM de 256 MB de RAM.

Ahora, para conectarlo:

Si todo ha ido bien, el vuestro servidor virtual aparecerán esos 256 MB de RAM extra.

Para quitarlo, se puede usar el comando detach-device. Podréis quitar la RAM que hayáis añadido.

 

¿Dónde funciona esto?

En servidores Centos 6, Debian 7, y versiones similares.

Con un libvirt más o menos moderno, a partir de la 1.2.14.

Con un kernel 4 de linux en el hypervisor. Yo no lo probaría con el kernel por defecto de RedHat. Otra cosa es el kernel UEK de Oracle Linux.

 

¿Dónde está la documentación?

Esta es una pregunta recurrente en el universo de QEMU 😉

Está aquí: https://github.com/qemu/qemu/blob/master/docs/memory-hotplug.txt

Te explica cómo insertar DIMMs de RAM a través del interfaz de QEMU.

Y respecto a la documentación de libvirt: https://libvirt.org/formatdomain.html#elementsMemory

 

Leave a Comment

Your email address will not be published. Required fields are marked *