Erste stabile Veröffentlichung von zlib-ng, einem Hochleistungszweig von zlib

Die Veröffentlichung der zlib-ng 2.0-Bibliothek ist verfügbar und gilt als erste stabile Veröffentlichung des Projekts (gefolgt von einer Korrekturversion 2.0.1). Zlib-ng ist auf API-Ebene mit zlib kompatibel, bietet jedoch zusätzliche Optimierungen, die aufgrund eines konservativen Ansatzes bei der Annahme von Änderungen nicht im offiziellen zlib-Repository akzeptiert werden. Darüber hinaus wird eine modernisierte API vorgeschlagen, die auf zlib basiert, jedoch geändert wurde, um die Portierung zu vereinfachen. Der Projektcode ist in C geschrieben und wird unter der Zlib-Lizenz vertrieben.

Auf x86_64-Systemen durchgeführte Tests zeigten, dass Zlib-ng bei der Durchführung von Komprimierungsvorgängen etwa viermal schneller als zlib und 4-mal schneller als gzip ist. Beim Dekomprimieren ist Zlib-ng etwa 2.1-mal schneller als zlib und 2.4-mal schneller als gzip. Eine deutliche Steigerung der Komprimierungs-/Dekomprimierungsleistung wurde hauptsächlich durch die Verwendung der Vektoranweisungen SSE*, AVX1.8, VSX und Neon erreicht.

Einschließlich zusätzlicher Implementierung des Adler32-Prüfsummenalgorithmus, optimiert mit SSSE3-, AVX2-, Neon- und VSX-Anweisungen, CRC32-B-Implementierung basierend auf PCLMULQDQ und ACLE, verbesserten Hash-Tabellen, Slide-Hash-Implementierung basierend auf SSE2, AVX2, Neon und VSX, basierend auf Vergleichsoperationen auf SSE4.2 und AVX2. Die Zusammensetzung umfasst auch Änderungen zur Verbesserung der Leistung, die in Forks von Intel und Cloudflare verwendet werden. Der Prozess der Arbeit mit Puffern wurde optimiert. Unterstützung für CMake- und NMake-Build-Systeme hinzugefügt. Zum Testen werden kontinuierliche Integrationssysteme verwendet.

Neben Optimierungen enthält Zlib-ng auch Patches, die sich in Distributionspaketen angesammelt haben, und bereinigt den Code von Workarounds, die in zlib zur Unterstützung älterer Compiler und Plattformen verwendet werden, aber die Implementierung effizienterer Methoden verhindern (z. B. für die Unterstützung erforderliche Einschränkungen). 16-Bit-Systeme und Nicht-ANSI-C-Compiler). Es wurden Arbeiten zur Identifizierung und Korrektur von Fehlern durchgeführt, die von statischen Analysegeräten, Fuzzing-Testsystemen und Tools zur Identifizierung von Problemen bei der Arbeit mit dem Speicher (AddressSanitizer und MemorySanitizer) erkannt wurden.

Source: opennet.ru

Kommentar hinzufügen