KVMでNestする場合、CPU ModelをHost passthroughにするのが一般的である
<cpu mode='host-passthrough'>
こんな感じでOK、virshやlibvirtでCPUモデルを変えるだけの簡単なお仕事
しかしVMのマイグレーションを視野に入れた場合、ホストCPUをパススルーしてしまうと面倒なことになる
ゲスト仮想マシンを別のホスト物理マシンに移行する必要が全くないことが判明している場合、そのホスト物理マシンの CPU モデルは修正なしに単純に渡されます。
一部の仮想化データセンターには、すべてのサーバーが 100% 同一の CPU を保持していることを保証する設定のセットが含まれる場合があります。
そのような場合も、ホスト物理マシンの CPU モデルは修正なしに単純に渡されます。
しかし、さらに一般的なケースとしては、ホスト物理マシン間に CPU のバリエーションが存在することがあります。
このような CPU の混在環境では、妥協できる共通の CPU を決定する必要があります。
-- Red Hat Product Documentation
これは従来のNest環境では問題になる
CPU ModelをHost passthroughにする理由として、Nested KVMの実行にはvmxというCPUの拡張機能が必要らしい
よって仮想マシンにVMXを拡張機能として持たせてあげれば良い
今回の試験環境:
openSUSE Leap 15.1
libvirt Version 5.1.0
Intel Xeon E5-2630L
前提として
/etc/modprobe.d/kvm.conf を作成、kvm.conf内に
options kvm_intel nested=1
とで記述しNested KVMを有効化しておく
/sys/module/kvm_intel/parameters/nested
をcatして確認しておくこと
haruka@suse_host01:~> cat /sys/module/kvm_intel/parameters/nested
Y
でOK
ここでvirshを用いてNested KVMさせたいVMのマシンモデルを編集
sudo virsh edit suse_vm01
<feature policy='require' name='vmx'/>
を<cpu></cpu>
中に追加することで仮想マシンであるsuse_vm01にvmx機能が付与される
因みにvmxはIntel VT-xの拡張動作モードらしい
vmxを有効化してあげることで、suse_vm01上でkvmが実行できる
参考文献
・Red Hat Product Documentation - 20.40. ゲスト仮想マシンの CPU モデルの設定
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/sect-managing_guest_virtual_machines_with_virsh-guest_virtual_machine_cpu_model_configuration