这篇文章主要介绍“如何定制Go编译器”,在日常操作中,相信很多人在如何定制Go编译器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何定制Go编译器”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
创新互联建站从2013年成立,是专业互联网技术服务公司,拥有项目成都做网站、网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元西林做网站,已为上家服务,为西林各地企业和个人服务,联系电话:18982081108
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编译器”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!