Mejorando el rendimiento de WSL2 con zswap

Windows Subsystem for Linux 2 (WSL2) ha revolucionado la manera en que los desarrolladores y profesionales de TI interactúan con entornos Linux en Windows, ofreciendo una integración y un rendimiento excepcionales. Sin embargo, las tareas que consumen muchos recursos pueden, en ocasiones, superar los límites de memoria, lo que ralentiza el rendimiento del sistema.

¿Qué es zswap?

zswap es una función del kernel de Linux diseñada para mejorar el rendimiento del intercambio de memoria mediante la compresión de páginas antes de escribirlas en el espacio de intercambio (swap). En esencia, zswap minimiza las operaciones de entrada/salida (I/O) en el disco, lo que se traduce en una mayor capacidad de respuesta del sistema, especialmente en entornos con recursos de memoria limitados.

¿Por qué usar zswap en lugar de zram?

Aunque zram también comprime páginas de memoria, crea un disco RAM comprimido que ocupa directamente espacio en la RAM. En contraste, zswap complementa el archivo de intercambio existente en WSL2, comprimiendo páginas en memoria antes de escribirlas en el disco, reduciendo así las escrituras sin reservar grandes cantidades de RAM. Esto hace que zswap sea particularmente adecuado para WSL2, especialmente porque ya utiliza un archivo de intercambio basado en disco.

Ventajas de usar zswap con WSL2

  1. Reducción del uso de swap: Al comprimir las páginas, zswap reduce drásticamente la cantidad de datos que deben escribirse y leerse del disco, acelerando significativamente las operaciones de intercambio.

  2. Mayor rendimiento: Con menos operaciones en disco, los entornos de WSL2 se vuelven notablemente más rápidos, especialmente durante cargas de trabajo intensas y multitarea.

  3. Mayor vida útil del SSD: Reducir las escrituras en los SSDs ayuda a prolongar su durabilidad, ofreciendo beneficios a largo plazo para los usuarios.

  4. Mejor eficiencia en el uso de recursos: zswap gestiona eficientemente los recursos de memoria, lo que lo hace ideal para ejecutar múltiples aplicaciones simultáneamente sin degradación del rendimiento.

  5. Ideal para entornos virtualizados: WSL2 asigna dinámicamente una porción de la RAM del host, generalmente hasta la mitad de la memoria disponible en Windows. Al comprimir partes no utilizadas de programas y servicios que no están bien adaptados a WSL, zswap optimiza significativamente el uso de la memoria, permitiendo hacer más con menos recursos.

Configuración de zswap en WSL2

La versión actual de WSL2 (2.4.12 en el momento de escribir este artículo) no admite zswap ni módulos del kernel cargables de manera predeterminada. Por lo tanto, es necesario recompilar el kernel con zswap habilitado. Puedes encontrar instrucciones detalladas para la compilación aquí.

Alternativamente, hay un script automatizado que simplifica este proceso y habilita zswap automáticamente en todas tus distribuciones de WSL2:

curl https://raw.githubusercontent.com/dhanar10/wsl2-kernel-zswap/main/build.sh | bash

Después de ejecutar este script, obtendrás un kernel completamente compilado con zswap incluido y activado de forma predeterminada en todas las distribuciones de WSL2 que utilices.

Activación del nuevo kernel en WSL2

Después de recompilar el kernel o ejecutar el script automatizado, necesitarás activarlo.

  1. Usando .wslconfig:

Crea o edita el archivo .wslconfig en tu directorio de usuario de Windows (por ejemplo, C:\Users\TuUsuario\.wslconfig) y añade:

[wsl2]
kernel=C:\ruta\a\tu\kernel\compilado\bzImage

Luego, reinicia WSL2:

wsl --shutdown
  1. Usando la aplicación de configuración de WSL (si está disponible):

Si tu versión de WSL incluye una aplicación de configuración gráfica, puedes especificar la ruta del nuevo kernel directamente en la configuración.

Verificación de que zswap está activado

cat /sys/module/zswap/parameters/enabled

Deberías ver un resultado Y, lo que confirma que está activado.

Configuración recomendada de swappiness: 133

Para mejorar aún más el rendimiento, es beneficioso establecer un valor alto de swappiness. El valor recomendado al usar zswap en WSL2 es 133. Este valor indica al sistema que comprima activamente las páginas de memoria, priorizando la caché del sistema de archivos y optimizando el rendimiento incluso en situaciones de poca memoria.

Para establecer este valor de forma persistente en los reinicios, usa los siguientes comandos:

sudo bash -c 'echo "vm.swappiness=133" >> /etc/sysctl.conf'
sudo sysctl -p

Monitorización del uso de zswap y ahorro de RAM

Para comprobar cuánta memoria está ahorrando zswap, puedes usar el siguiente script:

#!/bin/bash
# Función para calcular el ahorro de RAM
calculate_zswap_savings() {
    local stored_pages=$(cat /sys/kernel/debug/zswap/stored_pages)
    local pool_total_size=$(cat /sys/kernel/debug/zswap/pool_total_size)
    local page_size=$(getconf PAGE_SIZE 2>/dev/null || echo 4096)
    local ram_uncompressed=$((stored_pages * page_size))
    local ram_saved=$((ram_uncompressed - pool_total_size))
    echo "Páginas almacenadas: $stored_pages"
    echo "Tamaño total del pool: $(numfmt --to=iec --suffix=B $pool_total_size)"
    echo "RAM sin comprimir: $(numfmt --to=iec --suffix=B $ram_uncompressed)"
    echo "RAM ahorrada: $(numfmt --to=iec --suffix=B $ram_saved)"
}
echo "Estadísticas de Zswap:"
echo "----------------------"
calculate_zswap_savings

Este script proporciona estadísticas en tiempo real sobre el uso de zswap y cuánta RAM se está ahorrando mediante la compresión.

Conclusión

Aprovechar zswap dentro de WSL2 ofrece beneficios de rendimiento tangibles, especialmente en cargas de trabajo exigentes. Para los usuarios que buscan maximizar su productividad y mantener un rendimiento óptimo en sus flujos de trabajo híbridos entre Windows y Linux, activar zswap es altamente recomendable.


¿Listo para experimentar un mejor rendimiento? ¡Prueba zswap hoy mismo!

No hay comentarios:

Publicar un comentario

- Comenta, comenta, adelante. Así nos animas a seguir el blog -

Búsqueda