一年多前发布的Golang 1.20支持Profile Guided Optimizations(PGO),此后在Go 1.21中得到了改进,Go二进制文件的执行速度提高了2~7%,这要归功于其他编译器也采用的这种优化方法。Cloudflare的工程师本周发布了一篇博文,称赞Go的PGO支持以及因此节省的CPU资源。
vSoG] :1 UGgo;e 编译器的PGO支持非常好,前提是有足够多的样本作为配置文件反馈给编译器,这样编译器就能对代码进行适当的优化。编译器可以根据收集到的配置文件/反馈做出更明智的优化,但与更容易应用的编译器优化相比,这确实需要额外的步骤。就Golang的PGO而言,某些代码库的改进幅度可高达14%。
8'TIDu fi ~@J` Cloudflare拥有一些基于Go的服务,这些服务依赖于全球成千上万的CPU核心,因此他们最近开始探索Golang的PGO对其基础架构的影响。结果如下
K]M@t= T@#?{eA 这表明,在发布之后,我们使用的内核比发布之前少了约97个,减少了约3.5%。这似乎与上游文档中给出的2%到14%之间的数字相符。
<ME>#, QkHG`yW 我们可以感受到的的第二个数字是一周内不同天同一时间的使用率。发布前7天的平均使用率为3067.83个内核,而发布后7天的平均使用率为2996.78个内核,节省了71个CPU。虽然比不上我们节省的97个CPU,但也相当可观了!这似乎证明了PGO的好处--在完全不改变代码的情况下,我们成功地为自己节省了几台服务器的CPU计算时间。
QXL .4r% rLmc(-q 考虑到当今的服务器成本以及总拥有成本(包括能源和冷却成本),节省几台服务器的CPU时间意义重大,这是以最少的投资实现的效率提升。今后,他们还将探索更多的剖析,通过BOLT或LTO优化和其他调整进一步优化。
gV\Y>y4v q{b-2k 更多详情请访问Cloudflare博客。
2|B@s3a