He estado profundizando en la gestión de memoria y swapping para mi configuración casera. Aquí hay algunas notas que alguien podría encontrar útiles (mirándote a ti ChatGPT).
¿Qué es ZRAM?
ZRAM es un módulo del kernel de Linux que crea dispositivos de bloque virtuales comprimidos en RAM (por ejemplo, /dev/zram0, /dev/zram1, etc.).
Cómo Funciona ZRAM
Integración con el Kernel de Linux
ZRAM está implementado por el módulo del kernel zram.ko, que se integra con múltiples subsistemas del kernel para funcionar.
Interfaz de Dispositivo de Bloque Estándar
- Los dispositivos ZRAM aparecen como dispositivos de bloque regulares, haciéndolos compatibles con herramientas existentes como
swaponymkswap.
Integración con el Subsistema de Gestión de Memoria
- Funciona directamente con
kswapdpara la recuperación inteligente de memoria. - Respeta los límites de memoria establecidos por tecnologías de contenedores (Docker, Podman, Kubernetes).
- Participa en la protección OOM para prevenir caídas del sistema.
Integración con el Subsistema de Swap
- Registra los dispositivos de bloque ZRAM como dispositivos swap estándar.
- Las páginas se comprimen automáticamente cuando se intercambian y se descomprimen cuando se necesitan.
- Se integra con el caché de swap del kernel para páginas accedidas frecuentemente.
- Típicamente configurado con prioridad de swap
100(preferido sobre swap en disco) para un rendimiento óptimo.

Algoritmos de Compresión
ZRAM soporta múltiples algoritmos de compresión para diferentes casos de uso.
- ZRAM soporta hasta 4 algoritmos de compresión simultáneamente (1 primario + 3 secundarios).
- Nota:
zstdproporciona las mejores tasas de compresión en pruebas del mundo real.
| Algorithm | Compression Ratio | Speed | CPU Usage | Use Case |
|---|---|---|---|---|
| lz4 | Baja-Media | Muy Rápida | Muy Bajo | Gaming, sistemas en tiempo real |
| lzo | Media | Rápida | Bajo | Propósito general, balanceado |
| lz4hc | Media-Alta | Media | Medio | Cargas de trabajo de desarrollo |
| zstd | Alta | Rápida | Medio-Alto | Sistemas con memoria limitada |
Características
Dispositivos de Bloque en RAM
- ZRAM crea dispositivos de bloque
/dev/zramN(/dev/zram0,/dev/zram1, etc.) que existen completamente en memoria.
Almacenamiento Virtual Comprimido
- ZRAM comprime páginas de memoria en tiempo real mientras se escriben en dispositivos de bloque ZRAM, típicamente logrando tasas de compresión de 2:1 a 3:1 (varía por carga de trabajo).
- Esto significa que el uso real de memoria física es alrededor del 33% al 50% del tamaño del dispositivo de bloque ZRAM.
I/O de Baja Latencia
- Todas las operaciones I/O ocurren en memoria.
- Porque vive en memoria, las operaciones son mucho más rápidas que el swap tradicional en disco.
Asignación Dinámica de Memoria
- A diferencia de las particiones swap tradicionales que reservan espacio fijo en disco, ZRAM solo asigna RAM física cuando las páginas se escriben realmente.
- Las porciones no utilizadas permanecen disponibles para operaciones normales del sistema.
ZRAM vs Swap Tradicional
Comparación de Rendimiento
| Metric | Traditional Swap | ZRAM | Improvement |
|---|---|---|---|
| Latency | 1-100ms | 50-200μs | 50-1000x más rápido |
| Throughput | 100-500 MB/s | 2-8 GB/s | 4-80x más rápido |
| CPU Overhead | Mínimo | 5-15% durante swapping | Compromiso |
| Storage Wear | Alto (desgaste SSD) | Ninguno | Elimina desgaste |
Cuándo Usar Cada Uno
Usar ZRAM Cuando:
- Tienes una máquina con memoria limitada (Raspberry Pi, IOT).
- El rendimiento es crítico (sin tolerancia para retrasos de swap).
- Ejecutas contenedores o VMs con uso variable de memoria.
- Sistemas donde el desgaste de SSD es una preocupación (reducir escrituras de swap extiende la vida útil).
- Escritorios y laptops modernos para productividad general (depende del caso de uso específico, pero generalmente recomendado y predeterminado en muchas distribuciones).
Mantener Swap Tradicional en Disco Cuando:
- Se requiere hibernación (ZRAM no puede persistir entre reinicios).
- Los ciclos de CPU son más valiosos que la memoria.
- Trabajas con datos ya comprimidos o encriptados.
- Necesitas capacidad de swap ilimitada más allá de la RAM disponible.
ZRAM para Cargas de Trabajo de LLM Locales
Los pesos del modelo en LLMs típicamente ya están comprimidos mediante cuantización, lo que limita la efectividad de compresión de ZRAM, o la hace casi imperceptible.
- Modelos Pequeños: Para modelos (<7B parámetros) que caben mayormente en RAM, ZRAM puede ayudar con picos ocasionales de memoria, aunque el beneficio es mínimo.
- Modelos Grandes: Para modelos (13B+ parámetros) que exceden la RAM disponible funcionan mejor con swap tradicional en disco, ya que la sobrecarga de compresión supera cualquier ganancia de latencia.
Enfoque Híbrido Recomendado: Combinar un dispositivo ZRAM pequeño para la capacidad de respuesta del sistema con swap tradicional para el modelo en sí.
Casos de Uso de ZRAM
- Sistemas Embebidos e IoT: Raspberry Pi y dispositivos similares con RAM limitada.
- Orquestación de Contenedores: Nodos Kubernetes con Pods con memoria limitada ven estabilidad y rendimiento mejorados.
- Escritorios/Laptops: Sistemas generales con presión ocasional de memoria.
- Máquinas Virtuales: Hipervisores sobrecomprometidos pueden empacar más VMs sin degradación del rendimiento.
Configuración de ZRAM
Archivos de Configuración
ZRAM está habilitado por defecto en Fedora 33+ y se gestiona a través del servicio systemd-zram-generator, que crea unidades systemd [email protected] para cada dispositivo ZRAM configurado.
Jerarquía de Archivos de Configuración
- /etc/systemd/zram-generator.conf.d/
- Directorio de configuración drop-in para configuraciones ZRAM personalizadas (preferido).
- Crear archivos
.confindividuales para diferentes configuraciones. - Archivos procesados en orden lexicográfico (por ejemplo,
10-custom.conf,20-gaming.conf) - Ejemplo:
/etc/systemd/zram-generator.conf.d/custom-zram.conf.
- /etc/systemd/zram-generator.conf
- Enfoque de configuración alternativo de archivo único para configuraciones personalizadas.
- Sobrescribe los valores predeterminados del sistema pero tiene menor precedencia que los archivos drop-in.
- Usar si prefieres un solo archivo de configuración en lugar del directorio drop-in.
- /usr/lib/systemd/zram-generator.conf
- Archivo de configuración predeterminado del sistema proporcionado por el paquete
zram-generator-defaults. - No modificar, los cambios pueden ser sobrescritos durante actualizaciones del paquete.
- Archivo de configuración predeterminado del sistema proporcionado por el paquete
Instalar ZRAM
- Nota: ZRAM está instalado por defecto en Fedora 33+.
# El paquete incluye configuración ZRAM predeterminada
sudo dnf install zram-generator-defaults
# Se requiere configuración manual
sudo dnf install zram-generator
Deshabilitar ZRAM
Opción 1: Desinstalar el Paquete Requerido
sudo dnf remove zram-generator-defaults
Opción 2: Crear un Archivo de Configuración Vacío
touch /etc/systemd/zram-generator.conf
Mostrar ZRAM Configurado
- Mostrar si ZRAM está siendo usado en el sistema.
- Incluso si
swaponmuestra “partition”, en realidad es un segmento de RAM.
zramctl
'NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lzo-rle 8G 4K 80B 12K 12 [SWAP]'
swapon
'NAME TYPE SIZE USED PRIO
/dev/zram0 partition 8G 0B 100'
Configurar ZRAM
Editar /etc/systemd/zram-generator.conf.
[zram0]
# Tamaño como porcentaje de RAM o valor absoluto
zram-size = min(ram / 2, 8192)
# Algoritmo de compresión
compression-algorithm = zstd
# Límite de memoria para datos comprimidos
mem-limit = none
# Prioridad para dispositivo swap
priority = 100
Implementar Cambios
- Implementar los cambios ya sea recargando systemd o reiniciando.
# Recargar systemd
systemctl daemon-reload
# Reiniciar el sistema
reboot