我在设置 KVM 来宾时遇到了一些严重的磁盘性能问题。使用一个简单的dd
测试,qcow2 映像所在的主机上的分区(镜像 RAID 阵列)的写入速度超过120MB/s,而我的客户机的写入速度为0.5 到 3MB/s。
- 客户机配置了几个 CPU 和 4G 内存,目前没有运行任何其他东西;目前这是一个完全最小的安装。
- 性能使用
time dd if=/dev/zero of=/tmp/test oflag=direct bs=64k count=16000
. - 来宾配置为使用 virtio,但这似乎对性能没有影响。
- 主机分区是 4kb 对齐的(无论如何,主机上的性能都很好)。
- 在磁盘上使用写回缓存可以大大提高报告的性能,但我宁愿不使用它;即使没有它,性能也应该比这好得多。
- 主机和来宾都运行 Ubuntu 12.04 LTS,它带有 qemu-kvm 1.0+noroms-0ubuntu13 和 libvirt 0.9.8-2ubuntu17.1。
- 主机启用了截止日期 IO 调度程序,而来宾没有任何操作。
似乎有很多调整 kvm 性能的指南,我最终会到达那里,但似乎我应该在这个时间点获得比这更好的性能,所以看起来有些地方已经很不对劲了。
更新 1
突然当我现在回去测试时,它是26.6 MB/s;这更像是我对 qcrow2 的预期。我会留下这个问题,以防有人对可能出现的问题有任何想法(以防它再次神秘地返回)。
更新 2
我不再担心 qcow2 性能,只是使用原始图像切换到 RAID1 之上的 LVM,仍然使用 virtio,但在磁盘驱动器上设置 cache='none' 和 io='native'。写入性能现在是 appx。135MB/s使用与上述相同的基本测试,因此在可以如此轻松地完全解决问题时,找出问题所在似乎没有多大意义。
嗯,是的,qcow2 文件并不是为极快的性能而设计的。您将从原始分区(或者最好是 LV)中获得更好的运气。
如何使用 QCOW2 实现最佳性能:
根据 qcow2 开发人员的说法,最重要的一个是预分配,它提供了很好的提升。它现在几乎可以与 LVM 相提并论了!请注意,这通常在现代(Fedora 25+)Linux 发行版中启用。
如果这不是生产实例,你也可以提供不安全的缓存(这是危险的,不推荐,只对测试有用):
一些用户报告说这个配置在一些测试中胜过 LVM/不安全配置。
对于所有这些参数,需要最新的 QEMU 1.5+!同样,大多数现代发行版都有这些。
我使用此设置为 qcow2 图像取得了很好的效果:
它禁用来宾缓存并启用 AIO(异步 IO)。运行你的
dd
命令在主机上给了我 177MB/s,在来宾上给了我 155MB/s。该映像位于完成主机测试的同一 LVM 卷上。我的
qemu-kvm
版本是Ubuntu 12.04.2 LTS的1.0+noroms-0ubuntu14.8
内核。3.2.0-41-generic
我遇到了完全相同的问题。在 RHEL7 虚拟机中,我有其他机器连接到的 LIO iSCSI 目标软件。作为我的 iSCSI LUN 的底层存储(后台存储),我最初使用 LVM,但后来切换到基于文件的映像。
长话短说:当后备存储连接到 virtio_blk(vda、vdb 等)存储控制器时 - 连接到 iSCSI 目标的 iSCSI 客户端的性能在我的环境中为 ~ 20 IOPS,吞吐量(取决于 IO 大小)~ 2- 3 兆字节/秒。我将虚拟机中的虚拟磁盘控制器更改为 SCSI,并且能够从我的 iSCSI 客户端获得 1000+ IOPS 和 100+ MiB/s 的吞吐量。
如果您使用单个命令运行虚拟机,则可以使用参数
它让我从 3MB/s 到 70MB/s
在旧的 Qemu/KVM 版本上,Qcow2 后端在未预分配时非常慢,如果在未启用写回缓存的情况下使用则更慢。浏览此处获取更多信息。
在最近的 Qemu 版本中,Qcow2 文件要快得多,即使在不使用预分配(或仅元数据预分配)的情况下也是如此。尽管如此,LVM 卷仍然更快。
关于缓存模式的注意事项:写回缓存是首选模式,除非使用不支持或禁用磁盘缓存刷新/障碍的来宾。实际上,Win2000+ 来宾和任何 Linux EXT4、XFS 或 EXT3+barrier 挂载选项都可以。另一方面,cache=unsafe不应该用于生产机器,因为缓存刷新不会传播到主机系统。意外的主机关闭实际上会破坏来宾的文件系统。