我家用的服务器中有 5 个 1Tb WD Green HDD,采用 mdadm RAID-6。读取速度绰绰有余 - dd 中为 268 Mb/s。但写入速度只有 37.1 Mb/s。(两者都通过 dd 在 48Gb 文件上进行测试,RAM 大小为 1Gb,测试中使用的块大小为 8kb)
您能否建议一下为什么写入速度如此之慢,有什么方法可以提高它?写入期间的 CPU 使用率仅为 25%(即 Opteron 165 1 个核心的一半)那里没有关键业务数据并且服务器由 UPS 支持。
mdstat 是:
Personalities : [raid6] [raid5] [raid4]
md0 : active raid6 sda1[0] sdd1[4] sde1[3] sdf1[2] sdb1[1]
2929683456 blocks super 1.2 level 6, 1024k chunk, algorithm 2 [5/5] [UUUUU]
bitmap: 0/8 pages [0KB], 65536KB chunk
unused devices: <none>
有什么建议么?
诸如 writeback、barrier、nobh 之类的东西没有帮助。DD blocksize=1M, 8M 没有改变任何东西。看起来 mdadm 会物理读取扇区来计算奇偶校验,即使这并不重要……这是正确的吗?
更新:改变条带缓存后速度下降实际上是因为 1 个硬盘可能在测试期间发生故障,很好 :-D
解决:增加条带缓存并切换到外部位图后,我的写入速度为 160 Mb/s,读取速度为 260 Mb/s。:-D
答案1
您是否尝试过调整 /sys/block/mdX/md/stripe_cache_size?
根据此论坛帖子(抱歉,是挪威语)“磁盘越多,系统越快,调整此参数就越重要”:
在我的系统上,使用值 8192 可获得最佳性能。如果我使用默认值 256,写入性能将下降 66%。
引用他的速度来进行比较:
磁盘:8xSeagate 2TB LP(5900RPM),mdadm RAID6(-n 512)(stripe_size_cache=8192)。
CPU:英特尔 X3430(4x2.4GHz、8GB DDR3 ECC RAM)
速度:连续写入 387 MB/s,连续读取 704 MB/s,每秒 669 次随机寻道。
我的家庭服务器拥有与您的几乎相同的磁盘,使用 RAID 5:
磁盘:4x1.5TB WD Green,RAID 5(stripe_size_cache=256 - 默认值)
CPU:Intel i7 920(2.66 GHz,6 GB RAM)
速度:60 MB/s 顺序写入,138 MB/s 顺序读取(根据 Bonnie++)
因此看起来顺序写入性能大约是读取性能的 50%。
对于预期的表现,Linux 突袭 Wiki关于 RAID 5 的说法:
读取几乎类似于 RAID-0 读取,写入可能相当昂贵(需要在写入之前读入,以便能够计算正确的奇偶校验信息,例如在数据库操作中),或者类似于 RAID-1 写入(当执行较大的连续写入时,可以直接从要写入的其他块计算奇偶校验)。
关于 RAID 6:
读取性能与RAID-5相似,但写入性能较差。
答案2
尝试
echo 32768 > /sys/block/md0/md/stripe_cache_size
并检查;)