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
16
Deep dive into runtime features provided by Go1.22
sivchari
June 13, 2024
Tweet
Share
More Decks by sivchari
See All by sivchari
protoc pluginのはじめかた
sivchari
0
2
What's context package
sivchari
0
14
Dive into arena package ~ Go 1.20 release party ~
sivchari
0
31
GopherCon 2023 recap
sivchari
0
15
Go 1.22 range over func/range over int
sivchari
0
21
Go 1.22で追加予定 だった zeroの紹介 Go Conference mini
sivchari
0
290
Dive into testing package ~ Part of Fuzzing Test ~
sivchari
1
240
database/sqlの仕組みについて
sivchari
0
170
goroutineの仕組みについて
sivchari
0
1.4k
Featured
See All Featured
Designing for humans not robots
tammielis
250
25k
Into the Great Unknown - MozCon
thekraken
33
1.5k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
66k
Building a Scalable Design System with Sketch
lauravandoore
460
33k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
The Language of Interfaces
destraynor
154
24k
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
247
1.3M
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Optimising Largest Contentful Paint
csswizardry
33
3k
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