← На главную

LZ-кодек misa77 обогнал lz4 и zstd по скорости распаковки

15.07.2026 15:58 · hackernews

misa77 — это LZ-кодек, заточенный под сценарий write-once, read-many. Его главная фишка — экстремально быстрая распаковка в один поток. Степень сжатия скромная — без entropy-бэкенда тягаться с zstd не выйдет, но на уровне LZ4 на высоких усилиях misa77 держится уверенно. Расход памяти фиксированный: не больше 5 МБ при сжатии и 0 МБ при распаковке. Плата за это — медленное сжатие. Причём у misa77 забавная особенность: сильнее сжатые файлы распаковываются ещё быстрее. Поэтому высокие уровни сжатия особенно выгодны, и разработчик добавил экспериментальные режимы, которые жертвуют временем упаковки ради ещё более удобного для CPU потока.

В версии 0.2.0 есть два уровня сжатия: level 0 (чуть хуже сжатие, но быстрее декодирование) и level 1 по умолчанию (наоборот). Результаты тестов впечатляют. На наборе silesia.tar misa77 level 0 жмёт со скоростью 54.5 МБ/с, а распаковывает — 5219 МБ/с. Для сравнения: lz4 1.10.0 выдаёт 371 МБ/с на сжатии и 2505 МБ/с на распаковке, zstd 1.5.7 -1 — 297 и 901 МБ/с соответственно. snappy — 375 и 855 МБ/с. На enwik8 картина похожая: misa77 level 0 распаковывается со скоростью 4802 МБ/с против 2355 у lz4 и 831 у zstd. Обратите внимание: misa77 обгоняет всех по скорости декодирования, даже когда у конкурентов степень сжатия заметно лучше. Но есть нюанс — на плохо сжимаемых файлах вроде x-ray из корпуса Silesia он проигрывает lz4, поскольку тот там фактически работает как memcpy.

Собирается кодек стандартно: нужен C++20 компилятор (GCC или Clang), CMake >= 3.20 и 64-битная little-endian система. CLI работает на POSIX (Linux, macOS). На x86-64 AVX2/SSE2 выбираются на лету, на других архитектурах используется переносимый путь без интринсиков, но он хорошо автовекторизуется (проверено на Apple ARM). Команды: misa compress, misa decompress, misa suggest. Флаги: --adaptive (автоподстройка под вход), --yolo (высокоинтенсивный, оптимизированный под декодирование), --params F.misap (загрузка настроек из файла). Формат пока нестабильный, версия v0.x.y. Декодер считает вход валидным — если передать мусор, получите UB. Средство не захарденилось, прошло лишь локальный фаззинг. Проект родился из учебного эксперимента по performance engineering, вдохновение бралось из разных источников, а с написанием скриптов и CLI помогали Claude Opus 4.8 и Fable 5. Лицензия — MIT.

Читать оригинал →