Swap en GNU/Linux: ¿Cuánto espacio le damos?
En este artículo hablaremos sobre el espacio swap en GNU/Linux, y cuánto espacio debe tener según el uso que vayamos a darle.
Sí, ya hemos hablado largo y tendido sobre el espacio swap de Linux en este blog, hablamos sobre detalles de hibernación, sobre swap en RAM, swapfiles, etc.
Vamos a resumir en esta oportunidad algunas recomendaciones sobre el tamaño que debemos dar a nuestra memoria SWAP, o espacio de intercambio, en Linux.
Antes que nada, cabe aclarar que muchos sysadmins tienen opiniones fundamentadas para diferentes tamaños, y muchas distros, al momento de realizar particionado o instalación desatendida, crean el espacio swap de acuerdo a cálculos propios.
El cálculo del espacio de intercambio no tiene una fórmula exacta, y muchas veces depende del uso que vayamos a darle al ordenador, del hardware que tenemos, de la distro que instalemos, y de las aplicaciones que vayamos a ejecutar en el mismo.
El cálculo clásico que muchos seguramente recordarán, es que la swap debe ser del doble de la RAM. Esto fue cierto en una época en la que las memorias RAM se medían en KiB o MiB, o unos pocos GiB.
Para una memoria RAM de 512 MiB una swap de 1 GiB era razonable. Hoy en día, con memorias que tienen decenas de GiB, el doble para intercambio resulta, generalmente, excesivo.
Qué es la swap?
Un par de conceptos fundamentales antes.
Cuando corremos aplicaciones en el sistema, consumen memoria RAM. Si las aplicaciones son pocas y consumen poca RAM, pueden ser almacenadas en esta memoria sin problemas. Recordemos que para que un programa pueda ejecutarse deben estar cargados en RAM sus páginas de memoria que contienen código binario.
En el caso de que las aplicaciones sean muchas, o de gran consumo de memoria, se necesitará mucha memoria RAM para su ejecución. Si la aplicación necesita más memoria que la que está disponible en el ordenador, el proceso va a detenerse.
Aquí es donde interviene el espacio de intercambio. Cuando la memoria RAM se agota, pero necesitamos seguir ejecutando aplicaciones, Linux almacena en un espacio, generalmente en el disco, partes de la RAM, para liberarla y permitir a los nuevos procesos ejecutarse.
Esto no significa que la RAM sea innecesaria, y podamos reemplazarla por swap para tener «más memoria», dado que la RAM tiene un tiempo de acceso mucho menor que la swap (si está en el disco), por lo que el uso excesivo del espacio de intercambio ralentiza el funcionamiento del sistema operativo.
¿Es necesario el espacio de intercambio?
Muchas veces si. Si nuestro sistema tiene poca memoria RAM, la mayoría de las aplicaciones requerirán del espacio de intercambio para ejecutarse. Con más razón aún si las aplicaciones que ejecutamos tiene altos requerimientos de memoria.
Por otro lado, un factor determinante en el espacio requerido es si vamos a hibernar o no el sistema en el futuro.Ya he comentado en detalle este aspecto en Swap, swapfile e hibernación en GNU/Linux, por lo que recomiendo pasar y leer esa entrada.
Ahora surge la pregunta: Si tenemos mucha memoria RAM, ¿es necesario el espacio de intercambio?
Si el tamaño de nuestra RAM es grande, 32G, 64G, probablemente nunca utilicemos el espacio de intercambio con ninguna aplicación, pero puede que en algún momento algún proceso falle y comience a consumir desmesuradamente la memoria. Aquí podría ser necesaria la swap.
Además, si tenemos esos niveles de RAM, seguramente el disco tenga un almacenamiento de varios TiB, por lo que utilizar una pequeña porción para swap no sería mala idea.
¿Puede un sistema ejecutarse normalmente si espacio de intercambio?
La respuesta es sí, mientras el espacio de RAM sea grande, si no podemos tener problemas de funcionamiento en el sistema operativo.
¿Cuánto espacio de intercambio debemos reservar?
Como vimos, depende principalmente del tamaño de la memoria RAM y del uso que vayamos a darle al sistema operativo.
En general, tomando recomendaciones como las de RedHat o de Ubuntu, suelo recomendar:
- Si la RAM es de menos de 2 GiB, el valor de swap recomendado es del doble de la RAM, y 3 veces la RAM para hibernar el sistema.
- Si la RAM es de de entre 2 y 8 GiB, el valor de swap recomendado es del mismo tamaño de la RAM, o del doble de la RAM para poder hibernar el sistema.
- Si la RAM es de entre 8 y 64 GiB, la swap recomendada es de, mínimo, 4 GiB, y de 1.5 veces el tamaño de la RAM para poder hibernar el sistema.
- Si la RAM es de más de 64 GiB, una swap de al menos 4 GiB será suficiente, y no es recomendable hibernar el sistema en este caso.
Lo resumo en la siguiente tabla para tenerlo a mano:
Tamaño de la RAM | Swap recomendada | Swap recomendada para hibernar |
< 2GiB | 2 x RAM | 2 x RAM (mínimo) |
2 GiB – 8 GiB | = RAM | 2 x RAM |
8 GiB – 64 GiB | Mínimo 4 GiB | 1.5 x RAM |
> 64 GiB | 4 GiB | No es recomendado hibernar |
Swap no persistente
Además del espacio swap persistente en disco, o en SSD para ganar rendimiento, también podemos cargar Swap comprimida dentro de la misma memoria RAM del sistema.
¿Qué ganamos con esto?
Que en lugar de guardar parte del contenido de la RAM en el disco para liberar memoria, comprimimos dicho contenido y lo almacenamos en otra porción de la misma RAM.
Esto permite evitar el uso de disco, ya que las tareas de compresión suelen ser más rápidas que el tiempo que demora el sistema en almacenar un contenido en disco.
A esto se lo denomina ZRAM-Swap, combina sistemas de archivos virtuales y comprimidos en RAM (zram) con la swap.
Además, podemos combinar varios tipos de swap dentro del mismo sistema, con diferentes prioridades, de modo de, por ejemplo, priorizar el uso de dispositivos zram, y si aún son insuficientes, almacenar el contenido restante en el disco, en una partición swap, o un swapfile.
Les comparto la configuración de swap en mi sistema. Tengo 12GiB de memoria RAM, con la siguiente configuración de swap:
Aquí se ve que tengo 4 dispositivos zram de 991.9 MiB cada uno, con prioridad 200, una partición swap de 2.8 GiB con prioridad 300, y sí, he estado jugando con la swap y tengo un swapfile pequeño, de 1GiB, con prioridad de 250.
Y hemos llegado al final!
Espero que este artículo les sirva para definir el tamaño de su swap acorde a sus necesidades y especificaciones de hardware.
Cualquier duda, como siempre, pueden sumarse a la comunidad JuncoTIC en nuestro grupo de Telegram.
Hasta la próxima!