Golang 1.20, lançado há mais de um ano, suporta ProfileGuidedOptimizations (PGO), que desde então foi aprimorado no Go 1.21. A velocidade de execução dos binários Go aumentou de 2 a 7%, graças a este método de otimização também adotado por outros compiladores. Os engenheiros da Cloudflare publicaram uma postagem no blog esta semana elogiando o suporte PGO do Go e a economia de CPU resultante.
acesso:
O suporte PGO do compilador é muito bom, desde que amostras suficientes sejam retornadas ao compilador como arquivos de configuração para que o compilador possa otimizar o código adequadamente. O compilador pode fazer otimizações mais inteligentes com base no perfil/feedback coletado, mas isso requer etapas extras em comparação com as otimizações do compilador mais fáceis de aplicar. No caso do PGO de Golang, a melhoria pode chegar a 14% para algumas bases de código.
A Cloudflare tem alguns serviços baseados em Go que dependem de milhares de núcleos de CPU em todo o mundo, então recentemente eles começaram a explorar o impacto do PGO de Golang em sua infraestrutura. Os resultados são os seguintes
O segundo número que podemos sentir é o uso no mesmo horário em dias diferentes da semana. O uso médio nos 7 dias anteriores ao lançamento foi de 3.067,83 núcleos, enquanto o uso médio nos 7 dias após o lançamento foi de 2.996,78 núcleos, economizando 71 CPUs. Embora não seja tão bom quanto os 97 CPUs que economizamos, ainda é bastante impressionante! Isso parece provar os benefícios do PGO - sem alterar o código, conseguimos economizar vários servidores de tempo de computação da CPU.
Considerando os custos atuais dos servidores e o custo total de propriedade (incluindo custos de energia e resfriamento), economizar o tempo de CPU de alguns servidores é significativo, um ganho de eficiência alcançado com investimento mínimo. No futuro, eles também explorarão mais perfis e otimizarão ainda mais por meio da otimização BOLT ou LTO e outros ajustes.
Mais detalhes no blog da Cloudflare.