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

実用的なGOCACHEPROG実装をするために / golang.tokyo #40

Avatar for mazrean mazrean
September 01, 2025

実用的なGOCACHEPROG実装をするために / golang.tokyo #40

Go 1.24でビルド時のキャッシュの処理を外部ツールでカスタマイズできるGOCACHEPROGという機能が導入されました。これにより、ビルドキャッシュをS3等で共有し、初めてのビルドでも高速に行えるようになります。しかし、GOCACHEPROGは愚直に実装すると速度が低下してしまい、場合によってはキャッシュがない場合よりもビルドが遅くなることすらあります。本セッションでは、実際に実装した経験から実装を行う際の注意点を紹介します。
https://github.com/gocica-go/gocica

Avatar for mazrean

mazrean

September 01, 2025
Tweet

More Decks by mazrean

Other Decks in Programming

Transcript

  1. mazrean ▪ Goでツール等を作っている • DIツールKessoku • GOCACHEPROG実装GoCICa ▪ SRE @DeNA

    ▪ GopherCon行ってきた! @mazrean22 マズリーン 3 今日はこの話
  2. 目次 4 The Power of PowerPoint - thepopp.com 1 GoCICaとは

    2 実装の工夫 3 効果 4 まとめ
  3. 目次 5 The Power of PowerPoint - thepopp.com 1 GoCICaとは

    2 実装の工夫 3 効果 4 まとめ
  4. 実装の工夫: 単一バイナリ化 Azure Blob StorageはRangeヘッダーに対応 → キャッシュを単一バイナリ にまとめる ▪ 独自バイナリフォーマットを作成

    • ヘッダーにprotobufでrangeなどを格納 • 以降、バイナリを順に詰め込んでいる ▪ Azure Blob Storage独自命令を活用 • CommitBlockList: uploadしたBlockを後から結合 • StageBlockFromURL: URLの中身を直でupload 17
  5. 実装の工夫: その他 ▪ DataDog/zstdによるzstd圧縮 • CGOによるzstd実装のGoバインディング • Goの圧縮実装でスループット/圧縮率のバランスが最適 ▪ 独自計測ツール作成

    • パフォーマンスチューニングで計測は必須 • GitHub ActionsはCPU使用率などが取れない… • GoCICa側でprocfsをcsvに吐き出し解決 18