●KVM(Kernel-based Virtual Machine)
Linuxカーネルの仮想化機能。
●KVMによる仮想化機能の有効化
完全仮想化を実現するため、仮想化支援機能を搭載したCPUが必要。仮想化支援機能とは仮想化ソフトウェアが行う処理の一部をCPUが分担することで処理を高速化する機能で、Intel VTやAMD-Vで実装。
CPUが仮想化支援機能をサポートしているかどうかを調べるには、lscpuコマンドや「/proc/cpuinfo」ファイルを確認。
lscpuコマンドでは「Virtualization」(日本語では「仮想化」)の値が"VT-x"(Intel VT)または"AMD-V"(AMD-V)と表示されればサポートしています。
「/proc/cpuinfo」ファイルでは「flags」において"vmx"(Intel VT)または"svm"(AMD-V)という値があるかどうかを確認。
また、仮想化支援機能を利用するために、カーネルモジュールkvm(kvm.ko)に加えて、以下のどちらかのカーネルモジュールをホストOSのカーネルにロードする必要がある。これらのモジュールはカーネルに組み込むことも可能。
・kvm_intel(kvm-intel.ko)...Intel VT-xを使用する場合
・kvm_amd(kvm-amd.ko)...AMD-Vを使用する場合
●KVMによる仮想環境の管理
KVMの特徴
・QEMUによるハードウェアエミュレーション
QEMUとはオープンソースのハードウェアエミュレータ。KVMでは、QEMUを利用して仮想マシンの作成、起動、停止などの基本動作を行う。QEMUで実行される仮想マシンはLinuxの1プロセスとして動作するので、他のプロセスと同様に管理できる。また、「/dev/kvm」というデバイスファイルを通じてKVMとやり取り。
・libvirtに対応
libvirtはオープンソースの仮想化管理用のソフトウェア。KVMではデフォルトの管理方法。
libvirtを利用するプログラムとしては、GUIの仮想マシン管理ソリューションであるvirt-managerや、CLIのvirshコマンドなど。
libvirtは数多くの仮想化ソフトウェアに対応。
Oracle VM VirtualBox、VMware ESX/GSXi/Workstation、 Microsoft Hyper-V など
libvirtを用いて仮想環境を管理するためにはlibvirtdデーモンが稼働している必要がある。
●ハイパーバイザー型の実現方法には更に「完全仮想化」と「準仮想化」がある。
■完全仮想化
完全仮想化(Full Virtualization)は、コンピュータのハードウェアをエミュレー卜(模倣)して仮想マシン上に完全な論理コンピュータを実現し、ゲストOSを無修正で動。そのため、ソースコードを自由に書き換えることができないWindowsをゲストOSとしてインストールすることが可能。
■準仮想化(PV:Paravirtualization)は、ハードウェアのエミュレーションが必要ないため、処理のオーバーヘッドが小さく、仮想化環境でも高いパフォーマンスを発揮。準仮想化はゲストOSを修正するか、仮想マシンに特化したデバイスドライバを使うことで実現。KVMやVirtualBoxでは、virtioという準仮想化用のドライバを利用することによって、仮想化環境でのI/Oパフォーマンスを高めることができます。