Primera versión estable de zlib-ng, una bifurcación de alto rendimiento de zlib

La versión de la biblioteca zlib-ng 2.0 está disponible y está marcada como la primera versión estable del proyecto (seguida de una versión correctiva 2.0.1). Zlib-ng es compatible con zlib a nivel de API, pero proporciona optimizaciones adicionales que no se aceptan en el repositorio oficial de zlib debido a un enfoque conservador para aceptar cambios. Además, se propone una API modernizada, basada en zlib, pero modificada para simplificar la portabilidad. El código del proyecto está escrito en C y distribuido bajo la licencia Zlib.

Las pruebas realizadas en sistemas x86_64 mostraron que al realizar operaciones de compresión, Zlib-ng es aproximadamente 4 veces más rápido que zlib y 2.1 veces más rápido que gzip. Al descomprimir, Zlib-ng es aproximadamente 2.4 veces más rápido que zlib y 1.8 veces más rápido que gzip. Se logró un aumento significativo en el rendimiento de compresión/descompresión principalmente debido al uso de instrucciones vectoriales SSE*, AVX2, VSX y Neon.

Incluye implementación adicional del algoritmo de suma de comprobación Adler32, optimizado usando instrucciones SSSE3, AVX2, Neon y VSX, implementación CRC32-B basada en PCLMULQDQ y ACLE, tablas hash mejoradas, implementación de hash Slide basada en SSE2, AVX2, Neon y VSX, operaciones de comparación basadas en SSE4.2 y AVX2. La composición también incluye cambios destinados a mejorar el rendimiento utilizado en las bifurcaciones de Intel y Cloudflare. Se ha optimizado el proceso de trabajo con buffers. Se agregó soporte para los sistemas de compilación CMake y NMake. Para las pruebas se utilizan sistemas de integración continua.

Además de las optimizaciones, Zlib-ng también incluye parches que se han acumulado en paquetes de distribución y limpia el código de soluciones alternativas utilizadas en zlib para soportar compiladores y plataformas más antiguas, pero que impiden la implementación de métodos más eficientes (por ejemplo, restricciones necesarias para soportar Sistemas de 16 bits y compiladores que no sean ANSI C). Se ha trabajado en la identificación y corrección de errores identificados por analizadores estáticos, sistemas de prueba de fuzzing y herramientas para identificar problemas al trabajar con memoria (AddressSanitizer y MemorySanitizer).

Fuente: opennet.ru

Añadir un comentario