使用位于 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>
答案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 选项),以确保您的块组不会全部从同一磁盘开始。如果您的顶层应用程序工作负载使用较小的块,请对齐较小的块,但原理是相同的。
我写了一篇关于如何确保最佳文件系统对齐对于特定的工作量,您可能会发现它很有帮助。