最近のLinuxカーネルは、KVMのネスト (KVMのゲストOS上でKVMを動かす)ができますのでやってみました。
※古いカーネルではできないようですが、Fedora 17のカーネルは対応済みです。
デフォルトは、ネスト機能がOFFになっています。
# cat /etc/issue Fedora release 17 (Beefy Miracle) Kernel \r on an \m (\l) # cat /sys/module/kvm_intel/parameters/nested N
ホストOS(Fedora 17)の設定を変更します。/etc/modprobe.d/kvm-nested.conf ファイルを作って以下を記述。
options kvm_intel nested=1
モジュールをリロード
# modprobe -r kvm_intel # modprobe kvm_intel
ちなみに、KVMがすでに動いていると、-r する時に以下のようなエラーが出てしまいますので注意してください。
FATAL: Module kvm_intel is in use.
有効になったことを確認します。
# cat /sys/module/kvm_intel/parameters/nested Y
次にゲストOSの設定です。普通にvirt-managerでゲストを作ると、ゲスト内でのCPUのタイプが”QEMU Virtual CPU”となり、仮想化を使うことができません。(表示例はゲストOSにCentOS6を使用)
# cat /proc/cpuinfo | grep -e "model name" -e "vmx" model name : QEMU Virtual CPU version 1.0.1
よって、一端ゲストOSを停止し、CPUのタイプを変更します。Fedora 17の仮想マシンマネージャーでは、以下のように”ホストCPUのコピーの設定”というボタンがあるので、これをクリックするだけです。
私のホストの環境は、”Intel(R) Core(TM) i5 CPU 661 @ 3.33GHz”で、ボタンをクリックすると上記のように”Westmere”が自動的に設定されました。ちなみに、設定前と設置後のゲストOSの設定xmlファイルのdiffを見ると以下のように行が追加されていました。
<pae/> </features> + <cpu mode='custom' match='exact'> + <model fallback='allow'>Westmere</model> + <vendor>Intel</vendor> + <feature policy='require' name='tm2'/> + <feature policy='require' name='est'/> + <feature policy='require' name='monitor'/> + <feature policy='require' name='ss'/> + <feature policy='require' name='vme'/> + <feature policy='require' name='dtes64'/> + <feature policy='require' name='rdtscp'/> + <feature policy='require' name='ht'/> + <feature policy='require' name='ds'/> + <feature policy='require' name='pbe'/> + <feature policy='require' name='tm'/> + <feature policy='require' name='pdcm'/> + <feature policy='require' name='vmx'/> + <feature policy='require' name='ds_cpl'/> + <feature policy='require' name='pclmuldq'/> + <feature policy='require' name='xtpr'/> + <feature policy='require' name='acpi'/> + </cpu> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff>
では、再度ゲストOSを起動し、ゲスト内でCPUの情報を見てみます。
# cat /proc/cpuinfo | grep -e "model name" -e "vmx" model name : Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon rep_good unfair_spinlock pni pclmulqdq vmx ssse3 cx16 sse4_1 sse4_2 popcnt aes hypervisor lahf_lm model name : Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon rep_good unfair_spinlock pni pclmulqdq vmx ssse3 cx16 sse4_1 sse4_2 popcnt aes hypervisor lahf_lm
ホストとはCPUのmodelが異なりますが、仮想化を使うためのvmxビットがうまく立ちました。
ゲストOS上でのゲストOSの作成は特に特別な操作は必要ありません。