RAID1 是否会提高 Linux mdadm 的性能?

RAID1 是否会提高 Linux mdadm 的性能?

我有一个便宜的 2 托架 NAS,配有 2TB 硬盘。为了应对磁盘故障,我打算购买第二个 2TB 硬盘,并使用 Linux mdadm 将其放入 RAID1 中。文件系统是 ext4。

这会增加还是降低 NAS 的性能?读取或写入性能怎么样?

网上似乎对此有很多意见,但没有达成共识。

谢谢。

编辑:

因此,我已经得到了三个不同的答案:“快一点”、“你不会注意到”和“如果有的话,会降低性能”。 (我主要对读取性能感兴趣。)维基百科说“读取性能可以大致以副本数量的线性倍数上升”。 哪一个是?

编辑2:

我发现越来越多的证据支持 RAID1 可以提高读取性能,包括 MD 手册页:

更改会并行写入所有设备。数据可从任意一个设备读取。驱动程序会尝试将读取请求分发到所有设备,以最大程度地提高性能。

我还发现了 MD 的 RAID10 --layout=f2,它提供了 RAID1 的冗余和 RAID0 的读取性能,并且只需两个驱动器即可使用。但是,写入性能会降低,因为顺序写入涉及两个驱动器在驱动器的远距离部分之间来回搜索。man md有关详细信息,请参阅。

答案1

是的,只要同时执行两个单独的磁盘读取操作,Linux 实现的 RAID1 就可以将磁盘读取操作速度提高一倍。这意味着在 RAID1 上读取一个 10GB 文件的速度不会比在单个磁盘上快,但读取两个不同的 10GB 文件*会更快。

为了演示这一点,只需使用 读取一些数据dd。在执行任何操作之前,使用 清除磁盘读取缓存sync && echo 3 > /proc/sys/vm/drop_caches。否则hdparm将声称超快速读取。

单个文件:

# COUNT=1000; dd if=/dev/md127 of=/dev/null bs=10M count=$COUNT &
(...)
10485760000 bytes (10 GB) copied, 65,9659 s, 159 MB/s

两个文件:

# COUNT=1000; dd if=/dev/md127 of=/dev/null bs=10M count=$COUNT &; dd if=/dev/md127 of=/dev/null bs=10M count=$COUNT skip=$COUNT &
(...)
10485760000 bytes (10 GB) copied, 64,9794 s, 161 MB/s
10485760000 bytes (10 GB) copied, 68,6484 s, 153 MB/s

读取 10 GB 的数据需要 65 秒,而读取 10 GB + 10 GB = 20 GB 的数据总共需要 68.7 秒,这意味着RAID1 可大大提高多磁盘读取性能在 Linux 上。skip=$COUNT部分非常重要。第二个进程从 10 GB 偏移量读取 10 GB 的数据。

Jared 的回答和 ssh 的评论提到http://www.unicom.com/node/459是错误的。那里的基准测试证明磁盘读取不会从 RAID1 中受益。但是,测试是使用 bonnie++ 基准测试工具进行的,该工具不会同时执行两个单独的读取。作者明确指出 bonnie++ 不适用于对 RAID 阵列进行基准测试(请参阅自述文件)。

答案2

是的,您将获得读取性能提升 + 冗余。您可以轻松想象,因为文件位于两个硬盘上,所以您可以从两个不同的硬盘上同时读取文件的各个部分。

因此从理论上讲,如果 RAID 控制器正确完成其工作,您就可以获得 O(n)的加速。

答案3

不,从 mdadm RAID1 读取时您不会收到任何好处。我前段时间就问过自己这个问题。

dstat显示磁盘使用情况,也bwm-ng确实很有帮助,特别是在这种情况下,因为它可以显示单独的 mdadm RAID 成员上的读/写使用情况。只需按n几次(下一步),它就会从接口统计信息切换到磁盘统计信息。然后切换到最大值以t查看每个磁盘的最大读/写次数。您将看到以下内容:

对 RAID1 卷 bwm-ng 进行写入时,显示 2 次写入,同时写入 2 个磁盘。对 RAID1 卷 bwm-ng 进行读取时,显示从单个驱动器(阵列成员)读取。

答案4

是的同时为“否”。默认情况下,RAID 1“预读”参数太低,无法注意到单个文件传输的好处,但是您只需对其进行调整即可。

为了检查您的值类型:

# blockdev --getra /dev/md0
256

现在,您可以为每个 RAID 设备设置预读(以 512 字节扇区为单位)。语法是:

## Set read-ahead to 32 MiB ##
# blockdev --setra 65536 /dev/md0

在大多数情况下,只需设置此参数就会使单个文件的读取速度加倍(假设两个驱动器相同)。

注意:这适用于所有 raid 配置。

相关内容