今回は Libvirt/KVM のマシンをセットアップしている最中に遭遇したトラブルを紹介してみる。
まず、KVM の動作には CPU が仮想化支援機能 (Intel-VT または AMD-V) をサポートしている必要がある。
なので、それを /proc/cpuinfo から確認した。
Intel CPU の場合は vmx が、AMD CPU の場合は svm が flags の中にあれば良い。
この機能は最近の CPU であれば、よほどの廉価版でない限り付いている。
$ egrep -c '(vmx|svm)' /proc/cpuinfo
8
上記を確認した上で virt-install コマンドでドメインのインストールを試みた所 WARNING が出た。
KVM による高速化が使えないので QEMU を使いますと言っている。
端的に言うと、この状況では壮絶に遅くなる。
$ sudo virt-install --accelerate --connect=qemu:///system \
> --name=centos6 --vcpus=1 --ram=512 \
> --disk=/volume/images/centos6.qcow2,format=qcow2 \
> --location='http://ftp.iij.ad.jp/pub/linux/centos/6.5/os/x86_64' \
> --nographics --extra-args='ks=http://192.168.122.1/ks.cfg console=tty0 console=ttyS0,115200n8 keymap=ja'
WARNING KVM acceleration not available, using 'qemu'
どういうことだ?と思いながらまずはカーネルモジュールを確認してみる。
kvm モジュールはあるが、何故か kvm_intel モジュールがロードされていない…。
$ lsmod | grep kvm
kvm 451511 0
手動で modprobe してみるがダメ。
$ sudo modprobe kvm_intel
modprobe: ERROR: could not insert 'kvm_intel': Operation not supported
不思議に思いながら kvm-ok コマンドを使ってみると、やっと原因が分かった。
CPU は KVM 拡張をサポートしているが、BIOS が vmx を無効にしているらしい。
$ sudo /usr/sbin/kvm-ok
INFO: /dev/kvm does not exist
HINT: sudo modprobe kvm_intel
INFO: Your CPU supports KVM extensions
INFO: KVM (vmx) is disabled by your BIOS
HINT: Enter your BIOS setup and enable Virtualization Technology (VT),
and then hard poweroff/poweron your system
KVM acceleration can NOT be used
そこで再起動して BIOS で Virtualization (仮想化) の項目を有効にしたところ kvm-ok コマンドの結果が変化した。
$ sudo /usr/sbin/kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used
lsmod の結果も kvm_intel モジュールが読み込まれている。
これで大丈夫だ。
$ lsmod | grep kvm
kvm_intel 143060 4
kvm 451511 1 kvm_intel
今回得られた知見は /proc/cpuinfo のフラグは、あくまで CPU がその機能をサポートしているかに過ぎず、 機能が有効になっているか否かは別問題ということ。
ところで、メーカーが Virtualization を BIOS で無効にすることにはどういったメリットがあるんだろう?
気になる。