RAID6 重新同步,写入速度快但读取速度慢

RAID6 重新同步,写入速度快但读取速度慢

我正在使用 Debian Jessie。

# uname -a
Linux host 4.9.0-0.bpo.3-amd64 #1 SMP Debian 4.9.30-2+deb9u5~bpo8+1 (2017-09-28) x86_64 GNU/Linux

并设置了RAID6。

# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [raid1]
md0 : active raid6 sda[0] sdd[3] sdc[2] sdb[1]
      19532611584 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU]
      bitmap: 1/73 pages [4KB], 65536KB chunk

这是 4x Seagate Enterprise 10TB 7200rpm。将大型文件从 RAID 阵列复制到内部系统磁盘(即 SSD)时,我获得的平均吞吐量为 220MB/s。将大型文件从 SSD 复制到阵列的速度为 145MB/s。当每月 RAID 检查完成后(由 cron 作业执行启动,checkarray --cron --all --idle --quiet这是默认行为),我可以看到

# cat /proc/mdstat                                                                                                                                                 Personalities : [raid6] [raid5] [raid4] [raid1]
md0 : active raid6 sda[0] sdd[3] sdc[2] sdb[1]
      19532611584 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU]
      [>....................]  check =  0.7% (72485728/9766305792) finish=817.2min speed=197694K/sec
      bitmap: 1/73 pages [4KB], 65536KB chunk

因此重新同步速度也很棒。现在,出现了一些奇怪的行为。在执行检查时,我可以并行将数据写入阵列,性能良好。写入速度约为 100MB/s,可以看到 RAID 同步速度降低。复制到阵列后,同步速度再次提高到之前的速度。问题是检查运行时从阵列读取数据。读取速度低于 20MB/s。RAID 的重新同步速度没有降低。我不知道这是什么原因。

# ps aux | grep md0
root       211  0.4  0.0      0     0 ?        S    Okt22  93:40 [md0_raid6]
root       648  0.0  0.0      0     0 ?        S    Okt22   0:01 [jbd2/md0-8]
root     15361  4.4  0.0      0     0 ?        DN   02:25   0:00 [md6_resync]
root     15401  0.0  0.0  12752  2040 pts/2    S+   02:26   0:00 grep md6
# ionice -p 211
none: prio 0
# ionice -p 15361
idle

重新同步过程设置为正确的值。I/O 调度程序针对所有底层物理磁盘idle设置为。CFQ

此系统中也有一个 RAID1

# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [raid1]
md1 : active raid1 sde[0] sdf[1]
      3906887488 blocks super 1.2 [2/2] [UU]
      bitmap: 2/30 pages [8KB], 65536KB chunk

这个阵列没有问题。检查运行时,我可以以良好的速度写入和读取阵列。观察发现/proc/mdstat,同步速度在 I/O 活动时降低,并在再次完成后增加。但对于md0/RAID6 上的读取 I/O 则不是。至于md0正常同步速度非常好,没有重新同步的正常读取和写入都很好,甚至在运行 RAID 检查时写入阵列也非常好,为什么每月检查时读数这么差

答案1

首先我要说的是,我对 mdadm 或 Debian 没有什么了解 - 但我认为您看到的效果非常普遍。

了解 RAID 6 的工作原理后,可以预料到写入速度通常比读取速度慢:读取时,可以同时读取所有四个磁盘。跳过奇偶校验数据,而是提前读取下一个数据段以进行缓存。可以实现的最佳读取速度是n是单个磁盘速度的几倍。

在写入时,数据会通过两个不同的奇偶校验段进行增强,这些奇偶校验段也需要写入磁盘。当所有磁盘同时写入时,可实现的最佳速度是n-2倍单速。

使用少量大型磁盘进行 RAID 6 重新同步或重建将需要很长时间。本质上,必须读取每个条带并将其与磁盘上存储的冗余数据进行比较。磁盘负载很重,任何生产性 I/O 都必须与所有读取竞争。这就是读取速度慢的原因。为了获得合适的读取延迟,后台同步需要以低优先级运行,即当检测到其他 I/O 时,它需要停止并暂停片刻。

另一方面,写入操作首先进入缓存,并且似乎立即完成 - 只要有可用的缓存。真正的写入操作会在后台的某个时间发生。只有当您的写入量超过缓存容量时,您才会注意到严重的减速。

为了在重新同步期间使读取速度达到合适的水平,您需要首先使后台检查以较慢的速度运行,或者想办法让它在完成生产性读取时暂停。

相关内容