組み込みシステムの仮想化

ハイパーバイザーが小型機器に組み込まれるに至った経緯と理由

最近の技術関連のニュースは、サーバーとデスクトップの仮想化に関する話題で溢れていますが、その他にも急速に成長している仮想化技術があります。それは、組み込み仮想化です。携帯電話やセキュリティー・カーネル、そして組み込み並列オペレーティング・システムをはじめ、組み込み分野には仮想化に適したアプリケーションがいくつもあります。この記事では、組み込み仮想化という領域について詳しく探り、組み込み仮想化が身近な組み込みシステムになりつつある理由を説明します。

M. Tim Jones, Platform Architect, Intel

author photo - M. Tim JonesM. Tim Jones は組み込みソフトウェアのエンジニアであり、『Artificial Intelligence: A Systems Approach』、『GNU/Linux Application Programming』(現在、第 2 版です) や『AI Application Programming』(こちらも現在、第 2 版です)、それに『BSD Sockets Programming from a Multilanguage Perspective』などの著者でもあります。技術的な経歴は静止軌道衛星用のカーネル開発から、組み込みシステム・アーキテクチャーやネットワーク・プロトコル開発まで、広範にわたっています。彼は Intel に勤務していて、コロラド州ロングモン在住です。



2011年 4月 19日

仮想化によって作り出される市場と機会は爆発的に拡大しており、仮想化自体のバリエーションも広がっています。仮想化はメインフレームで始まったものの、サーバーに重要な位置を見出しました。多数のワークロードに対して限られたサーバーしか使用できなかったことから、仮想化により、複数のサーバー・インスタンスを 1 台のサーバーでホストできるようにして、コスト、管理、占有面積の削減を実現したというわけです。その後、仮想化はタイプ 2 (ホスト) ハイパーバイザーという形で一般利用者の領域に進出し、1 台のデスクトップで複数のオペレーティング・システムを同時に稼働することを可能にしました。次にもたらされた技術革新は、デスクトップの仮想化です。仮想デスクトップを使用することで、サーバーは最小限の機能のみを備えたクライアント・エンドポイント (シン・クライアント) を使用して、ネットワーク上で複数のクライアントをホストできるようになりました。そして現在、仮想化は非常に多くの対象が存在する新たな領域に進出しつつあります。それは、組み込み機器です。

仮想化によって実現されるメリットが増大し続けていくなか、このように仮想化が展開していったのは、さほど驚くべきことではありません。仮想化は大規模な IBM メインフレームを起点に進化してきましたが、その傾向はコンピューティングの進化と同じ道を辿り、サーバーの仮想化、デスクトップの仮想化、そして現在の組み込み機器の仮想化へと続いています。1990年代にネイティブ・マイクロプロセッサーが仮想化をサポートするようになったことから、仮想化はメインフレームの枠を超えて成長し、華やかな時代を迎えました (図 1 を参照)。

図 1. タイプ 1 ハイパーバイザーの進化の歴史
タイプ 1 ハイパーバイザーの進化の歴史を示す図

この記事では、いくつかの組み込み仮想化アプリケーションについて詳しく探り、仮想化がどのようにその適用範囲を広げて新しいアプリケーションを見つけているかを説明します。また、オープンソースが先導している分野についても取り上げます。

組み込み仮想化とは何か

組み込み仮想化とは、組み込みシステム内にデプロイされたタイプ 1 ハイパーバイザーのことを表しています。けれどもこれは多少、矛盾した言い方です。組み込みシステムの定義の 1 つは、数限られた専用の機能を実行するように設計されたコンピューター・システムですが、組み込みシステムにハイパーバイザーを追加すると、組み込み機器には柔軟性と高度な機能が加わり、新たなクラスのシステムへと形を変えるからです。

マイクロカーネルでの重要な抽象化

1995 年、Jochen Liedtke はマイクロカーネルで実現しなければならない 3 つの重要な抽象化を定義しました。それは、アドレス空間 (分離のため)、スレッド (並行性のため)、そしてプロセス間通信 (異なるアドレス空間にあるスレッド間での通信のため) です。

ハイパーバイザーとは、(タイプ 1 ハイパーバイザーの場合) ハードウェア上で直接実行される特殊なタイプのオペレーティング・システムのことです。ハイパーバイザーはそのベースにあるハードウェア・プラットフォームを抽象化し、1 つ以上の仮想マシン (VM) が他の VM とプラットフォームを共有していることを認識せずにそのプラットフォームを使用できるようにします。このコンテキストでの VM は、オペレーティング・システムとそのアプリケーションを収容する単なるコンテナーに過ぎません。このような環境が持つ興味深い利点は、ハイパーバイザー上の VM は互いに独立して稼働するため、ハイパーバイザー上では複数のオペレーティング・システムを実行することも、同じオペレーティング・システムを異なる構成で実行することもできることです。また、この分離性ならではの利点もあります。それについては、追って説明します。

さらに付け加えると、組み込みハイパーバイザーとは、仮想化プラットフォームにマイクロカーネルを組み合わせたハイブリッド・ハイパーバイザーのことです (図 2 を参照)。このようなハイパーバイザーは、VM (オペレーティング・システムとアプリケーション) だけでなく、個々のアプリケーションもサポートすることができます。

図 2. ベアメタル・オペレーティング・システムおよびハイパーバイザー
ベアメタル・オペレーティング・システムおよびハイパーバイザーを示す図

これまで組み込み機器というと、厳しいリソース制限を伴うのが一般的でしたが、最近の組み込み機器は、サーバー・レベルの機能 (仮想化のハードウェア・サポートなど) を備えた強力なプロセッサーから、計算能力とリソースを減らして電力消費を最適化したシステムに至るまで多岐にわたります。こうした多様性により、組み込み機器のハイパーバイザーの環境には、メインフレームやサーバーのハイパーバイザーの環境よりも多くのことが要求されます。


組み込み仮想化の特性

従来のハイパーバイザーとは異なり、組み込みハイパーバイザーが実装する抽象化には、他のプラットフォームにはない制約が課せられます。このセクションでは、組み込み分野での制約および機能について検討します。

効率性

すべてのハイパーバイザーは効率性を追求するものですが、組み込みハイパーバイザーの場合には、従来の仮想化環境にはない制約にも対処しなければなりません。プロセッサーの共有を別とすれば、組み込み環境でのパフォーマンスにとって重要な制限要因の 1 つとなりがちなのは、メモリーです。このことから、組み込みハイパーバイザーは小規模で、メモリーの使用という点で極めて効率的でなければなりません。

セキュリティー

小規模であるということには、それなりの利点があります。アプリケーションのコードは、サイズが小さければ小さいほど、検証してバグがないことを証明するのが簡単です。実際、ハイパーバイザーのベンダーのなかには、公式にハイパーバイザーを検証してバグがないことを保証しているベンダーもあります。ハイパーバイザーの場合には、サイズが小さければ小さいほど、それだけ安全で信頼できるプラットフォームになります。それは、ハイパーバイザーは一般にシステムで唯一、特権モードで稼働する部分であり、トラステッド・コンピューティング・ベース (TCB: Trusted Computing Base) と呼ばれる役割を果たすことによって、よりセキュアなプラットフォームを実現するからです。

通信

組み込みハイパーバイザーが作られるのは、複数のゲストおよびアプリケーションとハードウェア・プラットフォームを共有するためですが、一般に、これらのゲストやアプリケーションが互いにやりとりするための通信方法を拡張することにもなります。この通信チャネルは効率的かつセキュアであり、特権アプリケーションと非特権アプリケーションとを共存させることができます。

分離性

セキュリティーに関連する特性として、ゲストおよびアプリケーションを互いに分離できるという特性があります。この分離性には、セキュリティーと信頼性に関する問題を封じ込められるというメリットがあるだけでなく、ライセンスの分離という点でもメリットがあります。組み込みハイパーバイザーの通信メカニズムを使用すれば、プロプライエタリー・ソフトウェアとオープンソース・ソフトウェアをそれぞれに独立した環境で共存させることができます。組み込み機器が次第にオープンになってきているなか、プロプライエタリー・ソフトウェアをサード・パーティーのソフトウェアやオープンソースのソフトウェアと混在できることが、重要な要件となっています。

リアルタイム対応

最後の特性として、組み込みハイパーバイザーはリアルタイム対応のスケジューリングをサポートしなければなりません。携帯電話の場合、ハイパーバイザーはコアの通信機能およびサード・パーティーのアプリケーションとプラットフォームを共有することができます。リアルタイム対応のスケジューリングにより、必要不可欠な機能とベストエフォート型で動作するアプリケーションとの共存が可能になります。


組み込みハイパーバイザーの例

組み込み分野でのアプリケーションに対処するために、これまでいくつものハイパーバイザーが登場しました。これらのハイパーバイザーには、オープンソース・コミュニティーによるものだけでなく、プロプライエタリー・バージョンもあります。そのなかで、VMware が発表した Mobile Virtualization Platform は、ますます一般的になりつつある使用モデルを対象としています。それは、ビジネス・ユースおよび個人ユース兼用のスマートフォンです。組み込みハイパーバイザーをスマートフォンに採り入れ、2 つの使用モデルを別々のコンテナー (VM) に分離することで、1 台の機器をセキュリティーが要求される企業用にも、個人用にも使用できるようになります。

ここからは、上記を含めたさまざまな使用法に対処するソリューション (オープンソースを含む) について説明します。

PikeOS

PikeOS は、分離カーネルというものを第一に実装するという点で、興味深いアーキテクチャーです。ハイパーバイザーと同じく、分離 (またはパーティショニング) カーネルは、上位レベルのゲストの環境を確実に分離します。PikeOS は航空電子業界で、安全性が極めて重要なアビオニクス・アプリケーションに使用されています。組み込みハイパーバイザーを導入することで、従来のレガシー・アプリケーション (VM 内) と新しいアプリケーションを同じプラットフォームで同時に使用することが可能になります (図 3 を参照)。

図 3. PikeOS の組み込み仮想化
PikeOS の組み込み仮想化

カーネル空間の中で、PikeOS は特定のハードウェア環境 (x86、PowerPC、SuperH、その他) のための一連のアーキテクチャーおよびプラットフォームのサポート・パッケージを実装するとともに、分離マイクロカーネルを実装して仮想化プラットフォームを実現します。PikeOS がサポートするのはゲスト・オペレーティング・システム (および関連アプリケーション) だけではありません。特定の問題領域 (PikeOS ネイティブ・インターフェースやリアルタイム Javaなど) 向けに単純化されたアプリケーション・プログラミング・インターフェース (API) とランタイム環境 (RTE) もサポートします。

ゲストに (空間と時間の両方に関する) リソースを割り当てるのは、PikeOS システムのソフトウェア層です。このシステムは準仮想化を利用するため、ゲスト・オペレーティング・システムは仮想化されていることを認識します。

PikeOS は航空電子業界で一般的に使用されている一方で、近い内に AUTOSAR (Automotive Open System Architecture) を介して自動車にも導入されることになるはずです。詳細については、「参考文献」を参照してください。

OKL4

OK Labs (Open Kernel Labs) は 2006年に、組み込みシステムのマイクロカーネルとハイパーバイザーの開発を目的に設立された会社です。マイクロカーネルおよびハイパーバイザーそれぞれの分野での OK Labs の成果によって、仮想化機能を備えたマイクロカーネルを意味する「マイクロバイザー (microvisor)」 という新しい言葉が生み出されました。組み込み仮想化の分野では、OK Labs が群を抜いて成功しており、同社によるオープンソースの OKL4 マイクロバイザーは 10 億を超える機器で使われています。その一例は、2 つの並行オペレーティング・システム (Linux を含む) の仮想化と実行をサポートする初の電話、Evoke QA4 メッセージング・フォンです。

OKL4 は、(Jochen Liedtke 氏により開発された) L4 マイクロカーネル・ファミリーを継承しています。Mach (カーネギー・メロン大学が従来のUNIX カーネルの当座の代替として開発したマイクロカーネル) に発想を得た L4 は、当初は最適なソリューションを実現するために一貫して x86 アセンブリーで設計されましたが、その後 C++ で開発され、今ではマイクロカーネルの系譜となっています (これには、Intel Architecture 32 および ARM ベースのアーキテクチャー向けに設計された L4Ka::Hazelnut から、プラットフォーム独立性を目的に開発されて Berkeley Software Distribution ライセンスの下にリリースされている L4Ka::Pistachio が含まれます)。

OKL4 マイクロバイザーは、セキュア・セルとして知られるパーティションを実装してアーキテクチャー内の VM を分割します。OKL4 マイクロバイザーは特権を持つカーネル空間を占有し、VM、ネイティブ・アプリケーション、およびドライバーのすべてを個別に分割されたパーティション内に収容します。そして、効率的なプロセス間通信 (IPC) メカニズムによって、セル間の通信および連携を可能にします (図 4 を参照)。(マイクロカーネルの例にならって) ハードウェア・デバイス・ドライバーはマイクロバイザーの外部に追いやられることから、VM 間の従来の IPC だけでなく、ハードウェア・デバイス・ドライバー間の共通入出力パスとなる IPC も重要です。さらに、個々のアプリケーションおよびドライバーをオペレーティング・システムなしでプラットフォームに統合できるため、OKL4 のコンポーネント・モデルは軽量になっています。

図 4. OKL4 マイクロバイザー
OKL4 マイクロバイザーを示す図

マイクロバイザーではコアとなるマイクロカーネルに仮想化機能が実装されます。このマイクロカーネルには、リソース管理機能に加え、リアルタイムに対応したパフォーマンス・オーバーヘッドの小さいスケジューリング機能が組み込まれています。OKL4 が実装するのは準仮想化です。これはつまり、オペレーティング・システムに手を加えてマイクロバイザー上で実行されるようにする必要があることを意味します。OK Labs では、OK:Linux、OK:Android、OK:Symbian をはじめ、いくつもの準仮想化オペレーティング・システムに対するサポートを提供しています。

NOVA

2010年には、NOVA マイクロハイパーバイザーが出現しました。それ以前のマイクロカーネルのアーキテクチャーと同じく、NOVA はシン・マイクロカーネルを実装し、非特権コードには別個の層を用意します。NOVA は比較的新しいハードウェア・プラットフォームの仮想化機能を利用して、コンポーネント・ベース・システムのパフォーマンスを向上させます。

NOVA は、マイクロハイパーバイザーと、システムのコア機能のためのユーザー・レベルの環境で構成されます。これらのコア要素 (図 5 を参照) は、ルート・パーティション・マネージャー (マイクロカーネル外部でのリソース割り当てを管理)、ハードウェア・デバイスのドライバー、および各ゲストが (そのゲストとホスト間の) メモリー・マッピングならびに影響を受けやすい命令のエミュレーションを管理できるようにする VM モニター (VMM) からなります。NOVA が実装するのは完全仮想化であるため、特定の命令 (x86 CPUID など) は、それぞれのゲストの構成に応じて適切にエミュレーションする必要があります。VMM も、各ゲストが使用できるデバイスのデバイス・エミュレーションを実装します。NOVA が完全仮想化を実装するということは、ゲスト・オペレーティング・システムはそのままの状態でサポートされるということです。

図 5. NOVA マイクロハイパーバイザーのアーキテクチャー
NOVA マイクロハイパーバイザーのアーキテクチャー

マイクロハイパーバイザー自体が実装するのは、スケジューラー、メモリー管理機能、メッセージを受け渡すための通信インターフェース、そして保護領域 (空間分離用) とスケジューリング・コンテキスト (一時分離用) といったその他のコア機能です。

NOVA は、第 3 世代のマイクロカーネルであると考えられます。その前身には、Mach、Chorus (第 1 世代のマイクロカーネル)、および L4 (第 2 世代のマイクロカーネル) があります。

Codezero

Codezero 組み込みハイパーバイザーは、L4 アーキテクチャーに従いつつも、マイクロカーネルの設計に関する最新の研究成果を採り入れるために、一から作成された新しいマイクロカーネルです。Codezero は仮想化機能と併せ、特権を持つマイクロカーネルにアドレス空間、スレッド管理、および IPC のみを実装するという点で、マイクロカーネルの基本原則に従っています。

図 6 に示されているように、Codezero はハードウェア・プラットフォームの上に典型的な抽象化層を実装します。この抽象化層が実装するのは、スレッド化、IPC、アドレス空間管理、アドレス空間マッピング、セキュリティー管理、電源管理、そしてエラー回復管理です。Codezero のスケジューラーには、ゲスト・スレッドとマイクロカーネル・スレッド両方のカーネル・プリエンプションが (プリエンプションのタイム・スライスと併せて) 組み込まれています。

Codezero での仮想化は、コンテナーによって実装されます。各コンテナーは、独自のリソース一式 (メモリー、スレッドなど) を持つ独立した実行環境です。パーティションは、各コンテナーの機能を定義する Codezero のセキュリティーおよびリソース管理ポリシーとも連動します。

図 6. Codezero 組み込みハイパーバイザーのアーキテクチャー
Codezero 組み込みハイパーバイザーのアーキテクチャー

Codezero は、マイクロカーネルの設計における最近の進歩に伴う利点を活かしています。効率性を目的に、Codezero は 3 つの形で IPC を実装しています (いずれもランデブー・モデルがベースとなっています)。具体的には、ショート IPC (ユーザー空間のスレッド間)、フル IPC (256 バイト)、および拡張 IPC (2048 バイト) の 3 つです。大きなバッファーの IPC は、共有ページ・マッピングを使用して行われます。さらに、Codezero は組み込みシステム専用に設計されているため、マルチコア・プロセッサーおよび ARM ベースの設計をサポートします。


組み込みハイパーバイザーのアプリケーション

組み込みハイパーバイザーのアプリケーションは次第に増えています。そのうち、現在最も一般的なのは、携帯電話でのアプリケーションです。この場合、信頼できるセキュアなアプリケーション (ベースバンド管理) がサード・パーティーの信頼できないアプリケーションとプラットフォームを共有します。したがって、ハイパーバイザーによって提供される分離性が、この分野での成功の鍵となります。急成長を続けるタブレット市場でも、オペレーティング・システムとアプリケーションが進化するにつれ、組み込み仮想化技術のさまざまな使い道を見出すことになるでしょう。

一方、携帯電話およびタブレット以外の分野でのアプリケーションも増加しています。システムの深部に組み込まれるアビオニクスおよび自動車のアプリケーションでも、ハイパーバイザーが持つ分離性および信頼性の側面を利用する方法を見出しており、安全性、生存性、あるいは優れた構成可能性に焦点を置くシステムでは、組み込み仮想化技術に対応したアプリケーションを見出しています。


組み込み仮想化の今後

数々の組み込みハイパーバイザーの例でおわかりのように、組み込みハイパーバイザーのアーキテクチャーと実装では、マイクロカーネルが共通デザイン・パターンとなりつつあります。この手法は簡潔かつ効率的になる傾向があり、それによってコードが削減され、(TCB に基づき) セキュリティーと信頼性が強化されるだけでなく、パフォーマンスにも利益がもたらされます。ハイパーバイザーは今後も興味深い研究対象として、新しいアプリケーションを次々と見出していくはずです。仮想化と組み込みシステムが次にどの分野に進出するかを見るのは興味深いことです。

参考文献

学ぶために

製品や技術を入手するために

  • PikeOS は、組み込みハイパーバイザー (および分離カーネル) の興味深い例です。アビオニクス・システムで広範に使用されている PikeOS は、(AUTOSAR を介して) 自動車システムにも進出してきています
  • OK Labs は、組み込みハイパーバイザーとして OKL4 マイクロバイザーを一から開発しました。L4 マイクロカーネルを継承する OKL4 は、携帯電話業界で幅広く使用されています。OKL4 マイクロバイザーおよびマイクロカーネルは OK Labs のウィキ・ページからダウンロードできます。
  • ドレスデン工科大学で開発された NOVA マイクロハイパーバイザーは、第 3 世代のマイクロカーネルを代表します。NOVA の研究ページまたは最近の記事「NOVA: A Microhypervisor-Based Secure Virtualization Architecture」でその詳細を学んでください。また、ドレスデン工科大学でも L4 マイクロカーネル群に関する情報を掲載しています。
  • Codezero のソース・コードを入手してください。Codezeroは、組み込みプロセッサーをターゲットとするもう 1 つのハードウェア組み込みハイパーバイザー (およびオペレーティング・システム) です。
  • ご自分に最適な方法で IBM 製品を評価してください。評価の方法としては、製品の試用版をダウンロードすることも、オンラインで製品を試してみることも、クラウド環境で製品を使用することもできます。また、SOA Sandbox では、数時間でサービス指向アーキテクチャーの実装方法を効率的に学ぶことができます。

議論するために

  • My developerWorks コミュニティーに加わってください。ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者が主導するブログ、フォーラム、グループ、ウィキを調べることができます。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=660375
ArticleTitle=組み込みシステムの仮想化
publish-date=04192011