我在两台其他相同的机器上拥有截然不同的软件 raid10 性能和行为。
我有两台硬件相同的机器,同时购买,具有相同的软件版本、硬件版本和固件版本。每个都有一个带有 8 个 6 Gb/s 通道的 SAS 控制器,通向一个 SAS 机箱,该机箱容纳 12 个 SAS 磁盘。
在机器 1 上,这台机器很稳定,似乎运行良好,raid 阵列中的每个磁盘的行为或多或少都是相同的:繁忙时间是相等的(在生产负载级别的所有磁盘中大约 33%),而每周的软件 raid 检查运行、写入和读取性能不会降低。完整的突袭检查在大约一天内完成,使用所有可用的备用带宽以尽可能快地完成它。在此检查完成时,这相当于大约 200 MB/秒的读取速度。
机器 2 是问题儿童。完整的 RAID 检查基本上永远不会完成,尽管它被配置为也使用所有可用的磁盘带宽。在尝试检查时,它以 5 MB/秒的速度缓慢前进,并且在此期间写入性能下降到大约 30 MB/秒。此外,四个磁盘的平均繁忙率为 35%,而其余磁盘的平均繁忙率为 22%。
取消机器 2 上的 raid 检查后,写入速度恢复到大约 160 MB/秒。
如果我dd
用来测试每个单独mpath
的设备,在机器 1 上,每个驱动器的读取速度最高约为 145 MB/秒,最低为 119 MB/秒,其次是 127 MB。其余的都在 145 MB/秒范围内。
在机器 2 上,我的速度在 107 MB(x 3 个磁盘)之间,其余的都在 135 MB/秒以上,一个磁盘的峰值为 191 MB/秒(!)。
我承认在这里我已经脱离了我的舒适区,但我找不到任何证据来得出结论。我还检查了两台机器上每个磁盘上的 SMART 统计数据,虽然所有磁盘上都存在相当数量的“读取更正”错误,但值和读取性能之间似乎没有相关性,busy% 差异之间也没有.
我找不到任何解释当在一个盒子和另一个盒子上对阵列执行 RAID 检查时性能不佳的原因。关于下一步调试的建议将不胜感激。
我发现了问题。软件阵列中的 12 个磁盘中有 4 个禁用了写入缓存。
这是我为缩小范围所做的工作:
我将阵列分开,并使用 dd 和 oflag=direct 来测试每个磁盘的写入速度。我发现繁忙百分比较高的那些也只能写入大约 75 MB/秒,而所有其他的可以写入 180 MB/秒以持续写入 1 GB 和 10 GB 数据大小。
但是,由于 4 个慢盘都非常一致,我开始挖掘,并安装
sdparm
以允许我摆弄 SCSI 参数页。一旦我看到 WCE(启用写入缓存)的默认设置是打开的,但是这四个磁盘都关闭了它,我就把它打开了。写入速度上升到 180 MB/秒,阵列现在正在以 1 GB/秒的速度重建(这大约是这组磁盘可以使用此控制器完成的最大速度。)
检查命令是
sdparm --get=WCE /dev/mapper/mpatha
和设置它,sdparm --set=WCE --save /dev/mapper/mpatha
为未来的用户。此外,节电功能已开启——这阻止了操作系统级别的缓存以保持速度,尽管 oflag=direct 仍然如此。