如何使用mdadm / btrfs raid1或zfs mirror获取两个磁盘的读取速度?

Modified on: Tue, 09 Jul 2019 15:00:02 +0800

鉴于RAID1写入了两份数据,我的理解是读取应该接近单个磁盘的两倍。

我测试了不同技术(mdadm,zfs,btrfs)的读取性能,但收效甚微。

根据我的经验:

  • btrfs在读取期间仅使用一个磁盘
  • zfs / mdadm使用两个磁盘,但实现的读取速度是单个磁盘

我使用dd,iotop和iostat验证了结果。

如何同时读取两个磁盘上的数据,以实现单个磁盘读取性能的两倍?

作者:Greg

最佳答案

关于测试如何完成的信息有点受限,所以我假设您只使用dd直接写入文件。

BTRFS:强>

在BTRFS术语中,无论池中有多少磁盘,RAID1都意味着两个副本。因此,为简单起见,我们假设数据和元数据都存储在两个磁盘上的RAID1中。因此,每个磁盘都是另一个磁盘内容的副本(在BTRFS中,磁盘布局可能不相同)。

当BTRFS执行读取它时(我上次检查)依赖于进程的PID来确定首先读取的磁盘。这意味着如果您运行单个进程,它将只从其中一个磁盘读取,除非出现错误并且需要从另一个磁盘检索到良好的副本。

下次运行该进程时,它可能有不同的PID,BTRFS将首先从另一个磁盘读取数据。

MD:(MDADM)

对于顺序读取,如果有任何内容,则不会获得太多收益,因为两个设备上的相同数据都是相同的,因此两个磁盘因此需要在开始读取之前跳过(寻找)相同数量的数据。例如。磁盘A需要等待(跳过)前10个字节才能读取下10个字节,即使磁盘B可以同时读取前10个字节,磁盘A也会跳过它仍需要等到磁盘A完成能够把它应该在内存中读取的20个字节放在一起。

从MD手册页(man md):

“请注意,驱动程序完成的读取平衡不会使RAID1性能配置文件与RAID0相同;单个顺序输入流不会加速(例如单个dd),而是多个顺序流或随机工作负载将使用多个主轴。理论上,拥有N盘RAID1将允许N个顺序线程从所有磁盘读取。“

ZFS:强>

我不了解ZFS,但我希望它与BTRFS / MDADM大致相同。

结论:强>

对于单个顺序读取操作,就像您可能使用dd一样,通过在BTRFS和/或MDADM上设置RAID1,可以获得很多性能。

如果您希望在BTRFS和MDADM上看到提高的读取速度(确实存在),则需要在阵列上并行执行多个不同的读取。 BTRFS可能会根据PID在不同磁盘上分发读取,而MDADM应该会显着减少搜索次数。请记住,RAID1与RAID0不同,特别是在BTRFS阵列上不存在。

作者:,Waxhead

相关问答

添加新评论