Golang 1.20, lanzado hace más de un año, admite ProfileGuidedOptimizations (PGO), que desde entonces se ha mejorado en Go 1.21. La velocidad de ejecución de los binarios de Go ha aumentado entre un 2% y un 7%, gracias a este método de optimización también adoptado por otros compiladores. Los ingenieros de Cloudflare publicaron una publicación de blog esta semana elogiando el soporte PGO de Go y los ahorros de CPU resultantes.

acceso:

75% de descuento en NordVPN + 3 mesesTambién está el administrador de contraseñas NordPass.

El soporte PGO del compilador es muy bueno, siempre que se envíen suficientes muestras al compilador como archivos de configuración para que el compilador pueda optimizar adecuadamente el código. El compilador puede realizar optimizaciones más inteligentes basadas en el perfil/comentarios recopilados, pero esto requiere pasos adicionales en comparación con las optimizaciones del compilador más fáciles de aplicar. En el caso del PGO de Golang, la mejora puede llegar al 14% para algunas bases de código.

Cloudflare tiene algunos servicios basados ​​en Go que dependen de miles de núcleos de CPU en todo el mundo, por lo que recientemente comenzaron a explorar el impacto del PGO de Golang en su infraestructura. Los resultados son los siguientes

Esto muestra que después del lanzamiento estamos usando alrededor de 97 núcleos menos que antes del lanzamiento, una reducción de aproximadamente el 3,5%. Esto parece ser consistente con las cifras dadas en la documentación upstream de entre el 2% y el 14%.

El segundo número que podemos sentir es el uso al mismo tiempo en diferentes días de la semana. El uso promedio en los 7 días anteriores al lanzamiento fue de 3067,83 núcleos, mientras que el uso promedio en los 7 días posteriores al lanzamiento fue de 2996,78 núcleos, lo que ahorró 71 CPU. Aunque no es tan bueno como las 97 CPU que guardamos, ¡sigue siendo bastante impresionante! Esto parece demostrar los beneficios de PGO: sin cambiar el código en absoluto, logramos ahorrarnos tiempo de procesamiento de CPU en varios servidores.

Teniendo en cuenta los costos actuales de los servidores y el costo total de propiedad (incluidos los costos de energía y refrigeración), ahorrar tiempo de CPU en algunos servidores es significativo, una ganancia de eficiencia que se logra con una inversión mínima. En el futuro, también explorarán más perfiles y optimizarán aún más mediante la optimización BOLT o LTO y otros ajustes.

Más detalles en el blog de Cloudflare.