KVM/QEMU 是否正确支持 mdadm RAID5?

KVM/QEMU 是否正确支持 mdadm RAID5?

使用位于 mdadm RAID5 阵列上的客户文件,我无法获得任何接近可用的性能。我相信我优化了阵列和文件系统的所有参数以获得最佳 R5 性能:

  • 设置位图=无
  • 设置条纹缓存 = 32768(从 256 到 32768 尝试)
  • EXT4 步幅 = 128 / 条带宽度 = 384 (块 512K,FS 块 4K,3 个数据盘)

主机上的阵列性能非常好(不使用缓存时为 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 9 stretch(内核4.9.0-8-amd64) 在此处输入图片描述

答案1

经过大量测试后,肯定可以获得非常好的性能。有几种情况会产生很大的不同:

  • md(即内核)的版本、KVM/QEMU 和 virsh 的版本
  • 您的客户的缓存配置(virsh XML 文件中的缓存设置)
  • MD 配置,尤其是条带缓存块大小(应设置为低至 64K)
  • 优化 EXT4 文件系统,例如使用诺亚泰并根据 UPS 备份等禁用日志记录和障碍。

我运行的是 Debian 稳定版(9,Stretch),这意味着你运行的是内核、QEMU 和 virsh 的非常老的版本 :-(

出于同样的原因,我现在转向了 Ubuntu 稳定版,这将使您能够快速升级到这些重要组件的较新版本。在我看来,Debian 稳定版确实是一个糟糕的选择。当 10/Buster 发布时,我猜它在一段时间内会没问题,但迟早您会拥有一个过时的系统。

其次,很明显您需要使用主机系统的页面缓存。使用 MD RAID5 时会进行一些高级缓存。即使缓存已满,性能也非常好。在我的情况下,在慢速磁盘上写入速度超过 200MB/s,而在 JBOD 配置下执行速度约为 100MB/s。

在 XML 中使用 cache=none,然后使用 Windows 客户机的页面缓存会导致性能非常缓慢。SSD 可能是另一个故事。

还要记住使用 Windows 客户机中当前磁盘的页面缓存设置来获得最佳效果。

答案2

您错过了一些技巧。您需要确保整个存储堆栈对齐以实现最佳性能。您需要从顶层 I/O 大小开始并从那里进行优化。例如,使用 64KB 群集创建来宾的 NTFS 文件系统,使用 LVM 块设备(注意 LVM 对齐异常),并针对 64KB 块优化软件 RAID。如果您必须使用文件来支持 VM 块设备,请确保文件系统以相同的方式对齐,特别注意您的块组大小(mkfs.ext* 上的 -g 选项),以确保您的块组不会全部从同一磁盘开始。如果您的顶层应用程序工作负载使用较小的块,请对齐较小的块,但原理是相同的。

我写了一篇关于如何确保最佳文件系统对齐对于特定的工作量,您可能会发现它很有帮助。

相关内容