(58)【調査した分野】(Int.Cl.,DB名)
ストレージコントローラ内で逐次入出力要求の多くの同時ストリームの効率的な入出力処理を行うための方法であって、前記ストレージコントローラがホストコンピュータからホスト入出力要求を受け取ることに応答して、
前記ストレージコントローラによって、前記ホスト入出力要求がアクティブストリームに対応するかどうかを判定すること、
前記ストレージコントローラによって、前記ホスト入出力要求がアクティブストリームに対応する場合、前記アクティブストリームに対応するアクティブリストの既存のアクティブリストエントリを更新すること、
前記ストレージコントローラによって、前記ホスト入出力要求がアクティブストリームに対応しない場合、非アクティブリストの非アクティブリストエントリを前記アクティブリストの新たなアクティブリストエントリに変換すること、
前記ストレージコントローラによって、前記新たなアクティブリストエントリを構成することを備え、
前記非アクティブリストは、使用可能であるが割り当てられていないストレージコントローラのメモリ資源を記憶し、
前記アクティブリストは、割り当てられているストレージコントローラのメモリ資源を記憶し、
前記アクティブリストは、前記アクティブリストの一方の端にアクティブリストの先頭を含み、前記アクティブリストの反対側の端にアクティブリストの末尾を含み、
前記アクティブリストの先頭は、直近に使用されたアクティブリストエントリに対応し、前記アクティブリストの末尾は、最も長い間使用されていないアクティブリストエントリに対応し、
前記ホスト入出力要求がアクティブストリームに対応するかどうかを判定することは、
前記ストレージコントローラによって、前記アクティブリストが空かどうかを判定すること、
前記アクティブリストが空の場合、前記ホスト入出力要求はアクティブストリームに対応しないこと、
前記アクティブリストが空ではない場合、
前記ストレージコントローラによって、前記アクティブリストの先頭から始めて、前記アクティブリストエントリを検索すること、
前記アクティブリストに対応するストリームウィンドウ内にアクティブリストエントリがあるかどうかを判定することであって、アクティブリストエントリが前記ストリームウィンドウ内にある場合、前記ホスト入出力要求が、アクティブストリームに対応し、アクティブリストエントリが前記ストリームウィンドウ内にない場合、前記ホスト入出力要求が、アクティブストリームに対応しない、前記アクティブリストエントリがあるかどうかを判定すること、
ストリームウィンドウ内のアクティブリストエントリが判定されるまで、又は前記ストリームウィンドウ内のアクティブリストエントリを判定することなしに前記アクティブリスト全体が検索されるまで、検索すること及び判定することを繰り返すことを備え、
前記ストリームウィンドウは、ストリームウィンドウのLBA上限とストリームウィンドウのLBA下限との間のLBA範囲を含む方法。
前記移動ウィンドウは、移動ウィンドウのLBA上限と移動ウィンドウのLBA下限との間のLBA範囲を含み、前記ホスト入出力要求の開始LBAが前記移動ウィンドウの外側にある場合は、前記方法は、
前記ホスト入出力要求と同じストリームについて前記ホスト入出力要求の前記開始LBAが直前の入出力要求に直接隣接する場合、前記ストレージコントローラによって、逐次ストリームウィンドウ変更子を用いて前記移動ウィンドウのLBA上限及びLBA下限を調整すること、
前記ホスト入出力要求と同じストリームについて前記ホスト入出力要求の前記開始LBAが直前の入出力要求に直接隣接しない場合、前記ストレージコントローラによって、準逐次ストリームウィンドウ変更子を用いて前記移動ウィンドウのLBA上限及びLBA下限を調整することを更に備える、請求項2に記載の方法。
前記ストリームリサイクル時間は、より最近の最後のバーストからの時間値により大きい重みを加え、より離れた最後のバーストからの時間値により小さい重みを加えることを含む加重平均である、請求項7に記載の方法。
【発明を実施するための形態】
【0013】
本発明は、ホストコンピュータの逐次読取要求及び書込み要求(sequential read and write requests)に基づき、ストレージコントローラ内の逐次入出力資源の割り当て(sequential I/O resource allocation)を改善することを対象とする。オンボードメモリ資源(memory resource)の量を制限することによってストレージコントローラの費用を低く抑えるという要求に留意し、逐次入出力処理の効率及び性能を改善することが必要である。
【0014】
逐次入出力の性能を改善する1つの方法は、現在アクティブな全ての入出力ストリームについて、キャッシュメモリの割当を追跡及び実施するために、単純にストレージコントローラのメモリ容量を可能な限り増やすことである。しかし、そのように単純にメモリを増やすことは通常、ホストコンピュータが一切要求しない可能性があり、又ははるかに後になって要求する可能性がある低頻度アクセスデータ又は無用のデータでストレージコントローラのメモリを占有することになる。加えて、ストレージコントローラが複数のホストコンピュータに結合されるシステムでは、特定のホストコンピュータに関する大量のデータでキャッシュメモリを占有することは、他のホストコンピュータがストレージコントローラのメモリ資源を利用するのを妨げる場合があり、他のホストコンピュータの読取性能及び/又は書込み性能を著しく制限する。
【0015】
各ホストコンピュータは、そのホストコンピュータが実行するアプリケーション及び他のプログラムに基づき、データの読取要求及び書込み要求を発行する。殆どの場合、或るホストコンピュータが現在実行しているアプリケーション及び他のプログラムは、別のホストコンピュータが実行しているアプリケーション及び他のプログラムと異なる。従って、各ホストコンピュータは、ホストストリームとして知られる1組の異なる逐次読取要求又は書込み要求を発行する。所与のホストコンピュータは、複数のホストストリームを発行することができる。
【0016】
静的リードキャッシュのサイズは、比較的一定の読取要求ストリームを提供するホストコンピュータにとって概して有効であるが、このことは、ストレージコントローラに読取要求のバーストを発行するホストコンピュータにとっては当てはまらないことが多々ある。バーストとは、同じホストコンピュータからの連続した逐次ホスト読取要求群である。ホスト読取要求のバーストは、最初の待ち行列の高度な長さ(high initial queue depth)を作り出す。ホスト読取要求のバーストの合計が、リードキャッシュの静的先読みサイズ(static read ahead size)を上回ることになる場合、ホストストリームがやがて先読みに追い付き、バーストごとにキャッシュミスが起こり、その結果、読取性能が低下する。
【0017】
全てのホストストリームの重要な統計情報を追跡し、最もアクティブな逐次入出力ストリームに限られたメモリ資源を割り当てるストレージコントローラが必要とされている。より新しくよりアクティブなストリームにメモリ資源を提供するために、非アクティブストリーム又はより低い若しくはより古い利用度を有するストリームをリサイクルする。
【0018】
次に
図1aを参照すると、本発明の実施形態による、第1の非ホストベースのデータストレージシステム100の構成要素を示すブロック図が示されている。
データストレージシステム100は、1つ又は複数のホストコンピュータ104を含む。ホストコンピュータ104は概してサーバであるが、デスクトップやモバイルコンピュータでも良い。ホストコンピュータ104は、ホストバス又はネットワーク112を介したストレージコントローラ108への読取/書込み要求を生成するアプリケーションプログラムを実行する。一実施形態では、ホストバス又はネットワーク112は、SCSI、FC−AL、USB、ファイアワイヤ、SSA、SAS、SATA、インフィニバンド等のバスである。別の実施形態では、ホストバス又はネットワーク112は、イーサネット、iSCSI、ファイバチャネル、SSA、ESCON、ATM、FICON、NVMe、インフィニバンド等のネットワークである。
【0019】
ホストコンピュータ104は、1つ又は複数のストレージコントローラ108とインターフェイスするが、明瞭にするためにストレージコントローラ108は1つしか図示していない。一実施形態では、ストレージコントローラ108がRAIDコントローラである。別の実施形態では、ストレージコントローラ108が、プロビジョニング、仮想化、複製、バックアップ機器等のストレージ機器である。ストレージコントローラ108は、ストレージデバイスバス120を介して、ストレージサブシステム124内のストレージデバイス116a、116bとの間でデータをやり取りする。ストレージデバイスバス120は、これだけに限定されないが、SCSI、ファイバチャネル、SAS、SATA、又はSSAを含む、ストレージコントローラ108とストレージデバイス116との間でデータを直接伝送するための任意の適切なストレージバス又はバス群である。
【0020】
一実施形態では、ストレージサブシステム124が12個のストレージデバイス116を含む。他の実施形態では、ストレージサブシステム124が、12個未満の又はそれを上回るストレージデバイス116を含み得る。ストレージデバイス116は、ハードディスクドライブ、ソリッドステートドライブ、光学ドライブ、及びテープドライブを含む様々な種類のストレージデバイスを含む。特定のストレージデバイスの種類の範囲内で、性能に応じて組織化されるストレージデバイス116の幾つかの下位区分がある場合がある。例えば、ハードディスクドライブは、キャッシュサイズ、ドライブRPM(例えば5,400、7,200、10,000、及び15,000)、待ち行列の長さ、ランダム転送速度、又は逐次転送速度に応じて組織化され得る。
【0021】
次に
図1bを参照すると、本発明の実施形態による、第2の非ホストベースのデータストレージシステム128の構成要素を示すブロック図が示されている。非ホストベースのデータストレージシステム128は、ストレージコントローラ108がストレージデバイス116と共にストレージサブシステム132内にあることを除き、非ホストベースのデータストレージシステム100に似ている。
図1bに示す実施形態では、ストレージコントローラ108が単一のRAIDコントローラ108である。但し、他の実施形態では、ストレージコントローラ108が複数のRAIDコントローラ108を表す。
【0022】
次に
図1cを参照すると、本発明の実施形態による、第3の非ホストベースのデータストレージシステム136の構成要素を示すブロック図が示されている。データストレージシステム136は、ストレージコントローラ108が2つの冗長なストレージコントローラ108a、108bを表すことを除き、データストレージシステム100及び128に似ている。一実施形態では、ストレージコントローラ108a、108bの一方が故障した場合にホスト104がストレージデバイス116を引き続き使用できるようにするために、ストレージコントローラ108a、108bがアクティブ−アクティブフェイルオーバ(active-active failover)を利用する。コントローラ間メッセージングリンク140は、書込みデータをミラーリングし、フェイルオーバ及びフェイルバック操作(failback operation)を同期するために、ストレージコントローラ108a、108b間の通信及びデータ経路を提供する。
【0023】
次に
図2aを参照すると、本発明の実施形態による、第1のホストベースのデータストレージシステム200の構成要素を示すブロック図が示されている。第1のホストベースのデータストレージシステム200は、ストレージコントローラ108がホストコンピュータ104内にあることを除き、
図1aの第1の非ホストベースのストレージシステム100に似ている。ストレージコントローラ108は、ホストコンピュータ104のローカルバスを介してインターフェイスし、ローカルバスは、ラピッドIO、PCI、PCI−X、又はPCIエクスプレスを含む、ホストコンピュータ104のCPUとストレージコントローラ108との間の高速伝送用の任意の適切なバスとすることができる。ストレージコントローラ108は、ホストコンピュータ104のマザーボード上に組み込むことができ、又はホストコンピュータ104内の拡張ボード若しくは他の形式のアセンブリとすることができる。
【0024】
次に
図2bを参照すると、本発明の実施形態による、第2のホストベースのデータストレージシステム204の構成要素を示すブロック図が示されている。第2のホストベースのデータストレージシステム204は、ストレージサブシステム124の機能をホストコンピュータ104内に組み込む。データストレージシステム204は、高度に統合された独立型のデータストレージシステムを表す。
【0025】
次に
図2cを参照すると、本発明の実施形態による、第3のホストベースのデータストレージシステム208の構成要素を示すブロック図が示されている。第3のホストベースのデータストレージシステム208は、第1のホストベースのデータストレージシステム200に似ているが、組み込まれたストレージコントローラ108の代わりにソフトウェアに基づく手法を使用する。ホストコンピュータ104とストレージデバイスバス120との間のインターフェイスは、適切なデータ及びコマンドバッファリング機能並びにプロトコル制御及び低レベル誤り処理(low-level error handling)を実現する、ホストバスアダプタ212によって提供される。CPU216はメモリ220内のアプリケーション224を実行し、メモリ220とストレージサブシステム124内のストレージデバイス116a、116bとの間のデータフローを制御する。
【0026】
次に
図3を参照すると、本発明の実施形態による、データストレージシステム300を示すブロック図が示されている。データストレージシステム300は、バス又はネットワーク112を介してストレージコントローラ108に相互接続される1つ又は複数のホストコンピュータ104を含む。ホストコンピュータ104は、ホスト入出力要求332(host I/O request)の複数のグループである、ホストストリーム308を生成する。
【0027】
ストレージコントローラ108は、CPU312に結合されるメモリ316内に記憶されるプログラム命令を実行する、CPU又はプロセッサ312を含む。CPU312は、インテル(Intel)x86互換プロセッサ、組込みプロセッサ、モバイルプロセッサ、及び/又はRISCプロセッサ等、ストレージコントローラ108のプログラムを実行するのに適した任意の処理装置を含む。CPU312は、書替え可能ゲートアレイ(FPGA)、メモリコントローラ、ノースブリッジ装置(North Bridge device)、及び/又はサウスブリッジ装置(South Bridge device)を含む幾つかの装置を含み得る。
【0028】
メモリ316は、揮発性メモリ316、不揮発性メモリ316、又は揮発性メモリ及び不揮発性メモリの両方の組合せ316の1つ若しくは複数の形態とすることができる。メモリ316はファームウェアを含み、そのファームウェアは、本発明のプロセス用のプログラム命令を含む、CPU312が取り出して実行するプログラム命令を含む。不揮発性メモリ316の例には、これだけに限定されないが、フラッシュメモリ、SD、EPROM、EEPROM、ハードディスク、及びNOVRAMが含まれる。揮発性メモリ316は、様々なデータ構造及びユーザデータを記憶する。揮発性メモリ316の例には、これだけに限定されないが、SRAM、DDR RAM、DDR2 RAM、DDR3 RAM、Z−RAM、TTRAM、A−RAM、ETA RAM、及び他の形態の一時メモリが含まれる。
【0029】
メモリ316は、リードデータキャッシュ324及び一部の実施形態ではライトデータキャッシュ328を含み、これらキャッシュはホストコンピュータ104に対して改善された読み書き性能をそれぞれ提供する。メモリ316は、データストリーム・メタデータ・メモリ320も含む。データストリーム・メタデータ・メモリ320は、ホスト入出力要求332に関係するパラメータを記憶し、逐次入出力操作を制御するために使用される。
【0030】
ストレージコントローラ108は、1つ又は複数のストレージデバイス116a〜116nを含むストレージサブシステム124、132に結合される。頻繁にアクセスされるデータはストレージデバイス116からリードデータキャッシュ324内に読み取られ、リードデータキャッシュ324では、データをホスト読取要求332に応答してストレージデバイス116から直接提供するよりもはるかに速く提供することができる。書込みデータは、ライトデータキャッシュ328内に最初に記憶され、かかるデータはストレージデバイス116に直接送られる書込みよりもはるかに速い。
【0031】
一部の実施形態では、ストレージコントローラ108がタイマ340を含む。タイマ340は、CPU312によって制御されるハードウェアのタイマとすることができ、又はCPU312上で実行されるソフトウェアルーチンでも良い。タイマ340は、バースト616間の時間を測定し、以下の説明及び図中で説明する。タイマ340は、任意の数のタイマを表すことができ、本発明では各論理ボリューム、VDisk、又はストレージデバイス804に対応する各アクティブストリーム912a〜jに割り当てられる1つのタイマ340がある。
【0032】
ストレージコントローラ108は、本発明の範囲又は動作から逸脱することなしに、無数の異なる機能上の構成及びアーキテクチャで機能的に構成され得ることを理解すべきである。
【0033】
次に
図4を参照すると、本発明の実施形態による、ホストデータストリーム308を示すブロック図が示されている。ホストデータストリーム308は、バースト又はホストバーストとして知られる、連続したホスト入出力要求332群を含む。ホストデータストリーム308は、任意の数のバースト又はホストバーストを含み得るが、4つのホストバースト、つまりホストバースト0 404、ホストバースト1 412、ホストバースト2 420、及びホストバースト3 428を図示する。各ホストバースト404、412、420、428は、同数の又は異なる数のホスト入出力要求332を含むことができる。ホストバースト0 404は、ホスト入出力要求0 408a〜ホスト入出力要求q 408qを含む。ホストバースト1 412は、ホスト入出力要求0 416a〜ホスト入出力要求t 416tを含む。ホストバースト2 420は、ホスト入出力要求0 424a〜ホスト入出力要求w 424wを含む。ホストバースト3 428は、ホスト入出力要求0 432a〜ホスト入出力要求z 432zを含む。
【0034】
各ホスト入出力要求332、408、416、424、及び432は、入出力長(I/O length)440及び入出力アドレス(I/O address)444を含む。入出力長440は、ストレージデバイス116から読み取るべき、又はストレージデバイス116に書き込むべきブロック数又はバイト数であり、入出力アドレス444は、ホスト入出力要求332、408、416、424、及び432が宛てられる(directed)開始アドレスである。
【0035】
次に
図5を参照すると、本発明の実施形態による、第1のホストデータストリーム308aの一例を示す図が示されている。ホストデータストリーム308aは、或る期間528にわたって受け取られる複数のホスト入出力要求332を含み、ホスト入出力要求332は、ホスト入出力要求504として個々に識別される。
図5は、逐次ホスト入出力要求504a、504b、及び504cの第1のバースト、逐次ホスト入出力要求504g、504h、504i、及び504jの第2のバースト、並びに逐次ホスト入出力要求504n、504o、504p、及び504qの第3のバーストを示す。ストレージコントローラ108は、逐次入出力要求の3つのバーストが受け取られる間に他の非逐次ホスト入出力要求も受け取り、それらの非逐次ホスト入出力要求は入出力要求504d、504e、504f、504k、504l、及び504mとして識別される。
【0036】
各ホスト入出力要求504は関連する入出力サイズ516を有し、簡潔にするために、この例では全ての入出力要求504を同じ入出力サイズ516によって示す。更に、各入出力要求504が、開始LBAアドレス524及び終了LBAアドレス532を含むLBA範囲520にアドレス指定される。ストレージコントローラ108は、各入出力要求504を特定の時点528において受け取る。例えば、ストレージコントローラ108は、逐次ホスト入出力要求0 504aを時点t
0において、逐次ホスト入出力要求1 504bを時点t
1において、逐次ホスト入出力要求2 504cを時点t
2において受け取る。
【0037】
ストレージコントローラ108は、受け取られる各ホスト入出力要求504が逐次的か非逐次的かを判定し、これについては以下のフローチャート及び添付の説明に関してより詳細に説明する。逐次ホスト入出力要求504では、ストレージコントローラ108が、ストリームウィンドウ(stream window)508及び移動ウィンドウ(move window)512の両方を設定し、移動ウィンドウ512は、ストリームウィンドウ508に使用されるLBA範囲520よりも小さく、ストリームウィンドウ508の境界内に含まれるLBA範囲520を表す。ストリームウィンドウ508は、現在のストリーム308aのLBA範囲を設定するのに対し、移動ウィンドウ512及びストリームウィンドウ508の境界を変えなければならないときを決定するために、ストレージコントローラ108は移動ウィンドウを使用する。逐次ホスト入出力要求504が、ストリームウィンドウ508内にあるが、ストリームウィンドウ508に対応する移動ウィンドウ512の外側にある場合、移動ウィンドウ512及びストリームウィンドウ508の境界を変えなければならない。目的は、同じストリーム308aの逐次入出力要求504を、移動ウィンドウ512及びストリームウィンドウ508内に保つことである。
【0038】
ストレージコントローラ108は、逐次入出力要求504a、504b、及び504cのLBAに基づいて移動ウィンドウ512aを最初に設定する。入出力要求504d、504e、及び504fは、明らかに移動ウィンドウ512a及びストリームウィンドウ508aの両方の外側にあり、このことは、移動ウィンドウ512及びストリームウィンドウ508を変えなければならないことをストレージコントローラ108に知らせる。次にストレージコントローラ108は、入出力要求504g、504h、504i、及び504jが逐次入出力要求504であることを設定し、移動ウィンドウ512bの境界を有するように移動ウィンドウ512を変更し、ストリームウィンドウ508bの境界を有するようにストリームウィンドウ508を変更する。入出力要求504k、504l、及び504mは、明らかに移動ウィンドウ512b及びストリームウィンドウ508bの両方の外側にあり、このことは、移動ウィンドウ512及びストリームウィンドウ508を変えなければならないことをストレージコントローラ108に知らせる。次にストレージコントローラ108は、入出力要求504n、504o、504p、及び504qが逐次入出力要求504であることを設定し、移動ウィンドウ512cの境界を有するように移動ウィンドウ512を変更し、ストリームウィンドウ508cの境界を有するようにストリームウィンドウ508を変更する。移動ウィンドウ512及びストリームウィンドウ508の境界を追跡するプロセスは本発明の核心であり、
図10〜
図17に関して詳しく説明する。
【0039】
次に
図6aを参照すると、本発明の実施形態による、第2のホストデータストリーム308bの一例を示す図が示されている。6つのバースト616群が或る期間612にわたってストレージコントローラ108によって受け取られたと示されており、バースト616ごとにメガバイト(MB)単位のバーストサイズ608が示されている。
図6aに示す例は、バースト0 616a、バースト1 616b、バースト2 616c、バースト3 616d、バースト4 616e、及びバースト5 616fとして識別する、逐次ホスト入出力要求332の6つのバーストを示す。
【0040】
バースト間の時間t
lbが、連続した2つのバースト616ごとの間に示されている。バースト0 616aとバースト1 616bとの間の時間はt
lb0である。バースト1 616bとバースト2 616cとの間の時間はt
lb1である。バースト2 616cとバースト3 616dとの間の時間はt
lb2である。バースト3 616dとバースト4 616eとの間の時間はt
lb3である。最後に、バースト4 616eとバースト5 616fとの間の時間はt
lb4である。
【0041】
次に
図6bを参照すると、本発明の実施形態による、バーストのパラメータを示す図が示されている。メタデータメモリ320内に記憶されるバーストのパラメータを説明するために、
図6bは
図6aの例を参照する。
【0042】
各バースト616は、関連するバースト長620のパラメータを有し、バースト0 616aは2MBのバースト長620を有し、バースト1 616bは1MBのバースト長620を有し、バースト2 616cは6MBのバースト長620を有し、バースト3 616dは2MBのバースト長620を有し、バースト4 616eは1MBのバースト長620を有し、バースト5 616fは2MBのバースト長620を有する。各バースト616の間は、最後のバーストからの時間t
lb624である。T
lb0は200msであり、T
lb1は30msであり、T
lb2は60msであり、T
lb3は120msであり、T
lb4は200msである。
【0043】
次に
図7を参照すると、本発明の実施形態による、バースト616ごとの未処理の入出力を示す図である。
図7は、ホスト入出力要求332のバースト616に関する、本発明の経時的な様々なパラメータの実際の対話を示す。単純にするために、全てのホスト入出力要求332の入出力長440を「1」(例えばブロック)と仮定する。
【0044】
バースト616に関する最初のホスト入出力要求332の前、未処理の入出力704はゼロである。バースト616に関する最初のホスト入出力要求332をストレージコントローラ108が受け取ると、未処理の入出力704が(最初のホスト入出力要求332のサイズを反映する)「1」になり、第1の実施形態ではタイマ340が止められ(712)、或いは第2の実施形態では停止タイムスタンプを記憶する(720)。
【0045】
更に多くのホスト入出力要求332が受け取られると、ストレージコントローラ108は未処理の入出力704を調整する。しかし、コマンド完了708が生じると、ストレージコントローラ108は、完了した各ホスト入出力要求708のサイズずつ未処理の入出力704を減らす。未処理の入出力704がゼロに戻ると(現在のバースト616の終了を意味する)、ストレージコントローラ108は、第1の実施形態ではタイマを開始し(716)、或いは第2の実施形態では開始タイムスタンプをメタデータメモリ320内に記憶する(724)。次いで、この一連の操作を後続のバースト616ごとに繰り返す。
【0046】
次に
図8を参照すると、本発明の実施形態による、論理ボリューム、VDisk、及びストレージデバイスのメタデータ808を示す図が示されている。逐次ホスト入出力要求332、504は論理ボリューム、VDisk、又はストレージデバイス116のどれに宛てられても(directed)良く、ストレージコントローラ108は、1つ又は複数の論理ボリューム、VDisk、又はストレージデバイス116を有する。
図8は、ストレージコントローラ108が、804a〜804eとして識別する5つの論理ボリューム、VDisk、又はストレージデバイス116を有するシステムを示す。
【0047】
各論理ボリューム、VDisk、又はストレージデバイス804は、対応する論理ボリューム、VDisk、又はストレージデバイスのメタデータセット808を有し、各メタデータセット808は、他のメタデータセット808とは独立して管理される。好ましい実施形態では、ストレージコントローラ108が、約1,000個の論理ボリューム、VDisk、又はストレージデバイス804を追跡し(track)、最初の32個の論理ボリューム、VDisk、又はストレージデバイス804については65個の逐次入出力ストリーム308を追跡し、最初の32個の論理ボリューム、VDisk、又はストレージデバイス804を超える任意の論理ボリューム、VDisk、又はストレージデバイス804については4つの逐次入出力ストリーム308を追跡する。
【0048】
代替的実施形態では、各論理ボリューム、VDisk、又はストレージデバイス804に割り当てられるアクティブストリームリスト908の代わりに、全ての論理ボリューム、VDisk、又はストレージデバイス804が使用可能なアクティブストリームの共通のプール908がある。管理が更に複雑になる不利益はあるが、この実施形態には、各論理ボリューム、VDisk、又はストレージデバイス804にストリームを割り当てる際に、又はそれらへのストリームを制限する際に更なる柔軟性があるという利点がある。
【0049】
次に
図9aを参照すると、本発明の実施形態による、データストリーム・メタデータ・メモリ320内に記憶されたアクティブリスト908及び非アクティブリスト904を示すブロック図が示されている。メタデータメモリ320は、本発明のプロセスで使用されるパラメータを記憶する。
【0050】
各論理ボリューム、VDisk、又はストレージデバイス804は、対応するアクティブリスト908及び非アクティブリスト904を有する。各論理ボリューム、VDisk、又はストレージデバイス804が使用可能な所定数のストリーム資源904a〜zがあり、各ストリーム資源904a〜zは、単一の逐次ホスト入出力ストリーム308のメタデータパラメータを記憶する。最初は、全てのストリーム資源904a〜zが非アクティブリスト904上にある。後で個々のストリーム308が追跡されると、それらのストリーム資源904a〜zがアクティブストリーム912a〜zになる。如何なる場合でも、ストリーム資源904a〜zの数にアクティブストリーム912a〜zの数を加えた数は常に所定数に等しい。好ましい実施形態では、ストリーム資源904a〜zにアクティブストリーム912a〜zを加えた所定数が「65」に等しい。この数は、ストレージコントローラ108上のメモリ316のサイズ、データ構造808のサイズ、及び同時に追跡するのが生産的である逐次ホスト入出力ストリーム308の数によって決まる。
【0051】
非アクティブリスト904は、新たなストリーム308に割り当てることができる利用可能資源を含む。ストリーム資源904a〜zがアクティブストリーム912a〜zに割り当てられると、非アクティブリストは1つのストリーム資源904a〜zずつ減らされる。或る時点で、全てのストリーム資源904a〜zがアクティブストリーム912a〜zに割り当てられる場合がある。その場合、非アクティブリスト904上にはそれ以上のストリーム資源904a〜zがなく、ストレージコントローラ108は、新たなストリーム308にストリーム資源904a〜zを割り当てるために、アクティブリスト908上の少なくとも1つのアクティブストリーム912a〜zを解放しなければならない。非アクティブリスト904上の全てのストリーム資源904a〜zはあらゆる点で等しく、新たなストリーム308のためにどのストリーム資源904a〜zを選択しても良い。
【0052】
アクティブリスト908は、現在の論理ボリューム、VDisk、又はストレージデバイス804に宛てられるストリーム308に関するアクティブストリーム912a〜zを含む。電源投入時、全てのアクティブリスト908が空であり、アクティブストリーム912a〜zを含まない。ストリーム資源904a〜zがアクティブストリーム912a〜zに割り当てられると、アクティブリスト908にデータ投入される。或る時点で、全てのストリーム資源904a〜zがアクティブリスト908に割り当てられる場合があり、アクティブリスト908は所定数のアクティブストリーム912a〜zを含む。アクティブストリーム912a〜zはアクティブリスト908内で順序付けられ、直近に使用されたアクティブストリームがアクティブリストの先頭916に配置される。従って、最も長い間使用されていないアクティブストリームが、アクティブリストの先頭916とは反対側のアクティブリストの末尾920に配置される。
【0053】
各アクティブストリームエントリ912a〜zは、各アクティブストリーム912を追跡するためにストレージコントローラ108が使用する幾つかのメタデータパラメータを含む。ストリームラストヒット(t
lh)924の値は、対応するストリームが最後にアクセスされた時間を記憶する。現在のストリームウィンドウ508は、ストリームウィンドウのLBA上限928及びストリームウィンドウのLBA下限932によって指定される境界を有する。現在の移動ウィンドウ512は、移動ウィンドウのLBA上限936及び移動ウィンドウのLBA下限940によって指定される境界を有する。各ストリーム308は、ストリームリサイクル時間944も有し、ストリームリサイクル時間944は、新たに使用可能なストリーム資源904a〜zを作り出すために、アクティブストリーム912をいつ非アクティブリストにリサイクルしなければならないのかを計算するために使用される。各ストリーム308は、ストリームの未処理の入出力960のカウントも有し、このカウントを、ストレージコントローラ108が使用してストリーム308がいつ開始/停止するのかを求める。ストリームの未処理の入出力960は、
図7の未処理の入出力によって識別されるカウントを記憶する。
【0054】
図9bに示すように、ストレージコントローラ108は、最後のバーストからの時間(t
lb)待ち行列948のための最後のバーストからの時間(t
lb)エントリを計算するために、バースト開始時間964a及びバースト停止時間964bを追跡する。バースト開始時間964aは、ストリームの未処理の入出力960が1から0に遷移するときに記憶される。バースト停止時間964bは、ストリームの未処理の入出力960が0から1に遷移するときに記憶される。
【0055】
最後のバーストからの時間待ち行列(time since last burst queue)948は、指定された数の最後のバーストからの時間エントリ948a〜jの巡回待ち行列(circular queue)である。好ましい実施形態では、最後のバーストからの時間待ち行列948上には10個の最後のバーストからの時間エントリa〜jがある。他の実施形態では、10個のエントリよりも少ない、又は多いエントリがあっても良い。最後のバーストからの時間待ち行列948内の現在のエントリは、現在の最後のバーストからの時間ポインタ952によって識別され、このポインタは、本発明のプロセスによって指示される通りに単方向にインクリメントする(956)。
【0056】
ストレージコントローラ108は、最後のバーストからの時間t
lbを2つの方法のうちの1つで測定する。一実施形態では、ストレージコントローラがタイマ340を含む。ストレージコントローラ108は、バースト616が終了するときにタイマ340を開始し、次のバースト616が開始するときにタイマ340を停止する。タイマ340の値は、現在の最後のバーストからの時間ポインタ952によって識別されるメタデータメモリ320内の位置において、最後のバーストからの時間t
lb948a〜jとして記憶される。別の実施形態では、メタデータメモリ320がt
lbバースト開始時間964a及びt
lbバースト停止時間のスタンプ964bを含む。t
lbバースト開始時間964aは、バースト616の終了時に記憶される自走タイマ340の値である。t
lbバースト停止時間964bは、次のバースト616の開始時に記憶される自走タイマ340の値である。t
lbバースト開始時間964aとt
lbバースト停止時間964bとの差が、現在の最後のバーストからの時間ポインタ952によって識別されるメタデータメモリ320内の位置において、最後のバーストからの時間t
lbエントリ948a〜jとして記憶される。
【0057】
最後のバーストからの時間待ち行列948について巡回待ち行列を示すが、複数のバースト長948a〜jを記憶するために、複数のデータ構造を含む任意の数のデータ構造を利用できることを当業者は理解すべきである。
【0058】
次に
図10を参照すると、本発明の実施形態による、初期化プロセスを示すフローチャートが示されている。流れはブロック1004で始まる。
ブロック1004で、ストレージコントローラ108が、所定数のストリーム資源904a〜jを有する全ての非アクティブリスト904にデータを供給する(populate)。好ましい実施形態では、ストリーム資源904a〜jの所定数が65個である。他の実施形態では、ストリーム資源904a〜jの所定数が65個よりも多く、又は65個未満である。流れはブロック1008に進む。
【0059】
ブロック1008で、ストレージコントローラ108は、全てのウィンドウのLBA範囲928、932、936、及び940、並びに時間ラストヒット値(time last hit value)924をゼロに設定する。このことは、逐次入出力ストリーム308を追跡することに備えて論理ボリューム、VDISK、又はストレージデバイスのメタデータ808を初期化するために、論理ボリューム、VDISK、又はストレージデバイス804ごとに行う。流れはブロック1012に進む。
【0060】
ブロック1012で、ストレージコントローラ108が、各論理ボリューム、VDISK、又はストレージデバイスのメタデータ808内のストリームリサイクル時間944を既定値に設定する。このブロックでは、アクティブストリーム912を必要に応じてリサイクルすべきときを判定するための既定値を設定する。好ましい実施形態では、ストリームリサイクル時間の既定値が6秒である。他の実施形態では、ストリームリサイクル時間944の既定値が6秒未満であるか又は6秒を超える。流れはブロック1012で終わる。
【0061】
次に
図11を参照すると、本発明の実施形態による、新たな入出力要求の更新プロセスを示すフローチャートが示されている。この新たな入出力更新プロセスは、入力されるホスト入出力要求332を追跡し、未処理の入出力704に基づき、ストリームリサイクル時間944をアクティブストリーム912a〜jごとに調整する。流れはブロック1104で始まる。
【0062】
ブロック1104で、ストレージコントローラ108が、ホストコンピュータ104からホスト入出力要求332を受け取る。流れはブロック1108に進む。
ブロック1108で、ストレージコントローラ108は、受け取ったホスト入出力要求332に対応するアクティブストリーム912a〜jについて、未処理の入出力カウント960をインクリメントする。未処理の入出力カウント960は、まだ完了していない、論理ボリューム、VDisk、又はストレージデバイス804に発行された入出力要求332の現在のカウントである。流れは判定ブロック1112に進む。
【0063】
判定ブロック1112で、ストレージコントローラ108は、未処理の入出力カウント960が「1」に等しいかどうかを判定する。未処理の入出力カウント960が「1」に等しい場合、現在のアクティブストリーム912a〜j内で新たなバースト616が開始している(即ち、ブロック1104でホスト入出力要求332を受け取る前に未処理の入出力カウント960はゼロに等しかった)。未処理の入出力カウント960が「1」に等しい場合、流れはブロック1116に進む。未処理の入出力カウント960が「1」に等しくない場合、新たなバースト616は開始しておらず、流れは終了する。本発明では、バースト616がいつ開始及び終了するのかを知り、最後のバーストからの時間948のメタデータを保つことだけが重要である。
【0064】
ブロック1116で、ストレージコントローラ108は、受け取ったホスト入出力要求332に対応するアクティブストリーム912a〜jのバーストタイマ340を停止する。未処理の入出力カウント960が「0」から「1」に遷移してから新たなバースト616が開始しており、従って最後のバーストからの時間948を記録しなければならない。流れはブロック1120に進む。
【0065】
ブロック1120で、ストレージコントローラ108は、バーストタイマ340の値をt
lbバースト停止時間964bとして記憶し、最後のバーストからの時間値948をバースト停止時間964bとバースト開始時間964aとの差として計算し、現在の最後のバーストからの時間ポインタ952に対応する最後のバーストからの時間待ち行列948の位置に、その最後のバーストからの時間値を記憶する。流れはブロック1124に進む。
【0066】
ブロック1124で、ストレージコントローラ108は、現在の最後のバーストからの時間ポインタ952をインクリメントし、バーストタイマ340を初期化する。バーストタイマが自走の実施形態では、バーストタイマ340を初期化する必要はない。しかし、これらの実施形態では、バースト開始時間値964aを記憶する必要がある。記憶することで、最後のバーストからの次の時間値948a〜jを記憶するために、最後のバーストからの時間待ち行列の次の位置948を用意し、現在のバースト616がいつ終了するのかをカウントし始めるようにバーストタイマ340を準備する。流れは判定ブロック1128に進む。
【0067】
判定ブロック1128で、ストレージコントローラ108は、最後のバーストからの時間待ち行列948が満杯(full)かどうかを判定する。待ち行列948a〜j内の全ての位置がバーストタイマ340の値を含む場合、最後のバーストからの時間待ち行列948は満杯である。最後のバーストからの時間待ち行列948が満杯である場合、流れはブロック1132に進む。最後のバーストからの時間待ち行列948が満杯でない場合、流れは終了する。新たなストリームリサイクル時間944は、最後のバーストからの時間待ち行列948が満杯である場合にのみ計算される。最後のバーストからの時間待ち行列948が満杯になる前は、ストリームリサイクル時間944に既定値が使用される。好ましい実施形態では、ストリームリサイクル時間944の既定値が6秒である。他の実施形態では、ストリームリサイクル時間944の既定値が6秒未満であるか又は6秒を超える。
【0068】
ブロック1132で、ストレージコントローラ108は、最後のバーストからの時間待ち行列948の加重平均を計算してストリームリサイクル時間944を作り出す。より最近の最後のバーストからの時間値948a〜jに対して、より古い最後のバーストからの時間値948a〜jよりも大きい重みを与えるために、加重平均が好ましい。好ましい実施形態では、それぞれの最後のバーストからの時間待ち行列948内に10個の最後のバーストからの時間値948a〜jがある。更に、好ましい実施形態では、加重平均は、重み付けしたそれぞれの最後のバーストからの時間値948a〜jの和を10の階乗で割った値に等しい。ストレージコントローラ108は、直近のt
lb値に10を掛け、次に新しいt
lb値に9を掛け、最も離れたt
lb値に1を掛けるまでそのように続けることにより、重み付けされた最後のバーストからの時間値948a〜jを計算する。直近のt
lb値は、最後のバーストからの時間ポインタ952の現在の位置によって識別される。他の実施形態では、加重平均を異なるように計算し、又はストリームリサイクル時間944が、最後のバーストからの時間待ち行列948内の値の単純な非加重平均である。流れはブロック1136に進む。
【0069】
ブロック1136で、ストレージコントローラ108は、受け取ったホスト入出力要求332に対応するストリームリサイクル時間944の位置に、ブロック1132の計算済みのストリームリサイクル時間を記憶する。流れはブロック1136で終わる。
【0070】
次に
図12を参照すると、本発明の実施形態による、コマンド完了プロセスを示すフローチャートが示されている。流れはブロック1204で始まる。
ブロック1204で、ホスト入出力要求332が完了する。ホスト入出力要求332は、特定の論理ボリューム、VDisk、又はストレージデバイス804に宛てられている。流れはブロック1208に進む。
【0071】
ブロック1208で、ストレージコントローラ108は、完了したホスト入出力要求332に対応するアクティブストリーム912a〜jについて、未処理の入出力カウント960をデクリメントする。今では、完了したホスト入出力要求332が宛てられた論理ボリューム、VDisk、又はストレージデバイス804の未処理の入出力704が1つ減っている。流れは判定ブロック1212に進む。
【0072】
判定ブロック1212で、ストレージコントローラ108は、未処理の入出力カウント960がゼロに等しいかどうかを判定する。未処理の入出力カウント960がゼロに等しい場合、現在のバースト616が終了しており、流れはブロック1216に進む。未処理の入出力カウント960がゼロに等しくない場合、現在のバースト616が終了しておらず、流れは判定ブロック1212で終わる。
【0073】
ブロック1216で、ストレージコントローラ108は、完了したホスト入出力要求332に対応するアクティブストリーム912a〜jのバーストタイマ340を初期化し、開始する。流れはブロック1220に進む。
【0074】
ブロック1220で、ストレージコントローラ108は、完了したホスト入出力要求332に対応するアクティブストリーム912a〜jのバースト開始時間964aとしてバーストタイマの値340を記憶する。流れはブロック1220で終わる。
【0075】
次に
図13を参照すると、本発明の実施形態による、入出力要求332の更新プロセスを示すフローチャートが示されている。流れはブロック1304で始まる。
ブロック1304で、ストレージコントローラ108が、ホストコンピュータ104からホスト入出力要求332を受け取る。流れはブロック1308に進む。
【0076】
ブロック1308で、ストレージコントローラ108は、ホスト入出力要求332が宛てられた論理ボリューム、VDisk、又はストレージデバイス804に対応するアクティブリスト908を検索する。流れは判定ブロック1312に進む。
【0077】
判定ブロック1312で、ストレージコントローラ108は、受け取ったホスト入出力要求332の開始LBA524が、アクティブストリームウィンドウ508内にあるかどうかを判定する。アクティブリスト908を検索し、開始LBA524をストリームウィンドウ508の範囲と比較するプロセスについては、
図14に関してより詳細に説明する。受け取ったホスト入出力要求332の開始LBA524がアクティブストリームウィンドウ508内にある場合、流れはブロック1336に進む。受け取ったホスト入出力要求332の開始LBA524がアクティブストリームウィンドウ508内にない場合、流れは判定ブロック1316に進む。
【0078】
判定ブロック1316で、ストレージコントローラ108は、ホスト入出力要求332が宛てられた論理ボリューム、VDisk、又はストレージデバイス804に対応する非アクティブリスト904が空かどうかを判定する。ホスト入出力要求332はアクティブストリームウィンドウ508内になく、従って、新たなアクティブストリーム912a〜jを作成する必要がある。ホスト入出力要求332が宛てられた論理ボリューム、VDisk、又はストレージデバイス804に対応する非アクティブリスト904が空の場合、流れはブロック1320に進む。ホスト入出力要求332が宛てられた論理ボリューム、VDisk、又はストレージデバイス804に対応する非アクティブリスト904が空ではない場合、流れはブロック1328に進む。
【0079】
ブロック1320で、ストレージコントローラ108は古いストリームをリサイクルする。非アクティブリスト904内には使用可能なストリーム資源904a〜jはなく、ストレージコントローラ108は、アクティブリスト908の1つ又は複数のアクティブストリーム912a〜jをリサイクルする必要がある。アクティブストリームのリサイクルプロセスについては、
図15a、
図15b、及び
図15cの中でより詳細に説明する。一度に1つのアクティブストリーム912a〜jをリサイクルする実施形態は、
図15aのプロセスを使用する。一度に所定数までのアクティブストリーム912a〜jをリサイクルする実施形態は、
図15bのプロセスを使用する。リサイクルの基準を満たす全てのアクティブストリーム912a〜jをリサイクルする実施形態は、
図15cのプロセスを使用する。流れは判定ブロック1324に進む。
【0080】
判定ブロック1324で、ストレージコントローラ108は、ホスト入出力要求332が宛てられた論理ボリューム、VDisk、又はストレージデバイス804に対応する非アクティブリスト904が空かどうかを再度判定する。
図15a〜
図15cの古いストリームをリサイクルするプロセスの何れも、リサイクル可能な古いストリーム308を一切識別しないこともあり得る。その場合、流れは判定ブロック1324で終わる。しかし、
図15a〜
図15cのプロセスが、リサイクル可能な少なくとも1つの古いストリーム308を識別し、そのストリーム308を非アクティブリスト904上に配置した場合、流れはブロック1328に進む。
【0081】
ブロック1328で、ストレージコントローラ108は、ストリーム資源904a〜jを非アクティブリスト904から除去する。今では非アクティブリスト904上のストリーム資源904a〜jが以前よりも1つ減っており、このステップの前に非アクティブリスト904上にストリーム資源904a〜jが1つしかなかった場合、今では非アクティブリスト904上にストリーム資源904a〜jはない。流れはブロック1332に進む。
【0082】
ブロック1332で、ストレージコントローラ108は、非アクティブリスト904から最近回復したストリーム資源904a〜jを使用して新たなアクティブストリーム912a〜jを構成する。新たなアクティブストリーム912a〜jの構成プロセスについては、
図16に関してより詳細に説明する。流れはブロック1340に進む。
【0083】
ブロック1336で、ストレージコントローラ108は、アクティブストリーム912a〜jをアクティブリスト908から除去する。受け取ったホスト入出力要求332の開始LBA524はアクティブストリームウィンドウ508内にあり、ストレージコントローラは、受け取ったホスト入出力要求332に対応するアクティブストリーム912a〜jをアクティブリスト908から除去する。流れはブロック1340に進む。
【0084】
ブロック1340で、ストレージコントローラ108は、現在の時間を反映するように、除去したアクティブストリーム912a〜jの時間ラストヒット924を更新する。流れはブロック1344に進む。
【0085】
ブロック1344で、ストレージコントローラ108は、除去したアクティブストリーム912a〜jの移動ウィンドウ512を必要に応じて調整する。受け取ったホスト入出力要求332の開始LBA524が現在の移動ウィンドウ512の外側にある場合、ストレージコントローラ108は移動ウィンドウの範囲936、940を調整する。このプロセスについては、
図17に関してより詳細に説明する。流れはブロック1348に進む。
【0086】
ブロック1348で、ストレージコントローラ108は、調整したアクティブストリーム912a〜jをアクティブリストの先頭916に配置する。このステップはアクティブリスト908の順序を保ち、直近に使用されたアクティブストリームはアクティブリストの先頭916に、最も長い間使用されていないアクティブストリーム912はアクティブリストの末尾920に置かれる。この時点で、受け取ったホスト入出力要求332に対処するようにアクティブリスト908及び非アクティブリスト904が調整され、従って流れはブロック1348で終わる。
【0087】
次に
図14を参照すると、本発明の実施形態による、ストリーム関連付けプロセスを示すフローチャートが示されている。このストリーム関連付けプロセスでは、受け取られるホスト入出力要求332が宛てられた論理ボリューム、VDisk、又はストレージデバイス804に対応するアクティブリスト908内で、アクティブストリーム912a〜jをもしあれば識別する。流れはブロック1404で始まる。
【0088】
ブロック1404で、ストレージコントローラ108は、アクティブリスト908が空かどうかを判定する。電源投入による初期化後等、アクティブストリーム912a〜jが現在アクティブリスト908内にない可能性がある。アクティブリスト908が空の場合、流れはブロック1412に進む。アクティブリスト908が空ではない場合、流れはブロック1408に進む。
【0089】
ブロック1408で、ストレージコントローラ108は、アクティブリストの先頭916から最初のアクティブリストエントリ912aを選択する。アクティブリスト908内には少なくとも1つのアクティブストリーム912a〜jがあり、直近のエントリ916が選択される。流れは判定ブロック1416に進む。
【0090】
判定ブロック1416で、ストレージコントローラ108は、受け取ったホスト入出力要求332の開始LBA524がストリームウィンドウのLBA上限928を下回るかどうかを判定する。受け取ったホスト入出力要求332の開始LBA524がストリームウィンドウのLBA上限928を下回る場合、流れは判定ブロック1420に進む。受け取ったホスト入出力要求332の開始LBA524がストリームウィンドウのLBA上限928以上の場合、受け取ったホスト入出力要求332はストリームウィンドウ508内になく、流れは判定ブロック1428に進む。
【0091】
判定ブロック1420で、ストレージコントローラ108は、受け取ったホスト入出力要求332の開始LBA524がストリームウィンドウのLBA下限932を上回るかどうかを判定する。受け取ったホスト入出力要求332の開始LBA524がストリームウィンドウのLBA下限932を上回る場合、流れはブロック1424に進む。受け取ったホスト入出力要求332の開始LBA524がストリームウィンドウのLBA下限932以下の場合、受け取ったホスト入出力要求332はストリームウィンドウ508内になく、流れは判定ブロック1428に進む。
【0092】
ブロック1424で、ストレージコントローラ108は、受け取ったホスト入出力要求332が、選択されたアクティブストリームウィンドウ508内にあると判定する。流れはブロック1424で終わり、処理を
図13の判定ブロック1312に戻し、判定ブロック1336に移る。
【0093】
判定ブロック1428で、ストレージコントローラ108は、検索する更に多くのアクティブリストエントリ912a〜jがあるかどうかを判定する。検索する更に多くのアクティブリストエントリ912a〜jがある場合、流れはブロック1436に進む。検索する更に多くのアクティブリストエントリ912a〜jがない場合、流れはブロック1432に進む。
【0094】
ブロック1432で、ストレージコントローラ108は、受け取ったホスト入出力要求332が、アクティブリスト908内のどのアクティブストリーム912a〜jにも対応しないと判定する。流れはブロック1432で終わり、処理を
図13の判定ブロック1312に戻し、ブロック1316に移る。
【0095】
ブロック1436で、ストレージコントローラ108は、次のアクティブリストエントリ912a〜jを選択する。ストレージコントローラ108は最初のアクティブリストエントリ912a〜jをアクティブリストの先頭916から選択したため、次のアクティブリストエントリ912a〜jは、次に新しいアクティブリストエントリ912a〜jになる。流れは判定ブロック1416に進み、ストリームウィンドウのLBA上限928及びLBA下限932を調べる。
【0096】
アクティブリスト908の最後まで検索するのにかかる時間を短縮するために、マッチするアクティブストリーム912を見つける方法を改善することができる。区間木(interval tree)またはスキップリストを含むデータ構造を使用する代替的実施形態はLBAに基づく探索を可能にし、ホスト入出力要求332をアクティブストリーム912と迅速にマッチすることによって性能を改善する。
【0097】
次に
図15aを参照すると、本発明の第1の実施形態による、単一の古いストリームをリサイクルするプロセスを示すフローチャートが示されている。
図15aに示す実施形態では、アクティブリスト908から一度に1つのアクティブストリーム912a〜jしかリサイクルしない。流れはブロック1504で始まる。
【0098】
ブロック1504で、ストレージコントローラ108が、アクティブリストの末尾920から始めて、最初の古いアクティブストリーム912a〜jを求めてアクティブリスト908を確認する。アクティブリストの末尾920は、最も長い間使用されていないアクティブリストエントリ912a〜jを含む。流れは判定ブロック1508に進む。
【0099】
判定ブロック1508で、ストレージコントローラ108は、現在の時間と時間ラストヒット924との差が、選択されたアクティブストリーム912a〜jのストリームリサイクル時間944を下回るかどうかを判定する。ストレージコントローラ108は、
図11に関して説明したようにストリームリサイクル時間944を計算する。現在の時間と時間ラストヒット924との差がストリームリサイクル時間944を下回る場合、流れはブロック1512に進む。現在の時間と時間ラストヒット924との差がストリームリサイクル時間944以上の場合、流れは判定ブロック1528に進む。
【0100】
ブロック1512で、ストレージコントローラ108は、選択されたアクティブストリーム912a〜jをアクティブリスト908から除去する。選択されたアクティブストリーム912a〜jは、判定ブロック1508のストリームリサイクル基準を満たす。流れはブロック1516に進む。
【0101】
ブロック1516で、ストレージコントローラ108は、選択されたアクティブストリーム912a〜jの時間ラストヒット924をゼロに設定する。これにより、アクティブストリーム912a〜jをストリーム資源904a〜jに戻すことに備え、アクティブストリーム912a〜jの初期化が始まる。流れはブロック1520に進む。
【0102】
ブロック1520で、ストレージコントローラ108は、選択されたアクティブストリーム912a〜jの全てのウィンドウのLBA範囲928、932、936、及び940をゼロに設定する。これにより、アクティブストリーム912a〜jをストリーム資源904a〜jに戻すことに備え、アクティブストリーム912a〜jの初期化が完了する。流れはブロック1524に進む。
【0103】
ブロック1524で、ストレージコントローラ108は、選択された及びこれまでに初期化されたアクティブストリーム912a〜jを、ストリーム資源904a〜jとして非アクティブリスト904上に配置する。単一のアクティブストリーム912a〜jがリサイクルされ、流れはブロック1524で終わる。流れは
図13の判定ブロック1324に進む。
【0104】
判定ブロック1528で、非アクティブリスト904にリサイクルするために、候補アクティブストリーム912a〜jがまだ識別されておらず、ストレージコントローラ108は、アクティブリスト908内に更に多くのアクティブストリーム912a〜jがあるかどうかを判定する。アクティブリスト908内に更に多くのアクティブストリーム912a〜jがある場合、流れは判定ブロック1532に進む。アクティブリスト908内に更に多くのアクティブストリーム912a〜jがない場合、アクティブストリーム912a〜jをリサイクルできず、流れはブロック1528で終わる。流れは
図13の判定ブロック1324に進む。
【0105】
判定ブロック1532で、ストレージコントローラ108は、アクティブリスト908内の次に新しいアクティブストリーム912a〜jを入手できるかどうかを判定する。アクティブリスト908内の次に新しいアクティブストリーム912a〜jを入手できる場合、流れはブロック1536に進む。アクティブリスト908内の次に新しいアクティブストリーム912a〜jを入手できない場合、流れはブロック1532で終わり、アクティブリスト908内のどのアクティブストリーム912a〜jもリサイクルの基準を満たしていない。流れは
図13の判定ブロック1324に進む。
【0106】
ブロック1536で、ストレージコントローラ108は、アクティブリストの末尾920から次に新しいアクティブストリーム912a〜jを選択する。流れは判定ブロック1508に進み、選択されたアクティブストリーム912a〜jがリサイクルの基準を満たすかどうかを確認する。
【0107】
次に
図15bを参照すると、本発明の第2の実施形態による、所定数の古いストリームをリサイクルするプロセスを示すフローチャートが示されている。
図15bに示す実施形態は、アクティブリスト908から一度に所定数までのアクティブストリーム912a〜jをリサイクルする。流れはブロック1540で始まる。
【0108】
ブロック1540で、ストレージコントローラ108が、アクティブリストの末尾920から始めて、所定数の古いアクティブストリーム912a〜jを求めてアクティブリスト908を確認する。アクティブリストの末尾920は、最も長い間使用されていないアクティブリストエントリ912a〜jを含む。流れは判定ブロック1544に進む。
【0109】
判定ブロック1544で、ストレージコントローラ108は、現在の時間と時間ラストヒット924との差が、選択されたアクティブストリーム912a〜jのストリームリサイクル時間944を下回るかどうかを判定する。ストレージコントローラ108は、
図11に関して説明したようにストリームリサイクル時間944を計算する。現在の時間と時間ラストヒット924との差がストリームリサイクル時間944を下回る場合、流れはブロック1548に進む。現在の時間と時間ラストヒット924との差がストリームリサイクル時間944以上の場合、流れは判定ブロック1568に進む。
【0110】
ブロック1548で、ストレージコントローラ108は、選択されたアクティブストリーム912a〜jをアクティブリスト908から除去する。選択されたアクティブストリーム912a〜jは、判定ブロック1544のストリームリサイクル基準を満たす。流れはブロック1552に進む。
【0111】
ブロック1552で、ストレージコントローラ108は、選択されたアクティブストリーム912a〜jの時間ラストヒット924をゼロに設定する。これにより、アクティブストリーム912a〜jをストリーム資源904a〜jに戻すことに備え、アクティブストリーム912a〜jの初期化が始まる。流れはブロック1556に進む。
【0112】
ブロック1556で、ストレージコントローラ108は、選択されたアクティブストリーム912a〜jの全てのウィンドウのLBA範囲928、932、936、及び940をゼロに設定する。これにより、アクティブストリーム912a〜jをストリーム資源904a〜jに戻すことに備え、アクティブストリーム912a〜jの初期化が完了する。流れはブロック1560に進む。
【0113】
ブロック1560で、ストレージコントローラ108は、選択された及びこれまでに初期化されたアクティブストリーム912a〜jを、ストリーム資源904a〜jとして非アクティブリスト904上に配置する。単一のアクティブストリーム912a〜jがリサイクルされ、流れは判定ブロック1564に進む。
【0114】
判定ブロック1564で、ストレージコントローラ108は、所定数のアクティブストリーム912a〜jがリサイクルされているかどうかを判定する。所定数のアクティブストリーム912a〜jがリサイクルされている場合、流れは終わる。次いで、流れは
図13の判定ブロック1324に進む。所定数のアクティブストリーム912a〜jがリサイクルされていない場合、流れは判定ブロック1570に進む。
【0115】
判定ブロック1568で、ストレージコントローラ108は、アクティブリスト908内に更に多くのアクティブストリーム912a〜jがあるかどうかを判定する。アクティブリスト908内に更に多くのアクティブストリーム912a〜jがある場合、流れは判定ブロック1570に進む。アクティブリスト908内に更に多くのアクティブストリーム912a〜jがない場合、アクティブストリーム912a〜jをリサイクルできず、流れはブロック1568で終わる。次いで、流れは
図13の判定ブロック1324に進む。
【0116】
判定ブロック1570で、ストレージコントローラ108は、アクティブリスト908内の次に新しいアクティブストリーム912a〜jを入手できるかどうかを判定する。アクティブリスト908内の次に新しいアクティブストリーム912a〜jを入手できる場合、流れはブロック1572に進む。アクティブリスト908内の次に新しいアクティブストリーム912a〜jを入手できない場合、流れはブロック1570で終わる。次いで、流れは
図13の判定ブロック1324に進む。
【0117】
ブロック1572で、ストレージコントローラ108は、アクティブリストの末尾920から次に新しいアクティブストリーム912a〜jを選択する。流れは判定ブロック1544に進み、選択されたアクティブストリーム912a〜jがリサイクルの基準を満たすかどうかを確認する。
【0118】
次に
図15cを参照すると、本発明の第3の実施形態による、全ての古いストリームをリサイクルするプロセスを示すフローチャートが示されている。
図15cに示す実施形態では、アクティブリスト908からできるだけ多くのアクティブストリーム912a〜jをリサイクルする。流れはブロック1574で始まる。
【0119】
ブロック1574で、ストレージコントローラ108は、アクティブリストの末尾920から始めて、アクティブリスト908内の全ての古いアクティブストリーム912a〜jを確認する。アクティブリストの末尾920は、最も長い間使用されていないアクティブリストエントリ912a〜jを含む。流れは判定ブロック1576に進む。
【0120】
判定ブロック1576で、ストレージコントローラは、現在の時間と時間ラストヒット924との差が、選択されたアクティブストリーム912a〜jのストリームリサイクル時間944を下回るかどうかを判定する。ストレージコントローラ108は、
図11に関して説明したようにストリームリサイクル時間944を計算する。現在の時間と時間ラストヒット924との差がストリームリサイクル時間944を下回る場合、流れはブロック1578に進む。現在の時間と時間ラストヒット924との差がストリームリサイクル時間944以上の場合、流れは判定ブロック1588に進む。
【0121】
ブロック1578で、ストレージコントローラ108は、選択されたアクティブストリーム912a〜jをアクティブリスト908から除去する。選択されたアクティブストリーム912a〜jは、判定ブロック1576のストリームリサイクル基準を満たす。流れはブロック1580に進む。
【0122】
ブロック1580で、ストレージコントローラ108は、選択されたアクティブストリーム912a〜jの時間ラストヒット924をゼロに設定する。これにより、アクティブストリーム912a〜jをストリーム資源904a〜jに戻すことに備え、アクティブストリーム912a〜jの初期化が始まる。流れはブロック1582に進む。
【0123】
ブロック1582で、ストレージコントローラ108は、選択されたアクティブストリーム912a〜jの全てのウィンドウのLBA範囲928、932、936、及び940をゼロに設定する。これにより、アクティブストリーム912a〜jをストリーム資源904a〜jに戻すことに備え、アクティブストリーム912a〜jの初期化が完了する。流れはブロック1584に進む。
【0124】
ブロック1584で、ストレージコントローラ108は、選択された及びこれまでに初期化されたアクティブストリーム912a〜jを、ストリーム資源904a〜jとして非アクティブリスト904上に配置する。選択されたアクティブストリーム912a〜jがリサイクルされ、流れは判定ブロック1586に進む。
【0125】
判定ブロック1586で、ストレージコントローラ108は、検索する更に多くのアクティブストリーム912a〜jがあるかどうかを判定する。検索する更に多くのアクティブストリーム912a〜jがある場合、流れはブロック1590に進む。検索する更に多くのアクティブストリーム912a〜jがない場合、流れは終わる。次いで、流れは
図13の判定ブロック1324に進む。
【0126】
判定ブロック1588で、ストレージコントローラ108は、アクティブリスト908内に更に多くのアクティブストリーム912a〜jがあるかどうかを判定する。アクティブリスト908内に更に多くのアクティブストリーム912a〜jがある場合、流れはブロック1590に進む。アクティブリスト908内に更に多くのアクティブストリーム912a〜jがない場合、アクティブストリーム912a〜jをリサイクルできず、流れはブロック1588で終わる。次いで、流れは
図13の判定ブロック1324に進む。
【0127】
ブロック1590で、ストレージコントローラ108は、アクティブリストの末尾920から次に新しいアクティブストリーム912a〜jを選択する。流れは判定ブロック1576に進み、選択されたアクティブストリーム912a〜jがリサイクルの基準を満たすかどうかを確認する。
【0128】
次に
図16を参照すると、本発明の実施形態による、アクティブストリームの構成プロセスを示すフローチャートが示されている。
図16に示す実施形態では、非アクティブリストのストリーム資源904a〜jからアクティブストリーム912a〜jを構成する。流れはブロック1604で始まる。
【0129】
ブロック1604で、ストレージコントローラ108が、ホスト入出力要求のサイズに「8」を掛けてストリームウィンドウ・オフセットを作り出す。流れはブロック1608に進む。
【0130】
ブロック1608で、ストレージコントローラ108は、ブロック1604のストリームウィンドウ・オフセットをホスト入出力要求の開始LBAアドレス524に加え、その結果生じるストリームウィンドウのLBA上限928をストリームメタデータ912内に記憶する。流れはブロック1612に進む。
【0131】
ブロック1612で、ストレージコントローラ108は、受け取ったホスト入出力要求の開始LBAアドレス524からブロック1604のストリームウィンドウ・オフセットを引き、一時的なストリームウィンドウのLBA下限を作り出す。流れは判定ブロック1616に進む。
【0132】
判定ブロック1616で、ストレージコントローラ108は、一時的なストリームウィンドウのLBA下限が「0」を下回るかどうかを判定する。一時的なストリームウィンドウのLBA下限が「0」を下回る場合、流れはブロック1624に進む。一時的なストリームウィンドウのLBA下限が「0」以上の場合、流れはブロック1620に進む。
【0133】
ブロック1620で、ストレージコントローラ108は、ブロック1612の一時的なストリームウィンドウのLBA下限を、ストリームウィンドウのLBA下限932内に記憶する。流れはブロック1620で終わる。次いで、流れは
図13のブロック1340に進む。
【0134】
ブロック1624で、ストレージコントローラ108は、ゼロ値をストリームウィンドウのLBA下限932内に記憶する。流れはブロック1624で終わる。次いで、流れは
図13のブロック1340に進む。
【0135】
次に
図17を参照すると、本発明の実施形態による、移動ウィンドウの調整プロセスを示すフローチャートが示されている。この移動ウィンドウの調整プロセスでは、ホスト入出力要求332のLBA520に基づき、移動ウィンドウ512のLBA上限936及びLBA下限940を調整しなければならないかどうかを判定する。
図17は、
図13のブロック1344に記載のプロセスをより詳細に示す。流れは判定ブロック1704で始まる。
【0136】
判定ブロック1704で、ストレージコントローラ108は、ブロック1304の受け取ったホスト入出力要求332の開始LBAアドレス524が、アクティブストリームウィンドウ508に対応する移動ウィンドウ512の外側にあるかどうかを判定する。ブロック1304の受け取ったホスト入出力要求332の開始LBAアドレス524が、アクティブストリームウィンドウ508に対応する移動ウィンドウ512の外側にある場合、移動ウィンドウ512を調整する必要があり、流れはブロック1708に進む。ブロック1304の受け取ったホスト入出力要求332の開始LBAアドレス524が、アクティブストリームウィンドウ508に対応する移動ウィンドウ512の外側にない場合、移動ウィンドウ512を変える必要はなく、流れは終わる。次いで、流れは
図13のブロック1348に進む。
【0137】
ブロック1708で、ストレージコントローラ108は、ストリームウィンドウのLBA上限928からストリームウィンドウのLBA下限932を引き、ストリームウィンドウ508のサイズを得る。流れはブロック1712に進む。
【0138】
ブロック1712で、ストレージコントローラ108は、ストリームウィンドウ508のサイズを「2」で割り、ストリームウィンドウのLBA下限932を加えてストリームウィンドウの中心を得る。流れは判定ブロック1716に進む。
【0139】
判定ブロック1716で、ストレージコントローラ108は、受け取ったホスト入出力要求332の開始LBAアドレス524が直前のホスト入出力要求332に直接隣接するかどうかを判定する。直接隣接するとは、受け取ったホスト入出力要求332の開始LBAアドレス524が、直前のホスト入出力要求332の終了LBAアドレス532の直後に続くことを意味する。受け取ったホスト入出力要求332の開始LBAアドレス524が直前のホスト入出力要求332に直接隣接する場合、流れはブロック1720に進む。受け取ったホスト入出力要求332の開始LBAアドレス524が直前のホスト入出力要求332に直接隣接しない場合、流れはブロック1724に進む。
【0140】
ブロック1720で、ストレージコントローラ108は、ストリームウィンドウ508のサイズに逐次ストリームウィンドウ変更子を掛け、新たな移動ウィンドウ512のサイズを得る。受け取ったホスト入出力要求332の開始LBAアドレス524が直前のホスト入出力要求332に直接隣接する場合、逐次ストリームウィンドウ変更子を使用する。好ましい実施形態では、逐次ストリームウィンドウ変更子が0.5である。他の実施形態では、逐次ストリームウィンドウ変更子が0.5未満であり又は0.5を超える。流れはブロック1728に進む。
【0141】
ブロック1724で、ストレージコントローラ108は、ストリームウィンドウ508のサイズに準逐次ストリームウィンドウ変更子を掛け、新たな移動ウィンドウ512のサイズを得る。受け取ったホスト入出力要求332の開始LBAアドレス524が直前のホスト入出力要求332に直接隣接しない場合、準逐次ストリームウィンドウ変更子を使用する。好ましい実施形態では、準逐次ストリームウィンドウ変更子が0.4である。他の実施形態では、準逐次ストリームウィンドウ変更子が0.4未満であり又は0.4を超える。流れはブロック1728に進む。
【0142】
ブロック1728で、ストレージコントローラ108は、新たな移動ウィンドウのサイズ512を「2」で割り、新たな移動ウィンドウの半分のサイズを得る。流れはブロック1732及び1740に進む。
【0143】
ブロック1732で、ストレージコントローラ108は、ストリームウィンドウの中心に新たな移動ウィンドウの半分のサイズを加え、新たな移動ウィンドウのLBA上限を得る。流れはブロック1736に進む。
【0144】
ブロック1736で、ストレージコントローラ108は、ストリームメタデータ912内の移動ウィンドウのLBA上限936内に、新たな移動ウィンドウのLBA上限を記憶する。流れはブロック1736で終わる。
【0145】
ブロック1740で、ストレージコントローラ108は、ストリームウィンドウの中心から新たな移動ウィンドウの半分のサイズを引き、新たな移動ウィンドウのLBA下限を得る。流れはブロック1744に進む。
【0146】
ブロック1744で、ストレージコントローラ108は、ストリームメタデータ912内の移動ウィンドウのLBA下限940内に、新たな移動ウィンドウのLBA下限を記憶する。流れはブロック1744で終わる。
【0147】
本発明のプロセスステップでは、ストレージコントローラ108がこれらの動作を実行するものと説明したが、CPU又はプロセッサ312がこれらのステップを概して実行することを当業者は理解されよう。但し、他の実施形態では、1つ又は複数のプロセッサ、状態機械、プログラム可能論理装置、又は他の装置がこれらのステップを実行しても良い。
【0148】
最後に、添付の特許請求の範囲によって定める本発明の趣旨及び範囲から逸脱することなしに、本発明の同一目的を実行するための他の構造を設計し又は修正するための基礎として、開示した概念及び具体的実施形態を容易に使用できることを当業者は理解されよう。