我在两台其他方面完全相同的机器上发现了截然不同的软件 raid10 性能和行为。
我有两台硬件相同的机器,同时购买,具有相同的软件版本、硬件版本和固件版本。每台机器都有一个 SAS 控制器,带有 8 x 6 Gb/s 通道,可连接到一个可容纳 12 个 SAS 磁盘的 SAS 机箱。
在机器 1 上,它运行稳定,似乎运行完美,RAID 阵列中的每个磁盘的行为或多或少相同:繁忙时间相等(在生产负载级别中所有磁盘的繁忙时间约为 33%),并且在每周软件 RAID 检查运行时,写入和读取性能不会降低。完整的 RAID 检查大约需要一天时间才能完成,使用所有可用的备用带宽尽快完成。在检查完成时,这相当于大约 200 MB/秒的读取速度。
机器 2 是个问题机器。尽管配置为使用所有可用磁盘带宽,但完整的 raid 检查基本上永远无法完成。在尝试检查时,它以 5 MB/秒的速度缓慢运行,在此期间写入性能下降到大约 30 MB/秒。此外,四个磁盘的繁忙度为 35%,而其余磁盘的繁忙度平均为 22%。
在机器2上取消raid检查后,写入速度恢复到160MB/秒左右。
如果我用dd
它来测试每个单独的mpath
设备,在机器 1 上,我得到的大多数速度是每个驱动器 145 MB/秒左右的读取速度,最低速度为 119 MB/秒,其次是 127 MB。其余的都在 145 MB/秒范围内。
在机器 2 上,我获得的速度在 107 MB(x 3 个磁盘)之间,其余的速度都高于 135 MB/秒,其中一个磁盘的峰值为 191 MB/秒(!)。
我承认我在这方面做得很不尽如人意,但我找不到任何证据来得出结论。我还检查了两台机器上每个磁盘的 SMART 统计数据,虽然所有磁盘上都有相当数量的“读取更正”错误,但这些值与读取性能之间似乎没有关联,忙闲百分比差异之间也没有关联。
我找不到任何可以解释为什么在一个盒子上执行 RAID 检查时性能不佳的原因,而在另一个盒子上执行时性能不佳。如果能提供下一步该如何调试的建议,我将不胜感激。
答案1
我找到了问题所在。软件阵列中的 12 个磁盘中有 4 个禁用了写入缓存。
以下是我为缩小范围所采取的措施:
我将阵列拆开,使用 dd 和 oflag=direct 测试每个磁盘的写入速度。我发现繁忙百分比较高的磁盘也只能写入大约 75 MB/秒,而其他所有磁盘在持续写入 1 GB 和 10 GB 数据大小时都可以达到 180 MB/秒。
但是,由于 4 个慢速磁盘彼此都非常一致,我开始深入研究并安装,sdparm
以便我摆弄 SCSI 参数页面。
当我看到 WCE(写入缓存启用)默认处于开启状态,但这四个磁盘已将其关闭时,我将其打开。写入速度上升到 180 MB/秒,阵列现在以 1 GB/秒的速度重建(这大约是这组磁盘使用此控制器可以达到的最大速度。)
检查命令是sdparm --get=WCE /dev/mapper/mpatha
并进行设置,sdparm --set=WCE --save /dev/mapper/mpatha
以供将来的用户使用。
此外,还开启了省电功能 - 这可以防止操作系统级别缓存来保持速度,尽管 oflag=direct 仍然可以做到。