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 構成に適用されます。