KVM 磁盘性能极低(qcow2 磁盘文件 + virtio)

KVM 磁盘性能极低(qcow2 磁盘文件 + virtio)

我在设置 KVM 客户机时遇到了一些严重的磁盘性能问题。使用一个简单的dd测试,qcow2 映像所在的主机上的分区(镜像 RAID 阵列)写入超过120MB/秒,而我的客人收到的写信范围从0.5 至 3MB/秒

  • 客户机配置了几个 CPU 和 4G RAM,目前没有运行任何其他程序;目前这是一个完全最小的安装。
  • 使用 来测试性能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.6MB/s;这更像我使用 qcrow2 时所预期的。我会留下这个问题,以防有人知道问题可能出在哪里(以及以防它神秘地再次出现)。

更新 2

我不再担心 qcow2 的性能,而是直接在 RAID1 上使用原始图像切换到 LVM,仍然使用 virtio,但在磁盘驱动器上设置 cache='none' 和 io='native'。写入性能现在约为。135MB/秒使用与上述相同的基本测试,因此,当可以如此轻松地完全解决问题时,弄清楚问题是什么似乎没有多大意义。

答案1

嗯,是的,qcow2 文件并非为实现极快的性能而设计的。使用原始分区(或者最好是 LV)会更幸运。

答案2

如何实现QCOW2 带来最佳性能

qemu-img create -f qcow2 -o preallocation=metadata,compat=1.1,lazy_refcounts=on imageXYZ

qcow2 开发人员表示,最重要的是预分配,这会带来很好的提升。它几乎与 LVM 相当现在!请注意,此功能通常在现代 (Fedora 25+) Linux 发行版中启用。

如果出现以下情况,您也可以提供不安全的缓存不是生产实例(这很危险,不推荐,仅适用于测试):

<driver name='qemu' cache='unsafe' />

一些用户报告说,该配置在某些测试中优于 LVM/不安全的配置。

对于所有这些参数最新的 QEMU 1.5+是必需的!同样,大多数现代发行版都有这些。

答案3

我使用此设置对 qcow2 图像取得了很好的效果:

<driver name='qemu' type='raw' cache='none' io='native'/>

禁用客户机缓存并启用 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

答案4

在旧版 Qemu/KVM 中,如果未预分配,Qcow2 后端会非常慢,如果未启用写回缓存则更是如此。浏览此处获取更多信息。

在较新的 Qemu 版本中,即使不使用预分配(或仅使用元数据的预分配),Qcow2 文件的速度也更快。尽管如此,LVM 卷仍然速度更快。

关于缓存模式的说明:写回cache 是首选模式,除非使用不支持或禁用磁盘缓存刷新/屏障的客户机。实际上,Win2000+ 客户机和任何 Linux EXT4、XFS 或 EXT3+屏障挂载选项都可以。另一方面,cache=unsafe 应该绝不不适用于生产机器,因为缓存刷新不会传播到主机系统。意外的主机关闭可能会彻底破坏客户的文件系统。

相关内容