rab*_*dde 6 performance debian io mdadm 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
Run Code Online (Sandbox Code Playgroud)
并设置了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
Run Code Online (Sandbox Code Playgroud)
这是 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
Run Code Online (Sandbox Code Playgroud)
所以重新同步速度也很棒。现在,有一些奇怪的行为。在执行检查时,我可以以良好的性能将数据并行写入数组。写入速度约为 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
Run Code Online (Sandbox Code Playgroud)
重新同步过程设置idle为正确。I/O 调度程序设置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
Run Code Online (Sandbox Code Playgroud)
这个数组没有问题。我可以在检查运行时以良好的速度写入和读取数组。看/proc/mdstat,同步速度随着 I/O 活动而降低,并在再次完成后增加。但不适用于md0/RAID6上的读取 I/O 。至于md0正常同步速度很好,没有resync的正常读写都很好,甚至在运行RAID检查时写入阵列也很好,为什么每月检查运行时读取如此糟糕?
首先我要说的是,我对 mdadm 或 Debian 没有真正的了解 - 但我认为您看到的效果是非常普遍的。
当您了解 RAID 6 的工作原理时,写入速度通常比读取速度慢是可以预料的:通过读取,可以同时读取所有四个磁盘。奇偶校验数据被跳过,而是可以提前读取下一个数据段以进行缓存。可以达到的最佳读取速度是单盘速度的n倍。
写入时,数据会通过两个不同的奇偶校验段进行扩充,这两个奇偶校验段也需要写入磁盘。当所有磁盘同时写入时,能达到的最佳速度是单个速度的n -2 倍。
使用少量大磁盘重新同步或重建 RAID 6 将需要很长时间。本质上,必须读取每个条带并将其与也存储在磁盘上的冗余数据进行比较。磁盘负载很重,任何高效的 I/O 都必须与所有读取竞争。这就是读取速度慢的原因。为了获得适当的读取延迟,后台同步需要以低优先级运行,即当感测到其他 I/O 时,它需要停止并暂停一会儿。
另一方面,写入会首先写入缓存,并且只要有可用的缓存,就会立即完成。真正的写入将在某个时间在后台发生。只有当您的写入量超过缓存容量时,您才会注意到速度严重下降。
为了在重新同步期间使读取速度达到合适的水平,您需要让后台检查以较慢的速度开始运行,或者找到一种方法在完成高效读取时使其暂停。
| 归档时间: |
|
| 查看次数: |
637 次 |
| 最近记录: |