web-dev-qa-db-ja.com

RAID6は、書き込みは高速ですが読み取りは低速で再同期します

私はDebianJessieを使用しています。

# 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

これは4xSeagate Enterprise 10TB7200rpmです。大きなファイルをRAIDアレイから内部システムディスク(SSD)にコピーすると、平均スループットは220MB /秒になります。 SSDからアレイへの大きなファイルのコピーは145MB /秒で行われます。毎月の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 /秒で、RAID同期速度が低下していることがわかります。アレイへのコピーが完了した後、同期速度は以前の速度に再び増加しました。問題は、チェックの実行中に配列から読み取りです。読み取りは<20MB /秒で行われます。また、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

再同期プロセスは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チェックの実行中のアレイへの書き込みも非常に良好です毎月のチェックの実行中に読み取りが非常に悪いのはなぜですか

6
rabudde

まず、mdadmやDebianについてはよくわからないということから始めましょう。ただし、表示されている効果は非常に一般的なものだと思います。

RAID 6がどのように機能するかを見ると、通常は読み取り速度よりも書き込み速度が遅いことが予想されます。読み取りを使用すると、4つのディスクすべてを同時に読み取ることができます。パリティデータはスキップされ、代わりに次のデータセグメントを先に読み取ってキャッシュすることができます。達成できる最高の読み取り速度はn単一ディスクの速度の倍です。

書き込み時に、データはディスクへの書き込みも必要な2つの異なるパリティセグメントによって拡張されます。すべてのディスクが同時に書き込む場合、達成される最高の速度はn-単一速度の2倍です。

RAID 6の再同期または再構築は、少数の大きなディスクで時間がかかります。基本的に、各ストライプを読み取り、ディスクに保存されている冗長データと比較する必要があります。ディスクは高負荷であり、生産的なI/Oはすべての読み取りと競合する必要があります。これが読み取りが遅い理由です。適切な読み取りレイテンシを実現するには、バックグラウンド同期を低い優先度で実行する必要があります。つまり、他のI/Oが検出されたときに一時停止して一時停止する必要があります。

一方、書き込みは最初にキャッシュに移動し、使用可能なキャッシュがある限り、すぐに終了するように見えます。実際の書き込みは、いつかバックグラウンドで発生します。書き込み量がキャッシュ容量を超えた場合にのみ、深刻な速度低下に気付くでしょう。

再同期中に読み取り速度を適切なレベルにするには、最初にバックグラウンドチェックを遅いペースで実行するか、生産的な読み取りが完了したときに一時停止する方法を見つける必要があります。

1
Zac67