新CPUで仮想化がもっと使える!
I/O管理の3つの手法
I/Oの仮想化を説明する前に、仮想環境下ではどのようにI/Oを管理しているのか説明しましょう。仮想環境のI/O管理は、図2に示すように、「サービスOS型」「Hypervisor型」「パススルー型」の3つの手法に分けることができます。
1つ目のサービスOS型は、Xenなどで使われている方法で、特定のゲストOSがI/Oへのアクセスをすべて管理します。つまり、このOSのドライバがほかのOSのI/Oアクセスをすべて肩代わりすることになります。Xenでは、管理するOSはDomain0と呼ばれています。この方法は、既存のOS用のデバイスドライバがそのまま利用できます。またドライバがVMX non-rootで稼働するため、システムの安定性が向上します。
2つ目のHyperVisor型では、VMMソフトウエア側でI/Oのアクセスを管理します。ドライバをVMM用に用意しなければいけないなどの手間はありますが、一般的に高いパフォーマンスを実現できます。
3つ目のパススルー型は、ゲストOSに特定のI/Oを割り当ててしまう方法です。例えばゲストOSごとに専用のSCSIカード、ファイバーチャンネル、ネットワークカードなどを用意し、それぞれに割り当てるような使い方です。
効率的なI/O管理のために
各CPUベンダーが提供するI/Oの仮想化テクノロジーは、こうしたI/O管理を効率的に行えるようにサポートするものですが、特に3つ目のパススルー型で威力を発揮します。IntelではVT-D(Virtualization for Directed I/O)、AMDはIOMMU(I/O Memory Mapping Unit)と呼ばれる機能が用意されています。
主な機能としては、「I/OデバイスとゲストOSの割り当て」と、「DMA(Direct Memory Access)のリマッピング」などがあります。それぞれについて説明しましょう。
まず、I/OデバイスとゲストOSの割り当てでは、直接各ゲストOSにI/Oデバイスを割り当てることができます。これにより、パススルー型のようにゲストOSが直接ハードウエアのデバイスにアクセスできるので、パフォーマンスの向上が期待できます。またVMMも簡素化することができます。
またゲストOSが割り当てられなかったI/Oにアクセスしようとした場合、それを検出し禁止することもできます。これにより、信頼性とセキュリティーの向上も期待できます。国産仮想マシンである「BitVisor」もこの方式を採用しているようです。
もう1つのDMAリマッピングのDMAとは、CPUを介さずにメモリーとメモリー、あるいはI/OデバイスとI/Oデバイスの間で直接データを転送することです。仮想環境下では、先ほどのページングと同じように、ゲストOSの物理アドレスとホストOSの物理アドレスの変換がポイントです。
仮想環境下でDMAを実現する場合、転送するためのアドレス情報はゲストOSから発行されます。このゲストOSのアドレスをそのままI/Oデバイスに渡してしまうと、実際のアドレスであるホストOSのアドレスと異なるため、正しく動作しなくなる可能性があります。I/Oの仮想化は、これを避けるために、ゲストOSの物理アドレスをホストOSの物理アドレスへと変換する役目を持っています。
なお、このI/Oの仮想化はCPUの機能ではなくチップセットが持つ機能になります。したがって、最新のチップセットが搭載されたCPUがこれらの機能を使った仮想化に対応しています。
またIntelのVT-Dでは、PCIデバイスのファンクションごとにゲストOSを割り当てるといったこともできます。PCIデバイスで複数のファンクションを持ったもの、例えばネットワークインターフェースとSCSIインターフェースを両方持っているようなカードの場合、それぞれのファンクションを違うゲストOSに割り振ることができます。
これらI/Oの仮想化により、さらにスケーラビリティーが改善され、大規模システムでの活用が進んでいくものと予想されます。
次は、セキュリティーへの応用について考えてみましょう。