RAID1-mdadm 镜像-未按预期执行并行读取?

RAID1-mdadm 镜像-未按预期执行并行读取?

我们有一个由 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

答案1

再次执行测试,但进行更改,以便在同一个 MD 设备(例如 /dev/md2)上执行所有五次读取,并且您应该看到它们被分布。

单次读取操作只会从镜像中的一个驱动器读取。它将从分配给镜像的第一个磁盘开始,在本例中是 /dev/sda。由于您配置了 5 个以上的 MD 设备,并且正在从每个设备执行单次读取操作,因此它们都从 /dev/sda 中提取。

我建议不要配置多个 MD 设备,而只使用一个覆盖整个 SSD 的设备。

或者,改变你的测试方法,强制它对几个不同的驱动器进行测试。看看邦尼++,非常漂亮。

相关内容