Tony Bai

省下 10% CPU!Uber 揭秘 Go 栈扩容的隐秘代价 (opens in new tab)

本文永久链接 – 大家好,我是Tony Bai。 在顶级互联网巨头的底层架构中,性能优化绝不仅仅是写两段优雅的代码,而是一场“刀尖舔血”的硬核战争。 试想一下,如果你的公司拥有超过 200 万个 CPU 核心(Cores),且其中 65% 的微服务完全由 Go 语言驱动,会发生什么?在 Uber 这样的计算体量下,哪怕仅仅提升 1% 的 CPU 效率,每年都能为公司省下数百万美元的真金白银。 最近,Uber 基础架构团队在对核心服务进行性能 Profiling 时,抓出了一个隐藏极深的 CPU “吸血鬼”。这个内鬼既不是复杂的业务逻辑,也不是被千夫所指的垃圾回收(GC),而是 Go 语言引以为傲的并发基石——Goroutine 栈扩容(Stack Expansion)。 在部分核心微服务中,仅仅是栈扩容(runtime.copystack)这一项底层操作,就吞噬了近 10% 的 CPU 资源!而在 Uber 全局 600 多个微服务大盘中,栈拷贝的平均成本也高达 3.9%(作为对比,代价高昂的 GC 平均成本约为 7.3%)。 面对如此惊人的性能黑洞,Uber 的工程师们没有选择...

Read the original article
Sign in to keep reading the full article.

Keyboard Shortcuts

Navigation

Next / previous post
j/k
Open post
oorEnter
Preview post
v

Post Actions

Love post
a
Like post
l
Dislike post
d
Undo reaction
u
Save / unsave
s

Recommendations

Add interest / feed
Enter
Not interested
x

Go to

Home
gh
Interests
gi
Feeds
gf
Likes
gl
History
gy
Changelog
gc
Settings
gs
Discover
gb
Search
/

General

Show this help
?
Submit feedback
!
Close modal / unfocus
Esc

Press ? anytime to show this help