Búsqueda de sitios web

Habilite Zram en Ubuntu para un mejor rendimiento con RAM limitada


Este es un tutorial paso a paso que muestra cómo habilitar el módulo zram Kernel y usarlo como dispositivo de intercambio para un mejor rendimiento del sistema en una PC/portátil Ubuntu 24.04 con RAM limitada.

Como sabrás, Ubuntu suele incluir un espacio de intercambio. Funciona como la “memoria virtual” de MS Windows, que utiliza el disco duro como memoria adicional cuando no hay suficiente RAM física para todas las tareas solicitadas.

Sin embargo, el intercambio en disco es lento, lo que ralentizará el rendimiento general del sistema. Entonces, Linux introdujo los módulos del kernel “zram” y “zswap” para mejorar el rendimiento de las computadoras con una pequeña cantidad de RAM.

En lugar de usar Swap en el disco, zram crea un dispositivo de bloque (no usa memoria inicialmente y crece o se reduce dinámicamente) en la RAM que puede usarse como espacio de intercambio. Comprime los datos que se van a intercambiar y luego los traslada al dispositivo de bloque. En este caso, utiliza menos memoria física para más datos, mientras mantiene el sistema funcionando más rápido.

He escrito sobre cómo habilitar zswap en Ubuntu para hacer un trabajo similar, proporcionando una memoria caché RAM comprimida para páginas de intercambio. Aquí te mostraré cómo usar zram, que está habilitado de forma predeterminada en Fedora y Pop!_OS.

NOTA 1: Si tiene mucha RAM que rara vez usa espacio de intercambio, o está limitado por la CPU, manténgase alejado de zram o zswap, porque consumen más CPU para comprimir/descomprimir.

NOTA 2: ¡zram evitará la hibernación para funcionar correctamente! Utilice zswap en su lugar si necesita suspender el disco.

Deshabilitar zswap (si está habilitado)

Zswap evitará que zram se utilice de forma eficaz. Si lo tiene habilitado en su máquina Ubuntu, primero debe deshabilitarlo para probar zram.

Para verificar si zswap está habilitado, simplemente abra la terminal (Ctrl+Alt+T) y ejecute el comando:

systool -v -m zswap

Ejecute sudo apt install sysfsutils si no se encuentra el comando. En el resultado, “enabled=“N”” significa que la función no está habilitada.

Si decía "habilitado="Y"", entonces puede ejecutar el siguiente comando para deshabilitar zswap en tiempo de ejecución (funciona hasta el reinicio):

echo 0 | sudo tee /sys/module/zswap/parameters/enabled

NOTA: Según el documento del Kernel, los datos en zswap NO se liberarán inmediatamente. Debe esperar hasta que se invaliden o vuelvan a la memoria con errores, o swapoff manualmente el intercambio y swapon (si es necesario) nuevamente.

Si desea deshabilitar zswap permanentemente, intente editar el cargador de arranque Grub y elimine los parámetros del kernel para zswap (si los hay).

sudo nano /etc/default/grub

Elimine zswap.enabled=1 de “GRUB_CMDLINE_LINUX_DEFAULT” y, finalmente, ejecute sudo update-grub para aplicar los cambios.

Opción 1: habilitar Zram en tiempo de ejecución

Para probar el módulo del kernel en tiempo de ejecución, hasta que se reinicie el sistema o lo desactive manualmente, simplemente siga los pasos a continuación para cargar manualmente el módulo y configurar el espacio de intercambio.

1. Primero, presione Ctrl+Alt+T en el teclado para abrir una ventana de terminal. Luego, ejecute el comando:

sudo modprobe zram

El comando carga el módulo zram y crea un dispositivo de bloque único en la RAM. Mientras tanto, todos los archivos de configuración se almacenan en el directorio /sys/block/zram0.

Consejos: Si lo desea, puede crear múltiples dispositivos de bloques zram en la RAM. Por ejemplo, ejecutar sudo modprobe zram num_devices=4 creará 4, mientras que los archivos de configuración se encuentran en /sys/block/zram{0, 1, 2, 3}.

2. Como puede ver en la última captura de pantalla, el dispositivo de bloque zram incluye muchos archivos de configuración en /sys/block/zram0. Incluyen:

  • disksize: el máximo de datos sin comprimir que puede almacenar.
  • mem_limit: la memoria física máxima que puede utilizar para almacenar datos comprimidos.
  • comp_algorithm: establece el algoritmo de compresión. Los valores admitidos incluyen lzo, z4, lz4hc, 842, zstd. Vea la comparación.
  • max_comp_streams: el número de posibles operaciones de compresión que se ejecutan al mismo tiempo. El valor predeterminado es el número del núcleo de su CPU.
  • También hay muchas otras opciones de configuración. Consulte Kernel Doc para obtener más información.

Para establecer el tamaño máximo de datos sin comprimir que puede almacenar, 4 GiB por ejemplo (reemplace el número en consecuencia), use el comando:

echo 4G | sudo tee /sys/block/zram0/disksize

Para establecer el tamaño máximo de memoria que puede usar para almacenar datos comprimidos, 2GiB por ejemplo (reemplace el número en consecuencia), use el comando:

echo 2G | sudo tee /sys/block/zram0/mem_limit

Y, para configurar el algoritmo de compresión, use el comando:

echo lzo | sudo tee /sys/block/zram0/comp_algorithm

De manera similar, puede usar el comando echo para configurar otras opciones para el dispositivo de bloque zram.

3. Después de habilitar y configurar el dispositivo de bloque zram, puede ejecutar el comando para configurar el dispositivo como área de intercambio:

sudo mkswap /dev/zram0

Finalmente, habilite el área de intercambio con mayor prioridad, mediante el comando:

sudo swapon --priority 100 /dev/zram0

4. Finalmente, puede ejecutar swapon para identificar los dispositivos de intercambio actuales (zram debe tener la máxima prioridad). Y ejecute el siguiente comando para verificar las estadísticas de zram.

zramctl

En la salida:

  • DISKSIZE: significa el tamaño máximo de datos sin comprimir que puede almacenar.
  • DATOS: significa el tamaño actual de los datos sin comprimir (1,1G en mi caso).
  • COMPR: los datos de 1,1 G se han comprimido a 209,1 M.
  • TOTAL: es el tamaño actual de la memoria física que utiliza zram (metadatos + datos comprimidos).

5. (Opcional) Para aprovechar todo el potencial de las ventajas de zram, puede configurar el intercambio del sistema mediante los 4 comandos siguientes:

echo 180 | sudo tee /proc/sys/vm/swappiness
echo 0 | sudo tee /proc/sys/vm/watermark_boost_factor
echo 125 | sudo tee /proc/sys/vm/watermark_scale_factor
echo 0 | sudo tee /proc/sys/vm/page-cluster

Son configuraciones de intercambio predeterminadas en Pop!_OS, pero NO probadas en mi caso.

(Opcional) Para deshabilitar zram en tiempo de ejecución, reinicie su computadora o ejecute los 2 comandos siguientes para deshabilitar el espacio de intercambio y descargar el módulo zram:

sudo swapoff /dev/zram0
sudo modprobe --remove zram

Opción 2: habilitar Zram al iniciar (hacerlo permanente)

Los pasos de la "Opción 1" NO persisten después del reinicio. Si zram funciona bien en su máquina, puede seguir los siguientes pasos para hacerlo permanente.

NOTA: En los pasos siguientes, usaré el editor de texto de línea de comando nano para editar archivos de configuración, que funciona en la mayoría de los escritorios. Para elegir, puede reemplazarlo con gnome-text-editor para 24.04 con GNOME predeterminado, gedit para 22.04 y versiones anteriores con GNOME predeterminado, mousepad para XFCE, xed para Linux Mint Cinnamon u otro editor de texto según su entorno de escritorio.

1. Primero, ejecute el comando para crear (y editar) un archivo de configuración para cargar el módulo zram en el arranque:

sudo nano /etc/modules-load.d/zram.conf

Cuando se abra el archivo, simplemente escriba zram en él. Luego, presione Ctrl+S para guardar y Ctrl+X para salir.

Consejos: Si desea crear varios dispositivos de bloques zram en la RAM, cree otro archivo mediante el siguiente comando:

sudo nano /etc/modprobe.d/zram.conf

Luego escribe options zram num_devices=1 (cambia el número como quieras).

2. A continuación, ejecute el comando para crear un archivo de reglas udev para configurar las opciones del dispositivo zram.

sudo nano /etc/udev/rules.d/99-zram.rules

Cuando se abra el archivo, agregue la línea a continuación (NOTA: la línea incluye tanto “==” como “="”):

ACTION=="add", KERNEL=="zram0", ATTR{comp_algorithm}="lto", ATTR{disksize}="4G", ATTR{mem_limit}="2G"

Aquí cambie el valor de "disksize", "mem_limit" y "comp_algorithm" según sus necesidades. Para múltiples dispositivos zram, agregue más líneas con diferentes nombres de dispositivo para KERNEL (zram1, zram2,…).

3. La wiki de Arch Linux indica usar la regla udev + /etc/fstab para crear y usar automáticamente el dispositivo zram como intercambio al inicio. Sin embargo, causa el problema "Error al activar el intercambio dev-zram0.swap" en mi caso en Ubuntu 24.04.

En su lugar, crear un servicio systemd funciona en mi caso para configurar y habilitar automáticamente el dispositivo de bloqueo zram como intercambio. Primero, ejecute el comando para crear un archivo de servicio:

sudo nano /etc/systemd/system/zram.service

Cuando se abra el archivo, agregue el contenido a continuación y guárdelo (Ctrl+S, luego Ctrl+X).

[Unit]
Description=Swap with zram
After=multi-user.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStartPre=/sbin/mkswap /dev/zram0
ExecStart=/sbin/swapon -p 100 /dev/zram0
ExecStop=/sbin/swapoff /dev/zram0

[Install]
WantedBy=multi-user.target

Después de guardar el archivo, ejecute el comando systemctl enable zram para habilitar el servicio.

(Opcional) Si desea utilizar la configuración de intercambio Pop!_OS para aprovechar todo el potencial de las ventajas de zram, ejecute el comando para crear un archivo de configuración:

sudo nano /etc/sysctl.d/99-vm-zram-parameters.conf

agregue las líneas a continuación y guarde.

vm.swappiness = 180
vm.watermark_boost_factor = 0
vm.watermark_scale_factor = 125
vm.page-cluster = 0

Cuando todo esté hecho, reinicie la computadora y ejecute el comando swapon y zramctl para verificar.

Para deshacer la “Opción 2”, primero ejecute systemctl enable zram primero para deshabilitar el servicio, luego elimine todos los archivos que creó, reemplazando nano con rm en los comandos anteriores.

Artículos relacionados