QEMU/KVMではvirtioという準仮想化*1デバイスをサポートしていて、ゲストOS側がLinux 2.6.24以上であれば、この機能により、仮想ディスク読み書き速度を大きく向上させることができる。
ここでは、Ubuntu Hardy(8.04)を用いて、virtioによる速度改善がどれほどのものかを実験する。
作業自体は
http://kvm.qumranet.com/kvmwiki/boot_from_virtio_block_device
に書かれているもの。
virtioの使用方法
ゲストOS側の準備
ゲストOSから見えるデバイス名が「/dev/vda」となるため、ゲストOSの/etc/fstabの中でデバイス名指定*2してある部分があれば変更の必要があるが、Ubuntuではインストール時にUUIDで記述されたものが作成されるため、変更の必要はない。
他には、ブートローダGRUBのデバイス指定のファイルも関係するが、すぐに変更する必要はない?
ファイル名: /boot/grub/device.map
(hd0) /dev/vda
-hda [HDDイメージファイル]
で指定していた仮想ハードディスク指定を
-drive file=[HDDイメージファイル],if=virtio,boot=on
に変更する。
なお、今回使用したイメージファイルの形式はQcow2。
$ file [HDDイメージファイル]
[HDDイメージファイル]: Qemu Image, Format: Qcow , Version: 2
速度の比較
virtioの導入前後でそれぞれ「hdparm -t」により値を測定したものを比較した。
virtioの導入前後のアクセス速度
導入前 | 導入後 |
12〜15[MB/sec] | 34〜38[MB/sec] |
結果、
かなり大きく速度が上がったことが分かった。なお、参考として、ホストOS上でHDDイメージのある
パーティションに対して
hddparmを実行したところ、62〜66[MB/sec]程度の値が出ている。
使用したバージョン:
- Linux 2.6.25 (tuxonice-sources-2.6.25-r3)
- KVM 64(AMD-V使用・モジュールはLinux 2.6.25に付属のものを使用して「--with-patched-kernel」オプションを付けてconfigureしてビルドしたもの)