kvm低ioperformance

甚至光盘吞吐量(原始lvm分区上的libvirt)与服务器上的原始性能非常接近), 但是 IOP / s低至在Linux和Windows客户端,100-200个客户端(相对于1000个主机端)。
这是一个生活的事情(KVM不能做得更好)还是我做了一些完全错误的事情?

有趣的是,我能够通过改变设置(qcow2 vs raw-image vs raw-partition)或configuration(caching或IO调度)和变化来影响吞吐量,但IOP在所有那些处于相同的低点组合。

硬件#

•超微双dual Xeon E5520与24GB内存
•2个希捷星座1TB(Adaptec 3405上的RAID1)
•2x希捷猎豹(Adaptec 6405上的RAID1)。

软件

•Ubuntu 11.10 3.0.0-13-server
•kvm / QEMU仿真器版本0.14.1(qemu-kvm-0.14.1)
•从主机和来宾(Bonnie ++,hdparm,hdtune在Windows上)对磁盘进行基准testing(bonnie ++,hdparm)

configuration

我testing了几个光盘configuration,目前的设置是:

Linux主机

(他们只是不需要“高”IO性能,所以我保持更舒适的discfiles)
•在我的星座上lvm上的qcow2光盘文件
•qemu / ide

<disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/media/vm/images/mex/mex_root.qcow2'/> <target dev='hda' bus='ide'/> <address type='drive' controller='0' bus='0' unit='0'/> </disk> 

Windows主机###

(运行SQL-Server和远程桌面服务,所以在这里我肯定需要一个好的IO性能)
•我的猎豹原始lvm分区
•virtio

 <emulator>/usr/bin/kvm</emulator> <disk type='block' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source dev='/dev/Cheetah/mts'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </disk> 

最佳configuration(通常)如下:

  1. 在主机上,设置elevator=deadline
  2. 使用virtio和唯一的virtio
  3. 尽可能使用原始LV。 Qcow2给开销。 FS上的文件也有开销
  4. 在VM中使用elevator=noop
  5. 在主机和虚拟机中,尽可能在fstab中使用noatime,nodiratime
  6. 确保virtio驱动程序是最新的,特别是Windows的驱动程序。
  7. 基于Debian的发行版(可以说)不像QEMU / KVM的Fedora和RHEL那么好。 不要开始一场激烈的战争,但是大部分的开发和testing都是在Fedora和RHEL上完成的,而且根据我自己的经验,Ubuntu和Debian上有很多问题,我无法在Fedora和RHEL上重现。 如果你愿意,你可以忽略这个特定的子弹,但是如果你正在寻找一个解决scheme,在另一个发行版上的快速基准通常值得一试

在启动KVM之前,请尝试将“最终期限”设置为主机磁盘的I / O调度程序:

  for f in /sys/block/sd*/queue/scheduler; do echo "deadline" > $f; done 

如果你有I / O约束的负载,这可能是你的最佳select,正如这篇IBM的文章所build议的。