您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何定制Go編譯器”,在日常操作中,相信很多人在如何定制Go編譯器問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何定制Go編譯器”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
Uber 有數千個后端服務是使用 Go 實現的,它們運行在數百萬個 CPU 內核上。因此,對于 Uber 來說,詳細準確掌握 CPU 瓶頸至關重要。這不僅為了減少服務延遲,同時也能提高計算機運行效率。Uber 這個量級的規模,要求對代碼和微觀結構的影響有深入的了解。
其實說定制 Go 編譯器有點不準確。主要是基于以上規模和要求,雖然 Go 內置了 Profiler,但這個 CPU Profiler 在基于 Linux 的系統上有嚴重的限制(也許在其他操作系統也有此問題,但 Uber 使用的是 Linux,其他機器并沒有測試驗證),同時內置的 Profiler 缺少掌握 CPU 瓶頸所需要的許多細節。
基于這些問題,Uber fork 了一份 github.com/golang/go 代碼,在其上建立一個定制的 Go Profiler,以便更符合 Uber 的需求和 Uber 的商業運營規模。
具體來說,Uber 通過將豐富的硬件性能監視特性集成到 Go 的缺省 pprof 分析器中來增強它。這提供了幾個關鍵好處:
能夠獲得更準確和精確的 Go 程序分析文件(profiles);
監控各種 CPU 事件的能力,比如緩存丟失、套接字間(NUMA)通信、 CPU 分支錯誤預測等等;
能夠以非常高的采樣頻率(最高可達 10 微秒)監控 Go 程序;
所以,Uber 定制的「Go 編譯器」其實只是增強了 Profiler。注意,對 Profiler 的使用并不需要改變,也就是說,對外的接口、使用的工具和分析都沒有變(比如堆棧屬性、調用圖和火焰圖等),只是增加了更多的數據。
增強版的 Profiler,Uber 稱之為 pprof++,這是帶有硬件性能計數器的解決方案。
具體增加了哪些 CPU 事件,Uber 給了一張圖,公開了最常見的一些事件。
到此,關于“如何定制Go編譯器”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。