鉴于RAID1写入数据的两个副本,我的理解是读取应该接近单个磁盘的两倍。
我已经testing了不同技术(mdadm,zfs,btrfs)的读取性能,但成效不大。
从我的经验:
我已经使用dd,iotop和iostatvalidation了结果。
如何同时读取两个磁盘上的数据,以获得两倍的磁盘读取性能?
这个问题是有限的信息如何testing在哪里做的,所以我假设你只是使用dd直接写入文件。
BTRFS:
在BTRFS术语中,RAID1表示两个副本,无论池中有多less个磁盘。 所以为了简单起见,我们假设数据和元数据都存储在两个磁盘上的RAID1中。 因此,每个磁盘是另一个磁盘的内容的副本(在BTRFS中磁盘布局可能不完全相同)。
当BTRFS执行读取操作(最后一次检查)时,依赖进程的PID来确定首先要读取哪些磁盘。 这意味着如果你运行一个进程,它将只能从其中一个磁盘读取,除非出现错误,并且需要从另一个磁盘检索好的副本。
下一次运行该进程时,可能会有不同的PID,BTRFS将首先从另一个磁盘读取数据。
MD: (MDADM)
对于顺序读取,如果有任何事情,则不会获得太多,因为两个设备上的数据是相同的,因此在开始读取之前,两个磁盘都需要跳过(查找)相同数量的数据。 例如,在读取下一个10字节之前,磁盘A需要等待(跳过)前10个字节,即使磁盘B可以同时读取前10个字节,磁盘A正在跳过它仍然需要等到磁盘A有完成了能够把它应该在内存中读取的20个字节放在一起。
从MD手册页(man md):
“请注意,由驱动程序完成的读取平衡不会使RAID1性能configuration文件与RAID0相同;单个顺序inputstream将不会加速(例如,单个dd),但多个顺序stream或随机工作负载将会使用多个主轴,理论上说,使用N-disk RAID1将允许N个顺序线程从所有磁盘读取。
ZFS:
我没有ZFS的知识,但我期望它的工作原理与BTRFS / MDADM大致相同。
结论:
对于单个顺序读取操作(例如,您可能使用dd),通过在BTRFS和/或MDADM上进行RAID1设置,可以获得更好的性能。
如果您希望在BTRFS和MDADM上看到改进的读取速度(确实存在),则需要在arrays上并行执行多个不同的读取操作。 BTRFS可能会根据PID在不同的磁盘上分配读取数据,MDADM应该显着减lesssearch数量。 请记住,RAID1与RAID0不同,特别是不在BTRFSarrays上。