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


27

设置KVM客户机时,我遇到一些严重的磁盘性能问题。通过一个简单的dd测试,qcow2映像所在的主机分区(镜像RAID阵列)的写入速度超过120MB / s,而我的来宾的写入速度为0.5到3MB / s

  • 该来宾配置了几个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.6 MB / s;这更像是我期望的w / qcrow2。如果有人对问题可能有什么想法(如果它再次神秘地出现),我将保留问题。

更新2

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


您没有提到使用的发行版和软件版本。
dyasny 2012年

添加了一些有关版本的信息。
El Yobo

啊,如预期的那样,ubuntu ...您是否有机会在fedora上重现此内容?
dyasny 2012年

该服务器在德国,而我目前在墨西哥,因此可能有点棘手。而且,如果它确实突然起作用了……我仍然不想与Fedora服务器打交道;)我已经看到了一些评论,这表明Debian / Ubuntu系统的KVM确实比Fedora / CentOS的问题更多。开发工作在那里完成。
El Yobo

完全是我的意思。在任何情况下,如果您使用的是服务器级操作系统,则需要RHEL,而不是Ubuntu
dyasny 2012年

Answers:


14

嗯,是的,qcow2文件不是为实现快速的性能而设计的。您可以从原始分区(或最好是LV)中获得更好的运气。


3
显然,但是它们也不意味着像我得到的数字一样糟糕。
El Yobo

1
那里的大多数示例都显示了与qcow2相似的性能,这似乎比旧版本有显着改进。KVM网站本身的编号在linux-kvm.org/page/Qcow2上,显示了各种情况下的可比时间。
El Yobo

1
18:35(qcow2)与8:48(原始)是“可比时间”吗?
womble

1
我已将它们切换到RAID1之上的LVM支持的原始映像,将io调度程序设置为在来宾虚拟机上无操作并在主机上截止,现在写入速度为138 MB / s。我仍然不知道是什么导致了qcow2达到3MB / s的速度,但是显然可以通过使用raw来避开它,因此感谢您朝这个方向推进。
El Yobo

1
事实并非如此-qemu中的最新补丁大大提高了qcow2的速度!我们几乎可以相提并论了。
lzap 2013年

7

如何使用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+!同样,大多数现代发行版都有这些。


2
这是不是一个好主意,使用缓存=不安全:意外主机关机可以在肆虐整个来宾文件系统。这是很多更好地利用缓存=回写:相似的性能,但更好的可靠性。
shodanshok

1
就像我说过的:如果这不是生产实例(适合测试)
lzap 2015年

很公平。我错过了;)
shodanshok

6

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

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

这将禁用来宾缓存并启用AIO(异步IO)。运行您的dd命令后,主机上的速度为我的177MB / s,来宾上的速度为155MB / s。映像放置在完成主机测试的同一LVM卷上。

我的qemu-kvm版本是1.0+noroms-0ubuntu14.8和内核3.2.0-41-generic从现有的Ubuntu 12.04.2 LTS。


5
您将qcow2图像类型设置为“原始”吗?
亚历克斯

我想我已经复制了较早的条目,我想速度好处应该是相同的type='qcow2',在我编辑之前您能检查一下吗?我再也无法访问这种配置了-我迁移到具有mount bind目录的LXC,以实现guest 虚拟机中真正的本机速度。
Gertas

2

如果使用单个命令运行vms,则可以使用参数作为参数

kvm-驱动器文件= / path_to.qcow2,如果= virtio,缓存=关闭<...>

它使我从3MB / s上升到70MB / s


2

在旧的Qemu / KVM版本上,未预先分配Qcow2后端时非常慢,如果在未启用回写缓存的情况下使用Qcow2后端,则速度会很慢。浏览此处获取更多信息。

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

关于缓存模式的注意事项:写回缓存是首选模式,除非使用的来宾不支持或禁用磁盘缓存刷新/屏障。实际上,Win2000 + guest虚拟机和任何Linux EXT4,XFS或EXT3 + barrier挂载选项都可以。另一方面,绝对不要在生产机器上使用cache = unsafe ,因为缓存刷新不会传播到主机系统。主机意外关闭实际上会破坏来宾的文件系统。


2

我遇到了完全相同的问题。在RHEL7虚拟机中,我具有其他计算机连接到的LIO iSCSI目标软件。作为我iSCSI LUN的基础存储(备份),我最初使用LVM,但后来切换到基于文件的映像。

长话短说:当备份存储连接到virtio_blk(vda,vdb等)存储控制器时-从iSCSI客户端连接到iSCSI目标的性能在我的环境中约为20 IOPS,吞吐量(取决于IO大小)约为2- 3 MiB /秒。我将虚拟机中的虚拟磁盘控制器更改为SCSI,并且能够从iSCSI客户端获得1000+ IOPS和100+ MiB / s的吞吐量。

<disk type='file' device='disk'>
   <driver name='qemu' type='qcow2' cache='none' io='native'/>
   <source file='/var/lib/libvirt/images/station1/station1-iscsi1-lun.img'/>
   <target dev='sda' bus='scsi'/>
   <address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.