KVM と /proc/cpuinfo の微妙な関係

今回は 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 で無効にすることにはどういったメリットがあるんだろう? 気になる。

You are using an unsupported browser and things might not work as intended. Please make sure you're using the latest version of Chrome, Firefox, Safari, or Edge.