XenServer: Gestión de memoria

  La gestión de memoria en XenServer se corresponde con uno de las funcionalidades más importantes en los sistemas de virtualización empresariales: la posibilidad de compartir parte de la memoria física instalada en los servidores físicos entre las máquinas virtuales que se ejecutan en ellos. Estos es, que si una de las máquinas virtuales necesita más memoria en determinados momentos, pueda “cogerla” de otra máquina virtual que se encuentre menos cargada. Esta característica es denominada en XenServer Dynamic Memory Control (DMC).

MA icono manual(ACCEDE AQUÍ AL INDICE DEL MANUAL DE CITRIX XENSERVER)

CONTENIDO DE LA LECCION

  • Caso práctico
  • ¿Qué es la gestión de memoria en XenServer?
  • Conceptos de gestión de memoria en XenServer
  • Configuración de la memoria dinámica
  • Configuración de la memoria estática

 

Caso práctico

   En el entorno XenServer que está implantando nuestra empresa ficticia “L023 Formación” se estima conveniente que si alguno de los hosts XenServer donde se ejecuten las máquinas virtuales de los cursos deba estar fuera de línea por razones de mantenimiento, error hardware, etc.., los cursos puedan seguir desarrollándose con normalidad. Esto implica que el resto de hosts puedan proveer los suficientes recursos hardware a las máquinas virtuales. En particular, probaremos a iniciar todas las máquinas virtuales del curso Windows 8.1 en dos hosts y practicaremos con las diferentes opciones de gestión de memoria dinámica (el asunto de la previsión ante fallos de hosts se tratará más adecuadamente en la lección de Alta Disponibilidad. Ahora nos centraremos en la gestión de memoria).

 

¿Qué es la gestión de memoria en XenServer?

   La característica de gestión de memoria en XenServer (configurable desde XenCenter o con el comando xe, como veremos más adelante) permite:

  • Especificar un máximo y un mínimo de memoria a cada máquina. XenServer jugará con estos valores establecidos en las máquinas virtuales de manera que la memoria física pueda ser compartida entre ellas.
  • Que un servidor XenServer pueda mantener en ejecución un conjunto de máquinas virtuales, cuya suma de memoria física asignada (desde el punto de vista de la máquina virtual) sea superior a la que realmente se encuentra instalada en el host físico. Esto se consigue gracias a que las máquinas virtuales “comparten” memoria entre ellas. Este intercambio de memoria es gestionado por el servidor XenServer. Para que pueda llevarse a cabo, es necesario que las XenServer Tools estén instaladas en las máquinas virtuales.
  • Que sea posible aumentar la memoria mínima disponible en una máquina virtual sin necesidad de apagarla.

Conceptos de gestión de memoria en XenServer

   Vamos a introducir algunos conceptos de gestión de memoria en XenServer necesarios para comprender su manejo. Los principales son los rangos de memoria dinámico y estático.

  • Memoria necesaria para XenServer: no toda la memoria física instalada en un host XenServer está disponible para las máquinas virtuales. Tanto el hypervisor como la máquina virtual de sistema dom0 necesitan memoria para su funcionamiento. El hypervisor suele utilizar aproximadamente 128 MB. El valor para dom0 suele estar entre 200 MB y 752 MB, dependiendo de la cantidad de memoria física instalada en el host. Este valor se puede consultar ejecutando, en una sesión ssh en el host que se quiera consultar: cat /proc/meminfo | grep MemTotal
  • Memory dynamic maximum: valor máximo de memoria del que que dispondrá la máquina virtual.
  • Memory dynamic minimum: valor mínimo de memoria asegurado a la máquina virtual. Puede aumentarse sin necesidad de reiniciar la máquina virtual.
  • Memory static maximum: Máximo estático de memoria. Es la cantidad de memoria que el sistema operativo de la máquina virtual detectará como instalada. Si es superior al máximo dinámico, este se podrá aumentar sin necesidad de reiniciar la máquina virtual.
  • Memory static minimum. Viene configurada para cada template xenServer de cada sistema operativo. Citrix recomienda no variar este valor. Viene a ser el mínimo necesario para iniciar la máquina virtual.
  • Cantidad fija de memoria: Si no se modifica este valor, una máquina virtual tiene asignado un valor fijo de memoria igual al que se le configurase en su despliegue inicial.

   Los valores dinámicos y la cantidad fija de memoria se pueden configurar desde XenCenter. Seleccionando en el panel izquierdo una máquina virtual, podemos ver sus valores de memoria en la pestaña “Memory” del panel derecho. Los valores “Minimum memory” y “Maximum memory” se refieren al rango dinámico. Si no se ha cambiado ninguno de los valores, el máximo y el mínimo del rango dinámico coinciden y son el valor fijo de memoria del que dispone la máquina virtual.

 

   Haciendo uso del comando xe, los valores de los rangos estático y dinámico se pueden obtener con el comando vm-list. Por ejemplo, para la máquina virtual VIRT001:

[root@l023xse01 ~]# xe vm-list name-label=VIRT001 params=memory-dynamic-max,memory-dynamic-min,memory-static-max,memory-static-min

Resultado:
  memory-static-max ( RW) : 2147483648
memory-dynamic-max ( RW): 2147483648
memory-dynamic-min ( RW): 2147483648
memory-static-min ( RW) : 1073741824

   Estos cuatro valores deben cumplir la siguiente regla:

0 ≤ memory-static-min ≤ memory-dynamic-min ≤ memory-dynamic-max ≤ memory-static-max

   Si no se establece un rango dinámico, aseguramos que la máquina virtual disponga en todo momento de la cantidad mínima de memoria especificada. Esto puede ser recomendable si la máquina virtual está ejecutando funciones de servidor. Por otra parte, utilizar rangos dinámicos de memoria es recomendable en infraestructuras de escritorios virtuales.

   Para que funcione correctamente la gestión de memoria dinámica en XenServer, las XenServer Tools deben estar instaladas e iniciadas en las máquinas virtuales.

 

Configuración de la memoria dinámica

   En nuestro entorno XenServer dejamos apagamos el servidor l023xse03 e intentamos iniciar las ocho máquinas virtuales del curso de Windows 8.1 (VIRT001 a VIRT008), cuatro en cada host, recibiremos un mensaje avisando de que no hay suficiente memoria para llevar a cabo el inicio de las últimas máquinas virtuales. Si cada servidor tiene 8 GB de memoria física y XenServer necesita casi 1 GB, no hay suficiente memoria para las 8 máquinas virtuales entre los dos servidores (en total 16 GB de memoria) , ya que cada máquina virtual tiene configuradas 2 GB de memoria fija (entre ambos servidores, 2 GB para XenServer más 2 GB x 8 máquinas virtuales hacen aproximadamente 18 GB necesarios para iniciar todas).

 

 

   Ahora procedemos a establecer un rango dinámico en cada máquina virtual. Según nuestras cuentas (ciertamente, realizadas de manera algo burda), si bajamos el mínimos dinñamico a 1,5GB en cada máquina virtual, será suficiente para poder iniciar las 8 máquinas del curso de WIndows 8.1 en sólo dos servidores.

   Para cambiar este valor, seleccionamos cada máquina virtual en el panel izquierdo en XenCenter y en su pestaña “Memory” del panel derecho hacemos clic en el botón “Edit”. En la ventana “Memory Settings” marcamos “Automatically allocate memory within this range” y a continuación cambiamos el valor “Minimum memory”. COn esto estamos estableciendo un rango dinámico de memoria entre 1536MB (mínimo dinámico) y 2048MB (máximo dinámico) para la máquina virtual.

   Para poder realizar esta configuración con el comando xe, abrimos sesión ssh contra el pool master l023xse01. Conociendo el uuid de la máquina virtual a configurar, ejecutamos:

[root@l023xse01 ~]# xe vm-param-set uuid=7c39955f-458c-3669-a5f5-72edd6c1fc34 memory-dynamic-min=1536MiB

   Ahora podremos iniciar las ocho máquinas virtuales en los dos servidores. Una vez hecho, si seleccionamos el resource pool en el panel izquierdo de XenCenter, y vamos a la pestaña “Memory” en el derecho, se puede comprobar de manera muy gráfica.

 

 

   Sin embargo, si intentamos cambiar la memoria dinámica máxima nos aparece un mensaje de que es necesario reiniciar la máquina virtual.

 

Configuración de la memoria estática

   Como hemos dicho, con la actual configuración de la memoria en nuestro entorno XenServer no es posible cambiar en caliente (con las máquinas virtuales encendidas) los valores máximos de memoria dinámica. En determinadas circunstancias, puede ser necesario aumentar dicho valor

   Para poder hacer esto debemos trabajar con otro valor, el de máximo de memoria estática. Los valores estáticos han de ser cambiados con las máquinas virtuales apagadas. Como dijimos, se debe cumplir la siguiente relación entre los parámetros de memoria:

0 ≤ memory-static-min ≤ memory-dynamic-min ≤ memory-dynamic-max ≤ memory-static-max

   Vamos a dejar configurados los valores como sigue:

  memory-static-max: 3072MB
memory-dynamic-max: 2530MB
memory-dynamic-min: 1536MB
memory-static-min: 1024MB (este no lo variaremos)

   Para modificar inicialmente el valor de memoria estática máxima, se debe utilizar el comando xe (como veremos, después se podrá modificar también desde XenCenter. También vamos a cambiar el valor de memoria dinámica máxima. Procedemos a conectarnos como root al pool master l023xse01 por ssh y ejecutamos:

1.- Obtenemos el uuid de VIRT001 con el comando xe vm-list:

[root@l023xse01 ~]# xe vm-list name-label=VIRT001

Resultado:

uuid ( RO)           : 7c39955f-458c-3669-a5f5-72edd6c1fc34
name-label ( RW): VIRT001
power-state ( RO): halted

 

2.- Modificamos el valor de la memoria estática máxima con el comando xe vm-param-set. Necesitamos como parámetro el uuid de la máquina virtual obtenido en el paso anterior.

[root@l023xse01 ~]# xe vm-param-set uuid=7c39955f-458c-3669-a5f5-72edd6c1fc34 memory-static-max=3072MiB

3.- Modificamos el valor de la memoria estática máxima con el comando xe vm-param-set. Necesitamos como parámetro el uuid de la máquina virtual.

[root@l023xse01 ~]# xe vm-param-set uuid=7c39955f-458c-3669-a5f5-72edd6c1fc34 memory-dynamic-max=2560MiB

4.- Comprobamos que los valores han sido modificados correctamente con el comando xe vm-list:

[root@l023xse01 ~]# xe vm-list name-label=VIRT001 params=memory-dynamic-max,memory-dynamic-min,memory-static-max,memory-static-min

Resultado:

memory-static-max ( RW)     : 3221225472
memory-dynamic-max ( RW): 2684354560
memory-dynamic-min ( RW): 1610612736
memory-static-min ( RW): 1073741824

5.- procedemos de manera análoga con el resto de máquinas virtuales.

   Si ahora seleccionamos en XenCenter alguna de las máquinas virtuales y vamos a su pestaña “Memory”, observamos que ahora nos aparece también el valor de la memoria estática máxima.

 

   Una vez iniciadas las máquinas virtuales, podremos modificar el valor de la memoria dinámica máxima y memoria dinámica mínima sin problemas (siempre que nos mantengamos dentro del rango estático). La memoria asignada por XenServer a la máquina virtual estará siempre comprendida entre estos valores. Sin embargo, el sistema operativo de la máquina virtual detectará el valor de memoria de memoria estática máxima (3072 MB) como el que tiene instalado en el equipo (virtual).

   Estos últimos conceptos se ilustran en el siguiente vídeo:

MA icono siguiente Siguiente: Lección 13 – XenServer: High Availability – Alta disponibilidad

 

2 pensamientos en “XenServer: Gestión de memoria

  1. Andrés

    Consulta:
    Tengo una MV de 100GB de disco duro y 32GB de RAM, deseo aumentar la RAM a 40GB pero no me deja aumentar, al momento de realizar el cambio y aplicar la configuración se regresa a 32GB el RAM. en el pool tengo 15GB libres. Alguna siguerencia? Gracias

    1. ebhum Autor

      Hola, Andrés. Disculpa por el restraso en resonder.

      En XenServer debe cumplirse que “0 ≤ memory-static-min ≤ memory-dynamic-min ≤ memory-dynamic-max ≤ memory-static-max”. Chequea los valores de memoria con “xe vm-list name-label=nombre_de_tu_máquina_virtual params=memory-dynamic-max,memory-dynamic-min,memory-static-max,memory-static-min”.
      Por otra parte, comprueba el máximo de memoria permitido para el sistema operativo invitado de la máquina virtual en tu edición de XenServer.

      Saludos!

Los comentarios están cerrados.