Cloudflare 稱讚Golang PGO 大幅節省CPU 資源
一年多前發布的Golang 1.20支援Profile Guided Optimizations (PGO),此後在Go 1.21 中得到了改進,Go二進位檔案的執行速度提高了2~7%,這要歸功於其他編譯器也採用的這種優化方法。 Cloudflare 的工程師本週發布了一篇博文,稱讚Go 的PGO 支援以及因此節省的CPU 資源。
編譯器的PGO支援非常好,前提是有足夠的樣本作為設定檔回饋給編譯器,這樣編譯器就能對程式碼進行適當的最佳化。編譯器可以根據收集到的設定檔/回饋做出更明智的最佳化,但與更容易應用的編譯器最佳化相比,這確實需要額外的步驟。就Golang 的PGO 而言,某些程式碼庫的改進幅度可高達14%。
Cloudflare 擁有一些基於Go 的服務,這些服務依賴全球成千上萬的CPU 核心,因此他們最近開始探索Golang 的PGO 對其基礎架構的影響。結果如下
這表明,在發布之後,我們使用的核心比發布之前少了約97 個,減少了約3.5%。這似乎與上游文件中給出的2% 到14% 之間的數字相符。
我們可以感受到的的第二個數字是一週內不同天相同時間的使用率。發布前7 天的平均使用率為3067.83 個內核,而發布後7 天的平均使用率為2996.78 個內核,節省了71 個CPU。雖然比不上我們省的97 個CPU,但也相當可觀了!這似乎證明了PGO 的好處–在完全不改變程式碼的情況下,我們成功地為自己節省了幾台伺服器的CPU 運算時間。
考慮到當今的伺服器成本以及總擁有成本(包括能源和冷卻成本),節省幾台伺服器的CPU 時間意義重大,這是以最少的投資實現的效率提升。今後,他們還將探索更多的剖析,透過BOLT 或LTO 優化和其他調整進一步優化。
更多詳情請上Cloudflare 部落格。