# ユニカーネル ## 定義 ユニカーネル(unikernel)とは、最小限のAPI集合を持つシングルアドレス空間オペレーティングシステムであり、仮想マシンがフル独立のOSカーネルではなく、ホストシステムとインタフェースするライブラリ群の上で動作するライブラリOS(library operating system)として仮想化を行うアプローチである。起源はExokernelに関する初期の研究に遡る。アプリケーションとカーネル(OSライブラリ)は両方とも特権リング0で動作し、動的ELFリンカがLinux ABI経由の標準ライブラリ呼び出しをユニカーネルの実装へ動的に解決することで、通常であればユーザ・カーネルモード切り替えを伴うシステムコールを、通常の関数呼び出しとして扱えるようにする。制約として、複数プロセス(`fork()`・`exec()`)をサポートしないため、マルチスレッドアーキテクチャのアプリケーションに用途が限定される。(Source: [[@2021__Middleware__A Fresh Look at the Architecture and Performance of Contemporary Isolation Platforms]] §2.4, §2.4.1) 代表実装は[[OSv]]で、ベースイメージとアプリケーションを融合(fuse)してユニカーネルイメージを構築し、既存のハイパーバイザー([[QEMU]]・[[Firecracker]])上で実行する。 ## 横断的知見 - (このconceptは現時点で [[@2021__Middleware__A Fresh Look at the Architecture and Performance of Contemporary Isolation Platforms]] のみを出典とする。他のユニカーネル関連ソースがingestされ次第、横断的知見を蓄積する。) - 論文単体の観察として記録: ユニカーネルは「ホストカーネルへの攻撃面を最小化する」という設計理念(狭いインタフェース)と、「ハイパーバイザーへの強い依存」という実装上の特性が同居する。拡張HAPメトリクスでOSvはハイパーバイザー使用にもかかわらずホストカーネル関数呼び出しが全プラットフォーム中最少だった一方、メモリ性能・起動時間はハイパーバイザーの選択(QEMU vs Firecracker)に強く依存する結果となった。これは「ユニカーネルの性能特性を論じるには、ユニカーネル単体でなく基盤ハイパーバイザーとの組み合わせを単位として評価すべき」ことを示唆する。 - Unikraft は、既存ユニカーネルの「小さいがモノリシックなカーネル」という制約に対し、OS プリミティブと API をマイクロライブラリへ分解する。単一アドレス空間という実行形態だけでなく、どの API 実装をイメージへ組み込むかを開くことが、特殊化を反復可能な開発作業に変える。(Source: [[@2021__EuroSys__Unikraft - Fast, Specialized Unikernels the Easy Way]]) - Unikraft と OSv はともにシステムコール境界を削減するが、OSv のバイナリ互換性・モノリシック構成に対し、Unikraft は musl と静的 syscall shim、交換可能な API を使う。互換性を先に取るか、API を選択して性能を取るかが、ユニカーネル設計の異なる軸として現れる。(Source: [[@2021__Middleware__A Fresh Look at the Architecture and Performance of Contemporary Isolation Platforms]], [[@2021__EuroSys__Unikraft - Fast, Specialized Unikernels the Easy Way]]) ## 未解決の問い - OSv以外のユニカーネル実装(IncludeOS、MirageOS等)でも、同様の「ハイパーバイザー依存性」パターン(HAPは低いがハイパーバイザー選択に性能が強く依存)が見られるか。 - ユニカーネルのカスタムスレッドスケジューラ(OSvがffmpeg・MySQL Sysbenchで示した性能劣化の主因と推測される)は、成熟した汎用OSのスレッド実装とどこまで性能ギャップを詰められるか。既存のスケジューラ実装を流用するアプローチは技術的に可能か。 - マルチプロセスをサポートしないという制約は、コンテナオーケストレーション環境(1コンテナ1プロセスが前提)との相性にどう影響するか。 - Unikraft のマイクロライブラリ方式は、OSv・Rump・Lupine などの既存実装よりどの条件で移植コストを下げるのか。開発者調査では減少傾向が示されたが、アプリケーション規模・依存関係・必要 API 数ごとの再現可能なモデルは未確立である。 ## 関連 - ソース: [[@2021__Middleware__A Fresh Look at the Architecture and Performance of Contemporary Isolation Platforms]] - エンティティ: [[OSv]] / [[QEMU]] / [[Firecracker]] - 概念: [[コンテナ仮想化]] / [[ハードウェア仮想化]] - 概念: [[ソフトウェア特殊化]] ## 出典 - [[@2021__Middleware__A Fresh Look at the Architecture and Performance of Contemporary Isolation Platforms]](§2.4 Unikernels、§2.4.1 OSv、Figure 4、Finding 1, 5, 11, 15, 21, 27, Conclusion 4, 8) - [[@2021__EuroSys__Unikraft - Fast, Specialized Unikernels the Easy Way]](設計原則、Figure 1〜22、Table 1〜4、§9)