Prima versione stabile di zlib-ng, un fork di zlib ad alte prestazioni

Il rilascio della libreria zlib-ng 2.0 è disponibile ed è contrassegnato come il primo rilascio stabile del progetto (seguito da un rilascio correttivo 2.0.1). Zlib-ng è compatibile con zlib a livello API, ma fornisce ottimizzazioni aggiuntive che non sono accettate nel repository zlib ufficiale a causa di un approccio conservativo all'accettazione delle modifiche. Inoltre, viene proposta un'API modernizzata, basata su zlib, ma modificata per semplificare il porting. Il codice del progetto è scritto in C e distribuito sotto la licenza Zlib.

I test condotti sui sistemi x86_64 hanno dimostrato che durante l'esecuzione delle operazioni di compressione, Zlib-ng è circa 4 volte più veloce di zlib e 2.1 volte più veloce di gzip. Durante la decompressione, Zlib-ng è circa 2.4 volte più veloce di zlib e 1.8 volte più veloce di gzip. Un aumento significativo delle prestazioni di compressione/decompressione è stato ottenuto principalmente grazie all'uso delle istruzioni vettoriali SSE*, AVX2, VSX e Neon.

Inclusa l'implementazione aggiunta dell'algoritmo di checksum Adler32, ottimizzato utilizzando le istruzioni SSSE3, AVX2, Neon e VSX, implementazione CRC32-B basata su PCLMULQDQ e ACLE, tabelle hash migliorate, implementazione hash Slide basata su SSE2, AVX2, Neon e VSX, operazioni di confronto basate su SSE4.2 e AVX2. La composizione include anche modifiche volte a migliorare le prestazioni, utilizzate nei fork di Intel e Cloudflare. Il processo di lavoro con i buffer è stato ottimizzato. Aggiunto supporto per i sistemi di compilazione CMake e NMake. Per i test vengono utilizzati sistemi di integrazione continua.

Oltre alle ottimizzazioni, Zlib-ng include anche le patch che si sono accumulate nei pacchetti di distribuzione e ripulisce il codice dalle soluzioni alternative utilizzate in zlib per supportare compilatori e piattaforme più vecchi, ma che impediscono l'implementazione di metodi più efficienti (ad esempio, restrizioni necessarie per supportare sistemi a 16 bit e compilatori C non ANSI). È stato svolto lavoro per identificare e correggere gli errori identificati da analizzatori statici, sistemi di test fuzzing e strumenti per identificare problemi quando si lavora con la memoria (AddressSanitizer e MemorySanitizer).

Fonte: opennet.ru

Aggiungi un commento