Hyperfine - точный хронометраж для командной строки
Представьте ситуацию: вам нужно сравнить скорость работы двух скриптов или команд. Как вы это делаете? Многие просто запускают time перед каждой командой, но результаты получаются неточными — кэш, фоновые процессы и случайные флуктуации вносят слишком много шума. Именно для решения этой проблемы создан Hyperfine.
Что это за инструмент?
Hyperfine — это утилита командной строки на Rust для точного бенчмаркинга. Она не просто замеряет время выполнения, а проводит серию тестов с:
- Автоматическим подбором количества запусков
- Статистической обработкой результатов
- Учетом влияния кэширования
- Поддержкой прогресса выполнения

Ключевые возможности
1. Умное количество запусков
В отличие от простого time, Hyperfine автоматически определяет, сколько раз нужно выполнить команду для получения статистически значимых результатов:
hyperfine 'sleep 0.3'
Можно указать количество запусков вручную:
hyperfine --runs 5 'sleep 0.3'
2. Сравнение нескольких команд
Легко сравнивайте производительность альтернативных решений одной задачи:
hyperfine 'hexdump file' 'xxd file'
3. Работа с кэшем
Hyperfine предлагает гибкие настройки для тестирования на «холодном» и «горячем» кэше:
- Прогрев кэша перед тестами:
hyperfine --warmup 3 'grep -R TODO *'
- Очистка кэша перед каждым запуском (Linux):
hyperfine --prepare 'sync; echo 3 | sudo tee /proc/sys/vm/drop_caches' 'grep -R TODO *'
4. Параметризованные тесты
Можно автоматически варьировать параметры команд:
hyperfine --parameter-scan num_threads 1 12 'make -j {num_threads}'
Или тестировать с разными значениями:
hyperfine -L compiler gcc,clang '{compiler} -O2 main.cpp'
5. Разные форматы вывода
Результаты можно экспортировать в CSV, JSON, Markdown и другие форматы для дальнейшего анализа:
hyperfine --export-markdown results.md 'command1' 'command2'
Пример Markdown-отчёта:
| Command | Mean [s] | Min [s] | Max [s] | Relative |
|:---|---:|---:|---:|---:|
| find . -iregex '.*[0-9]\.jpg$' | 2.275 ± 0.046 | 2.243 | 2.397 | 9.79 ± 0.22 |
| find . -iname '*[0-9].jpg' | 1.427 ± 0.026 | 1.405 | 1.468 | 6.14 ± 0.13 |
| fd -HI '.*[0-9]\.jpg$' | 0.232 ± 0.002 | 0.230 | 0.236 | 1.00 |
Технические особенности
Hyperfine написан на Rust, что обеспечивает:
- Высокую производительность
- Кросс-платформенность (Linux, macOS, Windows)
- Безопасность памяти
Инструмент корректно учитывает время запуска shell, что особенно важно для коротких команд:
hyperfine -N 'grep TODO /home/user' # Без shell
Практическое применение
- Оптимизация CI/CD — сравнение времени сборки с разными параметрами
- Выбор инструментов — какая утилита работает быстрее для вашей задачи?
- Тестирование изменений — насколько новая версия кода быстрее старой?
- Документирование производительности — включение бенчмарков в документацию
Как установить
Для большинства Linux-дистрибутивов есть пакеты:
# Ubuntu/Debian
wget https://github.com/sharkdp/hyperfine/releases/download/v1.19.0/hyperfine_1.19.0_amd64.deb
sudo dpkg -i hyperfine_1.19.0_amd64.deb
# Fedora
sudo dnf install hyperfine
# Arch
sudo pacman -S hyperfine
Через Cargo:
cargo install --locked hyperfine
Альтернативы
bench— вдохновитель Hyperfinetime— встроенная, но менее функциональная утилита
Hyperfine — это must-have инструмент для:
- Разработчиков, оптимизирующих свой код
- Системных администраторов, настраивающих серверы
- Любого, кто хочет принимать обоснованные решения о выборе инструментов
Простота использования в сочетании с мощными аналитическими возможностями делают Hyperfine одним из лучших инструментов для командного бенчмаркинга. Попробуйте — и вы удивитесь, сколько интересного можно узнать о производительности ваших скриптов!
Интересный факт: название Hyperfine отсылает к сверхтонким уровням цезия-133, которые используются в определении секунды.
