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
goのメモリアロケーターの話
Search
nasa
June 29, 2022
Technology
820
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
goのメモリアロケーターの話
https://bitkey.connpass.com/event/248608で10分LTしたやつ
。
Goのメモリアロケーターの構造について軽く話した。
nasa
June 29, 2022
More Decks by nasa
See All by nasa
難解な自己紹介プログラムを書く
nasa_desu
1
390
鉄は熱いうちに打て - Kaigi Effect LT大会
nasa_desu
2
590
リンカを変えてgo buildを 速く出来るか
nasa_desu
2
3.9k
RustでOS開発はじめの一歩
nasa_desu
8
7.6k
ログから学ぶgo build
nasa_desu
4
1.5k
GoとRust - 並行処理編
nasa_desu
5
4.2k
Other Decks in Technology
See All in Technology
ポストモーテム! DDoSからサイトは守れた。 でもビジネスは守れなかった。
bengo4com
0
1.5k
次世代ランサムウェア対策の考察 / 20260704 Mitsutoshi Matsuo
shift_evolve
PRO
5
1.7k
Amazon EVS で VCF 9.0 / 9.1 のサポート開始まとめ
mtoyoda
0
280
“全部コピーしない”ファイルデータの活用 : — FSx for ONTAP × S3 Tables × Icebergで作るメタデータカタログ
yoshiki0705
0
540
Baseline対応のDOMの型定義を作った
uhyo
3
720
しぶいSRE: サーバから見えない障害にどう向き合うか。ラストワンマイルのデバッグ実践 / Shibui SRE
kanny
11
4.7k
『AIに負けない』より『AIと遊ぶ』」〜ワクワクが最強のテスト・QA学習戦略_公開用
odan611
2
510
初めてのDatabricks勉強会
taka_aki
2
240
Mastraエージェント、どのクラウドにデプロイする?
minorun365
PRO
2
170
スタートアップにおけるアジャイルの実践について #shibuyagile
murabayashi
3
2.1k
AWS Blocks を触ってみた/first-tach-aws-blocks
fossamagna
2
150
実装だけじゃない! CCA-F取得エンジニアが教えるClaude Code開発プロセス活用術
diggymo
2
420
Featured
See All Featured
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
260
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
Google's AI Overviews - The New Search
badams
0
1.1k
Unsuck your backbone
ammeep
672
58k
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Leo the Paperboy
mayatellez
8
1.9k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Optimising Largest Contentful Paint
csswizardry
37
3.8k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Site-Speed That Sticks
csswizardry
13
1.2k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
310
Transcript
©2022 Wantedly, Inc. GoͷϝϞϦΞϩέʔλʔ Bitkey × Voicyओ࠵ ~ Goษڧձ ~
2022/06/29 nasa (Asan Kondo)
©2022 Wantedly, Inc. ࣗݾհ • nasa Ͱ͢ • Wantedly, inc.
৽ଔ2 • ਪનج൫ͷӡ༻ɾ։ൃ • σʔλαΠΤϯςΟετͷੜ࢈ੑര্͛ • কདྷͷເnasaͱ͍͏ϋϯυϧωʔϜΛ͗औΔ͜ͱ • GitHub: k-nas a • Twitter: nasa_desu • Zenn: nasa 🎉 🎉 🎉 🎉 🎉
©2022 Wantedly, Inc. -5ͷඪ • ϝϞϦΞϩέʔλʔ͕ԿΛ͍ͯ͠Δ͔͔Δ • GoݴޠͷΞϩέʔλͷߏ͕গ͔͠Δ • RuntimeύοέʔδΛ͍ͯΈΔʂͱ͍͏ؾ࣋ͪʹͳΔ
©2022 Wantedly, Inc. ࣍ 1. ϝϞϦΞϩέʔλʔͱ 2. GoͷϝϞϦΞϩέʔλʔͷઃܭ 3. ·ͱΊ
©2021 Wantedly, Inc. ϝϞϦΞϩέʔλʔͱʁ
©2022 Wantedly, Inc. • ༻ՄೳͳώʔϓϝϞϦͷཧΛߦ͏ ϓϩάϥϜʮ3byteͩ͘͞ʔ͍ʯ Ξϩέʔλʔʮ͍ɺ͓ͪʂ(3byteۭ͍ͯΔ͔Β͋ͦ͜Λฦͦ͏)ʯ ϝϞϦΞϩέʔλʔͱʁ
©2022 Wantedly, Inc. • ༻ՄೳͳώʔϓϝϞϦͷཧΛߦ͏ ଞͰ༻͍ͯ͠ΔϝϞϦΛฦͪ͠Ό͍͚ͳ͍ Ξϩέʔλʔະ༻ྖҬΛ͍ͬͯΔඞཁ͕͋Δ ղ์͞ΕͨϝϞϦΛ࠶ར༻͢Δ ϝϞϦΞϩέʔλʔͱʁ
©2022 Wantedly, Inc. ༨ஊIFBQ TUBDLͲͪΒ͕ΘΕ͍ͯΔ͔ package main import "fmt" func
main() { slice := make([]int64, 0, 0) fmt.Println(slice) c := make(chan string) fmt.Println(c) s := "string" fmt.Println(s) } :) % go build -gcflags '-m' alloc_playground.go # command-line-arguments ./alloc_playground.go:7:13: inlining call to fmt.Println ./alloc_playground.go:10:13: inlining call to fmt.Println ./alloc_playground.go:13:13: inlining call to fmt.Println ./alloc_playground.go:6:15: make([]int64, 0, 0) escapes to heap ./alloc_playground.go:7:13: slice escapes to heap ./alloc_playground.go:7:13: []interface {}{ ... } does not escape ./alloc_playground.go:10:13: []interface {}{ ... } does not escape ./alloc_playground.go:13:13: s escapes to heap ./alloc_playground.go:13:13: []interface {}{ ... } does not escape <autogenerated >: 1: .this does not escape • -gcflags “-m”Λ͚ͭΔͱ͔Δ
©2022 Wantedly, Inc. ਖ਼֬ʹϝϞϦΛฦ͚ͩ͢Ͱ͍͍ͷ͔ʁ • ਖ਼֬͞MustͰ࣍ͷ̎ͭٻ͍ͨ͠ • • ͍΄͏͕ͦΓΌخ͍͠ΑͶʂ
• அยԽ • ϝϞϦΛແବͳ͘ར༻͍ͨ͠ΑͶʂ
©2022 Wantedly, Inc. ਖ਼֬ʹϝϞϦΛฦ͚ͩ͢Ͱ͍͍ͷ͔ʁ • அยԽʹ͍ͭͯܰ͘͢ ϓϩάϥϜʮ8byteͩ͘͞ʔ͍ʯ ΞϩέʔλʔʮΕͰ͢ɺɺɺʯ
©2022 Wantedly, Inc. ਖ਼֬ʹϝϞϦΛฦ͚ͩ͢Ͱ͍͍ͷ͔ʁ • ༻ՄೳͳώʔϓϝϞϦͷཧΛߦ͏ • ߴͰஅยԽ͕ى͜ΓͮΒ͍Ξϩέʔλʔ͕ྑ͍
©2021 Wantedly, Inc. (PͷϝϞϦΞϩέʔλʔ
©2022 Wantedly, Inc. (PΞϩέʔλʔͷߏཁૉ • ͋ͱ͔Βৄ͘͠ݟ͍͕ͯͬ͘͘͟Γઆ໌ͯ͠ΈΔ • G : ΰϧʔνϯ
• mcache: OSεϨου͝ͱͷΩϟογϡ • mcentral: ۭ͖ྖҬΛཧ͢Δ • mheap: OS͔ΒϝϞϦΛऔಘ͠ཧ
©2022 Wantedly, Inc. • mcach e • mcacheϚϧνεϨουͰੑೳΛग़ͨ͢Ίʹଘࡏ • mcentral͔ΒϝϞϦͷׂ͕ߦΘΕΔ
• 1 threadʹ1mcacheͱ͍͏ߏͳͷͰϩοΫΛऔΒ ͳͯ҆͘શʹѻ͑Δ (PΞϩέʔλʔͷߏཁૉ
©2022 Wantedly, Inc. • mcentra l • mheap͔ΒϝϞϦׂ͕ߦΘΕΔ • (ຊϝϞϦͰͳ͍͕Ұ୴ંͬͯઆ໌͢Δ
) • ෳεϨου͔Βࢀর͞ΕΔͷͰϩοΫΛऔΔඞཁ͕͋Δ • ͕ॏཁͳͷͰϩοΫͷ୯Ґ࠷খʹͳΔΑ͏ʹઃܭ͞ Ε͍ͯΔ • mhea p • OS͔ΒϝϞϦΛಘΔ • ॏ͍ॲཧʹͳΔͷͰҰͰΨοπϦϝϞϦΛऔಘ͢Δ (PΞϩέʔλʔͷߏཁૉ
©2022 Wantedly, Inc. TQBO • OS͔Βऔಘͨ͠ϝϞϦ༧ΊܾΊΒΕͨαΠζʹ۠Β Εཧ͞ΕΔ • ͜ͷαΠζ͝ͱʹ۠ΒΕͨϝϞϦΛspanͱݺͿ •
mcache, mcentral͜ͷspanΛཧ͢Δ
©2022 Wantedly, Inc. TQBO • αΠζͲ͏ܾ·͍ͬͯΔͷ͔ ? • sizeclass.goʹఆٛͯ͋͠Δ •
࣮ࡍʹׂΓͯΒΕΔΦϒδΣΫ τ͜ͷαΠζϐολϦʹͳΒ ͳ͍ • ͋Δఔແବڐ༰͞Ε͍ͯΔ package runtime / / class bytes/obj bytes/span objects tail waste max waste min align / / 1 8 8192 1024 0 87.50% 8 / / 2 16 8192 512 0 43.75% 16 / / 3 24 8192 341 8 29.24% 8 / / 4 32 8192 256 0 21.88% 32 / / 5 48 8192 170 32 31.52% 16 / / 6 64 8192 128 0 23.44% 64 / / 7 80 8192 102 32 19.07% 16 / / 8 96 8192 85 32 15.95% 32 / / 9 112 8192 73 16 13.56% 16 / / 10 128 8192 64 0 11.72% 128 / / 11 144 8192 56 128 11.82% 16 / / 12 160 8192 51 32 9.73% 32 / / 13 176 8192 46 96 9.59% 16 / / 14 192 8192 42 128 9.25% 64
©2022 Wantedly, Inc. TQBO • mcache, mcentral͜ͷspanΛཧ͢Δ
©2022 Wantedly, Inc. TQBO • GoΦϒδΣΫτspanʹׂΓͯΒΕΔ
©2022 Wantedly, Inc. • ϝϞϦ͕ඞཁʹͳͬͨΒ͜ͷਤͷྲྀΕͰׂ͕ߦΘΕΔ 1. mcacheʹ͋Δspanʹۭ͖͕͋ΔͳΒͦ͜Λ͏ 2. mcentral͔ΒspanΛͬͯ͏ 3.
OS͔ΒϝϞϦΛଟΊʹͬͯspanʹׂͯ͠͏ TQBO౿·ׂ͑ͨ
©2021 Wantedly, Inc. ·ͱΊ
©2022 Wantedly, Inc. • Ξϩέʔλʔ • ༻ՄೳͳώʔϓϝϞϦͷཧΛߦ͏ • ߴͰஅยԽ͕ى͜ΓͮΒ͍Ξϩέʔλʔ͕ྑ͍ GoΞϩέʔλʔ
• εϨου͝ͱʹΩϟογϡΛઃ͚ͯCPUʹରͯ͠εέʔϧ͢ΔΑ͏ʹͳ͍ͬͯΔ • OS͔Βऔಘͨ͠ϝϞϦΛϒϩοΫʹ͚ͯߴͳׂΛ࣮ݱ͍ͯ͠Δ ·ͱΊ