Multikernelは、仮想化なしで複数のカーネルを実行するための優れたユーティリティです。

キーポイント:
  • マルチカーネルLinuxは、ベアメタル上で独立したカーネルを同時に実行することを可能にする。
  • Linux 7.0カーネルをベースとしており、CONFIG_MULTIKERNELを使用し、現在はx86_64アーキテクチャをサポートしています。
  • これにより、仮想化(KVMハイパーバイザー)のオーバーヘッドが排除され、コンテキストスイッチが2,5倍高速化されます。
  • コンテナとは異なり、インスタンスはカーネルを共有しないため、障害や脆弱性がサーバー全体に影響を与えることを防ぎます。
  • KerfツールをLazy CMAおよびDAXFSモジュールと組み合わせて使用​​することで、リソースを動的に管理し、Dockerイメージを起動できます。

マルチカーネルLinux

昨年、このブログで、TikTokの開発元であるByteDance社が提案した、複数のLinuxカーネルを同時に実行できる実験的な技術であるParker(PARTitioned KERnel)というユーティリティについて取り上げました。そして今、1年半余りを経て、このプロジェクトから新しい公開ユーティリティ「Multikernel Linux(mklinux-v7.0-mk2)」がリリースされました。

この開発により、単一の物理サーバー内で複数の独立したカーネルインスタンスを同時に実行できる、Linuxカーネルの特殊なバリアントが導入されました。この技術はベアメタル上で直接動作するため、ハイパーバイザーや仮想化レイヤーが不要となり、各インスタンスが割り当てられたメモリ、CPU、およびデバイスに直接アクセスできます。

ByteDance-Parker-マルチカーネル
関連記事
パーカー:仮想化なしで複数のLinuxカーネルを実行できる新しい技術

このプロジェクトは、最近リリースされたLinux 7.0カーネルをベースにしており、CONFIG_MULTIKERNEL設定パラメータを使用してこの機能を有効にすることができます。このオプションを無効にすると、生成されるカーネルはLinux 7.0とまったく同じになり、標準のLinux 7.0と同様に動作します。現在、この最初のバージョン(v7.0-mk2)はx86_64アーキテクチャのみをサポートしており、従来の仮想化とコンテナ分離の間のパフォーマンスとセキュリティのギャップを埋めるように設計されています。

パフォーマンス低下を伴わない隔離

仮想化における最大の問題点は、ハイパーバイザによって課されるパフォーマンス上の「負担」です。これに対し、マルチカーネルLinuxは、仮想マシンの終了遷移、第2レベルメモリ変換、およびデバイスモデルによって発生するオーバーヘッドを排除します。

Xeon Gold 5418Yプロセッサ(Sapphire Rapids)でのテスト後に公開されたパフォーマンスデータによると、マルチカーネルシステムはKVMゲストと比較して実行速度が劇的に向上しています。例えば、プロセス間のコンテキスト切り替えは2,5倍高速化され、パイプのレイテンシは半分以下(2,18倍)に短縮され、読み取りや書き込み操作などの基本システムコールの応答時間は25%以上向上しています。

従来のDockerコンテナと比較して、マルチカーネルは優れた保護機能を提供します。これは、コンテナが同じホストカーネルを共有するため、カーネルレベルの脆弱性、パニック、または内部ロックの飽和がすべてのテナントに影響を与えるのを防ぐためです。マルチカーネルのエコシステムでは、各環境が独自の独立したカーネルを持つため、1つのインスタンスで重大な障害が発生しても、他のインスタンスは影響を受けずに動作を継続し、Webサーバーから集中的なAIトレーニングワークロード(機械学習)まで、あらゆるものを同じハードウェア上で実行するのに最適な隔離された環境を保証します。

Kerfによる動的な割り当てとオーケストレーション

マルチカーネルLinuxは、CPU、RAM、PCIデバイスなどのリソースを大量に管理するホストカーネルを使用して動作します。カーネルは、既存のデバイスツリー構造(/sys/fs/multikernel/でアクセス可能)を利用してこのリソースプールを分割し、ネイティブのkexec_file_load()サブシステムを介して「子カーネル」を起動します。Linuxのホットプラグ機能により、これらのリソースはサーバーの再起動を必要とせずにインスタンス間で動的に移動できるため、予測可能でリアルタイムに調整可能なパフォーマンスが保証されます。

このエコシステムを統括するために、開発者たちはKerfコマンドラインツールを導入しました。このユーティリティは、補完的なオープンソースモジュールを利用して、インスタンスのライフサイクル全体を管理します。その一つがLazy CMAで、起動前の設定を必要とせずに、実行時に連続した物理メモリを割り当てます。

もう一つの柱はDAXFSというモジュールで、インスタンスがメモリ内でファイルシステムを直接共有できるようにするものです。これにより、Kerfは子カーネルをDockerコンテナイメージ内で直接起動し、エミュレーションレイヤーを必要とせずにファイルシステムを活用し、データコピーなしでメモリ内ディスクリプタを使用してネットワーク接続を行うことができます。

特筆すべきは、この最初のリリースは5レベルページングアーキテクチャとアクティブなKASLRの下で集中的な安定性テストに合格しており、子カーネルがクラッシュした場合でもリソース回復が完全に安全であることが実証されている点である。

マルチカーネルLinuxは、システムロック(例えば、同じキャッシュ上で多数のアンリンクやリネームプロセスが発生するなど)によって競合するワークロードを、物理プロセッサソケットに合わせた個別のカーネルに分割することで、単一のモノリシックカーネルが課すパフォーマンスの限界を超える拡張性を実現し、サーバー統合と高性能クラウドコンピューティングにおける新たな時代を切り開きます。

最後に、さらに詳しく知りたい場合は、以下のリンクから詳細をご確認いただけます。


Googleで優先ソースとして追加する