当前位置:首页 > 技术分析 > 正文内容

Uber 使用 Go 的规模这么大?!都自己定制的 Go 编译器了

ruisui885个月前 (02-07)技术分析20

大家好,我是站长 polarisxu。

今天看到 Uber 使用 Go 的情况,挺吃惊的,给大家分享下情况。

01 Uber 使用 Go 的情况

Uber 有数千个后端服务是使用 Go 实现的,它们运行在数百万个 CPU 内核上。因此,对于 Uber 来说,详细准确掌握 CPU 瓶颈至关重要。这不仅为了减少服务延迟,同时也能提高计算机运行效率。Uber 这个量级的规模,要求对代码和微观结构的影响有深入的了解。

02 定制 Go 编译器

其实说定制 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 给了一张图,公开了最常见的一些事件。

关于这些事件的使用,以及 pprof++ 的更详细信息可以参考:https://eng.uber.com/pprof-go-profiler/。

Uber fork 的 Go 仓库地址:https://github.com/uber-research/go。

03 感想

看到这个消息,惊叹 Uber 对 Go 的使用和研究之深,也证明了 Go 被大公司的规模使用,看好 Go 的前途。

不知道 Uber 开发的 pprof++,有没有和 Go Team 沟通,尝试合入 Go 官方仓库,毕竟既然开源出来了,如果能够在官方中使用,可以让更多人收益。当然,因为目前只支持 Linux 系统,可能不太适合合入。至少,不希望 Go 出现分裂!

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/1768.html

标签: pprof
分享给朋友:

“Uber 使用 Go 的规模这么大?!都自己定制的 Go 编译器了” 的相关文章

Linux发行版Debian推出12.2及11.8版本,修复多个安全问题

IT之家 10 月 9 日消息,Debian 是最古老的 GNU / Linux 发行版之一,也是许多其他基于 Linux 的操作系统的基础,包括 Ubuntu、Kali、MX 和树莓派 OS 等,近日 Debian 推出了 12.2 和 11.8 版本,主要修复了多个安全问题。▲ 图源 Debia...

Vue.js 组件通信的 3 大妙招

在 Vue.js 中,组件化是其核心概念之一,允许你将复杂的界面拆分成多个独立的、可复用的组件。在构建大型应用时,如何高效地在组件之间传递数据和触发事件是非常重要的。Vue.js 提供了多种方式来处理组件间的通信,下面是最常用的 3 种方式:1.父子组件通信:通过 Props 和 Events在 V...

使用cgroup限制进程资源

这里使用containerd项目中的cgroup包来实现进程资源限制。先写一个耗费一个CPU并且一秒增加10m内存的测试进程package mainimport ( "fmt" "math/rand" "time")func main() { go f...

15款测试html5响应式的在线工具

手机、平板灯手持设备的增多,网站要顺应变化,就必须要做响应式开发,响应式网站最大的特点在于可以在不同设备下呈现不同的布局,是基于html5+css3技术,目前越来越多的网站开始采用了响应式设计,而下面15款工具可以方便测试你的html5响应式效果。Responsinatorhttp://www.re...

「干货」FPGA设计中深度约束技巧及调试经验总结

今天跟大家分享的内容很重要,也是我们调试FPGA经验的总结。随着FPGA对时序和性能的要求越来越高,高频率、大位宽的设计越来越多。在调试这些FPGA样机时,需要从写代码时就要小心谨慎,否则写出来的代码可能无法满足时序要求。另外,最近跟网友聊天时,有谈到公众号寿命的问题,我觉得网络交换FPGA公众号应...

vue-router是如何解析query参数呢? #前端

vue-router 中的 query 解析。1. 大家好,我是龙仔。今天来分享 vue-router 是如何解析快乐参数的,因为使用 vue 路由会传 query 参数和快乐参数,所以从 vue 的角度来看如何解析传递的快乐参数。2. 基础知识大家应知道,快乐参数结构如:a、b、c、a、b、c、a...