search
Linux 4 min read

zram: mitad de RAM, algoritmo zstd y por qué tu distro lo tiene mal configurado

Pablo IB

TL;DR: Pon zram-size = ram / 2 en /etc/systemd/zram-generator.conf, usa zstd, y reinicia. Tu distro probablemente tiene zram al 100% de RAM, que es demasiado agresivo.


¿Qué es zram? Es un módulo del kernel que crea swap comprimida dentro de tu RAM. Piensa en ello como una nevera que comprime la basura para que quepa más. No necesitas disco — comprime y descomprime en memoria. Con un ratio de ~3.5:1, 16 GB de zram solo consumen ~4.5 GB de RAM física.

Si tu distribución tiene zram habilitado por defecto, probablemente esté configurado al 100% de tu RAM. Eso suena bien en teoría — más swap, más memoria — pero en la práctica es una trampa.


El problema: zram al 100% de RAM

Mi distribución lo tenía configurado así:

# /usr/lib/systemd/zram-generator.conf (por defecto)
[zram0]
zram-size = ram          # 100% de la RAM como swap virtual
compression-algorithm = zstd
swap-priority = 100
fs-type = swap
# zram-resident-limit = ❌ sin límite

Con 32 GB de RAM, esto crea 30.7 GB de swap virtual. El kernel “cree” que tiene 63 GB de memoria disponible (32 RAM + 31 swap).

Pero zram comprime en la misma RAM física. No hay disco real detrás.

¿Qué pasa cuando un proceso se descontrola?

  1. El proceso crece (mi IDE llegó a consumir 9.8 GB)
  2. El kernel no entra en pánico porque “aún tiene 63 GB”
  3. zram se satura (30.7 GB usados, toda la RAM física agotada)
  4. El OOM killer entra sin tiempo para una muerte elegante
  5. Si el proceso está en el cgroup de gnome-shell → GNOME muere → sesión reinicia

Esto me pasó 5 veces en una noche.


La solución: zram al 50% de RAM

# /etc/systemd/zram-generator.conf
[zram0]
zram-size = ram / 2
zram-resident-limit = ram / 2
compression-algorithm = zstd
swap-priority = 100
fs-type = swap

Qué cambió:

ParámetroAntesDespuésPor qué
zram-sizeram (30.7 GB)ram / 2 (16 GB)ArchWiki: “half of total system memory”
zram-resident-limitsin límiteram / 2 (16 GB)zram nunca usa más de 16 GB de RAM física

Con 16 GB de zram:

  • El kernel “ve” ~48 GB (32 RAM + 16 zram) en vez de ~63 GB
  • zram necesita ~8 GB de RAM física para comprimir (ratio 2:1, pero en la práctica 3.5:1)
  • Siempre quedan ~24 GB de RAM libres para procesos

¿Qué algoritmo de compresión elegir?

zram soporta varios algoritmos. Benchmarks reales sobre 1.1 GB de datos:

AlgoritmoTiempoComprimidoRatio
lzo4.6s387.8 MB2.7:1
lz44.5s403.4 MB2.6:1
lz4hc14.6s362.8 MB2.9:1
zstd7.8s285.3 MB4.0:1

(Fuente: linuxreviews.org/Zram)

zstd ofrece el mejor ratio de compresión con un tiempo razonable. En mi Intel Core Ultra 9, el test de stress-ng mostró un ratio real de 3.5:1 — 15 GB de datos comprimidos en solo 4.5 GB de RAM física.

Puedes ver qué algoritmos soporta tu sistema:

cat /sys/block/zram0/comp_algorithm
# [lzo] lzo-rle lz4 lz4hc zstd
# El que está entre corchetes es el actual

Mi recomendación: zstd. Salvo que tengas hardware muy antiguo (pre-2015), no hay razón para usar otro.


Qué dicen las referencias

FuenteRecomendación
zram-generator (default)min(ram / 2, 4096) — para 32 GB crea solo 4 GB
ArchWiki“half of total system memory”
Pop!_OSram / 2
linuxmind.dev“25–50% of RAM”
Manjaroram * 2 (extremo agresivo, asume ratio alto)
CachyOSram (extremo agresivo)

La mayoría coincide: 50% de RAM. Solo Manjaro y CachyOS son más agresivos.


Cómo aplicarlo

1. Crear el override

sudo tee /etc/systemd/zram-generator.conf << 'EOF'
[zram0]
zram-size = ram / 2
zram-resident-limit = ram / 2
compression-algorithm = zstd
swap-priority = 100
fs-type = swap
EOF

El archivo en /etc/ prevalece sobre /usr/lib/.

2. Reboot

Este cambio requiere reiniciar. zram se configura en el arranque.

3. Verificar

zramctl
# NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
# /dev/zram0 zstd         16G    ...                    [SWAP]

Si muestra ~16G (la mitad de tu RAM), está correcto.


El siguiente paso

Configurar zram es solo la mitad. Sin ajustar los parámetros sysctl (especialmente swappiness), zram no se usará correctamente.

Swappiness 180: el valor que hace funcionar zram (y la regla udev que te lo estaba impidiendo)


Artículos de esta serie

  1. Cómo duplicar la RAM de tu Linux con zram y swap comprimida (sin comprar nada)
  2. zram: mitad de RAM, algoritmo zstd y por qué tu distro lo tiene mal configurado ← estás aquí
  3. Swappiness 180: el valor que hace funcionar zram (y la regla udev que te lo estaba impidiendo)
  4. RAM → zram → swap en disco: cómo montar un sistema de swap por capas y probarlo con stress-ng
  5. systemd-oomd y Docker limits: lo que nadie te cuenta para proteger tu sistema