仮想化
(原文はこちら)
仮想化とコンテナは、複数のタスクを同じホスト システム上で互いから隔離するための相互補完的エフォートです。仮想化により、ゲスト システムは自分のハードウェアで実行しているように見えますが、各ゲスト システムは自分専用のカーネルを実行しています。コンテナのアプローチは、ゲスト同士を隔離して、すべてのゲストを同じカーネルの下で実行します。仮想化はより完全な隔離状態を提供し、ゲストはホストとは異なるオペレーティング システムを実行できます。コンテナはさらに効率化を求めることができます。
内容 |
Xen
Xen は、資金潤沢な準仮想化エフォートで、複数のディストリビューターからさまざまな形式で提供されています。ゲストとして任意の OS を実行できますが、ゲスト カーネルが Xen の下で動作するよう構築されている必要があります。
予報: Xen がメインライン カーネルに入るまでには時間がかかりました。Xen 開発者らは常にカーネル コミュニティで作業できたわけではないため、現行のカーネル内でコードを最新に保つことは困難でした。それでもコアの DomU (特権を持たないゲスト) Xen サポート パッチは、2.6.23 にマージされました。Xen 上で作業は継続され、「baloon driver」(ホストが実行中のゲストに対してメモリを追加したり削除したりできる) が 2.6.26 にマージされました。
残りの問題の部分は、Dom0 (スーパーバイザー ドメイン) コードで、まだ 2.6.30 カーネルの外側にありますが、近い将来マージされる見込みはほとんどありません。Dom0 コードをコアの x86 アーキテクチャ サポートに適合させる方法をめぐっては、時間をかけるべきか、何とか解決するべきかなど根本的な意見の相違が見られます。
詳細情報:
- Xen is coming (November, 2004)
- Toward the merging of Xen (March, 2005)
- The Xen patches (May, 2006)
- Connecting Linux to hypervisors (paravirt_ops; August, 2006)
- Xen: finishing the job (March, 2009)
- Xen again (June, 2009)
カーネル仮想マシン (KVM)
KVM は 2006 年 10 月に突如出現しました。まだ「ステルス モード」にあった仮想化企業 Qumranet によって生み出されたエフォートです。KVM は、ハードウェア サポートに依存する完全仮想化ソリューションです。したがって比較的効率的ですが特定の新しいプロセッサでしか機能しません。このコードは 2.6.20 カーネルにマージされました。
予報: KVM は既にメインラインに入っており、一般的に使用されています。特定のコード部分 (ユーザースペース API など) は最悪の状態を過ぎ、安定しています。KVM の SMP ゲスト サポート は 2.6.23 で追加されました。
詳細情報:
- An early KVM patch summary (October, 2006)
- Some KVM developments (January, 2007)
- KVM 15 (February, 2007)
Lguest
Lguest は、IBM の Rusty Russell によって開発されたシンプルな仮想化プロジェクトです。x86 ストック ハードウェアで完全仮想化を提供します。このコードは最低限の機能を満たすことを目的としているため、他の仮想化ソリューションにある機能 (ライブ マイグレーションなど) を実現することはなさそうです。
予報: Lguest は 2.6.23 でマージされました。仮想化されたネットワークとディスク デバイスを Lguest ゲストに提供するための「virtio」は 2.6.24 でマージされ、2.6.25 で拡張マージされました。Lguest は、将来的には i386 以外のアーキテクチャに移植されると思われます。
詳細情報: An introduction to lguest (January, 2007)
コンテナ
コンテナ指向プロジェクトはいくつかあり、それらのサポート コードが近い将来カーネルに入ることを誰もが願っています。ほとんどの場合、ネックとなっているのは「カーネル開発者は、各コンテナ実装用の個別のサポート構造をマージする気がない」という点です。このためコンテナ開発者は、これらのプロジェクトに共通のインフラストラクチャを提示するよう求められてきました。
コンテナ プロジェクトのニーズは、どのケースでも同じです。カーネル内にあるグローバルに可視なすべてのリソースを間接層の背後に移動しなければなりません。これらのリソースには、ファイルシステム、プロセス ID、デバイス、ネットワーク インタフェース、プロセス間通信メカニズム、現在のシステム タイムなどが含まれます。また、通常これらのプロジェクトには、コンテナが互いに過度に干渉しないようにするためのリソース制御メカニズムが必要です。
「プロセス コンテナ」と呼ばれるインフラストラクチャのコア部分があります。これは、カーネル内のすべてのコンテナ関連テクノロジを結合するためのものです。プロセス コンテナは、CFS グループ スケジューリング機能にも使用されます。
予報: 各種のコンテナ インフラストラクチャのかけらを再生し、それらをマージしてメインラインに入れるプロセスは続きます。2.6.27 で、ネットワーク名前空間処理は完結に近づいています。外側に残っているものには、完全なユーザー名前空間、改善された sysfs サポート、および動作中のコンテナのチェックポイント&復元メカニズムなどがあります。
詳細情報:
- Containers and PID virtualization (January, 2006)
- Virtual time (April, 2006)
- Containers and lightweight virtualization (April, 2006)
- Paravirtualization and containers (Kernel summit report, July, 2006)
- Resource beancounters (August, 2006)
- Another container implementation (Resource control, September, 2006)
- Network namespaces (January, 2007)
- Process containers (May, 2007)
- Kernel Summit 2007 session on containers (September, 2007)
- Notes from a container (October, 2007)
- Process IDs in a multi-namespace world (November, 2007)
- Kernel-based checkpoint and restart (August, 2008)
- Sysfs and namespaces (August, 2008)

This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License.



