Como extrair métricas de desempenho do build

Informar um problema Mostrar fonte Por noite · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Provavelmente, todos os usuários do Bazel tiveram builds lentos ou lentos em comparação com é previsto. Melhorar o desempenho de builds individuais tem um valor particular para metas com impacto significativo, como:

  1. Principais destinos de desenvolvedores que são frequentemente iterados e (re)criados.

  2. Bibliotecas comuns amplamente dependentes de outros alvos.

  3. Uma segmentação representativa de uma classe de segmentações (por exemplo, regras personalizadas) o diagnóstico e a correção de problemas em um build podem ajudar a resolver em maior escala.

Uma etapa importante para melhorar o desempenho dos builds é entender onde recursos são gastos. Esta página lista as diferentes métricas que você pode coletar. Detalhamento do desempenho do build como usar essas métricas para detectar e corrigir problemas de desempenho do build.

Há algumas maneiras principais de extrair métricas dos builds do Bazel:

Protocolo de evento de build (BEP)

O Bazel gera vários buffers de protocolo build_event_stream.proto usando o Build Event Protocol (BEP), que podem ser agregadas por um back-end especificado por você. Dependendo dos casos de uso, você pode decidir agregar as métricas de várias maneiras, mas aqui vamos alguns conceitos e campos proto que seriam úteis de forma geral.

Comandos query / cquery / aquery do Bazel

O Bazel oferece três modos de consulta diferentes: query, cquery e aquery) que permitem aos usuários para consultar o gráfico de destino, o gráfico de destino configurado e o gráfico de ações respectivamente. A linguagem de consulta fornece pacote de funções utilizáveis em diferentes modos de consulta, o que permite personalizar as consultas de acordo com suas necessidades.

Perfis de trace JSON

Para cada invocação do Bazel semelhante a uma versão, o Bazel grava um perfil de rastreamento em JSON. . O perfil de trace JSON pode muito útil para entender rapidamente em que o Bazel passou o tempo durante a invocação.

Registro de execução

O registro de execução pode ajudar você a solucionar problemas e corrigir ausência de ocorrências em cache remoto devido a diferenças de máquina e ambiente ou ações não deterministas. Se você passar a sinalização --experimental_execution_log_spawn_metrics (disponível no Bazel 5.2), ele também contém métricas detalhadas de geração, tanto para ações executadas local e remotamente. Você pode usar essas métricas, por exemplo, para comparar o desempenho de máquinas locais e remotas ou para descobrir qual parte da execução da geração é consistentemente mais lenta do que o esperado (por exemplo devido à fila).

Registro do gráfico de execução

Embora o perfil de trace JSON contenha as informações do caminho crítico, às vezes você precisa de mais informações sobre o gráfico de dependências das ações executadas. A partir do Bazel 6.0, é possível transmitir as flags --experimental_execution_graph_log e --experimental_execution_graph_log_dep_type=all para gravar um registro sobre o as ações executadas e as interdependências deles.

Essas informações podem ser usadas para entender a ação de arrastar que é adicionada por um nó caminho crítico. A ação de arrastar é o tempo que pode ser economizado removendo um nó específico do gráfico de execução.

Os dados ajudam a prever o impacto das mudanças no gráfico de ação e build antes de realizá-las.

Comparação com o bazel-bench

O Bazel bench é ferramenta de comparativo de mercado para projetos Git para comparar o desempenho do build no seguintes casos:

  • Comparativo de mercado do projeto: comparação entre duas confirmações do git em uma uma única versão do Bazel. Usado para detectar regressões no seu build (geralmente por a adição de dependências).

  • Comparativo de mercado do Bazel:comparação entre duas versões do Bazel um único commit do git. Usado para detectar regressões no próprio Bazel (se você por manter / bifurcar o Bazel).

Os comparativos de mercado monitoram o tempo decorrido, o tempo de CPU e o tempo do sistema, além dos tempos do Bazel retidos tamanho de heap.

Também é recomendável executar o banco de dados do Bazel em máquinas físicas dedicadas que não executam outros processos para reduzir as fontes de variabilidade.