De release van de zlib-ng 2.0 bibliotheek is beschikbaar, gemarkeerd als de eerste stabiele uitgave van het project (daarna is een correctieve uitgave 2.0.1 beschikbaar). Zlib-ng is compatibel met zlib op API-niveau, maar biedt extra optimalisaties die niet in de officiƫle zlib-repository zijn opgenomen vanwege een conservatieve benadering van het accepteren van wijzigingen. Daarnaast is er een gemoderniseerde API aangeboden, gebaseerd op zlib, maar aangepast voor vereenvoudigd porteren. De code van het project is geschreven in de programmeertaal C en wordt verspreid onder de Zlib-licentie.
De uitgevoerde tests op x86_64-systemen toonden aan dat zlib-ng ongeveer 4 keer sneller is dan zlib bij compressieoperaties en 2,1 keer sneller dan gzip. Bij het decomprimeren is zlib-ng ongeveer 2,4 keer sneller dan zlib en 1,8 keer sneller dan gzip. Deze aanzienlijke prestatieverbetering voor compressie/decompressie is voornamelijk bereikt door het gebruik van vectorinstructies zoals SSE*, AVX2, VSX en Neon.
Daarnaast is er een implementatie toegevoegd van het algoritme voor het berekenen van controlegetallen Adler32, geoptimaliseerd met behulp van SSSE3-, AVX2-, Neon- en VSX-instructies, een implementatie van CRC32-B op basis van PCLMULQDQ en ACLE, verbeterde hashtabellen, een implementatie van de Slide-hash op basis van SSE2, AVX2, Neon en VSX, en vergelijkingsoperaties op basis van SSE4.2 en AVX2. Ook zijn er prestatiesverhogende wijzigingen opgenomen die zijn gebruikt in forks van Intel en Cloudflare. Het proces voor het werken met buffers is geoptimaliseerd. Ondersteuning voor buildsystemen CMake en NMake is toegevoegd. Voor testing zijn continu-integratiesystemen ingezet.
Naast de optimalisaties in zlib-ng zijn ook de patches die zijn verzameld in distributiepakketten opgenomen en is de code opgeschoond van workarounds die in zlib werden gebruikt om oudere compilers en platformen te ondersteunen, maar die de implementatie van efficiƫntere methoden belemmerden (bijvoorbeeld beperkingen die nodig zijn voor ondersteuning van 16-bits systemen en compilers die niet compatibel zijn met ANSI C). Er is gewerkt aan het identificeren en corrigeren van fouten die zijn vastgesteld door statische analysers, fuzz-testing systemen, en tools voor geheugenprobleemdetectie (AddressSanitizer en MemorySanitizer).
Bron: opennet.ru
