2011年11月29日火曜日

ストライピングはなぜ速いのか

このエントリーをはてなブックマークに追加
普通のRAIDでもRAID-Zでも複数のディスクにデータがストライピングされます。ディスクの本数を増やせばシーケンシャルリードは速くなると一般に言われていますし、実際そうです。ランダムリードとはいえ、ストライピングされているのにRAID-Zが遅いことに納得できない人が多いようです。何の説明が足りないか考えていて、ハードディスクの遅延を忘れていたことに気が付きました。僕もそれを忘れていたため誤った説明をしていました。

ハードディスクでは、リクエストを受けてから読み込むまでにシークと回転待ちの遅延が発生します。こちらのレビューを見るとDeskstar 7K2000の遅延は12.0msです。転送速度は平均102.6MB/sとあります。RAIDの一般的なストライプサイズの64kBを読むのに掛かる時間は0.62msです。遅延と比べると極めて小さいです。ストライピングして複数のハードディスクを同時に読んでも、12.0msの遅延があるので速くなりません。

ストライピングでシーケンシャルリードが速くなるのは、リクエストのキューイングで各ディスクに発行されるリクエストの転送長を大きくできる場合です。これなら遅延をカバーできます。「RAID-Zは遅いよ」の補足で最初は「シーケンシャルリードなら、この図の場合はRAID-5の方が遅い」と書いてあったのは誤りです。この場合もRAID-5は速くなります。RAID-Zの場合は1ブロックがすべてのディスクに分散しますが、これによってシーケンシャルリードが速くなることはありません。シーケンシャルリードが速くなるのは、やはりキューイングで各ディスクに発行されるリクエストの転送長を大きくできる場合です。

ランダムリードの場合には転送長を大きくするのが難しく遅延が支配的になります。RAID 5ならデータを読むのに必要な数のディスクにリクエストを発行すれば処理できます。ブロックサイズとストライピングサイズが等しければ1つですみます。他のディスクの遅延を待つ必要がなく、複数のリクエストを同時に処理できます。それに対して、RAID-Zではすべてのディスクにリクエストを発行する必要があり遅延を待たなければなりません。それでRAID-Zは遅くなります。

[2011/11/30 修正]  RAID 5とRAID-Zの違いが明確になるように、RAID 5ではランダムアクセスで複数のリクエストを同時に処理できることを追記しました。

0 件のコメント:

コメントを投稿