(58)【調査した分野】(Int.Cl.,DB名)
前記デステージストリームが前記第1のデータコンテナを含み、複数のデータコンテナの満杯の各データコンテナが隣接する論理ブロックアドレスを有する場合、前記ストレージコントローラが複数の満杯のデータコンテナを連結して前記第1のデータコンテナを作成する、請求項2に記載の方法。
前記ストレージコントローラが前記ストレージコントローラの前記ライトキャッシュから前記ストレージデバイスに前記キャッシュ要素を伝送すべきであることを決定することが、
前記ストレージコントローラが前記ライトキャッシュから前記ストレージデバイスへのデステージ・ストリーム・オブジェクトのデステージングを終了し、前記アクティブ・デステージ・カウントをデクリメントすることであって、デステージ・ストリーム・オブジェクトは満杯のデータコンテナである、前記アクティブ・デステージ・カウントをデクリメントすること、
前記ストレージコントローラがホスト書込み要求を完了することであって、前記ストレージコントローラが前記ホスト書込み要求に対応する前記データを前記ストレージデバイスに書き込むことを含む、前記ホスト書込み要求を完了すること、
前記ストレージコントローラがホスト入出力要求タイムアウト時間超にわたり、ホスト入出力要求が受け取られていることを確認すること
のうちの1つを含み、
終了すること、完了すること、及び確認することのうちの1つを完了した後、
前記アクティブ・デステージ・カウントが前記アクティブ・デステージ・カウントの最大値を下回る場合にのみ、前記ストレージコントローラが、決定し、計算し、識別し、伝送し、及びインクリメントする、請求項6に記載のストレージコントローラ。
【発明を実施するための形態】
【0013】
本発明者らは、ホストコンピュータからストレージコントローラへの特定の入出力作業負荷において様々な性能上の問題を観察してきた。具体的には、大きい逐次書込みストリームが関与する場合、ストレージコントローラのライトキャッシュを効率的に管理することは困難であり得る。
【0014】
パリティRAIDの書込み操作は、新たな書込みデータをライトキャッシュに記憶すること、古い書込みデータ及びパリティをストレージデバイスから読み取ること、新たなパリティを作成すること、並びに新たな書込みデータ及び新たなパリティをストレージデバイスに書き込むことを含む。パリティRAIDの書込み操作は、部分ストライプの書込みよりもフルストライプの書込みで処理する方がはるかに効率的である。部分ストライプの書込みは、フルストライプ内の全てよりも少ないデータを含む。本発明では、大きい逐次書込みストリームについて、部分ストライプに優先してフルストライプをデステージすることによって性能を改善する。
【0015】
次に
図1aを参照し、本発明の実施形態による、第1の非ホストベースのデータストレージシステム100の構成要素を示すブロック図が示されている。
データストレージシステム100は、1台又は複数台のホストコンピュータ104を含む。ホストコンピュータ104は概してサーバだが、デスクトップやモバイルコンピュータでも良い。ホストコンピュータ104は、ホストバス又はネットワーク112を介したストレージコントローラ108へのリード/ライト要求を生成するアプリケーションプログラムを実行する。一実施形態では、ホストバス又はネットワーク112は、SCSI、FC−AL、USB、ファイアワイヤ(Firewire)、SSA、SAS、SATA、インフィニバンド(Infiniband)等のバスである。別の実施形態では、ホストバス又はネットワーク112は、イーサネット(登録商標)、iSCSI、ファイバチャネル(Fiber Channel)、SSA、ESCON、ATM、FICON、NVMe、インフィニバンド等のネットワークである。
【0016】
ホストコンピュータ104は、1つ又は複数のストレージコントローラ108とインターフェイスするが、明瞭にするためにストレージコントローラ108は1つのみを図示している。一実施形態では、ストレージコントローラ108がRAIDコントローラである。別の実施形態では、ストレージコントローラ108が、プロビジョニング、仮想化、複製、バックアップ機器等のストレージ機器である。ストレージコントローラ108は、ストレージデバイス・バス120を介して、ストレージサブシステム124内のストレージデバイス116a、116bとの間でデータをやり取りする。ストレージデバイス・バス120は、これだけに限定されないが、SCSI、ファイバチャネル、SAS、SATA、又はSSAを含む、ストレージコントローラ108とストレージデバイス116との間でデータを直接伝送するための任意の適切なストレージバス又はバス群である。
【0017】
一実施形態では、ストレージサブシステム124が12個のストレージデバイス116を含む。他の実施形態では、ストレージサブシステム124が、12個未満の又はそれを上回るストレージデバイス116を含み得る。ストレージデバイス116は、ハードディスクドライブ、ソリッドステートドライブ、光学ドライブ、及びテープドライブを含む様々な種類のストレージデバイスを含む。特定のストレージデバイスの種類の範囲内で、性能に応じて組織化されるストレージデバイス116の幾つかの下位区分がある場合がある。例えば、ハードディスクドライブは、キャッシュサイズ、ドライブRPM(例えば5,400、7,200、10,000、及び15,000)、待ち行列の長さ、ランダム転送速度、又は逐次転送速度に応じて組織化され得る。
【0018】
次に
図1bを参照し、本発明の実施形態による、第2の非ホストベースのデータストレージシステム128の構成要素を示すブロック図が示されている。非ホストベースのデータストレージシステム128は、ストレージコントローラ108がストレージデバイス116と共にストレージサブシステム132内にあることを除き、非ホストベースのデータストレージシステム100に似ている。
図1bに示す実施形態では、ストレージコントローラ108が単一のRAIDコントローラ108である。但し、他の実施形態では、ストレージコントローラ108が複数のRAIDコントローラ108を表す。
【0019】
次に
図1cを参照し、本発明の実施形態による、第3の非ホストベースのデータストレージシステム136の構成要素を示すブロック図が示されている。データストレージシステム136は、ストレージコントローラ108が2つの冗長なストレージコントローラ108a、108bを表すことを除き、データストレージシステム100及び128に似ている。一実施形態では、ストレージコントローラ108a、108bの一方が故障した場合にホスト104がストレージデバイス116を引き続き使用できるようにするために、ストレージコントローラ108a、108bがアクティブ−アクティブフェイルオーバ(active-active failover)を利用する。コントローラ間メッセージングリンク140は、書込みデータをミラーリングし、フェイルオーバ及びフェイルバック操作を同期するために、ストレージコントローラ108a、108b間の通信及びデータ経路を提供する。
【0020】
次に
図2aを参照し、本発明の実施形態による、第1のホストベースのデータストレージシステム200の構成要素を示すブロック図が示されている。第1のホストベースのデータストレージシステム200は、ストレージコントローラ108がホストコンピュータ104内にあることを除き、
図1aの第1の非ホストベースのストレージシステム100に似ている。ストレージコントローラ108は、ホストコンピュータ104のローカルバスを介してインターフェイスし、ローカルバスは、ラピッドIO、PCI、PCI−X、又はPCIエクスプレスを含む、ホストコンピュータ104のCPUとストレージコントローラ108との間の高速伝送用の任意の適切なバスとすることができる。ストレージコントローラ108は、ホストコンピュータ104のマザーボード上に組み込むことができ、又はホストコンピュータ104内の拡張ボード若しくは他の形式のアセンブリとすることができる。
【0021】
次に
図2bを参照し、本発明の実施形態による、第2のホストベースのデータストレージシステム204の構成要素を示すブロック図が示されている。第2のホストベースのデータストレージシステム204は、ストレージサブシステム124の機能をホストコンピュータ104内に組み込む。データストレージシステム204は、高度に統合された独立型のデータストレージシステムを表す。
【0022】
次に
図2cを参照し、本発明の実施形態による、第3のホストベースのデータストレージシステム208の構成要素を示すブロック図が示されている。第3のホストベースのデータストレージシステム208は、第1のホストベースのデータストレージシステム200に似ているが、組み込まれたストレージコントローラ108の代わりにソフトウェアに基づく手法を使用する。ホストコンピュータ104とストレージデバイス・バス120との間のインターフェイスは、適切なデータ及びコマンドバッファリング機能並びにプロトコル制御及び低レベル誤り処理(low-level error handling)を実現する、ホストバスアダプタ212によって提供される。CPU216はメモリ220内のアプリケーション224を実行し、メモリ220とストレージサブシステム124内のストレージデバイス116a、116bとの間のデータフローを制御する。
【0023】
次に
図3を参照し、本発明の実施形態による、データストレージシステム300を示すブロック図が示されている。データストレージシステム300は、バス又はネットワーク112を介してストレージコントローラ108に相互接続される1台又は複数台のホストコンピュータ104を含む。ホストコンピュータ104は、逐次ホスト入出力要求332の複数のグループであるホストストリーム308を生成する。
【0024】
ストレージコントローラ108は、CPU312に結合されるメモリ316内に記憶されるプログラム命令を実行する、CPU又はプロセッサ312を含む。CPU312は、インテル(Intel)x86互換プロセッサ、組込みプロセッサ、モバイルプロセッサ、及び/又はRISCプロセッサ等、ストレージコントローラ108のプログラムを実行するのに適した任意の処理装置を含む。CPU312は、書替え可能ゲートアレイ(FPGA)、メモリコントローラ、ノースブリッジ装置(North Bridge devices)、及びサウスブリッジ装置(South Bridge devices)のうちの少なくとも一つを含む幾つかの装置を含み得る。
【0025】
メモリ316は、揮発性メモリ316、不揮発性メモリ316、又は揮発性メモリ及び不揮発性メモリの両方の組合せ316の1つ若しくは複数の形態とすることができる。メモリ316はファームウェアを含み、そのファームウェアは、本発明のプロセス用のプログラム命令を含む、CPU312が取り出して実行するプログラム命令を含む。不揮発性メモリ316の例には、これだけに限定されないが、フラッシュメモリ、SD、SSD、EPROM、EEPROM、ハードディスク、及びNOVRAMが含まれる。揮発性メモリ316は、様々なデータ構造及びユーザデータを記憶する。揮発性メモリ316の例には、これだけに限定されないが、SRAM、DDR RAM、DDR2 RAM、DDR3 RAM、Z−RAM、TTRAM、A−RAM、ETA RAM、及び他の形態の一時メモリが含まれる。
【0026】
メモリ316は、ホストコンピュータ104に対して改善されたリード・ライト性能をそれぞれ提供する、リードデータキャッシュ324及びライトデータキャッシュ328又はライトキャッシュを含む。メモリ316は、データストリームメタデータ320も含む。データストリームメタデータ320は、ホスト入出力要求332に関係するパラメータを記憶し、逐次入出力操作を制御するために使用される。
【0027】
ストレージコントローラ108は、1つ又は複数の仮想ディスク(virtual disk:VDisk)348a〜348nを含むストレージサブシステム124、132に結合される。各仮想ディスク348は、異なるRAIDボリュームであり、1つ又は複数のストレージデバイスを含む。頻繁にアクセスされるデータは、仮想ディスク348からリードデータキャッシュ324内に読み取られ、リードデータキャッシュ324では、データをホスト読取要求332に応答して仮想ディスク348から直接提供するよりもはるかに速く提供することができる。書込みデータはライトデータキャッシュ328内に最初に記憶され、かかる動作は仮想ディスク348に直接送られる書込みよりもはるかに速い。ライトデータキャッシュ328は、CE0 352a〜CEn 352nとして識別される所定数の固定サイズのキャッシュ要素352へと分割される。ストレージコントローラ108は、ライトデータキャッシュ328から、より具体的にはキャッシュ要素352から仮想ディスク348にストレージデバイス書込み344を伝送する。
【0028】
一部の実施形態では、ストレージコントローラ108がタイマ340を含む。タイマ340は、CPU312によって制御されるハードウェアのタイマとすることができ、又はCPU312上で実行されるソフトウェアルーチンでも良い。タイマ340は、ホスト入出力要求のタイムアウト時間908を測定し、以下の説明及び図中で説明される。タイマ340は、任意の数のタイマを表すことができ、本発明では全てのホスト入出力要求332に全般的に割り当てられた1つのタイマ340がある。
【0029】
ストレージコントローラ108は、本発明の範囲又は動作から逸脱することなしに、無数の異なる機能上の構成及びアーキテクチャで機能的に構成され得ることを理解すべきである。
【0030】
次に
図4aを参照すると、本発明の実施形態による、単一ストレージデバイスのストライプドボリューム400の構成要素を示すブロック図が示されている。
単一のストレージデバイス116は、ストライプドボリューム400とすることができる。ストレージデバイス116は、ハードディスクドライブ、光学ドライブ、テープドライブ、ソリッドステートデバイス、又は他の任意の形態の大容量データストレージデバイスとすることができる。ストライプドボリューム400は、均等の大きさにされた2つ以上のストライプを含む論理ボリュームである。1つのストレージデバイス116上のストライプの部分はチャンクである。
【0031】
図4aは、4つのストライプ、つまりストライプN 404、ストライプN+1 408、ストライプN+2 412、及びストライプN+3 416を有するストライプドボリューム400を示す。ストライプN 404はチャンクA 420を有し、ストライプN+1 408はチャンクB 424を有し、ストライプN+2 412はチャンクC 428を有し、ストライプN+3 416はチャンクD 432を有する。
図4aでは、4つのストライプ404、408、412、及び416、並びに4つのチャンク420、424、428、及び432を有する単一ストレージデバイスのストライプドボリューム400を示すが、単一ストレージデバイスのストライプドボリューム400は、4つのストライプ/チャンク未満、又は4つのストライプ/チャンクよりも多く有しても良いことを理解すべきである。更に、単一ストレージデバイスのストライプドボリューム400は、単一のストレージデバイス116上の使用可能なデータ記憶空間の一部分だけを占有することができ、同じストレージデバイス116上には他の単一ストレージデバイスのストライプドボリューム400があっても良い。仮想ディスク348が単一のストレージデバイス116である場合、仮想ディスクのストライプサイズは、チャンク420、424、428、又は432の大きさである。
【0032】
次に
図4bを参照し、本発明の実施形態による、複数ストレージデバイスのストライプドボリューム434の構成要素を示すブロック図が示されている。
複数のストレージデバイス116又は複数のストレージデバイス116の一部を、ストライプドボリューム434とすることができる。
図4bは、3つのストレージデバイス116a、116b、及び116c上のストライプドボリューム434を示す。ストライプドボリューム434は4つのストライプ、つまりストライプM 436、ストライプM+1 440、ストライプM+2 444、及びストライプM+3 448を有する。ストライプM 436はチャンクE 452、チャンクF 456、及びチャンクG 460を有する。ストライプM+1 440は、チャンクH 464、チャンクI 468、及びチャンクJ 472を有する。ストライプM+2 444は、チャンクK 476、チャンクL 480、及びチャンクM 484を有する。ストライプM+3 448は、チャンクN 488、チャンクO 492、及びチャンクP 496を有する。
図4bでは、4つのストライプ436、440、444、及び448、並びに3つのストレージデバイス116a、116b、及び116cを有する複数のストレージデバイスのストライプドボリューム434を示すが、複数のストレージデバイスのストライプドボリューム434が、4つのストライプ未満若しくはそれよりも多く、又は3つのストレージデバイス116未満若しくはそれよりも多く有しても良いことを理解すべきである。本発明で使用するとき、「ストライプドボリューム400、434」は、単一ストレージデバイスのストライプドボリューム400又は複数のストレージデバイスのストライプドボリューム434である。更に、複数のストレージデバイスのストライプドボリューム434は、ストレージデバイス116群上で使用可能なデータ記憶空間の一部のみを占有する場合があり、同じストレージデバイス116群上に他の複数のストレージデバイスのストライプドボリューム434があり得る。仮想ディスク348が複数のストレージデバイス116である場合、仮想ディスクのストライプサイズは、ストライプ内のチャンクの組み合わさった大きさ、つまり、
図4bの3つのストレージデバイス116の事例では、チャンク452+456+460、464+468+472、476+480+484、又は488+492+496である。
【0033】
次に
図5を参照すると、本発明の実施形態による、ライトデータキャッシュ328のデータフローを示すブロック図が示されている。ライトデータキャッシュ328は、ストレージコントローラ108のメモリ316の一部である。ライトデータキャッシュ328は、ホストバス又はネットワーク112を介してホストコンピュータ104からホスト入出力書込み要求332を受け取り、書込みデータをダーティデータ(dirty data)としてライトデータキャッシュ328内に記憶する。ダーティデータは、ストレージデバイス116にまだ書き込まれていない、ライトデータキャッシュ328内に記憶されたホスト入出力書込み要求332の書込みデータである。ホストデータ書込みは、キャッシュのダーティ部分508内に記憶され、キャッシュのダーティ部分508からストライプドボリューム400、434にストレージデバイス書込み344を伝送する待ち条件を待つ。ストレージデバイス書込み344は、部分ストライプの書込み又はフルストライプの書込みである。ダーティデータによって占有されていないライトデータキャッシュ328の部分は、キャッシュの空き部分504であり、ホスト入出力書込み要求332の書込みデータを受け取るために使用可能である。
【0034】
ライトデータキャッシュ328内のダーティデータの量を追跡するために、ストレージコントローラ108によってダーティウォーターマーク(dirty watermark)512が保たれる。ライトデータキャッシュ328内でより多くのダーティデータ508が蓄積するにつれ、ダーティウォーターマーク512がそれに応じて上昇し、ダーティデータ508がストレージデバイス116にデステージされると、ダーティウォーターマーク512がそれに応じて低下する。
【0035】
ライトデータキャッシュ328は、ダーティウォーターマーク最大パーセンテージ516又はダーティウォーターマークの最大値も含み、この値は、ライトデータキャッシュ328から仮想ディスク348にキャッシュ要素352をデステージすべきかどうかを判定するために、特定の時点においてダーティウォーターマーク512と比較する所定値である。
【0036】
ホスト入出力書込み要求332が受け取られ、ライトデータキャッシュ328内に書き込まれると、新たな書込みデータを記憶するのに十分な空間がデータライトキャッシュ328内にある限り、キャッシュのダーティ部分508がそれに応じて拡大する。キャッシュのダーティ部分508が拡大するのと同時に、キャッシュの空き部分504が縮小する。同様に、ストレージデバイス書込み344がライトデータキャッシュ328から仮想ディスク348にデータを伝送すると、キャッシュのダーティ部分508が縮小し、キャッシュの空き部分504がそれに応じて拡大する。
【0037】
次に
図6を参照すると、本発明の実施形態による、3+1 RAID5ストライプドボリューム434に関する例示的データコンテナ600が示されている。この3+1 RAID5ストライプドボリューム434は、ストレージデバイス116a、ストレージデバイス116b、ストレージデバイス116c、及びストレージデバイス116dとして識別される4つのストレージデバイス116を含む。この例示的ストライプドボリュームは、ストライプ0からストライプ13として識別される14個のストライプ604を有する。ストライプドボリューム434は、RAID技術、ストライプドボリュームのサイズ等の制約を受ける任意の数のストレージデバイス116又はストライプ604を有し得ることを理解すべきである。
【0038】
単一のストレージデバイス116に割り当てられるストライプ604の部分はチャンクである。
図6の例では、各チャンクが8個の等サイズのキャッシュ要素(CE)352に分割されている。但し、他の実施形態では、各チャンクが8個よりも少ない又は多いキャッシュ要素352を有し得る。好ましい実施形態では、キャッシュ要素352がそれぞれ16キロバイトである。他の実施形態では、キャッシュ要素352がそれぞれ16キロバイト未満であり又は16キロバイトを上回る。各キャッシュ要素352は、空616、ダーティ620、又は有効624のいずれかの状態を有することができる。ダーティキャッシュ要素620だけが新たな書込みデータを含む。有効なキャッシュ要素624は、ストレージデバイス116に以前書き込まれた書込みデータを含む。
【0039】
図6の例では、ストライプ604に応じてストレージデバイス116のそれぞれにわたりパリティチャンクが循環するRAID5の技法に従い、ストライプドボリューム434がマップされる。一実施形態では、パリティチャンク608aがストレージデバイス116dのストライプ0に割り当てられ、パリティチャンク608bがストレージデバイス116cのストライプ1に割り当てられ、その後も同様に続く。
【0040】
データコンテナ612は、新たな書込みデータが受け取られるときにストライプ604ごとに割り当てられるデータ構造であり、ストライプ604の境界を超えることはない。データコンテナ612は、不明、部分的、又は満杯という3つの値のうちの1つを有する状態808を含む。データコンテナ612が最初に作成されると、データコンテナ612は不明の状態808を有する。データコンテナ612に新たな書込みデータが関連し、1つ又は複数の空のCE616が残る場合、データコンテナ612は部分的な状態808を有する。データコンテナ612に新たな書込みデータが関連し、データコンテナ612の全てのCE352がダーティCE620又は有効なCE624のいずれかである場合、データコンテナ612は満杯の状態808を有する。好ましい実施形態では、データコンテナ612が逐次的に割り当てられる。しかし他の実施形態では、2つのストライプ604が同じデータコンテナ612の番号を有さない限り、データコンテナ612を任意の順序で割り当てることができる。
【0041】
ストライプ3は、
図6のストライプドボリューム434内の書込みデータを受け取った第1のストライプ604であり、従ってデータコンテナ0である。ストライプ3の全てのCE352がダーティCE620であるため、データコンテナ0は満杯の状態808を有する。
【0042】
ストライプ9は、
図6のストライプドボリューム434内の書込みデータを受け取った第2のストライプ604であり、従ってデータコンテナ1である。ストライプ9の全てではないが一部のCE352だけがダーティCE620又は有効なCE624であるため、データコンテナ1は部分的な状態808を有する。
【0043】
ストライプ0は、
図6のストライプドボリューム434内の書込みデータを受け取った第3のストライプ604であり、従ってデータコンテナ2である。ストライプ0の全てではないが一部のCE352だけがダーティCE620又は有効なCE624であるため、データコンテナ2は部分的な状態808を有する。
【0044】
ストライプ5は、
図6のストライプドボリューム434内の書込みデータを受け取った第4のストライプ604であり、従ってデータコンテナ3である。ストライプ5の全てではないが一部のCE352だけがダーティCE620又は有効なCE624であるため、データコンテナ3は部分的な状態808を有する。
【0045】
ストライプ13は、
図6のストライプドボリューム434内の書込みデータを受け取った第5のストライプ604であり、従ってデータコンテナ4である。ストライプ13の全てではないが一部のCE352だけがダーティCE620又は有効なCE624であるため、データコンテナ4は部分的な状態808を有する。
【0046】
ストライプ10は、
図6のストライプドボリューム434内の書込みデータを受け取った第6のストライプ604であり、従ってデータコンテナ5である。ストライプ10の全てではないが一部のCE352だけがダーティCE620又は有効なCE624であるため、データコンテナ5は部分的な状態808を有する。
【0047】
ストライプ4は、
図6のストライプドボリューム434内の書込みデータを受け取った第7のストライプ604であり、従ってデータコンテナ6である。ストライプ4の全てではないが一部のCE352だけがダーティCE620又は有効なCE624であるため、データコンテナ6は部分的な状態808を有する。
【0048】
ストライプ12は、
図6のストライプドボリューム434内の書込みデータを受け取った第8のストライプ604であり、従ってデータコンテナ7である。ストライプ12の全てのCE352がダーティCE620又は有効なCE624であるため、データコンテナ7は満杯の状態808を有する。
【0049】
ストライプ6は、
図6のストライプドボリューム434内の書込みデータを受け取った第9のストライプ604であり、従ってデータコンテナ8である。ストライプ6の全てのCE352がダーティCE620又は有効なCE624であるため、データコンテナ8は満杯の状態808を有する。
【0050】
ストライプ11は、
図6のストライプドボリューム434内の書込みデータを受け取った第10のストライプ604であり、従ってデータコンテナ9である。ストライプ11の全てではないが一部のCE352だけがダーティCE620又は有効なCE624であるため、データコンテナ9は部分的な状態808を有する。
【0051】
ライトデータキャッシュ328内では10個のストライプ604のみがダーティCE620又は有効なCE624を有しているため、10個のデータコンテナ612のみが割り当てられている。ストライプ1、2、7、及び8内の全てのCE352は空のCE616であるため、それらのストライプ604にはデータコンテナ612が割り当てられていない。
【0052】
次に
図7aを参照すると、本発明の実施形態による、フルストライプ書込みパーセンテージ724の計算プロセスを示すフローチャートが示されている。フルストライプ書込みパーセンテージ724の計算プロセスは、ライトデータキャッシュ328からキャッシュ要素352をデステージすべきときを決定するために、本発明のプロセス内の様々な時点において引き起こされる。流れはブロック704で始まる。
【0053】
ブロック704で、仮想ディスク348ごとに、ストレージコントローラ108が、部分ストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素712、及びフルストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素716のカウントをデータストリームメタデータ320から得る。流れはブロック708に進む。
【0054】
ブロック708で、仮想ディスク348ごとに、ストレージコントローラ108は、フルストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素716のカウントを、仮想ディスクごとのダーティキャッシュ要素又は有効なキャッシュ要素720のカウントの和で除算し、その結果に100を乗算する。仮想ディスクごとのダーティキャッシュ要素又は有効なキャッシュ要素720のカウントは、仮想ディスクごとの部分ストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素712と、仮想ディスクごとのフルストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素716のカウントとの和に等しい。流れはブロック708で終わる。
【0055】
次に
図7bを参照すると、本発明の実施形態による、フルストライプ書込みパーセンテージ724の一例示的計算が示されている。ストレージコントローラ108は、フルストライプ書込みパーセンテージ724を本発明のプロセス内の様々な時点、とりわけ
図13のブロック1308及び
図14のブロック1420において計算する。以下に記載する例では、
図7aに示すプロセスのステップを利用する。
【0056】
ストレージコントローラ108は、ライトデータキャッシュ328内の全てのキャッシュ要素352について、データストリームメタデータ320内にキャッシュ要素352の統計値を保つ。より詳細には、ストレージコントローラ108は、仮想ディスクごとの部分ストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素712の現在のカウントと、仮想ディスクごとのフルストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素716の現在のカウントとを保つ。従って、ストレージコントローラ108が管理する各仮想ディスク348は、部分ストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素712の固有の現在のカウントと、フルストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素716の現在のカウントとを有する。
【0057】
ストレージコントローラ108は、データストリームメタデータ320内に、仮想ディスクごとの全てのダーティキャッシュ要素又は有効なキャッシュ要素720の現在のカウントも保つ。仮想ディスクごとの全てのダーティキャッシュ要素又は有効なキャッシュ要素720の現在のカウントは、仮想ディスクごとの部分ストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素712の現在のカウントと、仮想ディスクごとのフルストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素716の現在のカウントとの和に等しい。
【0058】
一部の実施形態では、ストレージコントローラ108が、データストリームメタデータ320内に仮想ディスクごとのフルストライプ書込みパーセンテージ724を保つ。他の実施形態では、ストレージコントローラ108が、仮想ディスクごとのフルストライプ書込みパーセンテージ724を必要に応じて計算し、仮想ディスクごとのフルストライプ書込みパーセンテージ724をデータストリームメタデータ320内に特に記憶しない。この例では、所与の仮想ディスク348について、部分ストライプに属する25個のダーティキャッシュ要素又は有効なキャッシュ要素712と、フルストライプに属する50個のダーティキャッシュ要素又は有効なキャッシュ要素716とがある。ストレージコントローラ108は、部分ストライプに属する25個のダーティキャッシュ要素又は有効なキャッシュ要素712を、フルストライプに属する50個のダーティキャッシュ要素又は有効なキャッシュ要素716に加えることにより、所与の仮想ディスクのダーティキャッシュ要素又は有効なキャッシュ要素720の現在のカウントを計算する。従って、所与の仮想ディスク348ごとに、75個のダーティキャッシュ要素又は有効なキャッシュ要素がある。
【0059】
次に、ストレージコントローラ108は、所与の仮想ディスクのフルストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素716の現在のカウントを、所与の仮想ディスク内のダーティキャッシュ要素又は有効なキャッシュ要素720の現在のカウントで除算することにより、所与の仮想ディスク348のフルストライプ書込みパーセンテージ724を計算する。従って、50を75で除算すると.667であり、100を乗算すると、所与の仮想ディスク348のフルストライプ書込みパーセンテージ724は67%である。
【0060】
次に
図8を参照すると、本発明の実施形態による、書込みデータストリームメタデータ320のパラメータを示す図が示されている。本発明のストレージコントローラ108はメタデータ320を3つのレベルで管理し、その3つのレベルとはつまり、キャッシュ要素352レベル、データコンテナ612レベル、及びデステージ・ストリーム・オブジェクト828レベルである。
【0061】
キャッシュ要素352レベルでは、ストレージコントローラ108が、ストライプ604ごとにメタデータを保つ。とりわけ、ストレージコントローラ108は、各キャッシュ要素352がストライプ604内にあるかどうかに応じて各ストライプ内のキャッシュ要素812を識別する。これに関連して「ある」とは、キャッシュ要素352がダーティ620又は有効624のいずれかの状態を有することを意味する。更に、各ストライプ内のキャッシュ要素812について、ストレージコントローラ108は、どのキャッシュ要素352が各ストライプ内のダーティキャッシュ要素816(即ちダーティ620のキャッシュ要素状態を有する)であるのかを識別する。各ストライプ604内の総キャッシュ要素よりも多くのダーティキャッシュ要素はあり得ないため、各ストライプ内のダーティキャッシュ要素816の数は常に、各ストライプ内のキャッシュ要素812の数以下である。ストレージコントローラ108は、特定のキャッシュ要素352を識別する現在のキャッシュ要素ポインタ820も保つ。
【0062】
データコンテナ612レベルでは、ストレージコントローラ108が、キャッシュ要素352を特定のデータコンテナ612に関連付ける。ストレージコントローラ108は、データコンテナの状態808を含む、データコンテナ612ごとのデータストリームメタデータ320も保つ。データコンテナの状態808は、各データコンテナ612が満杯か部分的に満杯かのいずれかを特定する。データコンテナ612は少なくとも1つのキャッシュ要素352が所与のストライプ604内でダーティ620又は有効624のいずれかである場合にのみ確立され、チャンク内の全てのキャッシュ要素352が空616の状態を有する場合、データコンテナ612は確立されないことに留意すべきである。現在のキャッシュ要素ポインタ820は特定のキャッシュ要素352を識別するため、ポインタ820は特定のデータコンテナ612も識別する。例えば、現在のキャッシュ要素ポインタ820は、データコンテナCを現在のデータコンテナ824として識別する。
【0063】
デステージ・ストリーム・オブジェクト828レベルでは、ストレージコントローラ108が満杯のデータコンテナ612を識別する。満杯のデータコンテナ612とは、所与のストライプ604内の全てのキャッシュ要素352がダーティ620又は有効624のいずれかであるデータコンテナ612である。所与のストライプ604内の少なくとも1つのキャッシュ要素352が空か欠落している場合、対応するデータコンテナ612は満杯ではない。ストレージコントローラ108は更に、デステージ・ストリーム・オブジェクト828が論理ブロックアドレス(LBA)の点で直接隣接する場合、デステージ・ストリーム・オブジェクト828をより大きいデステージ・ストリーム・オブジェクト828へと合体させる。
図8では、データコンテナ612「E」、「F」、及び「G」を、それぞれ5個のダーティキャッシュ要素620を有する満杯のデータコンテナ612として示す。従って、ストレージコントローラ108は、E、F、及びGを、15個のキャッシュ要素352を含む1つの大きいデステージ・ストリーム・オブジェクト836へと合体させる。満杯のデータコンテナ612がデステージストリーム内に入ると、ストレージコントローラ108は、最も小さいデステージ・ストリーム・オブジェクト832及び最も大きいデステージ・ストリーム・オブジェクト836の両方を識別する。
図8に示す例では、データコンテナA 612が、5個のキャッシュ要素352を有する最も小さいデステージ・ストリーム・オブジェクト832であり、データコンテナE/F/G 612が、15個のキャッシュ要素352を有する最も大きいデステージ・ストリーム・オブジェクト836である。
【0064】
ストレージコントローラ108は、デステージ・ストリーム・グラジェント840も、仮想ディスク348ごとにデータストリームメタデータ320内に保つ。デステージ・ストリーム・グラジェント840は、最も大きいデステージ・ストリーム・オブジェクト836と最も小さいデステージ・ストリーム・オブジェクト832との差であり、最も大きいデステージ・ストリーム・オブジェクト836は、合体済みのデステージ・ストリーム・オブジェクト828を含む。従って
図8の例では、デステージ・ストリーム・グラジェント840は15−5、即ち10個のキャッシュ要素352に等しい。
【0065】
ストレージコントローラ108は、ストライプ604、キャッシュ要素352、データコンテナ612、及びデステージ・ストリーム・オブジェクト828を、低いLBAから高いLBAに順に管理する。更に、ストレージコントローラ108は、
図8のメタデータを仮想ディスク348ごとに独立に管理することにも留意すべきである。
【0066】
次に
図9aを参照すると、本発明の実施形態による、データストリームのグローバルメタデータ320aを示す図が示されている。グローバルメタデータ320aとは、ストレージコントローラ108によって制御される全ての仮想ディスク348及びストレージデバイス116にわたって使用されるメタデータである。
【0067】
データストリームのグローバルメタデータ320aは、ダーティウォーターマークパーセンテージ512及びダーティウォーターマーク最大パーセンテージ516を含む。ダーティウォーターマークパーセンテージ512及びダーティウォーターマーク最大パーセンテージ516については、
図5に関してより詳細に説明した。
【0068】
データストリームのグローバルメタデータ320aは、フルストライプ書込みアフィニティ値904(full stripe write affinity value)を含む。フルストライプ書込みアフィニティ値904は、ストレージコントローラ108がライトデータキャッシュ328からフルストライプの書込みを発行することのみを選ぶ閾値である。この値は経験的試験によって最適に決められ、ホストデータ書込み要求332の頻度及び参照の局所性、ライトデータキャッシュ328のサイズ、並びにライトデータキャッシュ328から部分ストライプ又はフルストライプ808をデステージするのにかかる時間に依存する。好ましい実施形態では、フルストライプ書込みアフィニティ値904が50%である。別の実施形態では、フルストライプ書込みアフィニティ値904が60%である。しかし、他の実施形態では、フルストライプ書込みアフィニティ値904が50%でも60%でもない。
【0069】
データストリームのグローバルメタデータ320aは、ホスト書込み要求のタイムアウト時間908も含む。ホスト書込み要求のタイムアウト時間908は、キャッシュ要素352をライトデータキャッシュ328からデステージすべきかどうかを判定するための条件の1つとして使用される所定時間である。ホスト書込み要求のタイムアウト時間908については、
図11に関してより詳細に説明する。
【0070】
データストリームのグローバルメタデータ320aは、アクティブ・デステージ・カウントの最大値912を更に含み、この最大値912は、全ての仮想ディスク348についてライトデータキャッシュ328からデステージすることができるデステージ・ストリーム・オブジェクト828の最大数である。
【0071】
最後に、データストリームのグローバルメタデータ320aは、デステージ・ストリーム・グラジェント閾値916を更に含み、この閾値916は、現在のキャッシュ要素ポインタ820によって識別される現在のキャッシュ要素352以外のどのキャッシュ要素352が、ライトデータキャッシュ328からデステージするのにより良いキャッシュ要素352であるのかを判定するために、デステージ・ストリーム・グラジェント840と比較する所定値である。デステージ・ストリーム・グラジェント閾値916については、
図14に関してより詳細に説明する。
【0072】
次に
図9bを参照すると、本発明の実施形態による、データストリームの仮想ディスクメタデータ320bを示す図が示されている。データストリームの仮想ディスクメタデータ320bは、ストレージコントローラ108によって制御されるありとあらゆる仮想ディスク348ごとに独立に管理される。従って、ストレージコントローラ108は、第1の仮想ディスク348aに関するデータストリームの仮想ディスクメタデータ320bを、第2の仮想ディスク348b又は他の仮想ディスク348nに関するデータストリームの仮想ディスクメタデータ320bとは独立に管理する。
【0073】
データストリームの仮想ディスクメタデータ320bは、仮想ディスクごとの部分ストライプに属するダーティキャッシュ要素(ダーティCE)712、仮想ディスクごとのフルストライプに属するダーティキャッシュ要素(ダーティCE)716、仮想ディスクごとのダーティキャッシュ要素(ダーティCE)720、及びフルストライプ書込みパーセンテージ724の全てを仮想ディスク348ごとに含む。これらのもののそれぞれについては、
図7a及び
図7bに関してより詳細に説明した。
【0074】
データストリームの仮想ディスクメタデータ320bは、現在のキャッシュ要素ポインタ(現在のCEポインタ)820、現在のデータコンテナ824、最も小さいデステージ・ストリーム・オブジェクト832、最も大きいデステージ・ストリーム・オブジェクト836、及びデステージ・ストリーム・グラジェント840も含む。これらのメタデータ320bのパラメータのそれぞれについては、
図8に関してより詳細に説明した。
【0075】
データストリームの仮想ディスクメタデータ320bは、各仮想ディスク348内の各データコンテナ612に関係するメタデータを更に含む。データコンテナ612ごとに、データコンテナ612が満杯のデータコンテナ612か部分的に満杯のデータコンテナ612かをデータコンテナの状態808が規定する。データコンテナの総CEカウント812とは、ダーティキャッシュ要素620並びに有効なキャッシュ要素624の両方を含む、各データコンテナ612内のキャッシュ要素352の数である。データコンテナのダーティキャッシュ要素のカウント816とは、各データコンテナ612内のダーティキャッシュ要素620の数である。
【0076】
最後に、データストリームの仮想ディスクメタデータ320bは、仮想ディスク348ごとのアクティブ・デステージ・カウント920も含む。各アクティブ・デステージ・カウント920は、ストレージコントローラ108が対応する仮想ディスク348にデステージしたオブジェクト828の現在の数を明示する。
【0077】
次に
図10を参照すると、本発明の実施形態による、データストリームメタデータ320の初期化プロセスを示すフローチャートが示されている。メタデータ320の初期化は、ストレージコントローラ108の電源投入時に、及び具体的に指定される他の時点において行われる。流れはブロック1004で始まる。
【0078】
ブロック1004で、ストレージコントローラ108が、全ての仮想ディスクごとのメタデータ320bのパラメータを初期化する。仮想ディスクごとのメタデータ320bのパラメータについては、
図9bに関してより詳細に説明する。流れはブロック1008に進む。
【0079】
ブロック1008で、ストレージコントローラ108は、全てのキャッシュ要素352及びデータコンテナ612を初期化する。データコンテナ612がまだ確立されていない場合、キャッシュ要素352及びデータコンテナ612はまだ存在しない。キャッシュ要素352及びデータコンテナ612が電源サイクル事象の前に存在していた場合、ストレージコントローラ108は、電源サイクルの直前の状態に両方を復元する。流れはブロック1008で終わる。
【0080】
次に
図11を参照すると、本発明の実施形態による、ストリームデステージ開始プロセスを示すフローチャートが示されている。流れは、ブロック1104、1116、又は判定ブロック1120のうちの1つで始まる。
【0081】
ブロック1104で、ストレージコントローラ108が、ライトデータキャッシュ328から仮想ディスク348への1つ又は複数のストライプ604のデステージングを完了する。流れはブロック1108に進む。
【0082】
ブロック1108で、ストレージコントローラ108は、対応する仮想ディスク348のアクティブ・デステージ・カウント920をデクリメントする。流れは判定ブロック1112に進む。
【0083】
判定ブロック1112で、ストレージコントローラ108は、対応する仮想ディスク348のアクティブ・デステージ・カウント920が、実際のデステージカウントの最大値912を下回るかどうかを判定する。対応する仮想ディスク348のアクティブ・デステージ・カウント920が実際のデステージカウントの最大値912を下回る場合、流れは
図12の判定ブロック1204に進む。対応する仮想ディスク348のアクティブ・デステージ・カウント920が実際のデステージカウントの最大値912以上の場合、流れは終わる。
【0084】
ブロック1116で、ストレージコントローラ108は、ホスト入出力書込み要求332が完了していると判定する。従って、ホスト入出力書込み要求332に対応する書込みデータが、仮想ディスク348に書き込まれている。流れは判定ブロック1112に進む。
【0085】
判定ブロック1120で、ストレージコントローラ108は、ホスト入出力書込み要求332が、ホスト入出力書込み要求のタイムアウト時間908を上回る間受け取られているかどうかを判定する。ホスト入出力書込み要求332がホスト入出力書込み要求のタイムアウト時間908を上回る間受け取られている場合、流れは判定ブロック1112に進む。ホスト入出力書込み要求332がホスト入出力書込み要求のタイムアウト時間908を上回る間受け取られていない場合、流れは終わる。
【0086】
次に
図12を参照すると、本発明の実施形態による、主要プロセスを示すフローチャートが示されている。図示のプロセスは、
図11の判定ブロック1112から続く。流れは判定ブロック1204で始まる。
【0087】
判定ブロック1204で、ストレージコントローラ108は、ダーティウォーターマークパーセンテージ512が、ダーティウォーターマーク最大パーセンテージ516を上回るかどうかを判定する。ダーティウォーターマークパーセンテージ512が、ダーティウォーターマーク最大パーセンテージ516を上回る場合、流れは判定ブロック1208に進む。ダーティウォーターマークパーセンテージ512が、ダーティウォーターマーク最大パーセンテージ516を以下の場合、流れは終わる。
【0088】
判定ブロック1208で、ストレージコントローラ108は、現在のキャッシュ要素352がデステージするのに効率的かどうかを判定する。現在のキャッシュ要素352は、現在のキャッシュ要素ポインタ820によって識別される。判定ブロック1208については、
図13のプロセスの中でより詳細に示す。現在のキャッシュ要素352がデステージするのに効率的である場合、流れは判定ブロック1216に進む。現在のキャッシュ要素352がデステージするのに効率的ではない場合、流れはブロック1212に進む。
【0089】
ブロック1212で、ストレージコントローラ108は、ライトデータキャッシュ328からデステージするのにより良いキャッシュ要素352を識別する。ブロック1212については、
図14のプロセスの中でより詳細に示す。流れは判定ブロック1216に進む。
【0090】
判定ブロック1216で、ストレージコントローラ108は、現在のデータコンテナ824が満杯かどうかを判定する。現在のデータコンテナ824は、現在のキャッシュ要素ポインタ820によって識別されるキャッシュ要素352を含むデータコンテナ612である。データコンテナ612の全てのキャッシュ要素352がライトデータキャッシュ328内にあり、キャッシュ要素352のそれぞれがダーティ620又は有効624のいずれかの状態を有する場合、データコンテナ612は満杯である。現在のデータコンテナ824が満杯である場合、流れはブロック1220に進む。現在のデータコンテナ824が満杯ではない場合、流れはブロック1224及び1228に進む。
【0091】
ブロック1220で、ストレージコントローラ108は、デステージストリーム828から満杯且つ現在のデータコンテナ824を除去する。流れはブロック1224及び1228に進む。
【0092】
ブロック1224で、ストレージコントローラ108は、現在のデータコンテナ824を対応する仮想ディスク348にデステージし、対応する仮想ディスク348のアクティブ・デステージ・カウント920をインクリメントする。流れはブロック1232に進む。
【0093】
ブロック1228で、ストレージコントローラ108は、仮想ディスクメタデータ320b内のデータコンテナ612一覧から現在のデータコンテナ824を除去する。流れはブロック1232に進む。
【0094】
ブロック1232で、ストレージコントローラ108は、次のダーティキャッシュ要素620をLBAによって識別する。識別した次のダーティキャッシュ要素620を反映するために現在のCEポインタ820を更新し、現在のデータコンテナ824は以前と異なるデータコンテナ612であり得る。流れは判定ブロック1236に進む。
【0095】
判定ブロック1236で、ストレージコントローラ108は、対応する仮想ディスク348のアクティブ・デステージ・カウント920が、実際のデステージカウントの最大値912を下回るかどうかを判定する。対応する仮想ディスク348のアクティブ・デステージ・カウント920が実際のデステージカウントの最大値912を下回る場合、流れは
図12の判定ブロック1204に進み、次のキャッシュ要素352のデステージを試みる。対応する仮想ディスク348のアクティブ・デステージ・カウント920が実際のデステージカウントの最大値912以上の場合、流れは終わる。
【0096】
次に
図13を参照すると、本発明の実施形態による、現在のキャッシュ要素352がデステージするのに効率的かどうかを判定するためのプロセスを示すフローチャートが示されている。
図13に示すプロセスは、
図12の判定ブロック1208に対応する。流れは判定ブロック1304で始まる。
【0097】
判定ブロック1304で、ストレージコントローラ108が、現在のデータコンテナ824が満杯かどうかを判定する。現在のデータコンテナ824は、現在のキャッシュ要素ポインタ820によって識別されるキャッシュ要素352を含むデータコンテナ612である。データコンテナ612の全てのキャッシュ要素352がライトデータキャッシュ328内にあり、キャッシュ要素352のそれぞれがダーティ620又は有効624のいずれかの状態を有する場合、データコンテナ612は満杯である。現在のデータコンテナ824が満杯である場合、流れはブロック1316に進む。現在のデータコンテナ824が満杯ではない場合、流れは判定ブロック1308に進む。
【0098】
判定ブロック1308で、ストレージコントローラ108は、対応する仮想ディスク348のフルストライプ書込みパーセンテージ724が、フルストライプ書込みアフィニティ値904を上回るかどうかを判定する。別の実施形態では、ストレージコントローラ108は、対応する仮想ディスク348のフルストライプ書込みパーセンテージ724が、フルストライプ書込みアフィニティ値904以上かどうかを判定する。フルストライプ書込みアフィニティ値904は、ストレージコントローラ108がライトデータキャッシュ328からフルストライプの書込みを発行することのみを選ぶ閾値である。この値は経験的試験によって最適に決められ、ホスト入出力書込み要求332の頻度及び参照の局所性、ライトデータキャッシュ328のサイズ、並びにライトデータキャッシュ328から部分ストライプ又はフルストライプ604をデステージするのにかかる時間に依存する。好ましい実施形態では、フルストライプ書込みアフィニティ値904が50%である。別の実施形態では、フルストライプ書込みアフィニティ値904が60%である。しかし、他の実施形態では、フルストライプ書込みアフィニティ値904が50%でも60%でもない。現在の仮想ディスク348のフルストライプ書込みパーセンテージ724がフルストライプ書込みアフィニティ値904以上である場合、流れはブロック1312に進む。フルストライプ書込みパーセンテージ724がフルストライプ書込みアフィニティ値904未満の場合、流れはブロック1316に進む。
【0099】
ブロック1312で、ストレージコントローラ108は、現在のキャッシュ要素352をデステージするのに効率的ではないと特定する。現在のキャッシュ要素352は、現在のCEポインタ820によって識別されるキャッシュ要素352である。流れはブロック1312で終わり、従って
図12のブロック1212に制御権を返す。
【0100】
ブロック1316で、ストレージコントローラ108は、現在のキャッシュ要素352をデステージするのに効率的であると特定する。流れはブロック1316で終わり、従って
図12の判定ブロック1216に制御権を返す。
【0101】
次に
図14を参照すると、本発明の実施形態による、デステージするのにより良いキャッシュ要素352を識別するプロセスを示すフローチャートが示されている。
図14に示すプロセスは、
図12のブロック1212に対応する。流れはブロック1404で始まる。
【0102】
ブロック1404で、ストレージコントローラ108が、デステージ・ストリーム・グラジェント840を求める。デステージ・ストリーム・グラジェント840は、最も大きいデステージ・ストリーム・オブジェクト836と最も小さいデステージ・ストリーム・オブジェクト832との差である。デステージ・ストリーム・グラジェント840を求めるプロセスについては、
図15に関してより詳細に示す。流れは判定ブロック1408に進む。
【0103】
判定ブロック1408で、ストレージコントローラ108は、デステージ・ストリーム・グラジェント840がデステージ・ストリーム・グラジェント閾値916を上回るかどうかを判定する。デステージ・ストリーム・グラジェント840がデステージ・ストリーム・グラジェント閾値916を上回る場合、流れはブロック1412に進む。デステージ・ストリーム・グラジェント840がデステージ・ストリーム・グラジェント閾値916以下の場合、流れは判定ブロック1420に進む。
【0104】
ブロック1412で、ストレージコントローラ108が、最も大きいデステージ・ストリーム・オブジェクト836を識別している。最も大きいデステージ・ストリーム・オブジェクト836とは、最大数のキャッシュ要素352を含むデステージ・ストリーム・オブジェクト828である。
図8の例では、最も大きいデステージ・ストリーム・オブジェクト836が15個のキャッシュ要素352を有する。流れはブロック1416に進む。
【0105】
ブロック1416で、ストレージコントローラ108は、最も低い論理ブロックアドレス(LBA)を有する最も大きいデステージ・ストリーム・オブジェクト836内のキャッシュ要素352を、デステージするのにより良いキャッシュ要素352として識別する。従って
図8の例では、より良いキャッシュ要素は、最も大きいデステージ・ストリーム・オブジェクト836の最も左側のキャッシュ要素352、即ちデータコンテナE 612の最も左側のキャッシュ要素であろう。流れはブロック1416で終わり、
図12の判定ブロック1216に制御権を返す。
【0106】
判定ブロック1420で、ストレージコントローラ108は、対応する仮想ディスク348のフルストライプ書込みパーセンテージ724が、フルストライプ書込みアフィニティ値904を上回るかどうかを判定する。別の実施形態では、ストレージコントローラ108は、対応する仮想ディスク348のフルストライプ書込みパーセンテージ724が、フルストライプ書込みアフィニティ値904以上かどうかを判定する。フルストライプ書込みアフィニティ値904は、ストレージコントローラ108がライトデータキャッシュ328からフルストライプの書込みを発行することのみを選ぶ閾値である。この値は経験的試験によって最適に決められ、ホスト入出力書込み要求332の頻度及び参照の局所性、ライトデータキャッシュ328のサイズ、並びにライトデータキャッシュ328から部分ストライプ又はフルストライプ604をデステージするのにかかる時間に依存する。好ましい実施形態では、フルストライプ書込みアフィニティ値904が50%である。別の実施形態では、フルストライプ書込みアフィニティ値904が60%である。しかし、他の実施形態では、フルストライプ書込みアフィニティ値904が50%でも60%でもない。現在の仮想ディスク348のフルストライプ書込みパーセンテージ724がフルストライプ書込みアフィニティ値904以上である場合、流れはブロック1428に進む。フルストライプ書込みパーセンテージ724がフルストライプ書込みアフィニティ値904未満の場合、流れはブロック1424に進む。
【0107】
ブロック1424で、ストレージコントローラ108は、現在のキャッシュ要素352を、デステージするのにより良いキャッシュ要素352として識別する。現在のキャッシュ要素352は、現在のキャッシュ要素ポインタ820によって識別される。流れはブロック1424で終わり、
図12の判定ブロック1216に制御権を返す。
【0108】
ブロック1428で、ストレージコントローラ108は、次の満杯のデータコンテナ612を論理ブロックアドレス(LBA)によって識別する。次の満杯のデータコンテナ612とは、次に高い開始論理ブロックアドレス(LBA)を有するデステージストリーム828内のデータコンテナ612である。流れはブロック1432に進む。
【0109】
ブロック1432で、ストレージコントローラ108は、次の満杯のデータコンテナ612内の最も低い論理ブロックアドレスを有するキャッシュ要素352を、デステージするのにより良いキャッシュ要素352として識別する。ストレージコントローラ108は、次の満杯のデータコンテナ612内の最も低い論理ブロックアドレスを有するキャッシュ要素352を指すように、現在のキャッシュ要素ポインタ820を変更する。流れはブロック1432で終わり、
図12の判定ブロック1216に制御権を返す。
【0110】
次に
図15を参照すると、本発明の実施形態による、対応する仮想ディスク348のデステージ・ストリーム・グラジェント840を求めるプロセスを示すフローチャートが示されている。
図15のステップは、
図14のブロック1404に対応する。流れはブロック1504で始まる。
【0111】
ブロック1504で、ストレージコントローラ108が、デステージストリーム828内の最も大きいデステージ・ストリーム・オブジェクト836を識別する。
図8の例では、その最も大きいデステージ・ストリーム・オブジェクトは、15個のキャッシュ要素(CE)352を含むデステージ・ストリーム・オブジェクト828であろう。流れはブロック1508に進む。
【0112】
ブロック1508で、ストレージコントローラ108は、デステージストリーム828内の最も小さいデステージ・ストリーム・オブジェクト832を識別する。
図8の例では、その最も小さいデステージ・ストリーム・オブジェクトは、5個のキャッシュ要素(CE)352を含むデステージ・ストリーム・オブジェクト828であろう。流れはブロック1512に進む。
【0113】
ブロック1512で、ストレージコントローラ108は、最も大きいデステージ・ストリーム・オブジェクト836から最も小さいデステージ・ストリーム・オブジェクト832を減算して、デステージ・ストリーム・グラジェント840を得る。
図8の例では、対応する仮想ディスク348のデステージ・ストリーム・グラジェント840は15−5、即ち10個のキャッシュ要素352である。流れはブロック1512で終わり、従って
図14の判定ブロック1408に制御権を返す。
【0114】
最後に、添付の特許請求の範囲によって定める本発明の趣旨及び範囲から逸脱することなしに、本発明の同一目的を実行するための他の構造を設計し又は修正するための基礎として、開示した概念及び具体的実施形態を容易に使用できることを当業者は理解されよう。