試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

QEMU/KVMのvirtioデバイスによる仮想ディスクのアクセス速度の改善について

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
QEMU/KVM側の指定
-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してビルドしたもの)

*1:ハードウェアのエミュレーションをせずにOSの一部を修正することで動作を軽くする

*2:「/dev/sda5」のような形の、具体的な名前と番号による指定