Hyperfine - точный хронометраж для командной строки

30 Apr, 2026
28,409
🔱 493
👥 104

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

Что это за инструмент?

Hyperfine — это утилита командной строки на Rust для точного бенчмаркинга. Она не просто замеряет время выполнения, а проводит серию тестов с:

  • Автоматическим подбором количества запусков
  • Статистической обработкой результатов
  • Учетом влияния кэширования
  • Поддержкой прогресса выполнения

Пример работы Hyperfine

Ключевые возможности

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

Практическое применение

  1. Оптимизация CI/CD — сравнение времени сборки с разными параметрами
  2. Выбор инструментов — какая утилита работает быстрее для вашей задачи?
  3. Тестирование изменений — насколько новая версия кода быстрее старой?
  4. Документирование производительности — включение бенчмарков в документацию

Как установить

Для большинства 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 — вдохновитель Hyperfine
  • time — встроенная, но менее функциональная утилита

Hyperfine — это must-have инструмент для:

  • Разработчиков, оптимизирующих свой код
  • Системных администраторов, настраивающих серверы
  • Любого, кто хочет принимать обоснованные решения о выборе инструментов

Простота использования в сочетании с мощными аналитическими возможностями делают Hyperfine одним из лучших инструментов для командного бенчмаркинга. Попробуйте — и вы удивитесь, сколько интересного можно узнать о производительности ваших скриптов!

Интересный факт: название Hyperfine отсылает к сверхтонким уровням цезия-133, которые используются в определении секунды.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.