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 subcomandosbencher runner. O bináriorunneropera um host Runner, enquantobencher runnergerencia 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.
--max-symlinks <MAX_SYMLINKS>
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.
--max-symlinks <MAX_SYMLINKS>
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.