特許第6154433号(P6154433)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ドット ヒル システムズ コーポレイションの特許一覧

特許6154433逐次入出力ストリームを効率的にデステージするための方法及び装置
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6154433
(24)【登録日】2017年6月9日
(45)【発行日】2017年6月28日
(54)【発明の名称】逐次入出力ストリームを効率的にデステージするための方法及び装置
(51)【国際特許分類】
   G06F 3/06 20060101AFI20170619BHJP
【FI】
   G06F3/06 301M
   G06F3/06 302A
   G06F3/06 305C
   G06F3/06 540
【請求項の数】10
【全頁数】33
(21)【出願番号】特願2015-131094(P2015-131094)
(22)【出願日】2015年6月30日
(65)【公開番号】特開2016-45935(P2016-45935A)
(43)【公開日】2016年4月4日
【審査請求日】2015年6月30日
(31)【優先権主張番号】14/465,291
(32)【優先日】2014年8月21日
(33)【優先権主張国】US
【前置審査】
(73)【特許権者】
【識別番号】515143669
【氏名又は名称】ドット ヒル システムズ コーポレイション
【氏名又は名称原語表記】DOT HILL SYSTEMS CORPORATION
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】マイケル デイビッド バレル
(72)【発明者】
【氏名】ザカリー デイビッド トラウト
【審査官】 桜井 茂行
(56)【参考文献】
【文献】 米国特許出願公開第2013/0326149(US,A1)
【文献】 米国特許出願公開第2006/0294301(US,A1)
【文献】 特開2006−244122(JP,A)
【文献】 特開2008−192028(JP,A)
【文献】 特開2012−234254(JP,A)
【文献】 特開平04−114228(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06− 3/08
G06F 12/08−12/12
(57)【特許請求の範囲】
【請求項1】
ストレージコントローラからストレージデバイスに書込みデータを効率的にデステージするための方法であって、
前記ストレージコントローラによって前記ストレージコントローラのライトキャッシュから前記ストレージデバイスに前記ライトキャッシュの固定サイズ部分であるキャッシュ要素を伝送すべきであることを決定すること、
前記ストレージコントローラによってダーティウォーターマークがダーティウォーターマークの最大値を上回ることを判定することであって、前記ダーティウォーターマークは前記ライトキャッシュ内のダーティデータの量を特定し、ダーティデータはストレージデバイスにまだ書き込まれていない前記ライトキャッシュ内のデータである、前記判定すること、
前記ストレージコントローラによって前記ライトキャッシュから前記ストレージデバイスにデステージする第1のキャッシュ要素を識別すること、
前記ストレージコントローラによって前記ライトキャッシュから前記ストレージデバイスに前記第1のキャッシュ要素を含む第1のデータコンテナを伝送すること、
前記ストレージコントローラによってアクティブ・デステージ・カウントをインクリメントすることであって、前記アクティブ・デステージ・カウントは、仮想ディスクに対して発行されたまだ完了していないホスト書込み要求の現在の数であり、前記仮想ディスクは1つ又は複数の特定のストレージデバイスを含むRAID群である、前記インクリメントすること、
前記アクティブ・デステージ・カウントがアクティブ・デステージ・カウントの最大値を下回る場合、前記ストレージコントローラによって決定し、判定し、識別し、伝送し、及びインクリメントすることを繰り返すこと
を含み、
前記ライトキャッシュから前記ストレージデバイスにデステージする第1のキャッシュ要素を識別することが、
前記ストレージコントローラによって前記第1のデータコンテナが満杯かどうかを判定することであって、満杯のデータコンテナはストライプ内の全ての前記キャッシュ要素を含み、ストライプは、隣接する論理ブロックアドレスを有する複数のキャッシュ要素を含む、前記満杯かどうかを判定すること、
前記第1のデータコンテナが満杯ではない場合、
前記ストレージコントローラによってフルストライプ書込みパーセンテージがフルストライプ書込みアフィニティ値を下回るかどうかを計算すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値以上の場合、
前記ストレージコントローラによってデステージするのにより良いキャッシュ要素を識別すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値を下回る場合、
前記ストレージコントローラによって前記第1のキャッシュ要素として現在のキャッシュ要素を特定することであって、現在のキャッシュ要素ポインタが前記現在のキャッシュ要素及び前記第1のデータコンテナを特定する、前記特定すること、
前記第1のデータコンテナが満杯である場合、
前記ストレージコントローラによって前記現在のキャッシュ要素を前記第1のキャッシュ要素として識別することを含み
前記フルストライプ書込みパーセンテージは、前記仮想ディスクのダーティキャッシュ要素の数で除算された、前記仮想ディスクのフルストライプに属するダーティキャッシュ要素の数であり、ダーティキャッシュ要素は前記ストレージデバイスにまだ書き込まれていないデータを含むキャッシュ要素であり、フルストライプの全てのデータ位置が前記ライトキャッシュのキャッシュ要素において表現され、前記フルストライプ書込みアフィニティ値は、前記ストレージコントローラが前記ライトキャッシュからフルストライプの書込みを発行することのみを選ぶ閾値を特定し、前記現在のストライプはフルストライプ及び部分ストライプのうちの1つであり、
デステージするのにより良いキャッシュ要素を識別することが、
前記ストレージコントローラによってデステージ・ストリーム・グラジェントを計算すること、
前記ストレージコントローラによって前記デステージ・ストリーム・グラジェントがデステージ・ストリーム・グラジェント閾値を上回るかどうかを判定することであって、前記デステージ・ストリーム・グラジェント閾値は前記仮想ディスクのストライプサイズの倍数である、前記判定すること、
前記デステージ・ストリーム・グラジェントが前記デステージ・ストリーム・グラジェント閾値を上回る場合、
前記ストレージコントローラによって最も大きいデステージ・ストリーム・オブジェクトを識別すること、
前記ストレージコントローラによって前記最も大きいデステージ・ストリーム・オブジェクト内の最も低い論理ブロックアドレスを有する、前記最も大きいデステージ・ストリーム・オブジェクト内のキャッシュ要素を前記デステージするのにより良いキャッシュ要素として識別すること、
前記デステージ・ストリーム・グラジェントが前記デステージ・ストリーム・グラジェント閾値以下の場合、
前記ストレージコントローラによって前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値を下回るかどうかを計算すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値以上の場合、
前記ストレージコントローラによって、すべてのキャッシュ要素がダーティデータ又は書き込みデータを有する次の満杯のデータコンテナを識別することであって、前記次の満杯のデータコンテナは、前記第1のデータコンテナに比べて二番目に大きいサイズを有する前記デステージ・ストリーム・オブジェクトである、前記次の満杯のデータコンテナを識別すること、
前記ストレージコントローラによって前記次の満杯のデータコンテナ内の前記最も低い論理ブロックアドレスを有するキャッシュ要素を、前記デステージするのにより良いキャッシュ要素として識別すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値を下回る場合、
前記デステージするのにより良いキャッシュ要素として前記現在のキャッシュ要素を前記ストレージコントローラによって識別すること
を含み、
前記デステージ・ストリーム・グラジェントを計算することが、
前記ストレージコントローラによって前記仮想ディスクのための前記最も大きいデステージストリームを識別することであって、前記デステージストリームは満杯のデータコンテナのみを含む、前記最も大きいデステージストリームを識別すること、
前記ストレージコントローラによって前記仮想ディスクのための最も小さいデステージ・ストリーム・オブジェクトを識別すること、
前記ストレージコントローラによって前記最も大きいデステージ・ストリーム・オブジェクトから前記最も小さいデステージ・ストリーム・オブジェクトを減算して、前記デステージ・ストリーム・グラジェントを得ること
を含む、方法。
【請求項2】
デステージストリームが前記第1のデータコンテナを含む場合、
前記ストレージコントローラによって前記デステージストリームから前記第1のデータコンテナを除去すること
を更に含み、
前記デステージストリーム及び前記第1のデータコンテナは前記仮想ディスクに対応し、前記デステージストリームは満杯のデータコンテナのみを含み、満杯のデータコンテナは、前記RAID群のストライプ内の全ての前記キャッシュ要素を含む、請求項1に記載の方法。
【請求項3】
前記デステージストリームが前記第1のデータコンテナを含み、複数のデータコンテナの満杯の各データコンテナが隣接する論理ブロックアドレスを有する場合、前記ストレージコントローラが複数の満杯のデータコンテナを連結して前記第1のデータコンテナを作成する、請求項2に記載の方法。
【請求項4】
前記ストレージコントローラの前記ライトキャッシュから前記ストレージデバイスにキャッシュ要素を伝送すべきであることを決定することが、
前記ストレージコントローラによって前記ライトキャッシュから前記ストレージデバイスへのストライプのデステージングを終了し、前記アクティブ・デステージ・カウントをデクリメントすること、
前記ストレージコントローラによってホスト書込み要求を完了することであって、前記ホスト書込み要求に対応する前記データを前記ストレージデバイスに書き込むことを含む、前記ホスト書込み要求を完了すること、
ホスト入出力要求タイムアウト時間未満にわたり、ホスト入出力要求が受け取られていないことを前記ストレージコントローラによって確認することであって、ホスト入出力要求はホスト書込み要求及びホスト読取要求を含む、前記確認すること
のうちの1つを含み、
終了すること、完了すること、及び確認することのうちの1つを完了した後、
前記アクティブ・デステージ・カウントが前記アクティブ・デステージ・カウントの最大値を下回る場合にのみ、前記ストレージコントローラによって、決定し、計算し、識別し、伝送し、及びインクリメントする、請求項1に記載の方法。
【請求項5】
前記ライトキャッシュから前記ストレージデバイスに前記第1のキャッシュ要素を含む第1のデータコンテナを伝送することが、
前記ストレージコントローラによって前記ライトキャッシュから前記仮想ディスクに前記第1のデータコンテナをデステージすること、
前記ストレージコントローラによって前記アクティブ・デステージ・カウントをインクリメントすること、
前記ストレージコントローラによってデータコンテナ一覧から前記データコンテナを除去することであって、前記データコンテナ一覧は状態、ダーティキャッシュ要素のカウント、及びダーティデータ又は書き込みデータを含むキャッシュ要素を含むアクティブデータコンテナごとの総キャッシュ要素カウントを含み、前記状態はデータコンテナが満杯か部分的に満杯かのいずれかを特定する、前記データコンテナを除去すること
を含む、請求項に記載の方法。
【請求項6】
ストレージデバイスに書込みデータを効率的にデステージするためのストレージコントローラであって、
プロセッサと、
前記プロセッサに結合されるメモリであって、複数のキャッシュ要素を含むライトキャッシュを含み、前記キャッシュ要素は前記ライトキャッシュの固定サイズ部分である、前記メモリと
を備え、
前記ストレージコントローラは、前記ライトキャッシュから前記ストレージデバイスにキャッシュ要素を伝送すべきであることを決定し、ダーティウォーターマークがダーティウォーターマークの最大値を上回ることを判定し、前記ライトキャッシュから前記ストレージデバイスにデステージする第1のキャッシュ要素を識別し、前記ライトキャッシュから前記ストレージデバイスに前記第1のキャッシュ要素を含む第1のデータコンテナを伝送し、アクティブ・デステージ・カウントをインクリメントし、前記アクティブ・デステージ・カウントがアクティブ・デステージ・カウントの最大値を下回る場合、決定し、判定し、識別し、伝送し、及びインクリメントすることを繰り返し、
前記ダーティウォーターマークは、前記ライトキャッシュ内のダーティデータの量を特定し、ダーティデータは、ストレージデバイスにまだ書き込まれていない前記ライトキャッシュ内のデータであり、前記アクティブ・デステージ・カウントは、仮想ディスクに発行されてまだ完了していないデータコンテナの現在の数であり、前記仮想ディスクは1つ又は複数の特定のストレージデバイスを含むRAID群であり、
前記ストレージコントローラが前記ライトキャッシュから前記ストレージデバイスにデステージする第1のキャッシュ要素を識別することが、
前記ストレージコントローラが前記第1のデータコンテナが満杯かどうかを判定することであって、満杯のデータコンテナはストライプ内の全ての前記キャッシュ要素を含み、ストライプは、隣接する論理ブロックアドレスを有する複数のキャッシュ要素を含む、前記判定すること、
前記第1のデータコンテナが満杯ではない場合、
前記ストレージコントローラがフルストライプ書込みパーセンテージがフルストライプ書込みアフィニティ値を下回るかどうかを計算すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値以上の場合、
前記ストレージコントローラがデステージするのにより良いキャッシュ要素を識別すること、前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値を下回る場合、
前記ストレージコントローラが前記第1のキャッシュ要素として現在のキャッシュ要素を識別することであって、現在のキャッシュ要素ポインタが前記現在のキャッシュ要素及び前記第1のデータコンテナを識別する、現在のキャッシュ要素を識別すること、
前記第1のデータコンテナが満杯である場合、
前記ストレージコントローラが前記現在のキャッシュ要素を前記第1のキャッシュ要素として識別すること
を含み、
前記フルストライプ書込みパーセンテージは、ダーティキャッシュ要素の数で除算された、前記仮想ディスクのフルストライプに属する前記仮想ディスクのダーティキャッシュ要素の数であり、ダーティキャッシュ要素は前記ストレージデバイスにまだ書き込まれていないデータを含むキャッシュ要素であり、フルストライプの全てのデータ位置が前記ライトキャッシュのキャッシュ要素において表現され、前記フルストライプ書込みアフィニティ値は、前記ストレージコントローラが前記ライトキャッシュからフルストライプの書込みを発行することのみを選ぶ閾値を特定し、
前記ストレージコントローラがデステージするのにより良いキャッシュ要素を識別することが、
前記ストレージコントローラがデステージ・ストリーム・グラジェントを計算すること、
前記ストレージコントローラが前記デステージ・ストリーム・グラジェントがデステージ・ストリーム・グラジェント閾値を上回るかどうかを判定することであって、前記デステージ・ストリーム・グラジェント閾値は前記仮想ディスクのストライプサイズの倍数である、前記判定すること、
前記デステージ・ストリーム・グラジェントが前記デステージ・ストリーム・グラジェント閾値を上回る場合、
前記ストレージコントローラが最も大きいデステージ・ストリーム・オブジェクトを識別すること、
前記ストレージコントローラが前記最も大きいデステージ・ストリーム・オブジェクト内の最も低い論理ブロックアドレスを有する、前記最も大きいデステージ・ストリーム・オブジェクト内のキャッシュ要素を前記デステージするのにより良いキャッシュ要素として識別すること、
前記デステージ・ストリーム・グラジェントが前記デステージ・ストリーム・グラジェント閾値以下の場合、
前記ストレージコントローラが前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値を下回るかどうかを計算すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値以上の場合、
前記ストレージコントローラが次の満杯のデータコンテナを識別することであって、前記次の満杯のデータコンテナは、前記第1のデータコンテナに比べて二番目に大きいサイズを有する前記デステージ・ストリーム・オブジェクトである、前記次の満杯のデータコンテナを識別すること、
前記ストレージコントローラが前記次の満杯のデータコンテナ内の前記最も低い論理ブロックアドレスを有するキャッシュ要素を前記デステージするのにより良いキャッシュ要素として識別すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値を下回る場合、
前記ストレージコントローラが前記デステージするのにより良いキャッシュ要素として前記現在のキャッシュ要素を識別すること
を含み
前記デステージ・ストリーム・グラジェントを前記ストレージコントローラが計算することが、
前記ストレージコントローラがデステージストリーム内の前記最も大きいデステージ・ストリーム・オブジェクトを識別することであって、前記デステージストリームは満杯のデータコンテナのみを含む、前記最も大きいデステージ・ストリーム・オブジェクトを識別すること、
前記ストレージコントローラが前記デステージストリーム内の最も小さいデステージ・ストリーム・オブジェクトを識別すること、
前記ストレージコントローラが前記最も大きいデステージ・ストリーム・オブジェクトから前記最も小さいデステージ・ストリーム・オブジェクトを減算して、前記デステージ・ストリーム・グラジェントを得ること
を含む、ストレージコントローラ。
【請求項7】
前記ストレージコントローラが前記ストレージコントローラの前記ライトキャッシュから前記ストレージデバイスに前記キャッシュ要素を伝送すべきであることを決定することが、
前記ストレージコントローラが前記ライトキャッシュから前記ストレージデバイスへのデステージ・ストリーム・オブジェクトのデステージングを終了し、前記アクティブ・デステージ・カウントをデクリメントすることであって、デステージ・ストリーム・オブジェクトは満杯のデータコンテナである、前記アクティブ・デステージ・カウントをデクリメントすること、
前記ストレージコントローラがホスト書込み要求を完了することであって、前記ストレージコントローラが前記ホスト書込み要求に対応する前記データを前記ストレージデバイスに書き込むことを含む、前記ホスト書込み要求を完了すること、
前記ストレージコントローラがホスト入出力要求タイムアウト時間超にわたり、ホスト入出力要求が受け取られていることを確認すること
のうちの1つを含み、
終了すること、完了すること、及び確認することのうちの1つを完了した後、
前記アクティブ・デステージ・カウントが前記アクティブ・デステージ・カウントの最大値を下回る場合にのみ、前記ストレージコントローラが、決定し、計算し、識別し、伝送し、及びインクリメントする、請求項に記載のストレージコントローラ。
【請求項8】
前記ストレージコントローラが前記ライトキャッシュから前記ストレージデバイスに前記第1のキャッシュ要素を含む第1のデータコンテナを伝送することが、
前記ストレージコントローラが前記ライトキャッシュから前記仮想ディスクに前記第1のデータコンテナをデステージすること、
前記ストレージコントローラが前記アクティブ・デステージ・カウントをインクリメントすること、
前記ストレージコントローラがデータコンテナ一覧から前記データコンテナを除去することであって、前記データコンテナ一覧は状態、ダーティキャッシュ要素のカウント、及びダーティデータ又は書き込みデータを含むキャッシュ要素を含むアクティブデータコンテナごとの総キャッシュ要素カウントを含み、前記状態はデータコンテナが満杯か部分的に満杯かのいずれかを特定する、前記データコンテナを除去すること
を含む、請求項に記載のストレージコントローラ。
【請求項9】
ストレージデバイスに書込みデータを効率的に伝送するためのシステムであって、
ホストコンピュータと、
前記ホストコンピュータに結合されるストレージコントローラであって、
プロセッサ、
前記プロセッサに結合されるメモリであって、複数のキャッシュ要素を含むライトキャッシュを含み、キャッシュ要素は前記ライトキャッシュの固定サイズ部分であり、前記複数のキャッシュ要素の各キャッシュ要素は、ダーティデータ又は書き込みデータを含むことができるアクティブデータコンテナに対応する、前記メモリと
を含む前記ストレージコントローラと、
前記ストレージコントローラに結合される1つ又は複数のストレージデバイスを含む仮想ディスクであって、前記仮想ディスクは、前記1つ又は複数のストレージデバイスのうちの1つ又は複数の特定のストレージデバイスを含むRAID群である、前記仮想ディスクと
を備え、
前記ホストコンピュータは、前記ストレージコントローラに書込み要求を伝送し、前記ストレージコントローラは、前記書込み要求を受け取ることに応答して、前記書込み要求に対応する書込みデータを前記複数のキャッシュ要素に記憶し、
前記ストレージコントローラは、前記ライトキャッシュから前記仮想ディスクにキャッシュ要素を伝送すべきであることを決定し、ダーティウォーターマークがダーティウォーターマークの最大値を上回ることを判定し、前記ライトキャッシュから前記仮想ディスクにデステージする第1のキャッシュ要素を識別し、前記ライトキャッシュから前記仮想ディスクに前記第1のキャッシュ要素を含むデータコンテナを伝送し、アクティブ・デステージ・カウントをインクリメントし、前記アクティブ・デステージ・カウントがアクティブ・デステージ・カウントの最大値を下回る場合、決定し、判定し、識別し、伝送し、及びインクリメントすることを繰り返し、
前記ダーティウォーターマークは、前記ライトキャッシュ内のダーティデータの量を特定し、ダーティデータは、ストレージデバイスにまだ書き込まれていない前記ライトキャッシュ内のデータであり、前記アクティブ・デステージ・カウントは、前記仮想ディスクに発行されてまだ完了していない書込み要求の現在の数であり、
前記ストレージコントローラが前記ライトキャッシュから前記仮想ディスクにデステージする前記第1のキャッシュ要素を識別することが、
前記ストレージコントローラが前記データコンテナが満杯かどうかを判定することであって、満杯のデータコンテナはストライプ内の全ての前記キャッシュ要素を含み、ストライプは、隣接する論理ブロックアドレスを有する複数のキャッシュ要素を含む、前記判定すること、
前記データコンテナが満杯ではない場合、
前記ストレージコントローラがフルストライプ書込みパーセンテージがフルストライプ書込みアフィニティ値を下回るかどうかを計算することであって、前記フルストライプ書込みパーセンテージは、ダーティキャッシュ要素の数で除算された、前記仮想ディスクのフルストライプに属する前記仮想ディスクのダーティキャッシュ要素の数であり、ダーティキャッシュ要素は前記ストレージデバイスにまだ書き込まれていないデータを含むキャッシュ要素であり、フルストライプの全てのデータ位置が前記ライトキャッシュのキャッシュ要素において表現され、前記フルストライプ書込みアフィニティ値は、前記ストレージコントローラが前記ライトキャッシュからフルストライプの書込みを発行することのみを選ぶ閾値を反映する、前記計算すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値以上の場合、
前記ストレージコントローラがデステージするのにより良いキャッシュ要素を識別すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値を下回る場合、
前記ストレージコントローラが前記第1のキャッシュ要素として現在のキャッシュ要素を識別することであって、現在のキャッシュ要素ポインタが前記現在のキャッシュ要素及び前記データコンテナを識別する、現在のキャッシュ要素を識別すること、
第1のデータコンテナが満杯である場合、
前記ストレージコントローラが前記現在のキャッシュ要素を前記第1のキャッシュ要素として識別すること
を含み、
前記ストレージコントローラが前記デステージするのにより良いキャッシュ要素を識別することが、
前記ストレージコントローラがデステージ・ストリーム・グラジェントを計算することであって、
前記ストレージコントローラがデステージストリーム内の最も大きいデステージ・ストリーム・オブジェクトを識別することであって、前記デステージストリームは満杯のデータコンテナのみを含む、最も大きいデステージ・ストリーム・オブジェクトを識別すること、
前記ストレージコントローラが前記デステージストリーム内の最も小さいデステージ・ストリーム・オブジェクトを識別すること、
前記ストレージコントローラが前記最も大きいデステージ・ストリーム・オブジェクトから前記最も小さいデステージ・ストリーム・オブジェクトを減算して、前記デステージ・ストリーム・グラジェントを得ること
を含む、前記デステージ・ストリーム・グラジェントを計算すること、
前記ストレージコントローラが前記デステージ・ストリーム・グラジェントがデステージ・ストリーム・グラジェント閾値を上回るかどうかを判定することであって、前記デステージ・ストリーム・グラジェント閾値は前記仮想ディスクのストライプサイズの倍数である、前記判定すること、
前記デステージ・ストリーム・グラジェントが前記デステージ・ストリーム・グラジェント閾値を上回る場合、
前記ストレージコントローラが最も大きいデステージ・ストリーム・オブジェクトを識別すること、
前記ストレージコントローラが前記最も大きいデステージ・ストリーム・オブジェクト内の最も低い論理ブロックアドレスを有する、前記最も大きいデステージ・ストリーム・オブジェクト内のキャッシュ要素を前記デステージするのにより良いキャッシュ要素として識別すること、
前記デステージ・ストリーム・グラジェントが前記デステージ・ストリーム・グラジェント閾値以下の場合、
前記ストレージコントローラが前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値を下回るかどうかを計算すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値以上の場合、
前記ストレージコントローラが次の満杯のデータコンテナを識別することであって、前記次の満杯のデータコンテナは、前記第1のデータコンテナに比べて二番目に大きいサイズを有する前記デステージ・ストリーム・オブジェクトである、前記次の満杯のデータコンテナを識別すること、
前記ストレージコントローラが前記次の満杯のデータコンテナ内の前記最も低い論理ブロックアドレスを有するキャッシュ要素を、前記デステージするのにより良いキャッシュ要素として識別すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値を下回る場合、
前記ストレージコントローラが前記デステージするのにより良いキャッシュ要素として前記現在のキャッシュ要素を識別すること
を含む、システム。
【請求項10】
前記ストレージコントローラが前記ライトキャッシュから前記仮想ディスクに前記第1のキャッシュ要素を含む前記データコンテナを伝送することが、
前記ストレージコントローラが前記ライトキャッシュから前記仮想ディスクに前記データコンテナをデステージすること、
前記ストレージコントローラが前記アクティブ・デステージ・カウントをインクリメントすること、
前記ストレージコントローラがデータコンテナ一覧から前記データコンテナを除去することであって、前記データコンテナ一覧は状態、ダーティキャッシュ要素のカウント、及びアクティブデータコンテナごとの総キャッシュ要素カウントを含み、前記状態はデータコンテナが満杯か部分的に満杯かのいずれかを特定する、前記データコンテナを除去すること
を含む、請求項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータのデータストレージシステムを対象とする。具体的には、本発明は、ストレージコントローラのキャッシュメモリからストライプドボリュームのストレージデバイスに逐次書込みデータを効率的にデステージするための方法及び装置を対象とする。
【背景技術】
【0002】
データストレージシステムでは、ライトバックキャッシングを含む良く知られているデータキャッシング技法を利用することによって書込みの性能が高められる。ストレージコントローラがホストコンピュータから書込み要求を受け取ると、ストレージコントローラは、ライトキャッシュ内に空きがある場合は書込みデータをライトキャッシュ内に記憶し、書込み要求が完了したことをホストコンピュータに知らせる。これにより、結果的にホストコンピュータが追加の読取要求又は書込み要求を発行する必要がなくなる。ライトキャッシュの空間を使用できない場合、ストレージコントローラは、代わりに書込み要求をより低速のストレージデバイスに直接伝送しなければならず、従って書込み性能が低下する。
【0003】
書込みデータがライトキャッシュ内に入ると、ストレージコントローラは、いつ、どの、及びどの程度の量の書込みデータを宛先ストレージデバイスに伝送するのかを決定するための様々なポリシを制定する。この伝送を取り巻く動作は、ライトキャッシュからのデータのデステージングと呼ばれる。書込みデータのデステージングは、ホストコンピュータからの新たな書込み要求を受け入れるためにライトキャッシュの空間を解放することから重要であり、データは冗長なRAID構成内のストレージデバイス上に記憶される。冗長なRAID構成は、単一のストレージデバイスが障害を起こした場合、及び一部のRAID構成では複数のストレージデバイスが障害を起こした場合にデータを守る。従って、ストレージコントローラのライトキャッシュからストレージデバイスに書込みデータを効率的にデステージすることが望ましい。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】米国特許第5381528号明細書
【特許文献2】米国特許第5410653号明細書
【特許文献3】米国特許第5522054号明細書
【特許文献4】米国特許第5557767号明細書
【特許文献5】米国特許第5600817号明細書
【特許文献6】米国特許第5619723号明細書
【特許文献7】米国特許第5640530号明細書
【特許文献8】米国特許第7260679号明細書
【特許文献9】米国特許第8478945号明細書
【発明の概要】
【課題を解決するための手段】
【0005】
本発明は、従来技術の不都合を解決することを対象とする。本発明の実施形態によれば、ストレージコントローラからストレージデバイスに書込みデータを効率的にデステージするための方法が提供される。この方法は、ストレージコントローラのライトキャッシュからストレージデバイスにキャッシュ要素を伝送すべきであることをストレージコントローラによって決定することを含む。キャッシュ要素は、ライトキャッシュの固定サイズ部分である。この方法は、ダーティウォーターマークがダーティウォーターマークの最大値を上回ることを計算すること、ライトキャッシュからストレージデバイスにデステージする第1のキャッシュ要素を識別すること、ライトキャッシュからストレージデバイスに第1のキャッシュ要素を含む第1のデータコンテナを伝送すること、及びアクティブ・デステージ・カウントをインクリメントすることも含む。ダーティウォーターマークは、ライトキャッシュ内のダーティデータの量を特定し、ダーティデータは、ストレージデバイスにまだ書き込まれていないライトキャッシュ内のデータである。アクティブ・デステージ・カウントは、仮想ディスクに発行されてまだ完了していない書込み要求の現在の数である。仮想ディスクは、1つ又は複数の特定のストレージデバイスを含むRAID群である。この方法は、アクティブ・デステージ・カウントがアクティブ・デステージ・カウントの最大値を下回る場合、ストレージコントローラによって決定し、計算し、識別し、伝送し、及びインクリメントすることを繰り返すことを更に含む。
【0006】
本発明の他の実施形態によれば、ストレージデバイスに書込みデータを効率的にデステージするためのストレージコントローラが提供される。ストレージコントローラは、プロセッサとプロセッサに結合されるメモリとを含む。メモリは、複数のキャッシュ要素を含むライトキャッシュを含む。キャッシュ要素は、ライトキャッシュの固定サイズ部分である。ストレージコントローラは、ライトキャッシュからストレージデバイスにキャッシュ要素を伝送すべきであることを決定し、ダーティウォーターマークがダーティウォーターマークの最大値を上回ることを計算し、ライトキャッシュからストレージデバイスにデステージする第1のキャッシュ要素を識別し、ライトキャッシュからストレージデバイスに第1のキャッシュ要素を含む第1のデータコンテナを伝送し、アクティブ・デステージ・カウントをインクリメントし、アクティブ・デステージ・カウントがアクティブ・デステージ・カウントの最大値を下回る場合、決定し、計算し、識別し、伝送し、及びインクリメントすることを繰り返す。ダーティウォーターマークは、ライトキャッシュ内のダーティデータの量を特定し、ダーティデータは、ストレージデバイスにまだ書き込まれていないライトキャッシュ内のデータである。アクティブ・デステージ・カウントは、仮想ディスクに発行されてまだ完了していない書込み要求の現在の数である。仮想ディスクは、1つ又は複数の特定のストレージデバイスを含むRAID群である。
【0007】
本発明の更に他の実施形態によれば、ストレージデバイスに書込みデータを効率的に伝送するためのシステムが提供される。このシステムは、ホストコンピュータ、ホストコンピュータに結合されるストレージコントローラ、及びストレージコントローラに結合される1つ又は複数のストレージデバイスを含む仮想ディスクを含む。ストレージコントローラは、プロセッサとプロセッサに結合されるメモリとを含む。メモリは、複数のキャッシュ要素を含むライトキャッシュを含む。キャッシュ要素は、ライトキャッシュの固定サイズ部分であり、複数のキャッシュ要素の各キャッシュ要素はアクティブデータコンテナに対応する。仮想ディスクは、1つ又は複数のストレージデバイスのうちの1つ又は複数の特定のストレージデバイスを含むRAID群である。ホストコンピュータは、ストレージコントローラに書込み要求を伝送する。ストレージコントローラは、書込み要求を受け取ることに応答して、書込み要求に対応する書込みデータを複数のキャッシュ要素内に記憶する。ストレージコントローラは、ライトキャッシュから仮想ディスクにキャッシュ要素を伝送すべきであることを決定し、ダーティウォーターマークがダーティウォーターマークの最大値を上回ることを計算し、ライトキャッシュから仮想ディスクにデステージする第1のキャッシュ要素を識別し、ライトキャッシュから仮想ディスクに第1のキャッシュ要素を含むデータコンテナを伝送し、アクティブ・デステージ・カウントをインクリメントし、アクティブ・デステージ・カウントがアクティブ・デステージ・カウントの最大値を下回る場合、決定し、計算し、識別し、伝送し、及びインクリメントすることを繰り返す。ダーティウォーターマークは、ライトキャッシュ内のダーティデータの量を特定し、ダーティデータは、ストレージデバイスにまだ書き込まれていないライトキャッシュ内のデータである。アクティブ・デステージ・カウントは、仮想ディスクに発行されてまだ完了していない書込み要求の現在の数である。
【0008】
本発明の利点は、ストレージコントローラのライトキャッシュから書込みデータを効率的にデステージすることにより、ストライプド仮想ディスクへの書込み性能を改善することである。ストライプドボリュームにストライプをデステージする効率的手段がない場合、2つの結果のうちの1つが起こり得る。ストレージコントローラがライトキャッシュからストライプドボリュームに書込みデータを過度に複製し、その結果、ライトキャッシュが十分に活用されず、概してライトキャッシングを殆ど利さない可能性がある。或いは、ストレージコントローラがライトキャッシュからストライプドボリュームに書込みデータを不十分に複製し、全般的に満杯のライトキャッシュの原因となり得る。ライトキャッシュが満杯である場合、ストレージコントローラは、ライトキャッシュ内の空間が使用可能になるまで新たな書き込みを遅らせるか、さもなければ新たな書き込みをライトスルーモードでストレージデバイスに直接処理しなければならない。どちらの結果も性能を低下させる。
【0009】
本発明の別の利点は、入手可能な最大の一連の連続した書込みデータをデステージできることであり、これにより、新たなホスト書込みデータのためにライトキャッシュ内の殆どの空間が解放される。このことは、ライトキャッシュ内の使用可能空間を最大化し、それにより、ストレージコントローラがより大きい書込み要求、及びより多くの書込み要求をライトキャッシュ内に記憶することが可能となる。
【0010】
本発明の更に別の利点は、全てのダーティキャッシュ要素を順々に検査する以前の方法よりも、デステージするのにより良い代わりの書込みデータをはるかに速く検索できるようにすることである。本発明では、デステージに使用可能なフルストライプを迅速に識別するために、データコンテナの概念を利用する。概して、データコンテナは所定数のキャッシュ要素を含むため、キャッシュ要素よりも少ない多くのデータコンテナがある。更に、概してデータコンテナよりも少ない多くのデステージストリームがあるため、本発明で行うデステージストリームの検索は、データコンテナ又はキャッシュ要素を検索するよりもはるかに速い。
【0011】
本発明の実施形態の更なる特徴及び利点が、とりわけ添付図面と一緒に解釈するときに以下の説明からより容易に明らかになる。
【図面の簡単な説明】
【0012】
図1a】本発明の実施形態による、第1の非ホストベースのデータストレージシステムの構成要素を示すブロック図である。
図1b】本発明の実施形態による、第2の非ホストベースのデータストレージシステムの構成要素を示すブロック図である。
図1c】本発明の実施形態による、第3の非ホストベースのデータストレージシステムの構成要素を示すブロック図である。
図2a】本発明の実施形態による、第1のホストベースのデータストレージシステムの構成要素を示すブロック図である。
図2b】本発明の実施形態による、第2のホストベースのデータストレージシステムの構成要素を示すブロック図である。
図2c】本発明の実施形態による、第3のホストベースのデータストレージシステムの構成要素を示すブロック図である。
図3】本発明の実施形態による、データストレージシステムを示すブロック図である。
図4a】本発明の実施形態による、単一ストレージデバイスのストライプドボリュームを示す図である。
図4b】本発明の実施形態による、複数のストレージデバイスのストライプドボリュームを示す図である。
図5】本発明の実施形態による、ライトデータキャッシュのデータフローを示す図である。
図6】本発明の実施形態による、3+1 RAID5ストライプドボリュームに関する例示的データコンテナを示す図である。
図7a】本発明の実施形態による、フルストライプ書込みパーセンテージの計算プロセスを示すフローチャートである。
図7b】本発明の実施形態による、フルストライプ書込みパーセンテージの一例示的計算を示す図である。
図8】本発明の実施形態による、書込みデータストリームメタデータのパラメータを示す図である。
図9a】本発明の実施形態による、データストリームのグローバルメタデータを示す図である。
図9b】本発明の実施形態による、データストリームの仮想ディスクメタデータを示す図である。
図10】本発明の実施形態による、メタデータの初期化プロセスを示すフローチャートである。
図11】本発明の実施形態による、ストリームデステージ開始プロセスを示すフローチャートである。
図12】本発明の実施形態による、主要プロセスを示すフローチャートである。
図13】本発明の実施形態による、現在のキャッシュ要素がデステージするのに効率的かどうかを判定するためのプロセスを示すフローチャートである。
図14】本発明の実施形態による、デステージするのにより良いキャッシュ要素を識別するプロセスを示すフローチャートである。
図15】本発明の実施形態による、対応する仮想ディスクのデステージ・ストリーム・グラジェント(destage stream gradient)を求めるプロセスを示すフローチャートである。
【発明を実施するための形態】
【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】
最後に、添付の特許請求の範囲によって定める本発明の趣旨及び範囲から逸脱することなしに、本発明の同一目的を実行するための他の構造を設計し又は修正するための基礎として、開示した概念及び具体的実施形態を容易に使用できることを当業者は理解されよう。
【符号の説明】
【0115】
104…ホストコンピュータ
108…ストレージコントローラ
116…ストレージデバイス
312…CPU
316…メモリ
324…リードデータキャッシュ
328…ライトデータキャッシュ
332…ホスト入出力要求
344…ストレージデバイス書込み
348…仮想ディスク
348a〜n…仮想ディスク
352…キャッシュ要素
508…ダーティ部分
512…ダーティウォーターマークパーセンテージ
516…ダーティウォーターマーク最大パーセンテージ
600…データコンテナ
604…ストライプ
620…ダーティキャッシュ要素
624…有効なキャッシュ要素
図1a
図1b
図1c
図2a
図2b
図2c
図3
図4a
図4b
図5
図6
図7a
図7b
図8
図9a
図9b
図10
図11
図12
図13
図14
図15