使用 LVM 和 md raid5 的 KVM 中的磁盘 I/O 速度很慢

使用 LVM 和 md raid5 的 KVM 中的磁盘 I/O 速度很慢

我已经与 debian 下的 kvm 设置斗争了两个星期,特别是客户机 I/O 磁盘性能。

系统:

-Supermicro 1018d-73mtf (X10SL7-F motherboard)
-16GB ECC/UB
-Intel Xeon E3-1240v3
-6xWD Red 750GB 6Gb/s

在此,我在两个磁盘上运行 Debian Wheezy,其他四个磁盘使用 md 设置为 raid5,并在其上设置 LVM 以用于客户存储。直接在 raid5 上的性能(通过创建 LV 并安装它并运行 bonnie++ 和 dd 测试来衡量)很好,给我 ~220/170MB/s 的读/写速度,但在客户机上,我获得了不错的读取速度和 40-50MB/s 的写入速度,在 Windows(Server 2012)和 Linux(Debian)上进行了测试。我已经阅读了有关对齐磁盘和分区的信息,并按照书本重新创建了 raid 和 lvm 设置,但没有收到任何性能提升。

当在主机上直接使用 atop 测量写入时的负载时,我可以看到磁盘和 lvm 的负载很高,但是在客户机写入时进行测量则显示磁盘的负载约为 20-30%,而 lvm 变为“红色”(100%)。

KVM/主机系统的常规调整已经完成,将调度程序设置为截止时间,为 raid 设置条带缓存,在客户机上将缓存设置为无,将 SAS 控制器卡刷新为 IT 模式 (LSI 2308),我没有主意了,这里有一个 pastebin,其中包含有关设置的相关信息,希望有人注意到我做错了什么http://pastebin.com/vuykxeVg

如果您还需要其他任何东西,我会粘贴它。

编辑:

这基本上就是驱动器、md 和 lvm 的设置方式,但由于我运行的是 3 个磁盘 + 备用磁盘,所以进行了一些更改。http://dennisfleurbaaij.blogspot.se/2013/01/setting-up-linux-mdadm-raid-array-with.html

主机和客户机写入测试期间的 atop 屏幕截图(bonnie++)

主持人: https://i.stack.imgur.com/sHBuK.png

客人: https://i.stack.imgur.com/OFv10.png

答案1

不确定我的说明是否涵盖了所有问题,但使用此存储配置您无法获得正确的对齐。

让我们来看看,

  • 您可以根据 RAID 条带大小对齐分区边界,就可以了。
  • 你可以相应地设置文件系统优化参数,也是可以的。

  • 但为了正确对齐 LVM,您需要 RAID 条带以适合 LVM 范围。

LVM 范围大小始终是 2 的幂。因此,您的 RAID 条带大小需要是 2 的幂。为了获得它,您需要 RAID5 中的磁盘数量等于 2^N+1 = 3、5、9 ...

使用 RAID5 中的 4 个磁盘,这是不可能的。

由于软件 RAID5 没有受保护的写回缓存,因此可能容易受到“部分条带写入惩罚”的严重影响。

也许您还有其他限制写入性能的原因,但我首先会做的是迁移到 RAID10。在所有 6 个磁盘上使用 RAID10,您可以获得与初始设置相当的读取性能和客户存储容量……并且无需担心对齐 ;)。

答案2

我对 KVM 和缓存性能进行了广泛的测试(你可以阅读这里这里这里),而您在互联网上找到的许多建议都是过时的或完全错误的。但让我们一步一步来……

  1. RAID5 需要比您的(512K,从 pastebin 中看到)小得多的块大小(在 32-64K 的数量级上)和一个 BBU(用于写回缓存),以便适用于不同于顺序读/写模式的任何东西。
  2. 对于需要 IOPS 和/或大量随机写入的工作负载,请避免使用 RAID5。这正是客户操作系统所需要的(IOPS 和随机写入速度),因此选择 RAID5(没有硬件 BBU 来启用阵列范围的写回缓存)是错误的。请改用 RAID10。
  3. 绝对为您的客户启用 cache=writeback。Cache=none 仅在顺序读取/写入或绝对不规则和缓存不友好的模式下略有改善。
  4. 只要有可能,就在客户端内部使用 virtio 驱动程序。

答案3

如果你在 Google 上搜索 kvm disk io performance,会得到很多结果。所以我会继续使用 XEN。;-)

所以这似乎是 KVM 的一个普遍问题。

共同的主线是使用正确的 virtio-driver。

然后有两行:

  • 使用缓存在 KVM 服务器上

  • 不使用缓存如果主机操作系统已经执行磁盘缓存,则在 KVM 服务器上的客户端中。这也适用于 Xen 和其他虚拟机管理程序。

两者似乎都可以工作 - 但是两者都说默认设置很糟糕。

答案4

不要在你的 kvm 客户端上使用缓存,如果客户端发出写入请求并且请求转到主机缓存(缓存数据在物理主机的内存中),而你的主机崩溃并且请求没有写入客户端虚拟磁盘,那么你的客户端可能会出现文件系统问题

相关内容