Como rastrear tamanhos binários C++ em CI

Everett Pompeii

Everett Pompeii


Os tamanhos de binários podem aumentar com o tempo, especialmente em C++. Benchmarking Contínuo é a prática de executar benchmarks em cada conjunto de alterações para garantir que as mudanças não introduzam regressões de desempenho. Você pode tratar os tamanhos de binários como um benchmark e monitorá-los no CI para detectar grandes tamanhos de binários. A maneira mais fácil de implementar Benchmarking Contínuo para tamanhos de binário C++ é usar o Bencher.

O que é Bencher?

Bencher é um conjunto de ferramentas de benchmarking contínuo. Já teve algum impacto de regressão de desempenho nos seus usuários? Bencher poderia ter prevenido isso. Bencher permite que você detecte e previna regressões de desempenho antes que sejam mescladas.

  • Execute: Execute seus benchmarks localmente ou no CI usando os exatos mesmos runners bare metal e suas ferramentas de benchmarking favoritas. O CLI bencher orquestra a execução dos seus benchmarks em bare metal e armazena seus resultados.
  • Rastreie: Acompanhe os resultados de seus benchmarks ao longo do tempo. Monitore, consulte e faça gráficos dos resultados usando o console web do Bencher baseado na branch de origem, testbed e medida.
  • Capture: Capture regressões de desempenho localmente ou no CI usando o exato mesmo hardware bare metal. Bencher usa análises personalizáveis e de última geração para detectar regressões de desempenho antes que sejam mescladas.

Pelos mesmos motivos que os testes de unidade são executados para prevenir regressões de funcionalidades, benchmarks deveriam ser executados com o Bencher para prevenir regressões de desempenho. Bugs de desempenho são bugs!

Passos para o Bencher Cloud

  1. Crie uma conta no Bencher Cloud.
  2. Crie um token de API e adicione-o ao seu CI como um segredo.
  3. Crie um fluxo de trabalho para o seu CI, como GitHub Actions ou GitLab CI/CD.
  4. Instale o Bencher CLI no seu fluxo de trabalho CI.
  5. Compile seu código C++ com o subcomando bencher run em seu fluxo de trabalho CI usando a opção --file-size definida para o caminho de saída do seu binário juntamente com o adaptador json.

Passos para Bencher Self-Hosted

  1. Crie uma instância Bencher Self-Hosted.
  2. Crie uma conta em sua instância Bencher Self-Hosted.
  3. Crie um token de API e adicione-o ao seu CI como um segredo.
  4. Crie um fluxo de trabalho para o seu CI, como GitHub Actions ou GitLab CI/CD.
  5. Instale o Bencher CLI no fluxo de trabalho do seu CI. Certifique-se de que a versão do CLI corresponda à versão da sua instância Bencher Self-Hosted.
  6. Compile seu código C++ com o subcomando bencher run em seu fluxo de trabalho CI usando a opção --file-size definida para o caminho de saída do seu binário juntamente com o adaptador json e configurando a opção --host para a URL de sua instância Bencher Self-Hosted.

⚖️ Tamanho do Arquivo

O subcomando CLI bencher run pode ser utilizado para acompanhar o tamanho do arquivo (ou seja, tamanho do binário) de seus entregáveis com a opção --file-size. A opção --file-size espera um caminho de arquivo para o arquivo cujo tamanho será medido. Por baixo dos panos, bencher run exibe os resultados comoFormato de Métrica Bencher (BMF) JSON. Portanto, é uma boa prática utilizar explicitamente o adaptador json. Para mais detalhes, veja como acompanhar o tamanho do arquivo.

A Medida file-size (ou seja, bytes (B)) é coletada. Apenas o valor do tamanho do arquivo (ou seja, valor) está disponível. Nem lower_value nem upper_value são coletados. A Medida file-size não é criada por padrão para todos os Projetos. No entanto, quando você usa a opção --file-size, essa Medida será automaticamente criada para o seu Projeto. A opção --file-size pode ser usada várias vezes para rastrear múltiplos tamanhos de arquivo.

Terminal window
bencher run --file-size ./binary --adapter json "make build"

Acompanhe seus benchmarks no CI

Alguma vez teve uma regressão de desempenho que afetou seus usuários? O Bencher poderia ter evitado que isso acontecesse com o benchmarking contínuo.

🤖 Este documento foi traduzido automaticamente por IA. Pode não ser preciso e pode conter erros. Se você encontrar algum erro, abra um problema no GitHub.