高清视频在线观看免费播放器-伊人日本-色九月综合-18禁止看的免费污网站-免费观看性行为视频的网站-天天碰天天操-久久精品国产欧美日韩99热-中文字幕在线视频不卡-国产偷人妻精品一区二区在线-国内精品久-伊人影院在线看-密臀av一区-久久综合五月丁香久久激情-福利一区福利二区-gg国产精品国内免费观看-国产精品 高清 尿 小便 嘘嘘

當前位置: 首頁 >觀察 > 正文

當前速讀:PGO前瞻

2023-06-25 17:31:02 來源:博客園

原文在這里。


【資料圖】

原文發布于2023年2月8日

在構建Go二進制文件時,Go編譯器會進行優化,以盡可能生成性能最佳的二進制文件。例如,常量傳播可以在編譯時對常量表達式進行求值,避免了運行時的計算開銷;逃逸分析可以避免對局部作用域對象進行堆分配,從而減少了垃圾回收的負擔;內聯則將簡單函數的代碼體復制到調用處,通常能夠進一步優化調用處的代碼(例如額外的常量傳播或更好的逃逸分析)。

Go在發布的每個版本中都會改進優化,但這并不總是一項容易的任務。某些優化是可調節的,但編譯器不能對每個函數都進行過度激進的優化,因為過于激進的優化實際上可能會損害性能或導致過長的構建時間。其他優化要求編譯器對函數中的“常見”和“不常見”路徑進行判斷。編譯器必須根據靜態啟發式規則進行最佳猜測,因為它無法在運行時知道哪些情況將是常見的。

但現在編譯器可以在運行時知道哪些情況是常見的了。

在沒有關于代碼在生產環境中如何使用的確切信息的情況下,編譯器只能對包的源代碼進行操作。但是我們確實有一種工具來評估生產行為:性能分析。如果我們向編譯器提供一個性能分析文件,它就可以做出更明智的決策:對最常用的函數進行更積極的優化,或更準確地選擇常見情況。

使用應用程序行為的性能分析文件進行編譯器優化的方法被稱為基于性能分析的優化(Profile-Guided Optimization,簡稱PGO,也被稱為反饋導向優化(Feedback-Directed Optimization,簡稱FDO))。

PGO/FDO通過收集和分析運行時的性能數據,使得編譯器能夠更準確地了解代碼的執行特性,從而進行更精細的優化。通過結合靜態分析和動態運行時數據,PGO/FDO可以產生更優化的代碼,提高程序的性能和效率。這種技術在提高大型復雜應用程序的性能方面非常有用,特別是對于高度頻繁執行的代碼路徑進行優化。

Go 1.20中包含了PGO的初步支持,作為預覽版本提供。請參閱profile-guided optimization user guide以獲取完整的文檔。盡管距離在生產環境中使用還有一段距離,但仍希望大家在工作中使用,并反饋遇到的問題或意見。

示例

以Markdown轉HTML服務為例:用戶通過/render上傳Markdown文件,然后接收轉換后的HTML文件。這里使用gitlab.com/golang-commonmark/markdown。

創建項目

$ go mod init example.com/markdown  $ go get gitlab.com/golang-commonmark/markdown  

main.go內容:

package mainimport ("bytes""io""log""net/http"_ "net/http/pprof""gitlab.com/golang-commonmark/markdown")func render(w http.ResponseWriter, r *http.Request) {if r.Method != "POST" {http.Error(w, "Only POST allowed", http.StatusMethodNotAllowed)return}src, err := io.ReadAll(r.Body)if err != nil {log.Printf("error reading body: %v", err)http.Error(w, "Internal Server Error", http.StatusInternalServerError)return}md := markdown.New(markdown.XHTMLOutput(true),markdown.Typographer(true),markdown.Linkify(true),markdown.Tables(true),)var buf bytes.Bufferif err := md.Render(&buf, src); err != nil {log.Printf("error converting markdown: %v", err)http.Error(w, "Malformed markdown", http.StatusBadRequest)return}if _, err := io.Copy(w, &buf); err != nil {log.Printf("error writing response: %v", err)http.Error(w, "Internal Server Error", http.StatusInternalServerError)return}}func main() {http.HandleFunc("/render", render)log.Printf("Serving on port 8080...")log.Fatal(http.ListenAndServe(":8080", nil))}

啟動服務:

$ go build -o markdown.nopgo$ ./markdown.nopgo2023/06/25 11:27:13 Serving on port 8080...  

使用Go項目的README來進行測試:

$ curl -o README.md -L "https://raw.githubusercontent.com/golang/go/c16c2c49e2fa98ae551fc6335215fadd62d33542/README.md"  $ curl --data-binary @README.md http://localhost:8080/render  

The Go Programming Language

Go is an open source programming language that makes it easy to build simple,reliable, and efficient software.

...

Note that the Go project uses the issue tracker for bug reports andproposals only. See https://go.dev/wiki/Questions for a list ofplaces to ask questions about the Go language.

性能分析

現在我們來采集一個profile文件,再使用PGO來重新構建服務,看看性能能提升多少。

main.go中,我們導入了net/http/pprof包,它會自動為服務器添加一個/debug/pprof/profile地址,用于獲取CPU分析數據。

通常情況下,我們都是從生產環境中收集性能分析數據,以便編譯器能夠獲取在實際生產環境中的行為情況。但這個示例沒有一個真實的“生產”環境,我們將創建一個簡單的程序來生成負載,同時收集性能分析數據。將該程序的源碼復制到load/main.go,并啟動負載生成器(確保服務器仍在運行!)。

$ go run example.com/markdown/load

下載性能分析文件:

$ curl -o cpu.pprof "http://localhost:8080/debug/pprof/profile?seconds=30"  

下載完成后,關閉服務。

啟用PGO

我們可以使用go build命令的-pgo標志要求Go工具鏈使用PGO進行構建。-pgo標志可以接受以下兩種參數:

  • 指定要使用的性能分析文件的路徑
  • 使用"auto",它將使用主包目錄中的default.pgo文件

我們建議將default.pgo性能分析文件提交到你的代碼倉庫中。將性能分析文件與源代碼放在一起,可以確保用戶只需獲取代碼倉庫(無論是通過版本控制系統還是通過go get命令),就能自動獲得性能分析文件,并且構建過程仍然可重現。在Go 1.20中,默認的-pgo選項是off,因此用戶仍需要添加-pgo=auto選項,但預計將來的Go版本將把默認值改為-pgo=auto,這樣任何構建該二進制文件的人都將獲得PGO的好處。

構建:

$ mv cpu.pprof default.pgo$ go build -pgo=auto -o markdown.withpgo

性能對比

我們將使用一個基于Go的基準測試版本的負載生成器來評估PGO對性能的影響。將這個基準測試的代碼復制到load/bench_test.go文件中。

首先沒有使用PGO的情況下進行測試:

$ ./markdown.nopgo  

進行測試:

$ go test example.com/markdown/load -bench=. -count=100 -source ../README.md > nopgo.txt

然后啟用PGO:

$ ./markdown.withpgo  

進行測試:

$ go test example.com/markdown/load -bench=. -count=100 -source ../README.md > withpgo.txt

運行結束后進行結果對比:

$ go install golang.org/x/perf/cmd/benchstat@latest  $ benchstat nopgo.txt withpgo.txtgoos: linuxgoarch: amd64pkg: example.com/markdown/loadcpu: Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz       │  nopgo.txt  │             withpgo.txt             │       │   sec/op    │   sec/op     vs base                │Load-8   445.1μ ± 4%   408.6μ ± 2%  -8.21% (p=0.000 n=100)

新版本大約快了8.2%!在Go 1.20中,通過啟用PGO,可以獲得2%到4%的CPU使用率提升。性能分析文件包含了關于應用程序行為的豐富信息,而Go 1.20僅僅開始利用這些信息進行內聯優化。未來的發布版本將繼續改進性能,因為編譯器的更多部分將利用PGO帶來的好處。

原文中效率提升了2.6%

文中的代碼可以在這里找到。

聲明:本作品采用署名-非商業性使用-相同方式共享 4.0 國際 (CC BY-NC-SA 4.0)進行許可,使用時請注明出處。Author: mengbinblog: mengbinGithub: mengbin92cnblogs: 戀水無意

標簽:

返回頂部
高清视频在线观看免费播放器-伊人日本-色九月综合-18禁止看的免费污网站-免费观看性行为视频的网站-天天碰天天操-久久精品国产欧美日韩99热-中文字幕在线视频不卡-国产偷人妻精品一区二区在线-国内精品久-伊人影院在线看-密臀av一区-久久综合五月丁香久久激情-福利一区福利二区-gg国产精品国内免费观看-国产精品 高清 尿 小便 嘘嘘
  • <cite id="ecweg"><pre id="ecweg"></pre></cite>
    <rt id="ecweg"><acronym id="ecweg"></acronym></rt>
  • <rt id="ecweg"></rt>
    激情成人在线观看| 极品粉嫩国产18尤物| 国产三级三级三级看三级| 那种视频在线观看| 四季av一区二区三区| 一本色道久久88亚洲精品综合 | 亚洲美免无码中文字幕在线| 男人亚洲天堂网| 亚洲午夜精品一区| 青青草视频在线视频| 男人揉女人奶房视频60分| www午夜视频| 91动漫在线看| 69久久久久久| 国内自拍中文字幕| 爆乳熟妇一区二区三区霸乳| 麻豆一区二区三区在线观看| 免费成人午夜视频| 不卡的在线视频| 日韩av新片网| 亚洲一区二区中文字幕在线观看| a级网站在线观看| 日本三区在线观看| 日本一本草久p| 成人黄色一区二区| 精品视频在线观看一区二区| 国产在线青青草| 亚洲色婷婷久久精品av蜜桃| 久久99999| 可以在线看的av网站| 亚洲综合av在线播放| 日日摸日日碰夜夜爽无码| 青娱乐国产精品视频| 女人另类性混交zo| 妺妺窝人体色www看人体| 亚洲一级免费在线观看| a√天堂在线观看| www.九色.com| 天天操天天干天天玩| 999在线观看| 日本精品免费在线观看| 国产精品www在线观看| 日本网站在线看| 亚洲一级免费在线观看| 黑鬼大战白妞高潮喷白浆| 天天夜碰日日摸日日澡性色av| 黄色www在线观看| 国产美女18xxxx免费视频| 日韩黄色片视频| 亚洲午夜无码av毛片久久| 亚洲色欲久久久综合网东京热| 亚洲精品国产久| 538任你躁在线精品免费| 免费激情视频在线观看| 97xxxxx| 日本日本19xxxⅹhd乱影响| 日韩欧美视频免费在线观看| 欧美一二三不卡| 亚洲爆乳无码精品aaa片蜜桃| 五月天六月丁香| 国产系列第一页| 激情图片中文字幕| 性欧美18一19内谢| 男女激烈动态图| 白白操在线视频| 久久精品xxx| 国产妇女馒头高清泬20p多| 亚洲理论电影在线观看| 久久国产精品视频在线观看| 欧美 日韩 激情| 成人免费毛片播放| 永久免费的av网站| 人人妻人人澡人人爽精品欧美一区 | 日本一区午夜艳熟免费| 免费看日本黄色| 久色视频在线播放| 国产精品免费观看久久| 国产免费又粗又猛又爽| 亚洲天堂网站在线| 成年女人18级毛片毛片免费| 国产主播在线看| 日本不卡一区在线| 超碰97在线看| 欧美视频免费播放| 99日在线视频| 欧美久久在线观看| 免费看a级黄色片| 青春草在线视频免费观看| www.国产在线播放| 亚洲欧洲日本精品| 17c丨国产丨精品视频| 成年人在线看片| 五月天综合婷婷| 国产成人a亚洲精v品无码| 波多野结衣在线免费观看| 国产伦精品一区二区三区四区视频_| 日本老熟妇毛茸茸| 国产精品自拍合集| 中文久久久久久| av网站手机在线观看| 在线观看免费污视频| 欧美图片激情小说| 在线观看日本www| 97成人在线观看视频| 亚洲天堂第一区| 国产无色aaa| 成人免费视频久久| 成年人午夜免费视频| 天天久久综合网| 日韩精品一区二区三区久久| 今天免费高清在线观看国语| 亚洲成人福利在线| 日韩欧美在线免费观看视频| 黄色成人在线看| 日本久久高清视频| 激情在线观看视频| 激情视频综合网| 成人免费在线小视频| 国产av人人夜夜澡人人爽麻豆| 99国产精品久久久久久| 亚洲视频在线a| 成人观看免费完整观看| www国产精品内射老熟女| 中文字幕在线中文| 日本一道在线观看| 特级西西人体www高清大胆| 在线免费看v片| 欧美性受xxxxxx黑人xyx性爽| 粗暴91大变态调教| 国产天堂在线播放| 九九视频精品在线观看| 熟女少妇精品一区二区| 亚洲精品高清无码视频| wwwxxx黄色片| 免费看污黄网站| 无需播放器的av| 日本人视频jizz页码69| 日韩精品你懂的| www.涩涩涩| 老司机久久精品| 国产精品999.| 中文字幕第50页| 亚洲理论电影在线观看| 一二三四视频社区在线| 无码aⅴ精品一区二区三区浪潮 | 男人靠女人免费视频网站| 免费无码av片在线观看| av免费网站观看| 91网址在线观看精品| 法国空姐在线观看免费| 国产精品国产亚洲精品看不卡| 国产免费黄视频| 黄色手机在线视频| 国产高清av片| 免费高清一区二区三区| 六月丁香婷婷在线| 色免费在线视频| 日本中文字幕在线不卡| 福利视频一二区| 麻豆传传媒久久久爱| 图片区乱熟图片区亚洲| 成人短视频在线观看免费| 国产原创popny丨九色| 国产九九热视频| a级片一区二区| 亚洲熟妇av一区二区三区| 亚洲精品乱码久久久久久动漫| 国产欧美久久久久| 男人的天堂日韩| 欧美中文字幕在线观看视频 | 亚洲精品第三页| 欧美视频在线观看网站| 成年人三级黄色片| 国产97在线 | 亚洲| 17c国产在线| 国产特级黄色大片| 红桃视频 国产| 妞干网在线免费视频| ijzzijzzij亚洲大全| 日本美女高潮视频| 又大又硬又爽免费视频| 一级淫片在线观看| www.爱色av.com| 国产又粗又爽又黄的视频| 亚洲性生活网站| 99色这里只有精品| 欧美精品一区二区性色a+v| 亚洲视频在线a| 国产主播自拍av| 丰满人妻一区二区三区53号| 亚洲精品www.| 宅男噜噜噜66国产免费观看| 国产av天堂无码一区二区三区| 天天影视色综合| 黄色免费网址大全| av动漫在线观看| 国产网站免费在线观看| 男人天堂av片| 99久久久精品视频| 2022中文字幕|