我在用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这是4倍希捷企业10TB 7200 are。当将大文件从RAID阵列复制到内部系统磁盘(也就是SSD)时,平均吞吐量为220 to /S。从SSD复制大文件到数组是使用145 to /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所以再同步速度也很好。现在,有一些奇怪的行为。在执行check时,我可以并行地将数据写入数组,并具有良好的性能。写入速度为100 is /S,可以看到RAID同步速度下降。完成复制到数组后,同步速度再次提高到以前的速度。问题是在运行check时从数组中读取。读数是在<20 are /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
idleResync过程被设置为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这个数组没有问题。在运行过程中,我可以以良好的速度写入和读取数组。在观看/proc/mdstat时,同步速度会降低I/O活动,并在完成后增加。但不适合在md0/RAID6上阅读I/O。至于md0的正常同步速度是很好的,正常读写没有重新同步是好的,甚至写入数组运行RAID检查是很好的,为什么读取坏当每月检查运行?
发布于 2017-11-08 21:00:05
让我首先说,我对mdadm或Debian没有真正的想法-不过,我认为您所看到的效果是非常普遍的。
当您查看RAID 6的工作原理时,通常要比读取速度慢一些:有了读,所有四个磁盘都可以同时读取。奇偶校验数据被跳过,相反,下一个数据段可以提前读取到缓存。可以达到的最佳读取速度是单个磁盘速度的n倍。
在写入时,数据由两个需要写入磁盘的不同奇偶校验段进行扩展。当所有磁盘同时写入时,要达到的最佳速度是单个速度的n-2倍。
一个RAID 6重新同步或重建很少,大磁盘将需要很长时间。本质上,必须读取每个条带,并将其与存储在磁盘上的冗余数据进行比较。磁盘负载很重,任何有效的I/O都必须与所有读操作竞争。这就是阅读速度慢的原因。要有良好的读取延迟,背景同步需要以低优先级运行,即当其他I/O被感知时,它需要停止并暂停片刻。
另一方面,只要有可用的缓存,写就会先进入缓存,并且看起来马上就完成了。真正的写作会在某个时候发生在背景中。只有当您的写入量超过缓存容量时,您才会注意到严重的减速。
要想在重新同步过程中使读取速度达到一个很好的水平,首先需要缓慢地运行背景检查,或者想出一种在完成高效读取时使其暂停的方法。
https://serverfault.com/questions/882009
复制相似问题