RAID1 は Linux mdadm のパフォーマンスを向上させますか?

RAID1 は Linux mdadm のパフォーマンスを向上させますか?

2TB HDD を搭載した安価な 2 ベイ NAS を持っています。ディスク障害に強いように、2 台目の 2TB HDD を購入し、Linux mdadm を使用して RAID1 に組み込むことを考えています。ファイル システムは ext4 です。

これにより、NAS のパフォーマンスは向上しますか、それとも低下しますか? 読み取りまたは書き込みのパフォーマンスはどうなりますか?

これについてはネット上で多くの意見があるようですが、合意は得られていません。

ありがとう。

編集:

つまり、すでに 3 つの異なる答えが得られています。「かなり速くなります」、「気付かないでしょう」、「どちらかといえばパフォーマンスが低下します」。(私が主に関心があるのは読み取りパフォーマンスです。) Wikipedia には、「読み取りパフォーマンスは、コピー数のほぼ線形倍数として向上する可能性があります」と書かれています。どれでしょうか?

編集2:

MD のマニュアルページを含め、RAID1 によって読み取りパフォーマンスが向上することを裏付ける証拠が次々と見つかりました。

変更はすべてのデバイスに並行して書き込まれます。データはいずれかのデバイスから読み取られます。ドライバーは、パフォーマンスを最大化するために、すべてのデバイスに読み取り要求を分散しようとします。

また、RAID1 の冗長性と RAID0 の読み取りパフォーマンスを提供し、2 つのドライブだけで使用できる MD の RAID10 も発見しました--layout=f2。ただし、シーケンシャル書き込みでは、両方のドライブがドライブの離れた部分の間を前後にシークする必要があるため、書き込みパフォーマンスは低下しますman md。詳細については、を参照してください。

答え1

はい、Linux の RAID1 実装では、2 つの別々のディスク読み取り操作が同時に実行される限り、ディスク読み取り操作が 2 倍高速化されます。つまり、1 つの 10 GB ファイルの読み取りは RAID1 では単一のディスクよりも高速になりませんが、2 つの異なる 10 GB ファイル*の読み取りは高速になります。

それを証明するには、 を使用していくつかのデータを読み取りますdd。何かを実行する前に、 を使用してディスク読み取りキャッシュをクリアしますsync && echo 3 > /proc/sys/vm/drop_caches。そうしないと、hdparm読み取りが非常に高速になります。

単一ファイル:

# COUNT=1000; dd if=/dev/md127 of=/dev/null bs=10M count=$COUNT &
(...)
10485760000 bytes (10 GB) copied, 65,9659 s, 159 MB/s

2 つのファイル:

# COUNT=1000; dd if=/dev/md127 of=/dev/null bs=10M count=$COUNT &; dd if=/dev/md127 of=/dev/null bs=10M count=$COUNT skip=$COUNT &
(...)
10485760000 bytes (10 GB) copied, 64,9794 s, 161 MB/s
10485760000 bytes (10 GB) copied, 68,6484 s, 153 MB/s

10GBのデータの読み取りには65秒かかりましたが、10GB + 10GB = 20GBのデータの読み取りには合計68.7秒かかりました。複数のディスクの読み取りはRAID1の恩恵を受けるLinux では、skip=$COUNTこの部分が非常に重要です。2 番目のプロセスは、10 GB のオフセットから 10 GB のデータを読み取ります。

Jaredの回答とsshのコメントはhttp://www.unicom.com/node/459は間違いです。そこからのベンチマークは、ディスク読み取りが RAID1 の恩恵を受けないことを証明しています。しかし、このテストは bonnie++ ベンチマークツールで実行されており、このツールは一度に 2 つの読み取りを実行しません。著者は、bonnie++ は RAID アレイのベンチマークには使用できないと明確に述べています (READMEを参照してください)。

答え2

はい、読み取りパフォーマンスが向上し、冗長性も得られます。ファイルは両方の HDD にあるため、2 つの異なる HDD から同時にファイルの一部を読み取ることができるので、簡単に想像できます。

したがって、理論的には、RAID コントローラが正しく機能すれば、O(n) の高速化を実現できます。

答え3

いいえ、mdadm RAID1 から読み取るときには何の利点もありません。私はしばらく前にこれについて自問していました。

dstatディスクの使用状況を表示しますbwm-ng。これは、個別の mdadm RAID メンバーの読み取り/書き込みの使用状況を表示できるため、特にこの場合に役立ちます。n(次へ) を数回押すと、インターフェイス統計からディスク統計に切り替わります。次に、最大値に切り替えて、t各ディスクの最大読み取り/書き込みを確認します。次のようになります。

RAID1 ボリューム bwm-ng への書き込みを実行すると、2 回の書き込み、つまり 2 つのディスクへの同時書き込みが表示されます。RAID1 ボリューム bwm-ng からの読み取りを実行すると、単一のドライブ (アレイ メンバー) からの読み取りが表示されます。

答え4

はい同時に NO でもあります。デフォルトでは、RAID 1 の「先読み」パラメータは低すぎるため、単一のファイル転送でメリットが実感できませんが、調整するだけで済みます。

値を確認するには、次のように入力します:

# blockdev --getra /dev/md0
256

これで、RAID デバイスごとに先読み (512 バイト セクター単位) を設定できます。構文は次のとおりです。

## Set read-ahead to 32 MiB ##
# blockdev --setra 65536 /dev/md0

ほとんどの場合、このパラメータを設定するだけで、単一ファイルの読み取り速度が 2 倍になります (両方のドライブが同じであると仮定)。

注: これはすべての RAID 構成に適用されます。

関連情報