2008年創刊 · デジタル版 · 2026年6月19日

SMB IT Journal

中小企業のための情報技術リソース

日本語
ストレージ

実践的なRAIDパフォーマンス

RAIDレベルの選択は、コスト、信頼性、容量、そしてもちろんパフォーマンスなど、多くの要素のバランスを取る作業です。RAIDパフォーマンスは、特に異なるRAIDレベルが異なる技術を使用し、場合によってはかなり異なる動作をするため、理解するのが難しい場合があります。この記事では、RAID 0、5、6、10の一般的なRAIDレベルを調べ、それらの間でパフォーマンスがどのように異なるかを見ていきます。

この記事の目的では、RAID 1はRAID 10のサブセットとして仮定します。これはRAID 1の便利な考え方です――単一のミラーペアメンバーのみを持つRAID 10アレイとして考えるだけです。RAID 1は本当に単一ペアのRAID 10であり、そのように動作するため、RAID 1を単純にRAID 10のパフォーマンスカーブにマッピングするとRAIDパフォーマンスを簡単に理解できるようになります。

すべてのストレージで見るべきパフォーマンスには二つの種類があります:読み取りと書き込みです。RAIDの観点では、読み取りは非常に簡単であり、書き込みはかなり複雑です。読み取りパフォーマンスはすべてのRAIDタイプにわたって事実上安定しています。しかし書き込みはそうではありません。

パフォーマンスについての議論を容易にするために、いくつかの数式を使用するため、いくつかの用語を定義する必要があります。議論では、Nを使用してアレイ内のドライブの総数(しばしばスピンドルと呼ばれる)を表し、Xを使用して個々のドライブのパフォーマンスを表します。これにより、個々のドライブのパフォーマンスの因子としてパフォーマンスを相対的に語ることができ、RAIDアレイを抽象化して生のIOPSで考える必要がなくなります。IOPSは定義が非常に難しいことが多いですが、アレイ内の個々のドライブとの関係でパフォーマンスを語ることで、意味のある方法でパフォーマンスを比較することができます。

また、ここではRAIDアレイ自体のパフォーマンスのみを話しているのであり、ストレージサブシステム全体ではないことを覚えておくことも重要です。メモリキャッシュやソリッドステートキャッシュなどのアーティファクトは、ストレージサブシステムの全体的なパフォーマンスを変えるために驚くべきことをしますが、内部のRAIDアレイのパフォーマンスを根本的には変えません。異なるキャッシュオプションが全体的なパフォーマンスにどのような影響を与えるかを決定するための簡単な数式はありませんが、それが非常に劇的になり得ることは十分に言えますが、これはキャッシュの選択自体だけでなく、ワークロードにも大きく依存します。最大かつ最速の最も堅牢なキャッシュオプションでも、アレイの長期的な持続パフォーマンスを変えることはできません。

RAIDは複雑で、最終的なパフォーマンスに影響する多くの要因があります。一つはRAIDシステム自体の実装です。実装が貧弱だと待ち時間が生じたり、利用可能なスピンドルを活用できなかったりすることがあります(RAID 1アレイが単一ディスクのみから読み取り、両方から同時に読み取らないなど!)特定のRAID実装の欠陥を考慮する簡単な方法はないため、確かにエンタープライズRAIDシステムがそうであるように、すべてが仕様の限界まで機能していると仮定しなければなりません。これを行わないのは主にホビーおよびコンシューマー向けRAIDシステムです。

一部のRAIDタイプは、他のタイプよりも関連する大量の計算オーバーヘッドを持っています。主にパリティRAIDレベルは、各操作に対して異なる量の計算が必要な書き込み操作を処理するために大量の処理を必要とします。これは待ち時間をもたらしますが、スループットを制限しません。ただし、この待ち時間は、RAIDレベルの実装と問題のシステムの処理能力に基づいて異なります。ハードウェアRAIDは、これを処理するために汎用CPU(しばしばPowerまたはARM RISCプロセッサ)やカスタムASICのようなものを使用し、ソフトウェアRAIDはサーバー自身のCPUにこれを渡します。多くの場合、サーバーCPUは実際にはここで速いですが、システムリソースを消費します。ASICは非常に速くなりますが、製造コストが高いです。この待ち時間はストレージパフォーマンスに影響しますが、予測が非常に難しく、名目上から劇的まで変わる可能性があります。そのため、各RAIDレベルで相対的な待ち時間への影響に言及しますが、測定しようとはしません。ほとんどのRAIDパフォーマンスの計算では、この待ち時間は無視されますが、それが存在し、アレイの設定によっては、ワークロードに顕著な影響を与える可能性があることを理解することが重要です。

言及すべきことですが、ディスク自体のデータレイアウトの効率から生じる、読み取り操作への小さなパフォーマンス影響があります。パリティRAIDは、健全な読み取り操作中には役に立たないデータがディスク上に存在することを要求しますが、それを速くするためには使用できません。これは実際にはわずかに遅くなる結果となります。しかしこの影響は非常に小さく、通常は測定されないため無視できます。

もちろん、ストライプサイズなどの要因もパフォーマンスに影響しますが、それは設定可能であり、任意のRAIDレベルに固有のアーティファクトではないため、ここでは無視します。これはRAIDレベルを選択する際の要因ではなく、選択後に設定する際のみの要因です。

最後に言及したい要因は、ストレージ操作の読み取りと書き込みの比率です。一部のRAIDアレイはほぼ純粋に読み取り操作に使用され、一部はほぼ純粋に書き込み操作に使用されますが、ほとんどは両方のブレンドを使用し、おそらくは80パーセント読み取りと20パーセント書き込みのようなものです。この比率は、特定のRAIDアレイから得られるパフォーマンスを理解し、各RAIDレベルがどのように影響するかを理解する上で非常に重要です。これを読み取り/書き込みブレンドと呼びます。

ストレージパフォーマンスを主にIOPSで測定します。IOPSはInput/Output Operations Per Second(1秒あたりの入出力操作数)の略です(文字が合わないことは知っていますが、それがそうなのです)。さらに、RIOPSをRead IOPS(読み取りIOPS)、WIOPSをWrite IOPS(書き込みIOPS)、BIOPSをBlended IOPS(ブレンドIOPS)として使用し、80/20などの比率と組み合わせます。多くの人が単一のIOPS数でストレージパフォーマンスを語ります。これが行われる場合、通常は50/50のBlended IOPSを意味します。しかし、実際にはどのワークロードも50/50で実行されることはほとんどないため、その数は非常に誤解を招く可能性があります。RIOPSとWIOPSの二つの数値が必要なパフォーマンスを理解するために必要であり、これら二つを合わせると必要なIOPSブレンドを見つけることができます。たとえば、50/50のブレンドは(RIOPS * .5)+(WIOPS * .5)と同様に簡単です。より一般的な80/20のブレンドは(RIOPS * .8)+(WIOPS * .2)となります。

いくつかの基準と背景を確立したので、RAIDレベル自体に掘り下げて、それらの間でパフォーマンスがどのように異なるかを見てみましょう。

すべてのRAIDレベルで、Read IOPSの数値はNXを使用して計算されます。もちろん、上で言及した名目上のオーバーヘッド数値は考慮されていません。これは「最良ケース」の数値ですが、現実の数値は非常に近いため、この数式を使用することは非常に実用的です。スピンドルの数(N)を取り、個々のドライブのIOPSパフォーマンス(X)で掛け算します。ドライブは多くの場合、読み取りと書き込みのパフォーマンスが異なることを覚えておいてください。Read IOPSの計算にはドライブのRead IOPSレーティングまたはテスト速度を使用し、Write IOPSの計算にはWrite IOPSレートまたはテスト速度を使用してください。

RAID 0

RAID 0は、実際に心配するオーバーヘッドがなく、リソースも消費されず、読み取りと書き込みの両方が常にすべてのスピンドルの完全な恩恵を受けるため、最も理解しやすいRAIDレベルです。したがって、RAID 0の書き込みパフォーマンスの数式は非常にシンプルです:NX。RAID 0は常に最もパフォーマンスの高いRAIDレベルです。

例として、8スピンドルのRAID 0アレイを考えます。アレイ内の個々のドライブが125 IOPSを提供する場合、N = 8でX = 125なので8 * 125 = 1,000 IOPSとなります。読み取りと書き込みのIOPSが同じなので、1K RIOPS、1K WIOPS、そしてどんなブレンドでも1K IOPSという非常にシンプルな結果になります。個々のスピンドルの絶対IOPSがわからない場合、8スピンドルのRAID 0が8X Blended IOPSを提供すると言えます。

RAID 10

RAID 10は計算が二番目に簡単なRAIDレベルです。RAID 10はミラーセットのRAID 0ストライプであるため、ストライプからのオーバーヘッドを心配する必要はありませんが、各ミラーはミラーリングを作成するためにデータを二回書き込まなければなりません。これにより、同じ数のドライブを持つRAID 0アレイと比較して、書き込みパフォーマンスが半分に削減されます。書き込みパフォーマンスの数式は単純に:NX/2または.5NXです。

同じ数のスピンドルではなく同じ容量で見ると、RAID 10はRAID 0と同じ書き込みパフォーマンスを持ちますが、読み取りパフォーマンスは二倍であることに注目してください――単純に同じ容量を一致させるために二倍のスピンドルが必要なためです。

したがって、8スピンドルのRAID 10アレイではN = 8でX = 125となり、計算は(8 * 125)/2 = 500 WIOPSまたは4X WIOPSとなります。50/50のブレンドでは750 Blended IOPS(1,000 Read IOPSと500 Write IOPS)となります。

この数式はRAID 1、RAID 10、RAID 100、RAID 01に等しく適用されます。

RAID 10でのトリプルミラーリングなどのまれな選択肢は、この書き込みペナルティを変更します。トリプルミラーリングを持つRAID 10はたとえばNX/3となります。

RAID 5

RAID 5は非推奨であり、新しいアレイには決して使用すべきではありませんが、よく知られており、一般的に使用されているRAIDレベルであり、そのパフォーマンスを理解する必要があるため、ここに含めます。RAID 5は現代のパリティRAIDレベルの中で最も基本的なものです。RAID 2、3、4はもはや本番システムで見られないため、ここではそのパフォーマンスを見ません。RAID 5は今日では使用が推奨されていませんが、他の現代のパリティRAIDレベルの基盤となるため、理解することが重要です。

パリティRAIDは、ディスクへのすべての書き込みでパリティを検証および再書き込みするという、やや複雑なニーズを追加します。つまり、RAID 5アレイは、データを読み取り、パリティを読み取り、データを書き込み、最後にパリティを書き込む必要があります。実際の一つにつき四つの操作です。これにより、RAID 5に対して四倍の書き込みペナルティが発生します。したがって、RAID 5の書き込みパフォーマンスの数式はNX/4です。

したがって、個々のスピンドルの書き込みIOPSが125の8スピンドルの例では、次の計算が得られます:(8 * 125)/4または2X Write IOPSとなり250 WIOPSになります。50/50のブレンドでは625 Blended IOPSとなります。

RAID 6

RAID 6は、RAID 10に次いで、今日使用されている最も一般的で有用なRAIDレベルです。しかし、RAID 6はRAID 5をベースとしており、別のレベルのパリティを持っています。これにより、RAID 5よりもはるかに安全になります(非常に重要なことです)が、各書き込み操作でディスクがデータを読み取り、最初のパリティを読み取り、二番目のパリティを読み取り、データを書き込み、最初のパリティを書き込み、最後に二番目のパリティを書き込む必要があるため、劇的な書き込みペナルティも課されます。これは六倍の書き込みペナルティとなり、かなり劇的です。したがって、数式はNX/6です。

例を続けると(8 * 125)/6となり、約167 Write IOPSまたは1.33Xになります。50/50のブレンドの例では583.5 Blended IOPSとなります。ご覧のように、パリティの書き込みは書き込みパフォーマンスを急速に低下させ、ブレンドパフォーマンスにも顕著な低下をもたらします。

RAID 7(別名RAID 5.3またはRAID 7.3)

RAID 7は、RAID 5の既存の単一パリティとRAID 6の既存の二重パリティに基づいたトリプルパリティを持つ、やや非標準的なRAIDレベルです。RAID 7の唯一の現在の実装はZFSのRAIDZ3です。RAID 7にはRAID 5とRAID 6の両方のオーバーヘッドに加え、三番目のパリティコンポーネントの追加オーバーヘッドが含まれているため、驚くべき八倍の書き込みペナルティがあります。したがって、RAID 7の書き込みパフォーマンスを求める数式はNX/8です。

この例では、(8 * 125)/8は125 Write IOPSまたは1Xとなります。したがって、アレイに8台のドライブがあると、単独のドライブの書き込みパフォーマンスしか得られません。これは大きなオーバーヘッドです。ブレンドされた50/50 IOPSはわずか562.5となります。

複合RAID

RAID 50、60、61、16などの複合RAIDレベルまたはネストされたRAIDレベルは、上記の情報を使用し、RAIDをそのコンポーネントに分解し、上記の数式を使用してそれぞれに適用することで求めることができます。これらのレベルにはさまざまな設定があるため、単純な数式はありません。コンポーネントに分解し、数式を複数回適用する必要があります。

12台のドライブ、2セットの6台のドライブ、各ドライブが150 IOPSのRAID 60は、2つのRAID 6で行います。NはRAID 0のNXであり、Nは2(2つのRAID 6アレイ用)で、XはRAID 6それぞれの結果パフォーマンスです。各RAID 6セットは(6 * 150)/6となります。したがって、完全なアレイは2((6 * 150)/6)となります。結果は300 Write IOPSです。

上記と同じ例でRAID 61(RAID 6アレイのミラーペア)として設定された場合、RAID 6アレイごとに同じパフォーマンスになりますが、RAID 1の数式(XはRAIDアレイの結果パフォーマンス)であるNX/2に適用されます。したがって、最終数式は2((6 * 150)/6)/2となり、12台のドライブから150 Write IOPSとなります。

容量の因子としてのパフォーマンス

RAIDパフォーマンスの数式を作成する際、スピンドルの数の観点からこれらを考えます。これは非常に理にかなっています。これは、提案されたアレイや、測定が不可能な既存のアレイのパフォーマンスを決定するのに非常に役立ち、異なる提案されたオプション間の相対的なパフォーマンスを比較できます。RAIDパフォーマンスを普遍的に考える際はこれらの観点からです。

ただし、これは常に良いアプローチとは限りません。通常、RAIDはパフォーマンスやスピンドル数ではなく、容量の因子として見られます。ある人が8ドライブのRAID 6アレイ対8ドライブのRAID 10アレイを検討することは、非常にまれですが確かに可能です。シャーシの制限や他の同様の理由により、時折これが発生します。しかし通常、RAIDアレイは合計アレイ容量(たとえば使用可能容量)の観点から見られ、スピンドル数、パフォーマンス、またはその他の要素ではありません。したがって、RAIDパフォーマンスをスピンドル数の関数として見ることに切り替えるのは奇妙です。

視点を変えて容量を共通の因子として中心にすると、個々のドライブの容量とパフォーマンス(X)が比較対象間で一定であると仮定しながら、まったく異なるパフォーマンスの景色に至ります。こうすることで、たとえばRAID 0がもはや最もパフォーマンスの高いRAIDレベルでなく、読み取りパフォーマンスが一定ではなく劇的に変化することがわかります。

容量は複雑なものですが、必要な容量に達するために必要なスピンドル数にまで蒸留することができます。これにより、この議論はずっと簡単になります。したがって、最初のステップは、生の容量に必要なスピンドル数を決定することです。10TBの容量が必要で1TBのドライブを使用している場合、たとえば10スピンドルが必要です。または、3.2TBが必要で600GBのドライブを使用している場合は6スピンドルが必要です。以前とは異なり、スピンドル数をRと呼びます。以前と同様に、個々のドライブのパフォーマンスはXで表されます。(Rはここで生容量カウントを示すために使用されており、スピンドルの総数ではありません。)

RAID 0はシンプルなままで、追加ドライブがないためパフォーマンスは依然としてRXです。読み取りと書き込みのIOPSは単純にNXです。

RAID 10はRX Write IOPSですが2RX Read IOPSです。これは劇的です。安定した容量の因子としてパフォーマンスを見るとき、RAID 10がRAID 0に対して二倍の読み取りパフォーマンスを持つことが突然わかります!

RAID 5は少し複雑になります。Write IOPSは((R + 1)* X)/4と表されます。Read IOPSは((R +1)* X)と表されます。

RAID 6は、RAID 5が示すパターンに従います。RAID 6のWrite IOPSは((R + 2)* X)/6です。Read IOPSは((R + 2)* X)と表されます。

RAID 7はそのまま続きます。RAID 7 Write IOPSは((R + 3)* X)/8となります。Read IOPSは((R + 3)* X)です。

この視点は、パフォーマンスについての考え方を変え、読み取りパフォーマンスのみを見る場合、RAID 0は最速ではなく最も遅いRAIDレベルとなり、RAID 10はRとXの値がいかなる値であっても読み取りと書き込みの両方で最速となります!

20TBの使用可能容量を実現するための10台の2TBドライブの実世界例を取り、各ドライブが100 IOPSのパフォーマンスを持ち50/50のブレンドを仮定すると、結果のIOPSは:RAID 0で1,000 Blended IOPS、RAID 10で1,500 Blended IOPS(2,000 RIOPS / 1,000 WIOPS)、RAID 5で687.5 Blended IOPS(1,100 RIOPS / 275 WIOPS)、RAID 6で700 Blended IOPS(1,200 RIOPS / 200 WIOPS)、最後にRAID 7で731.25 Blended IOPS(1,300 RIOPS / 162.5 WIOPS)となります。RAID 10は劇的な勝者です。

ソフトウェアRAIDの待ち時間とシステムへの影響

先に述べたように、RAID 0とRAID 10には、実質的に考慮すべきシステムオーバーヘッドはありません。ミラーリング操作は本質的に計算努力を必要とせず、すべての意図と目的のために、測定不可能なほど小さいです。パリティRAIDには計算オーバーヘッドがあり、これはストレージ層での待ち時間とシステムリソースの消費をもたらします。もちろん、ハードウェアRAIDを使用している場合、それらのリソースはRAIDアレイ専用であり、この役割で消費される以外の機能はありません。しかしソフトウェアRAIDを使用している場合、これらはRAIDアレイ処理のために消費される汎用システムリソース(主にCPU)です。

多量のRAIDを持つ非常に小さなシステムへの影響でも、まだ非常に小さいですが、測定でき、軽くでも考慮すべきです。待ち時間とシステムへの影響は互いに直接関連しています。

異なるRAIDレベルの待ち時間とシステムへの影響を単純に述べる方法はありません。ただし次のように言えます:RAID 0とRAID 10には実質的に待ち時間やインパクトがなく、RAID 5には若干の待ち時間とインパクトがあり、RAID 6はRAID 5の約2倍の計算的待ち時間とインパクトがあり、RAID 7はRAID 5の約3倍の計算的待ち時間とインパクトがあります。

多くの場合、この待ち時間とシステムへの影響は非常に小さく、標準的なシステムツールでは測定できず、現代のプロセッサがますます強力になるにつれて、待ち時間とシステムへの影響は減少し続けます。影響は、低コストのコモディティハードウェアでも約2001年以降、RAID 5とRAID 6システムで無視できると見なされてきました。しかし、大量のパリティRAIDアクティビティを持つ高負荷システムでは、RAIDサブシステムとシステムリソースを必要とする他のプロセスとの間で競合が生じる可能性があります。

参考文献:The IT Hollow – Understanding the RAID Penalty

Article originally posted to the StorageCraft Blog – RAID Performance.

タグperformance raid

広告

SMB IT Journal — the IT resource for small business