マルチプロセスを
サポートする
Unikernel-based VM

東京農工大 金津 穂,山田 浩史

Unikernel

  • VM を用いたコンテナ

    • アプリプロセスを強力に分離

  • 現状の IaaS では図左のような運用

  • Unikernel の場合図右のようにシンプルな構成を実現

unikernel

Unikernel の特徴 — 1

  • 単一のメモリ空間

  • システムコールが関数呼び出しに置き換えられる

    • → オーバーヘッド削減が期待できる

    • → 実装が簡潔になる

Unikernel の特徴 — 2

  • アプリの用途に特化させたカーネルの実現が容易

    • コンテナ仮想化にはない利点

  • 例:DlibOS [Mallon et al., ASPLOS ’18]

    • 従来 DPDK などを使用してカーネルをバイパス

    • Unikernel を利用してメモリ保護と両立しつつ容易に実現

unikernel-feature

Unikernel の問題点

  • マルチプロセスアプリケーションが稼動しない

    • fork(2)exec(2) をサポートしない

  • → 既存のマルチアプリケーションが起動しない

    • ソースコードの改変が必要

  • マルチプロセスの恩恵が受けられない

    • PosgreSQL …​ コネクションごとにプロセスを生成し互いを isolation

    • NginX …​ 複数プロセスでイベントループを回し高性能化を図る

提案: Unikernel fork

  • マルチプロセスをサポートする Unikernel

    • IaaS 上でより unikernel の利点を継承する

    • 既存のマルチプロセスアプリを稼動可能

    • マルチプロセスの恩恵を享受可能

Design Goals

  1. マルチプロセスに対応

  2. アプリケーションに応じて容易にカーネルの特化が可能

    • アプリに応じた設計を行うことで計算資源を効率活用

  3. 既存のプログラムを改変せず利用可能

    • 互換性が向上し容易に活用可能に

  4. 他ノードへアプリ透過的に子プロセスが配置可能

    • データセンター規模での資源の活用

Unikernel fork

  • 起動時に VM 構成をカーネルへ保存

  • hypercall を用いて unikernel の fork を実現する

  • hypercall の処理は以下の流れ

    • ハンドラでプロセスの複製を実行

    • kvm の機能を利用し VMCS の設定

    • VM 構成を復元

  • QEMU/kvm と OSv へ実装予定

overview

方針

  • Unikernel プロセス間通信対応

  • 仮想ディスクの取扱い

  • ネットワークデバイス

Unikernel プロセス間通信対応

  • 起動時に VM 構成をカーネルへ保存

  • 実現方法は未定

  • 同一ホストの場合共有メモリを利用するなどが考えられる

  • ハイパーバイザで VM の ID を管理し PID として使えるようにする

ipc

仮想ディスクの取扱い

  • 同一ホストで複製された場合仮想ディスクへの書き込みを調停する必要がある

  • 現状では同時に書き込みが発生した場合競合状態が発生する

  • 案として,子プロセスでの書き込みを一度親プロセスを経由するようにするなど

disc

ネットワークデバイス

  • MAC アドレスの重複を避ける必要

  • 通信中の場合通信をどのように継続するか検討が必要

    • IP アドレスは親と子が同じアドレスが見える必要がある

  • 以下のような流れが考えられる

    • ハイパーバイザーが子プロセスの VM 通信を受ける

    • プロキシ

network width=40%

まとめ

  • マルチプロセスをサポートする新たな機構 Unikernel fork を提案した

  • またそのセマンティクスと実装のコンセプトについて紹介した

  • 今後はその実現を進めていく