RAIDコントローラのキャッシュ構成

  • コントローラがもっているキャッシュは『コントローラ・キャッシュ』と呼ぶ。
    • コントローラ・キャッシュをライト・キャッシュとして使用する場合、電源断でキャッシュ内容が消失しないよう、バッテリを内蔵する。
    • バッテリが無い場合、バッテリの充電が十分でない場合はライト・キャッシュを使用しないライト・スルーに自動で切り替わる。
    • バッテリ動作の期間内にコントローラ・キャッシュの内容を保持するだけでなく、不揮発のフラッシュ・メモリに書き込むものもある。
    • リード・キャッシュは効果が少ないため、HPのコントローラではリード・キャッシュ25%、ライト・キャッシュ75%の比率がデフォルト。
    • コントローラ・キャッシュはRAIDパリティ計算などコントローラの作業用メモリとしても使われる。
  • HDD自体が持っているキャッシュ(バッファ)は『ディスク・キャッシュ』と呼ぶ。
    • サーバ向けのHDDではディスク・キャッシュは通常無効化されている。コントローラ・キャッシュとことなりディスク・キャッシュは電源断から保護する方法が無いため。使用する場合はUPSなどサーバ自体の電源冗長化が大前提となる。
    • RAIDのリビルドの場合だけこのディスク・キャッシュを有効化させる機種・機能がある。
  • コントローラのチューニングポイントは下記3点。
    1. Read Policy:読み取り処理を行う際に、次に読み込みの対象になると予想されるブロックをあわせて先読みするかどうか。『No read ahead』(先読みしない、ランダム・リード主体の場合に使用)、『Read ahead』(常に先読みする、シーケンシャル・リード主体の場合に使用)、『Adaptive』(ワークロードからシーケンシャル・リードと想定されれば先読みする、アクセスパターンが混合または不明の場合に使用)がある。
    2. Write Policy:コントローラのライト・キャッシュを使用するかどうか。使用しない書き込みを『ライト・スルー』と呼び、ディスク書き込みを完了してから完了通知を返す。使用する書き込みを『ライト・バック』と呼び、ライト・キャッシュに書き込みを完了した時点で完了通知を返す。通常はライト・バックが速いが、RAID0およびRAID1+0のシーケンシャル・ライトについてはライト・スルーが速い。
    3. I/O Policy:読み取り処理を行った後に、読み取ったデータをリード・キャッシュに格納するかどうか。『Direct I/O』は格納しない。書き込みはライト・バックならそのままキャッシュに残る。Read aheadで読み込んだブロックはリード・キャッシュに残る。『Cached I/O』は読み取り・書き込みの両方でキャッシュに残す。OSがキャッシュするため同じブロックへ読み取りが再度発生する可能性は低い。よって『Direct I/O』が通常は推奨される。


ライト・キャッシュを使っても滞留するのは同じでは・・・

ライト・キャッシュを使い、ライト・バック動作を行っても、書き込みが途切れずに続けば、『キャッシュに入ってくる量 > キャッシュから破棄できる量(書き込んだ量)』が続くこととなり、キャッシュに書けずに待ちになる。しかし、たとえ途切れなく書き込みする場合でも、ライト・キャッシュを使うことで、ライト・キャッシュを使わないときよりディスクへの書き込みのスループットが向上することが期待できる。

HP SmartアレイコントローラーおよびRAIDの基本的なパフォーマンスファクター より

  • ワークロードが高い環境では、通常、ライトキャッシュの容量に空きがない状態が続きます。
  • コントローラーはその 間にキャッシュ内に保留中の書き込みコマンドを分析し、それらを実行するより効率的な方法を決定します。
    • コントローラーは、サイズの小さい書き込みを隣接する論理ブロックと組み合わせてサイズの大きい1つの書き込みとし、より迅速に実行できるようにします。この技法は、ライトコアレッセンス(書き込み調停)と呼ばれます。
    • また、コントローラーは、全体としてのディスク遅延が短縮されるような方法で、キャッシュ内の書き込み順序を再調整すること もできます。この技法はしばしば、コマンドリオーダリングと呼ばれます。
    • ライトキャッシュメモリ量が多いほど、 Smartアレイコントローラーはより多くの保留中の書き込みコマンドを格納し分析できるため、全体のパフォーマンスを改善しながら、ライトコアレッセンスとコマンドリオーダーの実行回数を増やすことができます。
  • Smartアレイコントローラーは、フルストライプ書き込みとして知られる技法も活用しています。
    • コントローラーが、ライトコアレッセンスの結果、データのフルストライプが変更されていることを判別すると、RAID 5およびRAID 6操作では、現在のデータとパリティ情報を取得するための追加の読み取り操作をそれ以上実行する必要はありません。 必要な情報はすべて、すでにコントローラーのキャッシュに収められています。新しいパリティ値を計算し、その後、パリティストリップを含む新しいストライプを書き込むだけです。
    • アレイに対してより大きなストリップサイズを使用すると、コントローラーが累積するフルストライプ書き込みの回数が減少するため、ある程度、書き込み性能にマイナスの影響がもたらされることがあります。これは、サイズの大きいストリップは、本質的にサイズの大きいストライプとなるため、ライトコアレッセンスがデータのフルストライプをコントローラーキャッシュに蓄積する可能性が低くなるからです。ストリップサイズが大きいほど読み取り性能は改善される傾向があります。

パフォーマンスレポート PRIMERGY 用モジュラー RAID に示されているデータでは、ライト・バックを有効にしていないRAID1とRAID5のシーケンシャル・ライトは(特にRAID5で)劇的にパフォーマンスが落ちてしまっている。これはシーケンシャル・ライトが上記の『フルストライプ書き込み』に該当しやすいためだろう。