A empresa Cloudflare diz que Golang PGO proporciona economia significativa de CPU. A versão do Golang 1.20 saiu há mais de um ano. Ele veio com suporte para Profile Guided Optimizations (PGO). Além disso, desde então, recebeu melhorias com o Go 1.21 para binários Go 2~7% mais rápidos. Tudo isso graças a essa abordagem de otimização também encontrada com outros compiladores.
“O Golang 1.20 introduziu o suporte para Profile Guided Optimization (PGO) para o compilador go. Isso permite orientar o compilador a introduzir otimizações baseadas no comportamento do mundo real do seu sistema. Na equipe de observabilidade da Cloudflare, mantemos alguns serviços baseados em Go que usam milhares de núcleos em todo o mundo, então mesmo a economia de 2-7% anunciada reduziria drasticamente nossa pegada de CPU, efetivamente de graça.
Isso reduziria o uso da CPU para nossos serviços internos, liberando esses recursos para atender às solicitações dos clientes, fornecendo melhorias mensuráveis para a experiência do cliente. Neste post, abordarei o processo que criamos para experimentar o PGO – coletando perfis representativos em nossa infraestrutura de produção e, em seguida, implantando novos binários PGO e medindo as economias de CPU.”
Os engenheiros da Cloudflare publicaram um post no blog esta semana elogiando o suporte PGO da Go e a economia de CPU que estão vendo como resultado.
O suporte ao PGO do compilador é ótimo, supondo que você tenha uma coleção suficiente de amostras para servir como o perfil a ser retroalimentado no compilador para que ele possa otimizar adequadamente o código.
O compilador pode fazer otimizações mais informadas com base no perfil/feedback coletado, mas leva à etapa extra envolvida em comparação com otimizações de compilador mais facilmente aplicadas. No caso do PGO de Golang, algumas bases de código podem ver até 14% de melhoria.
Cloudflare elogia Golang PGO por economia significativa de CPU
Com a Cloudflare tendo alguns serviços baseados em Go que dependem de milhares de núcleos de CPU em todo o mundo, eles recentemente começaram a explorar o impacto PGO da Golang em sua infraestrutura. Seu resultado:
“Isso indica que, após o lançamento, estamos usando ~97 núcleos a menos do que antes do lançamento, uma redução de ~3,5%. Isso parece estar em linha com a documentação a montante que dá números entre 2% e 14%.
O segundo número que podemos observar é o uso na mesma hora do dia em diferentes dias da semana. O uso médio para os 7 dias anteriores ao lançamento foi de 3067,83 núcleos, enquanto os 7 dias após o lançamento foram 2996,78, uma economia de 71 CPUs. Não é tão bom quanto nossas economias de CPU 97, mas ainda assim bastante substancial!
Isso parece provar os benefícios do PGO – sem alterar o código, conseguimos economizar vários servidores que valem tempo de CPU.”
Considerando os custos atuais do servidor, bem como o TCO com custos de energia e refrigeração, economizar vários servidores que valem tempo de CPU é significativo.
Trata-se de um ganho de eficiência com o mínimo de investimento necessário. No futuro, eles também explorarão mais criação de perfis, mais otimizações via otimizações BOLT ou LTO e outros ajustes. Mais detalhes no blog da Cloudflare.