Asignar espacio de intercambio con KVM

Asignar espacio de intercambio con KVM

Considere el siguiente escenario: un host con 2 GiB ejecuta algunos invitados usando KVM. Cada invitado no suele necesitar mucha memoria; reciben 256 MiB cada uno y ejecutan servicios que en su mayoría están de brazos cruzados. Sin embargo, en ocasiones los invitados necesitan más memoria. En este momento, cada invitado tiene poca RAM pero su propio espacio de intercambio. Noté que se usa una pequeña porción de swap. Nunca tuve problemas con esa configuración, pero solo por curiosidad:

¿Cuál es la estrategia óptima de asignación de swaps?

  1. Asigne a cada invitado su propio espacio de intercambio desde sus respectivos discos y asigne a los invitados solo una pequeña cantidad de memoria del anfitrión. (Esto es lo que estoy haciendo ahora).
  2. Asigne al anfitrión una mayor cantidad de espacio de intercambio y ninguno a los invitados, y asigne más memoria a los invitados.

¿El aumento de la memoria ayudaría a mejorar el rendimiento de la memoria?

Respuesta1

"A veces los invitados necesitan más memoria" suena como una buena aplicación decomprometer demasiado la memoria. La idea es asignar a cada invitado una gran cantidad de memoria (más de la que realmente puedes darle) porque generalmente no la usan. Luego, hace los cálculos para asegurarse de tener suficiente espacio de intercambio para que los invitados puedan intercambiarlo en el disco en el peor de los casos, cuando todos realmentehacerUsa toda esa memoria.

El espacio de intercambio va en elanfitriónmáquina, y necesita obedecer

Espacio de intercambio de host = suma de toda la memoria del huésped + espacio de intercambio de host recomendado

para que sea seguro.

Entonces, si tienes 10 invitados y 2 GiB de RAM, puedes experimentar con algo como

  • 512 MiB de RAM por huésped (512 * 10 = 5120 MiB en total)
  • Intercambio de 2 GiB en el host

Lo que significa que su espacio de intercambio de host debe ser de al menos 512 * 10 + 2048 = 7168 MiB para manejar esto de manera segura, suponiendo que pueda dedicar 2 GiB de intercambio al host (para esa poca memoria de host, se recomienda esto).

Pruebe siempre este tipo de configuraciones primero para asegurarse de que su máquina pueda manejarlas. Compararlos es aún mejor y te permitirá experimentar con diferentes equipamientos y elegir el que funcione mejor.

Respuesta2

@ndt tiene un buen procedimiento. Mi escenario es diferente, entonces adopto un método diferente.

Mi servidor tiene muchos invitados, todos ellos ejecutan una sola aplicación, generalmente servidor web/correo/archivos. Los datos que contiene son muy importantes, por lo que se realizan copias de seguridad y instantáneas con mucha frecuencia. Por lo tanto, cuanto más pequeña y simple sea la imagen del disco, mejor. Así que en realidad no creo una partición de intercambio, sino un archivo de intercambio. Como no tengo invitados con altas necesidades de procesamiento o incluso de memoria, tienen un almacenamiento en disco pequeño y poca memoria. El archivo de intercambio va dentro de rootfs.

Esta configuración ahorra mucho espacio y simplifica el mantenimiento. Como dije, es diferente a otras situaciones.

Respuesta3

La respuesta aceptada es incorrecta:

También debe habilitar el espacio de intercambio en la máquina virtual, para que sepa que la RAM se está intercambiando y evite usarla para caché de disco y búferes de E/S.

Si solo habilita el intercambio en el host, la VM creerá que tiene RAM real disponible y la usará, mientras que se intercambiará en el host creando cuellos de botella y congelaciones innecesarios. Este es el mayor error que podrías cometer.

También debe utilizar una unidad virtual diferente como disco de intercambio, ya que no desea realizar una instantánea o una copia de seguridad junto con sus otras unidades de datos.

Dado que el espacio de intercambio puede ser volátil, también puede usar cache=unsafe o usar zram/zswap para un mejor rendimiento.

Recuerde también que el intercambio es bueno, ya que libera RAM inactiva que luego puede reutilizarse para caché de disco y buffers de IO.

información relacionada