Dostępna jest wersja biblioteki zlib-ng 2.0, która została oznaczona jako pierwsze stabilne wydanie projektu (wkrótce dostępna będzie poprawka 2.0.1). Zlib-ng jest kompatybilny z zlib na poziomie API, ale oferuje dodatkowe optymalizacje, które nie zostały przyjęte do oficjalnego repozytorium zlib z powodu konserwatywnego podejścia do akceptacji zmian. Proponowane jest również zmodernizowane API, oparte na zlib, ale zmienione w celu uproszczenia portowania. Kod projektu napisany jest w języku C i jest rozpowszechniany na licencji Zlib.
Testy przeprowadzone na systemach x86_64 wykazały, że podczas wykonywania operacji kompresji zlib-ng jest około 4 razy szybszy niż zlib i 2,1 razy szybszy niż gzip. Podczas dekompresji zlib-ng jest około 2,4 razy szybszy niż zlib i 1,8 razy szybszy niż gzip. Zwiększenie wydajności kompresji/dekompresji udało się osiągnąć głównie dzięki wykorzystaniu instrukcji wektorowych SSE*, AVX2, VSX i Neon.
Dodano również implementację algorytmu obliczania sum kontrolnych Adler32, zoptymalizowaną za pomocą instrukcji SSSE3, AVX2, Neon i VSX, implementację CRC32-B opartą na PCLMULQDQ i ACLE, ulepszone tablice haszujące, implementację hasza Slide opartą na SSE2, AVX2, Neon i VSX, oraz operacje porównania oparte na SSE4.2 i AVX2. W skład projektu wchodzą także zmiany mające na celu zwiększenie wydajności, stosowane w forkach od firm Intel i Cloudflare. Zoptymalizowano proces obsługi buforów. Dodano wsparcie dla systemów budowlanych CMake i NMake. Do testowania wykorzystano systemy ciągłej integracji.
Oprócz optymalizacji w zlib-ng uwzględniono także nagromadzone w paczkach dystrybucyjnych poprawki oraz przeprowadzono czyszczenie kodu z obejść wykorzystywanych w zlib dla wsparcia starych kompilatorów i platform, które utrudniały wdrożenie bardziej efektywnych metod (na przykład ograniczenia wymagane do wsparcia systemów 16-bitowych i niekompatybilnych z ANSI C kompilatorów). Przeprowadzono pracę mającą na celu identyfikację i naprawienie błędów wykrytych przez analizatory statyczne, systemy fuzzingowe oraz narzędzia do wykrywania problemów związanych z pamięcią (AddressSanitizer i MemorySanitizer).
Źródło: opennet.ru
