X86仮想化

x86仮想化とは、x86ベースのゲストオペレーティングシステム (OS) を、別のx86ベースのホストOS上で、ほとんど（あるいは全く）ゲストOSを修正することなく動作させる手法である。
本来のx86アーキテクチャは、命令セット中に特権命令でないセンシティブな命令がある。このためPopekとGoldbergの仮想化要件を満たしていない。2005年と2006年、インテルとAMDがそれぞれx86アーキテクチャを拡張することでこれに対応し、他の仮想化での問題にも対処した。
Intel VTの名称で知られるインテルによる実装についてはインテル バーチャライゼーション・テクノロジーの項目を、AMD-VおよびAMD-Viなどの名称で知られるAMDによる実装については本記事の該当項目を参照のこと。
ソフトウェア技法.
1999年2月8日、VMware は初のx86仮想化製品 "VMware Virtual Platform" をリリースした。これは、同社の創業者がスタンフォード大学で行っていた研究成果に基づいたものである。VMware はその技法を1998年10月に特許申請し、2002年5月28日にとして特許が成立した。
VMware や類似する仮想化ソフトウェアがハードウェア仮想化支援機能を持たないx86向けの仮想化する場合、特定の命令の実行を捉えて動的に置き換える動的命令変換技法を必ず使用している。
この技法は、本質的に仮想化可能なアーキテクチャ（例えば IBM System/370 や MC68020）での仮想機械に比較すると性能に対する何らかのオーバーヘッドを抱えている。
Kevin Lawton は、x86仮想化のためのフリーソフトウェアを作成する Plex86 プロジェクト（以前は "freemware" と称していた）を開始した。このプロジェクトは Linux のみをゲストOSとするプロジェクトに変質してしまった。
しかし、それ以前に Lawton は "Running multiple operating systems concurrently on an IA32 PC using virtualization techniques"（IA32 PC上で仮想化技法を使って複数OSを同時並行動作させる）という論文を発表しており、その中でx86アーキテクチャの仮想化困難な部分の分析を行い、その対処方法を論じている。
オープンソースでもx86仮想化の試みは行われた。x86プロセッサの命令実行をエミュレートする方式を採ったものとして、Bochs、QEMU、当初プロプエタリソフトとして公開され最終的にGPLライセンスになったVirtualBoxがある。KVMではQEMUがCPUをはじめとする周辺機器のエミュレーションを担っている。
マイクロソフトは Windows ベースのx86仮想化製品を3種類提供している。Connectix から得た技術に基づいた Virtual PC と Virtual Server、そして Hyper-V である。
実験的システム Denali、L4、Xen は、元のハードウェアと仮想機械の実装を変えることでx86仮想化の高性能化を模索したものである。OSをその仮想機械向けに移植することで、x86命令セットの仮想化しにくい部分を実装するのを避けている。この技法を準仮想化と呼ぶ。
その後、Xen 3.0 では、後述するハードウェア仮想化支援を利用した完全仮想化もサポートしており、OSに全く変更を加えなくてもよい。
現在、x86仮想化を行うソフトウェアの多くはハードウェア仮想化支援による完全仮想化を実現している。
ハードウェア仮想化支援.
インテルとAMDはそれぞれ独自にx86アーキテクチャの仮想化拡張を開発した。両者の実装は完全な互換性はないが、機能はほぼ同じである。どちらの場合も仮想機械ハイパーバイザ上でゲストOSを修正することなく動作させることが可能であり、性能も従来より大幅に向上する。
x86プラットフォームでの仮想化技術の展開により、これらは「ハードウェア仮想化支援機能」（HAV：Hardware-Assisted Virtualization）と呼ばれている。
ハードウェア仮想化支援機能は、マイクロプロセッサベンダーごとに実装が分かれている。インテル製品にはIntel Virtualization Technology (Intel VT)、AMD製品にはAMD Virtualization (AMD-V)を中心とした、様々な仮想化支援技術が搭載されている。
プロセッサ.
Intel VT-x.
VT-xとは、インテルによるx86プラットフォームの仮想化技術である。開発当初はVanderpoolのコードネームが用いられ、発表初期においてもVanderpool Technologyの名称が用いられた。
AMD-V.
AMD Virtualization (AMD-V) は、AMD による x86 アーキテクチャのハードウェア仮想化拡張技術と仮想化システムに対するセキュリティ機能を合わせた技術である。後者については、本記事のチップセット節で説明する"AMD-Vi"も参照のこと。
AMDの仮想化拡張は64ビットx86アーキテクチャ向けであり、以前は Pacifica というコードネームで呼ばれ、初期の AMD-V は2006年に発表された。
AMD-V は Athlon 64 と Athlon 64 X2 のファミリ "F" または "G"（ソケットはSocket AM2）、Turion 64 X2、Opteron 第二世代と第三世代、AMD Phenom、およびこれら以降のプロセッサに搭載されている。
SLATプロセッサ(第2世代).
Second Level Address Translation (SLAT) とは、メモリ管理に関する仮想化を支援するCPUの機能で、仮想マシンごとに独立した仮想アドレスと、ホスト環境の物理アドレスの変換を、ハードウェアレベルで支援する。実装として Intel EPT(Extended Page Table) や AMD RVI(Rapid Virtualization Indexing) 等が知られる。
Intel VT-x や AMD-V と同様にハードウェアレベルで仮想化を支援する事から、第2世代(Second Level)の仮想化支援技術とされる。
チップセット.
メモリとI/Oの仮想化はチップセットで実行される。これらの利用には、一般的に支援機能の搭載だけでなく、BIOSを適切に設定することが必要である。
IO MMU の仮想化 (VT-d と AMD-Vi).
Input/Output Memory Management Unit (IOMMU)は、DMAのスルーと割り込みの再割り当てにより、イーサネット、グラフィックカード、ハードディスクコントローラなどのゲスト仮想マシンからの直接的な物理デバイスの利用を可能にする。これらは「PCIパススルー」と呼ばれることがある。
IntelおよびAMDは、次の仕様を発表している：
PCI-SIGによるI/O仮想化 (IOV).
PCI-SIG I/O virtualization (IOV)は、PCI-SIGが標準化を行っている、PCI ExpressベースのネイティブなハードウェアI/O仮想化技術の総称である。IOVに対応するデバイスは、ゲストOS間で一つのリソースを共有できる。
IOVは、I/O仮想化に関して次の仕様を定めている:
ソフトウェアの対応.
以下のソフトウェアは、条件によってはこれらの仮想化技術を使っている。
性能.
Standard Performance Evaluation Corporation (SPEC) は、仮想化技術の性能比較の業界標準手法を確立するためのワーキンググループを創設した。現在のメンバーは、AMD、デル、富士通シーメンス、ヒューレット・パッカード、インテル、IBM、サン・マイクロシステムズ、SWsoft、VMware である。SPECは現在最善のベンチマークを開発すべく情報収集中である。