インテル バーチャライゼーション・テクノロジー

**インテル バーチャライゼーション・テクノロジー**（、**Intel VT**または単に**VT**と略される）とは、インテルによって開発された仮想化支援技術のことである。

当初、インテルは開発コードネームから**Vanderpool Technology**という名称を用いていた為、現在でもVTをVanderpool Technologyの略とする表記が散見される。また、VT-x を指して単に Intel VT と呼称する場合もある。

## 概要
Intel VTは、仮想マシンモニタによる複数のオペレーティングシステム (OS) の並行動作をより効率的に行うための支援技術である。

VT機能がなくても、すべてソフトウェア的に仮想化技術を実装し、複数のOS（ゲストOS）を実行することは可能である。しかし、その場合パフォーマンスの低下を招いたり、ゲストOSに変更が必要となる場合もある。ハードウェア側でVTに対応することによって、これらの問題点を解決する仮想マシンモニタの実装を支援することができる。

インテルでは、Itanium 2などのIA-64アーキテクチャ用に*Intel VT-i*、Pentium DなどのIntel 64アーキテクチャ用に*Intel VT-x*を、また、I/O仮想化機能を*Intel VT-d*として開発した。これらの機能を総称してIntel VTとしている。Nehalemマイクロアーキテクチャ以降はCore i3以上のすべてのCPUがVT-xに対応している。

AMDでは同じコンセプトの機能をAMD Virtualization(AMD-V)として開発し、2006年5月以降に発表されたCPUに実装しているが、Intel VTと互換性はない。

## 仮想化支援技術
通常、オペレーティングシステムは、リングプロテクションで特権レベルと、ユーザーレベルの二つを使って実装されている（その中間のリングはかつては利用されていたが、現在は未使用の資源である）。仮想マシンモニタでは、スーパーバイザー（ハイパーバイザではない）が所属するホストOSを特権リングに、ゲストOSカーネルを中間リングに配置する。これによりゲストOSカーネルで特権命令が使われると特権違反が発生し、スーパーバイザはゲストOSがホストOSに対して資源を要求した事を検出できる。

ここでいくつかの問題が発生する。ゲストOSで使われるOSは本来特権レベルで動作している事を前提とした設計になっている。その為、例えば割り込みの禁止や許可といった非常に細粒度の資源要求が発生する事もある（x86で言うところのCLI,STI命令はスーパーバイザでは状態フラグの書き換え程度の動作しかする事がない）。しかし、リングプロテクションにおいて発生するリング間状態遷移はコンテキストスイッチを発生させ、その都度CPUコンテキストの全て・全レジスタ内容とフラグがメモリに書き出される事になる。粒度の細かい操作でこのような動作が頻繁に行われる事は資源の浪費であり、仮想化されたシステム全体の性能低下を招く。I/Oアクセスにおいても同様の事が言える。

仮想化支援技術では特権リングの扱いを改めてこれらの細粒度の操作を制御したり、あるいはスーパーバイザの操作を代行する事により、より粒度の粗い処理の単位として取り扱う事によって無駄を排除する。割り込み制御一つをとっても、この操作の無駄を排除する事により仮想化環境の性能は概ね20%以上の性能向上が見られる。VT-xとVT-iは命令レベルでの改善、VT-dはI/Oレベルの改善をはかったものである。

## Intel VTの構成要素
### VT-x
VT-x は、Intelによるx86仮想化の実装例である。単に Intel VT と呼称する場合もある。

;VMXという動作モードの追加
:i386以降の32ビットOSでは通常、リング0でカーネル等が動作するが、仮想マシンモニタはそれより高い特権モードで動作させることが望まれる（VT支援がない場合、カーネルをリング1で動作させる方法も取られた）。このため、リング0-3とは独立して、*VMX root*と*VMX non-root*という動作モードを新たに設けた。VMX rootモードで仮想マシンモニタを動作させ、VMX non-rootモードでゲストOSを動作させる。ゲストOSで仮想化に影響のある命令が発行された場合、VMX rootモードに遷移し、仮想マシンモニタは適切な処理を行うことになる。
:
;VMCS(Virtual Machine Control Structure)
:仮想マシンモニタは、VMCSと呼ばれるデータ領域を利用し、各仮想マシンを制御する。VMX non-rootモードで動作していたCPUの状態の保存や読み出しをこの構造を利用して行う。ゲストOSを切り替える際のオーバーヘッドを軽減することができる。その他、仮想マシンを起動する命令や、再開する命令、VMXモードへ遷移・離脱する命令などが追加されている。

### VT-i
VT-iは、IA-64上に実装された仮想化支援技術である。VT-xとほぼ同じ機能を有するが、特にゲストOSに対する仮想CPUリソースの割り当てを柔軟に構成できる特徴を持つ。

### VT-d
**ダイレクト I/O 向けインテル VT**(**) とは、I/O処理の仮想化を支援する機能。VT-dなどのハードウェア的な仮想化支援が無い場合、仮想マシンモニタは、I/Oデバイスをエミュレートし、DMAのメモリ領域のリマッピングを行う必要がある。VT-dでは、ハードウェア的にDMA転送時のリマッピングを行うようにする。この場合、通常のデバイスドライバを使用することができ、利便性や性能が向上することになる。
メモリアクセスはチップセット側の機能であるため、次世代のチップセットで対応する予定である。Intel 3シリーズチップセットでは違う容量のDRAMメモリを混載した場合に問題が出るため利用ができない場合がある。

### VT-c
VT-c (Virtualization Technology for Connectivity) は、均衡的なサーバー性能の為の最適なI/Oの仮想化を支援する、各種技術の総称。Virtual Machine Device Queues (VMDq)、Intel I/O Acceleration Technology (I/OAT)、Single Root I/O Virtualization (SR-IOV) で構成される。Intel QuickData Technology は I/OAT の一コンポーネントである。

## 関連項目
*仮想マシン
*Input/Output Memory Management Unit
*x86仮想化
*Microsoft Hyper-V
*Parallels Desktop
*VirtualBox
*Microsoft Virtual PC
*Microsoft Virtual Server
*VMware
*Xen (仮想化ソフトウェア)

## 脚注

## 外部リンク
*インテル® バーチャライゼーション・テクノロジー
* 対応製品リスト（インテル）
** http://ark.intel.com/VTList.aspx - CPU一覧(英語)
** http://www.intel.com/jp/support/motherboards/desktop/sb/cs-030922.htm - チップセット・デスクトップボード一覧