Slide 1

Slide 1 text

コンテナ技術における 最新の研究動向 2023/10/8 第56回情報科学若手の会 松本直樹(京都大学 情報学研究科) 1

Slide 2

Slide 2 text

My Work: bypass4netns Rootless コンテナの通信性能を改善するモジュール • Seccomp Notify を用いてソケットを差し替える 2 38.6 39.2 0.452 35.8 41.4 39.8 0 10 20 30 40 50 Container → Host Host → Container Throughput(Gbps) Rootful Rootless w/o bypass4netns Rootless w/ bypass4netns https://x.gd/SBo9t

Slide 3

Slide 3 text

My Work: bypass4netns Seccomp を用いることでアプリケーションに改変無しに高速化 • LD_PRELOAD 無しで動作 • 最近は Usernetes (Kubernetes の Rootless 版)にも使えないか検討中 3 https://x.gd/SBo9t

Slide 4

Slide 4 text

My Work: D4C (Delta updating for Container images) コンテナイメージの更新に要するデータサイズを削減する • 差分符号(delta encoding) を用いている • 従来手法に比べて最大 95 % 削減可能 4 er er C ient Container nti e i na s otter in Container Container ro i e ontainer i a es or it r nti e ate n e ser er o nt e ta n e it i e istr e ta n e store o n oa i a e enerate e ta n es enerate ate n e it e ta er in ate n e 28.27 26.57 69.84 118.56 4.46 3.79 16.51 47.26 0.00 20.00 40.00 60.00 80.00 100.00 120.00 140.00 .1 - .2 .2 - .3 .29 - .30 .30 - .31 postgres mysql Delta Bundle Size (MB) File-by-file delta Proposed method https://x.gd/N12cA Efficient Container Image Updating in Low-bandwidth Networks with Delta Encoding

Slide 5

Slide 5 text

My Work: D4C (Delta updating for Container images) 差分同士のマージや 差分を lazy に適用するファイルシステム等 5 https://x.gd/N12cA

Slide 6

Slide 6 text

Linux コンテナとは? Linux kernel の機能を利用した軽量な実行環境分離技術 • ホストから隔離されたプロセス空間,RootFS,ネットワークを利用可能 • CPU, メモリ資源の割り当てを制御することも可能(cgroups) 良くある例 • 実行環境をバンドルして配布する場合 6 $ docker pull hello-world ← hello-world イメージをダウンロード $ docker run hello-world ← 実行 Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon.

Slide 7

Slide 7 text

今回取り上げる要素 コンテナを実現するための要素は複数にわたる • 高/低レベルランタイム • コンテナネットワーク • Kubernetes などオーケストラ 今回の発表では以下の事例を取り上げる (ニッチ過ぎる?) • コンテナネットワークの高速化 • コンテナイメージの配布 7 コンテナ コンテナ 低レベルランタイム 高レベルランタイム レジストリ コンテナ ネットワーク コンテナ コンテナ の作成 コンテナ/ イメージの管理

Slide 8

Slide 8 text

コンテナ間のネットワークとは? コンテナ間や他のホストとの通信には適切なネットワークが必要 → より高速なネットワーク, 柔軟な通信の制御が求められる ※ 一般的な Docker の環境では Linux bridge, iptables を用いている 8 プロセス TCP/IP スタック プロセス TCP/IP スタック Linux Bridge コンテナ ホスト A Kernel iptables プロセス ホスト B veth

Slide 9

Slide 9 text

何が問題? Network namespace 分離によるオーバーヘッド • ネイティブ環境より遅い = アプリケーションの性能劣化 • CPU 資源をより多く消費する = アプリケーションに割ける資源が減る → サービス品質の劣化, 必要な計算資源の増加(コスト増) 9 ホスト アプリケーション コンテナランタイム ネットワーク Linux kernel プロセス TCP/IP スタック プロセス TCP/IP スタック Linux Bridge コンテナ Kernel iptables プロセス veth

Slide 10

Slide 10 text

AF_GRAFT コンテナとホストの TCP/IP スタックを通るのは非効率的 → コンテナ側の TCP/IP スタックをバイパスすればよい 特殊なソケット(AF_GRAFT) によりホスト側の TCP/IP スタックを利用する 👍ホストと同等なネットワーク性能 👎ソケットレイヤ以下を扱うアプリケーション(NFV 等)では利用できない 10 Grafting sockets for fast container networking (Ryo Nakamura et al., 2018)

Slide 11

Slide 11 text

NetKernel 同じホスト上の複数 VM 内でそれぞれ TCP/IP の処理を行うのは無駄 → TCP/IP の処理を一手に引き受けるモジュールを設置する 👍クラウド等のインフラ提供者が最適化された TCP/IP を提供できる 👎netfilter など既存の vNIC を前提とした仕組みが利用できない 11 NetKernel: Making Network Stack Part of the Virtualized Infrastructure (Zhixiong Niu et al., 2020)

Slide 12

Slide 12 text

Slim コンテナとホストの分離 = パフォーマンスの劣化 → 分離しなくても良いのでは? コンテナ間通信をホスト間通信に置き換える 👍ホストと同等な性能が出せる(bypass4netns, AF_GRAFT と同様) 12 Slim: OS Kernel Support for a Low-Overhead Container Overlay Network (Danyang Zhuo et al., 2019)

Slide 13

Slide 13 text

FreeFlow コンテナでも RDMA を柔軟に利用したい ※ A e ote ire t e or A ess : C を介さずメモリへのアクセスが出来る。 CPUを消費せずに通信で非常に高速 → RDMA を中継するソフトウェアを配置し接続(QP)を管理 13 FreeFlow: Software-based Virtual RDMA Networking for Containerized Clouds (Daehyeok Kim et al., 2019)

Slide 14

Slide 14 text

ここまでのまとめ Linux 標準のネットワーク • これまでの netfilter を始めとする既存資産を活用しやすい • 性能はホストネイティブに比べると劣る 研究の動き = より高速に、より柔軟に • 無駄な部分をそぎ落としてできる限り高速化 • クラウド基盤との組み合わせを前提とした最適化 • 既存資源にとらわれない新たな手法の提案 (RDMA 等) 14

Slide 15

Slide 15 text

コンテナイメージとは? 大雑把にはコンテナのファイル群を固めたもの • レイヤ構造を持ち、Dockerfile の各行が対応している • 同じレイヤはイメージ間で共有できる e.g., ubuntu, debian 等 OCI (Open Container Initiative) で Image Format Spec として規格化 • Manifest: イメージに含めるレイヤの mediaType や digest を保持するファイル • Layer: ファイルシステムのバンドル, tar で固めて gz や zstd で圧縮する → docker pull 等を利用してローカルにダウンロード・展開(pull)し利用 15 d8d33f98a76eca37dad5cd1c8838d02 cfaed61837f4f3c4937a36cdc29aa202f c1394d6d622df363279a1e3d54401fd5 be59819c9aeca54a7848df216f708ea9

Slide 16

Slide 16 text

何が問題? ローカルにコンテナイメージが無い場合、起動前に pull をする → pull に要する時間が長いと処理時間が無駄になる, 更新の度に待つ必要がある コンテナイメージは意外と大きい (cuda:12.2.0-devel-ubuntu20.04 で3.27GB) • 特にIoT デバイスで使う場合、ネットワーク環境や処理性能の点で大きな問題となる 16 “IMAGE PULLING” PULLING! https://xkcd.com/303/ を改変

Slide 17

Slide 17 text

Lazy-pulling コンテナは出来るだけ速く起動したい(特に Serverless) → コンテナイメージの pull に時間がかかる(起動時間の 76% を占めることも) Lazy-pulling: 起動に必要なファイルだけ pull しコンテナを起動する • 共有ストレージを利用した Slacker (Tyler Harter et al., 2016) が最初の取り組み • Cider, Wharf, CernVM-FS 等も同様の仕組み 17 a Container Lazy-pulling plugin Container Storage Container 2. Request files to start the container 3.Files or chunks 5. Request a file when read Client 4. A container starts 6.Files or chunks 1. Request to start a container

Slide 18

Slide 18 text

estargz Lazy-pulling を既存のイメージに互換性がある形で実装 • tar.gz で圧縮されたレイヤから特定のファイルのみ読み出せるように stargz を利用 • stargz: Gzip(tar(fileA) + tar(fileB)) を Gzip(tar(fileA)) + Gzip(tar(fileB)) containerd, BuildKit で公式にサポートされた実用的な実装 18 https://github.com/containerd/stargz-snapshotter/ https://www.slideshare.net/KoheiTokunaga/estargzlazy-pulling より

Slide 19

Slide 19 text

DADI Alibaba で使われているコンテナイメージ配布手法(1万のコンテナを 1000 ホストに4秒で起動) ブロックデバイスベースのレイヤ+P2Pでクラスタ上に高速に配布 • Overlay Block Device: OverlayFS のようにレイヤの積み重ねを実現する • ZFile: チャンク単位でランダムアクセス可能な圧縮形式(dict zip のようなもの) 19 DADI: Block-Level Image Service for Agile and Elastic Application Deployment (Hubia Li et al., 2020)

Slide 20

Slide 20 text

AWS Lambda の例 AWS Lambda で使われているコンテナイメージ配布手法(毎秒1万5千のコンテナを起動) 複数階層のキャッシュ機構と組み合わせたコンテナイメージ配布 • tail-latency を減らすために Erasure Coding (4 of 5) を採用 • キャッシュ戦略は LRU-k (過去k番目のタイムスタンプで最も古いエントリを evict) 20 On-demand Container Loading in AWS Lambda (Marc Brooker et al., 2023)

Slide 21

Slide 21 text

ここまでのまとめ イメージ Pull 高速化はサービス品質を高める上で重要 (特に Serverless) • Lazy-pulling, P2P(Alibaba), キャッシュ(AWS) による高速化 • 必要ないファイルを消す docker-slim なども活用されている ※ イメージの用途によっては活用が困難な場合もある 結局はファイル (blob) をいかに高速に読み込むか?という問題になる • ファイルシステムやP2P の分野で研究されてきた内容 • 読み出すファイルや順序に一定の傾向がある → 何かしらの工夫ができる • クラウドではなく IoT デバイスでコンテナを動かす場合はどうだろうか? → 処理能力, メモリが小さい, 帯域が制限される, ネットワークが不安定等 21

Slide 22

Slide 22 text

他要素の様子 • Sky Computing • Cloud, Edge, Fog の次のトレンド(になりたがっている) • 複数のクラウドサービスをシームレスに使い分ける • ストレージは クラウド A, GPU はクラウド B といった感じ • 色々なクラウドで同じ環境を立てる = コンテナの出番 • N I ‘ においても SkyPilot, SkyPlane が発表されている • Real time container • 最悪実行時間の保証 = データ処理で極端にレスポンスが遅くなる場合を避ける • Hierarchical Resource Orchestration Framework for Real-Time Containers Vá a tr ár et al., 2023, ACM Trans on Embedded Computing Systems) • IoT 分野など一定の品質が要求される分野における活用が見込まれる 22

Slide 23

Slide 23 text

まとめ • コンテナ技術は楽しいこと(低レイヤ成分多め)がたくさん • コンテナ自体に限らず周辺の触れる技術が多い • カーネル, ファイルシステム, P2P, 圧縮アルゴリズム, 差分符号等 • 研究としても論文を書ける • クラウドベンダと真っ向から勝負しない選択もある • 論文を書くための実装≠実用的な実装 なことがあるため注意 • 今後のトレンドは Edge や Cloud 単体ではなく、それらの連携? • VM, コンテナ, WASM の使い分けとか • より多くのレイヤに関する知識・経験が要求されるようになる? 23