zram vs zswap: cómo optimizar la memoria RAM en Linux
Entiende las diferencias entre zram vs zswap en la gestión de memoria de Linux, compara su rendimiento y descubre cuál configurar en tu máquina en 2026.
Al analizar las estrategias de gestión de memoria en el Linux moderno, la comparativa zram vs zswap es una de las discusiones más relevantes para quienes buscan extraer el máximo rendimiento de una computadora de escritorio o servidor. En escenarios de alta carga, cuando múltiples instancias de compilación, contenedores y navegadores devoran la RAM física, el subsistema de memoria del kernel debe decidir qué hacer con las páginas frías. La respuesta tradicional —escribir directamente en el swap en SSD o NVMe— introduce latencias indeseadas y desgasta la vida útil del almacenamiento. Las dos soluciones de compresión en memoria resuelven este problema mediante caminos completamente diferentes.
Ambas tecnologías utilizan ciclos de CPU para comprimir páginas anónimas de memoria antes de que causen presión en el sistema, pero sus mecanismos internos, integraciones con el subsistema de memoria virtual (VMM) y comportamientos ante fallas críticas no podrían ser más distintos. Entender esta arquitectura es fundamental para no caer en la trampa de configurar el recurso equivocado para tu carga de trabajo.
¿Por qué la compresión de RAM se volvió indispensable en Linux?

A medida que el consumo de memoria de las aplicaciones crece, depender exclusivamente del swap en disco crea cuellos de botella severos de entrada y salida (I/O). Incluso en unidades NVMe modernas con altas tasas de transferencia, la latencia de acceso a los bloques de almacenamiento es órdenes de magnitud superior a los tiempos de acceso del bus de RAM. Cuando el kernel de Linux necesita realizar el pageout de memoria anónima al disco, el proceso solicitante pasa a un estado de espera, lo que genera congelamientos visibles en la interfaz o aumentos de latencia en las API.
La compresión de páginas aprovecha el exceso de potencia de procesamiento de las CPU modernas con muchos núcleos. Algoritmos como zstd (Zstandard) ofrecen excelentes tasas de compresión con una velocidad de descompresión extremadamente alta. Al comprimir páginas anónimas inactivas y mantenerlas en la propia memoria RAM, el sistema logra albergar sustancialmente más datos antes de necesitar tocar el disco duro o el SSD.
Distribuciones modernas, como Ubuntu 26.04.1 y Debian 13.7, adoptan posturas variadas respecto a la configuración por defecto de estos subsistemas. Mientras que el ecosistema de escritorio migró con fuerza hacia el uso de zram para simplificar la instalación sin necesidad de particiones dedicadas, los entornos de servidor y los sistemas de virtualización exigen un análisis más riguroso de la arquitectura de swap.
¿Qué es zram y cómo transforma la memoria RAM en swap?
zram es un módulo del kernel de Linux que crea un dispositivo de bloque virtual directamente en la RAM. Para el subsistema de almacenamiento y para las utilidades del sistema (swapon, mkswap), este dispositivo se comporta exactamente como un disco físico o una partición de swap tradicional. Las páginas enviadas a él son comprimidas en tiempo real por el kernel y almacenadas en el espacio asignado a zram.
La gran característica de zram es ser una solución autosuficiente (standalone). No requiere un dispositivo de swap físico en disco por detrás. Cuando asignas 8 GB de swap en zram, el módulo reserva una fracción dinámica de la memoria RAM física para almacenar esos datos comprimidos. Si una página de 4 KB se comprime a 1 KB, el sistema ahorró 3 KB de espacio real.
En distribuciones modernas administradas con systemd, la creación e inicialización de dispositivos zram se automatiza mediante systemd-zram-generator. La configuración se realiza a través de archivos declarativos simples ubicados en el directorio /etc/systemd/.
# /etc/systemd/zram-generator.conf
[zram0]
zram-size = ram / 2
compression-algorithm = zstd
swap-priority = 100
En este ejemplo, el generador crea el dispositivo /dev/zram0 en el momento del arranque con un tamaño equivalente a la mitad de la RAM física, utilizando el algoritmo zstd y una prioridad de 100 en el subsistema de swap. La facilidad de despliegue hace que zram sea imbatible en sistemas sin partición de swap en disco.
¿Cuáles son los riesgos y la trampa de inversión LRU en zram?
A pesar de su simplicidad, zram posee una limitación arquitectónica severa: es un dispositivo de bloque ciego. El kernel trata a zram como un destino final de swap. Cuando zram alcanza su capacidad máxima asignada, no cuenta con un mecanismo nativo para desalojar (evict) automáticamente las páginas más antiguas y migrarlas a un swap secundario en SSD.
Si intentas combinar zram (con prioridad alta) con un swap en disco físico (con prioridad baja), enfrentarás el fenómeno conocido como inversión LRU (Least Recently Used). Al principio, zram se llenará con páginas frías (poco accedidas). Cuando zram se llene por completo, el kernel comenzará a enviar las nuevas páginas al swap en disco. El resultado es nefasto: las páginas más antiguas y frías permanecen ocupando la valiosa RAM comprimida en zram, mientras que las páginas de uso reciente terminan grabadas en el lento SSD. Si la memoria se agota definitivamente, se activará el mecanismo Out-Of-Memory (OOM Killer).
¿Qué es zswap y cómo actúa como caché del swap físico?
A diferencia de zram, zswap no es un dispositivo de bloque virtual. zswap es una capa de caché comprimida que se sitúa directamente frente al subsistema de swap físico del kernel. Intercepta las páginas de memoria anónima que el kernel decidió escribir en el swap e intenta comprimirlas antes de que lleguen al disco.
Cuando el kernel de Linux decide enviar una página al swap, zswap intercepta esa llamada. Si la página es compresible, se almacena en un pool de memoria dinámica (zpool) mantenido en la RAM. Si zswap se llena o si la página no se comprime fácilmente, zswap realiza el writeback: descomprime o simplemente transfiere la página directamente al dispositivo de swap físico configurado en el sistema (ya sea una partición NVMe o un archivo swapfile).
Esta integración profunda con la gestión de memoria del kernel garantiza que zswap respete el ciclo de vida LRU de extremo a extremo. Las páginas verdaderamente inactivas son eventualmente grabadas en el disco por el mecanismo de eviction, liberando espacio en la RAM comprimida para los datos de uso más frecuente.
zswap se configura mediante parámetros del kernel durante el arranque o en tiempo de ejecución, inspeccionando y modificando los archivos en /sys/module/zswap/parameters/.
# Verificar si zswap está activo en el kernel
cat /sys/module/zswap/parameters/enabled
# Cambiar el compresor por defecto a zstd en tiempo de ejecución
echo zstd | sudo tee /sys/module/zswap/parameters/compressor
# Definir el límite máximo de RAM que zswap puede ocupar (ej: 20%)
echo 20 | sudo tee /sys/module/zswap/parameters/max_pool_percent
Esta dinámica convierte a zswap en la opción preferida para servidores y estaciones de trabajo que disponen de particiones de swap dedicadas y unidades SSD de altísimo rendimiento.
¿Cómo comparar zram vs zswap en la arquitectura del kernel Linux?
Para tomar una decisión técnica fundamentada, es necesario analizar cómo se comporta cada tecnología según diferentes criterios de infraestructura y gestión de recursos. La siguiente tabla resume las principales divergencias estructurales entre zram y zswap.
| Criterio de comparación | zram | zswap |
|---|---|---|
| Naturaleza del recurso | Dispositivo de bloque virtual en RAM | Caché comprimida delante del swap físico |
| Requisito de swap en disco | No requiere swap físico | Requiere obligatoriamente un swap físico |
| Mecanismo de desalojo (eviction) | Sin reenvío automático a disco | Transfiere páginas frías al disco (writeback) |
| Integración con cgroups v2 | Limitada (memoria aislada en el bloque) | Nativa y transparente en el subsistema VMM |
| Riesgo de inversión LRU | Alto (si se combina con swap en disco) | Inexistente (gestionado por el kernel) |
| Complejidad de configuración | Baja (basta con systemd-zram-generator) |
Media (requiere swap previo y ajuste en el kernel) |
El análisis técnico revela que zram aísla la administración dentro de un dispositivo de bloque montado por el usuario o el sistema. Por su parte, zswap actúa como una extensión directa de la capa de paginación anónima. En entornos de contenedores y servidores con un control estricto mediante cgroups v2, zswap destaca porque permite que la contabilidad de memoria por contenedor siga con precisión el uso real, mientras que zram asigna memoria de bloque que se contabiliza de forma genérica en el kernel.
Además, la asignación de CPU varía según la tasa de rotación (churn) de la memoria. zram tiende a presentar un menor overhead de escritura inicial al no contar con la lógica de decisión de writeback, mientras que zswap protege al sistema en escenarios donde la RAM se agota por completo a causa de páginas frías inamovibles.
¿Qué tecnología elegir para desktop, servidores y contenedores?

La elección de la tecnología ideal depende directamente de la topología del hardware y del perfil de las cargas de trabajo que se ejecutan en el equipo.
Caso 1: Estaciones de trabajo y laptops de uso general
Para computadoras de escritorio destinadas al desarrollo, laptops con SSD reducidos o dispositivos embebidos (como placas monoplaca y mini PC), zram es casi siempre la mejor opción. En máquinas sin partición de swap dedicada, zram ofrece una red de seguridad instantánea contra bloqueos por agotamiento de memoria sin ocupar un espacio valioso en el almacenamiento secundario.
La recomendación práctica para este escenario es activar systemd-zram-generator configurado con el 50% de la memoria RAM física y el algoritmo zstd, desactivando los archivos de swap en disco para evitar conflictos de LRU.
Caso 2: Servidores de producción y workstations de alto rendimiento
En servidores bare-metal, nodos de virtualización y estaciones de trabajo pesadas con unidades NVMe rápidas, zswap es el ganador indiscutible. Como estos entornos suelen contar de antemano con archivos o particiones de swap dedicadas para garantizar la estabilidad del sistema bajo estrés continuo, colocar zswap delante de ese almacenamiento reduce drásticamente la tasa de escritura en el SSD sin perder la capacidad de desbordar datos durante picos extremos de consumo.
zswap garantiza que la máquina sobreviva a picos imprevistos de tráfico o fugas temporales de memoria sin congelar el bus de I/O ni provocar la eliminación abrupta de contenedores.
Ajustes de kernel importantes: El valor de Swappiness
Independientemente de si eliges zram o zswap, el parámetro vm.swappiness en el kernel de Linux debe ajustarse para reflejar la presencia de la compresión ultra rápida. El valor por defecto histórico (vm.swappiness = 60) fue diseñado para discos mecánicos lentos.
Al utilizar compresión de RAM, es recomendable elevar el valor de swappiness para incentivar al kernel a liberar páginas anónimas inactivas anticipadamente, dejando RAM no comprimida disponible para la caché de archivos (page cache).
# Aplicar un swappiness agresivo adecuado para RAM comprimida
sudo sysctl vm.swappiness=100
# Hacer la configuración permanente en /etc/sysctl.d/99-memory-tuning.conf
echo
Al definir la estrategia idónea entre zram vs zswap, esta optimización del parámetro swappiness asegura el equilibrio perfecto entre la eficiencia de la CPU y el rendimiento del almacenamiento en tu sistema Linux.