Улучшенная обработка SIMD и мультиверсионность вывели Rust-реализацию zlib в лидеры.
Проект zlib-rs представил версию 0.4.2, обеспечивающую значительный прирост производительности. По последним тестам, это самая быстрая API-совместимая реализация zlib для декомпрессии, а в ряде ключевых сценариев сжатия она также обходит конкурентов.
Одним из главных направлений улучшений стало более эффективное использование SIMD-инструкций. В предыдущих тестах zlib-rs получал преимущество благодаря флагу target-cpu=native
, но это было не совсем честное сравнение, так как C-библиотека zlib-ng проверяла доступность SIMD во время выполнения. В новой версии этот момент устранён, и zlib-rs теперь сам выбирает оптимальный метод в рантайме.
-Cllvm-args=-enable-dfa-jump-thread
позволило ускорить обработку небольших блоков данных.В тестах на декомпрессию zlib-rs показывает устойчивый прирост скорости более чем на 10% для входных данных размером 1 КБ и более 6% для 65 КБ. Единственное исключение — совсем небольшие блоки (16 байт), но это не имеет значения в реальных сценариях.
zlib-chromium быстрее на небольших блоках, но на реалистичных размерах (1 КБ и выше) zlib-rs уверенно побеждает, обеспечивая прирост скорости до 6.5%.
В области сжатия результаты смешанные. На уровне 6 (по умолчанию) zlib-rs выигрывает 6%, а на уровне 9 (максимальное сжатие) — более 13%. Однако на низких уровнях производительности пока уступает zlib-ng.
zlib-rs уже доступен как для Rust, так и для C-проектов (через динамическую библиотеку). В Rust рекомендуется использовать flate2 1.1.0 с флагом zlib-rs
.