Bencher CLI runner
Бинарный файл runner — это агент, который выполняет benchmark Job на Bare Metal.
Это подробный справочник по настройке Self-Hosted Runner.
Бинарный файл предоставляет две подкоманды:
runner up: Запускает runner, который опрашивает сервер и выполняет benchmark Job.runner run: Загружает Image и запускает его один раз на локальном хосте, для тестирования.
🐰 Бинарный файл
runnerотличается от подкомандbencher runner. Бинарный файлrunnerуправляет хостом Runner, тогда какbencher runnerуправляет ресурсами Runner через REST API.
runner up
Запускает runner, который опрашивает сервер и выполняет benchmark Job. Это долго работающая команда, используемая для работы с Self-Hosted Runner. Runner открывает одно WebSocket-соединение с API-сервером, берёт Job, соответствующие его Spec, выполняет их и сообщает результаты обратно. Runner пишет свой журнал в stderr в формате JSON, по одному объекту на строку, а вывод Job записывает только как количество байтов.
runner up [OPTIONS]Опции
--host <HOST>
API-сервер Bencher, к которому подключаться.
По умолчанию используется https://api.bencher.dev.
Также может быть задано переменной окружения BENCHER_HOST.
--runner <RUNNER>
UUID или slug Runner, от имени которого работать.
Также может быть задано переменной окружения BENCHER_RUNNER.
--key <KEY>
Ключ аутентификации Runner (bencher_runner_...),
возвращённый при создании Runner.
Также может быть задано переменной окружения BENCHER_RUNNER_KEY.
--poll-timeout <POLL_TIMEOUT>
Тайм-аут длинного опроса в секундах при ожидании Job, от 1 до 900.
По умолчанию используется 55.
--state-dir <STATE_DIR>
Постоянный каталог состояния Runner.
Путь должен быть абсолютным.
Изолирующая среда (jail), ограничивающая песочницу, создаётся внутри этого каталога,
а среды, оставшиеся после аварийного завершения, удаляются из него перед запуском каждого Job с песочницей.
Каждая среда содержит полную корневую файловую систему гостя и копию двоичного файла microVM,
а Runner выполняет свои Job по одному,
поэтому этому каталогу нужен реальный объём для одной среды.
С --image-cache-size в нём также хранится кеш Image, до этого размера.
На хосте одновременно работает только один Runner, независимо от его каталога состояния:
Runner, запущенный от имени root, удерживает блокировку /run/bencher/runner.lock, пока работает,
а второй, запущенный от имени root, сразу завершается с ошибкой, в которой названа эта блокировка; Runner, запущенный не от имени root, не может открыть блокировку и работает без неё.
При запуске и снова перед каждым Job с песочницей Runner, запущенный от имени root, завершает любой процесс, который ещё выполняется в cgroup внутри /sys/fs/cgroup/bencher, например песочницу Runner, убитого посреди Job, независимо от каталога состояния этого Runner.
Выделенная файловая система или монтирование tmpfs поддерживается и рекомендуется:
это уводит нагрузку на запись с системного диска,
а только что созданная файловая система принимается, даже если в ней есть каталог lost+found.
Файловая система не должна быть смонтирована с nodev или noexec, как часто бывает с /tmp, /dev/shm и /run, поэтому смонтируйте для неё отдельный tmpfs без этих опций.
Сам каталог состояния может быть символической ссылкой, созданной root, на такую файловую систему,
например /var/lib/bencher-runner, указывающей на выделенный диск.
Ссылка используется только тогда, когда в каталог, содержащий её, может писать только root,
она указывает прямо на свою конечную цель,
и эта цель уже существует по пути, куда может писать только root;
ссылка, цель которой ещё не существует, отклоняется, поэтому сначала создайте цель.
По умолчанию используется /var/lib/bencher-runner.
Также может быть задан переменной окружения BENCHER_STATE_DIR.
--jail-uid <JAIL_UID>
Непривилегированный идентификатор пользователя, на который переходит процесс песочницы.
По умолчанию используется 61016.
Он не может быть равен 0.
Процесс на хосте, которому принадлежит этот идентификатор, может посылать сигналы песочнице,
поэтому выберите идентификатор, который хост ни на что другое не выделяет.
Также может быть задан переменной окружения BENCHER_JAIL_UID.
--jail-gid <JAIL_GID>
Непривилегированный идентификатор группы, на который переходит процесс песочницы.
По умолчанию используется 61016.
Он не может быть равен 0.
Также может быть задан переменной окружения BENCHER_JAIL_GID.
--danger-allow-no-sandbox
Разрешить выполнение Job без Sandbox.
Без этого флага Job, чей Spec не имеет Sandbox, отклоняется во время выполнения.
Не изолированные Job выполняются напрямую на хосте, поэтому включайте это только для доверенных нагрузок.
Также может быть задано переменной окружения BENCHER_DANGER_ALLOW_NO_SANDBOX.
--sandbox-log-level <SANDBOX_LOG_LEVEL>
Уровень логирования для процесса sandbox.
По умолчанию используется warning.
--no-raid-pause
Продолжать принимать Job, пока md RAID массив на хосте выполняет ресинхронизацию, восстановление, проверку, исправление или перестроение. По умолчанию Runner проверяет свои md массивы перед запросом каждого Job, и пока любой из них выполняет одну из этих операций, Runner приостанавливается: он не принимает новый Job, пока синхронизация не завершится, и никогда не останавливает уже выполняющийся Job. Приостановленный Runner остается подключенным и продолжает обновляться.
--no-auto-update
Отключить автоматические обновления с сервера.
По умолчанию runner обновляет себя между Job, когда сервер предлагает новую версию.
Также может быть задано переменной окружения BENCHER_NO_AUTO_UPDATE.
--update-channel <UPDATE_CHANNEL>
Канал автоматических обновлений: либо stable, либо canary.
По умолчанию используется stable.
Канал stable обновляет до версионированных релизов.
Канал canary отслеживает скользящую canary-сборку,
которая пересобирается всякий раз, когда runner меняется при деплое Bencher Cloud.
Также может быть задано переменной окружения BENCHER_UPDATE_CHANNEL.
Конфликтует с --no-auto-update.
--max-download-size <MAX_DOWNLOAD_SIZE>
Максимальный размер загрузки в байтах для бинарных файлов самообновления.
По умолчанию используется 500 MiB.
Конфликтует с --no-auto-update.
--image-cache-size <IMAGE_CACHE_SIZE>
Максимальный размер в байтах блобов Image, которые Runner хранит между Job.
Runner хранит блобы конфигурации и слоёв каждого Image, который он загружает, в blobs внутри своего --state-dir,
поэтому Job загружает только те блобы, которых у Runner ещё нет,
но манифест своего Image по-прежнему каждый раз получает из реестра.
Между Job Runner удаляет блобы, которые дольше всего не использовались, пока остальные не уместятся в этот размер.
При запуске Runner создаёт хранилище и делает его своим, а если не может, сразу завершается с ошибкой, называющей каталог.
По умолчанию, или при значении 0, Runner не хранит блобы между Job и удаляет те, что хранил раньше.
Также может быть задан переменной окружения BENCHER_IMAGE_CACHE_SIZE.
--max-output-size <MAX_OUTPUT_SIZE>
Максимальный размер в байтах для собираемых stdout и stderr.
По умолчанию используется 25 MiB.
--max-file-count <MAX_FILE_COUNT>
Максимальное количество выходных файлов для декодирования.
По умолчанию используется 255.
--max-symlinks <MAX_SYMLINKS>
Максимальное количество символических ссылок, по которым следует переходить при разрешении путей,
соответствующее ограничению MAXSYMLINKS ядра Linux.
По умолчанию используется 40.
Используется только в не изолированном режиме.
Тонкая настройка хоста
Перед каждым бенчмарком runner применяет тонкую настройку хоста, чтобы снизить шум измерений.
По умолчанию он отключает ASLR, NMI watchdog, SMT / hyper-threading и turbo boost;
устанавливает регулятор масштабирования частоты CPU в performance, swappiness в 10, а perf_event_paranoid в -1.
На хосте, который runner не настраивал с момента последней перезагрузки, флаги ниже вместо этого оставляют отдельные оптимизации на значениях хоста по умолчанию.
Тонкая настройка хоста сохраняется до перезагрузки хоста: каждый параметр записывается только во время выполнения, и runner не откатывает его при завершении, кроме удержания C-состояний, которое прекращается при завершении runner.
После запуска с тонкой настройкой флаг, который пропускает любой другой параметр, вступает в силу со следующей перезагрузки: до тех пор параметр сохраняет настроенное значение, а runner записывает это значение в журнал при запуске.
Перезагрузите общий хост после удаления runner.
--no-tuning
Отключить все оптимизации тонкой настройки хоста.
--aslr
Не отключать ASLR (по умолчанию: отключён для бенчмарков).
--nmi-watchdog
Не отключать NMI watchdog (по умолчанию: отключён для бенчмарков).
--smt
Не отключать SMT / hyper-threading (по умолчанию: отключён для бенчмарков).
--turbo
Не отключать turbo boost (по умолчанию: отключён для бенчмарков).
--numa-balancing
Не отключать автоматическую балансировку NUMA (по умолчанию: отключена для бенчмарков).
--timer-migration
Не отключать миграцию таймеров (по умолчанию: отключена для бенчмарков).
--soft-watchdog
Не отключать soft lockup watchdog (по умолчанию: отключён для бенчмарков).
--ksm
Не отключать KSM, kernel samepage merging (по умолчанию: отключён для бенчмарков).
--cstates
Не отключать глубокие C-состояния (по умолчанию: отключены для бенчмарков).
--no-irq-steering
Не направлять IRQ устройств и рабочие очереди ядра на служебные ядра CPU.
--no-cpuset-partition
Не отделять ядра CPU для бенчмарков от планировщика с помощью изолированного раздела cpuset.
--swappiness <SWAPPINESS>
Установить значение swappiness.
По умолчанию используется 10.
--governor <GOVERNOR>
Установить регулятор масштабирования частоты CPU.
По умолчанию используется performance.
--perf-event-paranoid <PERF_EVENT_PARANOID>
Установить значение perf_event_paranoid.
По умолчанию используется -1.
--thp <THP>
Установить режим transparent hugepage на хосте: never, madvise, always или leave.
Со значением leave текущий режим хоста сохраняется.
По умолчанию используется never.
--help
Вывести справку.
runner run
Загружает Image, создаёт rootfs и запускает его один раз на локальном хосте.
В отличие от runner up, это не подключается к API-серверу и не берёт Job.
Команда запускает один Image напрямую, что удобно для тестирования и отладки хоста Runner
или Image перед отправкой реальных Job.
Вывод Image идёт в stdout и stderr как есть, а собственный журнал runner идёт в stderr в формате JSON, по одному объекту на строку.
runner run --image <IMAGE> [OPTIONS]Опции
--image <IMAGE>
OCI Image для запуска, в виде локального пути или ссылки на реестр.
--token <TOKEN>
JWT-токен для аутентификации в реестре при загрузке Image.
--sandbox <SANDBOX>
Режим sandbox для выполнения бенчмарка.
Используйте firecracker для Firecracker microVM (только Linux).
Опустите для не изолированного выполнения на хосте.
--timeout <TIMEOUT>
Тайм-аут выполнения в секундах, общий для всех итераций с начала запуска.
По умолчанию используется 300.
--state-dir <STATE_DIR>
Постоянный каталог состояния Runner.
Путь должен быть абсолютным.
Изолирующая среда (jail), ограничивающая песочницу, создаётся внутри этого каталога,
а среды, оставшиеся после аварийного завершения, удаляются из него перед запуском каждого Job с песочницей.
Каждая среда содержит полную корневую файловую систему гостя и копию двоичного файла microVM,
а Runner выполняет свои Job по одному,
поэтому этому каталогу нужен реальный объём для одной среды.
На хосте одновременно работает только один Runner, независимо от его каталога состояния:
Runner, запущенный от имени root, удерживает блокировку /run/bencher/runner.lock, пока работает,
а второй, запущенный от имени root, сразу завершается с ошибкой, в которой названа эта блокировка; Runner, запущенный не от имени root, не может открыть блокировку и работает без неё.
При запуске и снова перед каждым Job с песочницей Runner, запущенный от имени root, завершает любой процесс, который ещё выполняется в cgroup внутри /sys/fs/cgroup/bencher, например песочницу Runner, убитого посреди Job, независимо от каталога состояния этого Runner.
Выделенная файловая система или монтирование tmpfs поддерживается и рекомендуется:
это уводит нагрузку на запись с системного диска,
а только что созданная файловая система принимается, даже если в ней есть каталог lost+found.
Файловая система не должна быть смонтирована с nodev или noexec, как часто бывает с /tmp, /dev/shm и /run, поэтому смонтируйте для неё отдельный tmpfs без этих опций.
Сам каталог состояния может быть символической ссылкой, созданной root, на такую файловую систему,
например /var/lib/bencher-runner, указывающей на выделенный диск.
Ссылка используется только тогда, когда в каталог, содержащий её, может писать только root,
она указывает прямо на свою конечную цель,
и эта цель уже существует по пути, куда может писать только root;
ссылка, цель которой ещё не существует, отклоняется, поэтому сначала создайте цель.
По умолчанию используется /var/lib/bencher-runner.
Также может быть задан переменной окружения BENCHER_STATE_DIR.
--jail-uid <JAIL_UID>
Непривилегированный идентификатор пользователя, на который переходит процесс песочницы.
По умолчанию используется 61016.
Он не может быть равен 0.
Процесс на хосте, которому принадлежит этот идентификатор, может посылать сигналы песочнице,
поэтому выберите идентификатор, который хост ни на что другое не выделяет.
Также может быть задан переменной окружения BENCHER_JAIL_UID.
--jail-gid <JAIL_GID>
Непривилегированный идентификатор группы, на который переходит процесс песочницы.
По умолчанию используется 61016.
Он не может быть равен 0.
Также может быть задан переменной окружения BENCHER_JAIL_GID.
--iter <ITER>
Количество итераций бенчмарка для выполнения.
По умолчанию используется 1.
--allow-failure
Разрешить сбой бенчмарка без короткого замыкания остальных итераций. Если время истекло, запуск всё равно завершается по тайм-ауту. Image, который не удаётся загрузить или подготовить, тоже завершает запуск.
--entrypoint <ENTRYPOINT>
Переопределить точку входа контейнера. Может быть указано несколько раз.
--cmd <CMD>
Переопределить команду контейнера. Может быть указано несколько раз.
--env <ENV>
Задать переменную окружения в формате KEY=VALUE.
Может быть указано несколько раз.
--network
Включить сетевой доступ внутри VM.
--output <OUTPUT>
Путь к выходному файлу внутри гостевой системы для сбора. Может быть указано несколько раз.
--vcpus <VCPUS>
Переопределить количество vCPU (для тестирования).
--memory <MEMORY>
Переопределить память в MiB (для тестирования).
--disk <DISK>
Переопределить размер диска в MiB (для тестирования).
--max-output-size <MAX_OUTPUT_SIZE>
Максимальный размер в байтах для собираемых stdout и stderr.
По умолчанию используется 25 MiB.
--max-file-count <MAX_FILE_COUNT>
Максимальное количество выходных файлов для декодирования.
По умолчанию используется 255.
--max-symlinks <MAX_SYMLINKS>
Максимальное количество символических ссылок, по которым следует переходить при разрешении путей,
соответствующее ограничению MAXSYMLINKS ядра Linux.
По умолчанию используется 40.
Используется только в не изолированном режиме, поэтому конфликтует с --sandbox.
--sandbox-log-level <SANDBOX_LOG_LEVEL>
Уровень логирования для процесса sandbox.
Требует --sandbox.
По умолчанию используется warning.
Тонкая настройка хоста
Перед каждым бенчмарком runner применяет тонкую настройку хоста, чтобы снизить шум измерений.
По умолчанию он отключает ASLR, NMI watchdog, SMT / hyper-threading и turbo boost;
устанавливает регулятор масштабирования частоты CPU в performance, swappiness в 10, а perf_event_paranoid в -1.
На хосте, который runner не настраивал с момента последней перезагрузки, флаги ниже вместо этого оставляют отдельные оптимизации на значениях хоста по умолчанию.
Тонкая настройка хоста сохраняется до перезагрузки хоста: каждый параметр записывается только во время выполнения, и runner не откатывает его при завершении, кроме удержания C-состояний, которое прекращается при завершении runner.
После запуска с тонкой настройкой флаг, который пропускает любой другой параметр, вступает в силу со следующей перезагрузки: до тех пор параметр сохраняет настроенное значение, а runner записывает это значение в журнал при запуске.
Перезагрузите общий хост после удаления runner.
--no-tuning
Отключить все оптимизации тонкой настройки хоста.
--aslr
Не отключать ASLR (по умолчанию: отключён для бенчмарков).
--nmi-watchdog
Не отключать NMI watchdog (по умолчанию: отключён для бенчмарков).
--smt
Не отключать SMT / hyper-threading (по умолчанию: отключён для бенчмарков).
--turbo
Не отключать turbo boost (по умолчанию: отключён для бенчмарков).
--numa-balancing
Не отключать автоматическую балансировку NUMA (по умолчанию: отключена для бенчмарков).
--timer-migration
Не отключать миграцию таймеров (по умолчанию: отключена для бенчмарков).
--soft-watchdog
Не отключать soft lockup watchdog (по умолчанию: отключён для бенчмарков).
--ksm
Не отключать KSM, kernel samepage merging (по умолчанию: отключён для бенчмарков).
--cstates
Не отключать глубокие C-состояния (по умолчанию: отключены для бенчмарков).
--no-irq-steering
Не направлять IRQ устройств и рабочие очереди ядра на служебные ядра CPU.
--no-cpuset-partition
Не отделять ядра CPU для бенчмарков от планировщика с помощью изолированного раздела cpuset.
--swappiness <SWAPPINESS>
Установить значение swappiness.
По умолчанию используется 10.
--governor <GOVERNOR>
Установить регулятор масштабирования частоты CPU.
По умолчанию используется performance.
--perf-event-paranoid <PERF_EVENT_PARANOID>
Установить значение perf_event_paranoid.
По умолчанию используется -1.
--thp <THP>
Установить режим transparent hugepage на хосте: never, madvise, always или leave.
Со значением leave текущий режим хоста сохраняется.
По умолчанию используется never.
--help
Вывести справку.