Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Deep dive into runtime features provided by Go1.22
Search
sivchari
June 13, 2024
0
17
Deep dive into runtime features provided by Go1.22
sivchari
June 13, 2024
Tweet
Share
More Decks by sivchari
See All by sivchari
gh_extensionsによる快適なOSS生活.pdf
sivchari
0
5
Visualization Go scheduler by gosched-simulator
sivchari
0
130
protoc pluginのはじめかた
sivchari
0
17
What's context package
sivchari
0
18
Dive into arena package ~ Go 1.20 release party ~
sivchari
0
39
GopherCon 2023 recap
sivchari
0
17
Go 1.22 range over func/range over int
sivchari
0
26
Go 1.22で追加予定 だった zeroの紹介 Go Conference mini
sivchari
0
300
Dive into testing package ~ Part of Fuzzing Test ~
sivchari
1
240
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
335
57k
Music & Morning Musume
bryan
46
6.3k
Faster Mobile Websites
deanohume
305
30k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
98
18k
How GitHub (no longer) Works
holman
312
140k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Writing Fast Ruby
sferik
628
61k
A Philosophy of Restraint
colly
203
16k
Building Better People: How to give real-time feedback that sticks.
wjessup
366
19k
Mobile First: as difficult as doing things right
swwweet
222
9k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Transcript
Deep dive into runtime features provided by Go1.22 <03/18/23> Takuma
Shibuya CyberAgent Inc. sivchari
• Takuma Shibuya ◦ sivchari • CIU ◦ AKE •
Go Next Experts • Go Conference Host
runtimeパッケージの変更点 SECTION ONE
runtime/metrics • 4つのメトリクスが追加 (#63340) ◦ /sched/pauses/stopping/gc:seconds ◦ /sched/pauses/stopping/other:seconds ◦ /sched/pauses/total/gc:seconds
◦ /sched/pauses/total/other:seconds • /runtime/proc.go ◦ GCMark or GCTerm以外はOtherとしてMetricが加算される ◦ /gc/pauses:secondsはDeprecated ◦ /sync/mutex/wait/total:secondsにinternal lockも含まれる SECTION ONE
runtime/pprof • mutexのプロファイル記録が変更 ◦ 100個のgoroutineが10 millisecずつ遅延 ◦ 10 millisecでの記録ではなく 1secとして記録される
◦ より正確にボトルネックの度合いを表現 • Internal mutex lockはruntime._LostContendedRuntimeLock で報告される • Darwinプラットフォームの CPUプロファイルにメモリマップが入り、逆 アセンブルができるようになった SECTION TWO
runtime/trace • runtime/traceの抱えていたいくつかの課題が解決された • ほとんどのプラットフォームで os.clockを使うようになった • traceがパーティショニングされるようになったためストリーマブルな 処理が可能になった •
traceにsystem callの継続時間やスレッド周りの情報が入った SECTION THREE
runtime/trace • 実験的にこれらを利用した trace pacakgeであるexp/traceが公開 された ◦ 現時点では 1.22でしか動かない ◦
GOEXPERIMENT=noexectracer2で古い実装に戻せる • trace実行と終了のレイテンシが大幅に減少 • GCのMarkphaseの間に開始と終了ができるようになった • https://blog.felixge.de/reducing-gos-execution-tracer-ove rhead-with-frame-pointer-unwinding/ SECTION THREE
runtime/trace • G, M, Pの中でPに紐づけたバッファにイベントを書き込む ◦ HACKING.md ◦ GやMに比べて一般的に Pは少ないためバッファの数を最小にで
きる ▪ Preemption/IO Wait • 同期を考えると STWなどの際に Psを利用することが有用である SECTION THREE
traceを触ってみる • https://go.dev/blog/execution-traces-2024 ◦ Design Doc • Go1.21までのtraceの問題点 ◦ 高いオーバーヘッド
◦ 適切にスケールできず分析するにはでかすぎる ◦ 特定の悪い挙動を補足する時にいつトレースを開始すればいい かが不明瞭 ◦ 実行トレースの解析パッケージがなかったためプログラム上での 分析が困難 SECTION THREE
まとめ • runtime周りの複数の改善によってメトリクスまわりなどに改修が 入った • pprofのmutextプロファイルは個人的にとても嬉しい • Trace周りの変更は G,M,Pの取扱が絡むため深い理解には HACKING.mdが必要そう
• FlightRecorderによりコード内部で G,M,Pが扱えるようになった ◦ e.g. Middleware/GMPを扱えるのでそれを使ったツール ▪ goroutine scheduler simulatorつくれるかやってみる ◦ とはいえ使いどころはしっかりと考えよう SECTION THREE