解説

Intelの仮想化支援機能「Intel VT」とは?

デジタルアドバンテージ 小林 章彦
2007/03/07
解説タイトル

 サーバ向けプロセッサのマルチコア化が進む現在、そのプロセッサ・パワーを活用する用途として、仮想化に注目が集まっている。仮想化技術を用いることで、ハードウェアとOS/アプリケーションとの独立性が高まり、その結果、サーバ・システムの柔軟性や保守管理性が向上する。例えば、これまで複数のサーバで稼働させていたOSとアプリケーションを、1台のサーバに集約することで、サーバ・システムの単純化や利用率の向上、コストの削減などのメリットがもたらされる。

 しかし仮想化技術は、コンピュータ・ハードウェア上に仮想的なコンピュータ(仮想マシン)をソフトウェアで構築するという技術であるため、さまざまなオーバーヘッドが生じる。仮想マシンで実行されるゲストOSは、仮想化していない場合と同様、1台のコンピュータを占有しているものとして稼働するため、仮想マシンを提供する仮想マシン・モニタ(VMM)がハードウェア・リソースを制御し、必要に応じてゲストOSに制御を移すといった処理が必要となるからだ。

 これまでのVMMは、基本的にソフトウェアによってのみ、これらの処理を行ってきた。しかしVMMが担っていた処理の一部をプロセッサやチップセットで肩代わりすることで、オーバーヘッドが軽減できる。そこでIntelとAMDは、ほぼ同時期に「Intel Virtualization Technology(Intel VT)」「AMD Virtualization(AMD-V)」という仮想化支援機能をそれぞれの自社製品に実装し始めた。基本的な方向性や機能は似ているものの、命令や実装方法が異なっており、両者に互換性はない。そのためVMMは、Intel VTとAMD-Vのそれぞれに対応する必要がある。またIntel VT/AMD-Vの実装はまだ始まったばかりであり、今後も進化することが明らかにされている。

 ここでは、Intelの仮想化支援技術「Intel VT」を取り上げ、その概要を解説する。

Intel VTのロードマップ

 Intel VTは、Core 2 DuoやIntel Xeonなどのx64プロセッサ向けの「Intel VT-x」、Itanium 2向けの「Intel VT-i」、I/Oの仮想化を支援する「Intel VT-d」によって構成されるIntelの仮想化支援機能の総称である。

 Intel VT-xは、Core 2 Duoの上位モデルやIntel Xeon 3200/5100/5300番台などに、Intel VT-iはデュアルコアItanium 2にそれぞれ実装済みだ(デスクトップPC向けのCore 2 Duo E4300とノートPC向けのT5500は、Intel VTに未対応)。Intel VT-iは、開発コード名「Montecito(モンテシト)」で呼ばれていたデュアルコアItanium 2で実装されている。

 下図に示すようにIntelは、Intel VTのロードマップを公開しており、Intel VT-xの強化(Intel VT-x Generation 2)とIntel VT-dの実装が予定されている。Intel VT-dは、すでにVMMベンダと開発に着手しており、2007年後半にリリースされる次世代チップセットで対応が予定されている。

Intel VTのロードマップ(インテルの「仮想化技術最新動向」の資料より)
次世代チップセットでのIntel VT-dの実装のほか、Intel VT-xの拡張も予定されている。

 Itaniumに対しては、現在のところ、Intel VT-iのロードマップやIntel VT-dの計画を明らかにしていない。これは多くのItanium搭載サーバが、サーバ・ベンダ独自のチップセットを採用していることが影響していると考えられる(インテル単独で仕様などを策定しにくい)。そのため、ここからはIntel VT-xとVT-dに注目して、もう少し詳しく機能を見ていくことにする。

プロセッサに実装済みのIntel VT-x

 前述のようにVMMは、ハードウェア・リソースを制御し、ゲストOSとの橋渡しをする必要がある。現在のx86/x64アーキテクチャでは、リング0からリング3までの4つの特権レベルで動作するようになっており、デバイス・ドライバやメモリ管理、プロセス管理など、OSの低レベル処理はハードウェア・リソースへのアクセスがほぼ自由に行えるリング0で実行されるようになっている。しかし複数のOSを同時実行するときに、1つのOSがプロセッサの最上位特権であるリング0の特権命令でハードウェア・リソースを制御してしまっては、ほかのOSが正常に動作できない。

 そこで、これまでの仮想化技術では、VMMをOSの代わりにリング0で稼働させ、OSをリング1またはリング3で実行することで、ハードウェア・リソースの制御をVMMが最上位特権で管理するようにしていた。ところが、OS自体はリング0で実行することを前提に設計されているため、当然のようにリング0レベルの特権命令を発行する。しかし特権命令はリング0でのみ実行可能な命令であるため、VMM上のリング1またはリング3で実行されているゲストOSからの発行は、エラー(例外処理)となる。そこで、そのエラーをVMMが監視し、特権命令の処理をエミュレーションしてゲストOSに返すという処理を行う。また一部の特権命令では、エラーを監視することで処理を割り込ませることができないため、ゲストOSの命令発行を常時監視するという処理が必要になる。これにより、ゲストOSは非仮想マシン環境の場合と同様に動作することができるが、この監視やエミュレーションという処理が、仮想環境でOSを実行する際の大きなオーバーヘッドとなっていた。

 だがこのような完全なエミュレーションを行わない、オーバーヘッドの少ない仮想化技術も存在する。例えば仮想化ソフトウェアのXenでは、ゲストOSの特権命令などの処理を、VMMの処理にジャンプするように事前に書き換えることで、オーバーヘッドを低減していた。ただしゲストOSの書き換えが必要になるため、対応OSが限定されたり、カーネルに対するセキュリティ修正プログラムの適用が行えなかったりするなどの副作用があった。

 Intel VT-xでは、「VMX root」「VMX non-root」というこれまでのリング0〜3とは異なる動作モードを追加し、VMX rootモードでVMMを、VMX non-rootモードでゲストOS/アプリケーションをそれぞれ実行するようにした。VMX non-rootモード内では、物理ハードウェアで実行されているのと同様、ゲストOSの一部はリング0で、アプリケーションはリング3で動作させる。ゲストOSが特権命令を発行した場合、プロセッサはVMX rootモードに切り替え、VMMに制御を移す。これによりVMMは、ゲストOSの特権命令の発行をいちいち監視してエミュレーションしなくて済むため、少ないオーバーヘッドで特権命令の処理が可能になっている。またゲストOSのコードを書き換える必要もなくなる。

 またVMM上の仮想マシンごとに「VMCS(Virtual Machine Control Structure)」と呼ぶデータ領域を用意し、各仮想マシンが設定したレジスタの内容などを格納する。これにより、ゲストOSが切り替わる際に発生するコンテキスト・スイッチの処理がハードウェアで支援されることで、オーバーヘッドが大幅に軽減されることになった。

 まとめると、VMMがIntel VT-xに対応することにより、これまでソフトウェアのみで実装されてきた一部の処理に対し、プロセッサに実装されたハードウェアの支援が得られるようになる。その結果、特にオーバーヘッドが大きい特権命令の処理やコンテキスト・スイッチが高速化される。

 さらに、Intel VT-x Generation 2(Intel VT-x Gen2)と呼ばれているIntel VT-xの拡張では、メモリ・アドレス管理の支援が予定されている。各ゲストOSは、それぞれ物理メモリのメモリ空間を占有しているものとしてメモリにアクセスする。その際、プロセッサのページ・テーブルをセットアップする。このとき、VMMはページ・テーブルにセットアップされたアドレス(仮想マシが想定している物理アドレス)を、実際の物理的なアドレス(VMM/ホストOSが管理している物理アドレス)にマッピングしなおさなければならない。この処理を行わないと、ゲストOS同士やVMM/ホストOSのページ・テーブル・エントリと衝突してしまう。この処理が、VMMの大きなオーバーヘッドとなっている。

 そこでIntel VT-x Gen2では、拡張ページ・テーブル(EPT)と呼ぶVMMの制御によるページ・テーブル構造が実装される。EPTは、ゲストOSの物理アドレス空間(仮想マシンの中での物理アドレス)から、VMM(ホストOS)の物理アドレス空間(最終的な物理アドレス)への変換をサポートすることで、VMMのページ・テーブル管理のオーバーヘッドを低減することを可能にする。またVMMがゲストOSの実行時間を制御するためのPreemption Timerと呼ぶ機能などが追加される予定だ。

ゲストOSとVMMのアドレス変換
ゲストOSのメモリ空間は、実際にはVMM(またはホストOS)によって管理されているメモリ空間の一部である。そのため、ゲストOSがアクセスした(ゲストOSから見た)物理アドレスは、(ホストOSから見た実際の)物理メモリ上の物理アドレスをアクセスするように、VMMによって仮想記憶のページ・テーブルがセットアップされる

I/Oの仮想化を支援するIntel VT-d

 仮想化において、I/Oの処理もオーバーヘッドの大きなものの1つであり、ハードウェアの機能を制限する要素ともなっている。Intelでは、Intel Virtualization Technology for Directed I/O(Intel VT-d)と呼ぶI/Oの仮想化を支援する機能を提供し、I/O処理の高速化を実現する予定だ。

 Intel VT-dでは、DMAで扱われるアドレスを変換するリマッピング・エンジンをチップセットに実装し、ゲストOSが直接DMAを用いるデータ転送を可能にする(ダイレクトDMAと呼ぶ)。

 仮想マシンが利用しているデバイスがDMAによってデータ転送を実行するとき、指定されている物理アドレスはゲストOSのメモリ空間の物理アドレス(実際には、VMMが管理する仮想アドレス)であり、物理メモリのアドレスとは異なるものである。そのため、そのままデータ転送を実行すると、誤ったメモリ領域に書き込まれることになる。そこでIntel VT-dのリマッピング・エンジンは、DMA転送時にハードウェアでアドレス変換を行い、デバイスが正しくゲストOSのメモリ空間をアクセスできるようにする。この仕組みにより、ゲストOSは直接ハードウェア・リソースを割り当て(ダイレクト・アサイン)て、ゲストOS上のデバイス・ドライバによって直接データのやりとりをすることが可能になる。この際、ゲストOSには、VMMに依存した特殊なデバイス・ドライバではなく、割り当てたハードウェアに対応した通常のデバイス・ドライバをインストールすることになる。

ダイクレクトDMAの概念(インテルの「仮想化技術最新動向」の資料より)
ダイレクトDMAでは、ゲストOS上のデバイス・ドライバによって直接ハードウェアのアクセスが行われる。Intel VT-dのDMAリマッピング・エンジンにより、DMA転送先の物理アドレスの変換が行われ、ゲストOSの物理アドレスに直接データ転送が可能になる。

 これまでの仮想化技術では、ホストOSまたはVMMが、デバイス・ドライバによってハードウェア・リソースを制御する一方、ゲストOSはVMMがサポートする標準的なデバイスとしてしかハードウェア・リソースにアクセスできなかった。そのため、ハードウェアに実装されている独自の機能などを有効に使うことが難しかった。ダイレクトDMAによって、ゲストOSが直接ハードウェア・リソースにアクセスすることが可能になるため、ハードウェアの機能を生かした高速なデータ転送などが実現する。

 一方、特定のハードウェア・リソースがゲストOSに直接割り当てられるため、複数のゲストOSで同一のハードウェア・リソースを共有できなくなる(DMAによるデータ転送先が複数になってしまうため)。そこで複数のゲストOSが、それぞれハードウェア・リソースを直接割り当てる場合、それぞれハードウェア・リソース(ネットワーク・カードなど)を実装しなければならない。ハードウェア・リソースを追加することで、ゲストOSごとに割り当て可能な場合は問題ないが、薄型ラックマウント・サーバなどのように実装可能なハードウェア・リソースが限られる場合は、Intel VT-dが利用できないことになる。

 この問題を解決する手段として、PCI関連の規格を策定しているPCI-SIGはPCI ExpressにI/O Virtualization Interactive Technology(IOV)を導入する予定となっている(2007年4月に規格化が完了する予定)。これによりIntel VT-dとIOV対応のPCI Expressデバイスを利用することで、複数のゲストOSが直接1つのハードウェア・リソースにアクセスすることが可能になる。

 もう1つの問題は、ダイレクトDMAにより、ゲストOS上に特定ハードウェアに依存したデバイス・ドライバがインストールされることになると、仮想マシンをほかのVMM上に容易に移動できるという仮想技術の1つの利点が失われることになる。例えば、ゲストOSに特定のネットワーク・カードに依存したデバイス・ドライバがインストールされていると、異なるネットワーク・カードが実装されているサーバのVMMに仮想マシンを移動した場合、デバイス・ドライバを変更しなければならなくなる。ただ、こうした問題もサーバ・ブレード間で仮想マシンを移動するような場合には、元からI/Oデバイスなどが共通であるため問題とならない。

 つまり性能が求められる場合はダイレクトDMAを利用し、仮想マシンを移動する可能性があるような場合は従来と同様、標準的なデバイス・ドライバによる運用を行えばよいということだ。

 ここまで解説したようにIntel VTのサポートにより、VMMのオーバーヘッドが軽減され、より高い性能の仮想マシンが実現できる。ただしIntel VT-xを利用するには、Intel VT-xに対応したプロセッサとBIOS、仮想化ソフトウェアが必要となる。またIntel VT-dでは対応チップセットと仮想化ソフトウェア側での対応も必須だ。ただし、Intel VT-xとIntel VT-dは独立した機能となっており、Intel VT-xはIntel VT-dを利用するための必要条件とはなっていない。

 またIOVは、PCI Expressのみを対象としており、既存のPCIやPCI-Xはサポートされない。同様にチップセットに内蔵されているUSBやシリアルATAも、IOVの対象外となる。将来的には、これらのインターフェイスの仮想化に対しても、支援機能が実装されるものと思われる。Intel VTは、やっと実装が始まったばかりであり、まだまだ改良や機能追加が行われる予定だ。

 仮想化を導入する場合、サーバに搭載されているプロセッサやチップセット、仮想化ソフトウェアなどがどのバージョンのIntel VT/AMD-Vをサポートしているのか確認し、それに合わせた仮想化ソフトウェアの選択やVMMの設定を行った方がよい。Intel VTやAMD-Vを利用することで、VMMの性能が向上し、その結果、同じサーバ上に統合できる仮想マシン(ゲストOS)の数が増やせたり、個々の仮想マシンの性能が向上できたりする。仮想化の効率を向上させ、高いサーバ性能を求めるうえで、Intel VTやAMD-Vを否定する積極的な理由はない。今後仮想サーバの導入を検討するのであれば、ぜひとも念頭に置きたい技術である。記事の終わり

目次ページへ  「System Insiderの解説」


System Insider フォーラム 新着記事
  • Intelと互換プロセッサとの戦いの歴史を振り返る (2017/6/28)
     Intelのx86が誕生して約40年たつという。x86プロセッサは、互換プロセッサとの戦いでもあった。その歴史を簡単に振り返ってみよう
  • 第204回 人工知能がFPGAに恋する理由 (2017/5/25)
     最近、人工知能(AI)のアクセラレータとしてFPGAを活用する動きがある。なぜCPUやGPUに加えて、FPGAが人工知能に活用されるのだろうか。その理由は?
  • IoT実用化への号砲は鳴った (2017/4/27)
     スタートの号砲が鳴ったようだ。多くのベンダーからIoTを使った実証実験の発表が相次いでいる。あと半年もすれば、実用化へのゴールも見えてくるのだろうか?
  • スパコンの新しい潮流は人工知能にあり? (2017/3/29)
     スパコン関連の発表が続いている。多くが「人工知能」をターゲットにしているようだ。人工知能向けのスパコンとはどのようなものなのか、最近の発表から見ていこう
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

System Insider 記事ランキング

本日 月間