1-2. メモリの仮想化
物理環境でのLinuxのメモリ管理の方式としては、各プロセスが論理アドレス空間をアクセスし、論理アドレスから物理メモリへの変換処理を経てメモリへのアクセスを実現しています。この変換処理で用いる対応表をページテーブルと呼びます。
KVMでは、複数動作する仮想マシンに対応するための変換処理が必要となり、その処理概要は以下のとおりです。
まず、仮想マシンごとに割り当てられた「仮想的な物理メモリ」の位置を記録するGPFN(Guest Page Frame Number)と、本物の「物理的なメモリ」の位置を記録するMPFN(Machine Page Frame Number)が存在しており、これらの対応づけをEPT(Extended Page Table:拡張ページテーブル)によって実現しています。
仮想マシン上で動作するゲストOSは、上記の「仮想的な物理メモリ」を物理メモリと思い込んで動作しており、各ゲストOSのページテーブルには、論理アドレスとGPFNとの対応が記録されることになります。
物理環境での変換処理と比較して一段階多いアドレス変換のメカニズムを用いることで、仮想化環境のアドレス変換を実現しています。
1-3. Disk装置の仮想化
ゲストOSに接続されているDisk装置は、何らかの手段で仮想化される必要があります。ここでいう仮想化とは、「物理的なDisk装置はホストOS(KVM)に接続されているが、ゲストOSは自身が接続しているDisk装置をあたかも物理接続であるかのように見せる方法」を指しています。
KVMの場合は、この処理をオープンソースのQEMUによって実現しています。QEMUは、Disk装置などのデバイスをソフトウェア的にエミュレートするソフトウェアです。ゲストOSが自身に接続されているDisk装置にアクセスすると、仮想化支援機能によって、QEMUのデバイスエミュレータに処理が渡され、ゲストOSがアクセスしようとしているDisk装置の実体に相応するホストOS(KVM)に接続されているDisk装置に対してアクセスを実施するものです。
1-4. ネットワークの仮想化
ネットワークの仮想化についても、Desk装置の仮想化と同様に、QEMUのデバイスエミュレーションによって実現をしています。ただし、Disk装置の場合とは異なる点として、KVM環境の仮想ネットワークの概念があります。
仮想ネットワークは、「TAPデバイス」と「仮想ブリッジ」から構成されており、これらはホストOS(KVM)環境で動作しています。具体的な動作を解説すると以下のようになります。
仮想マシン上のゲストOSのNICをエミュレートしているQEMUプロセスと通信しているのが、ホストOS(KVM)環境で動作するTAPデバイスです。よって、ホストOS(KVM)環境では、複数のTAPデバイスが動作しており、ゲストOSと通信していることになります。これらの複数のTAPデバイスを接続しているのが仮想ブリッジであり、ホストOS(KVM)内部にネットワークスイッチを構成することになります。単純な方式では、この仮想ブリッジを物理的なNICにブリッジ接続することで、ゲストOSが物理的なネットワーク環境と接続することが可能となります。