Rust против C: библиотека zlib-rs демонстрирует 13% прирост производительности
NewsMakerУлучшенная обработка SIMD и мультиверсионность вывели Rust-реализацию zlib в лидеры.
Проект zlib-rs представил версию 0.4.2, обеспечивающую значительный прирост производительности. По последним тестам, это самая быстрая API-совместимая реализация zlib для декомпрессии, а в ряде ключевых сценариев сжатия она также обходит конкурентов.

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