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

17 марта 2021 года

Доступен релиз библиотеки 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).

Источники править


 
 
Creative Commons
Эта статья содержит материалы из статьи «Первый стабильный выпуск zlib-ng, высокопроизводительного форка zlib», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.