Bencher CLI runner


O binário runner é o agente que executa Jobs de benchmark Bare Metal. É a referência detalhada para configurar um Self-Hosted Runner. O binário fornece dois subcomandos:

  • runner up: Inicia o runner, fazendo polling e executando Jobs de benchmark.
  • runner run: Baixa uma Image e a executa uma vez no host local, para testes.

🐰 O binário runner é distinto dos subcomandos bencher runner. O binário runner opera um host Runner, enquanto bencher runner gerencia recursos Runner através da REST API.


runner up

Inicia o runner, fazendo polling e executando Jobs de benchmark. Este é o comando de longa duração usado para operar um Self-Hosted Runner. O runner abre uma única conexão WebSocket ao servidor de API, reivindica Jobs que correspondam às suas Specs, os executa e reporta os resultados de volta. O runner escreve seu log no stderr como JSON, um objeto por linha, e registra a saída de um Job apenas como contagens de bytes.

runner up [OPTIONS]

Opções

--host <HOST>

O servidor de API Bencher ao qual se conectar. Por padrão, https://api.bencher.dev é usado. Também pode ser definido com a variável de ambiente BENCHER_HOST.

--runner <RUNNER>

O UUID ou slug do Runner sob o qual operar. Também pode ser definido com a variável de ambiente BENCHER_RUNNER.

--key <KEY>

A chave de autenticação do Runner (bencher_runner_...) retornada quando o Runner foi criado. Também pode ser definida com a variável de ambiente BENCHER_RUNNER_KEY.

--poll-timeout <POLL_TIMEOUT>

O timeout de long-poll em segundos enquanto aguarda um Job, entre 1 e 900. Por padrão, 55 é usado.

--state-dir <STATE_DIR>

O diretório de estado persistente do Runner. Deve ser um caminho absoluto. A jail que confina o sandbox é criada sob este diretório, e as jails deixadas por um encerramento não limpo são removidas dele antes de cada Job com sandbox. Cada jail contém um sistema de arquivos raiz completo do convidado e uma cópia do binário da microVM, e um Runner executa os seus Jobs um de cada vez, portanto este diretório precisa de capacidade real para uma jail. Com --image-cache-size, ele também guarda o cache de Image, até esse tamanho. Um host executa um único Runner por vez, seja qual for o seu diretório de estado: um Runner iniciado como root mantém o bloqueio /run/bencher/runner.lock enquanto está em execução, e um segundo iniciado como root encerra imediatamente com um erro que nomeia esse bloqueio; um Runner que não é root não consegue abrir o bloqueio e é executado sem ele. Ao iniciar, e de novo antes de cada Job com sandbox, um Runner iniciado como root encerra qualquer processo ainda em execução em um cgroup sob /sys/fs/cgroup/bencher, como a sandbox de um Runner encerrado no meio de um Job, seja qual for o diretório de estado desse Runner. Um sistema de arquivos dedicado ou uma montagem tmpfs é suportado e recomendado: mantém essa carga de escrita fora do disco do sistema, e um sistema de arquivos recém-criado é aceito mesmo que venha com um diretório lost+found. O sistema de arquivos não pode estar montado com nodev ou noexec, como /tmp, /dev/shm e /run costumam estar, então monte para ele um tmpfs sem essas opções. O próprio diretório de estado pode ser um link simbólico criado pelo root para um sistema de arquivos assim, como /var/lib/bencher-runner apontando para um disco dedicado. O link só é seguido quando o diretório que o contém só pode ser escrito pelo root, ele aponta diretamente para o seu destino final, e esse destino já existe em um caminho gravável apenas pelo root; um link cujo destino ainda não existe é recusado, então crie o destino primeiro. Por padrão, /var/lib/bencher-runner é usado. Também pode ser definido com a variável de ambiente BENCHER_STATE_DIR.

--jail-uid <JAIL_UID>

O ID de usuário sem privilégios para o qual o processo do sandbox muda. Por padrão, 61016 é usado. Não pode ser 0. Um processo no host que seja dono desse ID de usuário pode enviar sinais ao sandbox, portanto defina um ID que o host não destine a mais nada. Também pode ser definido com a variável de ambiente BENCHER_JAIL_UID.

--jail-gid <JAIL_GID>

O ID de grupo sem privilégios para o qual o processo do sandbox muda. Por padrão, 61016 é usado. Não pode ser 0. Também pode ser definido com a variável de ambiente BENCHER_JAIL_GID.

--danger-allow-no-sandbox

Permite executar Jobs sem um Sandbox. Sem essa flag, um Job cuja Spec não tem Sandbox é rejeitado em tempo de execução. Jobs sem sandbox rodam diretamente no host, então habilite isso apenas para cargas de trabalho confiáveis. Também pode ser definida com a variável de ambiente BENCHER_DANGER_ALLOW_NO_SANDBOX.

--sandbox-log-level <SANDBOX_LOG_LEVEL>

O nível de log para o processo do sandbox. Por padrão, warning é usado.

--no-raid-pause

Continuar aceitando Jobs enquanto um array RAID md do host faz ressincronização, recuperação, verificação, reparo ou remodelação. Por padrão, o Runner verifica seus arrays md antes de pedir cada Job, e enquanto algum deles executa uma dessas operações ele pausa: não aceita nenhum Job novo até a sincronização terminar, e nunca interrompe um Job que já está em execução. Um Runner pausado continua conectado e continua se atualizando.

--no-auto-update

Desabilita as atualizações automáticas do servidor. Por padrão, o runner se atualiza entre os Jobs quando o servidor oferece uma nova versão. Também pode ser definida com a variável de ambiente BENCHER_NO_AUTO_UPDATE.

--update-channel <UPDATE_CHANNEL>

O canal de atualização para as atualizações automáticas, stable ou canary. Por padrão, stable é usado. O canal stable atualiza para releases versionadas. O canal canary acompanha o build canary contínuo, que é reconstruído sempre que o runner muda em um deploy do Bencher Cloud. Também pode ser definido com a variável de ambiente BENCHER_UPDATE_CHANNEL. Conflita com --no-auto-update.

--max-download-size <MAX_DOWNLOAD_SIZE>

O tamanho máximo de download em bytes para binários de auto-atualização. Por padrão, 500 MiB é usado. Conflita com --no-auto-update.

--image-cache-size <IMAGE_CACHE_SIZE>

O tamanho máximo em bytes dos blobs de Image que o Runner mantém entre Jobs. O Runner mantém os blobs de configuração e de camadas de cada Image que baixa em blobs, sob o seu --state-dir, de modo que um Job baixa apenas os blobs que o Runner ainda não tem, embora ainda busque o manifesto da sua Image no registro todas as vezes. Entre Jobs, o Runner remove os blobs usados há mais tempo até que o restante caiba neste tamanho. Ao iniciar, o Runner cria o armazenamento e o torna seu, e se não conseguir, encerra imediatamente com um erro que nomeia o diretório. Por padrão, ou com 0, o Runner não mantém blobs entre Jobs e remove os que tiver mantido antes. Também pode ser definido com a variável de ambiente BENCHER_IMAGE_CACHE_SIZE.

--max-output-size <MAX_OUTPUT_SIZE>

O tamanho máximo em bytes para stdout e stderr coletados. Por padrão, 25 MiB é usado.

--max-file-count <MAX_FILE_COUNT>

O número máximo de arquivos de saída a decodificar. Por padrão, 255 é usado.

O número máximo de symlinks a seguir durante a resolução de caminho, correspondendo ao limite MAXSYMLINKS do kernel Linux. Por padrão, 40 é usado. Usado apenas no modo sem sandbox.

Ajuste do Host

Antes de cada benchmark, o runner aplica ajustes ao host para reduzir o ruído de medição. Por padrão, ele desabilita ASLR, o NMI watchdog, SMT / hyper-threading e o turbo boost; define o governor de escalonamento de CPU como performance, a swappiness como 10 e perf_event_paranoid como -1. Em um host que o runner não ajustou desde a última reinicialização, as flags abaixo mantêm otimizações individuais nos padrões do host.

O ajuste do host persiste até que o host seja reiniciado: cada configuração é uma escrita apenas em tempo de execução que o runner não reverte ao sair, exceto a retenção dos C-states, que termina quando o runner sai. Após uma execução com ajuste, uma flag que pula qualquer outra configuração passa a valer a partir da próxima reinicialização: até lá, a configuração mantém o valor ajustado, e o runner registra esse valor ao iniciar. Reinicie um host compartilhado depois de remover o runner.

--no-tuning

Desabilita todas as otimizações de ajuste do host.

--aslr

Não desabilita o ASLR (padrão: desabilitado para benchmarks).

--nmi-watchdog

Não desabilita o NMI watchdog (padrão: desabilitado para benchmarks).

--smt

Não desabilita o SMT / hyper-threading (padrão: desabilitado para benchmarks).

--turbo

Não desabilita o turbo boost (padrão: desabilitado para benchmarks).

--numa-balancing

Não desabilita o balanceamento NUMA automático (padrão: desabilitado para benchmarks).

--timer-migration

Não desabilita a migração de timers (padrão: desabilitada para benchmarks).

--soft-watchdog

Não desabilita o soft lockup watchdog (padrão: desabilitado para benchmarks).

--ksm

Não desabilita o KSM, kernel samepage merging (padrão: desabilitado para benchmarks).

--cstates

Não desabilita os C-states profundos (padrão: desabilitados para benchmarks).

--no-irq-steering

Não direciona as IRQs de dispositivos e as workqueues do kernel para os núcleos de housekeeping.

--no-cpuset-partition

Não desacopla os núcleos de benchmark do escalonador por meio de uma partição cpuset isolada.

--swappiness <SWAPPINESS>

Define o valor de swappiness. Por padrão, 10 é usado.

--governor <GOVERNOR>

Define o governor de escalonamento de CPU. Por padrão, performance é usado.

--perf-event-paranoid <PERF_EVENT_PARANOID>

Define o valor de perf_event_paranoid. Por padrão, -1 é usado.

--thp <THP>

Define o modo de transparent hugepage do host: never, madvise, always ou leave. Use leave para manter o modo atual do host. Por padrão, never é usado.

--help

Imprime a ajuda.


runner run

Baixa uma Image, cria um rootfs e a executa uma vez no host local. Diferente de runner up, isso não se conecta a um servidor de API nem reivindica um Job. Ele executa uma única Image diretamente, o que é útil para testar e depurar um host Runner ou uma Image antes de enviar Jobs reais. A saída da Image vai para stdout e stderr como está, e o log do próprio runner vai para stderr como JSON, um objeto por linha.

runner run --image <IMAGE> [OPTIONS]

Opções

--image <IMAGE>

A OCI Image a executar, como um caminho local ou uma referência de registro.

--token <TOKEN>

Um token JWT para autenticação no registro ao baixar a Image.

--sandbox <SANDBOX>

O modo de sandbox para a execução do benchmark. Use firecracker para uma microVM Firecracker (apenas Linux). Omita para execução no host sem sandbox.

--timeout <TIMEOUT>

O timeout de execução em segundos, compartilhado por todas as iterações desde o início da execução. Por padrão, 300 é usado.

--state-dir <STATE_DIR>

O diretório de estado persistente do Runner. Deve ser um caminho absoluto. A jail que confina o sandbox é criada sob este diretório, e as jails deixadas por um encerramento não limpo são removidas dele antes de cada Job com sandbox. Cada jail contém um sistema de arquivos raiz completo do convidado e uma cópia do binário da microVM, e um Runner executa os seus Jobs um de cada vez, portanto este diretório precisa de capacidade real para uma jail. Um host executa um único Runner por vez, seja qual for o seu diretório de estado: um Runner iniciado como root mantém o bloqueio /run/bencher/runner.lock enquanto está em execução, e um segundo iniciado como root encerra imediatamente com um erro que nomeia esse bloqueio; um Runner que não é root não consegue abrir o bloqueio e é executado sem ele. Ao iniciar, e de novo antes de cada Job com sandbox, um Runner iniciado como root encerra qualquer processo ainda em execução em um cgroup sob /sys/fs/cgroup/bencher, como a sandbox de um Runner encerrado no meio de um Job, seja qual for o diretório de estado desse Runner. Um sistema de arquivos dedicado ou uma montagem tmpfs é suportado e recomendado: mantém essa carga de escrita fora do disco do sistema, e um sistema de arquivos recém-criado é aceito mesmo que venha com um diretório lost+found. O sistema de arquivos não pode estar montado com nodev ou noexec, como /tmp, /dev/shm e /run costumam estar, então monte para ele um tmpfs sem essas opções. O próprio diretório de estado pode ser um link simbólico criado pelo root para um sistema de arquivos assim, como /var/lib/bencher-runner apontando para um disco dedicado. O link só é seguido quando o diretório que o contém só pode ser escrito pelo root, ele aponta diretamente para o seu destino final, e esse destino já existe em um caminho gravável apenas pelo root; um link cujo destino ainda não existe é recusado, então crie o destino primeiro. Por padrão, /var/lib/bencher-runner é usado. Também pode ser definido com a variável de ambiente BENCHER_STATE_DIR.

--jail-uid <JAIL_UID>

O ID de usuário sem privilégios para o qual o processo do sandbox muda. Por padrão, 61016 é usado. Não pode ser 0. Um processo no host que seja dono desse ID de usuário pode enviar sinais ao sandbox, portanto defina um ID que o host não destine a mais nada. Também pode ser definido com a variável de ambiente BENCHER_JAIL_UID.

--jail-gid <JAIL_GID>

O ID de grupo sem privilégios para o qual o processo do sandbox muda. Por padrão, 61016 é usado. Não pode ser 0. Também pode ser definido com a variável de ambiente BENCHER_JAIL_GID.

--iter <ITER>

O número de iterações de benchmark a executar. Por padrão, 1 é usado.

--allow-failure

Permite uma falha de benchmark sem interromper as iterações restantes. Se o tempo se esgotar, a execução ainda termina por timeout. Uma Image que não pode ser baixada nem preparada também encerra a execução.

--entrypoint <ENTRYPOINT>

Sobrescreve o entrypoint do contêiner. Pode ser especificado múltiplas vezes.

--cmd <CMD>

Sobrescreve o comando do contêiner. Pode ser especificado múltiplas vezes.

--env <ENV>

Define uma variável de ambiente no formato KEY=VALUE. Pode ser especificado múltiplas vezes.

--network

Habilita o acesso à rede dentro da VM.

--output <OUTPUT>

Um caminho de arquivo de saída dentro do guest a coletar. Pode ser especificado múltiplas vezes.

--vcpus <VCPUS>

Sobrescreve o número de vCPUs (para testes).

--memory <MEMORY>

Sobrescreve a memória em MiB (para testes).

--disk <DISK>

Sobrescreve o tamanho do disco em MiB (para testes).

--max-output-size <MAX_OUTPUT_SIZE>

O tamanho máximo em bytes para stdout e stderr coletados. Por padrão, 25 MiB é usado.

--max-file-count <MAX_FILE_COUNT>

O número máximo de arquivos de saída a decodificar. Por padrão, 255 é usado.

O número máximo de symlinks a seguir durante a resolução de caminho, correspondendo ao limite MAXSYMLINKS do kernel Linux. Por padrão, 40 é usado. Usado apenas no modo sem sandbox, então conflita com --sandbox.

--sandbox-log-level <SANDBOX_LOG_LEVEL>

O nível de log para o processo do sandbox. Requer --sandbox. Por padrão, warning é usado.

Ajuste do Host

Antes de cada benchmark, o runner aplica ajustes ao host para reduzir o ruído de medição. Por padrão, ele desabilita ASLR, o NMI watchdog, SMT / hyper-threading e o turbo boost; define o governor de escalonamento de CPU como performance, a swappiness como 10 e perf_event_paranoid como -1. Em um host que o runner não ajustou desde a última reinicialização, as flags abaixo mantêm otimizações individuais nos padrões do host.

O ajuste do host persiste até que o host seja reiniciado: cada configuração é uma escrita apenas em tempo de execução que o runner não reverte ao sair, exceto a retenção dos C-states, que termina quando o runner sai. Após uma execução com ajuste, uma flag que pula qualquer outra configuração passa a valer a partir da próxima reinicialização: até lá, a configuração mantém o valor ajustado, e o runner registra esse valor ao iniciar. Reinicie um host compartilhado depois de remover o runner.

--no-tuning

Desabilita todas as otimizações de ajuste do host.

--aslr

Não desabilita o ASLR (padrão: desabilitado para benchmarks).

--nmi-watchdog

Não desabilita o NMI watchdog (padrão: desabilitado para benchmarks).

--smt

Não desabilita o SMT / hyper-threading (padrão: desabilitado para benchmarks).

--turbo

Não desabilita o turbo boost (padrão: desabilitado para benchmarks).

--numa-balancing

Não desabilita o balanceamento NUMA automático (padrão: desabilitado para benchmarks).

--timer-migration

Não desabilita a migração de timers (padrão: desabilitada para benchmarks).

--soft-watchdog

Não desabilita o soft lockup watchdog (padrão: desabilitado para benchmarks).

--ksm

Não desabilita o KSM, kernel samepage merging (padrão: desabilitado para benchmarks).

--cstates

Não desabilita os C-states profundos (padrão: desabilitados para benchmarks).

--no-irq-steering

Não direciona as IRQs de dispositivos e as workqueues do kernel para os núcleos de housekeeping.

--no-cpuset-partition

Não desacopla os núcleos de benchmark do escalonador por meio de uma partição cpuset isolada.

--swappiness <SWAPPINESS>

Define o valor de swappiness. Por padrão, 10 é usado.

--governor <GOVERNOR>

Define o governor de escalonamento de CPU. Por padrão, performance é usado.

--perf-event-paranoid <PERF_EVENT_PARANOID>

Define o valor de perf_event_paranoid. Por padrão, -1 é usado.

--thp <THP>

Define o modo de transparent hugepage do host: never, madvise, always ou leave. Use leave para manter o modo atual do host. Por padrão, never é usado.

--help

Imprime a ajuda.



Published: Fri, June 19, 2026 at 8:00:00 AM UTC | Last Updated: Fri, October 9, 2026 at 3:22:48 PM UTC