(57)【要約】【課題】逐次入出力要求の多くの同時ストリームを効率的に処理するための方法を提供する。【解決手段】本方法は、入出力要求の受け取りに応答して、入出力要求がアクティブストリーム９１２に対応するかを判定すること、要求がアクティブストリームに対応する場合、アクティブストリームに対応するアクティブリスト９０８の既存のアクティブリストエントリを更新すること、入出力要求がアクティブストリームに対応しない場合、非アクティブリストの非アクティブリストエントリを新たなアクティブリストエントリに変換して構成することを備える。非アクティブリストは、使用可能であるが割り当てられていない資源を記憶し、アクティブリストは、割り当てられている資源を記憶する。アクティブリストは、一端に先頭と他端に末尾とを含む。アクティブリストの先頭は、直近に使用されたエントリに対応し、末尾は最も長い間使用されていないエントリに対応する。【選択図】図９ａ
2016038908.tif 000002
【特許請求の範囲】
【請求項１】
ストレージコントローラ内で逐次入出力要求の多くの同時ストリームの効率的な入出力処理を行うための方法であって、前記ストレージコントローラがホストコンピュータからホスト入出力要求を受け取ることに応答して、
前記ストレージコントローラによって、前記ホスト入出力要求がアクティブストリームに対応するかどうかを判定すること、
前記ストレージコントローラによって、前記ホスト入出力要求がアクティブストリームに対応する場合、前記アクティブストリームに対応するアクティブリストの既存のアクティブリストエントリを更新すること、
前記ストレージコントローラによって、前記ホスト入出力要求がアクティブストリームに対応しない場合、非アクティブリストの非アクティブリストエントリを前記アクティブリストの新たなアクティブリストエントリに変換すること、
前記ストレージコントローラによって、前記新たなアクティブリストエントリを構成することを備え、
前記非アクティブリストは、使用可能であるが割り当てられていないストレージコントローラのメモリ資源を記憶し、
前記アクティブリストは、割り当てられているストレージコントローラのメモリ資源を記憶し、
前記アクティブリストは、前記アクティブリストの一方の端にアクティブリストの先頭を含み、前記アクティブリストの反対側の端にアクティブリストの末尾を含み、
前記アクティブリストの先頭は、直近に使用されたアクティブリストエントリに対応し、前記アクティブリストの末尾は、最も長い間使用されていないアクティブリストエントリに対応する、方法。
【請求項２】
前記ホスト入出力要求がアクティブストリームに対応するかどうかを判定することは、
前記ストレージコントローラによって、前記アクティブリストが空かどうかを判定すること、
前記アクティブリストが空の場合、前記ホスト入出力要求はアクティブストリームに対応しないこと、
前記アクティブリストが空ではない場合、
前記ストレージコントローラによって、前記アクティブリストの先頭から始めて、前記アクティブリストエントリを検索すること、
前記アクティブリストに対応するストリームウィンドウ内にアクティブリストエントリがあるかどうかを判定することであって、アクティブリストエントリが前記ストリームウィンドウ内にある場合、前記ホスト入出力要求が、アクティブストリームに対応し、アクティブリストエントリが前記ストリームウィンドウ内にない場合、前記ホスト入出力要求が、アクティブストリームに対応しない、前記アクティブリストエントリがあるかどうかを判定すること、
ストリームウィンドウ内のアクティブリストエントリが判定されるまで、又は前記ストリームウィンドウ内のアクティブリストエントリを判定することなしに前記アクティブリスト全体が検索されるまで、検索すること及び判定することを繰り返すことを備え、
前記ストリームウィンドウは、ストリームウィンドウのＬＢＡ上限とストリームウィンドウのＬＢＡ下限との間のＬＢＡ範囲を含む、請求項１に記載の方法。
【請求項３】
前記アクティブストリームに対応する前記アクティブリストの既存のアクティブリストエントリを更新することは、
前記ストレージコントローラによって、前記既存のアクティブリストエントリを前記アクティブリストから除去すること、
前記ストレージコントローラによって、前記既存のアクティブリストエントリに対応する時間ラストヒットを更新することであって、前記時間ラストヒットは、前記ストレージコントローラによって前記ホスト入出力要求がいつ受け取られたのかを識別するタイムスタンプを含む、前記時間ラストヒットを更新すること、
前記ストレージコントローラによって、前記既存のアクティブリストエントリに対応する移動ウィンドウを調整することであって、前記移動ウィンドウは、前記ストリームウィンドウのＬＢＡ上限及びストリームウィンドウのＬＢＡ下限を変える必要があるかどうかを判定するために使用される、前記移動ウィンドウを調整すること、
前記ストレージコントローラによって、前記既存のアクティブリストエントリを前記アクティブリストの先頭に配置することを含む、請求項２に記載の方法。
【請求項４】
前記移動ウィンドウは、移動ウィンドウのＬＢＡ上限と移動ウィンドウのＬＢＡ下限との間のＬＢＡ範囲を含み、前記ホスト入出力要求の開始ＬＢＡが前記移動ウィンドウの外側にある場合は、前記方法は、
前記ホスト入出力要求と同じストリームについて前記ホスト入出力要求の前記開始ＬＢＡが直前の入出力要求に直接隣接する場合、前記ストレージコントローラによって、逐次ストリームウィンドウ変更子を用いて前記移動ウィンドウのＬＢＡ上限及びＬＢＡ下限を調整すること、
前記ホスト入出力要求と同じストリームについて前記ホスト入出力要求の前記開始ＬＢＡが直前の入出力要求に直接隣接しない場合、前記ストレージコントローラによって、準逐次ストリームウィンドウ変更子を用いて前記移動ウィンドウのＬＢＡ上限及びＬＢＡ下限を調整することを更に備える、請求項３に記載の方法。
【請求項５】
前記非アクティブリストの前記非アクティブリストエントリを前記アクティブリストの前記新たなアクティブリストエントリに変換することは、
前記ストレージコントローラによって、前記非アクティブリストが空かどうかを判定すること、
前記非アクティブリストが空の場合、前記ストレージコントローラによって、前記アクティブリストの１つ又は複数の古いストリームを前記非アクティブリストにリサイクルすること、
前記非アクティブリストが空ではない場合、前記ストレージコントローラによって、前記非アクティブリストから非アクティブリストエントリを除去することを含む、請求項３に記載の方法。
【請求項６】
前記アクティブリストの１つ又は複数の古いストリームを前記非アクティブリストにリサイクルすることは、
前記アクティブリストの末尾から始めて、前記アクティブリストエントリを前記ストレージコントローラによって検索すること、
前記ストレージコントローラによって、現在の時間と前記時間ラストヒットとの差が、検索されている現在のアクティブリストエントリのストリームリサイクル時間を下回るかどうかを判定すること、
前記現在の時間と前記時間ラストヒットとの差が、前記ストリームリサイクル時間以上の場合、
前記アクティブリスト内に更に多くのアクティブリストエントリがある場合、前記ストレージコントローラによって、前記アクティブリストの末尾から次に新しいアクティブリストエントリを選択し、
前記現在の時間と前記時間ラストヒットとの差が前記ストリームリサイクル時間を下回るかどうかを判定することを繰り返すこと、
前記現在の時間と前記時間ラストヒットとの差が前記ストリームリサイクル時間を下回る場合、
前記ストレージコントローラによって、前記アクティブリストから前記現在のアクティブリストエントリを除去し、
前記ストレージコントローラによって、前記現在のアクティブリストエントリの前記時間ラストヒット及び前記ストリームウィンドウをゼロに初期化し、
前記ストレージコントローラによって、前記現在のアクティブリストエントリを前記非アクティブリスト上に配置することを含む、請求項５に記載の方法。
【請求項７】
前記方法は、
前記ストレージコントローラによって、アクティブリストエントリごとに未処理の入出力カウントを維持すること、
アクティブリストエントリごとに、
前記ストレージコントローラが前記アクティブリストエントリに対応するホスト入出力要求を受け取るとき、前記ストレージコントローラによって、前記アクティブリストエントリに対応する前記未処理の入出力カウントをインクリメントし、
前記アクティブリストエントリの完了に対応するホスト入出力要求に応答して、前記ストレージコントローラによって、前記アクティブリストエントリに対応する前記未処理の入出力カウントをデクリメントし、
前記未処理の入出力カウントが１から０に遷移するとき、前記ストレージコントローラによって、前記アクティブリストエントリに対応するバーストタイマを開始し、
前記未処理の入出力カウントが０から１に遷移するとき、前記ストレージコントローラによって、前記バーストタイマを停止すること、
前記バーストタイマを停止することに応答して、
最後のバーストからの時間ポインタによって識別される最後のバーストからの時間待ち行列の位置内に前記バーストタイマの値を記憶し、
前記最後のバーストからの時間ポインタをインクリメントして最後のバーストからの時間待ち行列の次の位置を識別することを更に備え、
前記ストレージコントローラは、アクティブリストエントリごとに最後のバーストからの時間待ち行列及び最後のバーストからの時間ポインタを維持し、
前記最後のバーストからの時間待ち行列は、所定数の位置を有する巡回待ち行列である、請求項６に記載の方法。
【請求項８】
前記方法は、
前記ストレージコントローラによって、最後のバーストからの時間待ち行列が満杯であるときを判定することであって、前記所定数の位置のそれぞれがゼロ以外の最後のバーストからの時間エントリを含む場合、最後のバーストからの時間待ち行列は満杯である、前記最後のバーストからの時間待ち行列が満杯であるときを判定すること、
最後のバーストからの時間待ち行列が満杯である場合、
前記ストレージコントローラによって、前記最後のバーストからの時間待ち行列の位置の平均に基づき、前記ストリームリサイクル時間を計算し、
前記ストレージコントローラによって、前記ストリームリサイクル時間をストレージコントローラのメモリ位置内に保存することを更に備える、請求項７に記載の方法。
【請求項９】
前記ストリームリサイクル時間は、より最近の最後のバーストからの時間値により大きい重みを加え、より離れた最後のバーストからの時間値により小さい重みを加えることを含む加重平均である、請求項８に記載の方法。
【請求項１０】
逐次入出力要求の多くの同時ストリームの効率的な入出力処理を行うストレージコントローラであって、
プロセッサと、
前記プロセッサに結合されるメモリとを備え、
前記メモリは、
割り当てられたストレージコントローラのメモリ資源を記憶するアクティブリストであって、前記アクティブリストの一方の端にある、直近に使用されたアクティブリストエントリに対応するアクティブリストの先頭と、前記アクティブリストの反対側の端にある、最も長い間使用されていないアクティブリストエントリに対応するアクティブリストの末尾とを含む前記アクティブリストと、
使用可能であるが割り当てられていないメモリ資源を記憶する非アクティブリストとを含み、
前記ストレージコントローラがホストコンピュータからホスト入出力要求を受け取ることに応答して、前記ストレージコントローラが、前記ホスト入出力要求がアクティブストリームに対応するかどうかを判定し、前記ホスト入出力要求がアクティブストリームに対応する場合、前記ストレージコントローラが、前記アクティブストリームに対応する前記アクティブリストの既存のアクティブリストエントリを更新し、前記ホスト入出力要求がアクティブストリームに対応しない場合、前記ストレージコントローラが、前記非アクティブリストの非アクティブリストエントリを前記アクティブリストの新たなアクティブリストエントリに変換し、前記新たなアクティブリストエントリを構成する、ストレージコントローラ。
【請求項１１】
前記ストレージコントローラが、前記ホスト入出力要求がアクティブストリームに対応するかどうかを判定することは、
前記ストレージコントローラが、前記アクティブリストが空かどうかを判定することを含み、
前記アクティブリストが空の場合、前記ホスト入出力要求はアクティブストリームに対応せず、前記アクティブリストが空ではない場合、前記ストレージコントローラが、前記アクティブリストの先頭から始めて、前記アクティブリストエントリを検索し、
アクティブリストエントリが、前記アクティブリストに対応するストリームウィンドウ内にあるかどうかを識別し、
アクティブリストエントリが前記ストリームウィンドウ内にある場合、前記ホスト入出力要求がアクティブストリームに対応し、
アクティブリストエントリが前記ストリームウィンドウ内にない場合、前記ホスト入出力要求がアクティブストリームに対応せず、
ストリームウィンドウ内のアクティブリストエントリが識別されるまで、又は前記ストリームウィンドウ内のアクティブリストエントリを識別することなしに前記アクティブリスト全体が検索されるまで、前記ストレージコントローラが、検索すること及び識別することを繰り返す、請求項１０に記載のストレージコントローラ。
【請求項１２】
前記ストレージコントローラが、前記アクティブストリームに対応する前記アクティブリストの既存のアクティブリストエントリを更新することは、
前記ストレージコントローラが、前記既存のアクティブリストエントリを前記アクティブリストから除去し、前記既存のアクティブリストエントリに対応する時間ラストヒットを更新することを含み、
前記時間ラストヒットは、前記ストレージコントローラによって前記ホスト入出力要求がいつ受け取られたのかを識別するタイムスタンプを含み、
前記ストレージコントローラが、前記既存のアクティブリストエントリに対応する移動ウィンドウを調整し、
前記移動ウィンドウは、前記ストリームウィンドウのＬＢＡ上限及びストリームウィンドウのＬＢＡ下限を変える必要があるかどうかを判定するように使用され、
前記ストレージコントローラが、前記既存のアクティブリストエントリを前記アクティブリストの先頭に配置する、請求項１１に記載のストレージコントローラ。
【請求項１３】
前記移動ウィンドウは、移動ウィンドウのＬＢＡ上限と移動ウィンドウのＬＢＡ下限との間のＬＢＡ範囲を含み、
前記ホスト入出力要求の開始ＬＢＡが前記移動ウィンドウの外側にある場合、
前記ストレージコントローラが、
前記ホスト入出力要求と同じストリームについて前記ホスト入出力要求の前記開始ＬＢＡが直前の入出力要求に直接隣接するときに、逐次ストリームウィンドウ変更子を用いて前記移動ウィンドウのＬＢＡ上限及びＬＢＡ下限を調整し、
前記ホスト入出力要求と同じストリームについて前記ホスト入出力要求の前記開始ＬＢＡが直前の入出力要求に直接隣接しないときに、準逐次ストリームウィンドウ変更子を用いて前記移動ウィンドウのＬＢＡ上限及びＬＢＡ下限を調整する、請求項１２に記載のストレージコントローラ。
【請求項１４】
前記ストレージコントローラが、前記非アクティブリストの前記非アクティブリストエントリを前記アクティブリストの前記新たなアクティブリストエントリに変換することは、
前記ストレージコントローラが、前記非アクティブリストが空かどうかを判定することを含み、
前記非アクティブリストが空の場合、前記ストレージコントローラが、前記アクティブリストの１つ又は複数の古いストリームを前記非アクティブリストにリサイクルし、
前記非アクティブリストが空ではない場合、前記ストレージコントローラが、前記非アクティブリストから非アクティブリストエントリを除去する、請求項１２に記載のストレージコントローラ。
【請求項１５】
前記ストレージコントローラが、前記アクティブリストの１つ又は複数の古いストリームを前記非アクティブリストにリサイクルすることは、
前記ストレージコントローラが、前記アクティブリストの末尾から始めて、前記アクティブリストエントリを検索し、現在の時間と前記時間ラストヒットとの差が、検索されている現在のアクティブリストエントリのストリームリサイクル時間を下回るかどうかを判定することを含み、
前記現在の時間と前記時間ラストヒットとの差が前記ストリームリサイクル時間以上の場合、
前記ストレージコントローラが、前記アクティブリスト内に更に多くのアクティブリストエントリがあるときに、前記アクティブリストの末尾から次に新しいアクティブリストエントリを選択し、前記現在の時間と前記時間ラストヒットとの差が前記ストリームリサイクル時間を下回るかどうかを判定することを繰り返し、
前記ストレージコントローラが、前記現在の時間と前記時間ラストヒットとの差が前記ストリームリサイクル時間を下回るときに、前記アクティブリストから前記現在のアクティブリストエントリを除去し、前記現在のアクティブリストエントリの前記時間ラストヒット及び前記ストリームウィンドウをゼロに初期化し、前記現在のアクティブリストエントリを前記非アクティブリスト上に配置する、請求項１４に記載のストレージコントローラ。
【請求項１６】
前記ストレージコントローラは、
アクティブリストエントリごとに未処理の入出力カウントを維持し、前記ストレージコントローラが前記アクティブリストエントリに対応するホスト入出力要求を受け取るとき、アクティブリストエントリごとに、前記アクティブリストエントリに対応する前記未処理の入出力カウントをインクリメントし、
前記アクティブリストエントリの完了に対応するホスト入出力要求に応答して、前記アクティブリストエントリに対応する前記未処理の入出力カウントをデクリメントし、
前記未処理の入出力カウントが１から０に遷移するとき、前記アクティブリストエントリに対応するバーストタイマを開始し、前記未処理の入出力カウントが０から１に遷移するとき、前記バーストタイマを停止し、
前記バーストタイマを停止することに応答して、
前記ストレージコントローラが、最後のバーストからの時間ポインタによって識別される最後のバーストからの時間待ち行列の位置内に前記バーストタイマの値を記憶し、前記最後のバーストからの時間ポインタをインクリメントして最後のバーストからの時間待ち行列の次の位置を識別し、
前記ストレージコントローラが、アクティブリストエントリごとに最後のバーストからの時間待ち行列及び最後のバーストからの時間ポインタを維持し、
前記最後のバーストからの時間待ち行列は、所定数の位置を有する巡回待ち行列である、請求項１５に記載のストレージコントローラ。
【請求項１７】
前記ストレージコントローラが、最後のバーストからの時間待ち行列が満杯であるときを判定し、
前記所定数の位置のそれぞれがゼロ以外の最後のバーストからの時間エントリを含む場合、最後のバーストからの時間待ち行列は満杯であり、
最後のバーストからの時間待ち行列が満杯である場合、前記ストレージコントローラが、前記最後のバーストからの時間待ち行列の位置の平均に基づき前記ストリームリサイクル時間を計算し、前記ストリームリサイクル時間をストレージコントローラのメモリ位置内に保存する、請求項１６に記載のストレージコントローラ。
【請求項１８】
前記ストリームリサイクル時間は、より最近の最後のバーストからの時間値により大きい重みを加え、より離れた最後のバーストからの時間値により小さい重みを加えることを含む加重平均である、請求項１７に記載のストレージコントローラ。
【請求項１９】
逐次入出力要求の多くの同時ストリームの効率的な入出力処理を行うためのシステムであって、
ホストコンピュータと、
前記ホストコンピュータに結合されたストレージコントローラであって、プロセッサと、前記プロセッサに結合されたメモリとを含む前記ストレージコントローラと、
前記ストレージコントローラに結合された１つ又は複数のストレージデバイスとを備え、
前記メモリは、
複数のエントリのアクティブリストであって、各アクティブリストエントリは、ホスト入出力要求の様々な逐次入出力ストリームに割り当てられるメモリ資源に対応し、各アクティブリストエントリは、逐次入出力ストリームに宛てられる、最後に受け取られたホスト入出力要求のタイムスタンプである時間ラストヒットを含む、前記複数のエントリのアクティブリストと、
複数のエントリの非アクティブリストであって、各非アクティブリストエントリは、新たな逐次入出力ストリームに使用可能なメモリ資源に対応する、前記複数のエントリの非アクティブリストとを含み、
前記ストレージコントローラが前記ホストコンピュータからホスト入出力要求を受け取り、前記ホスト入出力要求が前記アクティブリスト内の逐次入出力ストリームに対応しておらず、前記非アクティブリスト内に非アクティブリストエントリがないと判定することに応答して、前記ストレージコントローラは、既存のアクティブリストエントリを新たなアクティブリストエントリに変換し、
前記新たなアクティブリストエントリは、前記受け取られるホスト入出力要求に対応する、システム。
【請求項２０】
前記ストレージコントローラが、既存のアクティブリストエントリを新たなアクティブリストエントリに変換することは、
前記ストレージコントローラが、現在の時間と前記時間ラストヒットとの差がストリームリサイクル時間を下回る少なくとも１つのアクティブリストエントリを識別することを含み、
前記ストレージコントローラは、前記アクティブリストエントリに対応する前記逐次入出力ストリームに対する所定数の前記時間ラストヒットの履歴の加重平均に基づき前記ストリームリサイクル時間を計算し、
前記ストレージコントローラは、前記識別した少なくとも１つのアクティブリストエントリを少なくとも１つの新たなアクティブリストエントリに変換する、請求項１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータのデータストレージを対象とする。具体的には本発明は、逐次入出力ストリームについて、ストレージコントローラが効率的にメモリを使用するための方法及び機器を対象とする。
【背景技術】
【０００２】
デジタルファイル、文書、写真、画像、及び他のデータを記憶する需要が急速に増加し続けている。データを電子的に記憶することに関連し、１つ又は複数のデータストレージコントローラを組み込むシステムが考えられている。ストレージコントローラは、ホストコンピュータからデータ読取要求及び書込み要求を受け取り、１つ又は複数の物理ストレージデバイスを制御して、ホストコンピュータとの間で要求されたデータを有益に記憶するか又は供給する。
【０００３】
ストレージコントローラは、概してデータ読取要求及び書込み要求をバッファし、多くの場合、ホストデータ読取要求及び書込み要求を、ＲＡＩＤ又はストレージデバイスの読取要求又は書込み要求に変換する。多くのストレージコントローラは、ストレージコントローラの一部として含まれるキャッシュメモリ内に読取データ及び書込みデータを記憶する。キャッシュメモリは、ハードドライブ等の外部ストレージデバイスに比べて小さく、一般にはるかに高速である。しかし、キャッシュメモリはストレージデバイスよりもバイト当たりで極めて高額であり、従って経済的であるために、キャッシュメモリのサイズは相応に小さい。相互接続される全てのホストコンピュータに対してストレージコントローラの全体的性能を最大限にするために、キャッシュメモリを可能な限り効率的に動作させる需要が常に存在する。
【０００４】
ホストコンピュータは、ランダム入出力要求又は逐次入出力要求を与えることにより、データストレージシステムと対話する。逐次入出力要求の場合、性能を最大限にするために、ストレージコントローラが可能な限り多くの異なる逐次入出力ストリームを処理することが望ましい。逐次入出力ストリームは、同じストレージデバイス、論理ボリューム、又はＶＤｉｓｋに宛てられる一連の略連続した入出力要求を含む。一部の逐次入出力ストリームが読取要求であり得るのに対し、他の逐次入出力ストリームは書込み要求であり得る。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第５，６４０，５３０号明細書
【特許文献２】米国特許第７，２６０，６７９号明細書
【特許文献３】米国特許第８，４７８，９４５号明細書
【発明の概要】
【課題を解決するための手段】
【０００６】
本発明は、従来技術の不都合を解決することを対象とする。本発明の実施形態によれば、ストレージコントローラ内で効率的な逐次入出力処理を行うための方法が提供される。この方法は、ストレージコントローラがホストコンピュータからホスト入出力要求を受け取ることに応答して、ホスト入出力要求がアクティブストリームに対応するかどうかをストレージコントローラによって判定するステップを含む。この方法は、ホスト入出力要求がアクティブストリーム対応する場合、アクティブストリームに対応するアクティブリストの既存のアクティブリストエントリをストレージコントローラによって更新するステップを含み、この方法は、ホスト入出力要求がアクティブストリームに対応しない場合、非アクティブリストの非アクティブリストエントリをアクティブリストの新たなアクティブリストエントリにストレージコントローラによって変換するステップと、その新たなアクティブリストエントリをストレージコントローラによって構成するステップとを含む。非アクティブリストは、使用可能であるが割り当てられていないストレージコントローラのメモリ資源を記憶し、アクティブリストは、割り当てられているストレージコントローラのメモリ資源を記憶する。アクティブリストは、アクティブリストの一方の端にアクティブリストの先頭を含み、アクティブリストの反対側の端にアクティブリストの末尾を含む。アクティブリストの先頭は、直近に使用されたアクティブリストエントリに対応し、アクティブリストの末尾は、最も長い間使用されていないアクティブリストエントリに対応する。
【０００７】
本発明の別の実施形態によれば、コンピュータの効率的な逐次入出力処理を行うためのストレージコントローラが提供される。このストレージコントローラは、プロセッサとプロセッサに結合されるメモリとを含む。メモリはアクティブリストを含み、アクティブリストは、割り当てられたストレージコントローラのメモリ資源を記憶する。アクティブリストは、アクティブリストの一方の端にアクティブリストの先頭を含み、アクティブリストの先頭は、直近に使用されたアクティブリストエントリに対応する。アクティブリストは、アクティブリストの反対側の端にアクティブリストの末尾も含み、アクティブリストの末尾は、最も長い間使用されていないアクティブリストエントリに対応する。メモリは非アクティブリストも含み、非アクティブリストは、使用可能であるが割り当てられていないメモリ資源を記憶する。ストレージコントローラがホストコンピュータからホスト入出力要求を受け取ることに応答して、ホスト入出力要求がアクティブストリームに対応するかどうかをストレージコントローラが判定する。ホスト入出力要求がアクティブストリームに対応する場合、アクティブストリームに対応するアクティブリストの既存のアクティブリストエントリをストレージコントローラが更新する。ホスト入出力要求がアクティブストリームに対応しない場合、ストレージコントローラは、非アクティブリストの非アクティブリストエントリをアクティブリストの新たなアクティブリストエントリに変換し、その新たなアクティブリストエントリを構成する。
【０００８】
本発明の更に別の実施形態によれば、逐次入出力要求を効率的に処理するためのシステムが提供される。このシステムは、ホストコンピュータ、ホストコンピュータに結合されるストレージコントローラ、及びストレージコントローラに結合される１つ又は複数のストレージデバイスを含む。ストレージコントローラは、プロセッサとプロセッサに結合されるメモリとを含む。メモリはエントリのアクティブリストを含み、各アクティブリストエントリは、ホスト入出力要求の様々な逐次入出力ストリームに割り当てられるメモリ資源に対応する。各アクティブリストエントリは、時間ラストヒットを含み、時間ラストヒットとは、逐次入出力ストリームに宛てられる、最後に受け取られたホスト入出力要求のタイムスタンプである。メモリは、エントリの非アクティブリストも含み、各非アクティブリストエントリは、新たな逐次入出力ストリームに使用可能なメモリ資源に対応する。ストレージコントローラがホストコンピュータからホスト入出力要求を受け取り、ホスト入出力要求がアクティブリスト内の逐次入出力ストリームに対応しておらず、非アクティブリスト内に非アクティブリストエントリがないと判定することに応答し、ストレージコントローラは、既存のアクティブリストエントリを新たなアクティブリストエントリに変換する。新たなアクティブリストエントリは、受け取られるホスト入出力要求に対応する。
【０００９】
本発明の利点は、逐次入出力読取ストリーム及び書込みストリームについて、ストレージコントローラのメモリ資源の効率的な使用を提供することである。全てのストレージコントローラは、通常、一定量のオンボードメモリ資源を有する。本発明では、それらの資源の利益を最も享受することができる逐次入出力ストリームに、その限られたメモリ資源を割り当てる。
【００１０】
本発明のもう１つの利点は、進行中の逐次入出力ストリームを管理するために、限られた量の履歴データを使用することである。従って、ストリーム追跡メタデータに僅かな記憶空間しか割り当てられず、つまり、リードキャッシュ及びライトキャッシュのデータを記憶することを含む他の用途に、より多くの空間が使用可能である。
【００１１】
本発明の実施形態の更なる特徴及び利点が、とりわけ添付図面と一緒に解釈するとき以下の説明からより容易に明らかになる。
【図面の簡単な説明】
【００１２】
【図１ａ】本発明の実施形態による、第１の非ホストベースのデータストレージシステムの構成要素を示すブロック図である。
【図１ｂ】本発明の実施形態による、第２の非ホストベースのデータストレージシステムの構成要素を示すブロック図である。
【図１ｃ】本発明の実施形態による、第３の非ホストベースのデータストレージシステムの構成要素を示すブロック図である。
【図２ａ】本発明の実施形態による、第１のホストベースのデータストレージシステムの構成要素を示すブロック図である。
【図２ｂ】本発明の実施形態による、第２のホストベースのデータストレージシステムの構成要素を示すブロック図である。
【図２ｃ】本発明の実施形態による、第３のホストベースのデータストレージシステムの構成要素を示すブロック図である。
【図３】本発明の実施形態による、データストレージシステムを示すブロック図である。
【図４】本発明の実施形態による、ホストデータストリームを示すブロック図である。
【図５】本発明の実施形態による、第１のホストデータストリームの一例を示す図である。
【図６ａ】本発明の実施形態による、第２のホストデータストリームの一例を示す図である。
【図６ｂ】本発明の実施形態による、バーストのパラメータを示す図である。
【図７】本発明の実施形態による、バーストごとの未処理の入出力を示す図である。
【図８】本発明の実施形態による、論理ボリューム、ＶＤｉｓｋ、及びストレージデバイスのメタデータを示す図である。
【図９ａ】本発明の実施形態による、データストリーム・メタデータ・メモリ内に記憶されたアクティブリスト及び非アクティブリストを示すブロック図である。
【図９ｂ】本発明の実施形態による、アクティブリストエントリ内に記憶されたストリームメタデータを示すブロック図である。
【図１０】本発明の実施形態による、初期化プロセスを示すフローチャートである。
【図１１】本発明の実施形態による、新たな入出力要求の更新プロセスを示すフローチャートである。
【図１２】本発明の実施形態による、コマンド完了プロセスを示すフローチャートである。
【図１３】本発明の実施形態による、入出力要求の更新プロセスを示すフローチャートである。
【図１４】本発明の実施形態による、ストリーム関連付けプロセスを示すフローチャートである。
【図１５ａ】本発明の第１の実施形態による、単一の古いストリームをリサイクルするプロセスを示すフローチャートである。
【図１５ｂ】本発明の第２の実施形態による、所定数の古いストリームをリサイクルするプロセスを示すフローチャートである。
【図１５ｃ】本発明の第３の実施形態による、全ての古いストリームをリサイクルするプロセスを示すフローチャートである。
【図１６】本発明の実施形態による、アクティブストリームの構成プロセスを示すフローチャートである。
【図１７】本発明の実施形態による、移動ウィンドウの調整プロセスを示すフローチャートである。
【発明を実施するための形態】
【００１３】
本発明は、ホストコンピュータの逐次読取要求及び書込み要求（sequential read and write requests）に基づき、ストレージコントローラ内の逐次入出力資源の割り当て（sequential I/O resource allocation）を改善することを対象とする。オンボードメモリ資源（memory resource）の量を制限することによってストレージコントローラの費用を低く抑えるという要求に留意し、逐次入出力処理の効率及び性能を改善することが必要である。
【００１４】
逐次入出力の性能を改善する１つの方法は、現在アクティブな全ての入出力ストリームについて、キャッシュメモリの割当を追跡及び実施するために、単純にストレージコントローラのメモリ容量を可能な限り増やすことである。しかし、そのように単純にメモリを増やすことは通常、ホストコンピュータが一切要求しない可能性があり、又ははるかに後になって要求する可能性がある低頻度アクセスデータ又は無用のデータでストレージコントローラのメモリを占有することになる。加えて、ストレージコントローラが複数のホストコンピュータに結合されるシステムでは、特定のホストコンピュータに関する大量のデータでキャッシュメモリを占有することは、他のホストコンピュータがストレージコントローラのメモリ資源を利用するのを妨げる場合があり、他のホストコンピュータの読取性能及び／又は書込み性能を著しく制限する。
【００１５】
各ホストコンピュータは、そのホストコンピュータが実行するアプリケーション及び他のプログラムに基づき、データの読取要求及び書込み要求を発行する。殆どの場合、或るホストコンピュータが現在実行しているアプリケーション及び他のプログラムは、別のホストコンピュータが実行しているアプリケーション及び他のプログラムと異なる。従って、各ホストコンピュータは、ホストストリームとして知られる１組の異なる逐次読取要求又は書込み要求を発行する。所与のホストコンピュータは、複数のホストストリームを発行することができる。
【００１６】
静的リードキャッシュのサイズは、比較的一定の読取要求ストリームを提供するホストコンピュータにとって概して有効であるが、このことは、ストレージコントローラに読取要求のバーストを発行するホストコンピュータにとっては当てはまらないことが多々ある。バーストとは、同じホストコンピュータからの連続した逐次ホスト読取要求群である。ホスト読取要求のバーストは、最初の待ち行列の高度な長さ（high initial queue depth）を作り出す。ホスト読取要求のバーストの合計が、リードキャッシュの静的先読みサイズ（static read ahead size）を上回ることになる場合、ホストストリームがやがて先読みに追い付き、バーストごとにキャッシュミスが起こり、その結果、読取性能が低下する。
【００１７】
全てのホストストリームの重要な統計情報を追跡し、最もアクティブな逐次入出力ストリームに限られたメモリ資源を割り当てるストレージコントローラが必要とされている。より新しくよりアクティブなストリームにメモリ資源を提供するために、非アクティブストリーム又はより低い若しくはより古い利用度を有するストリームをリサイクルする。
【００１８】
次に図１ａを参照すると、本発明の実施形態による、第１の非ホストベースのデータストレージシステム１００の構成要素を示すブロック図が示されている。
データストレージシステム１００は、１つ又は複数のホストコンピュータ１０４を含む。ホストコンピュータ１０４は概してサーバであるが、デスクトップやモバイルコンピュータでも良い。ホストコンピュータ１０４は、ホストバス又はネットワーク１１２を介したストレージコントローラ１０８への読取／書込み要求を生成するアプリケーションプログラムを実行する。一実施形態では、ホストバス又はネットワーク１１２は、ＳＣＳＩ、ＦＣ−ＡＬ、ＵＳＢ、ファイアワイヤ、ＳＳＡ、ＳＡＳ、ＳＡＴＡ、インフィニバンド等のバスである。別の実施形態では、ホストバス又はネットワーク１１２は、イーサネット、ｉＳＣＳＩ、ファイバチャネル、ＳＳＡ、ＥＳＣＯＮ、ＡＴＭ、ＦＩＣＯＮ、ＮＶＭｅ、インフィニバンド等のネットワークである。
【００１９】
ホストコンピュータ１０４は、１つ又は複数のストレージコントローラ１０８とインターフェイスするが、明瞭にするためにストレージコントローラ１０８は１つしか図示していない。一実施形態では、ストレージコントローラ１０８がＲＡＩＤコントローラである。別の実施形態では、ストレージコントローラ１０８が、プロビジョニング、仮想化、複製、バックアップ機器等のストレージ機器である。ストレージコントローラ１０８は、ストレージデバイスバス１２０を介して、ストレージサブシステム１２４内のストレージデバイス１１６ａ、１１６ｂとの間でデータをやり取りする。ストレージデバイスバス１２０は、これだけに限定されないが、ＳＣＳＩ、ファイバチャネル、ＳＡＳ、ＳＡＴＡ、又はＳＳＡを含む、ストレージコントローラ１０８とストレージデバイス１１６との間でデータを直接伝送するための任意の適切なストレージバス又はバス群である。
【００２０】
一実施形態では、ストレージサブシステム１２４が１２個のストレージデバイス１１６を含む。他の実施形態では、ストレージサブシステム１２４が、１２個未満の又はそれを上回るストレージデバイス１１６を含み得る。ストレージデバイス１１６は、ハードディスクドライブ、ソリッドステートドライブ、光学ドライブ、及びテープドライブを含む様々な種類のストレージデバイスを含む。特定のストレージデバイスの種類の範囲内で、性能に応じて組織化されるストレージデバイス１１６の幾つかの下位区分がある場合がある。例えば、ハードディスクドライブは、キャッシュサイズ、ドライブＲＰＭ（例えば５，４００、７，２００、１０，０００、及び１５，０００）、待ち行列の長さ、ランダム転送速度、又は逐次転送速度に応じて組織化され得る。
【００２１】
次に図１ｂを参照すると、本発明の実施形態による、第２の非ホストベースのデータストレージシステム１２８の構成要素を示すブロック図が示されている。非ホストベースのデータストレージシステム１２８は、ストレージコントローラ１０８がストレージデバイス１１６と共にストレージサブシステム１３２内にあることを除き、非ホストベースのデータストレージシステム１００に似ている。図１ｂに示す実施形態では、ストレージコントローラ１０８が単一のＲＡＩＤコントローラ１０８である。但し、他の実施形態では、ストレージコントローラ１０８が複数のＲＡＩＤコントローラ１０８を表す。
【００２２】
次に図１ｃを参照すると、本発明の実施形態による、第３の非ホストベースのデータストレージシステム１３６の構成要素を示すブロック図が示されている。データストレージシステム１３６は、ストレージコントローラ１０８が２つの冗長なストレージコントローラ１０８ａ、１０８ｂを表すことを除き、データストレージシステム１００及び１２８に似ている。一実施形態では、ストレージコントローラ１０８ａ、１０８ｂの一方が故障した場合にホスト１０４がストレージデバイス１１６を引き続き使用できるようにするために、ストレージコントローラ１０８ａ、１０８ｂがアクティブ−アクティブフェイルオーバ（active-active failover）を利用する。コントローラ間メッセージングリンク１４０は、書込みデータをミラーリングし、フェイルオーバ及びフェイルバック操作（failback operation）を同期するために、ストレージコントローラ１０８ａ、１０８ｂ間の通信及びデータ経路を提供する。
【００２３】
次に図２ａを参照すると、本発明の実施形態による、第１のホストベースのデータストレージシステム２００の構成要素を示すブロック図が示されている。第１のホストベースのデータストレージシステム２００は、ストレージコントローラ１０８がホストコンピュータ１０４内にあることを除き、図１ａの第１の非ホストベースのストレージシステム１００に似ている。ストレージコントローラ１０８は、ホストコンピュータ１０４のローカルバスを介してインターフェイスし、ローカルバスは、ラピッドＩＯ、ＰＣＩ、ＰＣＩ−Ｘ、又はＰＣＩエクスプレスを含む、ホストコンピュータ１０４のＣＰＵとストレージコントローラ１０８との間の高速伝送用の任意の適切なバスとすることができる。ストレージコントローラ１０８は、ホストコンピュータ１０４のマザーボード上に組み込むことができ、又はホストコンピュータ１０４内の拡張ボード若しくは他の形式のアセンブリとすることができる。
【００２４】
次に図２ｂを参照すると、本発明の実施形態による、第２のホストベースのデータストレージシステム２０４の構成要素を示すブロック図が示されている。第２のホストベースのデータストレージシステム２０４は、ストレージサブシステム１２４の機能をホストコンピュータ１０４内に組み込む。データストレージシステム２０４は、高度に統合された独立型のデータストレージシステムを表す。
【００２５】
次に図２ｃを参照すると、本発明の実施形態による、第３のホストベースのデータストレージシステム２０８の構成要素を示すブロック図が示されている。第３のホストベースのデータストレージシステム２０８は、第１のホストベースのデータストレージシステム２００に似ているが、組み込まれたストレージコントローラ１０８の代わりにソフトウェアに基づく手法を使用する。ホストコンピュータ１０４とストレージデバイスバス１２０との間のインターフェイスは、適切なデータ及びコマンドバッファリング機能並びにプロトコル制御及び低レベル誤り処理（low-level error handling）を実現する、ホストバスアダプタ２１２によって提供される。ＣＰＵ２１６はメモリ２２０内のアプリケーション２２４を実行し、メモリ２２０とストレージサブシステム１２４内のストレージデバイス１１６ａ、１１６ｂとの間のデータフローを制御する。
【００２６】
次に図３を参照すると、本発明の実施形態による、データストレージシステム３００を示すブロック図が示されている。データストレージシステム３００は、バス又はネットワーク１１２を介してストレージコントローラ１０８に相互接続される１つ又は複数のホストコンピュータ１０４を含む。ホストコンピュータ１０４は、ホスト入出力要求３３２（host I/O request）の複数のグループである、ホストストリーム３０８を生成する。
【００２７】
ストレージコントローラ１０８は、ＣＰＵ３１２に結合されるメモリ３１６内に記憶されるプログラム命令を実行する、ＣＰＵ又はプロセッサ３１２を含む。ＣＰＵ３１２は、インテル（Ｉｎｔｅｌ）ｘ８６互換プロセッサ、組込みプロセッサ、モバイルプロセッサ、及び／又はＲＩＳＣプロセッサ等、ストレージコントローラ１０８のプログラムを実行するのに適した任意の処理装置を含む。ＣＰＵ３１２は、書替え可能ゲートアレイ（ＦＰＧＡ）、メモリコントローラ、ノースブリッジ装置（North Bridge device）、及び／又はサウスブリッジ装置（South Bridge device）を含む幾つかの装置を含み得る。
【００２８】
メモリ３１６は、揮発性メモリ３１６、不揮発性メモリ３１６、又は揮発性メモリ及び不揮発性メモリの両方の組合せ３１６の１つ若しくは複数の形態とすることができる。メモリ３１６はファームウェアを含み、そのファームウェアは、本発明のプロセス用のプログラム命令を含む、ＣＰＵ３１２が取り出して実行するプログラム命令を含む。不揮発性メモリ３１６の例には、これだけに限定されないが、フラッシュメモリ、ＳＤ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、ハードディスク、及びＮＯＶＲＡＭが含まれる。揮発性メモリ３１６は、様々なデータ構造及びユーザデータを記憶する。揮発性メモリ３１６の例には、これだけに限定されないが、ＳＲＡＭ、ＤＤＲ  ＲＡＭ、ＤＤＲ２  ＲＡＭ、ＤＤＲ３  ＲＡＭ、Ｚ−ＲＡＭ、ＴＴＲＡＭ、Ａ−ＲＡＭ、ＥＴＡ  ＲＡＭ、及び他の形態の一時メモリが含まれる。
【００２９】
メモリ３１６は、リードデータキャッシュ３２４及び一部の実施形態ではライトデータキャッシュ３２８を含み、これらキャッシュはホストコンピュータ１０４に対して改善された読み書き性能をそれぞれ提供する。メモリ３１６は、データストリーム・メタデータ・メモリ３２０も含む。データストリーム・メタデータ・メモリ３２０は、ホスト入出力要求３３２に関係するパラメータを記憶し、逐次入出力操作を制御するために使用される。
【００３０】
ストレージコントローラ１０８は、１つ又は複数のストレージデバイス１１６ａ〜１１６ｎを含むストレージサブシステム１２４、１３２に結合される。頻繁にアクセスされるデータはストレージデバイス１１６からリードデータキャッシュ３２４内に読み取られ、リードデータキャッシュ３２４では、データをホスト読取要求３３２に応答してストレージデバイス１１６から直接提供するよりもはるかに速く提供することができる。書込みデータは、ライトデータキャッシュ３２８内に最初に記憶され、かかるデータはストレージデバイス１１６に直接送られる書込みよりもはるかに速い。
【００３１】
一部の実施形態では、ストレージコントローラ１０８がタイマ３４０を含む。タイマ３４０は、ＣＰＵ３１２によって制御されるハードウェアのタイマとすることができ、又はＣＰＵ３１２上で実行されるソフトウェアルーチンでも良い。タイマ３４０は、バースト６１６間の時間を測定し、以下の説明及び図中で説明する。タイマ３４０は、任意の数のタイマを表すことができ、本発明では各論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス８０４に対応する各アクティブストリーム９１２ａ〜ｊに割り当てられる１つのタイマ３４０がある。
【００３２】
ストレージコントローラ１０８は、本発明の範囲又は動作から逸脱することなしに、無数の異なる機能上の構成及びアーキテクチャで機能的に構成され得ることを理解すべきである。
【００３３】
次に図４を参照すると、本発明の実施形態による、ホストデータストリーム３０８を示すブロック図が示されている。ホストデータストリーム３０８は、バースト又はホストバーストとして知られる、連続したホスト入出力要求３３２群を含む。ホストデータストリーム３０８は、任意の数のバースト又はホストバーストを含み得るが、４つのホストバースト、つまりホストバースト０  ４０４、ホストバースト１  ４１２、ホストバースト２  ４２０、及びホストバースト３  ４２８を図示する。各ホストバースト４０４、４１２、４２０、４２８は、同数の又は異なる数のホスト入出力要求３３２を含むことができる。ホストバースト０  ４０４は、ホスト入出力要求０  ４０８ａ〜ホスト入出力要求ｑ  ４０８ｑを含む。ホストバースト１  ４１２は、ホスト入出力要求０  ４１６ａ〜ホスト入出力要求ｔ  ４１６ｔを含む。ホストバースト２  ４２０は、ホスト入出力要求０  ４２４ａ〜ホスト入出力要求ｗ  ４２４ｗを含む。ホストバースト３  ４２８は、ホスト入出力要求０  ４３２ａ〜ホスト入出力要求ｚ  ４３２ｚを含む。
【００３４】
各ホスト入出力要求３３２、４０８、４１６、４２４、及び４３２は、入出力長（I/O length）４４０及び入出力アドレス（I/O address）４４４を含む。入出力長４４０は、ストレージデバイス１１６から読み取るべき、又はストレージデバイス１１６に書き込むべきブロック数又はバイト数であり、入出力アドレス４４４は、ホスト入出力要求３３２、４０８、４１６、４２４、及び４３２が宛てられる（directed）開始アドレスである。
【００３５】
次に図５を参照すると、本発明の実施形態による、第１のホストデータストリーム３０８ａの一例を示す図が示されている。ホストデータストリーム３０８ａは、或る期間５２８にわたって受け取られる複数のホスト入出力要求３３２を含み、ホスト入出力要求３３２は、ホスト入出力要求５０４として個々に識別される。図５は、逐次ホスト入出力要求５０４ａ、５０４ｂ、及び５０４ｃの第１のバースト、逐次ホスト入出力要求５０４ｇ、５０４ｈ、５０４ｉ、及び５０４ｊの第２のバースト、並びに逐次ホスト入出力要求５０４ｎ、５０４ｏ、５０４ｐ、及び５０４ｑの第３のバーストを示す。ストレージコントローラ１０８は、逐次入出力要求の３つのバーストが受け取られる間に他の非逐次ホスト入出力要求も受け取り、それらの非逐次ホスト入出力要求は入出力要求５０４ｄ、５０４ｅ、５０４ｆ、５０４ｋ、５０４ｌ、及び５０４ｍとして識別される。
【００３６】
各ホスト入出力要求５０４は関連する入出力サイズ５１６を有し、簡潔にするために、この例では全ての入出力要求５０４を同じ入出力サイズ５１６によって示す。更に、各入出力要求５０４が、開始ＬＢＡアドレス５２４及び終了ＬＢＡアドレス５３２を含むＬＢＡ範囲５２０にアドレス指定される。ストレージコントローラ１０８は、各入出力要求５０４を特定の時点５２８において受け取る。例えば、ストレージコントローラ１０８は、逐次ホスト入出力要求０  ５０４ａを時点ｔ０において、逐次ホスト入出力要求１  ５０４ｂを時点ｔ１において、逐次ホスト入出力要求２  ５０４ｃを時点ｔ２において受け取る。
【００３７】
ストレージコントローラ１０８は、受け取られる各ホスト入出力要求５０４が逐次的か非逐次的かを判定し、これについては以下のフローチャート及び添付の説明に関してより詳細に説明する。逐次ホスト入出力要求５０４では、ストレージコントローラ１０８が、ストリームウィンドウ（stream window）５０８及び移動ウィンドウ（move window）５１２の両方を設定し、移動ウィンドウ５１２は、ストリームウィンドウ５０８に使用されるＬＢＡ範囲５２０よりも小さく、ストリームウィンドウ５０８の境界内に含まれるＬＢＡ範囲５２０を表す。ストリームウィンドウ５０８は、現在のストリーム３０８ａのＬＢＡ範囲を設定するのに対し、移動ウィンドウ５１２及びストリームウィンドウ５０８の境界を変えなければならないときを決定するために、ストレージコントローラ１０８は移動ウィンドウを使用する。逐次ホスト入出力要求５０４が、ストリームウィンドウ５０８内にあるが、ストリームウィンドウ５０８に対応する移動ウィンドウ５１２の外側にある場合、移動ウィンドウ５１２及びストリームウィンドウ５０８の境界を変えなければならない。目的は、同じストリーム３０８ａの逐次入出力要求５０４を、移動ウィンドウ５１２及びストリームウィンドウ５０８内に保つことである。
【００３８】
ストレージコントローラ１０８は、逐次入出力要求５０４ａ、５０４ｂ、及び５０４ｃのＬＢＡに基づいて移動ウィンドウ５１２ａを最初に設定する。入出力要求５０４ｄ、５０４ｅ、及び５０４ｆは、明らかに移動ウィンドウ５１２ａ及びストリームウィンドウ５０８ａの両方の外側にあり、このことは、移動ウィンドウ５１２及びストリームウィンドウ５０８を変えなければならないことをストレージコントローラ１０８に知らせる。次にストレージコントローラ１０８は、入出力要求５０４ｇ、５０４ｈ、５０４ｉ、及び５０４ｊが逐次入出力要求５０４であることを設定し、移動ウィンドウ５１２ｂの境界を有するように移動ウィンドウ５１２を変更し、ストリームウィンドウ５０８ｂの境界を有するようにストリームウィンドウ５０８を変更する。入出力要求５０４ｋ、５０４ｌ、及び５０４ｍは、明らかに移動ウィンドウ５１２ｂ及びストリームウィンドウ５０８ｂの両方の外側にあり、このことは、移動ウィンドウ５１２及びストリームウィンドウ５０８を変えなければならないことをストレージコントローラ１０８に知らせる。次にストレージコントローラ１０８は、入出力要求５０４ｎ、５０４ｏ、５０４ｐ、及び５０４ｑが逐次入出力要求５０４であることを設定し、移動ウィンドウ５１２ｃの境界を有するように移動ウィンドウ５１２を変更し、ストリームウィンドウ５０８ｃの境界を有するようにストリームウィンドウ５０８を変更する。移動ウィンドウ５１２及びストリームウィンドウ５０８の境界を追跡するプロセスは本発明の核心であり、図１０〜図１７に関して詳しく説明する。
【００３９】
次に図６ａを参照すると、本発明の実施形態による、第２のホストデータストリーム３０８ｂの一例を示す図が示されている。６つのバースト６１６群が或る期間６１２にわたってストレージコントローラ１０８によって受け取られたと示されており、バースト６１６ごとにメガバイト（ＭＢ）単位のバーストサイズ６０８が示されている。図６ａに示す例は、バースト０  ６１６ａ、バースト１  ６１６ｂ、バースト２  ６１６ｃ、バースト３  ６１６ｄ、バースト４  ６１６ｅ、及びバースト５  ６１６ｆとして識別する、逐次ホスト入出力要求３３２の６つのバーストを示す。
【００４０】
バースト間の時間ｔｌｂが、連続した２つのバースト６１６ごとの間に示されている。バースト０  ６１６ａとバースト１  ６１６ｂとの間の時間はｔｌｂ０である。バースト１  ６１６ｂとバースト２  ６１６ｃとの間の時間はｔｌｂ１である。バースト２  ６１６ｃとバースト３  ６１６ｄとの間の時間はｔｌｂ２である。バースト３  ６１６ｄとバースト４  ６１６ｅとの間の時間はｔｌｂ３である。最後に、バースト４  ６１６ｅとバースト５  ６１６ｆとの間の時間はｔｌｂ４である。
【００４１】
次に図６ｂを参照すると、本発明の実施形態による、バーストのパラメータを示す図が示されている。メタデータメモリ３２０内に記憶されるバーストのパラメータを説明するために、図６ｂは図６ａの例を参照する。
【００４２】
各バースト６１６は、関連するバースト長６２０のパラメータを有し、バースト０  ６１６ａは２ＭＢのバースト長６２０を有し、バースト１  ６１６ｂは１ＭＢのバースト長６２０を有し、バースト２  ６１６ｃは６ＭＢのバースト長６２０を有し、バースト３  ６１６ｄは２ＭＢのバースト長６２０を有し、バースト４  ６１６ｅは１ＭＢのバースト長６２０を有し、バースト５  ６１６ｆは２ＭＢのバースト長６２０を有する。各バースト６１６の間は、最後のバーストからの時間ｔｌｂ６２４である。Ｔｌｂ０は２００ｍｓであり、Ｔｌｂ１は３０ｍｓであり、Ｔｌｂ２は６０ｍｓであり、Ｔｌｂ３は１２０ｍｓであり、Ｔｌｂ４は２００ｍｓである。
【００４３】
次に図７を参照すると、本発明の実施形態による、バースト６１６ごとの未処理の入出力を示す図である。図７は、ホスト入出力要求３３２のバースト６１６に関する、本発明の経時的な様々なパラメータの実際の対話を示す。単純にするために、全てのホスト入出力要求３３２の入出力長４４０を「１」（例えばブロック）と仮定する。
【００４４】
バースト６１６に関する最初のホスト入出力要求３３２の前、未処理の入出力７０４はゼロである。バースト６１６に関する最初のホスト入出力要求３３２をストレージコントローラ１０８が受け取ると、未処理の入出力７０４が（最初のホスト入出力要求３３２のサイズを反映する）「１」になり、第１の実施形態ではタイマ３４０が止められ（７１２）、或いは第２の実施形態では停止タイムスタンプを記憶する（７２０）。
【００４５】
更に多くのホスト入出力要求３３２が受け取られると、ストレージコントローラ１０８は未処理の入出力７０４を調整する。しかし、コマンド完了７０８が生じると、ストレージコントローラ１０８は、完了した各ホスト入出力要求７０８のサイズずつ未処理の入出力７０４を減らす。未処理の入出力７０４がゼロに戻ると（現在のバースト６１６の終了を意味する）、ストレージコントローラ１０８は、第１の実施形態ではタイマを開始し（７１６）、或いは第２の実施形態では開始タイムスタンプをメタデータメモリ３２０内に記憶する（７２４）。次いで、この一連の操作を後続のバースト６１６ごとに繰り返す。
【００４６】
次に図８を参照すると、本発明の実施形態による、論理ボリューム、ＶＤｉｓｋ、及びストレージデバイスのメタデータ８０８を示す図が示されている。逐次ホスト入出力要求３３２、５０４は論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス１１６のどれに宛てられても（directed）良く、ストレージコントローラ１０８は、１つ又は複数の論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス１１６を有する。図８は、ストレージコントローラ１０８が、８０４ａ〜８０４ｅとして識別する５つの論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス１１６を有するシステムを示す。
【００４７】
各論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス８０４は、対応する論理ボリューム、ＶＤｉｓｋ、又はストレージデバイスのメタデータセット８０８を有し、各メタデータセット８０８は、他のメタデータセット８０８とは独立して管理される。好ましい実施形態では、ストレージコントローラ１０８が、約１，０００個の論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス８０４を追跡し（track）、最初の３２個の論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス８０４については６５個の逐次入出力ストリーム３０８を追跡し、最初の３２個の論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス８０４を超える任意の論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス８０４については４つの逐次入出力ストリーム３０８を追跡する。
【００４８】
代替的実施形態では、各論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス８０４に割り当てられるアクティブストリームリスト９０８の代わりに、全ての論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス８０４が使用可能なアクティブストリームの共通のプール９０８がある。管理が更に複雑になる不利益はあるが、この実施形態には、各論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス８０４にストリームを割り当てる際に、又はそれらへのストリームを制限する際に更なる柔軟性があるという利点がある。
【００４９】
次に図９ａを参照すると、本発明の実施形態による、データストリーム・メタデータ・メモリ３２０内に記憶されたアクティブリスト９０８及び非アクティブリスト９０４を示すブロック図が示されている。メタデータメモリ３２０は、本発明のプロセスで使用されるパラメータを記憶する。
【００５０】
各論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス８０４は、対応するアクティブリスト９０８及び非アクティブリスト９０４を有する。各論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス８０４が使用可能な所定数のストリーム資源９０４ａ〜ｚがあり、各ストリーム資源９０４ａ〜ｚは、単一の逐次ホスト入出力ストリーム３０８のメタデータパラメータを記憶する。最初は、全てのストリーム資源９０４ａ〜ｚが非アクティブリスト９０４上にある。後で個々のストリーム３０８が追跡されると、それらのストリーム資源９０４ａ〜ｚがアクティブストリーム９１２ａ〜ｚになる。如何なる場合でも、ストリーム資源９０４ａ〜ｚの数にアクティブストリーム９１２ａ〜ｚの数を加えた数は常に所定数に等しい。好ましい実施形態では、ストリーム資源９０４ａ〜ｚにアクティブストリーム９１２ａ〜ｚを加えた所定数が「６５」に等しい。この数は、ストレージコントローラ１０８上のメモリ３１６のサイズ、データ構造８０８のサイズ、及び同時に追跡するのが生産的である逐次ホスト入出力ストリーム３０８の数によって決まる。
【００５１】
非アクティブリスト９０４は、新たなストリーム３０８に割り当てることができる利用可能資源を含む。ストリーム資源９０４ａ〜ｚがアクティブストリーム９１２ａ〜ｚに割り当てられると、非アクティブリストは１つのストリーム資源９０４ａ〜ｚずつ減らされる。或る時点で、全てのストリーム資源９０４ａ〜ｚがアクティブストリーム９１２ａ〜ｚに割り当てられる場合がある。その場合、非アクティブリスト９０４上にはそれ以上のストリーム資源９０４ａ〜ｚがなく、ストレージコントローラ１０８は、新たなストリーム３０８にストリーム資源９０４ａ〜ｚを割り当てるために、アクティブリスト９０８上の少なくとも１つのアクティブストリーム９１２ａ〜ｚを解放しなければならない。非アクティブリスト９０４上の全てのストリーム資源９０４ａ〜ｚはあらゆる点で等しく、新たなストリーム３０８のためにどのストリーム資源９０４ａ〜ｚを選択しても良い。
【００５２】
アクティブリスト９０８は、現在の論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス８０４に宛てられるストリーム３０８に関するアクティブストリーム９１２ａ〜ｚを含む。電源投入時、全てのアクティブリスト９０８が空であり、アクティブストリーム９１２ａ〜ｚを含まない。ストリーム資源９０４ａ〜ｚがアクティブストリーム９１２ａ〜ｚに割り当てられると、アクティブリスト９０８にデータ投入される。或る時点で、全てのストリーム資源９０４ａ〜ｚがアクティブリスト９０８に割り当てられる場合があり、アクティブリスト９０８は所定数のアクティブストリーム９１２ａ〜ｚを含む。アクティブストリーム９１２ａ〜ｚはアクティブリスト９０８内で順序付けられ、直近に使用されたアクティブストリームがアクティブリストの先頭９１６に配置される。従って、最も長い間使用されていないアクティブストリームが、アクティブリストの先頭９１６とは反対側のアクティブリストの末尾９２０に配置される。
【００５３】
各アクティブストリームエントリ９１２ａ〜ｚは、各アクティブストリーム９１２を追跡するためにストレージコントローラ１０８が使用する幾つかのメタデータパラメータを含む。ストリームラストヒット（ｔｌｈ）９２４の値は、対応するストリームが最後にアクセスされた時間を記憶する。現在のストリームウィンドウ５０８は、ストリームウィンドウのＬＢＡ上限９２８及びストリームウィンドウのＬＢＡ下限９３２によって指定される境界を有する。現在の移動ウィンドウ５１２は、移動ウィンドウのＬＢＡ上限９３６及び移動ウィンドウのＬＢＡ下限９４０によって指定される境界を有する。各ストリーム３０８は、ストリームリサイクル時間９４４も有し、ストリームリサイクル時間９４４は、新たに使用可能なストリーム資源９０４ａ〜ｚを作り出すために、アクティブストリーム９１２をいつ非アクティブリストにリサイクルしなければならないのかを計算するために使用される。各ストリーム３０８は、ストリームの未処理の入出力９６０のカウントも有し、このカウントを、ストレージコントローラ１０８が使用してストリーム３０８がいつ開始／停止するのかを求める。ストリームの未処理の入出力９６０は、図７の未処理の入出力によって識別されるカウントを記憶する。
【００５４】
図９ｂに示すように、ストレージコントローラ１０８は、最後のバーストからの時間（ｔｌｂ）待ち行列９４８のための最後のバーストからの時間（ｔｌｂ）エントリを計算するために、バースト開始時間９６４ａ及びバースト停止時間９６４ｂを追跡する。バースト開始時間９６４ａは、ストリームの未処理の入出力９６０が１から０に遷移するときに記憶される。バースト停止時間９６４ｂは、ストリームの未処理の入出力９６０が０から１に遷移するときに記憶される。
【００５５】
最後のバーストからの時間待ち行列（time since last burst queue）９４８は、指定された数の最後のバーストからの時間エントリ９４８ａ〜ｊの巡回待ち行列（circular queue）である。好ましい実施形態では、最後のバーストからの時間待ち行列９４８上には１０個の最後のバーストからの時間エントリａ〜ｊがある。他の実施形態では、１０個のエントリよりも少ない、又は多いエントリがあっても良い。最後のバーストからの時間待ち行列９４８内の現在のエントリは、現在の最後のバーストからの時間ポインタ９５２によって識別され、このポインタは、本発明のプロセスによって指示される通りに単方向にインクリメントする（９５６）。
【００５６】
ストレージコントローラ１０８は、最後のバーストからの時間ｔｌｂを２つの方法のうちの１つで測定する。一実施形態では、ストレージコントローラがタイマ３４０を含む。ストレージコントローラ１０８は、バースト６１６が終了するときにタイマ３４０を開始し、次のバースト６１６が開始するときにタイマ３４０を停止する。タイマ３４０の値は、現在の最後のバーストからの時間ポインタ９５２によって識別されるメタデータメモリ３２０内の位置において、最後のバーストからの時間ｔｌｂ９４８ａ〜ｊとして記憶される。別の実施形態では、メタデータメモリ３２０がｔｌｂバースト開始時間９６４ａ及びｔｌｂバースト停止時間のスタンプ９６４ｂを含む。ｔｌｂバースト開始時間９６４ａは、バースト６１６の終了時に記憶される自走タイマ３４０の値である。ｔｌｂバースト停止時間９６４ｂは、次のバースト６１６の開始時に記憶される自走タイマ３４０の値である。ｔｌｂバースト開始時間９６４ａとｔｌｂバースト停止時間９６４ｂとの差が、現在の最後のバーストからの時間ポインタ９５２によって識別されるメタデータメモリ３２０内の位置において、最後のバーストからの時間ｔｌｂエントリ９４８ａ〜ｊとして記憶される。
【００５７】
最後のバーストからの時間待ち行列９４８について巡回待ち行列を示すが、複数のバースト長９４８ａ〜ｊを記憶するために、複数のデータ構造を含む任意の数のデータ構造を利用できることを当業者は理解すべきである。
【００５８】
次に図１０を参照すると、本発明の実施形態による、初期化プロセスを示すフローチャートが示されている。流れはブロック１００４で始まる。
ブロック１００４で、ストレージコントローラ１０８が、所定数のストリーム資源９０４ａ〜ｊを有する全ての非アクティブリスト９０４にデータを供給する（populate）。好ましい実施形態では、ストリーム資源９０４ａ〜ｊの所定数が６５個である。他の実施形態では、ストリーム資源９０４ａ〜ｊの所定数が６５個よりも多く、又は６５個未満である。流れはブロック１００８に進む。
【００５９】
ブロック１００８で、ストレージコントローラ１０８は、全てのウィンドウのＬＢＡ範囲９２８、９３２、９３６、及び９４０、並びに時間ラストヒット値（time last hit value）９２４をゼロに設定する。このことは、逐次入出力ストリーム３０８を追跡することに備えて論理ボリューム、ＶＤＩＳＫ、又はストレージデバイスのメタデータ８０８を初期化するために、論理ボリューム、ＶＤＩＳＫ、又はストレージデバイス８０４ごとに行う。流れはブロック１０１２に進む。
【００６０】
ブロック１０１２で、ストレージコントローラ１０８が、各論理ボリューム、ＶＤＩＳＫ、又はストレージデバイスのメタデータ８０８内のストリームリサイクル時間９４４を既定値に設定する。このブロックでは、アクティブストリーム９１２を必要に応じてリサイクルすべきときを判定するための既定値を設定する。好ましい実施形態では、ストリームリサイクル時間の既定値が６秒である。他の実施形態では、ストリームリサイクル時間９４４の既定値が６秒未満であるか又は６秒を超える。流れはブロック１０１２で終わる。
【００６１】
次に図１１を参照すると、本発明の実施形態による、新たな入出力要求の更新プロセスを示すフローチャートが示されている。この新たな入出力更新プロセスは、入力されるホスト入出力要求３３２を追跡し、未処理の入出力７０４に基づき、ストリームリサイクル時間９４４をアクティブストリーム９１２ａ〜ｊごとに調整する。流れはブロック１１０４で始まる。
【００６２】
ブロック１１０４で、ストレージコントローラ１０８が、ホストコンピュータ１０４からホスト入出力要求３３２を受け取る。流れはブロック１１０８に進む。
ブロック１１０８で、ストレージコントローラ１０８は、受け取ったホスト入出力要求３３２に対応するアクティブストリーム９１２ａ〜ｊについて、未処理の入出力カウント９６０をインクリメントする。未処理の入出力カウント９６０は、まだ完了していない、論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス８０４に発行された入出力要求３３２の現在のカウントである。流れは判定ブロック１１１２に進む。
【００６３】
判定ブロック１１１２で、ストレージコントローラ１０８は、未処理の入出力カウント９６０が「１」に等しいかどうかを判定する。未処理の入出力カウント９６０が「１」に等しい場合、現在のアクティブストリーム９１２ａ〜ｊ内で新たなバースト６１６が開始している（即ち、ブロック１１０４でホスト入出力要求３３２を受け取る前に未処理の入出力カウント９６０はゼロに等しかった）。未処理の入出力カウント９６０が「１」に等しい場合、流れはブロック１１１６に進む。未処理の入出力カウント９６０が「１」に等しくない場合、新たなバースト６１６は開始しておらず、流れは終了する。本発明では、バースト６１６がいつ開始及び終了するのかを知り、最後のバーストからの時間９４８のメタデータを保つことだけが重要である。
【００６４】
ブロック１１１６で、ストレージコントローラ１０８は、受け取ったホスト入出力要求３３２に対応するアクティブストリーム９１２ａ〜ｊのバーストタイマ３４０を停止する。未処理の入出力カウント９６０が「０」から「１」に遷移してから新たなバースト６１６が開始しており、従って最後のバーストからの時間９４８を記録しなければならない。流れはブロック１１２０に進む。
【００６５】
ブロック１１２０で、ストレージコントローラ１０８は、バーストタイマ３４０の値をｔｌｂバースト停止時間９６４ｂとして記憶し、最後のバーストからの時間値９４８をバースト停止時間９６４ｂとバースト開始時間９６４ａとの差として計算し、現在の最後のバーストからの時間ポインタ９５２に対応する最後のバーストからの時間待ち行列９４８の位置に、その最後のバーストからの時間値を記憶する。流れはブロック１１２４に進む。
【００６６】
ブロック１１２４で、ストレージコントローラ１０８は、現在の最後のバーストからの時間ポインタ９５２をインクリメントし、バーストタイマ３４０を初期化する。バーストタイマが自走の実施形態では、バーストタイマ３４０を初期化する必要はない。しかし、これらの実施形態では、バースト開始時間値９６４ａを記憶する必要がある。記憶することで、最後のバーストからの次の時間値９４８ａ〜ｊを記憶するために、最後のバーストからの時間待ち行列の次の位置９４８を用意し、現在のバースト６１６がいつ終了するのかをカウントし始めるようにバーストタイマ３４０を準備する。流れは判定ブロック１１２８に進む。
【００６７】
判定ブロック１１２８で、ストレージコントローラ１０８は、最後のバーストからの時間待ち行列９４８が満杯（full）かどうかを判定する。待ち行列９４８ａ〜ｊ内の全ての位置がバーストタイマ３４０の値を含む場合、最後のバーストからの時間待ち行列９４８は満杯である。最後のバーストからの時間待ち行列９４８が満杯である場合、流れはブロック１１３２に進む。最後のバーストからの時間待ち行列９４８が満杯でない場合、流れは終了する。新たなストリームリサイクル時間９４４は、最後のバーストからの時間待ち行列９４８が満杯である場合にのみ計算される。最後のバーストからの時間待ち行列９４８が満杯になる前は、ストリームリサイクル時間９４４に既定値が使用される。好ましい実施形態では、ストリームリサイクル時間９４４の既定値が６秒である。他の実施形態では、ストリームリサイクル時間９４４の既定値が６秒未満であるか又は６秒を超える。
【００６８】
ブロック１１３２で、ストレージコントローラ１０８は、最後のバーストからの時間待ち行列９４８の加重平均を計算してストリームリサイクル時間９４４を作り出す。より最近の最後のバーストからの時間値９４８ａ〜ｊに対して、より古い最後のバーストからの時間値９４８ａ〜ｊよりも大きい重みを与えるために、加重平均が好ましい。好ましい実施形態では、それぞれの最後のバーストからの時間待ち行列９４８内に１０個の最後のバーストからの時間値９４８ａ〜ｊがある。更に、好ましい実施形態では、加重平均は、重み付けしたそれぞれの最後のバーストからの時間値９４８ａ〜ｊの和を１０の階乗で割った値に等しい。ストレージコントローラ１０８は、直近のｔｌｂ値に１０を掛け、次に新しいｔｌｂ値に９を掛け、最も離れたｔｌｂ値に１を掛けるまでそのように続けることにより、重み付けされた最後のバーストからの時間値９４８ａ〜ｊを計算する。直近のｔｌｂ値は、最後のバーストからの時間ポインタ９５２の現在の位置によって識別される。他の実施形態では、加重平均を異なるように計算し、又はストリームリサイクル時間９４４が、最後のバーストからの時間待ち行列９４８内の値の単純な非加重平均である。流れはブロック１１３６に進む。
【００６９】
ブロック１１３６で、ストレージコントローラ１０８は、受け取ったホスト入出力要求３３２に対応するストリームリサイクル時間９４４の位置に、ブロック１１３２の計算済みのストリームリサイクル時間を記憶する。流れはブロック１１３６で終わる。
【００７０】
次に図１２を参照すると、本発明の実施形態による、コマンド完了プロセスを示すフローチャートが示されている。流れはブロック１２０４で始まる。
ブロック１２０４で、ホスト入出力要求３３２が完了する。ホスト入出力要求３３２は、特定の論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス８０４に宛てられている。流れはブロック１２０８に進む。
【００７１】
ブロック１２０８で、ストレージコントローラ１０８は、完了したホスト入出力要求３３２に対応するアクティブストリーム９１２ａ〜ｊについて、未処理の入出力カウント９６０をデクリメントする。今では、完了したホスト入出力要求３３２が宛てられた論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス８０４の未処理の入出力７０４が１つ減っている。流れは判定ブロック１２１２に進む。
【００７２】
判定ブロック１２１２で、ストレージコントローラ１０８は、未処理の入出力カウント９６０がゼロに等しいかどうかを判定する。未処理の入出力カウント９６０がゼロに等しい場合、現在のバースト６１６が終了しており、流れはブロック１２１６に進む。未処理の入出力カウント９６０がゼロに等しくない場合、現在のバースト６１６が終了しておらず、流れは判定ブロック１２１２で終わる。
【００７３】
ブロック１２１６で、ストレージコントローラ１０８は、完了したホスト入出力要求３３２に対応するアクティブストリーム９１２ａ〜ｊのバーストタイマ３４０を初期化し、開始する。流れはブロック１２２０に進む。
【００７４】
ブロック１２２０で、ストレージコントローラ１０８は、完了したホスト入出力要求３３２に対応するアクティブストリーム９１２ａ〜ｊのバースト開始時間９６４ａとしてバーストタイマの値３４０を記憶する。流れはブロック１２２０で終わる。
【００７５】
次に図１３を参照すると、本発明の実施形態による、入出力要求３３２の更新プロセスを示すフローチャートが示されている。流れはブロック１３０４で始まる。
ブロック１３０４で、ストレージコントローラ１０８が、ホストコンピュータ１０４からホスト入出力要求３３２を受け取る。流れはブロック１３０８に進む。
【００７６】
ブロック１３０８で、ストレージコントローラ１０８は、ホスト入出力要求３３２が宛てられた論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス８０４に対応するアクティブリスト９０８を検索する。流れは判定ブロック１３１２に進む。
【００７７】
判定ブロック１３１２で、ストレージコントローラ１０８は、受け取ったホスト入出力要求３３２の開始ＬＢＡ５２４が、アクティブストリームウィンドウ５０８内にあるかどうかを判定する。アクティブリスト９０８を検索し、開始ＬＢＡ５２４をストリームウィンドウ５０８の範囲と比較するプロセスについては、図１４に関してより詳細に説明する。受け取ったホスト入出力要求３３２の開始ＬＢＡ５２４がアクティブストリームウィンドウ５０８内にある場合、流れはブロック１３３６に進む。受け取ったホスト入出力要求３３２の開始ＬＢＡ５２４がアクティブストリームウィンドウ５０８内にない場合、流れは判定ブロック１３１６に進む。
【００７８】
判定ブロック１３１６で、ストレージコントローラ１０８は、ホスト入出力要求３３２が宛てられた論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス８０４に対応する非アクティブリスト９０４が空かどうかを判定する。ホスト入出力要求３３２はアクティブストリームウィンドウ５０８内になく、従って、新たなアクティブストリーム９１２ａ〜ｊを作成する必要がある。ホスト入出力要求３３２が宛てられた論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス８０４に対応する非アクティブリスト９０４が空の場合、流れはブロック１３２０に進む。ホスト入出力要求３３２が宛てられた論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス８０４に対応する非アクティブリスト９０４が空ではない場合、流れはブロック１３２８に進む。
【００７９】
ブロック１３２０で、ストレージコントローラ１０８は古いストリームをリサイクルする。非アクティブリスト９０４内には使用可能なストリーム資源９０４ａ〜ｊはなく、ストレージコントローラ１０８は、アクティブリスト９０８の１つ又は複数のアクティブストリーム９１２ａ〜ｊをリサイクルする必要がある。アクティブストリームのリサイクルプロセスについては、図１５ａ、図１５ｂ、及び図１５ｃの中でより詳細に説明する。一度に１つのアクティブストリーム９１２ａ〜ｊをリサイクルする実施形態は、図１５ａのプロセスを使用する。一度に所定数までのアクティブストリーム９１２ａ〜ｊをリサイクルする実施形態は、図１５ｂのプロセスを使用する。リサイクルの基準を満たす全てのアクティブストリーム９１２ａ〜ｊをリサイクルする実施形態は、図１５ｃのプロセスを使用する。流れは判定ブロック１３２４に進む。
【００８０】
判定ブロック１３２４で、ストレージコントローラ１０８は、ホスト入出力要求３３２が宛てられた論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス８０４に対応する非アクティブリスト９０４が空かどうかを再度判定する。図１５ａ〜図１５ｃの古いストリームをリサイクルするプロセスの何れも、リサイクル可能な古いストリーム３０８を一切識別しないこともあり得る。その場合、流れは判定ブロック１３２４で終わる。しかし、図１５ａ〜図１５ｃのプロセスが、リサイクル可能な少なくとも１つの古いストリーム３０８を識別し、そのストリーム３０８を非アクティブリスト９０４上に配置した場合、流れはブロック１３２８に進む。
【００８１】
ブロック１３２８で、ストレージコントローラ１０８は、ストリーム資源９０４ａ〜ｊを非アクティブリスト９０４から除去する。今では非アクティブリスト９０４上のストリーム資源９０４ａ〜ｊが以前よりも１つ減っており、このステップの前に非アクティブリスト９０４上にストリーム資源９０４ａ〜ｊが１つしかなかった場合、今では非アクティブリスト９０４上にストリーム資源９０４ａ〜ｊはない。流れはブロック１３３２に進む。
【００８２】
ブロック１３３２で、ストレージコントローラ１０８は、非アクティブリスト９０４から最近回復したストリーム資源９０４ａ〜ｊを使用して新たなアクティブストリーム９１２ａ〜ｊを構成する。新たなアクティブストリーム９１２ａ〜ｊの構成プロセスについては、図１６に関してより詳細に説明する。流れはブロック１３４０に進む。
【００８３】
ブロック１３３６で、ストレージコントローラ１０８は、アクティブストリーム９１２ａ〜ｊをアクティブリスト９０８から除去する。受け取ったホスト入出力要求３３２の開始ＬＢＡ５２４はアクティブストリームウィンドウ５０８内にあり、ストレージコントローラは、受け取ったホスト入出力要求３３２に対応するアクティブストリーム９１２ａ〜ｊをアクティブリスト９０８から除去する。流れはブロック１３４０に進む。
【００８４】
ブロック１３４０で、ストレージコントローラ１０８は、現在の時間を反映するように、除去したアクティブストリーム９１２ａ〜ｊの時間ラストヒット９２４を更新する。流れはブロック１３４４に進む。
【００８５】
ブロック１３４４で、ストレージコントローラ１０８は、除去したアクティブストリーム９１２ａ〜ｊの移動ウィンドウ５１２を必要に応じて調整する。受け取ったホスト入出力要求３３２の開始ＬＢＡ５２４が現在の移動ウィンドウ５１２の外側にある場合、ストレージコントローラ１０８は移動ウィンドウの範囲９３６、９４０を調整する。このプロセスについては、図１７に関してより詳細に説明する。流れはブロック１３４８に進む。
【００８６】
ブロック１３４８で、ストレージコントローラ１０８は、調整したアクティブストリーム９１２ａ〜ｊをアクティブリストの先頭９１６に配置する。このステップはアクティブリスト９０８の順序を保ち、直近に使用されたアクティブストリームはアクティブリストの先頭９１６に、最も長い間使用されていないアクティブストリーム９１２はアクティブリストの末尾９２０に置かれる。この時点で、受け取ったホスト入出力要求３３２に対処するようにアクティブリスト９０８及び非アクティブリスト９０４が調整され、従って流れはブロック１３４８で終わる。
【００８７】
次に図１４を参照すると、本発明の実施形態による、ストリーム関連付けプロセスを示すフローチャートが示されている。このストリーム関連付けプロセスでは、受け取られるホスト入出力要求３３２が宛てられた論理ボリューム、ＶＤｉｓｋ、又はストレージデバイス８０４に対応するアクティブリスト９０８内で、アクティブストリーム９１２ａ〜ｊをもしあれば識別する。流れはブロック１４０４で始まる。
【００８８】
ブロック１４０４で、ストレージコントローラ１０８は、アクティブリスト９０８が空かどうかを判定する。電源投入による初期化後等、アクティブストリーム９１２ａ〜ｊが現在アクティブリスト９０８内にない可能性がある。アクティブリスト９０８が空の場合、流れはブロック１４１２に進む。アクティブリスト９０８が空ではない場合、流れはブロック１４０８に進む。
【００８９】
ブロック１４０８で、ストレージコントローラ１０８は、アクティブリストの先頭９１６から最初のアクティブリストエントリ９１２ａを選択する。アクティブリスト９０８内には少なくとも１つのアクティブストリーム９１２ａ〜ｊがあり、直近のエントリ９１６が選択される。流れは判定ブロック１４１６に進む。
【００９０】
判定ブロック１４１６で、ストレージコントローラ１０８は、受け取ったホスト入出力要求３３２の開始ＬＢＡ５２４がストリームウィンドウのＬＢＡ上限９２８を下回るかどうかを判定する。受け取ったホスト入出力要求３３２の開始ＬＢＡ５２４がストリームウィンドウのＬＢＡ上限９２８を下回る場合、流れは判定ブロック１４２０に進む。受け取ったホスト入出力要求３３２の開始ＬＢＡ５２４がストリームウィンドウのＬＢＡ上限９２８以上の場合、受け取ったホスト入出力要求３３２はストリームウィンドウ５０８内になく、流れは判定ブロック１４２８に進む。
【００９１】
判定ブロック１４２０で、ストレージコントローラ１０８は、受け取ったホスト入出力要求３３２の開始ＬＢＡ５２４がストリームウィンドウのＬＢＡ下限９３２を上回るかどうかを判定する。受け取ったホスト入出力要求３３２の開始ＬＢＡ５２４がストリームウィンドウのＬＢＡ下限９３２を上回る場合、流れはブロック１４２４に進む。受け取ったホスト入出力要求３３２の開始ＬＢＡ５２４がストリームウィンドウのＬＢＡ下限９３２以下の場合、受け取ったホスト入出力要求３３２はストリームウィンドウ５０８内になく、流れは判定ブロック１４２８に進む。
【００９２】
ブロック１４２４で、ストレージコントローラ１０８は、受け取ったホスト入出力要求３３２が、選択されたアクティブストリームウィンドウ５０８内にあると判定する。流れはブロック１４２４で終わり、処理を図１３の判定ブロック１３１２に戻し、判定ブロック１３３６に移る。
【００９３】
判定ブロック１４２８で、ストレージコントローラ１０８は、検索する更に多くのアクティブリストエントリ９１２ａ〜ｊがあるかどうかを判定する。検索する更に多くのアクティブリストエントリ９１２ａ〜ｊがある場合、流れはブロック１４３６に進む。検索する更に多くのアクティブリストエントリ９１２ａ〜ｊがない場合、流れはブロック１４３２に進む。
【００９４】
ブロック１４３２で、ストレージコントローラ１０８は、受け取ったホスト入出力要求３３２が、アクティブリスト９０８内のどのアクティブストリーム９１２ａ〜ｊにも対応しないと判定する。流れはブロック１４３２で終わり、処理を図１３の判定ブロック１３１２に戻し、ブロック１３１６に移る。
【００９５】
ブロック１４３６で、ストレージコントローラ１０８は、次のアクティブリストエントリ９１２ａ〜ｊを選択する。ストレージコントローラ１０８は最初のアクティブリストエントリ９１２ａ〜ｊをアクティブリストの先頭９１６から選択したため、次のアクティブリストエントリ９１２ａ〜ｊは、次に新しいアクティブリストエントリ９１２ａ〜ｊになる。流れは判定ブロック１４１６に進み、ストリームウィンドウのＬＢＡ上限９２８及びＬＢＡ下限９３２を調べる。
【００９６】
アクティブリスト９０８の最後まで検索するのにかかる時間を短縮するために、マッチするアクティブストリーム９１２を見つける方法を改善することができる。区間木（interval tree）またはスキップリストを含むデータ構造を使用する代替的実施形態はＬＢＡに基づく探索を可能にし、ホスト入出力要求３３２をアクティブストリーム９１２と迅速にマッチすることによって性能を改善する。
【００９７】
次に図１５ａを参照すると、本発明の第１の実施形態による、単一の古いストリームをリサイクルするプロセスを示すフローチャートが示されている。図１５ａに示す実施形態では、アクティブリスト９０８から一度に１つのアクティブストリーム９１２ａ〜ｊしかリサイクルしない。流れはブロック１５０４で始まる。
【００９８】
ブロック１５０４で、ストレージコントローラ１０８が、アクティブリストの末尾９２０から始めて、最初の古いアクティブストリーム９１２ａ〜ｊを求めてアクティブリスト９０８を確認する。アクティブリストの末尾９２０は、最も長い間使用されていないアクティブリストエントリ９１２ａ〜ｊを含む。流れは判定ブロック１５０８に進む。
【００９９】
判定ブロック１５０８で、ストレージコントローラ１０８は、現在の時間と時間ラストヒット９２４との差が、選択されたアクティブストリーム９１２ａ〜ｊのストリームリサイクル時間９４４を下回るかどうかを判定する。ストレージコントローラ１０８は、図１１に関して説明したようにストリームリサイクル時間９４４を計算する。現在の時間と時間ラストヒット９２４との差がストリームリサイクル時間９４４を下回る場合、流れはブロック１５１２に進む。現在の時間と時間ラストヒット９２４との差がストリームリサイクル時間９４４以上の場合、流れは判定ブロック１５２８に進む。
【０１００】
ブロック１５１２で、ストレージコントローラ１０８は、選択されたアクティブストリーム９１２ａ〜ｊをアクティブリスト９０８から除去する。選択されたアクティブストリーム９１２ａ〜ｊは、判定ブロック１５０８のストリームリサイクル基準を満たす。流れはブロック１５１６に進む。
【０１０１】
ブロック１５１６で、ストレージコントローラ１０８は、選択されたアクティブストリーム９１２ａ〜ｊの時間ラストヒット９２４をゼロに設定する。これにより、アクティブストリーム９１２ａ〜ｊをストリーム資源９０４ａ〜ｊに戻すことに備え、アクティブストリーム９１２ａ〜ｊの初期化が始まる。流れはブロック１５２０に進む。
【０１０２】
ブロック１５２０で、ストレージコントローラ１０８は、選択されたアクティブストリーム９１２ａ〜ｊの全てのウィンドウのＬＢＡ範囲９２８、９３２、９３６、及び９４０をゼロに設定する。これにより、アクティブストリーム９１２ａ〜ｊをストリーム資源９０４ａ〜ｊに戻すことに備え、アクティブストリーム９１２ａ〜ｊの初期化が完了する。流れはブロック１５２４に進む。
【０１０３】
ブロック１５２４で、ストレージコントローラ１０８は、選択された及びこれまでに初期化されたアクティブストリーム９１２ａ〜ｊを、ストリーム資源９０４ａ〜ｊとして非アクティブリスト９０４上に配置する。単一のアクティブストリーム９１２ａ〜ｊがリサイクルされ、流れはブロック１５２４で終わる。流れは図１３の判定ブロック１３２４に進む。
【０１０４】
判定ブロック１５２８で、非アクティブリスト９０４にリサイクルするために、候補アクティブストリーム９１２ａ〜ｊがまだ識別されておらず、ストレージコントローラ１０８は、アクティブリスト９０８内に更に多くのアクティブストリーム９１２ａ〜ｊがあるかどうかを判定する。アクティブリスト９０８内に更に多くのアクティブストリーム９１２ａ〜ｊがある場合、流れは判定ブロック１５３２に進む。アクティブリスト９０８内に更に多くのアクティブストリーム９１２ａ〜ｊがない場合、アクティブストリーム９１２ａ〜ｊをリサイクルできず、流れはブロック１５２８で終わる。流れは図１３の判定ブロック１３２４に進む。
【０１０５】
判定ブロック１５３２で、ストレージコントローラ１０８は、アクティブリスト９０８内の次に新しいアクティブストリーム９１２ａ〜ｊを入手できるかどうかを判定する。アクティブリスト９０８内の次に新しいアクティブストリーム９１２ａ〜ｊを入手できる場合、流れはブロック１５３６に進む。アクティブリスト９０８内の次に新しいアクティブストリーム９１２ａ〜ｊを入手できない場合、流れはブロック１５３２で終わり、アクティブリスト９０８内のどのアクティブストリーム９１２ａ〜ｊもリサイクルの基準を満たしていない。流れは図１３の判定ブロック１３２４に進む。
【０１０６】
ブロック１５３６で、ストレージコントローラ１０８は、アクティブリストの末尾９２０から次に新しいアクティブストリーム９１２ａ〜ｊを選択する。流れは判定ブロック１５０８に進み、選択されたアクティブストリーム９１２ａ〜ｊがリサイクルの基準を満たすかどうかを確認する。
【０１０７】
次に図１５ｂを参照すると、本発明の第２の実施形態による、所定数の古いストリームをリサイクルするプロセスを示すフローチャートが示されている。図１５ｂに示す実施形態は、アクティブリスト９０８から一度に所定数までのアクティブストリーム９１２ａ〜ｊをリサイクルする。流れはブロック１５４０で始まる。
【０１０８】
ブロック１５４０で、ストレージコントローラ１０８が、アクティブリストの末尾９２０から始めて、所定数の古いアクティブストリーム９１２ａ〜ｊを求めてアクティブリスト９０８を確認する。アクティブリストの末尾９２０は、最も長い間使用されていないアクティブリストエントリ９１２ａ〜ｊを含む。流れは判定ブロック１５４４に進む。
【０１０９】
判定ブロック１５４４で、ストレージコントローラ１０８は、現在の時間と時間ラストヒット９２４との差が、選択されたアクティブストリーム９１２ａ〜ｊのストリームリサイクル時間９４４を下回るかどうかを判定する。ストレージコントローラ１０８は、図１１に関して説明したようにストリームリサイクル時間９４４を計算する。現在の時間と時間ラストヒット９２４との差がストリームリサイクル時間９４４を下回る場合、流れはブロック１５４８に進む。現在の時間と時間ラストヒット９２４との差がストリームリサイクル時間９４４以上の場合、流れは判定ブロック１５６８に進む。
【０１１０】
ブロック１５４８で、ストレージコントローラ１０８は、選択されたアクティブストリーム９１２ａ〜ｊをアクティブリスト９０８から除去する。選択されたアクティブストリーム９１２ａ〜ｊは、判定ブロック１５４４のストリームリサイクル基準を満たす。流れはブロック１５５２に進む。
【０１１１】
ブロック１５５２で、ストレージコントローラ１０８は、選択されたアクティブストリーム９１２ａ〜ｊの時間ラストヒット９２４をゼロに設定する。これにより、アクティブストリーム９１２ａ〜ｊをストリーム資源９０４ａ〜ｊに戻すことに備え、アクティブストリーム９１２ａ〜ｊの初期化が始まる。流れはブロック１５５６に進む。
【０１１２】
ブロック１５５６で、ストレージコントローラ１０８は、選択されたアクティブストリーム９１２ａ〜ｊの全てのウィンドウのＬＢＡ範囲９２８、９３２、９３６、及び９４０をゼロに設定する。これにより、アクティブストリーム９１２ａ〜ｊをストリーム資源９０４ａ〜ｊに戻すことに備え、アクティブストリーム９１２ａ〜ｊの初期化が完了する。流れはブロック１５６０に進む。
【０１１３】
ブロック１５６０で、ストレージコントローラ１０８は、選択された及びこれまでに初期化されたアクティブストリーム９１２ａ〜ｊを、ストリーム資源９０４ａ〜ｊとして非アクティブリスト９０４上に配置する。単一のアクティブストリーム９１２ａ〜ｊがリサイクルされ、流れは判定ブロック１５６４に進む。
【０１１４】
判定ブロック１５６４で、ストレージコントローラ１０８は、所定数のアクティブストリーム９１２ａ〜ｊがリサイクルされているかどうかを判定する。所定数のアクティブストリーム９１２ａ〜ｊがリサイクルされている場合、流れは終わる。次いで、流れは図１３の判定ブロック１３２４に進む。所定数のアクティブストリーム９１２ａ〜ｊがリサイクルされていない場合、流れは判定ブロック１５７０に進む。
【０１１５】
判定ブロック１５６８で、ストレージコントローラ１０８は、アクティブリスト９０８内に更に多くのアクティブストリーム９１２ａ〜ｊがあるかどうかを判定する。アクティブリスト９０８内に更に多くのアクティブストリーム９１２ａ〜ｊがある場合、流れは判定ブロック１５７０に進む。アクティブリスト９０８内に更に多くのアクティブストリーム９１２ａ〜ｊがない場合、アクティブストリーム９１２ａ〜ｊをリサイクルできず、流れはブロック１５６８で終わる。次いで、流れは図１３の判定ブロック１３２４に進む。
【０１１６】
判定ブロック１５７０で、ストレージコントローラ１０８は、アクティブリスト９０８内の次に新しいアクティブストリーム９１２ａ〜ｊを入手できるかどうかを判定する。アクティブリスト９０８内の次に新しいアクティブストリーム９１２ａ〜ｊを入手できる場合、流れはブロック１５７２に進む。アクティブリスト９０８内の次に新しいアクティブストリーム９１２ａ〜ｊを入手できない場合、流れはブロック１５７０で終わる。次いで、流れは図１３の判定ブロック１３２４に進む。
【０１１７】
ブロック１５７２で、ストレージコントローラ１０８は、アクティブリストの末尾９２０から次に新しいアクティブストリーム９１２ａ〜ｊを選択する。流れは判定ブロック１５４４に進み、選択されたアクティブストリーム９１２ａ〜ｊがリサイクルの基準を満たすかどうかを確認する。
【０１１８】
次に図１５ｃを参照すると、本発明の第３の実施形態による、全ての古いストリームをリサイクルするプロセスを示すフローチャートが示されている。図１５ｃに示す実施形態では、アクティブリスト９０８からできるだけ多くのアクティブストリーム９１２ａ〜ｊをリサイクルする。流れはブロック１５７４で始まる。
【０１１９】
ブロック１５７４で、ストレージコントローラ１０８は、アクティブリストの末尾９２０から始めて、アクティブリスト９０８内の全ての古いアクティブストリーム９１２ａ〜ｊを確認する。アクティブリストの末尾９２０は、最も長い間使用されていないアクティブリストエントリ９１２ａ〜ｊを含む。流れは判定ブロック１５７６に進む。
【０１２０】
判定ブロック１５７６で、ストレージコントローラは、現在の時間と時間ラストヒット９２４との差が、選択されたアクティブストリーム９１２ａ〜ｊのストリームリサイクル時間９４４を下回るかどうかを判定する。ストレージコントローラ１０８は、図１１に関して説明したようにストリームリサイクル時間９４４を計算する。現在の時間と時間ラストヒット９２４との差がストリームリサイクル時間９４４を下回る場合、流れはブロック１５７８に進む。現在の時間と時間ラストヒット９２４との差がストリームリサイクル時間９４４以上の場合、流れは判定ブロック１５８８に進む。
【０１２１】
ブロック１５７８で、ストレージコントローラ１０８は、選択されたアクティブストリーム９１２ａ〜ｊをアクティブリスト９０８から除去する。選択されたアクティブストリーム９１２ａ〜ｊは、判定ブロック１５７６のストリームリサイクル基準を満たす。流れはブロック１５８０に進む。
【０１２２】
ブロック１５８０で、ストレージコントローラ１０８は、選択されたアクティブストリーム９１２ａ〜ｊの時間ラストヒット９２４をゼロに設定する。これにより、アクティブストリーム９１２ａ〜ｊをストリーム資源９０４ａ〜ｊに戻すことに備え、アクティブストリーム９１２ａ〜ｊの初期化が始まる。流れはブロック１５８２に進む。
【０１２３】
ブロック１５８２で、ストレージコントローラ１０８は、選択されたアクティブストリーム９１２ａ〜ｊの全てのウィンドウのＬＢＡ範囲９２８、９３２、９３６、及び９４０をゼロに設定する。これにより、アクティブストリーム９１２ａ〜ｊをストリーム資源９０４ａ〜ｊに戻すことに備え、アクティブストリーム９１２ａ〜ｊの初期化が完了する。流れはブロック１５８４に進む。
【０１２４】
ブロック１５８４で、ストレージコントローラ１０８は、選択された及びこれまでに初期化されたアクティブストリーム９１２ａ〜ｊを、ストリーム資源９０４ａ〜ｊとして非アクティブリスト９０４上に配置する。選択されたアクティブストリーム９１２ａ〜ｊがリサイクルされ、流れは判定ブロック１５８６に進む。
【０１２５】
判定ブロック１５８６で、ストレージコントローラ１０８は、検索する更に多くのアクティブストリーム９１２ａ〜ｊがあるかどうかを判定する。検索する更に多くのアクティブストリーム９１２ａ〜ｊがある場合、流れはブロック１５９０に進む。検索する更に多くのアクティブストリーム９１２ａ〜ｊがない場合、流れは終わる。次いで、流れは図１３の判定ブロック１３２４に進む。
【０１２６】
判定ブロック１５８８で、ストレージコントローラ１０８は、アクティブリスト９０８内に更に多くのアクティブストリーム９１２ａ〜ｊがあるかどうかを判定する。アクティブリスト９０８内に更に多くのアクティブストリーム９１２ａ〜ｊがある場合、流れはブロック１５９０に進む。アクティブリスト９０８内に更に多くのアクティブストリーム９１２ａ〜ｊがない場合、アクティブストリーム９１２ａ〜ｊをリサイクルできず、流れはブロック１５８８で終わる。次いで、流れは図１３の判定ブロック１３２４に進む。
【０１２７】
ブロック１５９０で、ストレージコントローラ１０８は、アクティブリストの末尾９２０から次に新しいアクティブストリーム９１２ａ〜ｊを選択する。流れは判定ブロック１５７６に進み、選択されたアクティブストリーム９１２ａ〜ｊがリサイクルの基準を満たすかどうかを確認する。
【０１２８】
次に図１６を参照すると、本発明の実施形態による、アクティブストリームの構成プロセスを示すフローチャートが示されている。図１６に示す実施形態では、非アクティブリストのストリーム資源９０４ａ〜ｊからアクティブストリーム９１２ａ〜ｊを構成する。流れはブロック１６０４で始まる。
【０１２９】
ブロック１６０４で、ストレージコントローラ１０８が、ホスト入出力要求のサイズに「８」を掛けてストリームウィンドウ・オフセットを作り出す。流れはブロック１６０８に進む。
【０１３０】
ブロック１６０８で、ストレージコントローラ１０８は、ブロック１６０４のストリームウィンドウ・オフセットをホスト入出力要求の開始ＬＢＡアドレス５２４に加え、その結果生じるストリームウィンドウのＬＢＡ上限９２８をストリームメタデータ９１２内に記憶する。流れはブロック１６１２に進む。
【０１３１】
ブロック１６１２で、ストレージコントローラ１０８は、受け取ったホスト入出力要求の開始ＬＢＡアドレス５２４からブロック１６０４のストリームウィンドウ・オフセットを引き、一時的なストリームウィンドウのＬＢＡ下限を作り出す。流れは判定ブロック１６１６に進む。
【０１３２】
判定ブロック１６１６で、ストレージコントローラ１０８は、一時的なストリームウィンドウのＬＢＡ下限が「０」を下回るかどうかを判定する。一時的なストリームウィンドウのＬＢＡ下限が「０」を下回る場合、流れはブロック１６２４に進む。一時的なストリームウィンドウのＬＢＡ下限が「０」以上の場合、流れはブロック１６２０に進む。
【０１３３】
ブロック１６２０で、ストレージコントローラ１０８は、ブロック１６１２の一時的なストリームウィンドウのＬＢＡ下限を、ストリームウィンドウのＬＢＡ下限９３２内に記憶する。流れはブロック１６２０で終わる。次いで、流れは図１３のブロック１３４０に進む。
【０１３４】
ブロック１６２４で、ストレージコントローラ１０８は、ゼロ値をストリームウィンドウのＬＢＡ下限９３２内に記憶する。流れはブロック１６２４で終わる。次いで、流れは図１３のブロック１３４０に進む。
【０１３５】
次に図１７を参照すると、本発明の実施形態による、移動ウィンドウの調整プロセスを示すフローチャートが示されている。この移動ウィンドウの調整プロセスでは、ホスト入出力要求３３２のＬＢＡ５２０に基づき、移動ウィンドウ５１２のＬＢＡ上限９３６及びＬＢＡ下限９４０を調整しなければならないかどうかを判定する。図１７は、図１３のブロック１３４４に記載のプロセスをより詳細に示す。流れは判定ブロック１７０４で始まる。
【０１３６】
判定ブロック１７０４で、ストレージコントローラ１０８は、ブロック１３０４の受け取ったホスト入出力要求３３２の開始ＬＢＡアドレス５２４が、アクティブストリームウィンドウ５０８に対応する移動ウィンドウ５１２の外側にあるかどうかを判定する。ブロック１３０４の受け取ったホスト入出力要求３３２の開始ＬＢＡアドレス５２４が、アクティブストリームウィンドウ５０８に対応する移動ウィンドウ５１２の外側にある場合、移動ウィンドウ５１２を調整する必要があり、流れはブロック１７０８に進む。ブロック１３０４の受け取ったホスト入出力要求３３２の開始ＬＢＡアドレス５２４が、アクティブストリームウィンドウ５０８に対応する移動ウィンドウ５１２の外側にない場合、移動ウィンドウ５１２を変える必要はなく、流れは終わる。次いで、流れは図１３のブロック１３４８に進む。
【０１３７】
ブロック１７０８で、ストレージコントローラ１０８は、ストリームウィンドウのＬＢＡ上限９２８からストリームウィンドウのＬＢＡ下限９３２を引き、ストリームウィンドウ５０８のサイズを得る。流れはブロック１７１２に進む。
【０１３８】
ブロック１７１２で、ストレージコントローラ１０８は、ストリームウィンドウ５０８のサイズを「２」で割り、ストリームウィンドウのＬＢＡ下限９３２を加えてストリームウィンドウの中心を得る。流れは判定ブロック１７１６に進む。
【０１３９】
判定ブロック１７１６で、ストレージコントローラ１０８は、受け取ったホスト入出力要求３３２の開始ＬＢＡアドレス５２４が直前のホスト入出力要求３３２に直接隣接するかどうかを判定する。直接隣接するとは、受け取ったホスト入出力要求３３２の開始ＬＢＡアドレス５２４が、直前のホスト入出力要求３３２の終了ＬＢＡアドレス５３２の直後に続くことを意味する。受け取ったホスト入出力要求３３２の開始ＬＢＡアドレス５２４が直前のホスト入出力要求３３２に直接隣接する場合、流れはブロック１７２０に進む。受け取ったホスト入出力要求３３２の開始ＬＢＡアドレス５２４が直前のホスト入出力要求３３２に直接隣接しない場合、流れはブロック１７２４に進む。
【０１４０】
ブロック１７２０で、ストレージコントローラ１０８は、ストリームウィンドウ５０８のサイズに逐次ストリームウィンドウ変更子を掛け、新たな移動ウィンドウ５１２のサイズを得る。受け取ったホスト入出力要求３３２の開始ＬＢＡアドレス５２４が直前のホスト入出力要求３３２に直接隣接する場合、逐次ストリームウィンドウ変更子を使用する。好ましい実施形態では、逐次ストリームウィンドウ変更子が０．５である。他の実施形態では、逐次ストリームウィンドウ変更子が０．５未満であり又は０．５を超える。流れはブロック１７２８に進む。
【０１４１】
ブロック１７２４で、ストレージコントローラ１０８は、ストリームウィンドウ５０８のサイズに準逐次ストリームウィンドウ変更子を掛け、新たな移動ウィンドウ５１２のサイズを得る。受け取ったホスト入出力要求３３２の開始ＬＢＡアドレス５２４が直前のホスト入出力要求３３２に直接隣接しない場合、準逐次ストリームウィンドウ変更子を使用する。好ましい実施形態では、準逐次ストリームウィンドウ変更子が０．４である。他の実施形態では、準逐次ストリームウィンドウ変更子が０．４未満であり又は０．４を超える。流れはブロック１７２８に進む。
【０１４２】
ブロック１７２８で、ストレージコントローラ１０８は、新たな移動ウィンドウのサイズ５１２を「２」で割り、新たな移動ウィンドウの半分のサイズを得る。流れはブロック１７３２及び１７４０に進む。
【０１４３】
ブロック１７３２で、ストレージコントローラ１０８は、ストリームウィンドウの中心に新たな移動ウィンドウの半分のサイズを加え、新たな移動ウィンドウのＬＢＡ上限を得る。流れはブロック１７３６に進む。
【０１４４】
ブロック１７３６で、ストレージコントローラ１０８は、ストリームメタデータ９１２内の移動ウィンドウのＬＢＡ上限９３６内に、新たな移動ウィンドウのＬＢＡ上限を記憶する。流れはブロック１７３６で終わる。
【０１４５】
ブロック１７４０で、ストレージコントローラ１０８は、ストリームウィンドウの中心から新たな移動ウィンドウの半分のサイズを引き、新たな移動ウィンドウのＬＢＡ下限を得る。流れはブロック１７４４に進む。
【０１４６】
ブロック１７４４で、ストレージコントローラ１０８は、ストリームメタデータ９１２内の移動ウィンドウのＬＢＡ下限９４０内に、新たな移動ウィンドウのＬＢＡ下限を記憶する。流れはブロック１７４４で終わる。
【０１４７】
本発明のプロセスステップでは、ストレージコントローラ１０８がこれらの動作を実行するものと説明したが、ＣＰＵ又はプロセッサ３１２がこれらのステップを概して実行することを当業者は理解されよう。但し、他の実施形態では、１つ又は複数のプロセッサ、状態機械、プログラム可能論理装置、又は他の装置がこれらのステップを実行しても良い。
【０１４８】
最後に、添付の特許請求の範囲によって定める本発明の趣旨及び範囲から逸脱することなしに、本発明の同一目的を実行するための他の構造を設計し又は修正するための基礎として、開示した概念及び具体的実施形態を容易に使用できることを当業者は理解されよう。
【符号の説明】
【０１４９】
１００  データストレージシステム
１０４  ホストコンピュータ
１０８  ストレージコントローラ
１１６  ストレージデバイス
２２０  メモリ
３３２  ホスト入出力要求
９０４  非アクティブリスト
９０８  アクティブリスト
９１２  アクティブストリーム
【図１ａ】
2016038908.tif 000003
【図１ｂ】
2016038908.tif 000004
【図１ｃ】
2016038908.tif 000005
【図２ａ】
2016038908.tif 000006
【図２ｂ】
2016038908.tif 000007
【図２ｃ】
2016038908.tif 000008
【図３】
2016038908.tif 000009
【図４】
2016038908.tif 000010
【図５】
2016038908.tif 000011
【図６ａ】
2016038908.tif 000012
【図６ｂ】
2016038908.tif 000013
【図７】
2016038908.tif 000014
【図８】
2016038908.tif 000015
【図９ａ】
2016038908.tif 000016
【図９ｂ】
2016038908.tif 000017
【図１０】
2016038908.tif 000018
【図１１】
2016038908.tif 000019
【図１２】
2016038908.tif 000020
【図１３】
2016038908.tif 000021
【図１４】
2016038908.tif 000022
【図１５ａ】
2016038908.tif 000023
【図１５ｂ】
2016038908.tif 000024
【図１５ｃ】
2016038908.tif 000025
【図１６】
2016038908.tif 000026
【図１７】
2016038908.tif 000027