昨年、このブログで、TikTokの開発元であるByteDance社が提案した、複数のLinuxカーネルを同時に実行できる実験的な技術であるParker(PARTitioned KERnel)というユーティリティについて取り上げました。そして今、1年半余りを経て、このプロジェクトから新しい公開ユーティリティ「Multikernel Linux(mklinux-v7.0-mk2)」がリリースされました。
この開発により、単一の物理サーバー内で複数の独立したカーネルインスタンスを同時に実行できる、Linuxカーネルの特殊なバリアントが導入されました。この技術はベアメタル上で直接動作するため、ハイパーバイザーや仮想化レイヤーが不要となり、各インスタンスが割り当てられたメモリ、CPU、およびデバイスに直接アクセスできます。
このプロジェクトは、最近リリースされた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は、システムロック(例えば、同じキャッシュ上で多数のアンリンクやリネームプロセスが発生するなど)によって競合するワークロードを、物理プロセッサソケットに合わせた個別のカーネルに分割することで、単一のモノリシックカーネルが課すパフォーマンスの限界を超える拡張性を実現し、サーバー統合と高性能クラウドコンピューティングにおける新たな時代を切り開きます。
最後に、さらに詳しく知りたい場合は、以下のリンクから詳細をご確認いただけます。