(57)【要約】【課題】データストレージサブシステムにおけるキャッシングのための方法およびシステムを提供する。【解決手段】ホストからのキャッシュ可能な書込み要求に応答して、物理キャッシュ位置がフリーリストから割当てられ、対応する論理アドレスに対する何らかの読出し要求が待ち状態であるか否かに関係なく、それらのキャッシュ位置にデータブロックが書込まれる。データが書込まれた後、対応する論理アドレスに対して何らかの読出し要求が待ち状態であるか否かに関係なく、メタデータが更新されてキャッシュ位置が論理アドレスに関連付けられる。有効データを有する各キャッシュ位置に対して待ち状態であるデータアクセス要求のカウントが維持される。キャッシュ位置に対して待ち状態のデータアクセス要求が無いことをカウントが示す場合、キャッシュ位置は単にフリーリストに戻される。【選択図】図１
2017151982.tif 000002
【特許請求の範囲】
【請求項１】
データストレージサブシステムにおけるキャッシングのための方法であって、
１つ以上の論理アドレスと、前記１つ以上の論理アドレスに対応して書込まれる１つ以上のデータブロックとを示す書込み要求を受信するステップと、
前記書込み要求に応答して、キャッシュメモリ内の１つ以上の物理位置をフリーリストから割当てるステップと、
前記１つ以上の論理アドレスに対する何らかの読出し要求が待ち状態であるか否かに関係なく、前記１つ以上のデータブロックを前記１つ以上の物理位置に格納するステップと、
前記１つ以上のデータブロックが前記１つ以上の物理位置に格納された後、前記１つ以上の論理アドレスに対して何らかの読出し要求が待ち状態であるか否かに関係なく、メタデータを更新し、前記１つ以上の物理位置を前記１つ以上の論理アドレスに関連付けるステップと、
有効データを有する、前記キャッシュメモリ内の各物理位置に対して待ち状態である、読出し要求を含むデータアクセス要求のカウントを維持するステップと、
前記物理位置に対して待ち状態のデータアクセス要求が無いことを前記カウントが示す場合、物理位置を前記フリーリストに戻すステップとを含む、方法。
【請求項２】
前記１つ以上の物理位置を割当てるステップは、前記キャッシュメモリ内の前記１つ以上の物理位置の順序に関係なく前記１つ以上の物理位置を前記フリーリストから選択するステップを含む、請求項１に記載の方法。
【請求項３】
前記１つ以上の物理位置を割当てるステップは、前記書込み要求に関連付けられた前記１つ以上の論理アドレスに関係なく前記１つ以上の物理位置を前記フリーリストから選択するステップを含む、請求項１に記載の方法。
【請求項４】
前記メタデータを更新するステップは、
１つ以上のデータ構造内で前記１つ以上の物理位置を識別する識別情報を格納するステップと、
前記１つ以上のデータ構造へのポインタを含むように、ハッシュテーブル内のエントリを更新するステップとを含む、請求項１に記載の方法。
【請求項５】
前記１つ以上の物理位置を割当てるステップは、前記１つ以上の物理位置を識別する情報を含むスキャッタギャザーリスト（ＳＧＬ）を生成するステップを含み、
前記１つ以上のデータブロックを前記１つ以上の物理位置に格納するステップは、
前記ＳＧＬをダイレクトメモリアクセス（ＤＭＡ）エンジンに提供するステップと、
前記ＳＧＬに応答して、前記ＤＭＡエンジンが、ホストインターフェイスから前記キャッシュメモリへ前記１つ以上のデータブロックを転送するステップとを含む、請求項４に記載の方法。
【請求項６】
前記１つ以上のデータ構造は連結リストを定義する、請求項４に記載の方法。
【請求項７】
前記メタデータを更新するステップは、
論理アドレスに応答してハッシュテーブルスロットを決定するステップと、
前記ハッシュテーブルスロット内の複数のエントリのうちのいずれかが前記論理アドレスを識別するか否かを判断するステップとを含む、請求項４に記載の方法。
【請求項８】
前記１つ以上のデータ構造は連結リストを定義し、
前記方法はさらに、前記ハッシュテーブルスロット内の前記エントリのうちいずれも前記論理アドレスを識別しないと判断することに応答して、前記連結リストに新たなデータ構造を追加するステップを含む、請求項７に記載の方法。
【請求項９】
前記連結リスト内の前記新たなデータ構造を識別する情報を、最後に使用されてから最も長い時間が経過したダーティリストに追加するステップをさらに含む、請求項８に記載の方法。
【請求項１０】
前記１つ以上のデータ構造の各々は複数のサブ構造を含み、
各サブ構造は、前記キャッシュメモリ内の前記物理位置のうちの１つを識別する前記識別情報を格納するように構成され、
各サブ構造はさらに、前記識別情報により識別された前記物理位置に対して待ち状態の前記データアクセス要求のカウントを格納するように構成されている、請求項４に記載の方法。
【請求項１１】
各サブ構造はさらに、前記識別情報により識別された前記物理位置がダーティデータを含むか否かを示すダーティインジケータを格納するように構成されている、請求項１０に記載の方法。
【請求項１２】
データストレージサブシステムにおけるキャッシングのためのシステムであって、
キャッシュメモリと、
処理システムとを備え、前記処理システムは、
１つ以上の論理アドレスと、前記１つ以上の論理アドレスに対応して書込まれる１つ以上のデータブロックとを示す書込み要求を受信し、
前記書込み要求に応答して、キャッシュメモリ内の１つ以上の物理位置をフリーリストから割当て、
前記１つ以上の論理アドレスに対する何らかの読出し要求が待ち状態であるか否かに関係なく、前記１つ以上のデータブロックを前記１つ以上の物理位置に格納し、
前記１つ以上のデータブロックが前記１つ以上の物理位置に格納された後、前記１つ以上の論理アドレスに対して何らかの読出し要求が待ち状態であるか否かに関係なく、メタデータを更新し、前記１つ以上の物理位置を前記１つ以上の論理アドレスに関連付け、
有効データを有する、前記キャッシュメモリ内の各物理位置に対して待ち状態である、読出し要求を含むデータアクセス要求のカウントを維持し、
前記物理位置に対して待ち状態のデータアクセス要求が無いことを前記カウントが示す場合、物理位置を前記フリーリストに戻すように構成されている、システム。
【請求項１３】
前記処理システムは、前記キャッシュメモリ内の前記１つ以上の物理位置の順序に関係なく前記１つ以上の物理位置を前記フリーリストから選択するように構成されることによって、前記１つ以上の物理位置を割当てるように構成されている、請求項１２に記載のシステム。
【請求項１４】
前記処理システムは、前記書込み要求に関連付けられた前記論理アドレスに関係なく前記１つ以上の物理位置を前記フリーリストから選択するように構成されることによって、前記１つ以上の物理位置を割当てるように構成されている、請求項１２に記載のシステム。
【請求項１５】
前記処理システムは、
１つ以上のデータ構造内で前記１つ以上の物理位置を識別する識別情報を格納するように構成されることによって、および、
前記１つ以上のデータ構造へのポインタを含むように、ハッシュテーブル内のエントリを更新するように構成されることによって、
前記メタデータを更新するように構成されている、請求項１２に記載のシステム。
【請求項１６】
前記処理システムは、前記１つ以上の物理位置を識別する情報を含むスキャッタギャザーリスト（ＳＧＬ）を生成するように構成されることによって、前記１つ以上の物理位置を割当てるように構成されており、
前記処理システムは、
前記ＳＧＬをダイレクトメモリアクセス（ＤＭＡ）エンジンに提供するように構成されることによって、および、
前記ＳＧＬに応答して、前記ＤＭＡエンジンにより、ホストインターフェイスから前記キャッシュメモリへ前記１つ以上のデータブロックを転送するように構成されることによって、
前記１つ以上のデータブロックを前記１つ以上の物理位置に格納するように構成されている、請求項１５に記載のシステム。
【請求項１７】
前記１つ以上のデータ構造は連結リストを定義する、請求項１５に記載のシステム。
【請求項１８】
前記処理システムは、
論理アドレスに応答してハッシュテーブルスロットを決定するように構成されることによって、および、
前記ハッシュテーブルスロット内の複数のエントリのうちのいずれかが前記論理アドレスを識別するか否かを判断するように構成されることによって、
前記メタデータを更新するように構成されている、請求項１５に記載のシステム。
【請求項１９】
前記１つ以上のデータ構造は連結リストを定義し、
前記処理システムは、前記ハッシュテーブルスロット内の前記エントリのうちいずれも前記論理アドレスを識別しないと判断することに応答して、前記連結リストに新たなデータ構造を追加するように構成されている、請求項１８に記載のシステム。
【請求項２０】
前記処理システムはさらに、前記連結リスト内の前記新たなデータ構造を識別する情報を、最後に使用されてから最も長い時間が経過したダーティリストに追加するように構成されている、請求項１９に記載のシステム。
【請求項２１】
前記１つ以上のデータ構造の各々は複数のサブ構造を含み、
各サブ構造は、前記キャッシュメモリ内の前記物理位置のうちの１つを識別する前記識別情報を格納するように構成され、
各サブ構造はさらに、前記識別情報により識別された前記物理位置に対して待ち状態の前記データアクセス要求のカウントを格納するように構成されている、請求項１５に記載のシステム。
【請求項２２】
各サブ構造はさらに、前記識別情報により識別された前記物理位置がダーティデータを含むか否かを示すダーティインジケータを格納するように構成されている、請求項２１に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の詳細な説明
発明の分野
本発明は、概してデータストレージシステムに関し、より具体的には、キャッシュメモリを有するデータストレージシステムに関する。
【背景技術】
【０００２】
背景
キャッシュメモリを有するデータストレージサブシステムは、ホストコンピュータシステムと、ディスクドライブアレイまたは不揮発性（たとえば、フラッシュ）メモリアレイなどのバックエンドデータストレージとの間で頻繁にアクセスされたデータのためのバッファとして機能し得る。キャッシュメモリを有するデータストレージサブシステムは、たとえば、ホストとバックエンドデータストレージとの間のデータアクセスレイテンシの低下を促進するアクセラレータカードの形態であり得る。キャッシングシステムは、キャッシュメモリ内に格納されたデータがアクセスされた頻度を判定し、最も高い頻度でアクセスされたデータのみをキャッシュメモリ内に維持しつつ、最も低い頻度でアクセスされたデータを追出し得る。
【０００３】
キャッシングシステムにおいては、レイテンシを最小限にすることが望ましい。レイテンシとは、データを書込みまたは読出しせよというホストからの要求の受信と、書込み動作または読出し動作の完了との間の時間である。レイテンシに影響を与える特性は、キャッシングシステムが、ホストにより識別された論理アドレスをキャッシュメモリ内の物理ストレージ位置に変換するのに必要なルックアップ時間、および、その後キャッシングシステムが、これらのストレージ位置へ、またはこれらのストレージ位置からデータを転送するのに必要な時間である。
【０００４】
キャッシングの一般的なタイプは「ライトバック」として知られる。「ライトバック」とは、書込み要求でホストから受信されたデータが、まずはキャッシュメモリ内に格納されてホストにより読出し可能となり、後で、レイテンシへの影響がより少なく、コピー動作が容易になる条件のときにバックエンドストレージにコピーされることである。キャッシュメモリ内に格納されているがまだバックエンドストレージにコピーされていないデータは、一般的に「ダーティ（dirty）」データと呼ばれる。ライトバックキャッシングの欠点は、停電などのシステム障害によってダーティデータが損失しやすいことである。同様に、データ損失は、キャッシュメモリ内へのデータ格納処理がこのような障害により中断されることに起因する場合がある。これにより、望ましくないことに、一連のストレージ位置が、第１の書込み要求に関連付けられたデータの一部と、後続の書込み要求に関連付けられたデータの一部とを含むことになり得る。
【０００５】
キャッシングシステムは、ダイレクトマップ方式、フルアソシアティブ方式、またはこれらのタイプのハイブリッドであってもよい。ダイレクトマップ方式のキャッシングシステムにおいて、データブロックの論理アドレスは、このデータブロックが格納され得るキャッシュメモリ内のただ１つのアドレスまたは物理位置にマッピングされる。たとえば、物理アドレスは以下のモジュロ演算により算出され得る。
【０００６】
キャッシュアドレス＝論理アドレス  ＭＯＤ（キャッシュメモリ内のアドレスの数）
一方、フルアソシアティブ方式のキャッシングシステムでは、キャッシュブロックはキャッシュメモリ内の任意の物理メモリ位置に格納され得る。フルアソシアティブ方式のキャッシングシステムは、概してメモリ使用の効率性およびヒット率において有利である。しかしながら、フルアソシアティブ方式のキャッシングシステムの欠点は、識別された論理アドレスをキャッシュメモリ内の物理ストレージ位置に変換するためのルックアップ処理の速度が遅く、したがって、レイテンシに影響を与える可能性があることである。
【発明の概要】
【課題を解決するための手段】
【０００７】
概要
本発明の実施形態は、キャッシングのシステムおよび動作方法に関する。例示的な実施形態では、キャッシングシステムは、キャッシュメモリと、上記方法を実行するようにプログラムまたは構成された処理システムとを備える。
【０００８】
例示的な実施形態では、上記方法は、１つ以上の論理アドレスと、当該１つ以上の論理アドレスに対応して書込まれる１つ以上のデータブロックとを示す書込み要求を受信するステップと、書込み要求に応答して、キャッシュメモリ内の１つ以上の物理位置をフリーリストから割当てるステップと、上記１つ以上の論理アドレスに対する何らかの読出し要求が待ち状態であるか否かに関係なく、上記１つ以上のデータブロックを上記１つ以上の物理位置に格納するステップと、上記１つ以上のデータブロックが上記１つ以上の物理位置に格納された後、上記１つ以上の論理アドレスに対して何らかの読出し要求が待ち状態であるか否かに関係なく、メタデータを更新し、上記１つ以上の物理位置を上記１つ以上の論理アドレスに関連付けるステップと、有効データを有する、キャッシュメモリ内の各物理位置に対して待ち状態である、読出し要求を含むデータアクセス要求の使用カウントを維持するステップと、上記物理位置に対して待ち状態のデータアクセス要求が無いことを使用カウントが示す場合、物理位置をフリーリストに戻すステップとを含む。
【図面の簡単な説明】
【０００９】
【図１】本発明の例示的な実施形態に係るキャッシングシステムを示すブロック図である。
【図２】例示的な実施形態に係る一般化されたキャッシュメモリのマップを示す概念図である。
【図３】例示的な実施形態に係るデータ構造間の例示的な関係を示すデータ関係図である。
【図４】例示的な実施形態に係る、例示的なキャッシュセグメント連結リストおよび関連付けられた例示的なバッファブロックを示す別のデータ関係図である。
【図５】例示的な実施形態に係る例示的なスキャッタギャザーリストを示す図である。
【図６Ａ】例示的な実施形態に係る書込み動作を示すフロー図である。
【図６Ｂ】図６Ａのフロー図の続きを示す図である。
【図７Ａ】例示的な実施形態に係る読出し動作を示すフロー図である。
【図７Ｂ】図７Ａのフロー図の続きを示す図である。
【図８】例示的な実施形態に係るシステムの動作の方法を示すフロー図である。
【図９】例示的な実施形態に係るフラッシュ（flush）動作を示すフロー図である。
【発明を実施するための形態】
【００１０】
明細書
図１に示すように、本発明の例証的または例示的な実施形態において、ストレージサブシステム１０はホストシステム１２とバックエンドストレージ１４との間でキャッシングを提供する。ホストシステム１２は、如何なるタイプの従来のコンピュータシステムまたはコンピュータシステムのネットワークであってもよい。バックエンドストレージ１４は、如何なるタイプの従来のデータマスストレージシステムであってもよい。たとえば、バックエンドストレージ１４は、複数の物理データストレージデバイス１６、１８、２０…のアレイを含んでもよい。このような物理データストレージデバイス１６、１８、２０…の例として、ディスクドライブ、フラッシュメモリモジュール、および他のタイプの不揮発性データストレージデバイスがある。
【００１１】
本明細書に記載の例示的な実施形態では、バックエンドストレージ１４における複数の物理データストレージデバイス１６、１８、２０…のアレイは、一般的に「ＲＡＩＤ」、すなわち「redundant array of independent （またはinexpensive） disks」のもとに参照される原理のうちの１つ以上に準拠してもよい。たとえば、ストライピングとして公知の一般的なＲＡＩＤ原理に従って、バックエンドストレージ１４はストライプ２２を単位にしてデータを格納してもよい。物理データストレージデバイス１６、１８、２０…の各々は、各ストライプ２２の一部を格納する。バックエンドストレージ１４は、如何なる数の物理ストレージデバイス１６、１８、２０…を含んでもよい（図１の省略記号（「…」）は、アレイに含まれるが明確化のため個別には図示されない他の物理データストレージデバイスを示す）。ストライピングなどのＲＡＩＤ原理は、当業者ならばよく理解するものであるため、この原理については本明細書でさらに詳述はしない。また、上記のバックエンドストレージ１４の説明は、本発明が関連付けられ得る例示的なデータストレージ環境またはコンテキストを説明する目的で、ディスクなどの複数の物理データストレージデバイス１６、１８、２０…を含むものとして、または、ＲＡＩＤ原理などに準拠するものとして提示したに過ぎず、限定するように意図したものではない。たとえば、本明細書で用いられる「論理アドレス」という用語は、本発明を、如何なる特定の物理データストレージ環境、組織、スキームなどに限定するものとしても解釈すべきではない。
【００１２】
例示的な実施形態では、ストレージサブシステム１０はキャッシュメモリ２４を含む。キャッシュメモリ２４は、たとえばＤＤＲ  ＤＲＡＭ（double data rate dynamic random access memory）など、如何なるタイプであってもよい。ストレージサブシステム１０は、中央処理装置（ＣＰＵ）２６およびワーキングメモリ２８も含む。ワーキングメモリ２８は、たとえばスタティックＲＡＭなど、如何なるタイプであってもよい。ＣＰＵ２６は一般的な処理タスクを行なってもよいが、ストレージサブシステム１０は、以下の特化された処理要素をさらに含む。すなわち、メッセージプロセッサ３０、コマンドプロセッサ３２、キャッシュプロセッサ３４、バッファプロセッサ３６、バックエンドプロセッサ３８、およびダイレクトメモリアクセス（ＤＭＡ：direct memory access）エンジン４０である。例示的な実施形態ではストレージサブシステム１０がこれらの特化された処理要素を含むが、他の実施形態では、処理要素をより少なく、またはより多く含んでもよい。そのような他の実施形態において、処理要素は本明細書に記載の処理動作のうちのいくつかまたはすべてを行なってもよい。ストレージサブシステム１０は、バスのシステムまたはマトリックスなどのシステムインターコネクト４２も含む。このシステムインターコネクト４２を介して上記の処理要素は互いに通信する。上記の要素間の他の通信経路または信号経路も含まれ得る。ストレージサブシステム１０がホストシステム１２と通信するために介在するホストインターフェイス４４、およびストレージサブシステム１０がバックエンドストレージ１４と通信するために介在するストレージインターフェイス４６も含まれ得る。ホストインターフェイス４４は、たとえばピーシーアイエクスプレス（ＰＣＩｅ：Peripheral Component Interconnect Express）などの通信バス規格に準拠し、関連付けられたＰＣＩｅコントローラを含んでもよい。メモリインターフェイスなどの他のインターフェイス、および関連付けられたメモリコントローラも含まれ得るが、明確化のため図示はしない。図示はしないが、ストレージサブシステム１０は、ホストシステム１２のバックプレーンまたはマザーボードに差込まれるアクセラレータカードの一部を定義してもよい。上記の処理要素のうちのいくつかまたはすべてが、たとえばＦＰＧＡ（field-programmable gate array）、特定用途向け集積回路（ＡＳＩＣ：application-specific integrated circuit）、または他のデバイスなどの集積回路デバイス（図示せず）内に含まれてもよい。
【００１３】
図２に示すように、キャッシュメモリ２４を用いて、いくつかのタイプの後述のキャッシング関連情報を格納してもよい。しかしながら、他の実施形態では、異なるタイプのデータが異なるメモリに格納されてもよく、または他の如何なる態様で組織されてもよい。例示的な実施形態では、キャッシュメモリ２４は、データ領域４８と、キャッシュセグメント（ＣＳ：cache segment）領域５０と、ハッシュテーブル領域５２と、スキャッタギャザーリスト（ＳＧＬ：scatter-gather list）領域５４と、その他領域５６とを含む。当業者ならば理解するように、図２では明確化のため、キャッシュメモリ２４のこれらの領域の空間的配置が概念的に示されている。情報は、如何なる態様でキャッシュメモリ２４または他のメモリ内にマッピングされてもよく、または他の方法で配置されてもよい。
【００１４】
キャッシュされたデータは、バッファブロック（ＢＢ：buffer block）と呼ばれる単位でデータ領域４８内に格納される。単位は、たとえば４キロバイト（ＫＢ）などのデータ量を定義する。「ブロック」という用語は、データが連続することを意味する。例示的な実施形態では、上記のストライプ２２はたとえば６４ＫＢから成り、したがって、各ストライプ２２は１６個のバッファブロックに対応する。以下でさらに詳しく説明するように、バッファブロックの順序付けに関係なく、および、バッファブロックの物理アドレスと論理アドレスとの関係に関係なく、如何なるバッファブロックも、データ領域４８内の任意の利用可能な物理位置（たとえば、アドレス）にキャッシュまたは格納され得る。結果として、ストライプ２２に対応するバッファブロックは、必ずしも互いに連続して格納されるわけではない。この特性は結合規則（associativity）と呼ばれる。
【００１５】
説明のために、いくつかの例示的なバッファブロック５８、６０、６２、６４、６６、６８、７０、７２…は、データ領域４８内のさまざまな物理位置に格納されているものとして示される（データ領域４８内の省略記号は、明確化のために図示されない他の物理位置の他のバッファブロックを示す）。データ領域４８のストレージ容量は、バックエンドストレージ１４のストレージ容量よりも実質的に少なくてもよい。たとえば、バックエンドストレージ１４のストレージ容量はテラバイトのオーダーであってもよく、一方、データ領域４８のストレージ容量はギガバイトまたはメガバイトのオーダーであってもよい。処理を容易にするために、データ領域４８内の物理位置は、インデックスまたは物理メモリアドレスからのオフセットとして機能するバッファブロック識別子（ＢＢＩＤ：buffer block identifier）により識別されてもよい。例に関して以下で説明するように、例示的なバッファブロック６８、６６、７０、６２、および６４は破線矢印で示すように順序付けされる。例示的なバッファブロック６８はシーケンスの最初であり、例示的なバッファブロック６４はシーケンスの最後である（他のバッファブロックは省略記号で示すが、明確化のために図示しない）。図２において、例示的なバッファブロック５８、６０、６２、６４、６６、６８、７０、および７２は、集結するのではなくデータ領域４８にわたって分散されるように示されており、これは結合規則を例示するように意図される。
【００１６】
説明のために、いくつかの例示的なキャッシュセグメント７４、７６、７８…は、キャッシュセグメント領域５０内の物理位置に格納されているものとして示す。他のキャッシュセグメントは省略記号で示すが、明確化のために図示しない。以下でさらに詳しく説明するように、キャッシュセグメントは、キャッシュされたバッファブロックを記述するメタデータを含むデータ構造である。
【００１７】
ハッシュテーブル８０がキャッシュセグメント１０２と関る態様を図３に示す。ハッシュテーブル８０は、ハッシュテーブル領域５２（図２）に格納されてもよい。ハッシュ関数８４は、ホストシステム１２により開始された書込み動作または読出し動作（それぞれ、書込み入力／出力（Ｉ／Ｏ）動作および読出しＩ／Ｏ動作とも呼ばれる）の対象であるデータの論理アドレスに適用される。書込み動作または読出し動作は、一般的に、書込み要求または読出し要求と、書込みまたは読出しされるデータの量を示すものと、データの１つ以上の論理アドレスとを、ストレージサブシステム１０がホスト１２から受信することに応答して開始される。当業者ならばよく理解するように、「論理アドレス」という用語は、ホストシステム１２がデータに対して動作するアドレス空間を指す。これに対して物理アドレス空間は、ストレージサブシステム１０とバックエンドストレージ１４とがデータに対して動作する空間である。
【００１８】
ハッシュテーブル８０は複数（ｎ個）のスロットを含む。これらの複数のスロットのうち、第１の例示的なスロット８２、第２の例示的なスロット８４、…別の例示的なスロット８６、…最後すなわち「ｎ番目の」例示的なスロット８８までを図示する。他のスロットは省略記号で示すが、明確化のために図示はしない。ハッシュテーブル８０は如何なる数のスロットを有してもよいが、その数は一般的にホストアドレス空間内の論理アドレスの数よりも実質的に少ない。ハッシュ関数８４の一例は、Ｓｌｏｔ＝（ＬＢＡ）ＭＯＤ（ｎ）である（「Ｓｌｏｔ」はハッシュテーブル８０内のスロットのインデックスを表わし、「ＬＢＡ」は論理アドレスを表わし、ＭＯＤすなわちモジュロはモジュロ演算関数である）。ハッシュ関数を用いてテーブルにインデックスを付けることは当該技術分野においてよく理解されているため、本明細書でさらに詳述はしない。
【００１９】
各スロットは複数のエントリ９０を有する。たとえば、ハッシュテーブル８０の各スロットは４つのエントリ９０を有してもよい。ハッシュテーブルスロット１つにつき１つのエントリではなく、ハッシュテーブルスロット１つにつき複数（すなわち、２つ以上）のエントリ９０を採用することは、「衝突（collision）」を最小限にするのに役立ち得る。ハッシュテーブルアドレスの衝突は当該技術分野においてよく取上げられるものである。以下で説明するように、（ミス（miss）の場合）スロット内の任意の空の（empty）エントリ９０を用いて書込み要求を実行することができる。スロットのエントリのうちのすべてが占有されている例では、他のエントリ９２、９４…が連結リストの形で追加され得る。
【００２０】
各エントリ９０は、論理アドレスフィールド９６と、キャッシュセグメント識別子（ＣＳＩＤ：cache segment identifier）フィールド９８と、有効エントリフィールドまたはビット（Ｖ）１００とを含む。書込み動作および読出し動作の例に関して以下で説明するように、キャッシュセグメント識別子フィールド９８は、キャッシュセグメント領域５０（図２）に格納されたキャッシュセグメントを識別し、またはこのキャッシュセグメントにインデックスを付けるキャッシュセグメント識別子（たとえば、ポインタ）を格納するように構成されている。
【００２１】
キャッシュセグメント識別子により識別される各キャッシュセグメントは、図３に示す例示的なキャッシュセグメント１０２の構造を有してもよい。このようなキャッシュセグメントの各々は複数のキャッシュセグメントリスト要素を含む。これらの複数のキャッシュセグメントリスト要素のうち、第１の例示的なキャッシュセグメントリスト要素１０４、第２の例示的なキャッシュセグメントリスト要素１０６、…最後の例示的なキャッシュセグメントリスト要素１０８を図示する。他のキャッシュセグメントリスト要素は省略記号で示すが、明確化のために個別には図示しない。例示的な実施形態では、上記のストライプ２２は１６個のバッファブロックに対応し、各キャッシュセグメントはそれに対応して１６個のキャッシュセグメントリスト要素を有し、各キャッシュセグメントリスト要素がそれらのバッファブロックのうちの１つに対応するようにしてもよい。ただし、他の実施形態では、各キャッシュセグメントは如何なる数のキャッシュセグメントリスト要素を有してもよい。
【００２２】
各キャッシュセグメントリスト要素は、以下のフラグフィールドを含む。すなわち、バッファブロック識別子（ＢＢＩＤ）フィールド１１０、有効バッファブロックフィールドまたはビット（Ｖ）１１２、ダーティバッファブロックフィールドまたはビット（Ｄ）１１４、フラッシュバッファブロックフィールドまたはビット（Ｆ）１１６、および使用カウント（ＣＮＴ）フィールド１１８である。書込み動作および読出し動作に関して、これらのフラグフィールドに格納されたフラグが用いられる態様について以下で述べるが、以下のことに留意されたい。キャッシュセグメントリスト要素の有効（バッファブロック）ビット１１２は、そのキャッシュセグメントリスト要素のバッファブロック識別子フィールド１１０により識別されたバッファブロックが有効であるか否かを示す。当業者ならば理解するように、「有効（valid）」という用語はキャッシングの文脈において一般的に用いられ、データが書込まれたキャッシュメモリ内の位置を表わす。キャッシュセグメントリスト要素のダーティ（バッファブロック）ビット１１４は、そのキャッシュセグメントリスト要素のバッファブロック識別子フィールド１１０により識別されたバッファブロックがダーティか否かを示す。当業者ならば理解するように、「ダーティ（dirty）」という用語はキャッシングの文脈において一般的に用いられ、まだバックエンドストレージ１４にコピーされていないキャッシュされたデータを指す。キャッシュセグメントリスト要素のフラッシュ（バッファブロック）ビット１１６は、そのキャッシュセグメントリスト要素のバッファブロック識別子フィールド１１０により識別されたバッファブロックがバックエンドストレージ１４へ追出されている最中である、すなわち、「フラッシュされている（flushed）」最中であるか否かを示す。キャッシュセグメントリスト要素の使用カウントフィールド１１８は、そのキャッシュセグメントリスト要素のバッファブロック識別子フィールド１１０により識別されたバッファブロックに対して待ち状態である、読出し要求およびフラッシュ動作を含むデータアクセス要求の数を示す。このように、キャッシュセグメントのこれらのフィールドは、そのキャッシュセグメントのバッファブロック識別子フィールド１１０により識別されたバッファブロックの局面を記述するメタデータとして機能する。
【００２３】
各キャッシュセグメントは、前のキャッシュセグメント識別子フィールド１２０および次のキャッシュセグメント識別子フィールド１２２も含む。図４に示すように、これらのフィールドを用いて、複数のキャッシュセグメントを二重連結リストでリンクすることができる。たとえば、別の例示的なキャッシュセグメント１２４は例示的なキャッシュセグメント１０２に連結可能であり、さらに別の例示的なキャッシュセグメント１２６は例示的なキャッシュセグメント１２４に連結可能である、等々である。キャッシュセグメントのこのような二重連結リストの他の例（図示せず）は、如何なる数のキャッシュセグメントを含んでもよい。このような連結リスト内の各キャッシュセグメントは、（そのバッファブロック識別子フィールド１１０により、）データ領域４８（図１）に格納された１つ以上のバッファブロックを識別し、またはそれらに関連付けられる。たとえば、図４を参照するとともに、再び図２も参照すると、例示的なキャッシュセグメント１０２は、例示的なバッファブロック６８、６６、および７０、ならびに別の例示的なバッファブロック１２８までの他のバッファブロック（個別には図示されないが省略記号で表わされる）を識別し、またはそれらに関連付けられてもよい。例示的なキャッシュセグメント１２４は、さらに別の例示的なバッファブロック１３０、およびバッファブロック６２までの他のバッファブロック（個別には図示されないが省略記号で表わされる）を識別し、またはそれらに関連付けられてもよい。例示的なキャッシュセグメント１２６は、例示的なバッファブロック６４を識別し、またはバッファブロック６４に関連付けられてもよい。
【００２４】
上記のストライプ２２が１６個のバッファブロックに対応する例示的な実施形態によれば、以下のことに留意されたい。すなわち、キャッシュセグメント１０２の１６個のキャッシュセグメントリスト要素（図示せず）は、１６個の例示的なバッファブロック６８、６６、７０、…１２８に対応すること、および、キャッシュセグメント１２４の１６個のキャッシュセグメントリスト要素（図示せず）は、１６個の例示的なバッファブロック１３０、…６２に対応することである。図２および図４に示す例において、連結リスト内の最終キャッシュセグメント１２６はただ１つの例示的なバッファブロック６４に対応することに留意されたい。なぜなら、この例では、関与するバッファブロックの総数が１６の倍数ではないからである。この例では、キャッシュセグメント１２６の１つのキャッシュセグメントリスト要素は有効バッファブロック識別子を含む一方、残りの１５個は有効バッファブロック識別子を含まないであろう（したがって、それらの有効ビットは「０」すなわちディアサートであろう）。以下で説明するように、書込み要求は、書込みのための任意の数のバッファブロックを示し得る。キャッシュセグメント内のキャッシュセグメントリスト要素の数（たとえば、１６個）よりも少ない数のバッファブロックを示す書込み要求は、完了するのに１つのキャッシュセグメントを必要とするのみであり得るが、一方、そのバッファブロックの数よりも多い数を示す書込み動作は、（上述のように互いにリンクされた）複数のキャッシュセグメントを必要とし得る。
【００２５】
データ構造であるスキャッタギャザーリスト（ＳＧＬ）を採用して、バッファブロックが格納されたデータ領域４８内の物理位置を識別する情報を伝達してもよい。如何なる数のＳＧＬが互いにリンクされてもよい。たとえば、図５に示すように、第１のＳＧＬ１３２は、例示的なバッファブロック６８、６６、および７０の物理位置を識別する情報を含むスキャッタギャザーエントリ（ＳＧＥ：scatter-gather entry）を有してもよく、一方、第２のＳＧＬ１３４は、例示的なバッファブロック６２および６４の物理位置を識別する情報を含むスキャッタギャザーエントリ（ＳＧＥ）を有してもよい。第１のＳＧＬ１３２は第２のＳＧＬ１３４を指し示すリンク（ＳＧＬ  ＩＤ）を含む。少なくとも第１のＳＧＬ１３２は、バッファブロックに関連付けられたキャッシュセグメントのキャッシュセグメント識別子（ＣＳＩＤ）も含み得る。
【００２６】
図６Ａ〜図６Ｂのフロー図で示すように、書込み要求は以下のように処理され得る。ブロック１３６で示すように、ストレージサブシステム１０は書込み要求通知をホストシステム１２から受信する。書込み要求は、１つ以上の論理アドレスと、当該１つ以上の論理アドレスに対応して書込まれる１つ以上のデータブロックとを示す。データは、たとえば４ＫＢなど、バッファブロックと同じサイズのブロック単位でホスト１２から受信される。書込み要求は、書込まれる任意の数のデータブロックを示し得る。さらに図１を参照すると、メッセージプロセッサ３０は書込み要求を受信して、コマンドプロセッサ３２による書込み動作開始を可能にする情報をコマンドプロセッサ３２に提供し得る。
【００２７】
ブロック１３８（図６Ａ）で示すように、バッファプロセッサ３６（図１）は、データ領域４８内の１つ以上の物理位置をフリーリスト（図示せず）から割当てることによって、書込み動作の開始に応答する。フリーリストは、格納された有効バッファブロックが無いためバッファブロックストレージに利用可能である、すなわち「空いている（free）」、データ領域４８内の物理位置を示す。物理位置は、バッファブロックの順序に関係なく選択され、または割当てられる。たとえば図２では、例示的なバッファブロック６２、６４、６６、６８、および７０が格納された物理位置は互いに無関係であるが、ただ書込み動作が行なわれたときにそれらの物理位置の各々がフリーリストに含まれており、結果としてそれらが上記位置に格納されただけであるということに留意されたい。例示的なバッファブロック６２、６４、６６、６８、および７０の論理アドレスは、それらの間の破線矢印で示す順序に従ってもよいが、その順序は、それらが格納されたデータ領域４８内での物理位置と無関係である。
【００２８】
ブロック１４０で示すように、割当てられた物理位置を識別する情報を含む１つ以上のＳＧＬ（図示せず）が生成されてもよい。ＳＧＬはＤＭＡエンジン４０（図１）に伝達される。ブロック１４２でさらに示すように、ＤＭＡエンジン４０は、ＳＧＬ情報を用いて、ホスト１２からの書込み要求により識別されたデータブロックをデータ領域４８内の割当てられた物理位置へ転送する。キャッシュメモリ２４のデータ領域４８内に格納されると、データブロックは上述のようにバッファブロックを定義する。
【００２９】
以下で説明するように、書込み要求に応答してデータがホスト１２からデータ領域４８へ転送されることに引き続いて、キャッシュプロセッサ３４（図１）がメタデータを更新して書込み動作を完了する。データの転送は読出し動作により中断され得ないという意味において、書込み要求に応答する書込み動作の完了は不可分であることに留意すべきである。別の言い方をすれば、バッファブロックがデータ領域４８内の物理位置に格納された後、何らかの読出し要求が論理アドレスに対して待ち状態であるか否かに関係なく、メタデータが更新されて物理位置が論理アドレスに関連付けられる。トランザクション処理の語彙では、キャッシュプロセッサ３４はメタデータを更新することによって書込みトランザクションを「コミット（commit）」し、これにより、不可分性を確保する。以下の動作は、そのようなメタデータの更新に関する。
【００３０】
ブロック１４４で示すように、キャッシュプロセッサ３４は上記のハッシュテーブル８０（図３）内の、書込み要求内で識別された１つ以上の論理アドレスをルックアップする。上述のように、ハッシュ関数８４は、論理アドレスを、ハッシュテーブル８０内のスロットのインデックスに変化させる。ブロック１４６で示すように、キャッシュプロセッサ３４は、論理アドレスをそのスロット内の各エントリと比較して、その論理アドレスにおいてデータが既にキャッシュされていることを示す一致、すなわち「ヒット（hit）」があるか否かを判断する。４つのエントリのうちいずれも一致ではない場合、キャッシュプロセッサ３４は上述の連結リストに従って追加のエントリに進んでもよい。論理アドレスに一致するエントリが無い場合、ハッシュテーブルルックアップの結果は「ミス（miss）」である。
【００３１】
ハッシュテーブルルックアップの結果がミスであるとキャッシュプロセッサ３４が判断する場合（ブロック１４６）、ブロック１４８で示すように、キャッシュプロセッサ３４は新たなキャッシュセグメントを割当てる。新たなキャッシュセグメントは、上述のようにＣＳＩＤにより識別される。キャッシュプロセッサ３４は、ＣＳＩＤをスロットエントリのうちの利用可能な１つに格納するか、または、スロット自体のすべて（たとえば、４つ）のエントリが占有されている場合には、スロットの「リンク」エントリのＣＳＩＤが更新され、新たに追加されたＣＳＩＤに次のハッシュリンクが設定される。新たなＣＳＩＤの前のハッシュリンクは、ハッシュテーブルの参照されたスロット内の「リンク」エントリのＣＳＩＤに設定される。次いで、ブロック１５０で示すように、新たに割当てられたキャッシュセグメント内のキャッシュセグメントリスト要素の各々について、キャッシュプロセッサ３４は、ＳＧＬからバッファブロック識別子フィールド１１０（図３）内にバッファブロック識別子をコピーし、それらの有効ビットおよびダーティビットを設定するとともに、フラッシュビットおよび使用カウントをクリアする。また、ブロック１５２で示すように、キャッシュプロセッサ３４は、新たに割当てられたキャッシュセグメントのキャッシュセグメント識別子を、最後に使用されてから最も長い時間が経過した（ＬＲＵ：least-recently used）ダーティ連結リスト（図示せず）の末尾に追加する。以下で説明するように、ＬＲＵダーティ連結リストは、キャッシュされたデータをバックエンドストレージ１４にフラッシュする際に用いられてもよい。ブロック１４６、１４８、１５０、および１５２で示す動作は、書込み要求内のデータの１つのストライプ２２に関係する。ブロック１５４で示すように、書込み要求が２つ以上のストライプ２２にまたがる場合、これらの動作が、ハッシュテーブルルックアップの結果がミスであるストライプ２２の各々について繰返される。
【００３２】
ハッシュテーブルルックアップの結果がヒットであるとキャッシュプロセッサ３４が判断する場合（ブロック１４６）、ブロック１５６で示すように、キャッシュプロセッサ３４は、スロットエントリにより識別されたキャッシュセグメントを読出す。次いで、ブロック１５８で示すように、「空である」、すなわちそのバッファブロック識別子フィールド１１０内に有効バッファブロック識別子を既に含むものではないキャッシュセグメントリスト要素の各々に対して、キャッシュプロセッサ３４は、ＳＧＬからそのバッファブロック識別子フィールド１１０内にバッファブロック識別子をコピーする。そのキャッシュセグメントリスト要素において、キャッシュプロセッサ３４は以下のフラグも設定する（図３）。すなわち、有効ビット１１２は値「１」（「真」）に設定され、ダーティビット１１４は値「１」（「真」）に設定され、使用カウント１１８は値ゼロに設定される。空ではない、すなわち有効バッファブロック識別子を含むキャッシュセグメントリスト要素すべてについて、処理はブロック１６２（図６Ｂ）に続く。
【００３３】
ブロック１６２および１６４で示すように、キャッシュセグメントリスト要素のフラッシュビット１１６が「０」（「偽」）でない、または、キャッシュセグメントリスト要素の使用カウント１１８がゼロ以外の値を含むとキャッシュプロセッサ３４が判断する場合、ブロック１６６で示すように、キャッシュプロセッサ３４は、フラグ（すなわち、有効ビット１１２の値、ダーティビット１１４の値、フラッシュビット１１６の値、および使用カウントフィールド１１８の値）を、（元のリスト要素ＢＢＩＤ値によりインデックスが付けられた状態で、）たとえばキャッシュメモリ２４（図１）のその他領域５６内にコピーまたは保存する。フラグが保存されると、ブロック１６８で示すように、キャッシュプロセッサ３４は、そのキャッシュセグメントリスト要素のバッファブロック識別子フィールド１１０を、ＳＧＬから得られたバッファブロック識別子で上書きしてもよい。フラグは、新たに書込まれたバッファブロックと同じ段階に設定される。すなわち、フラッシュ＝０、ダーティ＝１、有効＝１、使用カウント＝０である。
【００３４】
しかしながら、キャッシュセグメントリスト要素のフラッシュビット１１６が「０」（「偽」）であり、かつ、キャッシュセグメントリスト要素の使用カウント１１８が値ゼロを含むとキャッシュプロセッサ３４が判断する場合（ブロック１６２および１６４）、ブロック１７０で示すように、キャッシュプロセッサ３４は、そのキャッシュセグメントリスト要素のバッファブロック識別子フィールド１１０内のバッファブロック識別子の割当てを解除する。すなわち、バッファブロック識別子は上記のフリーリストに戻される。次いで、ブロック１６８で示すように、キャッシュプロセッサ３４は、そのキャッシュセグメントのバッファブロック識別子フィールド１１０を、ＳＧＬから得られたバッファブロック識別子で上書きする。
【００３５】
また、ブロック１７２で示すように、ハッシュテーブルヒットに応答して、キャッシュプロセッサ３４はＬＲＵダーティ連結リストを更新する。より具体的には、キャッシュセグメント識別子がＬＲＵダーティ連結リスト内の位置に既に存在すると判断された場合、キャッシュセグメント識別子はその位置から取除かれ、そのキャッシュセグメント識別子のための新たな位置がＬＲＵダーティ連結リストの末尾に追加される（すなわちリンクされる）。このように、最も新しく書込まれたキャッシュセグメント識別子がＬＲＵダーティ連結リストの末尾に移動する。以下で説明するように、このような態様でＬＲＵダーティ連結リストを維持することにより、より前に書込まれた（すなわち、最も古い）データをバックエンドストレージ１４に追出し、またはフラッシュすることが容易になる。次いで処理は、ブロック１５８に関して上述したように続く。
【００３６】
書込み要求が２つ以上のストライプ２２にまたがる場合、ブロック１５４で示すように、ハッシュテーブルルックアップの結果がヒットであるストライプ２２の各々について上述の動作が繰返される。上述の態様で書込み動作のすべてのストライプ２２が処理されると、ブロック１７４で示すように、ホスト１２は、書込み動作が完了したことを通知される。
【００３７】
図７のフロー図で示すように、読出し要求は以下のように処理され得る。ブロック１８０で示すように、ストレージサブシステム１０は読出し要求をホストシステム１２から受信する。読出し要求は、データの読出しが行なわれる１つ以上の論理アドレスを示す。読出し要求は、読出されるデータの量を示してもよい。ホストシステム１２は、たとえば４ＫＢなど、バッファブロックと同じサイズのデータブロックを読出す。さらに図１を参照すると、メッセージプロセッサ３０は読出し要求を受信して、コマンドプロセッサ３２による読出し動作開始を可能にする情報をコマンドプロセッサ３２に提供し得る。
【００３８】
ブロック１８２で示すように、キャッシュプロセッサ３４は、ハッシュテーブル８０（図３）のルックアップを行なうことにより、読出し動作の開始に応答する。すなわち、書込み動作に関して上述したのと同じ態様で、ハッシュ関数８４が各論理アドレスに適用され、１つ以上のインデックスがハッシュテーブル８０に生成される。各インデックスは、読出される１つのスロットを示す。ハッシュテーブル８０から読出されるスロットの数は、読出し要求により示されるデータの量に依存する。上述のように、各スロットは１つのストライプ２２を表わし、１つのストライプ２２は、たとえば６４ＫＢに対応してもよい。読出し要求は複数のストライプ２２にまたがってもよい。示されたスロットの各々が読出されて、結果がヒットであるかミスであるかが判断される。より具体的には、読出し動作の結果として以下の３つの可能性がある。すなわち、要求されたデータのうちのすべてがデータ領域４８内に存在する（この結果は完全ヒットと呼ばれる）という結果、要求されたデータのうちの一部がデータ領域４８内に存在する（この結果は部分ヒットと呼ばれる）という結果、または、要求されたデータのうちいずれもデータ領域４８内に存在しない（この結果はミスまたは完全ミスと呼ばれる）という結果である。
【００３９】
ブロック１８４で示すように、ハッシュテーブルルックアップの結果がヒットであるとキャッシュプロセッサ３４が判断する場合（完全ヒットまたは部分ヒットの場合があり得る）、ブロック１８６で示すように、キャッシュプロセッサ３４は、ヒットをもたらしたエントリにより示されたキャッシュセグメントを読出す。図３に関して上述したように、そのキャッシュセグメントの各キャッシュセグメントリスト要素は、有効（バッファブロック）ビット１１２を有する。この有効（バッファブロック）ビット１１２は、そのキャッシュセグメントリスト要素のバッファブロック識別子フィールド１１０内で識別されたバッファブロックが有効であるか否かを示す。読出し要求内で示された論理アドレスの最下位ビットを用いて、要求されたバッファブロックのバッファブロック識別子を含むキャッシュセグメントリスト要素の始まりを識別することができる。次いで、ブロック１８８で示すように、バッファブロックが識別されたキャッシュセグメントリスト要素の、有効ビット１１２により有効であると判断された要求バッファブロックの各々について、および、ダーティビット１１４によりダーティであると判断された要求バッファブロックの各々について、キャッシュプロセッサ３４は、そのキャッシュセグメントリスト要素の使用カウントフィールド１１８内の値すなわちカウントをインクリメントする。次いで、キャッシュプロセッサ３４はブロック１９０で示すように、データ領域４８からデータを読出す際に用いられる１つ以上のＳＧＬ（図示せず）を生成およびポピュレートする。次いで、キャッシュプロセッサ３４はブロック１９２で示すように、読出し要求が別のストライプ２２にまたがっているか否かを判断する。別のストライプ２２が読出される場合、処理はブロック１８４に戻る。ハッシュテーブルルックアップの結果がミスであると判断された場合（ブロック１８４）、キャッシュプロセッサ３４はブロック１９４で示すようにミスカウントをインクリメントし、処理はブロック１９２に関して上述したように続く。
【００４０】
読出し要求に関連付けられたすべてのストライプが読出された後、処理はブロック１９６に続く（図７Ｂ）。キャッシュプロセッサ３４は上記のミスカウントを用いて、結果が完全ミスであるか否か、すなわちストライプのうちいずれもヒットではないか、または、完全ヒット（ブロック１９７）、すなわちストライプのうちのすべてがヒットであるかを判断し得る（ブロック１９６）。結果が完全ミスであるとキャッシュプロセッサ３４が判断する場合（ブロック１９６）、ブロック１９８で示すように、バックエンドプロセッサ３８（図１）は、要求されたデータをバックエンドストレージ１４（図１）から読出す。ＤＭＡエンジン４０は、バックエンドストレージ１４からホスト１２へデータを転送することに関与してもよい。結果が完全ヒットであるとキャッシュプロセッサ３４が判断する場合（ブロック１９７）、ブロック１９９で示すように、キャッシュプロセッサ３４は、要求されたデータのうちのすべてをデータ領域４８から読出す（図２）。結果が部分ヒットである、すなわち、完全ミスでもなく（ブロック１９６）完全ヒットでもない（ブロック１９７）とキャッシュプロセッサ３４が判断する場合、ブロック２００で示すように、キャッシュプロセッサ３４は、データ領域４８内で見つからない要求されたデータのバッファブロックをバックエンドストレージ１４から読出し、ブロック２０１で示すように、データ領域４８内で見つかった要求されたデータのバッファブロックをデータ領域４８から読出す。データ転送が完了すると、ブロック２０２で示すように、ホスト１２は読出し動作が完了したことを通知される。
【００４１】
上述したように、ＳＧＬを用いてデータ領域４８からのデータの転送を容易にすることができる。完全ヒットではなく部分ヒットの場合、キャッシュプロセッサ３４は、ダーティバッファブロックおよび非ダーティバッファブロックを識別する情報を用いて、いずれのバッファブロックをデータ領域４８から読出すか、および、いずれのバッファブロックをデータ領域４８内で「飛ばして（skip over）」代りにバックエンドストレージ１４から読出すか、を示す情報をＳＧＬ内に含める。有効かつダーティなバッファブロックはデータ領域４８から読出さなければならないが、有効かつ非ダーティなバッファブロックはバックエンドストレージ１４から読出し得る。キャッシュマネージャ３４は、部分ヒットの場合はバックエンドプロセッサ３８へ、または、完全ヒットの場合はＤＭＡエンジン４０へ、ＳＧＬ（または互いにリンクされた複数のＳＧＬ）を送信する。ブロック２００で示すように、次いで、データ領域４８、バックエンドストレージ１４、またはデータ領域４８とバックエンドストレージ１４との組合せから、要求されたバッファブロックが読出される。
【００４２】
図８に示すように、キャッシング方法は以下を含み得る。すなわち、（ブロック２０４）１つ以上の論理アドレスと、当該１つ以上の論理アドレスに対応して書込まれる１つ以上のデータブロックとを示す書込み要求を受信するステップと、（ブロック２０６）書込み要求に応答して、キャッシュメモリ内の１つ以上の物理位置をフリーリストから割当てるステップと、（ブロック２０８）上記１つ以上の論理アドレスに対する何らかの読出し要求が待ち状態であるか否かに関係なく、上記１つ以上のデータブロックを上記１つ以上の物理位置に格納するステップと、（ブロック２１０）上記１つ以上のデータブロックが上記１つ以上の物理位置に格納された後、上記１つ以上の論理アドレスに対して何らかの読出し要求が待ち状態であるか否かに関係なく、メタデータを更新し、上記１つ以上の物理位置を上記１つ以上の論理アドレスに関連付けるステップと、（ブロック２１２）有効データを有する、キャッシュメモリ内の各物理位置に対して待ち状態であるデータアクセス要求、すなわち「使用」のカウントを維持するステップと、（ブロック２１４）物理位置に対して待ち状態のデータアクセス要求が無いことを使用カウントが示す場合、物理位置をフリーリストに戻すステップと、である。物理位置がフリーリストに戻されるとき（ブロック２１４）、対応するキャッシュセグメントリスト要素の有効ビットがディアサートされることに留意してもよい。
【００４３】
データ領域４８からバックエンドストレージ１４へデータを転送することは、一般的に当該技術分野において、キャッシュメモリからデータを追出す、またはデータをフラッシュする、と称されるが、詳細は説明しない。なぜなら、データの追出しまたはフラッシュは、当業者ならば理解する従来の態様で行なわれ得るからである。簡潔に述べると、図９のフロー図を参照して、ブロック２１６で示すように、フリーリスト内のバッファブロックの数が閾値未満に減少したと判断された場合に、バッファブロックはデータ領域４８からバックエンドストレージ１４にフラッシュされ得る。ブロック２１８で示すように、上述したＬＲＵダーティ連結リストによってフラッシュが容易になり得る。なぜなら、最後に書込まれてから最も長い時間が経過したバッファブロックを識別するキャッシュセグメントが、ＬＲＵダーティ連結リストの先頭に維持されるからである。このような、最後に書込まれてから最も長い時間が経過したバッファブロックをバックエンドストレージ１４にフラッシュし、ＬＲＵダーティ連結リストを更新して、対応するキャッシュセグメントを取除くことが可能である。このようなフラッシュ動作は、上述した書込み動作および読出し動作とは独立して、すなわちバックグラウンドで行なわれ得ることに留意されたい。さらに、明確化のために図９には示さないが、１つ以上のバッファブロックがフラッシュされた後、図８のブロック２１２で示すように、使用カウントがデクリメントされる。図８のブロック２１４と同様に、デクリメントされた使用カウントがゼロになることで、読出し要求またはフラッシュ動作（本明細書では、まとめてデータアクセス要求と呼ばれる）のいずれも（ＢＢＩＤにより識別された）物理位置に対して待ち状態でないことが示されると、物理位置がフリーリストに戻され、対応するキャッシュセグメントリスト要素の有効ビットがディアサートされる。
【００４４】
図６Ａ〜図６Ｂ、図７Ａ〜図７Ｂ、図８、および図９のフロー図は記載された方法の根底にある論理について、例示的または例証的であるように意図されたに過ぎないことを理解すべきである。さまざまな実施形態において、ストレージサブシステムは記載された方法を実行するために任意のさまざまな方法で構成され得ることを、当業者ならば理解し得る。いくつかの実施形態において、図６Ａ〜図６Ｂ、図７Ａ〜図７Ｂ、図８、および図９に関して上述したステップまたは動作は、互いに並行して行なわれること、および非同期的に行なわれることを含む如何なる好適な順序またはシーケンスで行なわれてもよい。いくつかの実施形態において、上述したステップまたは動作は他のものと組合されてもよく、または省略されてもよい。明確化のために、図１の個々の処理要素ならびに図６Ａ〜図６Ｂ、図７Ａ〜図７Ｂ、図８、および図９の個々のフロー図の形態で示したが、根底にある論理は、如何なる好適な態様でハードウェア要素またはソフトウェア要素の任意の組合せの中でモジュール化または分配されてもよい。
【００４５】
本発明の原理および概念を示すために、１つ以上の例示的な実施形態を参照して本発明が説明されたことに留意すべきである。本発明はこれらの実施形態に限定されない。当業者ならば理解するであろうが、本明細書で提供された説明を考慮して、本明細書に記載の実施形態に対して多くの変形がなされ得て、すべてのそのような変形例は本発明の範囲内である。
【符号の説明】
【００４６】
１０  ストレージサブシステム、１２  ホストシステム、１４  バックエンドストレージ、１６、１８、２０  物理ストレージデバイス、２２  ストライプ、２４  キャッシュメモリ、２６  ＣＰＵ、２８  ワーキングメモリ、３０  メッセージプロセッサ、３２  コマンドプロセッサ、３４  キャッシュプロセッサ、３６  バッファプロセッサ、３８  バックエンドプロセッサ、４０  ＤＭＡエンジン、４２  システムインターコネクト、４４  ホストインターフェイス、４６  ストレージインターフェイス。
【図１】
2017151982.tif 000003
【図２】
2017151982.tif 000004
【図３】
2017151982.tif 000005
【図４】
2017151982.tif 000006
【図５】
2017151982.tif 000007
【図６Ａ】
2017151982.tif 000008
【図６Ｂ】
2017151982.tif 000009
【図７Ａ】
2017151982.tif 000010
【図７Ｂ】
2017151982.tif 000011
【図８】
2017151982.tif 000012
【図９】
2017151982.tif 000013
【外国語明細書】
2017151982000001.pdf