世界を動かす技術を、日本語で。

カーネル:マルチカーネルアーキテクチャのサポートを導入

2025年9月20日原文(lwn.net)

概要

複数の独立したカーネルインスタンス を1台の物理マシン上で共存・通信させる multikernelアーキテクチャ のRFCパッチシリーズの紹介。 kexecインフラを拡張 し、CPUコア割当やカーネル間通信を実現。 セキュリティ強化、リソース効率化、障害分離 などの利点を提供。 /procインターフェイス による状態監視や、 既存kexecとの互換性維持 も特徴。 現時点では 設計へのフィードバック募集 が主目的で、広範なテストや運用は非推奨。

multikernelアーキテクチャの導入

  • 複数のカーネルインスタンス を1台の物理マシン上で同時稼働
  • 各カーネル が専用CPUコアを担当し、 ハードウェア資源 を共有
  • kexecインフラ を活用したカーネルイメージのロード・管理
  • IPI(Inter-Processor Interrupt)フレームワーク によるカーネル間通信
  • アーキテクチャ固有のCPUブートストラップ機構 (現時点ではx86のみ)
  • /proc/multikernelインターフェイス でインスタンス監視・デバッグ

multikernelアーキテクチャの主な利点

  • ワークロード間の障害分離 による堅牢性向上
  • カーネルレベルでのセキュリティ分離 による安全性強化
  • 従来の仮想化(KVM, Xen等)より高効率なリソース活用
  • KHO(Kernel Hand Over)によるゼロダウンタイムカーネル更新の可能性

実装の概要

  • kexecサブシステム拡張 による複数カーネルイメージの同時ロード
  • x86 SMP INITトランポリン で異なるカーネルへのCPU割当を実現
  • MULTIKERNEL_VECTOR によるx86カーネル間通信経路の新設
  • 汎用multikernel IPI通信フレームワーク でクロスカーネルメッセージング
  • arch_cpu_physical_id() による物理CPU識別子取得
  • kimage管理の動的リスト化 による柔軟なカーネルイメージ追跡
  • /proc/multikernel でロード済みカーネルの状態監視・デバッグ

パッチ内容のまとめ

  • Patch 1/7: kexecによる基本的なmultikernelサポート追加
  • Patch 2/7: x86用SMP INITトランポリンでマルチカーネルCPU起動
  • Patch 3/7: x86向けMULTIKERNEL_VECTORによるカーネル間通信
  • Patch 4/7: 汎用multikernel IPI通信フレームワークの実装
  • Patch 5/7: arch_cpu_physical_id()関数追加でCPU管理強化
  • Patch 6/7: kimage管理の静的グローバルから動的リスト化への変更
  • Patch 7/7: /proc/multikernelインターフェイス追加

重要な注意事項

  • 本パッチはRFC(意見募集)目的 であり、詳細な実装改善が必要
  • 基盤フレームワークのみ提供、今後の拡張や応用はコミュニティに期待
  • 著者の開発環境のみで限定的テスト、広範なハードウェアでの検証が必要
  • 運用用途での利用は非推奨、テスト目的に限定

想定される新たなユースケース

  • リアルタイムカーネルと汎用カーネルの同時稼働
  • セキュリティクリティカルなアプリケーションの分離実行
  • 特定ワークロード専用のカーネルインスタンス提供

Signed-off-by: Cong Wang cwang@multikernel.io

Hackerたちの意見

かなりクールだね、Barrelfish OSができることに似てる気がする。 (https://barrelfish.org/)

ティム・ロスコーがOSDI '21で「オペレーティングシステムがハードウェアを再発見する時が来た」という面白い基調講演をしたよ。彼はBarrelfishプロジェクトにも関わってたんだ。 - https://www.youtube.com/watch?v=36myc8wQhLo

CoLinuxみたいだね。Windowsと一緒に「協調Linux」を動かせたやつ。 (http://www.colinux.org/)

これ、過小評価されてたね!

HPのプリンターも似たような感じだね。二つのコアでLinuxを動かして、もう一つのコアではRTOSを使ってる。

確か、colinuxはユーザーモードLinuxに似ていて、ユーザーランドでカーネルをブートするんだ。つまり、カーネルはWindowsのアプリケーションとして動くってことだね。

面白いことに、著者はこの技術に関するスタートアップを持ってるみたい。彼らのウェブページには情報があるよ。 (https://multikernel.io/)

著者のCong Wangは、いろんな面白いものを作ってるね。最近、kernelscriptを作ったみたいで、https://github.com/multikernel/kernelscript -- これはCの代替よりもずっと強力なBPF用のDSLで、C BPFの複雑さがないんだ。前はBytedanceにいたから、「プロダクション」の複雑さを理解してることに期待が持てる。

なるほど。Xenよりもいいけど、すべてのkvmインスタンスよりもずっと多くのメモリが必要なんだね。聞いたところによると、メモリが大規模ホスティングの本当のポイントで、スピードじゃないらしいから、ちょっと懐疑的だな。共有ハードウェアの同時書き込みや状態をどう扱うのかも理解できないし、kvmやXenと比べるとオーバーヘッドが多い気がする。

exokernelアーキテクチャを思い出すな。[0.5][1.5][2.5] 非CPUリソースの多重化はどう扱われるのか、またはどう扱う予定なのか? [0.5]: https://en.wikipedia.org/wiki/Exokernel [1.5]: https://wiki.osdev.org/Exokernel [2.5]: 「配列のインデックスは0から始めるべきか1から始めるべきか?私の0.5という妥協案は、適切な考慮なしに却下された。」— スタン・ケリー=ブートル

バレルフィッシュとかNRカーネルに近いね。

DEC AlphaシステムのOpenVMS Galaxyを思い出す。仮想化なしで同じハードウェア上でOSの複数インスタンスを並行して動かせたんだ。 (https://www.digiater.nl/openvms/doc/alpha-v8.3/83final/aa_re...)

Hacker Newsで議論の続きを見る