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 incluyenlzo
,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.