Cómo y por qué utilizar ZRAM como "espacio de intercambio" o SWAP
Advertencia
Este artículo contiene algunas erratas. Puedes ver los detalles al final del texto.
Ya he nombrado ZRAM en artículos anteriores. Hoy toca abordarlo en profundidad. Puedes empezar leyendo su página en la wikipedia. Pongo el enlace a la versión en inglés porque la versión en español es vergonzosa.
ZRAM es un servicio disponible en Linux (otros sistemas operativos tienen servicios similares) que permite utilizar parte de la memoria RAM como un disco duro virtual, más exactamente como un "dispositivo de bloques".
Nota
En los viejos tiempos esto permitía, por ejemplo, usar esa memoria RAM que no estás utilizando como un disco ram en el que copiar los datos desde uno o más discos flexibles y así trabajar con más rapidez y comodidad. En mis tiempos de Atari ST con mis cuatro megabytes de RAM, podía dedicar dos megabytes a meter el contenido de dos o tres discos de 3.5 pulgadas en memoria y trabajar a toda velocidad sin tener que esperar al disco ni, más importante, tener que sacar y meter uno u otro disco flexible todo el tiempo. Podías tener en el disco ram el editor, el compilador, el enlazador y el programa binario final, mientras el código fuente que estabas escribiendo residía en un disco flexible.
La tentación de grabar el código fuente también en el disco ram era fuerte... Tengo algunas anécdotas que contar al respecto, sobre lo buena que era la fuente de alimentación de mi Atari ST ante microcortes de energía eléctrica...
Una peculiaridad interesante de ZRAM es que le indicamos un tamaño determinado, pero los datos se almacenan de forma comprimida y, por tanto, su consumo de RAM es dinámico. Esto es interesante, porque un ZRAM sin usar apenas ocupa memoria por mucho tamaño que le hayamos dado. Por otro lado, si los datos se comprimen bien, el ZRAM ocupa menos memoria que los datos originales.
Esta característica de compresión de datos permite un uso interesante de ZRAM: utilizarlo como espacio de intercambio o swap.
La idea es la siguiente: supongamos que tenemos 1GB de memoria RAM y usamos un ZRAM de 1GB (por ejemplo) como espacio de intercambio. Mientras el sistema operativo no hace swap, el ZRAM no ocupa espacio; tenemos toda la RAM para el usuario. A medida que vamos gastado RAM y la agotamos, el sistema operativo empieza a enviar las páginas de memoria que hace más tiempo que no se usan al espacio de intercambio proporcionado por la ZRAM. Esto libera memoria, pero, simultáneamente, la ZRAM crece y ocupa memoria. A priori no parece que ganemos nada, salvo por el hecho de que los datos se comprimen, así que se libera más RAM de la que consume el ZRAM. Por ejemplo, si la compresión es 2:1 y se envían 400 megabytes al ZRAM, esos datos ocuparán 200 megabytes, y se liberarán los otros 200 megabytes de RAM, obteniendo una ganancia neta de 200 megabytes.
Es decir, si tenemos 1 GB de RAM, configuramos un ZRAM de 1 GB y la compresión media es 2:1, podemos trabajar casi como si realmente tuviésemos 2 GB de RAM.
Que esto funcione bien o mal depende solo de lo único que importa cuando hablamos de espacio de intercambio: todo irá bien mientras la cantidad de memoria RAM disponible sea lo bastante grande como para abarcar todo nuestro Working Set.