我们有一个由 mdadm 提供支持的三向 RAID 1 镜像。我想我读到 mdadm 应该同时接受多个读取请求并将它们分布在镜像中的不同驱动器上(并行读取)以提高读取性能,但在我们的测试和观察输出中iostat -xm 1
,它似乎只 /dev/sda即使该设备的 I/O 已从 5 个不同的 md 设备中饱和,仍在使用。
我是不是误会了什么?mdadm 是否需要进行不同的配置?我们的版本(CentOS 6.7)不支持这个吗?我不确定它为什么会这样。
基准设置 - 同时运行以下命令:
dd if=/dev/md2 bs=1048576 of=/dev/null count=25000
dd if=/dev/md3 bs=1048576 of=/dev/null count=25000
dd if=/dev/md4 bs=1048576 of=/dev/null count=25000
dd if=/dev/md5 bs=1048576 of=/dev/null count=25000
dd if=/dev/md6 bs=1048576 of=/dev/null count=25000
虽然这些人正在观看iostat -xm 1
(下面包含的示例输出 - 镜像由 sda、sdb 和 sdc 组成)的输出。
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sda 100669.00 0.00 10710.00 0.00 435.01 0.00 83.18 33.28 3.11 0.09 100.00
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
md1 0.00 0.00 19872.00 0.00 77.62 0.00 8.00 0.00 0.00 0.00 0.00
md2 0.00 0.00 18272.00 0.00 71.38 0.00 8.00 0.00 0.00 0.00 0.00
md5 0.00 0.00 18272.00 0.00 71.38 0.00 8.00 0.00 0.00 0.00 0.00
md7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
md6 0.00 0.00 18240.00 0.00 71.25 0.00 8.00 0.00 0.00 0.00 0.00
md4 0.00 0.00 18208.00 0.00 71.12 0.00 8.00 0.00 0.00 0.00 0.00
md3 0.00 0.00 18528.00 0.00 72.38 0.00 8.00 0.00 0.00 0.00 0.00
md0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
再次执行测试,但更改它,以便您在同一个 MD 设备(例如 /dev/md2)上执行所有五个读取,并且您应该看到它们正在分发。
单个读取操作将仅从镜像中的一个驱动器读取。它将从分配给镜像的第一个磁盘开始,在这种情况下看起来是 /dev/sda。由于您配置了 5 个以上的 MD 设备,并且正在从每个设备执行单个读取操作,因此它们都从 /dev/sda 中提取。
我建议不要配置多个 MD 设备,而只使用一个跨越整个 SSD 的设备。
或者,更改您的测试方法以强制它执行多个不同的驱动器。看看bonnie++,它非常漂亮。