RAID1是否可以通过Linux mdadm提高性能?


26

我有一个带有2TB HDD的廉价2盘位NAS。为了防止磁盘故障,我正在考虑购买第二个2TB HDD,并将其放入带有Linux mdadm的RAID1中。文件系统是ext4。

这会增加还是降低NAS的性能?读写性能如何?

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

谢谢。

编辑:

因此,我已经有了三个不同的答案:“更快一点”,“您不会注意到”和“将降低性能(如果有的话)”。(我主要对读取性能感兴趣。)Wikipedia说:“读取性能可以大致按拷贝数的线性倍数提高”。哪一个?

编辑2:

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

更改将并行写入所有设备。从任何一台设备读取数据。驱动程序尝试在所有设备上分配读取请求,以最大化性能。

我还发现了MD的RAID10 with --layout=f2,它提供RAID1的冗余和RAID0的读取性能,并且只能与两个驱动器一起使用。但是,由于顺序写入涉及两个驱动器在驱动器的较远部分之间来回搜索,因此写入性能会降低。man md有关详细信息。


2
写 慢一点 读; 快一点。据我了解,虽然写入差异几乎为零,但读取却非常明显。
Sirex

sirex所说的是..您肉眼不会注意到性能差异..不要期望将其提高一倍甚至一半。
Piotr Kula 2012年


1
我想念的一部分:访问NAS的速度。如果一个磁盘已填满网络连接,那么提高内部速度将无济于事。
亨尼斯(Hennes)

Answers:


39

是的,只要一次执行两个单独的磁盘读取操作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秒,这意味着Linux上的RAID1极大地受益于多个磁盘读取skip=$COUNT部分非常重要。第二个过程从10 GB的偏移量读取10 GB的数据。

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


5

是的,您将获得阅读性能提升和冗余。您可以轻松地想象,因为您可以同时从两个不同的HDD读取文件的部分,而这两个文件都位于两个HDD上。

因此,从理论上讲,如果RAID控制器正确执行其工作,则可以提高O(n)。


5
mdadm是软件RAID,因此实际上没有“ RAID控制器”,但在并行读取多个文件时,它将提供良好的读取增强,在这种情况下,我认为没有那么多,因为很少同时使用NAS盒。看到这里的细节:freebsdwiki.net/index.php/...
Shadok

1
实际上,从Linux Software MD raid进行读取时,性能会降低。请参阅unicom.com/node/459(在该测试中,读取速度从77 MB / s降低到74 MB / s)。
ssh

2
@ssh unicom.com/node/459是完全错误的。bonnie ++不可用于测试RAID镜像,这在自述文件中已明确说明。请参阅我的答案以获取更多详细信息。superuser.com/a/757264/68978
Nowaker

4
  • man 4 md状态:“…请注意,驱动程序完成的读取平衡不会使RAID1性能配置文件与RAID0相同;单个输入流 将不会被加速(例如单个dd),而是多个顺序流或一个随机流工作量会使用一个以上的主轴。从理论上讲,具有N盘RAID1将允许N个连续线程所有磁盘的读取。......”

  • 最重要的是- 实际上,基于在iostat典型的2个HDD软件RAID设置上观察到的输出,没有任何平衡。事实上,它有效地看起来像mdadm的选项--write-mostly始终打开。


3

不,从mdadm RAID1读取数据不会获得任何好处。我前段时间在问自己。

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.