Die Version 2.0 der Bibliothek zlib-ng ist jetzt verfĂŒgbar und wird als erster stabiler Release des Projekts eingeordnet (darauf folgt bereits das Korrektur-Release 2.0.1). Zlib-ng ist API-kompatibel mit zlib, bietet jedoch zusĂ€tzliche Optimierungen, die aufgrund eines konservativen Ansatzes zur Annahme von Ănderungen nicht im offiziellen zlib-Repository aufgenommen wurden. ZusĂ€tzlich wird eine modernisierte API angeboten, die auf zlib basiert, jedoch zur Vereinfachung der Portierung geĂ€ndert wurde. Der Code des Projekts ist in C geschrieben und wird unter der Zlib-Lizenz verbreitet.
Tests auf x86_64-Systemen haben gezeigt, dass Zlib-ng beim Komprimieren etwa 4-mal schneller ist als zlib und 2,1-mal schneller als gzip. Bei der Dekomprimierung ist Zlib-ng etwa 2,4-mal schneller als zlib und 1,8-mal schneller als gzip. Diese signifikante Leistungssteigerung bei der Kompression/Dekompression wurde hauptsÀchlich durch den Einsatz von Vektor-Anweisungen wie SSE*, AVX2, VSX und Neon erreicht.
Unter anderem wurde die Implementierung des Algorithmus zur Berechnung von Adler32-PrĂŒfziffern hinzugefĂŒgt, optimiert durch SSSE3-, AVX2-, Neon- und VSX-Anweisungen. Zudem umfasst es die Implementierung von CRC32-B auf Basis von PCLMULQDQ und ACLE, verbesserte Hash-Tabellen, die Hash-Implementierung von Slide unter Verwendung von SSE2, AVX2, Neon und VSX sowie Vergleichsoperationen basierend auf SSE4.2 und AVX2. Auch Leistungssteigerungen, die in Forks von Intel und Cloudflare verwendet werden, sind enthalten. Der Buffer-Prozess wurde optimiert. UnterstĂŒtzung fĂŒr die Build-Systeme CMake und NMake wurde hinzugefĂŒgt. FĂŒr Tests wurden Systeme zur kontinuierlichen Integration eingesetzt.
Neben den Optimierungen in Zlib-ng wurden auch die in den Distributionspaketen angefallenen Patches integriert und der Code von Workarounds gereinigt, die in zlib verwendet wurden, um Ă€ltere Compiler und Plattformen zu unterstĂŒtzen, jedoch die Implementierung effizienterer Methoden behinderten (zum Beispiel die EinschrĂ€nkungen, die notwendig sind, um 16-Bit-Systeme und inkompatible ANSI C-Compiler zu unterstĂŒtzen). Es wurde an der Identifizierung und Behebung von Fehlern gearbeitet, die durch statische Analysatoren, Fuzzing-Tests und Werkzeuge zur Identifizierung von Problemen mit dem Speicher (AddressSanitizer und MemorySanitizer) gefunden wurden.
Quelle: opennet.ru
