Upgrade to Pro — share decks privately, control downloads, hide ads and more …

リンカを変えてgo buildを 速く出来るか

nasa
January 30, 2024

リンカを変えてgo buildを 速く出来るか

hatena.go 5分LTの発表資料

https://hatena.connpass.com/event/307931/

nasa

January 30, 2024
Tweet

More Decks by nasa

Other Decks in Technology

Transcript

  1. 任意の外部リンカを使う © 2024 Wantedly, Inc. • 右図が全体像 ◦ 1. go

    build ◦ 2. go tool link ◦ 3. external linker(frontend) ◦ 4. linker
  2. 任意の外部リンカを使う © 2024 Wantedly, Inc. • go buildからgo tool linkを呼んでる

    • `ldflags`オプションでlinkコマンドのフラグ指定 • linkmodeでリンカ内部リンカ・外部リンカのどちらを使 用するか決める $ go build -ldflags="-linkmode=external
  3. 任意の外部リンカを使う © 2024 Wantedly, Inc. go build → go tool

    link → gcc → 任意のリンカという依存関係
  4. 環境 © 2024 Wantedly, Inc. • 実行環境 ◦ AWS EC2

    ◦ インスタンスタイプ: c5.xlarge ◦ CPU: 4 ◦ Memory: 8GiB
  5. 環境 © 2024 Wantedly, Inc. • versions ◦ go1.21.4 linux/amd64

    ◦ gcc 11.4.0 ◦ lld 14.0.0 ◦ gold 1.16 ◦ mold 2.4.0
  6. 環境 © 2024 Wantedly, Inc. • 計測方法 ◦ go build

    -x -workで必要なファイルを生成 + linkコマンドを把握 ◦ -x: go tool linkコマンドがログに出るのでメモる ◦ -work: 中間結果を保存する • /usr/local/go/pkg/tool/linux_amd64/linkを実行 • この時間を計測した(10回の平均)
  7. 計測結果 internal gold lld mold hello world 179ms 274ms 370ms

    271ms k9s 4.5s 7.3s 5.5s 5.4s jujud 11.6s 17.4s 14.3s 14.9s © 2024 Wantedly, Inc. ※ k8sの誤字ではないです
  8. 計測結果 internal lld mold hello world 179ms 370ms 271ms k9s

    4.5s 5.5s 5.4s jujud 11.6s 14.3s 14.9s © 2024 Wantedly, Inc. ところでinternalとmoldで2,4秒もの差が出るんだろう?
  9. whoami © 2024 Wantedly, Inc. nasa (Asan Kondo) • Wantedly,

    Inc. (2021-04-) ◦ 推薦基盤チーム ◦ Backend中心にあれこれやってる • ハンドルネームnasaを追い求める民 ◦ X(Twitter): @nasa_desu ◦ GitHub: @k-nasa