Manejando la memoria en “caliente” con Xen
Cuando tenemos una máquina física con tantos GB de RAM y empezamos a paravirtualizar con Xen sobre ella, el recurso que más debemos cuidar es éste, la memoria física disponible en el sistema. Dentro del fichero de configuración de nuestras máquinas definiremos dos valores:
- memory: memoria con la que se creará la máquina
- maxmem: tope de memoria que podremos conseguir gracias al balloning (aumento de la memoria en caliente)
De hecho, si no definimos el siguiente parámetro, Xen interpretará que será igual al anterior. Imaginemos que tenemos una máquina creada con 1024MB de memoria y con un tope de 4096MB.
Cuando hacemos xm create nombreMaquina y se inicia, con xm list podremos ver la cantidad de memoria que está consumiendo:
# xm list Name ID Mem(MiB) VCPUs State Time(s) Domain-0 0 256 2 r----- 54678.1 foo 2 1024 1 -b---- 4660.2
Aumentar y reducir memoria en ejecución
La máquina está ejecutando, necesitas crear nuevas máquinas y ésta en concreto no está usando toda la memoria. Recordad que el uso de CPUs virtuales en Xen es escalable, pero el de la memoria no lo es, al menos de forma tan automática. La solución es usar la siguiente instrucción:
xm mem-set nombreMaquina nuevoTamaño
Veamos cómo quedaría nuestro caso xm mem-set foo 512:
# xm mem-set foo 512 # xm list Name ID Mem(MiB) VCPUs State Time(s) Domain-0 0 256 2 r----- 56681.0 foo 2 512 1 -b---- 5160.2
O podemos incrementarla, hasta un valor siempre igual o menor al definido en maxmem, por ejemplo a 2048:
xm mem-set foo 2048
# xm list Name ID Mem(MiB) VCPUs State Time(s) Domain-0 0 256 2 r----- 69735.6 foo 11 2048 1 -b---- 5289.8