最新要闻
- 【世界快播报】智己LS7辅助驾驶 挑战上海高架晚高峰
- 蔚来换电站全国已突破1500座 李斌:已有车企在谈共用
- 北京宝沃汽车生产资质申请注销:曾传闻小米汽车会接手
- 洁丽雅新疆棉毛巾4.9元/条再上新款(商超3折)
- 711分考生妈妈:别把精力全投给孩子
- AV1视频速度猛增40%:Intel带头支持 AMD跟着吃肉-世界快播报
- 全球看点:唐山市路南区首届全民健身大会暨2023年职工羽毛球比赛圆满落幕
- 酷睿Ultra 128MB四级缓存首次现身!核显媲美GTX 1650?|环球快播报
- 开心瞬间!学霸查分发现分数被屏蔽 全家尖叫:还有人考675分父亲弹射冲下楼
- 公版的信仰!RTX 4090、4070、4060Ti国内涨价 第三方加价2千起|天天滚动
- 武汉钜音汇成云创可信吗?抖音小店佣金扣收费标准是什么?怎么推广商品? 全球今日报
- 刺激!“猪景房”一晚8888元:隔玻璃看猪吃喝拉撒睡
- 观速讯丨搞不定软件!大众集团CEO罕见承认:奥迪目前落后于竞争对手
- 中国未来的“SpaceX”!深蓝航天自研“雷霆-R1”新试车又成功了 全球快播
- 世界关注:重自3.4吨!比亚迪仰望U8能耗曝光:比硬派燃油越野车省一半
- 北京明天进行今年首期油车指标摇号:312万人申请14300个指标 中签率约0.4%
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
PGO前瞻-焦点热闻
原文在这里。
(相关资料图)
原文发布于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: 恋水无意
关键词:
PGO前瞻-焦点热闻
【世界快播报】智己LS7辅助驾驶 挑战上海高架晚高峰
蔚来换电站全国已突破1500座 李斌:已有车企在谈共用
北京宝沃汽车生产资质申请注销:曾传闻小米汽车会接手
洁丽雅新疆棉毛巾4.9元/条再上新款(商超3折)
711分考生妈妈:别把精力全投给孩子
AV1视频速度猛增40%:Intel带头支持 AMD跟着吃肉-世界快播报
全球看点:唐山市路南区首届全民健身大会暨2023年职工羽毛球比赛圆满落幕
世界简讯:锁(case篇)
酷睿Ultra 128MB四级缓存首次现身!核显媲美GTX 1650?|环球快播报
开心瞬间!学霸查分发现分数被屏蔽 全家尖叫:还有人考675分父亲弹射冲下楼
公版的信仰!RTX 4090、4070、4060Ti国内涨价 第三方加价2千起|天天滚动
python操作rabbitmq|环球快讯
CouchDB教程_编程入门自学教程_菜鸟教程-免费教程分享|全球快资讯
武汉钜音汇成云创可信吗?抖音小店佣金扣收费标准是什么?怎么推广商品? 全球今日报
刺激!“猪景房”一晚8888元:隔玻璃看猪吃喝拉撒睡
观速讯丨搞不定软件!大众集团CEO罕见承认:奥迪目前落后于竞争对手
中国未来的“SpaceX”!深蓝航天自研“雷霆-R1”新试车又成功了 全球快播
世界关注:重自3.4吨!比亚迪仰望U8能耗曝光:比硬派燃油越野车省一半
北京明天进行今年首期油车指标摇号:312万人申请14300个指标 中签率约0.4%
广东高考放榜!本科历史433分,物理439分 环球信息
基于k6和python进行自动化性能测试
当前快讯:B+ tree implemented in Java
女生例假注意事项文案_女生例假注意事项
中国家庭渗透率不足1% 中国电视回音壁开始发力 给昂贵的外资品牌敲响警钟
4月首飞空中爆炸 马斯克:星舰下次成功机会大增 可能60%
85%肉含量无淀粉 一口爆汁:火山石烤肠22.9元2斤大促|环球新资讯
天天最资讯丨美国一列货运火车压垮桥梁坠入河中:车厢内危险品泄漏
学生高考成绩被屏蔽老师激动欢呼:原来这代表全省前30
国家邮政局:今年全国快递业务量已达600亿件
ABAQUS 在车辆驻车制动系统中的应用
金鸡湖赛龙舟 | 璞华龙舟队飞舟竞渡,荣获“最佳团队拼搏奖”!
Apache RocketMQ EventBridge:构建下一代事件驱动引擎_世界短讯
中国石油天然气集团有限公司原党组副书记、副总经理徐文荣接受审查调查
亚马逊云斥资1亿美元建AIGC中心,帮助企业使用生成式人工智能
全球实时:创建17年的17K小说网创始人刘英去世:年仅42岁
继任者ZV-1 II发售后:索尼ZV-1已正式停产
天天即时看!竞争激烈!广汽丰田展台上演“武术表演”:蓝衣、白衣销售互殴
赶快收藏 官方公布2023年高考志愿填报十问十答
男子每天1斤杨梅狂吃20天要做血透 医生提醒:高钾水果、肾不好少吃_环球精选
茅台贵州大曲酒怎么样?贵州大曲是什么档次?贵州大曲酒80年代评价
前端Vue仿京东加入购物车弹框立即购买弹框shopDialog自定义弹框内容 全球快消息
关于lvm磁盘管理-lv的大小调整-lv的扩展与缩减|天天新视野
面试官:MySQL 自增主键一定是连续的吗?大部分人都会答错!
端午情怀“艾”在心间 天天微资讯
22岁小伙挑选私人飞机 预算5.5亿元 马斯克看了都害怕 世界观天下
全球看热讯:女生考前3天连续失眠 一查684分落泪:激动到不行 网友祝贺
Intel Arc显卡为Linux推送新驱动:《CS:GO》帧数提升11%-全球快报
首发骁龙8 Gen3!小米14系列代号出炉:后稷、神农
惊险!马路中间悬挂一根电缆 摩托车骑手经过刚好被套住脖子
一天吃透SpringCloud面试八股文
全球速递!在Linux下搭建Git服务器
【技术积累】算法中的贪心算法【三】_环球速读
女模砸评委后续:正面照曝光,疑全部模特均被潜规则,比赛很公平-全球快播报
至少涨价1500元该买还是买!iPhone 15备货量曝光:苹果出手近亿台-天天热推荐
【天天播资讯】19岁少年为救陌生姐姐放弃考试 网友点赞:换你会做吗?
【播资讯】特斯拉L3能力藏不住了!无需手扶方向盘:966公里0提醒接管
当前热议!今天周日调休上班!iPhone闹钟没响用户被坑:苹果本土化服务为啥不行?
广东高考今日放榜 26日17时前可提出复查分数申请_全球头条
焦点信息:联通2000M宽带有多快?中国联通小姐姐:下200分钟4K电影仅78秒
48GB内存笔记本正式上市 插满可扩至96GB
清华大学校长呼吁本科毕业生:不要过度关注个人利益 会烦恼焦虑 世界即时看
为什么119灭火不直接对准火源射水?消防员专业揭秘 全球关注
当前动态:《上古卷轴5:天际》4代湮灭Mod实机演示
『题解』BZOJ3462 DZY Loves Math II
读发布!设计与部署稳定的分布式系统(第2版)笔记11_无限长的结果集
10万元到1万元 激光电视降价为了什么
全球新消息丨ASML:芯片供应链脱钩自主生产不可能 美国日本也不例外
全球速讯:k8s 深入篇———— pod 深入实战[七]
CAP定理
【环球速看料】强化学习从基础到进阶-常见问题和面试必知必答[4]::深度Q网络-DQN、double DQN、经验回放、rainbow、分布式DQN
《消失的她》票房破5亿:打破44项影史纪录 端午档最强国产悬疑电影诞生 全球最新
五年来最火端午假期正式结束!这些城市最热门 你去了吗?
鸿海加快iPhone 15在印度量产:与中国大陆时间差将缩减至一个月-天天速递
400万播放量 救不了东北偶像
标压i7+32GB仅2999元 这款迷你主机能入手吗?实测来了
党的最大优势是党执政后的最大危险是_党执政后的最大危险是
全球新消息丨韩国yg公司旗下艺人_韩国yg公司
每日动态!使用libavcodec将mp3音频文件解码为pcm音频采样数据【[mp3float @ 0x561c1ec49940] Header missing
小试Blazor——实现Ant Design Blazor动态表单
焦点快看:【解决方法】按键精灵 实现 狂野飙车9 自动领取每日广告卡牌包 (1)
k360次列车硬卧分布图(k360次列车)|天天时讯
安徽唯一盲人考生 高考成绩出来了:311分
因脑溢血开颅3次的少年高考445分 母亲:努力有了结果
k8s 深入篇———— pod 实战[六]
garage两种读音_garage怎么读有几种读法是对的
观焦点:女子醉酒吐车上 20元都不肯赔 司机怒骂不要脸:网友力挺
环球快报:再获11亿美元投资:蔚来“长期主义”的底气
距离今年“召回王”又进一步 本田海外召回超百万辆汽车
法媒:罗马准备听取对贝洛蒂的报价,意甲英超西甲多队有意
腾讯两大国民APP账号又打通了!QQ悄然支持微信登陆 有了微信为啥仍离不开QQ?
2023年端午小长假收官:1.06亿人次出游 满血超越2019-当前热讯
【世界独家】word安装(ppt、excel),以及word的常用设置
【当前独家】Blazor开发小游戏?趁热打铁上!!!
当前热门:火狐主页diy设置以及常用的扩展
DZY Loves Math|全球即时看
女生发烧考出618分:一蹦三尺高 挨个房间报喜
每日消息!ChatGPT漏洞 讲故事送Window11激活Key!
世界快播:刘慈欣谈ChatGPT:人类的无能反而是人类最后的屏障
今日热议:关于高考志愿填报,这些热点问题需要关注