#+SETUPFILE: ~/Dropbox/Doc/Org_Templates/level-1.org
测试环境
host
- Fedora
- 17
- Kernel
3.5.3-1.fc17.x86_64
- FS
- ext4
guest
- Ubuntu
12.04, x86_64
- Kernel
- 3.2.0-23
- bonnie++
- 1.96
Other
在每次测试的时候, 在 Guest 和 Host 上都执行以下指令, 把缓存清空
$ echo 3 > /proc/sys/vm/drop_caches
测试结果
启动参数
$ qemu -drive file=~/dunrong/Images/ubuntu.raw,if=ide # ide-raw 的启动参数
$ qemu -drive file=~/dunrong/Images/ubuntu.qcow2,if=ide # ide-qcow2 的启动参数
$ qemu -drive file=~/dunrong/Images/ubuntu-scsi.raw,if=scsi # scsi-raw 的启动参数
$ qemu -drive file=~/dunrong/Images/ubuntu-scsi.qcow2,if=scsi # scsi-qcow2 的启动参数
$ qemu -drive file=~/dunrong/Images/ubuntu-virtio.raw,if=virtio # virtio-raw 的启动参数
$ qemu -drive file=~/dunrong/Images/ubuntu-virtio.qcow2,if=virtio # virtio-qcow2 的启动参数
bonnie++
$ bonnie++ -d log -s 4096 -u root # 默认每次读写块大小 8k
格式 (read M/s,cpu%) (write M/s,cpu%)
RAW | QCOW2 | |
IDE | (305,66) (134,18) | (271,54) (84,12) |
SCSI | (331,51) (83,12) | (326,54) (75,11) |
VIRTIO | (695,51) (76,8) | (616,40) (92,10) |
dd
$ dd if=/dev/zero of=/test.db bs=8k count=524288 # 4G
$ dd if=/dev/sda1 of=/dev/null bs=8k count=524288 # 4G
格式 (read M/s,writeM/s)
RAW | QCOW2 | |
IDE | (123,115) | (122,97) |
SCSI | (128,102) | (118,98) |
VIRTIO | (100-400,128) | (100-400,127) |
结论
- 在严格的磁盘读写, 即忽略缓存的影响的情况下, virtio 比 非 virtio 的 磁盘接口 读写速度都快, 但是差别不大, 比如用 dd 测试的时候. raw 格式比 qcow2 格式快
- 在正常使用中的读写, 使用缓存的情况, virtio 的读速度完爆 非 virtio 磁盘接口的读速度, 这个重读就可以测试出来的, 或者上面的 bonnie++ 的结果, 我是估计内部没有忽略缓存的影响.
- VirtIO 在磁盘方面似乎没有传说中的那么强悍
Other
其实最影响磁盘测试的应该是 QEMU Image 的 cache 策略的设置, 比如把 cache 设置为 Writeback, 那么完全不考虑数据是否已经真正写入缓存, 这样损失了安全性, 但是大 大提高了 Guest 的 I/O.