Rust против C: библиотека zlib-rs демонстрирует 13% прирост производительности

Rust против C: библиотека zlib-rs демонстрирует 13% прирост производительности

Улучшенная обработка SIMD и мультиверсионность вывели Rust-реализацию zlib в лидеры.

image

Проект 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 уже доступен как для Rust, так и для C-проектов (через динамическую библиотеку). В Rust рекомендуется использовать flate2 1.1.0 с флагом zlib-rs.

Революция в песочнице: Превращаем PT Sandbox в идеальный инструмент безопасности

25 марта в 11:00 — эксклюзивный мастер-класс по созданию идеальных правил фильтрации в PT Sandbox. Готовые решения для максимальной производительности.

Реклама. АО «Позитив Текнолоджиз», ИНН 7718668887