使用位于 mdadm RAID5 阵列上的来宾文件,我无法获得接近可用性能的任何东西。我相信我优化了阵列和文件系统的所有参数以获得最佳 R5 性能:
- 设置位图=无
- 设置条带缓存 = 32768(从 256-32768 尝试)
- EXT4 stride=128 / stripe-width=384 (chunk 512K, FS block 4K, 3 data-disk)
主机上的阵列性能非常好(105MB 使用无缓存,470MB 使用缓存)。它由 4 个 HDD 组成,相对较慢。
- 如果图像文件是 raw 或 qcow2,它没有任何不同
- 尝试了 Virtio SCSI 和 Virtio SATA
- 尝试了所有缓存组合,也在客户机本身(Windows 10 和 Linux)
KVM/QEMU 是否不能很好地与 RAID5 mdadm 阵列一起使用?
这似乎是一个延迟问题(类似于我在带有本地驱动器的 ESXi 上看到的)。
延迟近 17 秒,平均写入性能为 1-10MB
来自 virt XML 的示例:
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='writeback'/>
<source file='/mnt/R5_DATA/data2.raw'/>
<target dev='sdd' bus='scsi'/>
<address type='drive' controller='0' bus='0' target='0' unit='3'/>
</disk>
<controller type='scsi' index='0' model='virtio-scsi'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</controller>
经过大量测试后,肯定可以获得非常好的性能。有几种情况会产生巨大的不同:
我正在运行 Debian stable(9,Stretch),这意味着您运行的是非常旧版本的内核、QEMU 和 virsh :-(
出于同样的原因,我现在搬到了 Ubuntu 稳定版,这将使您大幅提升到这些重要组件的新版本。在我看来,Debian stable 它确实是一个糟糕的选择。当 10/Buster 发布时,猜测它会在一段时间内没问题,但迟早你会有一个过时的系统。
其次,很明显您需要使用主机系统的页面缓存。使用 MD RAID5 时会进行一些高级缓存。即使缓存已满,性能也很好。在我的情况下,在 JBOD 配置中执行大约 100MB/s 的慢速磁盘上写入超过 200MB/s。
在 XML 中使用 cache=none 然后使用 Windows 客户机的页面缓存会给您带来非常缓慢的性能。SSD 可能是另一回事。
还记得在 Windows 客户机中为当前磁盘使用页面缓存设置以获得最佳结果。
你错过了一些技巧。您需要确保整个存储堆栈对齐以实现最佳性能。您需要从顶级 I/O 大小开始并从那里进行优化。例如,使用 64KB 集群创建客户的 NTFS 文件系统,使用 LVM 块设备(注意 LVM 对齐异常),并针对 64KB 块优化软件 RAID。如果您必须使用文件来支持 VM 块设备,请确保文件系统以相同的方式对齐,特别注意您的块组大小(mkfs.ext* 上的 -g 选项)以确保您的块组不会都在同一个磁盘上开始。如果您的顶级应用程序工作负载使用较小的块,则为较小的块对齐,但原理是相同的。
我写了一篇关于如何确保针对特定工作负载实现最佳文件系统对齐的文章,您可能会发现这篇文章很有帮助。