(57)【要約】      （修正有）【課題】ストレージコントローラからストレージデバイスに書込みデータをデステージする。【解決手段】方法は、ストレージコントローラのライトキャッシュからストレージデバイスにキャッシュ要素を伝送すべきであることを決定すること、ダーティウォーターマークがダーティウォーターマークの最大値を上回ることを計算すること、ライトキャッシュからストレージデバイスにデステージするキャッシュ要素を識別すること、ストレージデバイスにキャッシュ要素を含むデータを伝送すること、アクティブデステージカウントをインクリメントすることを含む。方法は、アクティブデステージカウントがアクティブデステージカウントの最大値を下回る場合、決定し、計算し、識別し、伝送し、インクリメントすることを繰り返す。アクティブデステージカウントは、仮想ディスクに発行されてまだ完了していない書込み要求の数であり、仮想ディスクはＲＡＩＤ群である。【選択図】図１２
2016045935.tif 000002
【特許請求の範囲】
【請求項１】
ストレージコントローラからストレージデバイスに書込みデータを効率的にデステージするための方法であって、
前記ストレージコントローラによって前記ストレージコントローラのライトキャッシュから前記ストレージデバイスに前記ライトキャッシュの固定サイズ部分であるキャッシュ要素を伝送すべきであることを決定すること、
前記ストレージコントローラによってダーティウォーターマークがダーティウォーターマークの最大値を上回ることを計算することであって、前記ダーティウォーターマークは前記ライトキャッシュ内のダーティデータの量を特定し、ダーティデータはストレージデバイスにまだ書き込まれていない前記ライトキャッシュ内のデータである、前記計算すること、
前記ストレージコントローラによって前記ライトキャッシュから前記ストレージデバイスにデステージする第１のキャッシュ要素を識別すること、
前記ストレージコントローラによって前記ライトキャッシュから前記ストレージデバイスに前記第１のキャッシュ要素を含む第１のデータコンテナを伝送すること、
前記ストレージコントローラによってアクティブ・デステージ・カウントをインクリメントすることであって、前記アクティブ・デステージ・カウントは、仮想ディスクに対して発行されたまだ完了していないホスト書込み要求の現在の数であり、前記仮想ディスクは１つ又は複数の特定のストレージデバイスを含むＲＡＩＤ群である、前記インクリメントすること、
前記アクティブ・デステージ・カウントがアクティブ・デステージ・カウントの最大値を下回る場合、前記ストレージコントローラによって決定し、計算し、識別し、伝送し、及びインクリメントすることを繰り返すこと
を含む、方法。
【請求項２】
デステージストリームが前記第１のデータコンテナを含む場合、
前記ストレージコントローラによって前記デステージストリームから前記第１のデータコンテナを除去すること
を更に含み、
前記デステージストリーム及び前記第１のデータコンテナは前記仮想ディスクに対応し、前記デステージストリームは満杯のデータコンテナのみを含み、満杯のデータコンテナは、前記ＲＡＩＤ群のストライプ内の全ての前記キャッシュ要素を含む、請求項１に記載の方法。
【請求項３】
前記デステージストリームが前記第１のデータコンテナを含み、複数のデータコンテナの満杯の各データコンテナが隣接する論理ブロックアドレスを有する場合、前記ストレージコントローラが複数の満杯のデータコンテナを連結して前記第１のデータコンテナを作成する、請求項２に記載の方法。
【請求項４】
前記ストレージコントローラの前記ライトキャッシュから前記ストレージデバイスにキャッシュ要素を伝送すべきであることを決定することが、
前記ストレージコントローラによって前記ライトキャッシュから前記ストレージデバイスへのストライプのデステージングを終了し、前記アクティブ・デステージ・カウントをデクリメントすること、
前記ストレージコントローラによってホスト書込み要求を完了することであって、前記ホスト書込み要求に対応する前記データを前記ストレージデバイスに書き込むことを含む、前記ホスト書込み要求を完了すること、
ホスト入出力要求タイムアウト時間未満にわたり、ホスト入出力要求が受け取られていないことを前記ストレージコントローラによって確認することであって、ホスト入出力要求はホスト書込み要求及びホスト読取要求を含む、前記確認すること
のうちの１つを含み、
終了すること、完了すること、及び確認することのうちの１つを完了した後、
前記アクティブ・デステージ・カウントが前記アクティブ・デステージ・カウントの最大値を下回る場合にのみ、前記ストレージコントローラによって、決定し、計算し、識別し、伝送し、及びインクリメントする、請求項１に記載の方法。
【請求項５】
前記ライトキャッシュから前記ストレージデバイスにデステージする第１のキャッシュ要素を識別することが、
前記ストレージコントローラによって前記第１のデータコンテナが満杯かどうかを判定することであって、満杯のデータコンテナはストライプ内の全ての前記キャッシュ要素を含み、ストライプは、隣接する論理ブロックアドレスを有する複数のキャッシュ要素を含む、前記判定すること、
前記第１のデータコンテナが満杯ではない場合、
前記ストレージコントローラによってフルストライプ書込みパーセンテージがフルストライプ書込みアフィニティ値を下回るかどうかを計算すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値以上の場合、
前記ストレージコントローラによってデステージするのにより良いキャッシュ要素を識別すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値を下回る場合、
前記ストレージコントローラによって前記第１のキャッシュ要素として現在のキャッシュ要素を特定することであって、現在のキャッシュ要素ポインタが前記現在のキャッシュ要素及び前記第１のデータコンテナを特定する、前記特定すること、
前記第１のデータコンテナが満杯である場合、
前記ストレージコントローラによって前記現在のキャッシュ要素を前記第１のキャッシュ要素として識別することを含む、請求項１に記載の方法。
【請求項６】
前記フルストライプ書込みパーセンテージは、前記仮想ディスクのダーティキャッシュ要素の数で除算された、前記仮想ディスクのフルストライプに属するダーティキャッシュ要素の数であり、ダーティキャッシュ要素は前記ストレージデバイスにまだ書き込まれていないデータを含むキャッシュ要素であり、フルストライプの全てのデータ位置が前記ライトキャッシュのキャッシュ要素において表現され、前記フルストライプ書込みアフィニティ値は、前記ストレージコントローラが前記ライトキャッシュからフルストライプの書込みを発行することのみを選ぶ閾値を特定し、前記現在のストライプはフルストライプ及び部分ストライプのうちの１つである、請求項５に記載の方法。
【請求項７】
デステージするのにより良いキャッシュ要素を識別することが、
前記ストレージコントローラによってデステージ・ストリーム・グラジェントを計算すること、
前記ストレージコントローラによって前記デステージ・ストリーム・グラジェントがデステージ・ストリーム・グラジェント閾値を上回るかどうかを判定することであって、前記デステージ・ストリーム・グラジェント閾値は前記仮想ディスクのストライプサイズの倍数である、前記判定すること、
前記デステージ・ストリーム・グラジェントが前記デステージ・ストリーム・グラジェント閾値を上回る場合、
前記ストレージコントローラによって最も大きいデステージ・ストリーム・オブジェクトを識別すること、
前記ストレージコントローラによって前記最も大きいデステージ・ストリーム・オブジェクト内の最も低い論理ブロックアドレスを有する、前記最も大きいデステージ・ストリーム・オブジェクト内のキャッシュ要素を前記デステージするのにより良いキャッシュ要素として識別すること、
前記デステージ・ストリーム・グラジェントが前記デステージ・ストリーム・グラジェント閾値以下の場合、
前記ストレージコントローラによって前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値を下回るかどうかを計算すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値以上の場合、
前記ストレージコントローラによって次の満杯のデータコンテナを識別することであって、前記次の満杯のデータコンテナは、前記第１のデータコンテナに比べて二番目に大きいサイズを有する前記デステージ・ストリーム・オブジェクトである、前記次の満杯のデータコンテナを識別すること、
前記ストレージコントローラによって前記次の満杯のデータコンテナ内の前記最も低い論理ブロックアドレスを有するキャッシュ要素を、前記デステージするのにより良いキャッシュ要素として識別すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値を下回る場合、
前記デステージするのにより良いキャッシュ要素として前記現在のキャッシュ要素を前記ストレージコントローラによって識別すること
を含む、請求項６に記載の方法。
【請求項８】
前記デステージ・ストリーム・グラジェントを計算することが、
前記ストレージコントローラによって前記仮想ディスクのための前記最も大きいデステージストリームを識別することであって、前記デステージストリームは満杯のデータコンテナのみを含む、前記最も大きいデステージストリームを識別すること、
前記ストレージコントローラによって前記仮想ディスクのための最も小さいデステージ・ストリーム・オブジェクトを識別すること、
前記ストレージコントローラによって前記最も大きいデステージ・ストリーム・オブジェクトから前記最も小さいデステージ・ストリーム・オブジェクトを減算して、前記デステージ・ストリーム・グラジェントを得ること
を含む、請求項７に記載の方法。
【請求項９】
前記ライトキャッシュから前記ストレージデバイスに前記第１のキャッシュ要素を含む第１のデータコンテナを伝送することが、
前記ストレージコントローラによって前記ライトキャッシュから前記仮想ディスクに前記第１のデータコンテナをデステージすること、
前記ストレージコントローラによって前記アクティブ・デステージ・カウントをインクリメントすること、
前記ストレージコントローラによってデータコンテナ一覧から前記データコンテナを除去することであって、前記データコンテナ一覧は状態、ダーティキャッシュ要素のカウント、及びアクティブデータコンテナごとの総キャッシュ要素カウントを含み、前記状態はデータコンテナが満杯か部分的に満杯かのいずれかを特定する、前記データコンテナを除去すること
を含む、請求項８に記載の方法。
【請求項１０】
ストレージデバイスに書込みデータを効率的にデステージするためのストレージコントローラであって、
プロセッサと、
前記プロセッサに結合されるメモリであって、複数のキャッシュ要素を含むライトキャッシュを含み、前記キャッシュ要素は前記ライトキャッシュの固定サイズ部分である、前記メモリと
を備え、
前記ストレージコントローラは、前記ライトキャッシュから前記ストレージデバイスにキャッシュ要素を伝送すべきであることを決定し、ダーティウォーターマークがダーティウォーターマークの最大値を上回ることを計算し、前記ライトキャッシュから前記ストレージデバイスにデステージする第１のキャッシュ要素を識別し、前記ライトキャッシュから前記ストレージデバイスに前記第１のキャッシュ要素を含む第１のデータコンテナを伝送し、アクティブ・デステージ・カウントをインクリメントし、前記アクティブ・デステージ・カウントがアクティブ・デステージ・カウントの最大値を下回る場合、決定し、計算し、識別し、伝送し、及びインクリメントすることを繰り返し、
前記ダーティウォーターマークは、前記ライトキャッシュ内のダーティデータの量を特定し、ダーティデータは、ストレージデバイスにまだ書き込まれていない前記ライトキャッシュ内のデータであり、前記アクティブ・デステージ・カウントは、仮想ディスクに発行されてまだ完了していないデータコンテナの現在の数であり、前記仮想ディスクは１つ又は複数の特定のストレージデバイスを含むＲＡＩＤ群である、
ストレージコントローラ。
【請求項１１】
前記ストレージコントローラが前記ストレージコントローラの前記ライトキャッシュから前記ストレージデバイスに前記キャッシュ要素を伝送すべきであることを決定することが、
前記ストレージコントローラが前記ライトキャッシュから前記ストレージデバイスへのデステージ・ストリーム・オブジェクトのデステージングを終了し、前記アクティブ・デステージ・カウントをデクリメントすることであって、デステージ・ストリーム・オブジェクトは満杯のデータコンテナである、前記アクティブ・デステージ・カウントをデクリメントすること、
前記ストレージコントローラがホスト書込み要求を完了することであって、前記ストレージコントローラが前記ホスト書込み要求に対応する前記データを前記ストレージデバイスに書き込むことを含む、前記ホスト書込み要求を完了すること、
前記ストレージコントローラがホスト入出力要求タイムアウト時間超にわたり、ホスト入出力要求が受け取られていることを確認すること
のうちの１つを含み、
終了すること、完了すること、及び確認することのうちの１つを完了した後、
前記アクティブ・デステージ・カウントが前記アクティブ・デステージ・カウントの最大値を下回る場合にのみ、前記ストレージコントローラが、決定し、計算し、識別し、伝送し、及びインクリメントする、請求項１０に記載のストレージコントローラ。
【請求項１２】
前記ストレージコントローラが前記ライトキャッシュから前記ストレージデバイスにデステージする第１のキャッシュ要素を識別することが、
前記ストレージコントローラが前記第１のデータコンテナが満杯かどうかを判定することであって、満杯のデータコンテナはストライプ内の全ての前記キャッシュ要素を含み、ストライプは、隣接する論理ブロックアドレスを有する複数のキャッシュ要素を含む、前記判定すること、
前記第１のデータコンテナが満杯ではない場合、
前記ストレージコントローラがフルストライプ書込みパーセンテージがフルストライプ書込みアフィニティ値を下回るかどうかを計算すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値以上の場合、
前記ストレージコントローラがデステージするのにより良いキャッシュ要素を識別すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値を下回る場合、
前記ストレージコントローラが前記第１のキャッシュ要素として現在のキャッシュ要素を識別することであって、現在のキャッシュ要素ポインタが前記現在のキャッシュ要素及び前記第１のデータコンテナを識別する、現在のキャッシュ要素を識別すること、
前記第１のデータコンテナが満杯である場合、
前記ストレージコントローラが前記現在のキャッシュ要素を前記第１のキャッシュ要素として識別すること
を含む、請求項１０に記載のストレージコントローラ。
【請求項１３】
前記フルストライプ書込みパーセンテージは、ダーティキャッシュ要素の数で除算された、前記仮想ディスクのフルストライプに属する前記仮想ディスクのダーティキャッシュ要素の数であり、ダーティキャッシュ要素は前記ストレージデバイスにまだ書き込まれていないデータを含むキャッシュ要素であり、フルストライプの全てのデータ位置が前記ライトキャッシュのキャッシュ要素において表現され、前記フルストライプ書込みアフィニティ値は、前記ストレージコントローラが前記ライトキャッシュからフルストライプの書込みを発行することのみを選ぶ閾値を特定する、請求項１２に記載のストレージコントローラ。
【請求項１４】
前記ストレージコントローラがデステージするのにより良いキャッシュ要素を識別することが、
前記ストレージコントローラがデステージ・ストリーム・グラジェントを計算すること、
前記ストレージコントローラが前記デステージ・ストリーム・グラジェントがデステージ・ストリーム・グラジェント閾値を上回るかどうかを判定することであって、前記デステージ・ストリーム・グラジェント閾値は前記仮想ディスクのストライプサイズの倍数である、前記判定すること、
前記デステージ・ストリーム・グラジェントが前記デステージ・ストリーム・グラジェント閾値を上回る場合、
前記ストレージコントローラが最も大きいデステージ・ストリーム・オブジェクトを識別すること、
前記ストレージコントローラが前記最も大きいデステージ・ストリーム・オブジェクト内の最も低い論理ブロックアドレスを有する、前記最も大きいデステージ・ストリーム・オブジェクト内のキャッシュ要素を前記デステージするのにより良いキャッシュ要素として識別すること、
前記デステージ・ストリーム・グラジェントが前記デステージ・ストリーム・グラジェント閾値以下の場合、
前記ストレージコントローラが前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値を下回るかどうかを計算すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値以上の場合、
前記ストレージコントローラが次の満杯のデータコンテナを識別することであって、前記次の満杯のデータコンテナは、前記第１のデータコンテナに比べて二番目に大きいサイズを有する前記デステージ・ストリーム・オブジェクトである、前記次の満杯のデータコンテナを識別すること、
前記ストレージコントローラが前記次の満杯のデータコンテナ内の前記最も低い論理ブロックアドレスを有するキャッシュ要素を前記デステージするのにより良いキャッシュ要素として識別すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値を下回る場合、
前記ストレージコントローラが前記デステージするのにより良いキャッシュ要素として前記現在のキャッシュ要素を識別すること
を含む、請求項１３に記載のストレージコントローラ。
【請求項１５】
前記デステージ・ストリーム・グラジェントを前記ストレージコントローラが計算することが、
前記ストレージコントローラがデステージストリーム内の前記最も大きいデステージ・ストリーム・オブジェクトを識別することであって、前記デステージストリームは満杯のデータコンテナのみを含む、前記最も大きいデステージ・ストリーム・オブジェクトを識別すること、
前記ストレージコントローラが前記デステージストリーム内の最も小さいデステージ・ストリーム・オブジェクトを識別すること、
前記ストレージコントローラが前記最も大きいデステージ・ストリーム・オブジェクトから前記最も小さいデステージ・ストリーム・オブジェクトを減算して、前記デステージ・ストリーム・グラジェントを得ること
を含む、請求項１４に記載のストレージコントローラ。
【請求項１６】
前記ストレージコントローラが前記ライトキャッシュから前記ストレージデバイスに前記第１のキャッシュ要素を含む第１のデータコンテナを伝送することが、
前記ストレージコントローラが前記ライトキャッシュから前記仮想ディスクに前記第１のデータコンテナをデステージすること、
前記ストレージコントローラが前記アクティブ・デステージ・カウントをインクリメントすること、
前記ストレージコントローラがデータコンテナ一覧から前記データコンテナを除去することであって、前記データコンテナ一覧は状態、ダーティキャッシュ要素のカウント、及びアクティブデータコンテナごとの総キャッシュ要素カウントを含み、前記状態はデータコンテナが満杯か部分的に満杯かのいずれかを特定する、前記データコンテナを除去すること
を含む、請求項１５に記載のストレージコントローラ。
【請求項１７】
ストレージデバイスに書込みデータを効率的に伝送するためのシステムであって、
ホストコンピュータと、
前記ホストコンピュータに結合されるストレージコントローラであって、
プロセッサ、
前記プロセッサに結合されるメモリであって、複数のキャッシュ要素を含むライトキャッシュを含み、キャッシュ要素は前記ライトキャッシュの固定サイズ部分であり、前記複数のキャッシュ要素の各キャッシュ要素はアクティブデータコンテナに対応する、前記メモリと
を含む前記ストレージコントローラと、
前記ストレージコントローラに結合される１つ又は複数のストレージデバイスを含む仮想ディスクであって、前記仮想ディスクは、前記１つ又は複数のストレージデバイスのうちの１つ又は複数の特定のストレージデバイスを含むＲＡＩＤ群である、前記仮想ディスクと
を備え、
前記ホストコンピュータは、前記ストレージコントローラに書込み要求を伝送し、前記ストレージコントローラは、前記書込み要求を受け取ることに応答して、前記書込み要求に対応する書込みデータを前記複数のキャッシュ要素に記憶し、
前記ストレージコントローラは、前記ライトキャッシュから前記仮想ディスクにキャッシュ要素を伝送すべきであることを決定し、ダーティウォーターマークがダーティウォーターマークの最大値を上回ることを計算し、前記ライトキャッシュから前記仮想ディスクにデステージする第１のキャッシュ要素を識別し、前記ライトキャッシュから前記仮想ディスクに前記第１のキャッシュ要素を含むデータコンテナを伝送し、アクティブ・デステージ・カウントをインクリメントし、前記アクティブ・デステージ・カウントがアクティブ・デステージ・カウントの最大値を下回る場合、決定し、計算し、識別し、伝送し、及びインクリメントすることを繰り返し、
前記ダーティウォーターマークは、前記ライトキャッシュ内のダーティデータの量を特定し、ダーティデータは、ストレージデバイスにまだ書き込まれていない前記ライトキャッシュ内のデータであり、前記アクティブ・デステージ・カウントは、前記仮想ディスクに発行されてまだ完了していない書込み要求の現在の数である、
システム。
【請求項１８】
前記ストレージコントローラが前記ライトキャッシュから前記仮想ディスクにデステージする前記第１のキャッシュ要素を識別することが、
前記ストレージコントローラが前記データコンテナが満杯かどうかを判定することであって、満杯のデータコンテナはストライプ内の全ての前記キャッシュ要素を含み、ストライプは、隣接する論理ブロックアドレスを有する複数のキャッシュ要素を含む、前記判定すること、
前記データコンテナが満杯ではない場合、
前記ストレージコントローラがフルストライプ書込みパーセンテージがフルストライプ書込みアフィニティ値を下回るかどうかを計算することであって、前記フルストライプ書込みパーセンテージは、ダーティキャッシュ要素の数で除算された、前記仮想ディスクのフルストライプに属する前記仮想ディスクのダーティキャッシュ要素の数であり、ダーティキャッシュ要素は前記ストレージデバイスにまだ書き込まれていないデータを含むキャッシュ要素であり、フルストライプの全てのデータ位置が前記ライトキャッシュのキャッシュ要素において表現され、前記フルストライプ書込みアフィニティ値は、前記ストレージコントローラが前記ライトキャッシュからフルストライプの書込みを発行することのみを選ぶ閾値を反映する、前記計算すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値以上の場合、
前記ストレージコントローラがデステージするのにより良いキャッシュ要素を識別すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値を下回る場合、
前記ストレージコントローラが前記第１のキャッシュ要素として現在のキャッシュ要素を識別することであって、現在のキャッシュ要素ポインタが前記現在のキャッシュ要素及び前記データコンテナを識別する、現在のキャッシュ要素を識別すること、
第１のデータコンテナが満杯である場合、
前記ストレージコントローラが前記現在のキャッシュ要素を前記第１のキャッシュ要素として識別すること
を含む、請求項１７に記載のシステム。
【請求項１９】
前記ストレージコントローラが前記デステージするのにより良いキャッシュ要素を識別することが、
前記ストレージコントローラがデステージ・ストリーム・グラジェントを計算することであって、
前記ストレージコントローラがデステージストリーム内の最も大きいデステージ・ストリーム・オブジェクトを識別することであって、前記デステージストリームは満杯のデータコンテナのみを含む、最も大きいデステージ・ストリーム・オブジェクトを識別すること、
前記ストレージコントローラが前記デステージストリーム内の最も小さいデステージ・ストリーム・オブジェクトを識別すること、
前記ストレージコントローラが前記最も大きいデステージ・ストリーム・オブジェクトから前記最も小さいデステージ・ストリーム・オブジェクトを減算して、前記デステージ・ストリーム・グラジェントを得ること
を含む、前記デステージ・ストリーム・グラジェントを計算すること、
前記ストレージコントローラが前記デステージ・ストリーム・グラジェントがデステージ・ストリーム・グラジェント閾値を上回るかどうかを判定することであって、前記デステージ・ストリーム・グラジェント閾値は前記仮想ディスクのストライプサイズの倍数である、前記判定すること、
前記デステージ・ストリーム・グラジェントが前記デステージ・ストリーム・グラジェント閾値を上回る場合、
前記ストレージコントローラが最も大きいデステージ・ストリーム・オブジェクトを識別すること、
前記ストレージコントローラが前記最も大きいデステージ・ストリーム・オブジェクト内の最も低い論理ブロックアドレスを有する、前記最も大きいデステージ・ストリーム・オブジェクト内のキャッシュ要素を前記デステージするのにより良いキャッシュ要素として識別すること、
前記デステージ・ストリーム・グラジェントが前記デステージ・ストリーム・グラジェント閾値以下の場合、
前記ストレージコントローラが前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値を下回るかどうかを計算すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値以上の場合、
前記ストレージコントローラが次の満杯のデータコンテナを識別することであって、前記次の満杯のデータコンテナは、前記第１のデータコンテナに比べて二番目に大きいサイズを有する前記デステージ・ストリーム・オブジェクトである、前記次の満杯のデータコンテナを識別すること、
前記ストレージコントローラが前記次の満杯のデータコンテナ内の前記最も低い論理ブロックアドレスを有するキャッシュ要素を、前記デステージするのにより良いキャッシュ要素として識別すること、
前記フルストライプ書込みパーセンテージが前記フルストライプ書込みアフィニティ値を下回る場合、
前記ストレージコントローラが前記デステージするのにより良いキャッシュ要素として前記現在のキャッシュ要素を識別すること
を含む、請求項１８に記載のシステム。
【請求項２０】
前記ストレージコントローラが前記ライトキャッシュから前記仮想ディスクに前記第１のキャッシュ要素を含む前記データコンテナを伝送することが、
前記ストレージコントローラが前記ライトキャッシュから前記仮想ディスクに前記データコンテナをデステージすること、
前記ストレージコントローラが前記アクティブ・デステージ・カウントをインクリメントすること、
前記ストレージコントローラがデータコンテナ一覧から前記データコンテナを除去することであって、前記データコンテナ一覧は状態、ダーティキャッシュ要素のカウント、及びアクティブデータコンテナごとの総キャッシュ要素カウントを含み、前記状態はデータコンテナが満杯か部分的に満杯かのいずれかを特定する、前記データコンテナを除去すること
を含む、請求項１７に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータのデータストレージシステムを対象とする。具体的には、本発明は、ストレージコントローラのキャッシュメモリからストライプドボリュームのストレージデバイスに逐次書込みデータを効率的にデステージするための方法及び装置を対象とする。
【背景技術】
【０００２】
データストレージシステムでは、ライトバックキャッシングを含む良く知られているデータキャッシング技法を利用することによって書込みの性能が高められる。ストレージコントローラがホストコンピュータから書込み要求を受け取ると、ストレージコントローラは、ライトキャッシュ内に空きがある場合は書込みデータをライトキャッシュ内に記憶し、書込み要求が完了したことをホストコンピュータに知らせる。これにより、結果的にホストコンピュータが追加の読取要求又は書込み要求を発行する必要がなくなる。ライトキャッシュの空間を使用できない場合、ストレージコントローラは、代わりに書込み要求をより低速のストレージデバイスに直接伝送しなければならず、従って書込み性能が低下する。
【０００３】
書込みデータがライトキャッシュ内に入ると、ストレージコントローラは、いつ、どの、及びどの程度の量の書込みデータを宛先ストレージデバイスに伝送するのかを決定するための様々なポリシを制定する。この伝送を取り巻く動作は、ライトキャッシュからのデータのデステージングと呼ばれる。書込みデータのデステージングは、ホストコンピュータからの新たな書込み要求を受け入れるためにライトキャッシュの空間を解放することから重要であり、データは冗長なＲＡＩＤ構成内のストレージデバイス上に記憶される。冗長なＲＡＩＤ構成は、単一のストレージデバイスが障害を起こした場合、及び一部のＲＡＩＤ構成では複数のストレージデバイスが障害を起こした場合にデータを守る。従って、ストレージコントローラのライトキャッシュからストレージデバイスに書込みデータを効率的にデステージすることが望ましい。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第５３８１５２８号明細書
【特許文献２】米国特許第５４１０６５３号明細書
【特許文献３】米国特許第５５２２０５４号明細書
【特許文献４】米国特許第５５５７７６７号明細書
【特許文献５】米国特許第５６００８１７号明細書
【特許文献６】米国特許第５６１９７２３号明細書
【特許文献７】米国特許第５６４０５３０号明細書
【特許文献８】米国特許第７２６０６７９号明細書
【特許文献９】米国特許第８４７８９４５号明細書
【発明の概要】
【課題を解決するための手段】
【０００５】
本発明は、従来技術の不都合を解決することを対象とする。本発明の実施形態によれば、ストレージコントローラからストレージデバイスに書込みデータを効率的にデステージするための方法が提供される。この方法は、ストレージコントローラのライトキャッシュからストレージデバイスにキャッシュ要素を伝送すべきであることをストレージコントローラによって決定することを含む。キャッシュ要素は、ライトキャッシュの固定サイズ部分である。この方法は、ダーティウォーターマークがダーティウォーターマークの最大値を上回ることを計算すること、ライトキャッシュからストレージデバイスにデステージする第１のキャッシュ要素を識別すること、ライトキャッシュからストレージデバイスに第１のキャッシュ要素を含む第１のデータコンテナを伝送すること、及びアクティブ・デステージ・カウントをインクリメントすることも含む。ダーティウォーターマークは、ライトキャッシュ内のダーティデータの量を特定し、ダーティデータは、ストレージデバイスにまだ書き込まれていないライトキャッシュ内のデータである。アクティブ・デステージ・カウントは、仮想ディスクに発行されてまだ完了していない書込み要求の現在の数である。仮想ディスクは、１つ又は複数の特定のストレージデバイスを含むＲＡＩＤ群である。この方法は、アクティブ・デステージ・カウントがアクティブ・デステージ・カウントの最大値を下回る場合、ストレージコントローラによって決定し、計算し、識別し、伝送し、及びインクリメントすることを繰り返すことを更に含む。
【０００６】
本発明の他の実施形態によれば、ストレージデバイスに書込みデータを効率的にデステージするためのストレージコントローラが提供される。ストレージコントローラは、プロセッサとプロセッサに結合されるメモリとを含む。メモリは、複数のキャッシュ要素を含むライトキャッシュを含む。キャッシュ要素は、ライトキャッシュの固定サイズ部分である。ストレージコントローラは、ライトキャッシュからストレージデバイスにキャッシュ要素を伝送すべきであることを決定し、ダーティウォーターマークがダーティウォーターマークの最大値を上回ることを計算し、ライトキャッシュからストレージデバイスにデステージする第１のキャッシュ要素を識別し、ライトキャッシュからストレージデバイスに第１のキャッシュ要素を含む第１のデータコンテナを伝送し、アクティブ・デステージ・カウントをインクリメントし、アクティブ・デステージ・カウントがアクティブ・デステージ・カウントの最大値を下回る場合、決定し、計算し、識別し、伝送し、及びインクリメントすることを繰り返す。ダーティウォーターマークは、ライトキャッシュ内のダーティデータの量を特定し、ダーティデータは、ストレージデバイスにまだ書き込まれていないライトキャッシュ内のデータである。アクティブ・デステージ・カウントは、仮想ディスクに発行されてまだ完了していない書込み要求の現在の数である。仮想ディスクは、１つ又は複数の特定のストレージデバイスを含むＲＡＩＤ群である。
【０００７】
本発明の更に他の実施形態によれば、ストレージデバイスに書込みデータを効率的に伝送するためのシステムが提供される。このシステムは、ホストコンピュータ、ホストコンピュータに結合されるストレージコントローラ、及びストレージコントローラに結合される１つ又は複数のストレージデバイスを含む仮想ディスクを含む。ストレージコントローラは、プロセッサとプロセッサに結合されるメモリとを含む。メモリは、複数のキャッシュ要素を含むライトキャッシュを含む。キャッシュ要素は、ライトキャッシュの固定サイズ部分であり、複数のキャッシュ要素の各キャッシュ要素はアクティブデータコンテナに対応する。仮想ディスクは、１つ又は複数のストレージデバイスのうちの１つ又は複数の特定のストレージデバイスを含むＲＡＩＤ群である。ホストコンピュータは、ストレージコントローラに書込み要求を伝送する。ストレージコントローラは、書込み要求を受け取ることに応答して、書込み要求に対応する書込みデータを複数のキャッシュ要素内に記憶する。ストレージコントローラは、ライトキャッシュから仮想ディスクにキャッシュ要素を伝送すべきであることを決定し、ダーティウォーターマークがダーティウォーターマークの最大値を上回ることを計算し、ライトキャッシュから仮想ディスクにデステージする第１のキャッシュ要素を識別し、ライトキャッシュから仮想ディスクに第１のキャッシュ要素を含むデータコンテナを伝送し、アクティブ・デステージ・カウントをインクリメントし、アクティブ・デステージ・カウントがアクティブ・デステージ・カウントの最大値を下回る場合、決定し、計算し、識別し、伝送し、及びインクリメントすることを繰り返す。ダーティウォーターマークは、ライトキャッシュ内のダーティデータの量を特定し、ダーティデータは、ストレージデバイスにまだ書き込まれていないライトキャッシュ内のデータである。アクティブ・デステージ・カウントは、仮想ディスクに発行されてまだ完了していない書込み要求の現在の数である。
【０００８】
本発明の利点は、ストレージコントローラのライトキャッシュから書込みデータを効率的にデステージすることにより、ストライプド仮想ディスクへの書込み性能を改善することである。ストライプドボリュームにストライプをデステージする効率的手段がない場合、２つの結果のうちの１つが起こり得る。ストレージコントローラがライトキャッシュからストライプドボリュームに書込みデータを過度に複製し、その結果、ライトキャッシュが十分に活用されず、概してライトキャッシングを殆ど利さない可能性がある。或いは、ストレージコントローラがライトキャッシュからストライプドボリュームに書込みデータを不十分に複製し、全般的に満杯のライトキャッシュの原因となり得る。ライトキャッシュが満杯である場合、ストレージコントローラは、ライトキャッシュ内の空間が使用可能になるまで新たな書き込みを遅らせるか、さもなければ新たな書き込みをライトスルーモードでストレージデバイスに直接処理しなければならない。どちらの結果も性能を低下させる。
【０００９】
本発明の別の利点は、入手可能な最大の一連の連続した書込みデータをデステージできることであり、これにより、新たなホスト書込みデータのためにライトキャッシュ内の殆どの空間が解放される。このことは、ライトキャッシュ内の使用可能空間を最大化し、それにより、ストレージコントローラがより大きい書込み要求、及びより多くの書込み要求をライトキャッシュ内に記憶することが可能となる。
【００１０】
本発明の更に別の利点は、全てのダーティキャッシュ要素を順々に検査する以前の方法よりも、デステージするのにより良い代わりの書込みデータをはるかに速く検索できるようにすることである。本発明では、デステージに使用可能なフルストライプを迅速に識別するために、データコンテナの概念を利用する。概して、データコンテナは所定数のキャッシュ要素を含むため、キャッシュ要素よりも少ない多くのデータコンテナがある。更に、概してデータコンテナよりも少ない多くのデステージストリームがあるため、本発明で行うデステージストリームの検索は、データコンテナ又はキャッシュ要素を検索するよりもはるかに速い。
【００１１】
本発明の実施形態の更なる特徴及び利点が、とりわけ添付図面と一緒に解釈するときに以下の説明からより容易に明らかになる。
【図面の簡単な説明】
【００１２】
【図１ａ】本発明の実施形態による、第１の非ホストベースのデータストレージシステムの構成要素を示すブロック図である。
【図１ｂ】本発明の実施形態による、第２の非ホストベースのデータストレージシステムの構成要素を示すブロック図である。
【図１ｃ】本発明の実施形態による、第３の非ホストベースのデータストレージシステムの構成要素を示すブロック図である。
【図２ａ】本発明の実施形態による、第１のホストベースのデータストレージシステムの構成要素を示すブロック図である。
【図２ｂ】本発明の実施形態による、第２のホストベースのデータストレージシステムの構成要素を示すブロック図である。
【図２ｃ】本発明の実施形態による、第３のホストベースのデータストレージシステムの構成要素を示すブロック図である。
【図３】本発明の実施形態による、データストレージシステムを示すブロック図である。
【図４ａ】本発明の実施形態による、単一ストレージデバイスのストライプドボリュームを示す図である。
【図４ｂ】本発明の実施形態による、複数のストレージデバイスのストライプドボリュームを示す図である。
【図５】本発明の実施形態による、ライトデータキャッシュのデータフローを示す図である。
【図６】本発明の実施形態による、３＋１  ＲＡＩＤ５ストライプドボリュームに関する例示的データコンテナを示す図である。
【図７ａ】本発明の実施形態による、フルストライプ書込みパーセンテージの計算プロセスを示すフローチャートである。
【図７ｂ】本発明の実施形態による、フルストライプ書込みパーセンテージの一例示的計算を示す図である。
【図８】本発明の実施形態による、書込みデータストリームメタデータのパラメータを示す図である。
【図９ａ】本発明の実施形態による、データストリームのグローバルメタデータを示す図である。
【図９ｂ】本発明の実施形態による、データストリームの仮想ディスクメタデータを示す図である。
【図１０】本発明の実施形態による、メタデータの初期化プロセスを示すフローチャートである。
【図１１】本発明の実施形態による、ストリームデステージ開始プロセスを示すフローチャートである。
【図１２】本発明の実施形態による、主要プロセスを示すフローチャートである。
【図１３】本発明の実施形態による、現在のキャッシュ要素がデステージするのに効率的かどうかを判定するためのプロセスを示すフローチャートである。
【図１４】本発明の実施形態による、デステージするのにより良いキャッシュ要素を識別するプロセスを示すフローチャートである。
【図１５】本発明の実施形態による、対応する仮想ディスクのデステージ・ストリーム・グラジェント（ｄｅｓｔａｇｅ  ｓｔｒｅａｍ  ｇｒａｄｉｅｎｔ）を求めるプロセスを示すフローチャートである。
【発明を実施するための形態】
【００１３】
本発明者らは、ホストコンピュータからストレージコントローラへの特定の入出力作業負荷において様々な性能上の問題を観察してきた。具体的には、大きい逐次書込みストリームが関与する場合、ストレージコントローラのライトキャッシュを効率的に管理することは困難であり得る。
【００１４】
パリティＲＡＩＤの書込み操作は、新たな書込みデータをライトキャッシュに記憶すること、古い書込みデータ及びパリティをストレージデバイスから読み取ること、新たなパリティを作成すること、並びに新たな書込みデータ及び新たなパリティをストレージデバイスに書き込むことを含む。パリティＲＡＩＤの書込み操作は、部分ストライプの書込みよりもフルストライプの書込みで処理する方がはるかに効率的である。部分ストライプの書込みは、フルストライプ内の全てよりも少ないデータを含む。本発明では、大きい逐次書込みストリームについて、部分ストライプに優先してフルストライプをデステージすることによって性能を改善する。
【００１５】
次に図１ａを参照し、本発明の実施形態による、第１の非ホストベースのデータストレージシステム１００の構成要素を示すブロック図が示されている。
データストレージシステム１００は、１台又は複数台のホストコンピュータ１０４を含む。ホストコンピュータ１０４は概してサーバだが、デスクトップやモバイルコンピュータでも良い。ホストコンピュータ１０４は、ホストバス又はネットワーク１１２を介したストレージコントローラ１０８へのリード／ライト要求を生成するアプリケーションプログラムを実行する。一実施形態では、ホストバス又はネットワーク１１２は、ＳＣＳＩ、ＦＣ−ＡＬ、ＵＳＢ、ファイアワイヤ（Firewire）、ＳＳＡ、ＳＡＳ、ＳＡＴＡ、インフィニバンド（Infiniband）等のバスである。別の実施形態では、ホストバス又はネットワーク１１２は、イーサネット（登録商標）、ｉＳＣＳＩ、ファイバチャネル（Fiber Channel）、ＳＳＡ、ＥＳＣＯＮ、ＡＴＭ、ＦＩＣＯＮ、ＮＶＭｅ、インフィニバンド等のネットワークである。
【００１６】
ホストコンピュータ１０４は、１つ又は複数のストレージコントローラ１０８とインターフェイスするが、明瞭にするためにストレージコントローラ１０８は１つのみを図示している。一実施形態では、ストレージコントローラ１０８がＲＡＩＤコントローラである。別の実施形態では、ストレージコントローラ１０８が、プロビジョニング、仮想化、複製、バックアップ機器等のストレージ機器である。ストレージコントローラ１０８は、ストレージデバイス・バス１２０を介して、ストレージサブシステム１２４内のストレージデバイス１１６ａ、１１６ｂとの間でデータをやり取りする。ストレージデバイス・バス１２０は、これだけに限定されないが、ＳＣＳＩ、ファイバチャネル、ＳＡＳ、ＳＡＴＡ、又はＳＳＡを含む、ストレージコントローラ１０８とストレージデバイス１１６との間でデータを直接伝送するための任意の適切なストレージバス又はバス群である。
【００１７】
一実施形態では、ストレージサブシステム１２４が１２個のストレージデバイス１１６を含む。他の実施形態では、ストレージサブシステム１２４が、１２個未満の又はそれを上回るストレージデバイス１１６を含み得る。ストレージデバイス１１６は、ハードディスクドライブ、ソリッドステートドライブ、光学ドライブ、及びテープドライブを含む様々な種類のストレージデバイスを含む。特定のストレージデバイスの種類の範囲内で、性能に応じて組織化されるストレージデバイス１１６の幾つかの下位区分がある場合がある。例えば、ハードディスクドライブは、キャッシュサイズ、ドライブＲＰＭ（例えば５，４００、７，２００、１０，０００、及び１５，０００）、待ち行列の長さ、ランダム転送速度、又は逐次転送速度に応じて組織化され得る。
【００１８】
次に図１ｂを参照し、本発明の実施形態による、第２の非ホストベースのデータストレージシステム１２８の構成要素を示すブロック図が示されている。非ホストベースのデータストレージシステム１２８は、ストレージコントローラ１０８がストレージデバイス１１６と共にストレージサブシステム１３２内にあることを除き、非ホストベースのデータストレージシステム１００に似ている。図１ｂに示す実施形態では、ストレージコントローラ１０８が単一のＲＡＩＤコントローラ１０８である。但し、他の実施形態では、ストレージコントローラ１０８が複数のＲＡＩＤコントローラ１０８を表す。
【００１９】
次に図１ｃを参照し、本発明の実施形態による、第３の非ホストベースのデータストレージシステム１３６の構成要素を示すブロック図が示されている。データストレージシステム１３６は、ストレージコントローラ１０８が２つの冗長なストレージコントローラ１０８ａ、１０８ｂを表すことを除き、データストレージシステム１００及び１２８に似ている。一実施形態では、ストレージコントローラ１０８ａ、１０８ｂの一方が故障した場合にホスト１０４がストレージデバイス１１６を引き続き使用できるようにするために、ストレージコントローラ１０８ａ、１０８ｂがアクティブ−アクティブフェイルオーバ（active-active failover）を利用する。コントローラ間メッセージングリンク１４０は、書込みデータをミラーリングし、フェイルオーバ及びフェイルバック操作を同期するために、ストレージコントローラ１０８ａ、１０８ｂ間の通信及びデータ経路を提供する。
【００２０】
次に図２ａを参照し、本発明の実施形態による、第１のホストベースのデータストレージシステム２００の構成要素を示すブロック図が示されている。第１のホストベースのデータストレージシステム２００は、ストレージコントローラ１０８がホストコンピュータ１０４内にあることを除き、図１ａの第１の非ホストベースのストレージシステム１００に似ている。ストレージコントローラ１０８は、ホストコンピュータ１０４のローカルバスを介してインターフェイスし、ローカルバスは、ラピッドＩＯ、ＰＣＩ、ＰＣＩ−Ｘ、又はＰＣＩエクスプレスを含む、ホストコンピュータ１０４のＣＰＵとストレージコントローラ１０８との間の高速伝送用の任意の適切なバスとすることができる。ストレージコントローラ１０８は、ホストコンピュータ１０４のマザーボード上に組み込むことができ、又はホストコンピュータ１０４内の拡張ボード若しくは他の形式のアセンブリとすることができる。
【００２１】
次に図２ｂを参照し、本発明の実施形態による、第２のホストベースのデータストレージシステム２０４の構成要素を示すブロック図が示されている。第２のホストベースのデータストレージシステム２０４は、ストレージサブシステム１２４の機能をホストコンピュータ１０４内に組み込む。データストレージシステム２０４は、高度に統合された独立型のデータストレージシステムを表す。
【００２２】
次に図２ｃを参照し、本発明の実施形態による、第３のホストベースのデータストレージシステム２０８の構成要素を示すブロック図が示されている。第３のホストベースのデータストレージシステム２０８は、第１のホストベースのデータストレージシステム２００に似ているが、組み込まれたストレージコントローラ１０８の代わりにソフトウェアに基づく手法を使用する。ホストコンピュータ１０４とストレージデバイス・バス１２０との間のインターフェイスは、適切なデータ及びコマンドバッファリング機能並びにプロトコル制御及び低レベル誤り処理（low-level error handling）を実現する、ホストバスアダプタ２１２によって提供される。ＣＰＵ２１６はメモリ２２０内のアプリケーション２２４を実行し、メモリ２２０とストレージサブシステム１２４内のストレージデバイス１１６ａ、１１６ｂとの間のデータフローを制御する。
【００２３】
次に図３を参照し、本発明の実施形態による、データストレージシステム３００を示すブロック図が示されている。データストレージシステム３００は、バス又はネットワーク１１２を介してストレージコントローラ１０８に相互接続される１台又は複数台のホストコンピュータ１０４を含む。ホストコンピュータ１０４は、逐次ホスト入出力要求３３２の複数のグループであるホストストリーム３０８を生成する。
【００２４】
ストレージコントローラ１０８は、ＣＰＵ３１２に結合されるメモリ３１６内に記憶されるプログラム命令を実行する、ＣＰＵ又はプロセッサ３１２を含む。ＣＰＵ３１２は、インテル（Ｉｎｔｅｌ）ｘ８６互換プロセッサ、組込みプロセッサ、モバイルプロセッサ、及び／又はＲＩＳＣプロセッサ等、ストレージコントローラ１０８のプログラムを実行するのに適した任意の処理装置を含む。ＣＰＵ３１２は、書替え可能ゲートアレイ（ＦＰＧＡ）、メモリコントローラ、ノースブリッジ装置（North Bridge devices）、及びサウスブリッジ装置（South Bridge devices）のうちの少なくとも一つを含む幾つかの装置を含み得る。
【００２５】
メモリ３１６は、揮発性メモリ３１６、不揮発性メモリ３１６、又は揮発性メモリ及び不揮発性メモリの両方の組合せ３１６の１つ若しくは複数の形態とすることができる。メモリ３１６はファームウェアを含み、そのファームウェアは、本発明のプロセス用のプログラム命令を含む、ＣＰＵ３１２が取り出して実行するプログラム命令を含む。不揮発性メモリ３１６の例には、これだけに限定されないが、フラッシュメモリ、ＳＤ、ＳＳＤ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、ハードディスク、及びＮＯＶＲＡＭが含まれる。揮発性メモリ３１６は、様々なデータ構造及びユーザデータを記憶する。揮発性メモリ３１６の例には、これだけに限定されないが、ＳＲＡＭ、ＤＤＲ  ＲＡＭ、ＤＤＲ２  ＲＡＭ、ＤＤＲ３  ＲＡＭ、Ｚ−ＲＡＭ、ＴＴＲＡＭ、Ａ−ＲＡＭ、ＥＴＡ  ＲＡＭ、及び他の形態の一時メモリが含まれる。
【００２６】
メモリ３１６は、ホストコンピュータ１０４に対して改善されたリード・ライト性能をそれぞれ提供する、リードデータキャッシュ３２４及びライトデータキャッシュ３２８又はライトキャッシュを含む。メモリ３１６は、データストリームメタデータ３２０も含む。データストリームメタデータ３２０は、ホスト入出力要求３３２に関係するパラメータを記憶し、逐次入出力操作を制御するために使用される。
【００２７】
ストレージコントローラ１０８は、１つ又は複数の仮想ディスク（virtual disk：ＶＤｉｓｋ）３４８ａ〜３４８ｎを含むストレージサブシステム１２４、１３２に結合される。各仮想ディスク３４８は、異なるＲＡＩＤボリュームであり、１つ又は複数のストレージデバイスを含む。頻繁にアクセスされるデータは、仮想ディスク３４８からリードデータキャッシュ３２４内に読み取られ、リードデータキャッシュ３２４では、データをホスト読取要求３３２に応答して仮想ディスク３４８から直接提供するよりもはるかに速く提供することができる。書込みデータはライトデータキャッシュ３２８内に最初に記憶され、かかる動作は仮想ディスク３４８に直接送られる書込みよりもはるかに速い。ライトデータキャッシュ３２８は、ＣＥ０  ３５２ａ〜ＣＥｎ  ３５２ｎとして識別される所定数の固定サイズのキャッシュ要素３５２へと分割される。ストレージコントローラ１０８は、ライトデータキャッシュ３２８から、より具体的にはキャッシュ要素３５２から仮想ディスク３４８にストレージデバイス書込み３４４を伝送する。
【００２８】
一部の実施形態では、ストレージコントローラ１０８がタイマ３４０を含む。タイマ３４０は、ＣＰＵ３１２によって制御されるハードウェアのタイマとすることができ、又はＣＰＵ３１２上で実行されるソフトウェアルーチンでも良い。タイマ３４０は、ホスト入出力要求のタイムアウト時間９０８を測定し、以下の説明及び図中で説明される。タイマ３４０は、任意の数のタイマを表すことができ、本発明では全てのホスト入出力要求３３２に全般的に割り当てられた１つのタイマ３４０がある。
【００２９】
ストレージコントローラ１０８は、本発明の範囲又は動作から逸脱することなしに、無数の異なる機能上の構成及びアーキテクチャで機能的に構成され得ることを理解すべきである。
【００３０】
次に図４ａを参照すると、本発明の実施形態による、単一ストレージデバイスのストライプドボリューム４００の構成要素を示すブロック図が示されている。
単一のストレージデバイス１１６は、ストライプドボリューム４００とすることができる。ストレージデバイス１１６は、ハードディスクドライブ、光学ドライブ、テープドライブ、ソリッドステートデバイス、又は他の任意の形態の大容量データストレージデバイスとすることができる。ストライプドボリューム４００は、均等の大きさにされた２つ以上のストライプを含む論理ボリュームである。１つのストレージデバイス１１６上のストライプの部分はチャンクである。
【００３１】
図４ａは、４つのストライプ、つまりストライプＮ  ４０４、ストライプＮ＋１  ４０８、ストライプＮ＋２  ４１２、及びストライプＮ＋３  ４１６を有するストライプドボリューム４００を示す。ストライプＮ  ４０４はチャンクＡ  ４２０を有し、ストライプＮ＋１  ４０８はチャンクＢ  ４２４を有し、ストライプＮ＋２  ４１２はチャンクＣ  ４２８を有し、ストライプＮ＋３  ４１６はチャンクＤ  ４３２を有する。図４ａでは、４つのストライプ４０４、４０８、４１２、及び４１６、並びに４つのチャンク４２０、４２４、４２８、及び４３２を有する単一ストレージデバイスのストライプドボリューム４００を示すが、単一ストレージデバイスのストライプドボリューム４００は、４つのストライプ／チャンク未満、又は４つのストライプ／チャンクよりも多く有しても良いことを理解すべきである。更に、単一ストレージデバイスのストライプドボリューム４００は、単一のストレージデバイス１１６上の使用可能なデータ記憶空間の一部分だけを占有することができ、同じストレージデバイス１１６上には他の単一ストレージデバイスのストライプドボリューム４００があっても良い。仮想ディスク３４８が単一のストレージデバイス１１６である場合、仮想ディスクのストライプサイズは、チャンク４２０、４２４、４２８、又は４３２の大きさである。
【００３２】
次に図４ｂを参照し、本発明の実施形態による、複数ストレージデバイスのストライプドボリューム４３４の構成要素を示すブロック図が示されている。
複数のストレージデバイス１１６又は複数のストレージデバイス１１６の一部を、ストライプドボリューム４３４とすることができる。図４ｂは、３つのストレージデバイス１１６ａ、１１６ｂ、及び１１６ｃ上のストライプドボリューム４３４を示す。ストライプドボリューム４３４は４つのストライプ、つまりストライプＭ  ４３６、ストライプＭ＋１  ４４０、ストライプＭ＋２  ４４４、及びストライプＭ＋３  ４４８を有する。ストライプＭ  ４３６はチャンクＥ  ４５２、チャンクＦ  ４５６、及びチャンクＧ  ４６０を有する。ストライプＭ＋１  ４４０は、チャンクＨ  ４６４、チャンクＩ  ４６８、及びチャンクＪ  ４７２を有する。ストライプＭ＋２  ４４４は、チャンクＫ  ４７６、チャンクＬ  ４８０、及びチャンクＭ  ４８４を有する。ストライプＭ＋３  ４４８は、チャンクＮ  ４８８、チャンクＯ  ４９２、及びチャンクＰ  ４９６を有する。図４ｂでは、４つのストライプ４３６、４４０、４４４、及び４４８、並びに３つのストレージデバイス１１６ａ、１１６ｂ、及び１１６ｃを有する複数のストレージデバイスのストライプドボリューム４３４を示すが、複数のストレージデバイスのストライプドボリューム４３４が、４つのストライプ未満若しくはそれよりも多く、又は３つのストレージデバイス１１６未満若しくはそれよりも多く有しても良いことを理解すべきである。本発明で使用するとき、「ストライプドボリューム４００、４３４」は、単一ストレージデバイスのストライプドボリューム４００又は複数のストレージデバイスのストライプドボリューム４３４である。更に、複数のストレージデバイスのストライプドボリューム４３４は、ストレージデバイス１１６群上で使用可能なデータ記憶空間の一部のみを占有する場合があり、同じストレージデバイス１１６群上に他の複数のストレージデバイスのストライプドボリューム４３４があり得る。仮想ディスク３４８が複数のストレージデバイス１１６である場合、仮想ディスクのストライプサイズは、ストライプ内のチャンクの組み合わさった大きさ、つまり、図４ｂの３つのストレージデバイス１１６の事例では、チャンク４５２＋４５６＋４６０、４６４＋４６８＋４７２、４７６＋４８０＋４８４、又は４８８＋４９２＋４９６である。
【００３３】
次に図５を参照すると、本発明の実施形態による、ライトデータキャッシュ３２８のデータフローを示すブロック図が示されている。ライトデータキャッシュ３２８は、ストレージコントローラ１０８のメモリ３１６の一部である。ライトデータキャッシュ３２８は、ホストバス又はネットワーク１１２を介してホストコンピュータ１０４からホスト入出力書込み要求３３２を受け取り、書込みデータをダーティデータ（dirty data）としてライトデータキャッシュ３２８内に記憶する。ダーティデータは、ストレージデバイス１１６にまだ書き込まれていない、ライトデータキャッシュ３２８内に記憶されたホスト入出力書込み要求３３２の書込みデータである。ホストデータ書込みは、キャッシュのダーティ部分５０８内に記憶され、キャッシュのダーティ部分５０８からストライプドボリューム４００、４３４にストレージデバイス書込み３４４を伝送する待ち条件を待つ。ストレージデバイス書込み３４４は、部分ストライプの書込み又はフルストライプの書込みである。ダーティデータによって占有されていないライトデータキャッシュ３２８の部分は、キャッシュの空き部分５０４であり、ホスト入出力書込み要求３３２の書込みデータを受け取るために使用可能である。
【００３４】
ライトデータキャッシュ３２８内のダーティデータの量を追跡するために、ストレージコントローラ１０８によってダーティウォーターマーク（dirty watermark）５１２が保たれる。ライトデータキャッシュ３２８内でより多くのダーティデータ５０８が蓄積するにつれ、ダーティウォーターマーク５１２がそれに応じて上昇し、ダーティデータ５０８がストレージデバイス１１６にデステージされると、ダーティウォーターマーク５１２がそれに応じて低下する。
【００３５】
ライトデータキャッシュ３２８は、ダーティウォーターマーク最大パーセンテージ５１６又はダーティウォーターマークの最大値も含み、この値は、ライトデータキャッシュ３２８から仮想ディスク３４８にキャッシュ要素３５２をデステージすべきかどうかを判定するために、特定の時点においてダーティウォーターマーク５１２と比較する所定値である。
【００３６】
ホスト入出力書込み要求３３２が受け取られ、ライトデータキャッシュ３２８内に書き込まれると、新たな書込みデータを記憶するのに十分な空間がデータライトキャッシュ３２８内にある限り、キャッシュのダーティ部分５０８がそれに応じて拡大する。キャッシュのダーティ部分５０８が拡大するのと同時に、キャッシュの空き部分５０４が縮小する。同様に、ストレージデバイス書込み３４４がライトデータキャッシュ３２８から仮想ディスク３４８にデータを伝送すると、キャッシュのダーティ部分５０８が縮小し、キャッシュの空き部分５０４がそれに応じて拡大する。
【００３７】
次に図６を参照すると、本発明の実施形態による、３＋１  ＲＡＩＤ５ストライプドボリューム４３４に関する例示的データコンテナ６００が示されている。この３＋１  ＲＡＩＤ５ストライプドボリューム４３４は、ストレージデバイス１１６ａ、ストレージデバイス１１６ｂ、ストレージデバイス１１６ｃ、及びストレージデバイス１１６ｄとして識別される４つのストレージデバイス１１６を含む。この例示的ストライプドボリュームは、ストライプ０からストライプ１３として識別される１４個のストライプ６０４を有する。ストライプドボリューム４３４は、ＲＡＩＤ技術、ストライプドボリュームのサイズ等の制約を受ける任意の数のストレージデバイス１１６又はストライプ６０４を有し得ることを理解すべきである。
【００３８】
単一のストレージデバイス１１６に割り当てられるストライプ６０４の部分はチャンクである。図６の例では、各チャンクが８個の等サイズのキャッシュ要素（ＣＥ）３５２に分割されている。但し、他の実施形態では、各チャンクが８個よりも少ない又は多いキャッシュ要素３５２を有し得る。好ましい実施形態では、キャッシュ要素３５２がそれぞれ１６キロバイトである。他の実施形態では、キャッシュ要素３５２がそれぞれ１６キロバイト未満であり又は１６キロバイトを上回る。各キャッシュ要素３５２は、空６１６、ダーティ６２０、又は有効６２４のいずれかの状態を有することができる。ダーティキャッシュ要素６２０だけが新たな書込みデータを含む。有効なキャッシュ要素６２４は、ストレージデバイス１１６に以前書き込まれた書込みデータを含む。
【００３９】
図６の例では、ストライプ６０４に応じてストレージデバイス１１６のそれぞれにわたりパリティチャンクが循環するＲＡＩＤ５の技法に従い、ストライプドボリューム４３４がマップされる。一実施形態では、パリティチャンク６０８ａがストレージデバイス１１６ｄのストライプ０に割り当てられ、パリティチャンク６０８ｂがストレージデバイス１１６ｃのストライプ１に割り当てられ、その後も同様に続く。
【００４０】
データコンテナ６１２は、新たな書込みデータが受け取られるときにストライプ６０４ごとに割り当てられるデータ構造であり、ストライプ６０４の境界を超えることはない。データコンテナ６１２は、不明、部分的、又は満杯という３つの値のうちの１つを有する状態８０８を含む。データコンテナ６１２が最初に作成されると、データコンテナ６１２は不明の状態８０８を有する。データコンテナ６１２に新たな書込みデータが関連し、１つ又は複数の空のＣＥ６１６が残る場合、データコンテナ６１２は部分的な状態８０８を有する。データコンテナ６１２に新たな書込みデータが関連し、データコンテナ６１２の全てのＣＥ３５２がダーティＣＥ６２０又は有効なＣＥ６２４のいずれかである場合、データコンテナ６１２は満杯の状態８０８を有する。好ましい実施形態では、データコンテナ６１２が逐次的に割り当てられる。しかし他の実施形態では、２つのストライプ６０４が同じデータコンテナ６１２の番号を有さない限り、データコンテナ６１２を任意の順序で割り当てることができる。
【００４１】
ストライプ３は、図６のストライプドボリューム４３４内の書込みデータを受け取った第１のストライプ６０４であり、従ってデータコンテナ０である。ストライプ３の全てのＣＥ３５２がダーティＣＥ６２０であるため、データコンテナ０は満杯の状態８０８を有する。
【００４２】
ストライプ９は、図６のストライプドボリューム４３４内の書込みデータを受け取った第２のストライプ６０４であり、従ってデータコンテナ１である。ストライプ９の全てではないが一部のＣＥ３５２だけがダーティＣＥ６２０又は有効なＣＥ６２４であるため、データコンテナ１は部分的な状態８０８を有する。
【００４３】
ストライプ０は、図６のストライプドボリューム４３４内の書込みデータを受け取った第３のストライプ６０４であり、従ってデータコンテナ２である。ストライプ０の全てではないが一部のＣＥ３５２だけがダーティＣＥ６２０又は有効なＣＥ６２４であるため、データコンテナ２は部分的な状態８０８を有する。
【００４４】
ストライプ５は、図６のストライプドボリューム４３４内の書込みデータを受け取った第４のストライプ６０４であり、従ってデータコンテナ３である。ストライプ５の全てではないが一部のＣＥ３５２だけがダーティＣＥ６２０又は有効なＣＥ６２４であるため、データコンテナ３は部分的な状態８０８を有する。
【００４５】
ストライプ１３は、図６のストライプドボリューム４３４内の書込みデータを受け取った第５のストライプ６０４であり、従ってデータコンテナ４である。ストライプ１３の全てではないが一部のＣＥ３５２だけがダーティＣＥ６２０又は有効なＣＥ６２４であるため、データコンテナ４は部分的な状態８０８を有する。
【００４６】
ストライプ１０は、図６のストライプドボリューム４３４内の書込みデータを受け取った第６のストライプ６０４であり、従ってデータコンテナ５である。ストライプ１０の全てではないが一部のＣＥ３５２だけがダーティＣＥ６２０又は有効なＣＥ６２４であるため、データコンテナ５は部分的な状態８０８を有する。
【００４７】
ストライプ４は、図６のストライプドボリューム４３４内の書込みデータを受け取った第７のストライプ６０４であり、従ってデータコンテナ６である。ストライプ４の全てではないが一部のＣＥ３５２だけがダーティＣＥ６２０又は有効なＣＥ６２４であるため、データコンテナ６は部分的な状態８０８を有する。
【００４８】
ストライプ１２は、図６のストライプドボリューム４３４内の書込みデータを受け取った第８のストライプ６０４であり、従ってデータコンテナ７である。ストライプ１２の全てのＣＥ３５２がダーティＣＥ６２０又は有効なＣＥ６２４であるため、データコンテナ７は満杯の状態８０８を有する。
【００４９】
ストライプ６は、図６のストライプドボリューム４３４内の書込みデータを受け取った第９のストライプ６０４であり、従ってデータコンテナ８である。ストライプ６の全てのＣＥ３５２がダーティＣＥ６２０又は有効なＣＥ６２４であるため、データコンテナ８は満杯の状態８０８を有する。
【００５０】
ストライプ１１は、図６のストライプドボリューム４３４内の書込みデータを受け取った第１０のストライプ６０４であり、従ってデータコンテナ９である。ストライプ１１の全てではないが一部のＣＥ３５２だけがダーティＣＥ６２０又は有効なＣＥ６２４であるため、データコンテナ９は部分的な状態８０８を有する。
【００５１】
ライトデータキャッシュ３２８内では１０個のストライプ６０４のみがダーティＣＥ６２０又は有効なＣＥ６２４を有しているため、１０個のデータコンテナ６１２のみが割り当てられている。ストライプ１、２、７、及び８内の全てのＣＥ３５２は空のＣＥ６１６であるため、それらのストライプ６０４にはデータコンテナ６１２が割り当てられていない。
【００５２】
次に図７ａを参照すると、本発明の実施形態による、フルストライプ書込みパーセンテージ７２４の計算プロセスを示すフローチャートが示されている。フルストライプ書込みパーセンテージ７２４の計算プロセスは、ライトデータキャッシュ３２８からキャッシュ要素３５２をデステージすべきときを決定するために、本発明のプロセス内の様々な時点において引き起こされる。流れはブロック７０４で始まる。
【００５３】
ブロック７０４で、仮想ディスク３４８ごとに、ストレージコントローラ１０８が、部分ストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素７１２、及びフルストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素７１６のカウントをデータストリームメタデータ３２０から得る。流れはブロック７０８に進む。
【００５４】
ブロック７０８で、仮想ディスク３４８ごとに、ストレージコントローラ１０８は、フルストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素７１６のカウントを、仮想ディスクごとのダーティキャッシュ要素又は有効なキャッシュ要素７２０のカウントの和で除算し、その結果に１００を乗算する。仮想ディスクごとのダーティキャッシュ要素又は有効なキャッシュ要素７２０のカウントは、仮想ディスクごとの部分ストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素７１２と、仮想ディスクごとのフルストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素７１６のカウントとの和に等しい。流れはブロック７０８で終わる。
【００５５】
次に図７ｂを参照すると、本発明の実施形態による、フルストライプ書込みパーセンテージ７２４の一例示的計算が示されている。ストレージコントローラ１０８は、フルストライプ書込みパーセンテージ７２４を本発明のプロセス内の様々な時点、とりわけ図１３のブロック１３０８及び図１４のブロック１４２０において計算する。以下に記載する例では、図７ａに示すプロセスのステップを利用する。
【００５６】
ストレージコントローラ１０８は、ライトデータキャッシュ３２８内の全てのキャッシュ要素３５２について、データストリームメタデータ３２０内にキャッシュ要素３５２の統計値を保つ。より詳細には、ストレージコントローラ１０８は、仮想ディスクごとの部分ストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素７１２の現在のカウントと、仮想ディスクごとのフルストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素７１６の現在のカウントとを保つ。従って、ストレージコントローラ１０８が管理する各仮想ディスク３４８は、部分ストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素７１２の固有の現在のカウントと、フルストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素７１６の現在のカウントとを有する。
【００５７】
ストレージコントローラ１０８は、データストリームメタデータ３２０内に、仮想ディスクごとの全てのダーティキャッシュ要素又は有効なキャッシュ要素７２０の現在のカウントも保つ。仮想ディスクごとの全てのダーティキャッシュ要素又は有効なキャッシュ要素７２０の現在のカウントは、仮想ディスクごとの部分ストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素７１２の現在のカウントと、仮想ディスクごとのフルストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素７１６の現在のカウントとの和に等しい。
【００５８】
一部の実施形態では、ストレージコントローラ１０８が、データストリームメタデータ３２０内に仮想ディスクごとのフルストライプ書込みパーセンテージ７２４を保つ。他の実施形態では、ストレージコントローラ１０８が、仮想ディスクごとのフルストライプ書込みパーセンテージ７２４を必要に応じて計算し、仮想ディスクごとのフルストライプ書込みパーセンテージ７２４をデータストリームメタデータ３２０内に特に記憶しない。この例では、所与の仮想ディスク３４８について、部分ストライプに属する２５個のダーティキャッシュ要素又は有効なキャッシュ要素７１２と、フルストライプに属する５０個のダーティキャッシュ要素又は有効なキャッシュ要素７１６とがある。ストレージコントローラ１０８は、部分ストライプに属する２５個のダーティキャッシュ要素又は有効なキャッシュ要素７１２を、フルストライプに属する５０個のダーティキャッシュ要素又は有効なキャッシュ要素７１６に加えることにより、所与の仮想ディスクのダーティキャッシュ要素又は有効なキャッシュ要素７２０の現在のカウントを計算する。従って、所与の仮想ディスク３４８ごとに、７５個のダーティキャッシュ要素又は有効なキャッシュ要素がある。
【００５９】
次に、ストレージコントローラ１０８は、所与の仮想ディスクのフルストライプに属するダーティキャッシュ要素又は有効なキャッシュ要素７１６の現在のカウントを、所与の仮想ディスク内のダーティキャッシュ要素又は有効なキャッシュ要素７２０の現在のカウントで除算することにより、所与の仮想ディスク３４８のフルストライプ書込みパーセンテージ７２４を計算する。従って、５０を７５で除算すると．６６７であり、１００を乗算すると、所与の仮想ディスク３４８のフルストライプ書込みパーセンテージ７２４は６７％である。
【００６０】
次に図８を参照すると、本発明の実施形態による、書込みデータストリームメタデータ３２０のパラメータを示す図が示されている。本発明のストレージコントローラ１０８はメタデータ３２０を３つのレベルで管理し、その３つのレベルとはつまり、キャッシュ要素３５２レベル、データコンテナ６１２レベル、及びデステージ・ストリーム・オブジェクト８２８レベルである。
【００６１】
キャッシュ要素３５２レベルでは、ストレージコントローラ１０８が、ストライプ６０４ごとにメタデータを保つ。とりわけ、ストレージコントローラ１０８は、各キャッシュ要素３５２がストライプ６０４内にあるかどうかに応じて各ストライプ内のキャッシュ要素８１２を識別する。これに関連して「ある」とは、キャッシュ要素３５２がダーティ６２０又は有効６２４のいずれかの状態を有することを意味する。更に、各ストライプ内のキャッシュ要素８１２について、ストレージコントローラ１０８は、どのキャッシュ要素３５２が各ストライプ内のダーティキャッシュ要素８１６（即ちダーティ６２０のキャッシュ要素状態を有する）であるのかを識別する。各ストライプ６０４内の総キャッシュ要素よりも多くのダーティキャッシュ要素はあり得ないため、各ストライプ内のダーティキャッシュ要素８１６の数は常に、各ストライプ内のキャッシュ要素８１２の数以下である。ストレージコントローラ１０８は、特定のキャッシュ要素３５２を識別する現在のキャッシュ要素ポインタ８２０も保つ。
【００６２】
データコンテナ６１２レベルでは、ストレージコントローラ１０８が、キャッシュ要素３５２を特定のデータコンテナ６１２に関連付ける。ストレージコントローラ１０８は、データコンテナの状態８０８を含む、データコンテナ６１２ごとのデータストリームメタデータ３２０も保つ。データコンテナの状態８０８は、各データコンテナ６１２が満杯か部分的に満杯かのいずれかを特定する。データコンテナ６１２は少なくとも１つのキャッシュ要素３５２が所与のストライプ６０４内でダーティ６２０又は有効６２４のいずれかである場合にのみ確立され、チャンク内の全てのキャッシュ要素３５２が空６１６の状態を有する場合、データコンテナ６１２は確立されないことに留意すべきである。現在のキャッシュ要素ポインタ８２０は特定のキャッシュ要素３５２を識別するため、ポインタ８２０は特定のデータコンテナ６１２も識別する。例えば、現在のキャッシュ要素ポインタ８２０は、データコンテナＣを現在のデータコンテナ８２４として識別する。
【００６３】
デステージ・ストリーム・オブジェクト８２８レベルでは、ストレージコントローラ１０８が満杯のデータコンテナ６１２を識別する。満杯のデータコンテナ６１２とは、所与のストライプ６０４内の全てのキャッシュ要素３５２がダーティ６２０又は有効６２４のいずれかであるデータコンテナ６１２である。所与のストライプ６０４内の少なくとも１つのキャッシュ要素３５２が空か欠落している場合、対応するデータコンテナ６１２は満杯ではない。ストレージコントローラ１０８は更に、デステージ・ストリーム・オブジェクト８２８が論理ブロックアドレス（ＬＢＡ）の点で直接隣接する場合、デステージ・ストリーム・オブジェクト８２８をより大きいデステージ・ストリーム・オブジェクト８２８へと合体させる。図８では、データコンテナ６１２「Ｅ」、「Ｆ」、及び「Ｇ」を、それぞれ５個のダーティキャッシュ要素６２０を有する満杯のデータコンテナ６１２として示す。従って、ストレージコントローラ１０８は、Ｅ、Ｆ、及びＧを、１５個のキャッシュ要素３５２を含む１つの大きいデステージ・ストリーム・オブジェクト８３６へと合体させる。満杯のデータコンテナ６１２がデステージストリーム内に入ると、ストレージコントローラ１０８は、最も小さいデステージ・ストリーム・オブジェクト８３２及び最も大きいデステージ・ストリーム・オブジェクト８３６の両方を識別する。図８に示す例では、データコンテナＡ  ６１２が、５個のキャッシュ要素３５２を有する最も小さいデステージ・ストリーム・オブジェクト８３２であり、データコンテナＥ／Ｆ／Ｇ  ６１２が、１５個のキャッシュ要素３５２を有する最も大きいデステージ・ストリーム・オブジェクト８３６である。
【００６４】
ストレージコントローラ１０８は、デステージ・ストリーム・グラジェント８４０も、仮想ディスク３４８ごとにデータストリームメタデータ３２０内に保つ。デステージ・ストリーム・グラジェント８４０は、最も大きいデステージ・ストリーム・オブジェクト８３６と最も小さいデステージ・ストリーム・オブジェクト８３２との差であり、最も大きいデステージ・ストリーム・オブジェクト８３６は、合体済みのデステージ・ストリーム・オブジェクト８２８を含む。従って図８の例では、デステージ・ストリーム・グラジェント８４０は１５−５、即ち１０個のキャッシュ要素３５２に等しい。
【００６５】
ストレージコントローラ１０８は、ストライプ６０４、キャッシュ要素３５２、データコンテナ６１２、及びデステージ・ストリーム・オブジェクト８２８を、低いＬＢＡから高いＬＢＡに順に管理する。更に、ストレージコントローラ１０８は、図８のメタデータを仮想ディスク３４８ごとに独立に管理することにも留意すべきである。
【００６６】
次に図９ａを参照すると、本発明の実施形態による、データストリームのグローバルメタデータ３２０ａを示す図が示されている。グローバルメタデータ３２０ａとは、ストレージコントローラ１０８によって制御される全ての仮想ディスク３４８及びストレージデバイス１１６にわたって使用されるメタデータである。
【００６７】
データストリームのグローバルメタデータ３２０ａは、ダーティウォーターマークパーセンテージ５１２及びダーティウォーターマーク最大パーセンテージ５１６を含む。ダーティウォーターマークパーセンテージ５１２及びダーティウォーターマーク最大パーセンテージ５１６については、図５に関してより詳細に説明した。
【００６８】
データストリームのグローバルメタデータ３２０ａは、フルストライプ書込みアフィニティ値９０４（full stripe write affinity value）を含む。フルストライプ書込みアフィニティ値９０４は、ストレージコントローラ１０８がライトデータキャッシュ３２８からフルストライプの書込みを発行することのみを選ぶ閾値である。この値は経験的試験によって最適に決められ、ホストデータ書込み要求３３２の頻度及び参照の局所性、ライトデータキャッシュ３２８のサイズ、並びにライトデータキャッシュ３２８から部分ストライプ又はフルストライプ８０８をデステージするのにかかる時間に依存する。好ましい実施形態では、フルストライプ書込みアフィニティ値９０４が５０％である。別の実施形態では、フルストライプ書込みアフィニティ値９０４が６０％である。しかし、他の実施形態では、フルストライプ書込みアフィニティ値９０４が５０％でも６０％でもない。
【００６９】
データストリームのグローバルメタデータ３２０ａは、ホスト書込み要求のタイムアウト時間９０８も含む。ホスト書込み要求のタイムアウト時間９０８は、キャッシュ要素３５２をライトデータキャッシュ３２８からデステージすべきかどうかを判定するための条件の１つとして使用される所定時間である。ホスト書込み要求のタイムアウト時間９０８については、図１１に関してより詳細に説明する。
【００７０】
データストリームのグローバルメタデータ３２０ａは、アクティブ・デステージ・カウントの最大値９１２を更に含み、この最大値９１２は、全ての仮想ディスク３４８についてライトデータキャッシュ３２８からデステージすることができるデステージ・ストリーム・オブジェクト８２８の最大数である。
【００７１】
最後に、データストリームのグローバルメタデータ３２０ａは、デステージ・ストリーム・グラジェント閾値９１６を更に含み、この閾値９１６は、現在のキャッシュ要素ポインタ８２０によって識別される現在のキャッシュ要素３５２以外のどのキャッシュ要素３５２が、ライトデータキャッシュ３２８からデステージするのにより良いキャッシュ要素３５２であるのかを判定するために、デステージ・ストリーム・グラジェント８４０と比較する所定値である。デステージ・ストリーム・グラジェント閾値９１６については、図１４に関してより詳細に説明する。
【００７２】
次に図９ｂを参照すると、本発明の実施形態による、データストリームの仮想ディスクメタデータ３２０ｂを示す図が示されている。データストリームの仮想ディスクメタデータ３２０ｂは、ストレージコントローラ１０８によって制御されるありとあらゆる仮想ディスク３４８ごとに独立に管理される。従って、ストレージコントローラ１０８は、第１の仮想ディスク３４８ａに関するデータストリームの仮想ディスクメタデータ３２０ｂを、第２の仮想ディスク３４８ｂ又は他の仮想ディスク３４８ｎに関するデータストリームの仮想ディスクメタデータ３２０ｂとは独立に管理する。
【００７３】
データストリームの仮想ディスクメタデータ３２０ｂは、仮想ディスクごとの部分ストライプに属するダーティキャッシュ要素（ダーティＣＥ）７１２、仮想ディスクごとのフルストライプに属するダーティキャッシュ要素（ダーティＣＥ）７１６、仮想ディスクごとのダーティキャッシュ要素（ダーティＣＥ）７２０、及びフルストライプ書込みパーセンテージ７２４の全てを仮想ディスク３４８ごとに含む。これらのもののそれぞれについては、図７ａ及び図７ｂに関してより詳細に説明した。
【００７４】
データストリームの仮想ディスクメタデータ３２０ｂは、現在のキャッシュ要素ポインタ（現在のＣＥポインタ）８２０、現在のデータコンテナ８２４、最も小さいデステージ・ストリーム・オブジェクト８３２、最も大きいデステージ・ストリーム・オブジェクト８３６、及びデステージ・ストリーム・グラジェント８４０も含む。これらのメタデータ３２０ｂのパラメータのそれぞれについては、図８に関してより詳細に説明した。
【００７５】
データストリームの仮想ディスクメタデータ３２０ｂは、各仮想ディスク３４８内の各データコンテナ６１２に関係するメタデータを更に含む。データコンテナ６１２ごとに、データコンテナ６１２が満杯のデータコンテナ６１２か部分的に満杯のデータコンテナ６１２かをデータコンテナの状態８０８が規定する。データコンテナの総ＣＥカウント８１２とは、ダーティキャッシュ要素６２０並びに有効なキャッシュ要素６２４の両方を含む、各データコンテナ６１２内のキャッシュ要素３５２の数である。データコンテナのダーティキャッシュ要素のカウント８１６とは、各データコンテナ６１２内のダーティキャッシュ要素６２０の数である。
【００７６】
最後に、データストリームの仮想ディスクメタデータ３２０ｂは、仮想ディスク３４８ごとのアクティブ・デステージ・カウント９２０も含む。各アクティブ・デステージ・カウント９２０は、ストレージコントローラ１０８が対応する仮想ディスク３４８にデステージしたオブジェクト８２８の現在の数を明示する。
【００７７】
次に図１０を参照すると、本発明の実施形態による、データストリームメタデータ３２０の初期化プロセスを示すフローチャートが示されている。メタデータ３２０の初期化は、ストレージコントローラ１０８の電源投入時に、及び具体的に指定される他の時点において行われる。流れはブロック１００４で始まる。
【００７８】
ブロック１００４で、ストレージコントローラ１０８が、全ての仮想ディスクごとのメタデータ３２０ｂのパラメータを初期化する。仮想ディスクごとのメタデータ３２０ｂのパラメータについては、図９ｂに関してより詳細に説明する。流れはブロック１００８に進む。
【００７９】
ブロック１００８で、ストレージコントローラ１０８は、全てのキャッシュ要素３５２及びデータコンテナ６１２を初期化する。データコンテナ６１２がまだ確立されていない場合、キャッシュ要素３５２及びデータコンテナ６１２はまだ存在しない。キャッシュ要素３５２及びデータコンテナ６１２が電源サイクル事象の前に存在していた場合、ストレージコントローラ１０８は、電源サイクルの直前の状態に両方を復元する。流れはブロック１００８で終わる。
【００８０】
次に図１１を参照すると、本発明の実施形態による、ストリームデステージ開始プロセスを示すフローチャートが示されている。流れは、ブロック１１０４、１１１６、又は判定ブロック１１２０のうちの１つで始まる。
【００８１】
ブロック１１０４で、ストレージコントローラ１０８が、ライトデータキャッシュ３２８から仮想ディスク３４８への１つ又は複数のストライプ６０４のデステージングを完了する。流れはブロック１１０８に進む。
【００８２】
ブロック１１０８で、ストレージコントローラ１０８は、対応する仮想ディスク３４８のアクティブ・デステージ・カウント９２０をデクリメントする。流れは判定ブロック１１１２に進む。
【００８３】
判定ブロック１１１２で、ストレージコントローラ１０８は、対応する仮想ディスク３４８のアクティブ・デステージ・カウント９２０が、実際のデステージカウントの最大値９１２を下回るかどうかを判定する。対応する仮想ディスク３４８のアクティブ・デステージ・カウント９２０が実際のデステージカウントの最大値９１２を下回る場合、流れは図１２の判定ブロック１２０４に進む。対応する仮想ディスク３４８のアクティブ・デステージ・カウント９２０が実際のデステージカウントの最大値９１２以上の場合、流れは終わる。
【００８４】
ブロック１１１６で、ストレージコントローラ１０８は、ホスト入出力書込み要求３３２が完了していると判定する。従って、ホスト入出力書込み要求３３２に対応する書込みデータが、仮想ディスク３４８に書き込まれている。流れは判定ブロック１１１２に進む。
【００８５】
判定ブロック１１２０で、ストレージコントローラ１０８は、ホスト入出力書込み要求３３２が、ホスト入出力書込み要求のタイムアウト時間９０８を上回る間受け取られているかどうかを判定する。ホスト入出力書込み要求３３２がホスト入出力書込み要求のタイムアウト時間９０８を上回る間受け取られている場合、流れは判定ブロック１１１２に進む。ホスト入出力書込み要求３３２がホスト入出力書込み要求のタイムアウト時間９０８を上回る間受け取られていない場合、流れは終わる。
【００８６】
次に図１２を参照すると、本発明の実施形態による、主要プロセスを示すフローチャートが示されている。図示のプロセスは、図１１の判定ブロック１１１２から続く。流れは判定ブロック１２０４で始まる。
【００８７】
判定ブロック１２０４で、ストレージコントローラ１０８は、ダーティウォーターマークパーセンテージ５１２が、ダーティウォーターマーク最大パーセンテージ５１６を上回るかどうかを判定する。ダーティウォーターマークパーセンテージ５１２が、ダーティウォーターマーク最大パーセンテージ５１６を上回る場合、流れは判定ブロック１２０８に進む。ダーティウォーターマークパーセンテージ５１２が、ダーティウォーターマーク最大パーセンテージ５１６を以下の場合、流れは終わる。
【００８８】
判定ブロック１２０８で、ストレージコントローラ１０８は、現在のキャッシュ要素３５２がデステージするのに効率的かどうかを判定する。現在のキャッシュ要素３５２は、現在のキャッシュ要素ポインタ８２０によって識別される。判定ブロック１２０８については、図１３のプロセスの中でより詳細に示す。現在のキャッシュ要素３５２がデステージするのに効率的である場合、流れは判定ブロック１２１６に進む。現在のキャッシュ要素３５２がデステージするのに効率的ではない場合、流れはブロック１２１２に進む。
【００８９】
ブロック１２１２で、ストレージコントローラ１０８は、ライトデータキャッシュ３２８からデステージするのにより良いキャッシュ要素３５２を識別する。ブロック１２１２については、図１４のプロセスの中でより詳細に示す。流れは判定ブロック１２１６に進む。
【００９０】
判定ブロック１２１６で、ストレージコントローラ１０８は、現在のデータコンテナ８２４が満杯かどうかを判定する。現在のデータコンテナ８２４は、現在のキャッシュ要素ポインタ８２０によって識別されるキャッシュ要素３５２を含むデータコンテナ６１２である。データコンテナ６１２の全てのキャッシュ要素３５２がライトデータキャッシュ３２８内にあり、キャッシュ要素３５２のそれぞれがダーティ６２０又は有効６２４のいずれかの状態を有する場合、データコンテナ６１２は満杯である。現在のデータコンテナ８２４が満杯である場合、流れはブロック１２２０に進む。現在のデータコンテナ８２４が満杯ではない場合、流れはブロック１２２４及び１２２８に進む。
【００９１】
ブロック１２２０で、ストレージコントローラ１０８は、デステージストリーム８２８から満杯且つ現在のデータコンテナ８２４を除去する。流れはブロック１２２４及び１２２８に進む。
【００９２】
ブロック１２２４で、ストレージコントローラ１０８は、現在のデータコンテナ８２４を対応する仮想ディスク３４８にデステージし、対応する仮想ディスク３４８のアクティブ・デステージ・カウント９２０をインクリメントする。流れはブロック１２３２に進む。
【００９３】
ブロック１２２８で、ストレージコントローラ１０８は、仮想ディスクメタデータ３２０ｂ内のデータコンテナ６１２一覧から現在のデータコンテナ８２４を除去する。流れはブロック１２３２に進む。
【００９４】
ブロック１２３２で、ストレージコントローラ１０８は、次のダーティキャッシュ要素６２０をＬＢＡによって識別する。識別した次のダーティキャッシュ要素６２０を反映するために現在のＣＥポインタ８２０を更新し、現在のデータコンテナ８２４は以前と異なるデータコンテナ６１２であり得る。流れは判定ブロック１２３６に進む。
【００９５】
判定ブロック１２３６で、ストレージコントローラ１０８は、対応する仮想ディスク３４８のアクティブ・デステージ・カウント９２０が、実際のデステージカウントの最大値９１２を下回るかどうかを判定する。対応する仮想ディスク３４８のアクティブ・デステージ・カウント９２０が実際のデステージカウントの最大値９１２を下回る場合、流れは図１２の判定ブロック１２０４に進み、次のキャッシュ要素３５２のデステージを試みる。対応する仮想ディスク３４８のアクティブ・デステージ・カウント９２０が実際のデステージカウントの最大値９１２以上の場合、流れは終わる。
【００９６】
次に図１３を参照すると、本発明の実施形態による、現在のキャッシュ要素３５２がデステージするのに効率的かどうかを判定するためのプロセスを示すフローチャートが示されている。図１３に示すプロセスは、図１２の判定ブロック１２０８に対応する。流れは判定ブロック１３０４で始まる。
【００９７】
判定ブロック１３０４で、ストレージコントローラ１０８が、現在のデータコンテナ８２４が満杯かどうかを判定する。現在のデータコンテナ８２４は、現在のキャッシュ要素ポインタ８２０によって識別されるキャッシュ要素３５２を含むデータコンテナ６１２である。データコンテナ６１２の全てのキャッシュ要素３５２がライトデータキャッシュ３２８内にあり、キャッシュ要素３５２のそれぞれがダーティ６２０又は有効６２４のいずれかの状態を有する場合、データコンテナ６１２は満杯である。現在のデータコンテナ８２４が満杯である場合、流れはブロック１３１６に進む。現在のデータコンテナ８２４が満杯ではない場合、流れは判定ブロック１３０８に進む。
【００９８】
判定ブロック１３０８で、ストレージコントローラ１０８は、対応する仮想ディスク３４８のフルストライプ書込みパーセンテージ７２４が、フルストライプ書込みアフィニティ値９０４を上回るかどうかを判定する。別の実施形態では、ストレージコントローラ１０８は、対応する仮想ディスク３４８のフルストライプ書込みパーセンテージ７２４が、フルストライプ書込みアフィニティ値９０４以上かどうかを判定する。フルストライプ書込みアフィニティ値９０４は、ストレージコントローラ１０８がライトデータキャッシュ３２８からフルストライプの書込みを発行することのみを選ぶ閾値である。この値は経験的試験によって最適に決められ、ホスト入出力書込み要求３３２の頻度及び参照の局所性、ライトデータキャッシュ３２８のサイズ、並びにライトデータキャッシュ３２８から部分ストライプ又はフルストライプ６０４をデステージするのにかかる時間に依存する。好ましい実施形態では、フルストライプ書込みアフィニティ値９０４が５０％である。別の実施形態では、フルストライプ書込みアフィニティ値９０４が６０％である。しかし、他の実施形態では、フルストライプ書込みアフィニティ値９０４が５０％でも６０％でもない。現在の仮想ディスク３４８のフルストライプ書込みパーセンテージ７２４がフルストライプ書込みアフィニティ値９０４以上である場合、流れはブロック１３１２に進む。フルストライプ書込みパーセンテージ７２４がフルストライプ書込みアフィニティ値９０４未満の場合、流れはブロック１３１６に進む。
【００９９】
ブロック１３１２で、ストレージコントローラ１０８は、現在のキャッシュ要素３５２をデステージするのに効率的ではないと特定する。現在のキャッシュ要素３５２は、現在のＣＥポインタ８２０によって識別されるキャッシュ要素３５２である。流れはブロック１３１２で終わり、従って図１２のブロック１２１２に制御権を返す。
【０１００】
ブロック１３１６で、ストレージコントローラ１０８は、現在のキャッシュ要素３５２をデステージするのに効率的であると特定する。流れはブロック１３１６で終わり、従って図１２の判定ブロック１２１６に制御権を返す。
【０１０１】
次に図１４を参照すると、本発明の実施形態による、デステージするのにより良いキャッシュ要素３５２を識別するプロセスを示すフローチャートが示されている。図１４に示すプロセスは、図１２のブロック１２１２に対応する。流れはブロック１４０４で始まる。
【０１０２】
ブロック１４０４で、ストレージコントローラ１０８が、デステージ・ストリーム・グラジェント８４０を求める。デステージ・ストリーム・グラジェント８４０は、最も大きいデステージ・ストリーム・オブジェクト８３６と最も小さいデステージ・ストリーム・オブジェクト８３２との差である。デステージ・ストリーム・グラジェント８４０を求めるプロセスについては、図１５に関してより詳細に示す。流れは判定ブロック１４０８に進む。
【０１０３】
判定ブロック１４０８で、ストレージコントローラ１０８は、デステージ・ストリーム・グラジェント８４０がデステージ・ストリーム・グラジェント閾値９１６を上回るかどうかを判定する。デステージ・ストリーム・グラジェント８４０がデステージ・ストリーム・グラジェント閾値９１６を上回る場合、流れはブロック１４１２に進む。デステージ・ストリーム・グラジェント８４０がデステージ・ストリーム・グラジェント閾値９１６以下の場合、流れは判定ブロック１４２０に進む。
【０１０４】
ブロック１４１２で、ストレージコントローラ１０８が、最も大きいデステージ・ストリーム・オブジェクト８３６を識別している。最も大きいデステージ・ストリーム・オブジェクト８３６とは、最大数のキャッシュ要素３５２を含むデステージ・ストリーム・オブジェクト８２８である。図８の例では、最も大きいデステージ・ストリーム・オブジェクト８３６が１５個のキャッシュ要素３５２を有する。流れはブロック１４１６に進む。
【０１０５】
ブロック１４１６で、ストレージコントローラ１０８は、最も低い論理ブロックアドレス（ＬＢＡ）を有する最も大きいデステージ・ストリーム・オブジェクト８３６内のキャッシュ要素３５２を、デステージするのにより良いキャッシュ要素３５２として識別する。従って図８の例では、より良いキャッシュ要素は、最も大きいデステージ・ストリーム・オブジェクト８３６の最も左側のキャッシュ要素３５２、即ちデータコンテナＥ  ６１２の最も左側のキャッシュ要素であろう。流れはブロック１４１６で終わり、図１２の判定ブロック１２１６に制御権を返す。
【０１０６】
判定ブロック１４２０で、ストレージコントローラ１０８は、対応する仮想ディスク３４８のフルストライプ書込みパーセンテージ７２４が、フルストライプ書込みアフィニティ値９０４を上回るかどうかを判定する。別の実施形態では、ストレージコントローラ１０８は、対応する仮想ディスク３４８のフルストライプ書込みパーセンテージ７２４が、フルストライプ書込みアフィニティ値９０４以上かどうかを判定する。フルストライプ書込みアフィニティ値９０４は、ストレージコントローラ１０８がライトデータキャッシュ３２８からフルストライプの書込みを発行することのみを選ぶ閾値である。この値は経験的試験によって最適に決められ、ホスト入出力書込み要求３３２の頻度及び参照の局所性、ライトデータキャッシュ３２８のサイズ、並びにライトデータキャッシュ３２８から部分ストライプ又はフルストライプ６０４をデステージするのにかかる時間に依存する。好ましい実施形態では、フルストライプ書込みアフィニティ値９０４が５０％である。別の実施形態では、フルストライプ書込みアフィニティ値９０４が６０％である。しかし、他の実施形態では、フルストライプ書込みアフィニティ値９０４が５０％でも６０％でもない。現在の仮想ディスク３４８のフルストライプ書込みパーセンテージ７２４がフルストライプ書込みアフィニティ値９０４以上である場合、流れはブロック１４２８に進む。フルストライプ書込みパーセンテージ７２４がフルストライプ書込みアフィニティ値９０４未満の場合、流れはブロック１４２４に進む。
【０１０７】
ブロック１４２４で、ストレージコントローラ１０８は、現在のキャッシュ要素３５２を、デステージするのにより良いキャッシュ要素３５２として識別する。現在のキャッシュ要素３５２は、現在のキャッシュ要素ポインタ８２０によって識別される。流れはブロック１４２４で終わり、図１２の判定ブロック１２１６に制御権を返す。
【０１０８】
ブロック１４２８で、ストレージコントローラ１０８は、次の満杯のデータコンテナ６１２を論理ブロックアドレス（ＬＢＡ）によって識別する。次の満杯のデータコンテナ６１２とは、次に高い開始論理ブロックアドレス（ＬＢＡ）を有するデステージストリーム８２８内のデータコンテナ６１２である。流れはブロック１４３２に進む。
【０１０９】
ブロック１４３２で、ストレージコントローラ１０８は、次の満杯のデータコンテナ６１２内の最も低い論理ブロックアドレスを有するキャッシュ要素３５２を、デステージするのにより良いキャッシュ要素３５２として識別する。ストレージコントローラ１０８は、次の満杯のデータコンテナ６１２内の最も低い論理ブロックアドレスを有するキャッシュ要素３５２を指すように、現在のキャッシュ要素ポインタ８２０を変更する。流れはブロック１４３２で終わり、図１２の判定ブロック１２１６に制御権を返す。
【０１１０】
次に図１５を参照すると、本発明の実施形態による、対応する仮想ディスク３４８のデステージ・ストリーム・グラジェント８４０を求めるプロセスを示すフローチャートが示されている。図１５のステップは、図１４のブロック１４０４に対応する。流れはブロック１５０４で始まる。
【０１１１】
ブロック１５０４で、ストレージコントローラ１０８が、デステージストリーム８２８内の最も大きいデステージ・ストリーム・オブジェクト８３６を識別する。図８の例では、その最も大きいデステージ・ストリーム・オブジェクトは、１５個のキャッシュ要素（ＣＥ）３５２を含むデステージ・ストリーム・オブジェクト８２８であろう。流れはブロック１５０８に進む。
【０１１２】
ブロック１５０８で、ストレージコントローラ１０８は、デステージストリーム８２８内の最も小さいデステージ・ストリーム・オブジェクト８３２を識別する。図８の例では、その最も小さいデステージ・ストリーム・オブジェクトは、５個のキャッシュ要素（ＣＥ）３５２を含むデステージ・ストリーム・オブジェクト８２８であろう。流れはブロック１５１２に進む。
【０１１３】
ブロック１５１２で、ストレージコントローラ１０８は、最も大きいデステージ・ストリーム・オブジェクト８３６から最も小さいデステージ・ストリーム・オブジェクト８３２を減算して、デステージ・ストリーム・グラジェント８４０を得る。図８の例では、対応する仮想ディスク３４８のデステージ・ストリーム・グラジェント８４０は１５−５、即ち１０個のキャッシュ要素３５２である。流れはブロック１５１２で終わり、従って図１４の判定ブロック１４０８に制御権を返す。
【０１１４】
最後に、添付の特許請求の範囲によって定める本発明の趣旨及び範囲から逸脱することなしに、本発明の同一目的を実行するための他の構造を設計し又は修正するための基礎として、開示した概念及び具体的実施形態を容易に使用できることを当業者は理解されよう。
【符号の説明】
【０１１５】
１０４…ホストコンピュータ
１０８…ストレージコントローラ
１１６…ストレージデバイス
３１２…ＣＰＵ
３１６…メモリ
３２４…リードデータキャッシュ
３２８…ライトデータキャッシュ
３３２…ホスト入出力要求
３４４…ストレージデバイス書込み
３４８…仮想ディスク
３４８ａ〜ｎ…仮想ディスク
３５２…キャッシュ要素
５０８…ダーティ部分
５１２…ダーティウォーターマークパーセンテージ
５１６…ダーティウォーターマーク最大パーセンテージ
６００…データコンテナ
６０４…ストライプ
６２０…ダーティキャッシュ要素
６２４…有効なキャッシュ要素
【図１ａ】
2016045935.tif 000003
【図１ｂ】
2016045935.tif 000004
【図１ｃ】
2016045935.tif 000005
【図２ａ】
2016045935.tif 000006
【図２ｂ】
2016045935.tif 000007
【図２ｃ】
2016045935.tif 000008
【図３】
2016045935.tif 000009
【図４ａ】
2016045935.tif 000010
【図４ｂ】
2016045935.tif 000011
【図５】
2016045935.tif 000012
【図６】
2016045935.tif 000013
【図７ａ】
2016045935.tif 000014
【図７ｂ】
2016045935.tif 000015
【図８】
2016045935.tif 000016
【図９ａ】
2016045935.tif 000017
【図９ｂ】
2016045935.tif 000018
【図１０】
2016045935.tif 000019
【図１１】
2016045935.tif 000020
【図１２】
2016045935.tif 000021
【図１３】
2016045935.tif 000022
【図１４】
2016045935.tif 000023
【図１５】
2016045935.tif 000024