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

遅延読み込みの歩みから理解するSeekable OCI

すみや
November 02, 2024

遅延読み込みの歩みから理解するSeekable OCI

すみや

November 02, 2024
Tweet

More Decks by すみや

Other Decks in Technology

Transcript

  1. 5 導入施設数推移(ICT) 2021年4月 8,000 2020年4月 5,200 2019年4月 3,000 2018年4月 1,500

    2017年4月 500 2016年4月 120 全国導入数 19,000 施設 2022年2月 11,000 17,000 2024年1月 (2024年7月時点) 14,000 2023年4月
  2. 10 CONFIDENTIAL - © 2022 CoDMON Inc. 10 従来のOCIイメージ  

    1. イメージ形式の進化と遅延読み込みの実現 Manifest ファイル /var /opt … レイヤー1 file1 file2 … レイヤーN Open Containers. “Example Layout.” image-layout.md, GitHub, https://github.com/opencontainers/image-spec/blob/main/image-layout.md
  3. 11 CONFIDENTIAL - © 2022 CoDMON Inc. 11 従来のOCIイメージ  

    1. イメージ形式の進化と遅延読み込みの実現 Manifest ファイル /var /opt … レイヤー1 file1 file2 … レイヤーN Tar(file1) Tar(file2) Tar(file3) TarFooter Gzip
  4. 12 CONFIDENTIAL - © 2022 CoDMON Inc. 12 従来のOCIイメージ  

    1. イメージ形式の進化と遅延読み込みの実現 Manifest ファイル /var /opt … レイヤー1 file1 file2 … レイヤーN Tar(file1) Tar(file2) Tar(file3) TarFooter Gzip コンテナを起動する際に全てのレイヤーをpull しかし、実際の処理に必要なのは一部
  5. 13 CONFIDENTIAL - © 2022 CoDMON Inc. 13 従来のOCIイメージ  

    1. イメージ形式の進化と遅延読み込みの実現 Manifest ファイル /var /opt … レイヤー1 file1 file2 … レイヤーN Tar(file1) Tar(file2) Tar(file3) TarFooter Gzip コンテナを起動する際に全てのレイヤーをpull しかし、実際の処理に必要なのは一部 「必要なものを必要な時に」で生まれたのがStargz
  6. 14 CONFIDENTIAL - © 2022 CoDMON Inc. 14 従来のOCIイメージ  

    1. イメージ形式の進化と遅延読み込みの実現 コンテナを起動する際に全てのレイヤーをpull しかし、実際の処理に必要なのは一部 「必要なものを必要な時に」で生まれたのがStargz Seekable tar.gz の略 Manifest ファイル /var /opt … レイヤー1 file1 file2 … レイヤーN Tar(file1) Tar(file2) Tar(file3) TarFooter Gzip
  7. 15 CONFIDENTIAL - © 2022 CoDMON Inc. 15 遅延読み込みを可能にしたStargzイメージ  

    1. イメージ形式の進化と遅延読み込みの実現 Tar(file1) Tar(file2) Tar(file3) TarFooter Gzip 従来のOCI形式
  8. 16 CONFIDENTIAL - © 2022 CoDMON Inc. 16 Gzip 遅延読み込みを可能にしたStargzイメージ

      1. イメージ形式の進化と遅延読み込みの実現 Tar(file1) Tar(file2) Tar(file3) TarFooter Gzip Tar(TOC, Tarfooter) Tar(file1) Gzip1 Tar(file2) Gzip2 Tar(file3) Gzip3 従来のOCI形式 Stargz形式 GoogleのCRFS より提案 Google. “Introducing Stargz.”README.md, GitHub, https://github.com/google/crfs?tab=readme-ov-file#introducing-stargz
  9. 17 CONFIDENTIAL - © 2022 CoDMON Inc. 17 Gzip 遅延読み込みを可能にしたStargzイメージ

      1. イメージ形式の進化と遅延読み込みの実現 Tar(file1) Tar(file2) Tar(file3) TarFooter Gzip Tar(TOC, Tarfooter) Tar(file1) Gzip1 Tar(file2) Gzip2 Tar(file3) Gzip3 従来のOCI形式 Stargz形式 GoogleのCRFS より提案 それぞれをgzipで細かく分割 Google. “Introducing Stargz.”README.md, GitHub, https://github.com/google/crfs?tab=readme-ov-file#introducing-stargz
  10. 18 CONFIDENTIAL - © 2022 CoDMON Inc. 18 Gzip 遅延読み込みを可能にしたStargzイメージ

      1. イメージ形式の進化と遅延読み込みの実現 Tar(file1) Tar(file2) Tar(file3) TarFooter Gzip Tar(TOC, Tarfooter) Tar(file1) Gzip1 Tar(file2) Gzip2 Tar(file3) Gzip3 従来のOCI形式 Stargz形式 GoogleのCRFS より提案 それぞれをgzipで細かく分割 gzip同士は連結しても構造が保たれるという特性を利用 gzipヘッダーが増えた分イメージサイズは数%大きくなるけど無視できる by Google Google. “Introducing Stargz.”README.md, GitHub, https://github.com/google/crfs?tab=readme-ov-file#introducing-stargz
  11. 19 CONFIDENTIAL - © 2022 CoDMON Inc. 19 Stargzの構造をもう少し見てみる  

    1. イメージ形式の進化と遅延読み込みの実現 Gzip3 Tar(TOC, Tarfooter) Tar(file1) Gzip1 Tar(file2) Gzip2 Tar(file3) Gzip3 Stargz形式
  12. 20 CONFIDENTIAL - © 2022 CoDMON Inc. 20 Stargzの構造をもう少し見てみる  

    1. イメージ形式の進化と遅延読み込みの実現 Gzip3 Tar(TOC, Tarfooter) Tar(file1) Gzip1 Tar(file2) Gzip2 Tar(file3) Gzip3 Stargz形式 各ファイルへの 位置情報を持つ
  13. 21 CONFIDENTIAL - © 2022 CoDMON Inc. 21 Stargzの構造をもう少し見てみる  

    1. イメージ形式の進化と遅延読み込みの実現 Gzip3 Tar(TOC, Tarfooter) Tar(file1) Gzip1 Tar(file2) Gzip2 Tar(file2) Gzip2 Stargz形式 各ファイルへの 位置情報を持つ TOC自体の 位置情報を持つ
  14. 22 CONFIDENTIAL - © 2022 CoDMON Inc. 22 コンテナ起動時にTarfooter→TOCの順番でダウンロード Stargzの構造をもう少し見てみる

      1. イメージ形式の進化と遅延読み込みの実現 Gzip3 Tar(TOC, Tarfooter) Tar(file1) Gzip1 Tar(file2) Gzip2 Tar(file2) Gzip2 Stargz形式 各ファイルへの 位置情報を持つ コンテナ実行中、必要になった時にTOCを元に特定ファイルのみをpull TOC自体の 位置情報を持つ
  15. 23 CONFIDENTIAL - © 2022 CoDMON Inc. 23 Stargzの課題  

    1. イメージ形式の進化と遅延読み込みの実現
  16. 24 CONFIDENTIAL - © 2022 CoDMON Inc. 24 Stargzの課題  

    1. イメージ形式の進化と遅延読み込みの実現 実行のオーバーヘッド増 containerd. “Stargz Snapshotter.”README.md, GitHub, https://github.com/containerd/stargz-snapshotter
  17. 25 CONFIDENTIAL - © 2022 CoDMON Inc. 25 Stargzの課題  

    1. イメージ形式の進化と遅延読み込みの実現 そこで考案されたのがeStargz 実行のオーバーヘッド増 containerd. “Stargz Snapshotter.”README.md, GitHub, https://github.com/containerd/stargz-snapshotter
  18. 26 CONFIDENTIAL - © 2022 CoDMON Inc. 26 Stargzの課題  

    1. イメージ形式の進化と遅延読み込みの実現 そこで考案されたのがeStargz 実行のオーバーヘッド増 containerd. “Stargz Snapshotter.”README.md, GitHub, https://github.com/containerd/stargz-snapshotter
  19. 27 CONFIDENTIAL - © 2022 CoDMON Inc. 27 Stargzをより強化したeStargz  

    1. イメージ形式の進化と遅延読み込みの実現 アクセス頻度の高いファイルをコンテナ起動時にprefetch チャンクレベルの検証 主要な進化は以下二つ containerd. “overview.”estargz.md, GitHub, https://github.com/containerd/stargz-snapshotter/blob/main/docs/estargz.md#overview
  20. 28 CONFIDENTIAL - © 2022 CoDMON Inc. 28 Stargzをより強化したeStargz  

    1. イメージ形式の進化と遅延読み込みの実現 アクセス頻度の高いファイルをコンテナ起動時にprefetch チャンクレベルの検証 主要な進化は以下二つ containerd. “overview.”estargz.md, GitHub, https://github.com/containerd/stargz-snapshotter/blob/main/docs/estargz.md#overview
  21. 29 CONFIDENTIAL - © 2022 CoDMON Inc. 29 Stargzをより強化したeStargz  

    1. イメージ形式の進化と遅延読み込みの実現 アクセス頻度の高いファイルをコンテナ起動時にprefetch landmark fileによって prefetchする/しない の領域を区切る Kohei Tokunaga “Startup containers in lightning speed with lazy image distribution on containerd” https://medium.com/nttlabs/startup-containers-in-lightning-speed-with-lazy-image-distribution-on-containerd-243d94522361
  22. 30 CONFIDENTIAL - © 2022 CoDMON Inc. 30 eStargzはどうやってprefetchするファイルを決めている?  

    1. イメージ形式の進化と遅延読み込みの実現 legacy image eStargz image イメージをeStargzに変換 containerd. “Prioritized Files and Landmark Files.”estargz.md, GitHub, https://github.com/containerd/stargz-snapshotter/blob/main/docs/estargz.md#prioritized-files-and-landmark-files
  23. 31 CONFIDENTIAL - © 2022 CoDMON Inc. 31 eStargzはどうやってprefetchするファイルを決めている?  

    1. イメージ形式の進化と遅延読み込みの実現 legacy image eStargz image イメージをeStargzに変換 sandbox環境でコンテナを起動 file1:accessed file2 file3:accessed 起動時のファイルアクセスを解析 起動時アクセスされたファイルを prefetch対象に containerd. “Prioritized Files and Landmark Files.”estargz.md, GitHub, https://github.com/containerd/stargz-snapshotter/blob/main/docs/estargz.md#prioritized-files-and-landmark-files
  24. 32 CONFIDENTIAL - © 2022 CoDMON Inc. 32 コンテナランタイム側の対応  

    1. イメージ形式の進化と遅延読み込みの実現 コンテナランタイムもeStargzの構造に対応する仕組みが必要 ・TOCやlandmarkを解釈する仕組み ・欲しい部分だけをレジストリから取得する仕組み Kohei Tokunaga “Startup containers in lightning speed with lazy image distribution on containerd” https://medium.com/nttlabs/startup-containers-in-lightning-speed-with-lazy-image-distribution-on-containerd-243d94522361
  25. 34 CONFIDENTIAL - © 2022 CoDMON Inc. 34 contaierd上でコンテナのファイルシステムを管理する「snapshotter」 2.

    コンテナランタイムにおける遅延読み込み機能の仕組み snapshotter plugin overlayfs legacy image default Nicola Apicella “What is a containerd snapshotter?” https://dev.to/napicella/what-is-a-containerd-snapshotters-3eo2#whats-a-snapshotter
  26. 35 CONFIDENTIAL - © 2022 CoDMON Inc. 35 eStargz image

    contaierd上でコンテナのファイルシステムを管理する「snapshotter」 2. コンテナランタイムにおける遅延読み込み機能の仕組み snapshotter plugin overlayfs legacy image overlayfsはeStargz形式に非対応だが eStargzがOCI互換なので利用可能 ※遅延読み込みはできない default
  27. 36 CONFIDENTIAL - © 2022 CoDMON Inc. 36 legacy image

    eStargz image eStargzに対応した「stargz snapshotter」 2. コンテナランタイムにおける遅延読み込み機能の仕組み snapshotter plugin stargz snapshotter plugged in
  28. 37 CONFIDENTIAL - © 2022 CoDMON Inc. 37 ・TOCファイル ・prefetch対象ファイル

    をダウンロード legacy image eStargz image eStargzに対応した「stargz snapshotter」 2. コンテナランタイムにおける遅延読み込み機能の仕組み snapshotter plugin stargz snapshotter plugged in コンテナ起動時
  29. 38 CONFIDENTIAL - © 2022 CoDMON Inc. 38 ・TOCファイル ・prefetch対象ファイル

    をダウンロード legacy image eStargz image eStargzに対応した「stargz snapshotter」 2. コンテナランタイムにおける遅延読み込み機能の仕組み snapshotter plugin stargz snapshotter plugged in コンテナ起動時 コンテナ実行中 必要なファイルは都度TOCを参照してpull
  30. 39 CONFIDENTIAL - © 2022 CoDMON Inc. 39 eStargz形式の課題  

    2. コンテナランタイムにおける遅延読み込み機能の仕組み 既存のOCIイメージをeStargz形式に変換する必要がある これを解決するのが、Stargz Snapshotterからフォークされた SOCI Snapshotter
  31. 41 CONFIDENTIAL - © 2022 CoDMON Inc. 41 「stargz snapshotter」からフォークされた「soci

    snapshotter」   3. 従来のOCIイメージのまま遅延読み込みを実現するSOCI Seekable OCIの略 従来のOCIイメージの形式を変更することなく、遅延読み込みを実現する 簡単に言えば「TOCをイメージの外に保存する」アプローチ
  32. 42 CONFIDENTIAL - © 2022 CoDMON Inc. 42 SOCIを実現するSOCI Index

      3. 従来のOCIイメージのまま遅延読み込みを実現するSOCI Toshiki Watanabe “詳解 : Seekable OCI を使用した AWS Fargate におけるコンテナイメージの遅延読み込み” https://aws.amazon.com/jp/blogs/news/under-the-hood-lazy-loading-container-images-with-seekable-oci-and-aws-fargate/
  33. 43 CONFIDENTIAL - © 2022 CoDMON Inc. 43 SOCIを実現するSOCI Index

      3. 従来のOCIイメージのまま遅延読み込みを実現するSOCI OCIイメージの横に、SOCI Indexというファイルを保存する だけで実現可能 Toshiki Watanabe “詳解 : Seekable OCI を使用した AWS Fargate におけるコンテナイメージの遅延読み込み” https://aws.amazon.com/jp/blogs/news/under-the-hood-lazy-loading-container-images-with-seekable-oci-and-aws-fargate/
  34. 45 CONFIDENTIAL - © 2022 CoDMON Inc. 45 SOCIを実現するSOCI Index

      3. 従来のOCIイメージのまま遅延読み込みを実現するSOCI Toshiki Watanabe “詳解 : Seekable OCI を使用した AWS Fargate におけるコンテナイメージの遅延読み込み” https://aws.amazon.com/jp/blogs/news/under-the-hood-lazy-loading-container-images-with-seekable-oci-and-aws-fargate/
  35. 46 CONFIDENTIAL - © 2022 CoDMON Inc. 46 SOCI Indexの構成要素

      3. 従来のOCIイメージのまま遅延読み込みを実現するSOCI レイヤーごとに、zTOCというメタデータを持つ Toshiki Watanabe “詳解 : Seekable OCI を使用した AWS Fargate におけるコンテナイメージの遅延読み込み” https://aws.amazon.com/jp/blogs/news/under-the-hood-lazy-loading-container-images-with-seekable-oci-and-aws-fargate/
  36. 47 CONFIDENTIAL - © 2022 CoDMON Inc. 47 zTOCの構成要素 3.

    従来のOCIイメージのまま遅延読み込みを実現するSOCI zTOCはTOC, zinfoの二つの要素から構成される。 レイヤーごとに、zTOCというメタデータを持つ Toshiki Watanabe “詳解 : Seekable OCI を使用した AWS Fargate におけるコンテナイメージの遅延読み込み” https://aws.amazon.com/jp/blogs/news/under-the-hood-lazy-loading-container-images-with-seekable-oci-and-aws-fargate/
  37. 48 CONFIDENTIAL - © 2022 CoDMON Inc. 48 zTOCの使い方を見てみる 3.

    従来のOCIイメージのまま遅延読み込みを実現するSOCI 解凍前OCI Layer(tar.gz) 解凍後OCI Layer(tar) TOC zInfo ファイル名 解凍後OCI中のoffset 開始span 終了span bin/bash 1325576 0 0 bin/ls 12353 0 1 zTOC Amazon Web Services - Labs. “Conceptual Data Model.”index.md, GitHub, https://github.com/awslabs/soci-snapshotter/blob/main/docs/index.md#conceptual-data-model
  38. 49 CONFIDENTIAL - © 2022 CoDMON Inc. 49 zTOCをもう少し詳しく見てみる 3.

    従来のOCIイメージのまま遅延読み込みを実現するSOCI 解凍前OCI Layer(tar.gz) 解凍後OCI Layer(tar) TOC zInfo ファイル名 解凍後OCI中のoffset 開始span 終了span bin/bash 1325576 0 0 bin/ls 12353 0 1 zTOC Amazon Web Services - Labs. “Conceptual Data Model.”index.md, GitHub, https://github.com/awslabs/soci-snapshotter/blob/main/docs/index.md#conceptual-data-model
  39. 50 CONFIDENTIAL - © 2022 CoDMON Inc. 50 zTOCをもう少し詳しく見てみる 3.

    従来のOCIイメージのまま遅延読み込みを実現するSOCI 解凍前OCI Layer(tar.gz) 解凍後OCI Layer(tar) span TOC zInfo ファイル名 解凍後OCI中のoffset 開始span 終了span bin/bash 1325576 0 0 bin/ls 12353 0 1 zTOC Amazon Web Services - Labs. “Conceptual Data Model.”index.md, GitHub, https://github.com/awslabs/soci-snapshotter/blob/main/docs/index.md#conceptual-data-model
  40. 51 CONFIDENTIAL - © 2022 CoDMON Inc. 51 zTOCをもう少し詳しく見てみる 3.

    従来のOCIイメージのまま遅延読み込みを実現するSOCI 解凍前OCI Layer(tar.gz) 解凍後OCI Layer(tar) span 解凍可能な 論理的な単位 TOC zInfo ファイル名 解凍後OCI中のoffset 開始span 終了span bin/bash 1325576 0 0 bin/ls 12353 0 1 zTOC Amazon Web Services - Labs. “Conceptual Data Model.”index.md, GitHub, https://github.com/awslabs/soci-snapshotter/blob/main/docs/index.md#conceptual-data-model
  41. 52 CONFIDENTIAL - © 2022 CoDMON Inc. 52 zTOCをもう少し詳しく見てみる 3.

    従来のOCIイメージのまま遅延読み込みを実現するSOCI 解凍前OCI Layer(tar.gz) 解凍後OCI Layer(tar) span 解凍可能な 論理的な単位 TOC zInfo ファイル名 解凍後OCI中のoffset 開始span 終了span bin/bash 1325576 0 0 bin/ls 12353 0 1 zTOC zInfoは解凍前OCI内の spanの情報 Amazon Web Services - Labs. “Conceptual Data Model.”index.md, GitHub, https://github.com/awslabs/soci-snapshotter/blob/main/docs/index.md#conceptual-data-model
  42. 54 CONFIDENTIAL - © 2022 CoDMON Inc. 54 どのような順序で遅延読み込みができるか? 3.

    従来のOCIイメージのまま遅延読み込みを実現するSOCI 解凍前OCI Layer(tar.gz) 解凍後OCI Layer(tar) span TOC zInfo ファイル名 解凍後OCI中のoffset 開始span 終了span bin/bash 1325576 0 0 bin/ls 12353 0 1 zTOC plugged in soci snapshotter
  43. 55 CONFIDENTIAL - © 2022 CoDMON Inc. 55 コンテナ起動前に事前準備 3.

    従来のOCIイメージのまま遅延読み込みを実現するSOCI 解凍前OCI Layer(tar.gz) 解凍後OCI Layer(tar) TOC zInfo ファイル名 解凍後OCI中のoffset 開始span 終了span bin/bash 1325576 0 0 bin/ls 12353 0 1 zTOC span plugged in soci snapshotter ① コンテナ起動前に zTOCを全てダウンロード
  44. 56 CONFIDENTIAL - © 2022 CoDMON Inc. 56 起動後、bin/bashが必要になった場合 3.

    従来のOCIイメージのまま遅延読み込みを実現するSOCI 解凍前OCI Layer(tar.gz) 解凍後OCI Layer(tar) TOC zInfo ファイル名 解凍後OCI中のoffset 開始span 終了span bin/bash 1325576 0 0 bin/ls 12353 0 1 zTOC span plugged in soci snapshotter ① ② ② bin/bash TOCを元に、tarアーカイブ内の該 当ファイルの位置を取得
  45. 57 CONFIDENTIAL - © 2022 CoDMON Inc. 57 起動後、bin/bashが必要になった場合 3.

    従来のOCIイメージのまま遅延読み込みを実現するSOCI 解凍前OCI Layer(tar.gz) 解凍後OCI Layer(tar) TOC zInfo ファイル名 解凍後OCI中のoffset 開始span 終了span bin/bash 1325576 0 0 bin/ls 12353 0 1 zTOC span plugged in soci snapshotter ① ② ② bin/bash bin/bash zinfoを元にtar.gz内で 該当ファイルと一致する spanを特定し解凍 ③
  46. 58 CONFIDENTIAL - © 2022 CoDMON Inc. 58 起動後、bin/bashが必要になった場合 3.

    従来のOCIイメージのまま遅延読み込みを実現するSOCI 解凍前OCI Layer(tar.gz) 解凍後OCI Layer(tar) TOC zInfo ファイル名 解凍後OCI中のoffset 開始span 終了span bin/bash 1325576 0 0 bin/ls 12353 0 1 zTOC span plugged in soci snapshotter ① ② ② bin/bash bin/bash zinfoを元にtar.gz内で 該当ファイルと一致する spanを特定し解凍 ③
  47. 62 prefetch対象の柔軟性を高める Load Order Document という機能の導入が検討されてます Amazon Web Services -

    Labs. “Workload-specific load order optimization.”design-docs/Readme.md , GitHub, https://github.com/awslabs/soci-snapshotter/blob/97feaeabdeb3318279bfe2a707ea81f837a6b83e/docs/design-docs/README.md#design-docs