Btrfs optimiza la descompresión Zstd para mejorar el rendimiento en Linux 7.4
Un cambio en el driver de Btrfs evita escritura doble de bytes al descomprimir con Zstd, logrando mejoras de hasta un 7,8% en lecturas secuenciales.
El driver del sistema de archivos Btrfs incorporará una mejora en la ruta de descompresión de Zstd antes de que comience el ciclo de desarrollo de Linux 7.4 en octubre. El objetivo es eliminar una ineficiencia detectada por el desarrollador Usama Arif, quien identificó que actualmente cada byte entregado por el descompresor se escribe dos veces en memoria.
El problema residía en cómo interactuaban zstd_decompress_bio() y btrfs_decompress_buf2page(). En la implementación actual, Zstd escribe primero en un búfer temporal de tamaño sectorial y luego se copia la parte relevante en los folios de destino. La nueva aproximación permite que Zstd escriba directamente en la caché de páginas, mapeando el segmento de página actual mediante zstd_map_dest(). El búfer temporal solo se conservará para casos donde no haya destino directo, como prefijos antes de una lectura dentro de una extensión comprimida o huecos dejados por folios ya presentes en la caché.
Impacto en el rendimiento
Las pruebas realizadas por Arif muestran mejoras notables dependiendo del tamaño de sector configurado:
- Con sectores de 4K, se reduce el tiempo de lectura secuencial en un 7,8%.
- Con sectores de 16K, la reducción es del 3,6%.
- Con sectores de 64K, el tiempo de lectura secuencial baja un 6,8%.
Para lecturas aleatorias de 4K, la mejora ronda el 3%. Aunque estas cifras pueden parecer modestas al mirarse de forma aislada, en entornos de alta densidad donde el almacenamiento comprimido es estándar, la reducción de operaciones de memcpy innecesarias se traduce en una menor latencia y mayor eficiencia de CPU.
Incorporación al kernel
El parche ya está en la rama for-next de Btrfs, por lo que es esperado que forme parte del ciclo de Linux 7.4. Esta mejora llega en paralelo a otros trabajos pendientes de mejora del código Zstd dentro del kernel. Para administradores de sistemas que dependen de Btrfs con compresión transparente, especialmente en cargas de trabajo intensivas en E/S, esta optimización será relevante al llegar la versión estable, eliminando un cuello de botella histórico en la descompresión.