Первый стабильный выпуск zlib-ng, высокопроизводительного форка zlib

Доступен релиз библиотеки zlib-ng 2.0 который отмечен как первый стабильный выпуск проекта (следом уже доступен корректирующий выпуск 2.0.1). Zlib-ng совместим с zlib на уровне API, но предоставляет дополнительные оптимизации, не принятые в официальный репозиторий zlib из-за консервативного подхода к приёму изменений. Дополнительно предложен модернизированный API, основанный на zlib, но изменённый для упрощения портирования. Код проекта написан на языке Си и распространяется под лицензией Zlib.

Поведённые на системах x86_64 тесты показали, что при выполнении операций сжатия Zlib-ng примерно в 4 раза быстрее zlib и в 2.1 раза быстрее gzip. При распаковке Zlib-ng примерно в 2.4 раза быстрее zlib и в 1.8 раз быстрее gzip. Добиться существенного повышения производительности сжатия/распаковки в основном удалось благодаря задействованию векторных инструкций SSE*, AVX2, VSX и Neon.

В том числе добавлена реализация алгоритма вычисления контрольных сумм Adler32, оптимизированная при помощи инструкций SSSE3, AVX2, Neon и VSX, реалихация CRC32-B на базе PCLMULQDQ и ACLE, усовершенствованные хэш-таблицы, реализация хэша Slide на базе SSE2, AVX2, Neon и VSX, операции сравнения на базе SSE4.2 и AVX2. В состав также включены нацеленные на повышение производительности изменения, используемые в форках от компаний Intel и Cloudflare. Оптимизирован процесс работы с буферами. Добавлена поддержка сборочных систем CMake и NMake. Для тестирования задействованы системы непрерывной интеграции.

Кроме оптимизаций в Zlib-ng также включены накопившиеся в пакетах дистрибутив патчи и проведена чистка кода от обходных решений, используемых в zlib для поддержки старых компиляторов и платформ, но мешающих реализации более эффективных методов (например, ограничения, необходимые для поддержки 16-разрядных систем и несовместимых с ANSI C компиляторов). Проведена работа по выявлению и исправлению ошибок, выявленных статическими анализаторами, системами fuzzing-тестирования, и инструментами для выявления проблем при работе с памятью (AddressSanitizer и MemorySanitizer).



Источник: http://www.opennet.ru/opennews/art.shtml? num=54775

© OpenNet