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 swapon y mkswap.

Integración con el Subsistema de Gestión de Memoria

  • Funciona directamente con kswapd para 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.

ZRAM-MM


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: zstd proporciona las mejores tasas de compresión en pruebas del mundo real.
AlgorithmCompression RatioSpeedCPU UsageUse Case
lz4Baja-MediaMuy RápidaMuy BajoGaming, sistemas en tiempo real
lzoMediaRápidaBajoPropósito general, balanceado
lz4hcMedia-AltaMediaMedioCargas de trabajo de desarrollo
zstdAltaRápidaMedio-AltoSistemas 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

MetricTraditional SwapZRAMImprovement
Latency1-100ms50-200μs50-1000x más rápido
Throughput100-500 MB/s2-8 GB/s4-80x más rápido
CPU OverheadMínimo5-15% durante swappingCompromiso
Storage WearAlto (desgaste SSD)NingunoElimina 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 .conf individuales 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.


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 swapon muestra “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