我在一个小的Openstack集群上使用libvirt运行一些图像。 这些机器上的存储性能非常差:我的监控工具显示100%的利用率(通常是写操作,但有时是读操作),吞吐量低至〜50KB / s,最高可达1MB / s。
这是nmon工具的屏幕截图,显示了CPU性能随着时间的推移和当前的存储吞吐量。 他们展示的是典型的:

我通过使用packer工具来使用qemu来构buildDebian和Ubuntu映像,从而在另外两台机器上复制了相同的性能问题。 这是我的qemu命令行:
/ usr / bin / qemu-system-x86_64 -netdev user,id = user.0,hostfwd = tcp :: 3213-:22 -device virtio-net,netdev = user.0 -cdrom / home / $ user / packer_cache / 23e6874116128e16e11cfad1c369c54be97c20023e59b9b9d39d312233e09cd6.iso -m 512M -display sdl -machine type = pc,accel = kvm -vnc 0.0.0.0:47 -name packer-openstack -drive file = output-openstack / packer-openstack.qcow2,if = virtio,cache = none -boot once = d
正如你所看到的,我正在使用virtio驱动程序,并且cache=none 。
我甚至修补过打包器,在qemu-img create的参数中使用-o preallocation=metadata 。 这似乎稍微改善了一些事情,但性能仍然比主机系统低几个数量级。
这个特定的屏幕截图是在Ubuntu安装的“安装基础系统”阶段进行的,但是它与任何存储使用的或多或less都是一致的。
它被带到我的工作站,这是一个带有SSD的Macbrook Pro; 具有相同问题的OpenStack机器正在运行一个RAID10集群,我已经在主机系统上以大约1200MB / s的速度进行了基准testing。
很明显,我不认为qemu下的存储性能与主机系统的存储性能相匹配,但是它的速度有多慢。 Openstack集群上的主机VM需要几秒钟的时间来执行操作,就像在postgres中的CREATE DATABASE语句一样简单。
目前唯一的线索是这里的截图:

这里nmon显示/dev/sda具有完全利用率,但是/dev/sda7 – 实际上拥有qcow2映像的分区 – 只有1%的使用率。 后者的统计数据与我预期的磁盘性能相匹配。
值得注意的是,这里的饱和并不仅仅是我的监控工具的一个神器:主机上的所有操作都非常缓慢。
我怎样才能找出这里究竟发生了什么?
我应该看看像在主机上使用elevator=noop和guest来调整调度程序?
–
编辑 :这是uname -a在我的工作站上的输出:
Linux $hostname 3.18.6-1-ARCH #1 SMP PREEMPT Sat Feb 7 08:44:05 CET 2015 x86_64 GNU/Linux
在Openstack机器上:
Linux $hostname 3.13.0-40-generic #69-Ubuntu SMP Thu Nov 13 17:53:56 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
使用cache = none设置,Qcow2文件后端可能会非常慢。 此外,“-o prellocation = metadata”仅预先分配元数据,而实际的文件数据将被分段。 换句话说,qcow2文件仍然是一个稀疏的分配(对于元数据)。 在过去出现了“-o preallocation = full”的选项,在最近的qemu-img版本中我没有find它。
你可以尝试:
1)使用cache=writeback (这是一个更安全的赌注“不安全”选项)
2)通过在qcow2文件上发布“ fallocate <filename> <filesize> ”来预分配整个qcow2文件?
你可以在这里和这里find其他信息。
显然,只做上面的testingVM的操作! 如果在testing之后,一切正常,您可以将更改传播到其他VM。
当你使用qcow2文件时, cache=none可能不是一个好主意。 一个qcow2文件使得对磁盘的每一次访问看起来都是碎片化的。 这意味着您每次都可以获得驱动器的随机访问性能,并且一些闪存驱动器在随机写入时速度很慢(拼写旨在)。
尝试与cache=unsafe (暂时),以确认这是问题,然后select一个caching模式,你满意的折衷(我会去cache=writethrough通过大多数机器和cache=writeback如果在一个ext3 / 4在数据logging模式下)或更改虚拟磁盘格式。
如果没有caching模式是可以接受的,则需要更线性的磁盘格式,例如lvm逻辑卷(我的首选)或原始图像文件。 IMEM与lvm的qemu性能非常接近主机性能。
Qemucaching模式