3.8.12.5 Оптимизация команд с помощью hyperfine
Скачать документ Установка
Синтаксис
Опции
Примеры использования
Окружение
- Версия РЕД ОС: 8
- Конфигурация: Рабочая станция
- Версия ПО: hyperfine-1.17.0-1
Hyperfine — это инструмент командной строки, предназначенный для измерения и сравнения производительности различных команд, алгоритмов или сценариев. Он работает путём многократного запуска команды или сценария и измерения времени, необходимого для её выполнения. Затем он вычисляет среднее время выполнения, медиану и стандартное отклонение, чтобы дать пользователю представление о производительности команды.
Hyperfine учитывает различные факторы, которые могут повлиять на производительность — кеширование, нагрузка на систему и другие процессы, работающие в фоновом режиме. Это позволяет получить более точные результаты и принимать обоснованные решения о том, как оптимизировать свои команды и сценарии.
Установка
Для установки программы через терминал выполните команду (потребуются права администратора):
sudo dnf install hyperfine
Дальнейшая работа с программой должна выполняться с правами обычного (непривилегированного) пользователя.
Синтаксис
Утилита доступна для запуска через терминал при помощи команды следующего вида:
hyperfine [опции] <команда>
Опции
Основные опции утилиты:
-w, --warmup <число> — выполняет число прогревающих запусков перед фактическим тестированием производительности;
-m, --min-runs <число> — выполняет не менее указанного количества запусков для каждой команды (по умолчанию: 10);
-M, --max-runs <число> — выполняет не более указанного количества запусков для каждой команды (по умолчанию ограничения нет);
-r, --runs <число> — выполняет ровно указанное количество запусков для каждой команды (если эта опция не указана, hyperfine автоматически определяет количество запусков);
-s, --setup <команда> — выполняет команду перед каждым набором запусков;
-p, --prepare <команда> — выполняет команду перед каждым запуском;
-c, --cleanup <команда> — выполняет команду после завершения всех тестовых запусков для каждой команды;
-P, --parameter-scan <значение> <MIN> <MAX> — выполняет тесты для каждого значения в указанном диапазоне;
-D, --parameter-step-size <шаг> — определяет шаг перебора значений в диапазоне;
-L, --parameter-list <значение> <список_значений> — выполняет тесты для каждого значения из списка;
-S, --shell <оболочка> — устанавливает оболочку, используемую для выполнения команд;
-N — алиас для --shell=none (оболочка не будет использоваться);
-i, --ignore-failure — игнорирует ненулевые коды возврата тестируемых программ;
--style <тип> — устанавливает стиль вывода:
auto — автоматически определяет стиль вывода (по умолчанию),
basic — отключает цветовую схему вывода и интерактивные элементы,
full — включает все эффекты,
nocolor — вывод без цвета,
color — вывод в цвете,
none — отключает все выходные данные;
--sort <метод> — указывает порядок сортировки сводки сравнения производительности и экспортированных таблиц для форматов разметки (Markdown, AsciiDoc, org-mode):
auto — автоматически определяет порядок сортировки (по умолчанию),
command — сортирует результаты по имени команды,
mean-time — сортирует результаты по среднему времени выполнения команды;
-u, --time-unit <единица> — устанавливает единицу времени (по умолчанию: секунда, возможные значения: миллисекунда, секунда);
--export-asciidoc <файл> — экспортирует сводную статистику синхронизации в виде таблицы AsciiDoc в указанный файл;
--export-csv <файл> — экспортирует сводную статистику синхронизации в формате CSV в указанный файл;
--export-json <файл> — экспортирует сводную статистику синхронизации и тайминги отдельных запусков в формате JSON в данный файл;
--export-markdown <файл> — экспортирует сводную статистику времени в виде таблицы Markdown в данный файл;
--export-orgmode <файл> — экспортирует сводную статистику времени как таблицу Emacs в указанный файл;
--show-output — выводит стандартный вывод (stdout) и вывод ошибок (stderr);
--output <путь> — перенаправляет выходные данные:
null — данные не будут сохранятся или отображаться (по умолчанию);
pipe — данные будут переданы через канал перед тем, как будут удалены из вывода,
inherit — данные будут отображены в терминале,
путь к файлу — вывод будет записан в указанный файл;
--input <путь> — считывает входные данные из заданного файла (null или путь к файлу);
-n, --command-name <имя> — устанавливает команде имя;
-h, --help — выводит справку;
-V, --version — выводит версию программы.
Примеры использования
1. Измерение времени выполнения команды 'ls -l':
hyperfine 'ls -l'
Результат:
Benchmark 1: ls -l Time (mean ± σ): 0.7 ms ± 0.6 ms [User: 0.8 ms, System: 0.7 ms] Range (min … max): 0.3 ms … 9.0 ms 267 runs
где:
Benchmark — используется для измерения времени выполнения команд или программ;
Time — среднее время выполнения команды, включая стандартное отклонение (σ). Среднее время выполнения команды 'ls -l' составляет 0.7 мс со стандартным отклонением 0.6 мс;
Range — диапазон времени выполнения команды от минимального до максимального значения. Минимальное время выполнения команды составляет 0.3 мс, а максимальное — 9.0 мс.
2. Сравнение времени выполнения нескольких команд ('ls -l' и 'ls -a'):
hyperfine 'ls -l' 'ls -a'
Результат:
Benchmark 1: ls -l Time (mean ± σ): 1.5 ms ± 0.5 ms [User: 0.7 ms, System: 1.1 ms] Range (min … max): 1.1 ms … 4.7 ms 928 runs Benchmark 2: ls -a Time (mean ± σ): 0.8 ms ± 0.6 ms [User: 0.5 ms, System: 0.7 ms] Range (min … max): 0.4 ms … 5.7 ms 700 runs Summary ls -a ran 1.87 ± 1.42 times faster than ls -l
где:
Summary — сводный итог сравнительной производительности команд (ls -a выполнялась в среднем в 1.87 раз быстрее, чем команда ls -l со стандартным отклонением 1.42 мс).
3. Выполнение 5 предварительных запусков перед основными измерениями:
hyperfine -w 5 'ls -a'
Результат:
Benchmark 1: ls -a Time (mean ± σ): 0.1 ms ± 0.4 ms [User: 0.5 ms, System: 0.3 ms] Range (min … max): 0.0 ms … 4.5 ms 1230 runs
4. Ограничение количества запусков команды:
hyperfine -M 50 'ls -a'
Результат:
Benchmark 1: ls -a Time (mean ± σ): 0.8 ms ± 0.2 ms [User: 0.5 ms, System: 0.8 ms] Range (min … max): 0.6 ms … 1.3 ms 50 runs
5. Экспорт статистики в формате CSV в файл:
hyperfine --export-csv sample4.csv 'ls'
Результат:
Benchmark 1: ls Time (mean ± σ): 0.3 ms ± 1.1 ms [User: 0.5 ms, System: 0.4 ms] Range (min … max): 0.0 ms … 13.7 ms 191 runs
6. Экспорт статистики и результатов запусков в формате JSON:
hyperfine --export-json sample1.json 'ls'
Результат:
Benchmark 1: ls Time (mean ± σ): 0.1 ms ± 0.3 ms [User: 0.5 ms, System: 0.3 ms] Range (min … max): 0.0 ms … 4.2 ms 860 runs
7. Направление вывода результатов в файл:
hyperfine --output ./3d.txt 'ls -v' -N
Результат:
Benchmark 1: ls -v Time (mean ± σ): 1.1 ms ± 0.4 ms [User: 0.3 ms, System: 0.6 ms] Range (min … max): 0.9 ms … 5.0 ms 2737 runs
Дата последнего изменения: 24.09.2024
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.