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
37
Deep dive into runtime features provided by Go1.22
sivchari
June 13, 2024
Tweet
Share
More Decks by sivchari
See All by sivchari
静的解析 x Kubernetes API Conventions = Kube API Linter ~ ベストプラクティスに準拠したカスタムリソースの作り方と運用 ~
sivchari
0
62
What's GOCACHEPROG ?
sivchari
1
420
gh_extensionsによる快適なOSS生活.pdf
sivchari
0
33
Visualization Go scheduler by gosched-simulator
sivchari
1
490
protoc pluginのはじめかた
sivchari
0
36
What's context package
sivchari
0
38
Dive into arena package ~ Go 1.20 release party ~
sivchari
0
83
GopherCon 2023 recap
sivchari
0
48
Go 1.22 range over func/range over int
sivchari
0
88
Featured
See All Featured
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.3k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
120
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.4k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
60
42k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
320
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
220
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
380
From π to Pie charts
rasagy
0
120
Designing for Performance
lara
610
70k
The SEO Collaboration Effect
kristinabergwall1
0
350
WCS-LA-2024
lcolladotor
0
450
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
250
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