硬件#

硬件#

我的设置性能非常好(geekbench,感觉如何,......)甚至磁盘吞吐量(原始 lvm 分区上的 libvirt)非常接近服务器上的原始性能)在 Linux 和 Windows 客户机上,IOP/s 都低至 100-200 客户机端(而主机端约为 1000)。
这是可以接受的吗(kvm 无法做得更好)还是我做错了什么?

有趣的是,我可以通过改变设置(qcow2 vs raw-image vs raw-partition)或配置(缓存或 io-scheduling)和变化来影响吞吐量,但 IOP 在所有这些组合中都保持在相同的低点。

硬件#

• 配备 24GB RAM 的超微双至强 E5520
• 2x seagate constellation 1TB(Adaptec 3405 上的 RAID1)
• 2x seagate cheetah(Adaptec 6405 上的 RAID1)。

软件

• ubuntu 11.10 3.0.0-13-server
• kvm/QEMU 模拟器版本 0.14.1 (qemu-kvm-0.14.1)
• 对主机和客户机(windows 上的 bonnie++、hdparm、hdtune)的磁盘(bonnie++、hdparm)进行基准测试

配置

我测试了几种光盘配置,当前设置是:

Linux 主机

(它们只是不“需要”高 IO 性能,所以我保留更舒适的磁盘文件)
• 我的 constellations 上的 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 服务器和远程桌面服务,因此这里我肯定需要良好的 IO 性能)
• 我的 Cheetahs 上的原始 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>

答案1

最佳配置(通常)如下:

  1. 在主机上,设置elevator=deadline
  2. 使用 virtio 且只使用 virtio
  3. 尽可能使用原始 LV。Qcow2 会产生开销。FS 上的文件也有开销
  4. 在虚拟机中使用elevator=noop
  5. noatime,nodiratime无论在主机还是虚拟机中,尽可能在 fstab 中使用
  6. 确保 virtio 驱动程序是最新的,尤其是 Windows 驱动程序。
  7. 基于 Debian 的发行版(可以说)不如 Fedora 和 RHEL 的 QEMU/KVM 好。并不是要挑起口水战,但大多数开发和测试都是在 Fedora 和 RHEL 上完成的,根据我自己的经验,Ubuntu 和 Debian 上有很多问题我无法在 Fedora 和 RHEL 上重现。如果您愿意,可以忽略这一点,但如果您正在寻找解决方案,通常值得尝试对另一个发行版进行快速基准测试

答案2

尝试将“截止日期”设置为您的 I/O 调度程序主人的启动 KVM 之前的磁盘:

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

如果你有 I/O 限制负载,那么它可能是你的最佳选择这篇 IBM 论文建议。

相关内容