Golang 1.20, das vor mehr als einem Jahr veröffentlicht wurde, unterstützt ProfileGuidedOptimizations (PGO), das seitdem in Go 1.21 verbessert wurde. Die Ausführungsgeschwindigkeit von Go-Binärdateien hat sich dank dieser Optimierungsmethode, die auch von anderen Compilern übernommen wurde, um 2 bis 7 % erhöht. Die Ingenieure von Cloudflare haben diese Woche einen Blogbeitrag veröffentlicht, in dem sie die PGO-Unterstützung von Go und die daraus resultierenden CPU-Einsparungen loben.
Zugang:
Die PGO-Unterstützung des Compilers ist sehr gut, vorausgesetzt, dass genügend Samples als Konfigurationsdateien an den Compiler zurückgegeben werden, damit der Compiler den Code richtig optimieren kann. Der Compiler kann auf der Grundlage des gesammelten Profils/Feedbacks intelligentere Optimierungen vornehmen, dies erfordert jedoch im Vergleich zu den einfacher anzuwendenden Compiler-Optimierungen zusätzliche Schritte. Im Fall von Golangs PGO kann die Verbesserung bei einigen Codebasen bis zu 14 % betragen.
Cloudflare verfügt über einige Go-basierte Dienste, die auf Tausenden von CPU-Kernen auf der ganzen Welt basieren. Deshalb haben sie vor Kurzem damit begonnen, die Auswirkungen von Golangs PGO auf ihre Infrastruktur zu untersuchen. Die Ergebnisse sind wie folgt
Die zweite Zahl, die wir spüren können, ist die gleichzeitige Nutzung an verschiedenen Wochentagen. Die durchschnittliche Nutzung in den 7 Tagen vor der Veröffentlichung betrug 3067,83 Kerne, während die durchschnittliche Nutzung in den 7 Tagen nach der Veröffentlichung 2996,78 Kerne betrug, wodurch 71 CPUs eingespart wurden. Obwohl es nicht so gut ist wie die 97 CPUs, die wir eingespart haben, ist es dennoch ziemlich beeindruckend! Dies scheint die Vorteile von PGO zu beweisen – ohne überhaupt den Code zu ändern, konnten wir uns mehrere Server CPU-Rechenzeit sparen.
Angesichts der heutigen Serverkosten und Gesamtbetriebskosten (einschließlich Energie- und Kühlkosten) ist die Einsparung der CPU-Zeit einiger Server erheblich, ein Effizienzgewinn, der mit minimalen Investitionen erreicht wird. In Zukunft werden sie auch mehr Profiling untersuchen und durch BOLT- oder LTO-Optimierung und andere Anpassungen weiter optimieren.
Weitere Details im Cloudflare-Blog.