Mejorando el rendimiento de WSL2 con Zswap (actualizado para kernel 6.x)

WSL2 se ha consolidado como el entorno ideal para desarrollar en Linux desde Windows. Pero cuando se ejecutan cargas pesadas —compilaciones grandes, contenedores, bases de datos o herramientas de IA ligera— la memoria puede saturarse y el rendimiento cae por el uso intensivo del swap. Aquí es donde zswap aporta una mejora clara y medible.

Esta guía actualiza el artículo original y lo alinea con el kernel 6.x de WSL2, que cambia el modo en que se empaquetan los módulos y elimina componentes del kernel 5.x. Además, integra el nuevo script que automatiza la compilación del kernel con zswap habilitado.

Qué es zswap y por qué es útil en WSL2

zswap es una capa de compresión en memoria que se activa antes de escribir datos en el swap. En lugar de enviar una página directamente al archivo de intercambio, el kernel la comprime y la almacena en RAM. Solo si es necesario, la página termina escrita en el swap real.

En WSL2 esto marca una diferencia aún mayor porque el swap se almacena en un archivo *.vhdx, no en un disco físico. Escribir y leer ese archivo introduce una penalización extra, por lo que reducir esas operaciones mejora la fluidez del sistema.

Beneficios directos:

  • Menos escrituras al archivo de swap → menos latencia.

  • Mayor estabilidad cuando la memoria está al límite.

  • Mejor rendimiento en compilaciones y entornos con muchos procesos.

  • Reducción del desgaste del SSD.

Por qué zram no es la mejor opción en WSL2

zram crea un disco comprimido en RAM. Eso consume memoria de forma permanente y compite con tus aplicaciones. Cuando ya existe una partición de swap, como es el caso en WSL2, puede pasar que las páginas más viejas se queden en ZRAM y las nuevas en SWAP, perdiendo el sentido de la compresión. En cambio, ZSWAP usa la RAM de forma dinámica y trabaja sobre el swap existente, lo que lo hace más adecuado para WSL2. Si se deshabilita el swap, ZRAMsi puede ser una buena opción, pero aún así hay que configurarlo en la distro. ZSWAP trabaja automáticamente.

Cambios clave en kernel 6.x de WSL2

1. Eliminación de CONFIG_FRONTSWAP

El kernel 6.x ya no incluye FRONTSWAP, por lo que ciertas configuraciones usadas en kernel 5.x dejan de ser aplicables.

2. Nuevo modelo de módulos: modules.vhdx

A partir de kernel 6.x, WSL2 separa el kernel de sus módulos. Para usar un kernel personalizado necesitas dos archivos:

  • bzImage → kernel compilado

  • modules.vhdx → volumen con los módulos

En kernel 5.x esto no era necesario.

3. Script actualizado con detección automática

El repositorio oficial del script:
https://github.com/dhanar10/wsl2-kernel-zswap

El script detecta automáticamente el kernel que estás utilizando y ajusta la compilación:

  • Kernel 5.x → añade soporte de FRONTSWAP

  • Kernel 6.x → omite FRONTSWAP y genera modules.vhdx

Cómo habilitar zswap en WSL2 (kernel 6.x)

Paso 1. Descargar el script

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

Luego ejecútalo:

bash build.sh

O bien:

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

Qué genera el script

Tras la compilación tendrás:

arch/x86/boot/bzImage
modules.vhdx

Ambos son obligatorios para kernel 6.x.

Paso 2. Instalar los archivos en Windows

Copia los resultados a una ubicación accesible, por ejemplo:

bzImage       →  C:\bzImage
modules.vhdx  →  C:\modules.vhdx

Paso 3. Configurar .wslconfig

Edita:

%UserProfile%\.wslconfig

Incluye:

[wsl2]
kernel=C:\\bzImage
kernelModules=C:\\modules.vhdx

Reinicia WSL:

wsl --shutdown

Paso 4. Verificar zswap

En WSL:

cat /sys/module/zswap/parameters/enabled

Debe mostrar:

Y

Comprueba también:

cat /sys/module/zswap/parameters/compressor
cat /sys/module/zswap/parameters/zpool

Ajuste recomendado: vm.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 hacerlo permanente:

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

Cómo monitorear el ahorro de RAM

#!/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

Resultados esperados

Con kernel 6.x y zswap activado puedes esperar:

  • Menos uso de swap real.

  • Reducción de latencia en compilaciones y contenedores.

  • Menos tiempo perdido gestionando memoria cuando el sistema está muy cargado.

Conclusión

Habilitar zswap en WSL2 con kernel 6.x ofrece mejoras claras en estabilidad y rendimiento, especialmente bajo cargas exigentes. El nuevo script simplifica la compilación e instalación del kernel y sus módulos, permitiendo activar zswap con un proceso mucho más limpio que en versiones anteriores.

No hay comentarios:

Publicar un comentario

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

Búsqueda