web-dev-qa-db-ja.com

RAID1-IOPS書き込みペナルティ1または2

RAID 1(およびRAID 10)のRAID IOPS書き込みペナルティを2として説明している記事を見続けています。もちろん、すべての書き込みは単にディスクに書き込まれるため、RAID0には1のペナルティがあります。 RAID 1は「2回の書き込みが必要」と説明されているため、ペナルティは2です。

しかし、データは同時に書き込まれるので、1にするべきではありませんか?

ディスクを使用するアプリケーションまたはサーバーの観点からは、RAID 1アレイは、両方のディスクに同時に書き込む単一のユニットとして表示される必要があります。 1つのディスクが他のディスクより遅れる場合がありますが、実際のハードウェアRAIDコントローラーは、同時に書き込みを開始し、低速のディスクが完了したときに書き込み操作が完了したと報告できる必要があります。これは、RAIDよりもわずかに高いだけです。 -あるとしても、0。したがって、IOPSペナルティはRAID 1の場合は1、最大で1.2にする必要があります。

2つの書き込み操作があることを理解しているので、2つの「IOPS」がありますが、それらは内部でRAIDコントローラーにあります。

ここで何かが足りませんか?

2
nepdev

RAID 1がケーブルをホットワイヤリングしただけの場合、パフォーマンスへの影響はゼロ(1.0倍)になりますが、RAID 1ミラーリングはケーブルをホットワイヤリングするだけではありません実際の作業データを書き込むには2つのドライブを使用して、各ドライブからの書き込みの結果を処理します。

その余分な作業は、パフォーマンスへの影響で彼らが話している要因です。 I/O操作がOSのどこか(ソフトウェアRAID)で発生するか、専用のコプロセッサー/コントローラー(ハードウェアRAID)で発生するかにかかわらず、データごとに2つの書き込みを発行する必要があり、その書き込みの結果(成功、失敗、またはon_fire)は「処理」する必要があります。


最悪の場合(OSに実装されたソフトウェアRAID-1)は、カーネルが2回の書き込みを実行し、ディスクコントローラーと2回の会話を行っていることを意味します。
スタック全体でほぼ2倍の作業を行っているため、これは2倍の書き込みペナルティです。
(実際にはおそらく1.9に近いです-結局のところ、ファイルシステムに対して2つのwrite()呼び出しを発行していません-しかし、悲観論のためにそれを丸めましょう。)

最良の場合(専用コントローラーで実装されたハードウェアRAID 1)、カーネルはコントローラーと1回の会話を行いますが、両方のドライブがコマンドを確実に受信する必要があるため、コントローラーは2回の会話(各ディスクで1回)を行います。データを書き出し、データが書き込まれたことを確認します(またはドライブが報告するエラー状態を処理します)。
これは、質問で推測したように、コントローラーの余分な作業に対しておそらく約1.2倍のペナルティです。余分なカーネル内の作業を節約しているだけです(これは、コントローラーが実行している作業よりもはるかに高価です)。

今、私たちはシステム管理者であり、悲観的なロットであるために支払われているので、ソフトウェアRAIDのパフォーマンス係数を丸めたときと同じように、明らかに最悪の場合のパフォーマンスを取ります-誰かが尋ねたら、私たちは言うつもりです彼らの豪華なハードウェアコントローラーであっても、2倍の書き込みペナルティがあり、システムが平均1.5倍のペナルティで実行されたときに彼らを幸せにします:-)

5
voretaq7

実際のハードウェアRAIDコントローラーは、書き込みを同時に開始し、低速のディスクが完了したときに書き込み操作が完了したことを報告できる必要があります。これは、RAID-0の場合よりもわずかに高いだけです。

ただし、各書き込みの合計パフォーマンスは半分になります。あなたの例では、RAID 0の各ディスクは、RAIDコントローラーに送信されたものの半分を書き込むだけで済みます。 RAID 1では、各ディスクがすべてを書き込む必要があります。

これにより、RAID 0は書き込み用のRAID1の2倍の速度(2ディスクRAIDグループ上)になりますが、理論上の読み取り速度は同じです。

2
Shane Madden