(57)【特許請求の範囲】
【請求項１】
インメモリデータ構造を生成するための方法であって、
ブロックを選択することを含み、選択された前記ブロックは、論理アドレスと第１のページの識別子とを含むテーブル・オブ・コンテンツエントリを含むページを含み、
前記方法はさらに、
選択された前記ブロックにおける最後のページを取得することと、
前記最後のページから前記テーブル・オブ・コンテンツエントリを抽出することと、
物理アドレスと抽出された前記テーブル・オブ・コンテンツエントリを使用して前記インメモリデータ構造にポピュレートすることとを含み、
抽出された前記テーブル・オブ・コンテンツエントリは前記物理アドレスの全体を含まない、方法。
【請求項２】
抽出された前記テーブル・オブ・コンテンツエントリを使用して前記インメモリデータ構造にポピュレートすることは、前記テーブル・オブ・コンテンツエントリから前記第１のページの識別子およびバイト情報を抽出することを含む、請求項１に記載の方法。
【請求項３】
抽出された前記テーブル・オブ・コンテンツエントリを使用して前記インメモリデータ構造にポピュレートすることは、抽出された前記第１のページの識別子および前記バイト情報を使用して前記物理アドレスを取得することをさらに含む、請求項２に記載の方法。
【請求項４】
前記物理アドレスはさらにｎタプルを使用して取得され、前記ｎタプルは、＜ストレージモジュール，チャンネル，チップイネーブル，ＬＵＮ，プレーン，ブロック＞からなる、請求項３に記載の方法。
【請求項５】
抽出された前記テーブル・オブ・コンテンツエントリを使用して前記インメモリデータ構造にポピュレートすることは、前記テーブル・オブ・コンテンツエントリからオブジェクト識別子およびオフセット識別子を抽出することを含む、請求項１に記載の方法。
【請求項６】
抽出された前記テーブル・オブ・コンテンツエントリを使用して前記インメモリデータ構造にポピュレートすることは、ハッシュ値を取得するために、＜オブジェクト識別子，オフセット識別子＞からなるｎタプルにハッシュ関数を適用することをさらに含む、請求項５に記載の方法。
【請求項７】
抽出された前記テーブル・オブ・コンテンツエントリを使用して前記インメモリデータ構造にポピュレートすることは、
前記ハッシュ値と前記物理アドレスとを使用してマッピングを取得することと、
前記マッピングを使用して前記インメモリデータ構造にポピュレートすることとをさらに含む、請求項６に記載の方法。
【請求項８】
前記物理アドレスは前記第１のページの識別子およびバイト情報を使用して取得され、前記第１のページの識別子および前記バイト情報は前記テーブル・オブ・コンテンツエントリから抽出される、請求項７に記載の方法。
【請求項９】
抽出された前記テーブル・オブ・コンテンツエントリを使用して前記インメモリデータ構造にポピュレートすることは、前記テーブル・オブ・コンテンツエントリからオブジェクト識別子、オフセット識別子および発生時間を抽出することをさらに含む、請求項５に記載の方法。
【請求項１０】
抽出された前記テーブル・オブ・コンテンツエントリを使用して前記インメモリデータ構造にポピュレートすることは、ハッシュ値を取得するために、＜オブジェクト識別子，オフセット識別子，発生時間＞からなるｎタプルにハッシュ関数を適用することをさらに含む、請求項９に記載の方法。
【請求項１１】
抽出された前記テーブル・オブ・コンテンツエントリを使用して前記インメモリデータ構造にポピュレートすることは、
前記ハッシュ値と前記物理アドレスとを使用してマッピングを取得することと、
前記マッピングを使用して前記インメモリデータ構造にポピュレートすることとをさらに含む、請求項１０に記載の方法。
【請求項１２】
前記物理アドレスは前記第１のページの識別子およびバイト情報を使用して取得され、前記第１のページの識別子および前記バイト情報は前記テーブル・オブ・コンテンツエントリから抽出される、請求項１１に記載の方法。
【請求項１３】
取得された前記最後のページから、第２のテーブル・オブ・コンテンツページへの参照を抽出することと、
抽出された前記第２のテーブル・オブ・コンテンツページを使用して前記インメモリデータ構造にさらにポピュレートすることとをさらに含む、請求項１に記載の方法。
【請求項１４】
前記第２のテーブル・オブ・コンテンツページを使用して前記インメモリデータ構造にさらにポピュレートすることは、前記第２のテーブル・オブ・コンテンツページが格納される第２のブロックから第２のテーブル・オブ・コンテンツエントリを抽出することを含む、請求項１３に記載の方法。
【請求項１５】
前記ブロックはソリッドステートメモリに格納され、前記インメモリデータ構造はメモリに格納される、請求項１に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
背景
システムが持続性ストレージにデータを書き込みかつ持続性ストレージからデータを読み出し得るスピードはしばしば、システムの全体の性能の重大なファクタである。持続性ストレージからのデータの読み出しおよび持続性ストレージへのデータの書き込みの従来のアプローチは、システムカーネルにおける複数のレイヤーおよびハードウェアにおける複数のエンティティによる処理を必要とする。結果として、持続性ストレージからのデータの読み出しおよび持続性ストレージへのデータの書き込みによって、システムにおいて著しいレイテンシーが導入され、その結果、システムの全体の性能が低減される。
【発明の概要】
【課題を解決するための手段】
【０００２】
概要
一般に、１つの局面において、データを格納するための方法である。この方法は、第１の論理アドレスを使用して規定される第１のデータを持続性ストレージに書き込む要求を受け取るステップと、上記持続性ストレージにおいて、第１のブロックＩＤおよび第１のサブブロックＩＤを含む第１の物理アドレスを決定するステップと、上記第１の物理アドレスに上記第１のデータを書き込むステップと、上記第１の論理アドレスおよび上記第１のサブブロックＩＤを含む第１のテーブル・オブ・コンテンツエントリ（ＴＥ）を生成するステップと、上記持続性ストレージにおいて、上記第１のブロックＩＤおよび第２のサブブロックＩＤを含む第２の物理アドレスに上記第１のＴＥを書き込むステップとを含み、第２のサブブロックが上記第２のサブブロックＩＤに対応し、上記第２のサブブロックは上記第１のブロックＩＤに対応する第１のブロック内に配置される。
【０００３】
一般に、１つの局面では、本発明は、データを格納するための方法に関し、この方法は、第１の論理アドレスを使用して規定される第１のデータを持続性ストレージに書き込む要求を受け取るステップと、持続性ストレージにおいて、第１のブロックＩＤおよび第１のページＩＤを含む第１の物理アドレスを決定するステップと、上記第１のデータのコピーを含む第１のフラグを上記第１の物理アドレスに書き込むステップと、上記第１の論理アドレスおよび上記第１のページＩＤを含む第１のテーブル・オブ・コンテンツエントリ（ＴＥ）を生成するステップと、第２の論理アドレスを使用して規定される第２のデータを上記持続性ストレージに書き込む要求を受け取るステップと、上記持続性ストレージにおいて、上記第１のブロックＩＤおよび第２のページＩＤを含む第２の物理アドレスを決定するステップと、上記第２のデータのコピーを含む第２のフラグを上記第２の物理アドレスに書き込むステップと、上記第１の論理アドレスおよび上記第２のページＩＤを含む第２のＴＥを生成するステップと、上記第１のＴＥおよび上記第２のＴＥを含むテーブル・オブ・コンテンツ（ＴＯＣ）ページを生成するステップと、上記持続性ストレージにおいて、上記第１のブロックＩＤおよび第３のページＩＤを含む第３の物理アドレスに上記ＴＯＣページを書き込むステップとを含む。
【０００４】
一般に、１つの局面では、本発明は、インメモリデータ構造にポピュレートするための方法に関する。この方法は、（ａ）持続性ストレージにおいて第１のブロックを選択するステップと、（ｂ）上記第１のブロックにおいて最後のページを抽出するステップとを含み、上記第１のブロックは第１のブロックＩＤに関連付けられており、上記方法はさらに、（ｃ）上記第１のブロックにおいて、第１のデータについての第１の論理アドレス、および上記第１のデータが配置される上記第１のブロックにおけるページに対応する第１の
ページＩＤを含む第１のテーブル・オブ・コンテンツエントリ（ＴＥ）を上記最後のページから抽出するステップと、（ｄ）上記第１のブロックＩＤおよび上記第１のページＩＤを使用して、上記第１のデータについて第１の物理アドレスを生成するステップと、（ｅ）第１のハッシュ値を取得するよう上記第１の論理アドレスをハッシングするステップと、（ｆ）上記第１のハッシュ値と上記第１の物理アドレスとの間の第１のマッピングを上記インメモリデータ構造にポピュレートするステップとを含む。
【０００５】
本発明の他の局面は、以下の記載および添付の特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【０００６】
【図１Ａ】本発明の１つ以上の実施形態に従ったシステムを示す図である。
【図１Ｂ】本発明の１つ以上の実施形態に従ったシステムを示す図である。
【図１Ｃ】本発明の１つ以上の実施形態に従ったシステムを示す図である。
【図１Ｄ】本発明の１つ以上の実施形態に従ったシステムを示す図である。
【図１Ｅ】本発明の１つ以上の実施形態に従ったシステムを示す図である。
【図２Ａ】本発明の１つ以上の実施形態に従ったストレージ機器を示す図である。
【図２Ｂ】本発明の１つ以上の実施形態に従ったストレージ機器を示す図である。
【図２Ｃ】本発明の１つ以上の実施形態に従ったストレージ機器を示す図である。
【図２Ｄ】本発明の１つ以上の実施形態に従ったストレージ機器を示す図である。
【図３】本発明の１つ以上の実施形態に従ったストレージモジュールを示す図である。
【図４Ａ】本発明の１つ以上の実施形態に従ったストレージモジュールを示す図である。
【図４Ｂ】本発明の１つ以上の実施形態に従ったブロックを示す図である。
【図４Ｃ】本発明の１つ以上の実施形態に従ったフラグページを示す図である。
【図４Ｄ】本発明の１つ以上の実施形態に従ったＴＯＣページを示す図である。
【図４Ｅ】本発明の１つ以上の実施形態に従ったブロックを示す図である。
【図４Ｆ】本発明の１つ以上の実施形態に従ったテーブル・オブ・コンテンツ（ＴＯＣ）エントリを示す図である。
【図５】本発明の１つ以上の実施形態に従ったデータ構造を示す図である。
【図６Ａ】本発明の１つ以上の実施形態に従ったフローチャートを示す図である。
【図６Ｂ】本発明の１つ以上の実施形態に従ったフローチャートを示す図である。
【図６Ｃ】本発明の１つ以上の実施形態に従ったフローチャートを示す図である。
【図７Ａ】本発明の１つ以上の実施形態に従った例を示す図である。
【図７Ｂ】本発明の１つ以上の実施形態に従った例を示す図である。
【図７Ｃ】本発明の１つ以上の実施形態に従った例を示す図である。
【図７Ｄ】本発明の１つ以上の実施形態に従った例を示す図である。
【図７Ｅ】本発明の１つ以上の実施形態に従った例を示す図である。
【図８】本発明の１つ以上の実施形態に従ったフローチャートを示す図である。
【発明を実施するための形態】
【０００７】
詳細な説明
ここで、本発明の特定の実施形態を添付の図面を参照して詳細に記載する。本発明の実施形態の以下の詳細な説明において、本発明のより完全な理解を提供するために多くの特定の詳細が記載される。しかしながら、本発明がこれらの特定の詳細がなくても実施されてもよいことは当業者には明らかであろう。他の例では、説明を不必要に複雑にすることを回避するよう周知の機構は詳細に記載されない。
【０００８】
図１Ａ〜図８の以下の説明では、本発明のさまざまな実施形態において図に関して記載
される任意の構成要素は、任意の他の図に関して記載された同様の名称を有する１つ以上の構成要素と同等であり得る。簡潔さのために、これらの構成要素の説明は、各図に関して繰り返されない。したがって、各図の構成要素の各実施形態は、参照により援用され、同様の名称を有する１つ以上の構成要素を有する他のすべての図内に随意に存在すると想定される。さらに、本発明のさまざまな実施形態に従うと、ある図の構成要素の如何なる記載も、任意の他の図中の対応する同様の名称を有する構成要素に関して記載された実施形態に加えて、当該実施形態に関連して、または当該実施形態の代わりに実施されてもよい随意の実施形態として解釈されるべきである。
【０００９】
一般に、本発明の実施形態はストレージシステムに関する。より具体的には、本発明の実施形態は、自己記述型データを含むストレージシステムに関する。さらに、本発明の実施形態は、ストレージシステムに格納されるユーザデータにアクセスするのに必要なメタデータがすべて、それが記述しているユーザデータとともに配置されるストレージシステムに関する。さらに、メタデータは、インメモリデータ構造にポピュレートするよう使用される。当該インメモリデータ構造は、ストレージシステムがインメモリデータ構造のみを使用して、直接的にユーザデータにアクセスすることを可能にする。
【００１０】
図１Ａ〜図１Ｅは、本発明の１つ以上の実施形態に従ったシステムを示す。図１Ａを参照して、システムは、ストレージ機器（１０２）に動作可能に接続される１つ以上のクライアント（クライアントＡ（１００Ａ），クライアントＭ（１００Ｍ）））を含む。
【００１１】
本発明の一実施形態において、クライアント（１００Ａ，１００Ｍ）は、ストレージ機器（１０２）に読出要求を発行するおよび／またはストレージ機器（１０２）に書込要求を発行する機能を含む任意のシステムに対応する。図１Ａに示されないが、クライアント（１００Ａ，１００Ｍ）の各々は、クライアントプロセッサおよびクライアントメモリを含み得る。クライアントにおけるコンポーネントに関する付加的な詳細は、以下の図１Ｄにおいて記載される。本発明の一実施形態において、クライアント（１００Ａ，１００Ｍ）は、Peripheral Component Interconnect（ＰＣＩ）、PCI-Express（ＰＣＩｅ）、PCI-eXtended（ＰＣＩ−Ｘ）、Non-Volatile Memory Express（ＮＶＭｅ）、Non-Volatile Memory Express(NVMe) over a PCI-Express fabric、Non-Volatile Memory Express (NVMe)
over an Ethernet fabric、Non-Volatile Memory Express (NVMe) over an Infiniband fabricといったプロトコルの１つ以上を使用してストレージ機器（１０２）と通信するように構成される。当業者であれば、本発明は上記のプロトコルに限定されないということを理解するであろう。
【００１２】
本発明の１つ以上の実施形態において、クライアントがＰＣＩ、ＰＣＩ−ｅｘｐｒｅｓｓまたはＮＶＭｅを実施する場合、クライアントはルートコンプレックス（root complex）（図示せず）を含む。本発明の一実施形態において、ルートコンプレックスは、クライアントプロセッサおよびクライアントメモリをＰＣＩｅファブリックに接続するデバイスである。本発明の一実施形態において、ルートコンプレックスはクライアントプロセッサに統合される。
【００１３】
本発明の一実施形態において、ＰＣＩｅファブリックは、スイッチ（たとえば図１Ｄにおけるクライアントスイッチ（１１６）およびたとえば図２Ａにおけるスイッチファブリック（２０６）のようなスイッチファブリック内のスイッチ）を介して接続されるルートコンプレックスおよびエンドポイントを含む。本発明の一実施形態では、エンドポイントは、ＰＣＩトランザクション（たとえば読出要求、書込要求）を発生させ得るかまたはＰＣＩトランザクションのターゲットである、ルートコンプレックスまたはスイッチ以外のデバイスである。
【００１４】
本発明の一実施形態において、単一のクライアントおよび単一のストレージ機器は単一のＰＣＩｅファブリックの一部と考えられ得る。本発明の別の実施形態において、１つ以上のクライアントおよび１つ以上のストレージ機器の任意の組合せは、単一のＰＣＩｅファブリックの一部と考えられ得る。さらに、ＰＣＩｅを使用してストレージ機器内の個々のコンポーネントが通信するとともにＰＣＩｅを使用してクライアントにおける個々のコンポーネント（図１Ｄ参照）が通信する場合、ストレージ機器およびクライアントにおけるすべてのコンポーネントは単一のＰＣＩｅファブリックの一部と考えられ得る。当業者であれば、本発明から逸脱することがなければ、本発明のさまざまな実施形態が別のタイプのファブリックを使用して実現されてもよいことを理解するであろう。
【００１５】
引き続き図１Ａを参照して、本発明の一実施形態において、ストレージ機器（１０２）は、揮発性および持続性のストレージを含むシステムであり、１つ以上のクライアント（１００Ａ，１００Ｍ）からの読出要求および／または書込要求を処理するように構成される。ストレージ機器（１０２）のさまざまな実施形態が以下の図２Ａ〜図２Ｄに記載される。
【００１６】
図１Ｂを参照して、図１Ｂは、クライアント（１００Ａ，１００Ｍ）が（図１Ｂにおいてストレージ機器メッシュ（１０４）として示される）メッシュ構成で配される複数のストレージ機器（１０４Ａ，１０４Ｂ，１０４Ｃ，１０４Ｄ）に接続されるシステムを示す。図１Ｂに示されるように、ストレージ機器メッシュ（１０４）は、完全接続のメッシュ構成（fully-connected mesh configuration）にある、すなわち、ストレージ機器メッシュ（１０４）におけるすべてのストレージ機器（１０４Ａ，１０４Ｂ，１０４Ｃ，１０４Ｄ）がストレージ機器メッシュ（１０４）におけるすべての他のストレージ機器（１０４Ａ，１０４Ｂ，１０４Ｃ，１０４Ｄ）に直接的に接続されるのが示される。本発明の一実施形態において、クライアント（１００Ａ，１００Ｍ）の各々は、ストレージ機器メッシュ（１０４）における１つ以上のストレージ機器（１０４Ａ，１０４Ｂ，１０４Ｃ，１０４Ｄ）に直接的に接続され得る。当業者であれば、本発明から逸脱することがなければ、ストレージ機器メッシュは、他のメッシュ構成（たとえば部分接続メッシュ（partially connected mesh））を使用して実現され得るということを理解するであろう。
【００１７】
図１Ｃを参照して、図１Ｃは、ファンアウト構成（fan-out configuration）に配され
る複数のストレージ機器（１０４Ａ，１０４Ｂ，１０４Ｃ，１０４Ｄ）にクライアント（１００Ａ，１００Ｍ）が接続されるシステムを示す。この構成では、各クライアント（１００Ａ，１００Ｍ）は、ストレージ機器（１０４Ａ，１０４Ｂ，１０４Ｃ，１０４Ｄ）の１つ以上に接続されるが、個々のストレージ機器（１０４Ａ，１０４Ｂ，１０４Ｃ，１０４Ｄ）同士の間に通信は存在しない。
【００１８】
図１Ｄを参照して、図１Ｄは、本発明の１つ以上の実施形態に従ったクライアントを示す。図１Ｄに示されるように、クライアント（１１０）は、クライアントプロセッサ（１１２）と、クライアントメモリ（１１４）と、クライアントスイッチ（１１６）とを含む。これらのコンポーネントの各々は以下に記載される。
【００１９】
本発明の一実施形態において、クライアントプロセッサ（１１２）は、命令を実行するように構成される単一のコアまたは複数のコアを有する電子回路のグループである。本発明の一実施形態において、クライアントプロセッサ（１１２）は、複合命令セット（Complex Instruction Set（ＣＩＳＣ））アーキテクチャまたは縮小命令セット（Reduced Instruction Set（ＲＩＳＣ））アーキテクチャを使用して実現され得る。本発明の１つ以上の実施形態において、クライアントプロセッサ（１１２）は、（ＰＣＩｅプロトコルによって規定されるように）ルートコンプレックスを含む（図示せず）。本発明の一実施形態において、クライアント（１１０）が（クライアントプロセッサ（１１２）へ統合され得
る）ルートコンプレックスを含んでいれば、クライアントメモリ（１１４）は、ルートコンプレックスを介してクライアントプロセッサ（１１２）に接続される。代替的には、クライアントメモリ（１１４）は、別のポイント・ツー・ポイント接続メカニズムを使用して、クライアントプロセッサ（１１２）に直接的に接続される。本発明の一実施形態において、クライアントメモリ（１１４）は、任意の揮発性メモリに対応する。当該揮発性メモリは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、シンクロナスＤＲＡＭ、ＳＤＲ  ＳＤＲＡＭおよびＤＤＲ  ＳＤＲＡＭを含むが、これらに限定されない。
【００２０】
本発明の一実施形態では、クライアントメモリ（１１４）は、クライアントプロセッサについての送信キューと、クライアントプロセッサについての完了キューとのうちの１つ以上を含む。本発明の一実施形態において、ストレージ機器メモリは、ファブリックを通じてクライアントに見えるクライアントプロセッサについての１つ以上の送信キューを含み、クライアントメモリは、ファブリックを通じてストレージ機器に見えるクライアントプロセッサについての１つ以上の完了キューを含む。本発明の一実施形態において、クライアントプロセッサについての送信キューは、クライアントプロセッサにコマンド（たとえば読出要求、書込要求）を送信するよう使用される。本発明の一実施形態において、クライアントプロセッサについての完了キューは、別のエンティティに発行したコマンドが完了したことを、クライアントプロセッサに信号通知するよう使用される。本発明の実施形態は、本発明から逸脱することがなければ、他の通知メカニズムを使用して実現されてもよい。
【００２１】
本発明の一実施形態において、クライアントスイッチ（１１６）は単一のスイッチのみを含む。本発明の別の実施形態において、クライアントスイッチ（１１６）は、複数の相互接続されたスイッチを含む。クライアントスイッチ（１１６）が複数のスイッチを含んでいる場合、各スイッチは他のすべてのスイッチに接続されてもよく、スイッチファブリックにおけるスイッチのサブセットに接続されてもよく、または１つの他のスイッチにのみ接続されてもよい。本発明の一実施形態において、クライアントスイッチ（１１６）におけるスイッチの各々は、データおよびメッセージがクライアント（１１０）とストレージ機器（図示せず）との間で転送されることを可能にするように構成される、ハードウェアおよび（たとえば集積回路を使用して実現される）（スイッチファブリックが実施するプロトコルによって規定されるような）ロジックの組み合わせである。
【００２２】
本発明の一実施形態において、クライアント（１００Ａ，１００Ｍ）がＰＣＩ、ＰＣＩｅまたはＰＣＩ−Ｘのうち１つ以上のプロトコルを実施する場合、クライアントスイッチ（１１６）はＰＣＩスイッチである。
【００２３】
このような実施形態では、クライアントスイッチ（１１６）は、多くのポートを含み、各ポートはトランスペアレントなブリッジまたはノントランスペアレントなブリッジとして構成され得る。トランスペアレントなブリッジとして実施されるポートは、ルートコンプレックスが、ポートに（直接的にまたは間接的に）接続されたデバイス（他のルートコンプレックス、スイッチ、ＰＣＩブリッジまたはエンドポイントであってもよい）の発見を継続することを可能にする。対照的に、ルートコンプレックスがノントランスペアレントなブリッジとして実施されたポートに直面すると、ルートコンプレックスは、ポートに接続されたデバイスの発見を継続することができず、むしろ、ルートコンプレックスは、このようなポートをエンドポイントとして扱う。
【００２４】
ポートがノントランスペアレントなブリッジとして実施される場合、ノントランスペアレントなブリッジのいずれかの側上のデバイスは、メールボックスシステムおよびドアベル割込（doorbell interrupt）（クライアントスイッチによって実現される）を用いてのみ通信し得る。ドアベル割込は、ノントランスペアレントなブリッジの一方の側のプロセ
ッサがノントランスペアレントなブリッジの他方の側のプロセッサに割込を発行するのを可能にする。さらに、メールボックスシステムは、スイッチファブリックのいずれかの側のプロセッサによって読出可能および書込可能である１つ以上のレジスタを含む。上記のレジスタは、クライアントスイッチのいずれかの側のプロセッサがノントランスピアレントなブリッジに亘って制御および状態情報を通過させるのを可能にする。
【００２５】
本発明の一実施形態において、ノントランスペアレントなブリッジの一方の側のデバイスからノントランスペアレントなブリッジの他方の側のデバイスにＰＣＩトランザクションを送信するために、ＰＣＩトランザクションはノントランスペアレントなブリッジを実現するポートへアドレス指定されなければならない。ＰＣＩトランザクションの受信の際、クライアントスイッチは、（直接アドレス変換メカニズムまたはルックアップテーブルに基づいた変換メカニズムのいずれかを使用して）アドレス変換を行なう。次いで、結果得られるアドレスはノントランスペアレントなブリッジの他の側の適切なデバイスに向かうようパケットをルーティングするよう使用される。
【００２６】
本発明の一実施形態において、クライアントスイッチ（１１６）は、クライアントメモリ（１１４）の少なくともある部分がストレージ機器に直接的にアクセス可能であるように構成される。換言すると、クライアントスイッチの一方の側上のストレージ機器は、クライアントスイッチを介して、クライアントスイッチの他方の側上のクライアントメモリに直接的にアクセスし得る。
【００２７】
本発明の一実施形態では、クライアントスイッチ（１１６）はＤＭＡエンジン（１１８）を含む。本発明の一実施形態において、ＤＭＡエンジン（１１８）は、クライアントプロセッサかまたはクライアントスイッチに接続されたストレージ機器のいずれかによってプログラムされ得る。上で論じたように、クライアントスイッチ（１１６）は、クライアントメモリ（１１４）の少なくともある部分がストレージ機器またはストレージモジュールにアクセス可能であるように構成される。したがって、ＤＭＡエンジン（１１８）は、ストレージ機器にアクセス可能であるクライアントメモリの当該部分におけるアドレスからデータを読み出し、かつストレージ機器またはストレージモジュールにおいてメモリにこのようなデータのコピーを直接的に書き込むようにプログラムされ得る。さらに、ＤＭＡエンジン（１１８）は、ストレージ機器からデータを読み出し、ストレージ機器にアクセス可能であるクライアントメモリの当該部分におけるアドレスにこのようなデータのコピーを直接的に書き込むようにプログラムされ得る。
【００２８】
本発明の一実施形態では、ＤＭＡエンジン（１１８）はマルチキャスティングをサポートする。このような実施形態において、ストレージ機器におけるプロセッサ（図２Ａ参照）は、マルチキャストグループを作成し得る。当該マルチキャストグループの各メンバーは、ストレージ機器上のメモリにおけるユニークな宛先アドレスに対応する。マルチキャストグループの各メンバーは、（ｉ）宛先アドレス、（ｉｉ）ソースアドレス、（ｉｉｉ）転送サイズフィールド、および（ｉｖ）制御フィールドを特定する記述子に関連付けられる。記述子の各々についてのソースアドレスは一定のままである一方、宛先アドレスは各記述子について変化する。ひとたびマルチキャストグループが作られると、ＤＭＡエンジンによって開始された転送を含む、マルチキャストグループアドレスをターゲットとするスイッチを通じた如何なるデータ転送によっても、マルチキャストグループに関連付けられる宛先ポートのすべてにデータの同一のコピーが配置される。本発明の一実施形態において、スイッチは、マルチキャストグループ記述子のすべてを並列に処理する。
【００２９】
図１Ｄの議論を継続して、当業者であれば、図１Ｄはクライアント（１１０）に位置するクライアントスイッチ（１１６）を示しているが、本発明から逸脱することがなければ、クライアントスイッチ（１１６）はクライアントの外部に配置されてもよいということ
を理解するであろう。さらに、当業者であれば、本発明から逸脱することがなければ、ＤＭＡエンジン（１１８）はクライアントスイッチ（１１６）の外部に配置されてもよいということを理解するであろう。
【００３０】
図１Ｅを参照して、図１Ｅは、メッシュ構成（図１Ｅにおいてストレージ機器メッシュ（１０４）として示される）に配される複数のストレージ機器（１０４Ａ，１０４Ｂ，１０４Ｃ，１０４Ｄ）にクライアントスイッチ（１０８）を介してクライアント（１００Ａ，１００Ｍ）が接続されるシステムを示す。図１Ｅに示される実施形態では、各クライアント（１００Ａ，１００Ｍ）は自身のクライアントスイッチを含んでおらず、クライアントのすべては、クライアントスイッチ（１０８）を共有する。図１Ｅに示されるように、ストレージ機器メッシュ（１０４）は、完全接続のメッシュ構成で示される。すなわち、ストレージ機器メッシュ（１０４）におけるすべてのストレージ機器（１０４Ａ，１０４Ｂ，１０４Ｃ，１０４Ｄ）は、ストレージ機器メッシュ（１０４）におけるその他のすべてのストレージ機器（１０４Ａ，１０４Ｂ，１０４Ｃ，１０４Ｄ）に直接的に接続される。本発明の一実施形態では、クライアントスイッチ（１０８）は、ストレージ機器メッシュ（１０４）における１つ以上のストレージ機器（１０４Ａ，１０４Ｂ，１０４Ｃ，１０４Ｄ）に直接的に接続され得る。当業者であれば、本発明から逸脱することがなければ、ストレージ機器メッシュが他のメッシュ構成（たとえば部分接続メッシュ）を使用して実現され得るということを理解するであろう。
【００３１】
図１Ｅに示されないが、各クライアントは、自身のクライアントスイッチを（図１Ｄに示されるように）含んでもよいが、（以下に規定される）スイッチファブリックを使用して、ストレージ機器メッシュ（１０４）に接続されてもよい。
【００３２】
当業者であれば、図１Ａ〜図１Ｅは限られた数のクライアントに接続されるストレージ機器を示すが、本発明から逸脱することがなければ、ストレージ機器は如何なる数のクライアントに接続されてもよいということを理解するであろう。当業者であれば、図１Ａ〜図１Ｅはさまざまなシステム構成を示すが、本発明は上記のシステム構成に限定されないということを理解するであろう。さらに当業者であれば、本発明から逸脱することがなければ、クライアント（システムの構成にかかわらず）は、スイッチファブリック（図示せず）（以下に記載される）を使用して、ストレージ機器に接続され得るということを理解するであろう。
【００３３】
図２Ａ〜図２Ｄは、本発明の１つ以上の実施形態に従ったストレージ機器の実施形態を示す。図２Ａを参照して、ストレージ機器は、制御モジュール（２００）およびストレージモジュールグループ（２０２）を含む。これらのコンポーネントの各々は以下に記載される。一般に、制御モジュール（２００）は、１つ以上のクライアントからの読出要求および書込要求の処理を管理するように構成される。特に、制御モジュールは、（以下に論じられる）ＩＯＭを介して１つ以上のクライアントから要求を受け取り、要求を処理（ストレージモジュールに要求を送信することを含み得る）し、要求が処理された後にクライアントに応答を提供するよう構成される。制御モジュールにおけるコンポーネントに関する付加的な詳細は以下に含まれる。さらに、読出要求および書込要求の処理に関する制御モジュールの動作は、図４Ａ〜図７Ｃを参照して以下に記載される。
【００３４】
図２Ａの議論を継続して、本発明の一実施形態において、制御モジュール（２００）は、入力／出力モジュール（ＩＯＭ）（２０４）、スイッチファブリック（２０６）、プロセッサ（２０８）、メモリ（２１０）および随意にフィールドプログラマブルゲートアレイ（ＦＰＧＡ）（２１２）を含む。本発明の一実施形態において、ＩＯＭ（２０４）は、クライアント（図１Ａ〜図１Ｅにおいて１００Ａ，１００Ｍ）とストレージ機器における他のコンポーネントとの間の物理インタフェースである。ＩＯＭは、ＰＣＩ、ＰＣＩｅ、
ＰＣＩ−Ｘ、イーサネット（登録商標）（ＩＥＥＥ８０２．３ａ〜８０２．３ｂｊの下で規定されるさまざまな規格を含むがこれらに限定されない）、インフィニバンド、およびリモート・ダイレクト・メモリ・アクセス（ＲＤＭＡ）・オーバ・コンバージド・イーサネット（ＲｏＣＥ）（Remote Direct Memory Access over Converged Ethernet）といっ
たプロトコルの１つ以上をサポートする。当業者であれば、本発明から逸脱することがなければ、ＩＯＭは、上でリストされたもの以外のプロトコルを使用して実現されてもよいということを理解するであろう。
【００３５】
図２Ａの議論を継続して、スイッチファブリック（２０６）は単一のスイッチのみを含む。本発明の別の実施形態では、スイッチファブリック（２０６）は、複数の相互接続されたスイッチを含む。スイッチファブリック（２０６）が複数のスイッチを含んでいる場合、各スイッチは他のすべてのスイッチに接続され得るか、スイッチファブリックにおけるスイッチのサブセットに接続され得るか、または、スイッチファブリックにおける１つの他のスイッチにのみ接続され得る。本発明の一実施形態において、スイッチファブリック（２０６）におけるスイッチの各々は、ハードウェアと（スイッチファブリックが実施するプロトコルによって規定されるように）（たとえば集積回路を使用して実施される）ロジックとの組み合わせであり、ストレージ機器においてさまざまなコンポーネントを一緒に接続し、当該接続されたさまざまなコンポーネント同士の間でパケットを（当該ロジックを使用して）ルーティングするように構成される。本発明の一実施形態において、スイッチファブリック（２０６）は、ＩＯＭ（２０４）と、プロセッサ（２０８）と、ストレージモジュールグループ（２０２）と、存在していればＦＰＧＡ（２１２）とに物理的に接続される。本発明の一実施形態において、制御モジュール（２００）におけるすべてのコンポーネント間の通信（プロセッサ（２０８）とメモリ（２１０）との間は除く）は、スイッチファブリック（２０６）を通過する。さらに、制御モジュール（２００）とストレージモジュールグループ（２０２）との間のすべての通信はスイッチファブリック（２０６）を通過する。本発明の一実施形態では、スイッチファブリック（２０６）は、ＰＣＩプロトコル（たとえばＰＣＩ、ＰＣＩｅ、ＰＣＩ−Ｘ、または別のＰＣＩプロトコル）を使用して実施される。このような実施形態では、スイッチファブリック（２０６）を通過する通信はすべて、対応するＰＣＩプロトコルを使用する。
【００３６】
本発明の一実施形態において、スイッチファブリックがＰＣＩプロトコルを実施する場合、スイッチファブリック（２０６）は、プロセッサのためのポート（またはより具体的には、プロセッサ（２０８）に統合されたルートコンプレックスのためのポートもしくはプロセッサに接続されたルートコンプレックスのためのポート）と、ストレージモジュールグループ（２０２）におけるストレージモジュール（２１４Ａ，２１４Ｎ）（図３参照）のための１つ以上のポートと、ＦＰＧＡ（２１２）（存在する場合）のためのポートと、ＩＯＭ（２０４）のためのポートとを含む。本発明の１つ以上の実施形態において、上記のポートの各々は、（上で論じたように）トランスペアレントなブリッジまたはノントランスペアレントなブリッジとして構成され得る。当業者であれば、スイッチファブリック（２０６）がＰＣＩの実現例に関して記載されているが、本発明から逸脱することがなければ、スイッチファブリック（２０６）は他のプロトコルを使用して実現されてもよいということを理解するであろう。
【００３７】
本発明の一実施形態では、スイッチファブリック（２０６）における少なくとも１つのスイッチは、マルチキャスティングを実現するように構成される。より具体的には、本発明の一実施形態において、プロセッサ（２０８）はマルチキャストグループを生成するように構成される。当該マルチキャストグループは、２以上のメンバーを含んでおり、各メンバーは、メモリ（２１０）および／またはストレージモジュール（２１４Ａ，２１４Ｎ）におけるアドレスを特定する。マルチキャストグループが作られる場合、マルチキャストグループはマルチキャストアドレスに関連付けられる。マルチキャスティングを実施す
るために、スイッチファブリックにおける少なくとも１つのスイッチは以下のように構成される、すなわち、宛先アドレスとしてマルチキャストアドレスを特定する書込が受け取られると、当該スイッチがマルチキャストグループにおける各メンバーについて新しい書込を生成し、ストレージ機器における適切なアドレスに書込を発行するように構成される。本発明の一実施形態において、マルチキャストアドレスに特定のオフセットを加えることによって、スイッチによって生成される各書込についてのアドレスが決定される。
【００３８】
図２Ａを引き続き参照して、プロセッサ（２０８）は、命令を実行するように構成される単一のコアまたは複数のコアを有する電子回路のグループである。本発明の一実施形態において、プロセッサ（２０８）は、複合命令セット（Complex Instruction Set（ＣＩ
ＳＣ））アーキテクチャまたは縮小命令セット（Reduced Instruction Set（ＲＩＳＣ）
）アーキテクチャを使用して実現され得る。本発明の１つ以上の実施形態において、プロセッサ（２０８）は、（ＰＣＩｅプロトコルによって規定されるように）ルートコンプレックスを含む。本発明の一実施形態において、制御モジュール（２００）が（プロセッサ（２０８）へ統合され得る）ルートコンプレックスを含んでいれば、メモリ（２１０）は、ルートコンプレックスを介してプロセッサ（２０８）に接続される。代替的には、メモリ（２１０）は、別のポイント・ツー・ポイント接続メカニズムを使用して、プロセッサ（２０８）に直接的に接続される。本発明の一実施形態において、メモリ（２１０）は、任意の揮発性メモリに対応する。当該揮発性メモリは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、シンクロナスＤＲＡＭ、ＳＤＲ  ＳＤＲＡＭおよびＤＤＲ  ＳＤＲＡＭを含むが、これらに限定されない。
【００３９】
本発明の一実施形態において、プロセッサ（２０８）は、インメモリデータ構造（in-memory data structure）（図示せず）を作成し更新するように構成され、当該インメモリデータ構造はメモリ（２１０）に格納される。本発明の一実施形態において、インメモリデータ構造は、論理アドレスとストレージモジュールのセットにおける物理的なストレージアドレスとの間のマッピング（直接または間接）を含む。本発明の一実施形態では、論理アドレスは、データがクライアントの視点から見て存在するように思われるアドレスである。本発明の一実施形態では、論理アドレスは、ｎタプルにハッシュ関数（たとえばＳＨＡ−１、ＭＤ−５など）を適用することによって生成されるハッシュ値である（または当該ハッシュ値を含む）。本発明の一実施形態では、ｎタプルは＜オブジェクトＩＤ，オフセットＩＤ＞であり、オブジェクトＩＤはファイルを規定し、オフセットＩＤはファイルの開始アドレスに対する位置を規定する。本発明の別の実施形態において、ｎタプルは＜オブジェクトＩＤ，オフセットＩＤ，発生時間＞であり、発生時間は、（オブジェクトＩＤを使用して識別される）ファイルが作成された時間に対応する。代替的には、論理アドレスは、論理オブジェクトＩＤおよび論理バイトアドレスか、または論理オブジェクトＩＤおよび論理アドレスオフセットを含んでもよい。本発明の別の実施形態では、論理アドレスは、オブジェクトＩＤおよびオフセットＩＤを含む。当業者であれば、複数の論理アドレスが単一の物理アドレスにマッピングされてもよく、論理アドレスは上記の実施形態に限定されないということを理解するであろう。
【００４０】
本発明の一実施形態において、物理アドレスは、（ｉ）メモリ（２１０）における位置、（ｉｉ）ボールテッドメモリ（vaulted memory）（たとえば図３の３２４）における位置、または（ｉｉｉ）ソリッドステートメモリモジュール（たとえば図３の中の３３０Ａ）における位置に対応し得る。本発明の一実施形態において、インメモリデータ構造は、ストレージ機器にデータの複数のコピーが存在する場合、単一のハッシュ値を複数の物理アドレスにマッピングし得る。
【００４１】
本発明の一実施形態では、メモリ（２１０）は、プロセッサについての送信キュー、プロセッサについての完了キュー、ストレージ機器におけるストレージモジュールの各々に
ついての送信キュー、およびストレージ機器におけるストレージモジュールの各々についての完了キューの１つ以上を含む。本発明の一実施形態では、プロセッサについての送信キューは、コマンド（たとえば読出要求、書込要求）をプロセッサに送信するよう使用される。本発明の一実施形態において、プロセッサについての完了キューは、別のエンティティに発行したコマンドが完了したことを、プロセッサに信号通知するよう使用される。ストレージモジュールについての送信キューおよび完了キューは同様の態様で機能する。
【００４２】
本発明の一実施形態では、（スイッチファブリックを介する）プロセッサは、ＦＰＧＡ（２１２）にさまざまなタイプの処理をオフロードするように構成される。本発明の一実施形態では、ＦＰＧＡ（２１２）は、ストレージモジュールに書き込まれているデータおよび／またはストレージモジュールから読み出されているデータについてチェックサムを計算する機能を含む。さらに、ＦＰＧＡ（２１２）は、ＲＡＩＤスキーム（たとえばＲＡＩＤ２〜ＲＡＩＤ６）を使用してストレージモジュールにデータを格納するためにＰおよび／もしくはＱパリティー情報を計算する機能、ならびに／またはＲＡＩＤスキーム（たとえばＲＡＩＤ２〜ＲＡＩＤ６）を使用して格納された破損データを回復するのに必要なさまざまな計算を行なう機能を含み得る。本発明の一実施形態において、ストレージモジュールグループ（２０２）は、データを格納するよう各々が構成される１つ以上のストレージモジュール（２１４Ａ，２１４Ｎ）を含む。ストレージモジュールは、以下に図３において記載される。
【００４３】
本発明の一実施形態では、プロセッサ（２０８）は、システムにおいて１つ以上のＤＭＡエンジンをプログラムするように構成される。たとえば、プロセッサ（２０８）はクライアントスイッチにおけるＤＭＡエンジンをプログラムするように構成される（図１Ｄ参照）。プロセッサ（２０８）はさらに、ストレージモジュールにおけるＤＭＡエンジンをプログラムするように構成され得る（図３参照）。本発明の一実施形態において、クライアントスイッチにおけるＤＭＡエンジンをプログラムすることは、マルチキャストグループを作ることと、当該マルチキャストグループにおけるメンバーの各々について記述子を生成することとを含み得る。
【００４４】
図２Ｂを参照して、図２Ｂは、本発明の１つ以上の実施形態に従ったストレージ機器を示す図である。ストレージ機器は、制御モジュール（２１６）と、少なくとも２つのストレージモジュールグループ（２３６，２３８）とを含む。制御モジュール（２１６）は、ＩＯＭ  Ａ（２１８）と、ＩＯＭ  Ｂ（２２０）と、プロセッサＡ（２２２）と、プロセッサＢ（２２４）と、（存在する場合）ＦＰＧＡ  Ａ（２３０）と、（存在する場合）ＦＰＧＡ  Ｂ（２３２）と、ストレージモジュールグループＡ（２３６）におけるストレージモジュール（２３６Ａ，２３６Ｎ）と、ストレージモジュールグループＢ（２３８）におけるストレージモジュール（２３８Ａ，２３８Ｎ）とに直接的に接続されるスイッチファブリック（２３４）を含む。上記のコンポーネント間のすべての通信（プロセッサＡ（２２２）とプロセッサＢ（２２４）との間以外）はスイッチファブリック（２３４）を通過する。本発明の一実施形態では、制御モジュール（２１６）内のプロセッサ（２２２，２２４）は、たとえばインテル（登録商標）ＱｕｉｃｋＰａｔｈインターコネクト（Intel QuickPath Interconnect）のようなポイント・ツー・ポイント相互接続を使用して直接的に通信することができる。当業者であれば、本発明から逸脱することがなければ、他のポイント・ツー・ポイント通信メカニズムがプロセッサ（２２２，２２４）間の直接的な通信を可能にするよう使用されてもよいということを理解するであろう。
【００４５】
図２Ｂを引き続き参照して、本発明の一実施形態において、制御モジュール（２１６）は、図２Ａにおける制御モジュール（２００）と実質的に同様である。本発明の一実施形態では、スイッチファブリック（２３４）は、図２Ａにおけるスイッチファブリック（２０６）と実質的に同様である。本発明の一実施形態では、各プロセッサ（２２２，２２４
）は、図２Ａにおけるプロセッサ（２０８）と実質的に同様である。本発明の一実施形態では、メモリ（２２６，２２８）は、図２Ａにおけるメモリ（２１０）と実質的に同様である。本発明の一実施形態では、ＩＯＭ（２１８，２２０）は、図２ＡにおけるＩＯＭ（２０４）と実質的に同様である。本発明の一実施形態では、ＦＰＧＡ（２３０，２３２）は、図２ＡにおけるＦＰＧＡ（２１２）と実質的に同様である。最後に、ストレージモジュールグループ（２３６，２３８）は、図２Ａにおけるストレージモジュールグループ（２０２）と実質的に同様である。
【００４６】
本発明の一実施形態において、制御モジュール（２１６）における２つのＩＯＭ（２１８，２２０）は、（単一のＩＯＭを有する制御モジュールのＩ／Ｏ帯域幅に対して）制御モジュール（２１６）についてのＩ／Ｏ帯域幅を２倍にする。さらに、第２のＩＯＭ（または付加的なＩＯＭ）の追加によって、所与の制御モジュールに接続され得るクライアントの数、ひいてはストレージ機器に接続され得るクライアントの数が増加される。本発明の一実施形態において、さまざまな接続される（上記の）コンポーネント間の通信を扱うためのスイッチファブリック（２３４）の使用によって、プロセッサ（２２２，２２４）の各々が、スイッチファブリック（２３４）に接続されるすべてのＦＰＧＡ（２３０，２３２）およびすべてのストレージモジュール（２３６Ａ，２３６Ｎ，２３８Ａ，２３８Ｎ）に（スイッチファブリック（２３４）を介して）直接的にアクセスすることが可能になる。
【００４７】
図２Ｃを参照して、図２Ｃは、ストレージモジュールグループ（２５６，２５８，２６０，２６２）における複数のストレージモジュール（図示せず）に（スイッチファブリック（２４６）を介して）接続された制御モジュール（２４０）を含むストレージ機器を示す。図２Ｃに示されるように、制御モジュール（２４０）は、２つのＩＯＭ（２４２，２４４）、２つのプロセッサ（２４８，２５０）およびメモリ（２５２，２５４）を含む。本発明の一実施形態では、制御モジュール（２４０）におけるすべてのコンポーネントは、スイッチファブリック（２４６）を介して通信する。さらに、プロセッサ（２４８，２５０）は、スイッチファブリック（２４６）または（図２Ｃに示されるような）直接接続を使用して互いに通信し得る。本発明の一実施形態では、制御モジュール（２４０）内のプロセッサ（２４８，２５０）は、たとえばインテル（登録商標）ＱｕｉｃｋＰａｔｈインターコネクト（Intel QuickPath Interconnect）のようなポイント・ツー・ポイント相互接続を使用して直接的に通信することができる。当業者であれば、本発明から逸脱することがなければ、他のポイント・ツー・ポイント通信メカニズムがプロセッサ（２４８，２５０）間の直接的な通信を可能にするよう使用されてもよいということを理解するであろう。
【００４８】
本発明の一実施形態において、プロセッサＡ（２４８）は主として、ストレージモジュールグループＡおよびＢ（２５６，２５８）からのデータの格納および抽出に関係付けられる要求を扱うように構成され、プロセッサＢ（２５０）は主として、ストレージモジュールグループＣおよびＤ（２６０，２６２）からのデータの格納および抽出に関係付けられる要求を扱うように構成される。しかしながら、プロセッサ（２４８，２５０）は、（スイッチファブリック（２４６）を介して）ストレージモジュールグループ（２５６，２５８，２６０，２６２）のすべてと通信するように構成される。この構成は、制御モジュール（２４０）がプロセッサ間でのＩ／Ｏ要求の処理を拡張することを可能にし、および／またはプロセッサの一つに障害が起きるシナリオに対処するために、ビルトインの冗長性を提供する。
【００４９】
図２Ｃを引き続き参照して、本発明の一実施形態において、制御モジュール（２４０）は、図２Ａにおける制御モジュール（２００）と実質的に同様である。本発明の一実施形態では、スイッチファブリック（２４６）は、図２Ａにおけるスイッチファブリック（２
０６）と実質的に同様である。本発明の一実施形態では、各プロセッサ（２４８，２５０）は、図２Ａにおけるプロセッサ（２０８）と実質的に同様である。本発明の一実施形態では、メモリ（２５２，２５４）は、図２Ａにおけるメモリ（２１０）と実質的に同様である。本発明の一実施形態では、ＩＯＭ（２４２，２４４）は、図２ＡにおけるＩＯＭ（２０４）と実質的に同様である。最後に、ストレージモジュールグループ（２５６，２５８，２６０，２６２）は、図２Ａにおけるストレージモジュールグループ（２０２）と実質的に同様である。
【００５０】
図２Ｄを参照して、図２Ｄは、２つの制御モジュール（２６４，２６６）を含むストレージ機器を示す。各制御モジュールは、ＩＯＭ（２９６，２９８，３００，３０２）、プロセッサ（２６８，２７０，２７２，２７４）、メモリ（２７６，２７８，２８０，２８２）およびＦＰＧＡ（存在する場合）（２８８，２９０，２９２，２９４）を含んでいる。制御モジュール（２６４，２６６）の各々は、制御モジュール内のコンポーネントがそこを経由して通信するスイッチファブリック（２８４，２８６）を含む。
【００５１】
本発明の一実施形態では、制御モジュール内のプロセッサ（２６８，２７０，２７２，２７４）は、たとえばインテル（登録商標）ＱｕｉｃｋＰａｔｈインターコネクト（Intel QuickPath Interconnect）のようなポイント・ツー・ポイント相互接続を使用して互いに直接的に通信し得る。当業者であれば、本発明から逸脱することがなければ、他のポイント・ツー・ポイント通信メカニズムがプロセッサ（２６８，２７０，２７２，２７４）間の直接的な通信を可能にするよう使用されてもよいということを理解するであろう。さらに、制御モジュールＡにおけるプロセッサ（２６８，２７０）は、制御モジュールＢにおけるスイッチファブリック（２８６）への直接接続を介して、制御モジュールＢにおけるコンポーネントと通信し得る。同様に、制御モジュールＢにおけるプロセッサ（２７２，２７４）は、制御モジュールＡにおけるスイッチファブリック（２８４）への直接接続を介して、制御モジュールＡにおけるコンポーネントと通信し得る。
【００５２】
本発明の一実施形態において、制御モジュールの各々は、（ストレージモジュールグループ（３０４，３０６，３０８，３１０）によって示される）さまざまなストレージモジュールに接続される。図２Ｄに示されるように、各制御モジュールは、制御モジュールにおけるスイッチファブリックに接続されるストレージモジュールと通信し得る。さらに、制御モジュールＡ（２６４）におけるプロセッサは、スイッチファブリックＢ（２８６）を使用して、制御モジュールＢ（２６６）に接続されるストレージモジュールと通信し得る。同様に、制御モジュールＢ（２６６）におけるプロセッサは、スイッチファブリックＡ（２８４）を使用して、制御モジュールＡ（２６４）に接続されるストレージモジュールと通信し得る。
【００５３】
制御モジュール間の相互接続によって、どの制御モジュールがＩ／Ｏ要求を受け取るかに関わらず、ストレージ制御がストレージ機器に亘ってＩ／Ｏ負荷を分散することが可能になる。さらに、制御モジュールの相互接続によって、ストレージ機器はより多くのＩ／Ｏ要求を処理することが可能になる。さらに、制御モジュールの相互接続は、制御モジュール（または１つ以上のコンポーネント）に障害が起きた場合に、ビルトインの冗長性を提供する。
【００５４】
図２Ｂ〜図２Ｄに関して、本発明の１つ以上の実施形態において、インメモリデータ構造が、制御モジュールにおけるメモリに亘ってミラーリングされる。このような場合、制御モジュールにおけるプロセッサは、インメモリデータ構造がすべてのメモリに亘ってミラーリングされるようにストレージ機器内のすべてのメモリを更新するのに必要なコマンドを発行する。これにより、いずれのプロセッサも、ストレージ機器において（上で論じられたｎタプルによって規定されるような）データの位置を決定するために自身のメモリ
を使用し得る。この機能により、ストレージモジュール内のデータの位置に関して、如何なるプロセッサも如何なるＩ／Ｏ要求も処理することが可能になる。さらにインメモリデータ構造をミラーリングすることによって、メモリのうちの１つに障害が起きても、ストレージ機器は動作し続け得る。
【００５５】
当業者であれば、図２Ａ〜図２Ｄは限られた数のストレージモジュールに接続される制御モジュールを示すが、本発明から逸脱することがなければ、制御モジュールは任意の数のストレージモジュールに接続されてもよいということを理解するであろう。当業者であれば、図２Ａ〜図２Ｄは、ストレージ機器のさまざまな構成を示しているが、本発明から逸脱することがなければ、ストレージ機器は他の構成を使用して実施されてもよいということを理解するであろう。
【００５６】
図３は、本発明の１つ以上の実施形態に従ったストレージモジュールを示す。ストレージモジュール（３２０）は、ストレージモジュールコントローラ（３２２）、メモリ（３２４）および１つ以上のソリッドステートメモリモジュール（３３０Ａ，３３０Ｎ）を含む。これらのコンポーネントの各々は以下に記載される。
【００５７】
本発明の一実施形態では、ストレージモジュールコントローラ（３２２）は、１つ以上の制御モジュールからのデータの読み出しおよび／または１つ以上の制御モジュールへのデータの書き込みをする要求を受け取るよう構成される。さらに、ストレージモジュールコントローラ（３２２）は、メモリ（３２４）および／またはソリッドステートメモリモジュール（３３０Ａ，３３０Ｎ）を使用して、読出要求および書込要求を処理するように構成される。図３には示されないが、ストレージモジュールコントローラ（３２２）は、メモリ（３２４）またはソリッドステートメモリモジュール（３３０Ａ，３３０Ｎ）の１つからデータを読み出し、クライアントメモリ（図１Ｄ中の１１４）における物理アドレスにデータのコピーを書き込むように構成されるＤＭＡエンジンを含んでもよい。さらに、ＤＭＡエンジンは、メモリ（３２４）からのデータをソリッドステートメモリモジュールの１つ以上に書き込むよう構成され得る。本発明の一実施形態では、ＤＭＡエンジンは、プロセッサ（たとえば図２Ａ中の２０８）によってプログラムされるように構成される。当業者であれば、本発明から逸脱することがなければ、ストレージモジュールはストレージモジュールコントローラの外部のＤＭＡエンジンを含んでもよいということを理解するであろう。
【００５８】
本発明の一実施形態において、メモリ（３２４）は、任意の揮発性メモリに対応する。当該揮発性メモリは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、シンクロナスＤＲＡＭ、ＳＤＲ  ＳＤＲＡＭおよびＤＤＲ  ＳＤＲＡＭを含むが、これらに限定されない。
【００５９】
本発明の一実施形態において、メモリ（３２４）は、ボールテッドメモリ（３２６）およびキャッシュ（３２８）に論理的または物理的にパーティショニングされ得る。本発明の一実施形態において、ストレージモジュールコントローラ（３２２）は、ストレージモジュールにおける停電の通知の場合（またはストレージモジュールが電力を失い得る別の場合）、ボールテッドメモリ（３２６）のすべての内容をソリッドステートメモリモジュール（３３０Ａ，３３０Ｎ）の１つ以上に書き込むように構成される。本発明の一実施形態において、ストレージモジュールコントローラ（３２２）は、停電の通知の時間とストレージモジュールの実際の電力損失との間に、ボールテッドメモリ（３２６）のすべての内容をソリッドステートメモリモジュール（３３０Ａ，３３０Ｎ）の１つ以上に書き込むように構成される。対照的に、キャッシュ（３２８）の内容は、停電の場合（またはストレージモジュールが電力を失い得る別の場合）には失われる。
【００６０】
本発明の一実施形態において、ソリッドステートメモリモジュールは、持続性のデータを格納するようソリッドステートメモリを使用する任意のデータストレージデバイスに対応する。本発明の一実施形態において、ソリッドステートメモリは、ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、磁気ＲＡＭメモリ（Ｍ−ＲＡＭ）、スピントルク磁気ＲＡＭメモリ（ＳＴ−ＭＲＡＭ）、相変化メモリ（ＰＣＭ）、または不揮発性ストレージクラスメモリ（ＳＣＭ）として規定される任意の他のメモリを含んでもよいが、これらに限定されない。
【００６１】
本発明の一実施形態では、（ｉ）クライアントスイッチを介してアクセス可能なクライアントメモリの部分、（ｉｉ）制御モジュールにおけるメモリ、（ｉｉｉ）ストレージモジュールにおけるメモリ、および（ｉｖ）ソリッドステートメモリモジュールといったストレージ位置が、統合されたアドレス空間の一部である。したがって、ストレージ機器におけるプロセッサの視点から、（物理的に別個である）上記のストレージ位置同士が、物理アドレスの単一のプールとして現われる。換言すると、プロセッサは、統合されたアドレス空間において物理アドレスのうちのいずれかに格納されるデータについて読出要求および／または書込要求を発行し得る。上記のストレージ位置は、統合されたアドレス空間を使用してアクセス可能であるストレージファブリックと称され得る。
【００６２】
本発明の一実施形態において、統合されたアドレス空間は、クライアントスイッチにおけるノントランスペアレントなブリッジによって部分的に作成され、これにより、制御モジュールにおけるプロセッサがクライアントメモリの部分を「見る」ことが可能になる。したがって、制御モジュールにおけるプロセッサは、プロセッサが「見ること」ができるクライアントメモリの部分において、読出要求および／または書込要求を行ない得る。
【００６３】
図４Ａは、本発明の１つ以上の実施形態に従ったストレージモジュールを示す。ソリッドステートメモリモジュール（４００）は１つ以上のブロックを含む。本発明の一実施形態では、ブロックは、ソリッドステートメモリモジュール（４００）内のストレージの最小の消去可能な単位である。
【００６４】
図４Ｂは、本発明の１つ以上の実施形態に従ったブロックを示す。より具体的には、各ブロック（４０２）は１つ以上のページを含む。本発明の一実施形態において、ページは、ソリッドステートメモリモジュールでの読出動作およびプログラム動作（ページへの初期書き込みを含む）のための最小のアドレス指定可能な単位である。本発明の一実施形態において、ブロック内にページを再書き込みすることは、全ブロックが再書き込みされることが必要である。本発明の一実施形態では、ブロック内の各ページは、フラグページ（Frag Page）（図４Ｃ参照）またはＴＯＣページ（図４Ｄ参照）のいずれかである。
【００６５】
図４Ｃは、本発明の１つ以上の実施形態に従ったフラグページを示す。本発明の一実施形態では、フラグページは１つ以上のフラグ（frag）を含む。本発明の一実施形態では、フラグは有限量のユーザデータに対応する。さらに、所与のページ内のフラグは、均一なサイズまたは非均一なサイズであってもよい。さらに、所与のブロック内のフラグは、均一なサイズまたは非均一なサイズであってもよい。本発明の一実施形態では、所与のフラグは、ページのサイズ未満であってもよく、ページのサイズと全く同じであってもよく、または１つ以上のページに亘ってもよい。本発明の一実施形態では、フラグページはフラグのみを含む。本発明の一実施形態では、各フラグは、ユーザデータ（すなわち、ストレージ機器における格納のためにクライアントによって提供されるデータ）を含んでいる。この説明の目的のために、「フラグ」および「ユーザデータ」という用語は、交換可能に使用される。
【００６６】
図４Ｄは、本発明の１つ以上の実施形態に従ったＴＯＣページを示す。本発明の一実施
形態では、ＴＯＣページ（４０６）は、１つ以上のＴＯＣエントリを含んでおり、ＴＯＣエントリの各々は、所与のフラグについてのメタデータを含んでいる。さらに、ＴＯＣページ（４０６）は、ブロック（４０２）における別のＴＯＣページへの参照を含んでもよい。本発明の一実施形態において、ＴＯＣページは、ＴＯＣエントリ（および随意にブロックにおける別のＴＯＣページへの参照）のみを含むが、如何なるフラグも含まない。本発明の一実施形態では、各ＴＯＣエントリは、ブロック（４０２）におけるフラグ（図４Ｃ参照）に対応する。ＴＯＣエントリは、ブロック内のフラグにのみ対応する。換言すると、ＴＯＣページは、ブロックに関連付けられ、当該ブロックにおけるフラグについてのＴＯＣエントリのみを含む。本発明の一実施形態において、ソリッドステートメモリモジュールの各々内の各ブロックにおいて欠陥がない最後のページはＴＯＣページである。
【００６７】
図４Ｅは、本発明の１つ以上の実施形態に従ったブロックを示す。より具体的には、図４Ｅは、ＴＯＣページ（４１０，４１２，４１４）およびフラグページ（４１６，４１８，４２０，４２２，４２４，４２６）を含むブロック（４０８）を示す。本発明の一実施形態では、ブロック（４０８）は概念的に「上」から「下」まで充填される。さらに、ひとたびフラグページにおけるフラグについてのＴＯＣエントリの累積サイズがページのサイズと等しくなると、ＴＯＣページが生成および格納される。図４Ｅを参照して、たとえば、フラグページ０（４１６）およびフラグページ１（４１８）は、ブロック（４０８）に格納される。フラグページ０（４１６）およびフラグページ１（４１８）におけるフラグ（図示せず）についての対応するＴＯＣエントリ（図示せず）は、ブロックにおけるページのサイズに等しい合計の累積サイズを有する。したがって、ＴＯＣページ（４１４）が、（ブロックにおけるフラグに対応するＴＯＣエントリを使用して）生成され、ブロック（４０８）に格納される。その後、フラグページ２（４２０）がブロック（４０８）に書き込まれる。フラグページ２（４２０）におけるフラグ（図示せず）に対応するＴＯＣエントリはブロックにおけるページのサイズに等しい合計の累積サイズを有するので、ＴＯＣページ（４１２）が作成され、ブロック（４０８）に格納される。さらに、ブロック（４０８）においてＴＯＣページが既に存在するので、ＴＯＣページ（４１２）はさらにＴＯＣページ（４１４）への参照を含む。
【００６８】
このプロセスは、充填するべきブロック（４０８）に残っているページが１つだけになるまで繰り返される。この時点で、ＴＯＣページ（４１０）が作成され、ブロック（４０８）の最後のページに格納される。当業者であれば、ＴＯＣページ（４１０）におけるＴＯＣエントリの合計の累積のサイズがページのサイズ未満であり得るということを理解するであろう。このような場合、ＴＯＣページは、ＴＯＣエントリの累積サイズとページサイズとの間の差に対応するためにパディングを含んでもよい。最後に、ブロック（４０８）において他のＴＯＣページが存在するので、ＴＯＣページ（４１０）は１つの他のＴＯＣページ（４１２）への参照を含む。
【００６９】
図４Ｅに示されるように、ＴＯＣページは、ＴＯＣページが当該ＴＯＣページの下に存在するＴＯＣページからの参照をフォローすることにより取得され得るように、ブロックの「底部」からページの「上部」までリンクされる。たとえば、ＴＯＣページ（４１２）は、ＴＯＣページ（４１０）における参照を使用してアクセスされ得る。
【００７０】
当業者であれば、本発明から逸脱することがなければ、ブロック（４０８）はフラグページおよびＴＯＣページのみを含む一方、ブロック（４０８）はフラグページおよびＴＯＣページ以外のページ（たとえばパリティデータを含むページ）を含んでもよいということを理解するであろう。このような他のページは、ブロック内に位置し得、実現例に依存して、ＴＯＣページとフラグページとの間に挟まれ得る。
【００７１】
図４Ｆは、本発明の１つ以上の実施形態に従ったＴＯＣエントリを示す。本発明の一実
施形態では、各ＴＯＣエントリ（４３０）は、フラグ（および特にフラグにおけるユーザデータ）についてのメタデータを含んでおり、以下のフィールドの１つ以上を含み得る。すなわち、（ｉ）格納されているオブジェクト（たとえばファイル）を識別するオブジェクトＩＤ（４３２）と、（ｉｉ）ＴＯＣエントリに対応するフラグがボールテッドメモリに書き込まれた時間（たとえば、制御モジュールにおけるプロセッサのプロセッサクロック値）を特定する発生時間（４３４）と、（ｉｉｉ）（オブジェクトＩＤによって識別される）オブジェクトの始まりに対する、フラグにおけるユーザデータの始点を識別するオフセットＩＤ（４３６）と、（ｉｖ）フラグのサイズを特定するフラグメントサイズ（４３８）と、（ｖ）フラグが格納されるブロックにおけるページを識別するページＩＤ（４４０）と、（ｖｉ）（ページＩＤによって識別される）ページにおけるフラグの開始位置を識別するバイト（４４２）と、（ｖｉｉ）フラグにおけるユーザデータの非圧縮長さを特定する論理長さ（４４４）と、（ｖｉｉｉ）フラグにおけるユーザデータのタイプ（たとえばバッドページ（badpage）、データ、スナップショット、プール）を特定するタイ
プ（４４６）と、（ｉｘ）フラグが有効なユーザデータであるか、または（ソリッドステートメモリモジュールがガーベッジコレクションを行なう際に、当該フラグが消去され得ることを示す）トリム（trim）であるかを特定する種類（４４８）と、（ｉｘ）他のユーザデータを格納するよう使用され得るＴＯＣエントリにおけるスペースに対応するリザーブ（４５０）といったフィールドの１つ以上を含み得る。
【００７２】
本発明の一実施形態において、＜オブジェクトＩＤ，オフセットＩＤ＞または＜オブジェクトＩＤ，オフセットＩＤ，発生時間＞は、クライアントによって提供されるユーザデータを識別する。さらに、＜オブジェクトＩＤ，オフセットＩＤ＞または＜オブジェクトＩＤ，オフセットＩＤ，発生時間＞は、特定のユーザデータを識別するようクライアントによって使用される一方、ストレージ機器は、ストレージ機器内におけるユーザデータを識別するよう物理アドレスを使用する。当業者であれば、クライアントは、オブジェクトＩＤおよびオフセットＩＤの代わりに論理アドレスを提供してもよいということを理解するであろう。
【００７３】
当業者であれば、本発明から逸脱することがなければ、ＴＯＣエントリは図４Ｆに示されるよりも多いまたは少ないフィールドを含んでもよいということを理解するであろう。さらに、本発明から逸脱することがなければ、ＴＯＣエントリにおけるフィールドは、異なる順で配されてもよく、および／または組み合わせられてもよい。さらに、図４Ｆに示されるＴＯＣエントリにおけるフィールドがすべて同じサイズである一方、ＴＯＣエントリにおけるさまざまなフィールドのサイズは非均一であり得、任意の所与のフィールドのサイズは、ＴＯＣエントリの実現例に基づいて変動する。
【００７４】
図５は、本発明の１つ以上の実施形態に従ったデータ構造を示す。上で論じたように、制御モジュールにおけるメモリは、インメモリデータ構造を含む。本発明の一実施形態では、インメモリデータ構造は、ｎタプル（たとえば、＜オブジェクトＩＤ，オフセットＩＤ＞（５００）、＜オブジェクトＩＤ，オフセットＩＤ，発生時間＞（図示せず））と、ソリッドステートメモリモジュールにおけるフラグの物理アドレス（５０２）との間のマッピングを含む。本発明の一実施形態では、マッピングは、ｎタプルのハッシュと物理アドレスとの間である。本発明の一実施形態では、フラグについての物理アドレスは、＜ストレージモジュール，チャンネル，チップイネーブル，ＬＵＮ，プレーン，ブロック，ページ，バイト＞といったｎタプルとして規定される。
【００７５】
本発明の一実施形態では、制御モジュールはまた、ブロック（５０４）ごとのＴＯＣエントリ（５０６）の数をトラッキングする。より具体的には、フラグがボールテッドメモリに書き込まれるたびに、フラグについてのＴＯＣエントリが作成される。制御モジュールは、新しく作成されたＴＯＣエントリが関連付けられるブロックをトラッキングし、こ
の情報を使用してＴＯＣページを生成する。たとえば、制御モジュールは上記の情報を使用して、ＴＯＣページに書き込まれていない、所与のブロックに関連付けられるすべてのＴＯＣエントリの累積サイズがブロックにおけるページサイズと等しいかどうか決定する。ＴＯＣページに書き込まれていない、所与のブロックに関連付けられるすべてのＴＯＣエントリの累積サイズがブロックにおけるページサイズと等しい場合、制御モジュールは上記のエントリを使用してＴＯＣページを生成し、ストレージモジュールへのＴＯＣページの書き込みを開始する。
【００７６】
図６Ａ〜図６Ｃは、本発明の１つ以上の実施形態に従ったフローチャートを示す。より具体的には、図６Ａ〜図６Ｃは、本発明の１つ以上の実施形態に従った、ストレージ機器にユーザデータを格納するための方法を示す。フローチャートにおけるさまざまなステップが順次、提示および記載されるが、当業者であれば、ステップのうちのいくつかまたはすべてが異なる順番で実行されてもよいこと、ステップのうちのいくつかまたはすべてが組み合わせられてもよくまたは省略されてもよいこと、およびステップのうちのいくつかまたはすべてが並列に実行されてもよいことを理解するであろう。本発明の一実施形態では、図６Ａに示されるステップは、図６Ｂに示されるステップおよび図６Ｃに示されるステップと並列に行なわれ得る。さらに、図６Ｂに示されるステップは、図６Ｃに示されるステップと並列に行なわれ得る。
【００７７】
図６Ａを参照して、ステップ６００において、クライアントは、制御モジュールにおけるプロセッサ（図２Ａ中の２０８）の送信キュー（ＳＱ）に書込コマンド（書込要求）を書き込む。本発明の一実施形態では、書込コマンドは、クライアントメモリにおけるユーザデータの論理アドレス（「ソースアドレス」とも称される）を特定する。本発明の一実施形態では、書込コマンドは、＜オブジェクトＩＤ，オフセットＩＤ＞を使用してユーザデータを特定し得る。本発明の一実施形態において、書込コマンドは、プロセッサのＳＱに到達する前に、少なくともクライアントスイッチおよびスイッチファブリックを通過する。
【００７８】
ステップ６０２では、クライアントはＳＱテールドアベルレジスタに新しいＳＱテールを書き込む。本発明の一実施形態において、ＳＱテールドアベルレジスタに書き込むことによって、クライアントは、そのＳＱにおいて処理するべき新しいコマンドが存在するとプロセッサに通知する。
【００７９】
ステップ６０４では、プロセッサはＳＱから書込コマンドを取得する。ステップ６０６では、プロセッサは、（フラグの一部として）ユーザデータを書き込むべき物理アドレスを決定する。本発明の一実施形態では、物理アドレスはソリッドステートメモリモジュールにおける位置に対応する。本発明の一実施形態において、プロセッサは、ユーザデータのコピーを書き込むべき２つの物理アドレスを選択する。当該物理アドレスの各々は別個のソリッドステートメモリモジュールに存在する。
【００８０】
ステップ６０８では、プロセッサは、マルチキャストアドレスへの書込を発行するようにＤＭＡエンジンをプログラムする。本発明の一実施形態において、マルチキャストアドレスはマルチキャストグループに関連付けられており、当該マルチキャストグループは、制御モジュールにおけるメモリ中の第１のメモリ位置、第１のボールトメモリにおける第２のメモリ位置、および第２のボールテッドメモリにおける第３のメモリ位置を特定する。本発明の一実施形態において、第１のボールテッドメモリは、プロセッサによって特定される物理アドレスを含むソリッドステートメモリモジュールと同じストレージモジュールに位置する。本発明の一実施形態では、第２のボールテッドメモリは、同様の態様で決定される。本発明の一実施形態において、ステップ６０６においてプロセッサによって識別される各物理アドレスについて選択される１つのボールテッドメモリ位置が存在する。
【００８１】
ステップ６１０では、ＤＭＡエンジンは、クライアントメモリにおけるソースアドレスからユーザデータを読み出し、制御モジュールによって指示されるようにマルチキャストアドレスにデータを書き込む。本発明の一実施形態では、スイッチファブリックにおけるスイッチは、マルチキャストアドレスに関連付けられる。アドレスの受信の際、スイッチは、３つのアドレス、すなわち上記のメモリ位置の各々に対するアドレスを取得するようマルチキャストアドレスに必要な変換を行なう。その後、スイッチは３つのメモリ位置にユーザデータのコピーを送信する。当業者であれば、マルチキャストを実現する特定のスイッチはスイッチファブリックの実現例に基づき変動し得るということを理解するであろう。この実施形態では、クライアントとストレージ機器との間には発行された書込は１つだけ存在する。
【００８２】
本発明の別の実施形態において、ステップ６０８では、プロセッサは、３つの書込要求、すなわち上記のメモリ位置の各々に対する書込要求を並列に発行するようにＤＭＡエンジンをプログラムする。この実施形態において、ステップ６１０では、ＤＭＡエンジンはこれらの３つの書込要求を並列に発行する。この実施形態では、クライアントとストレージ機器との間には３つの書込の発行が存在する。
【００８３】
引き続き図６Ａを参照して、ステップ６１２では、ボールテッドメモリに格納されるユーザデータのコピーごとにＴＯＣエントリが作成される。さらに、各ＴＯＣエントリにおいて特定されるページおよびバイトは、ステップ６０６において識別される対応する物理アドレスのページおよびバイト部分に対応する。したがって、フラグは、対応するＴＯＣエントリが作成される時に、ソリッドステートメモリモジュールにおける物理アドレスに書き込まれないが、（フラグページの一部としての）フラグは、その後のある時点で、物理アドレスに書き込まれるように意図される。上で論じたように、ＴＯＣエントリの各々はＴＯＣページに格納され、その結果、当該ＴＯＣページはソリッドステートメモリモジュールに書き込まれる。しかしながら、ＴＯＣページの作成に先立って、ＴＯＣエントリが作成され、制御モジュールにおけるメモリと、ソリッドステートストレージモジュールのうちの１つ上のボールテッドメモリとに一時的に格納される。
【００８４】
引き続き図６Ａを参照して、ステップ６１４では、ステップ６１２において作成されたＴＯＣエントリは、ボールテッドメモリに格納される。より具体的には、各ＴＯＣエントリは、ストレージモジュールのボールテッドメモリに格納され、対応するフラグがその後のある時点で書き込まれる物理アドレスを含む。
【００８５】
ステップ６１６では、プロセッサは、ユーザデータの３つのコピーがストレージ機器に格納されることを反映するようインメモリデータ構造を更新する。プロセッサはまた、ブロックごとにＴＯＣエントリをトラッキングするデータ構造を更新し得る（図５参照）。ステップ６１８では、プロセッサは、（プロセッサのＳＱを識別する）ＳＱ識別子と（クライアントがプロセッサに発行した特定の書込コマンドを識別する）書込コマンド識別子とをクライアントの完了キュー（ＣＱ）に書き込む。
【００８６】
ステップ６２０では、プロセッサは、クライアントプロセッサについて割込を生成する。本発明の一実施形態において、プロセッサは、ノントランスペアレントなブリッジによって提供されるドアベル割込を使用して、クライアントプロセッサに割込を発行する。ステップ６２２では、クライアントは、そのＣＱにおけるデータを処理する。この段階では、クライアントは、書込要求が処理されたと通知されている。ステップ６２４では、ひとたびクライアントが完了キューのヘッドにあるデータを処理すると、クライアントは新しいＣＱヘッドをＣＱヘッドドアベルに書き込む。これはプロセッサに、クライアントへの将来の通知において使用するＣＱの中の次の位置を示す。
【００８７】
図６Ｂを参照して、ステップ６２６では、制御モジュールにおけるプロセッサは、ボールテッドメモリからステップ６０８で識別された物理アドレスへのユーザデータのコピーの書き込みを開始する。本発明の一実施形態において、制御モジュールにおけるプロセッサは、ボールテッドメモリからユーザデータを読み出し、ソリッドステートメモリモジュールにおける物理アドレスにこのユーザデータのコピーを書き込むよう、ストレージモジュールコントローラにおけるＤＭＡエンジンをプログラムする。上述したように、ユーザデータのコピーが書き込まれる物理アドレスは、以前にステップ６０６においてプロセッサによって決定された物理アドレスである。
【００８８】
ステップ６２６の後、ステップ６２８では、制御モジュールにおけるプロセッサは、ステップ６２６においてソリッドステートメモリモジュールに書き込まれたユーザデータに対応する、ボールテッドメモリにおけるユーザデータのすべてのコピーが除去されることを要求する。ステップ６３０では、それぞれのボールテッドメモリにおいて（ステップ６２６において書き込まれた）ユーザデータのコピーを含んでいたストレージモジュールの各々によって、除去確認が制御モジュールにおけるプロセッサに送信される。
【００８９】
図６Ｃを参照して、図６Ｃは、ＴＯＣエントリが作成されるごとに行なわれる方法を示す。ステップ６３２では、１つより多い空ページがブロックに残っているかどうかに関して決定がなされる。換言すると、ユーザデータがブロックにおける最後のページ以外のすべての他のページに書き込まれたかどうかに関して決定がなされる。１つより多い空ページがブロックに残っている場合、プロセスはステップ６３６に進み、そうでなければ、プロセスはステップ６３４に進む。上に論じられたように、ブロックにおいて、ユーザデータを書き込むべき空ページが１つだけ存在する場合、当該ブロックにおいてこの最後のページにＴＯＣページが書き込まれなければならない。
【００９０】
ステップ６３４では、ブロックに関連付けられるＴＯＣエントリ（当該ブロックにおいてＴＯＣページに書き込まれていない）の累積サイズがページサイズ以上であるかどうかに関して決定がなされる。ブロックに関連付けられるＴＯＣエントリ（当該ブロックにおいてＴＯＣページに書き込まれていない）の累積サイズがページサイズ以上である場合、プロセスはステップ６３６に進み、そうでなければプロセスは終了する。
【００９１】
ステップ６３６では、ブロックについての（ブロックにおいてＴＯＣページに書き込まれていない）ＴＯＣエントリは、ＴＯＣページを作成するよう組み合わせられる。本発明の一実施形態において、ユーザデータを書き込むべきブロックに空ページが１つだけ存在する場合、このシナリオにおいて作成されるＴＯＣページは、（上で論じたように）パディングを含んでもよい。ステップ６３８では、ブロックが別のＴＯＣページを含むかどうかに関して決定がなされる。ブロックが別のＴＯＣページを含む場合、プロセスはステップ６４０に進み、そうでなければ、プロセスはステップ６４２に進む。ステップ６４０では、ブロックにおける最も最近格納されたＴＯＣページへの参照が、ステップ６３６において作成されるＴＯＣページに含まれる（たとえば、ＴＯＣページ（４１０）は、図４ＥにおいてＴＯＣページ（４１２）を参照する）。
【００９２】
ステップ６４２では、プロセッサは、ソリッドステートメモリモジュールへのＴＯＣページの書込みを開始する。より具体的には、プロセッサによってプログラムされるＤＭＡエンジンは、ＴＯＣページのコピーを、ＴＯＣページにおけるＴＯＣエントリに対応するフラグを含む、ソリッドステートメモリモジュールにおけるブロックに書き込む。
【００９３】
ステップ６４４では、プロセッサは、ステップ６４２においてソリッドステートメモリモジュールに書き込まれたＴＯＣページに含まれていたＴＯＣエントリを含むすべてのス
トレージモジュールに、それぞれのボールテッドメモリからこのようなＴＯＣエントリを除去するよう要求する。ステップ６４６では、プロセッサは、上記のＴＯＣエントリが除去されたという確認をストレージモジュールから受ける。
【００９４】
図７Ａ〜図７Ｅは、本発明の１つ以上の実施形態に従った、ストレージ機器にユーザデータを格納する例を示す。この例は、本発明の範囲を限定するようには意図されない。
【００９５】
図７Ａを参照して、クライアント（７００）が、ストレージ機器に（黒い丸によって示される）ユーザデータを書き込む要求を発行するシナリオを考える。要求に応答して、制御モジュール（７０４）におけるプロセッサ（７１４）は、ユーザデータの第１のコピーがストレージモジュールＡ（７１８）中のソリッドステートメモリモジュールＡ（７２６）における第１の物理的位置に書き込まれるべきであり、ユーザデータの第２のコピーがストレージモジュールＢ（７２０）中のソリッドステートメモリモジュールＢ（７２８）における第２の物理的位置に書き込まれるべきであるということを決定する。
【００９６】
書込要求を受け取る前のプロセッサ（７１４）は、３つのメンバーを有するマルチキャストグループを作成する。第１のメンバーはボールテッドメモリＡ（７２２）において宛先アドレスを有しており、第２のメンバーはボールテッドメモリＢ（７２４）において宛先アドレスを有しており、第３のメンバーはメモリ（７１２）において宛先アドレスを有している。プロセッサ（７１４）はその後、マルチキャストグループを実現するよう、スイッチファブリック（７１６）におけるスイッチ（図示せず）をプログラムする。
【００９７】
ＤＭＡエンジンは、マルチキャストグループに関連付けられるマルチキャストアドレスに書込を発行するよう進む。この書込は、スイッチファブリックに送信され、最終的に、マルチキャストグループを実施するスイッチ（図示せず）に到達する。その後、スイッチは、３つの書込（マルチキャストグループによって特定された宛先に対する各々）を作成し、ターゲットメモリ位置へ書込を発行する。本発明の一実施形態において、３つの書込が並列に発生する。
【００９８】
さまざまな宛先アドレスに書き込まれるべきフラグはスイッチファブリック（７１６）を通過する。ひとたび書き込みが完了すると、ストレージ機器において当該ユーザデータの３つのコピーが存在する。ひとたび書き込みが完了すると、メモリ（７１２）におけるインメモリデータ構造（図示せず）は、ユーザデータがストレージ機器内の３つの位置に格納されていることを反映するよう更新される。さらに、クライアント（７００）には、書き込みが完了したことが通知される。
【００９９】
図７Ｂを参照して、ひとたびフラグがボールテッドメモリに書き込まれると、プロセッサは、ボールテッドメモリに格納されるフラグの各々について、メモリ（７１２）においてＴＯＣエントリ（ＴＥ１，ＴＥ２）を生成する。ＴＥ１は、ボールテッドメモリＡ（７２２）に格納されるフラグからのＴＯＣエントリであり、ＴＥ２は、ボールテッドメモリＢ（７２４）に格納されるフラグについてのＴＯＣエントリである。（図示しないＤＭＡエンジンを介する）プロセッサはその後、ボールテッドメモリＡ（７２２）にＴＥ１のコピーを書き込み、ボールテッドメモリＢ（７２４）にＴＥ２のコピーを書き込む。上で論じたように、この段階では、ＴＯＣエントリ（ＴＥ１およびＴＥ２）は、それらがＴＯＣページに加えられて適切なソリッドステートメモリモジュールに書き込まれるまで、上記のボールテッドメモリに一時的に格納される。
【０１００】
さらにストレージ機器の動作から独立して、クライアント（７００）は、（既にストレージ機器に書き込まれた）ユーザデータをクライアントメモリ（７０８）から除去し得る。
【０１０１】
図７Ｃを参照して、その後のある時点で、プロセッサ（７１４）は、現在ボールテッドメモリＡ（７２２）に存在するユーザデータのコピーをソリッドステートメモリモジュールＡ（７２６）における物理アドレスに書き込むよう、ストレージモジュールＡ（７１８）に要求を発行する。要求に応答して、ストレージモジュールコントローラ（図示せず）は、ボールテッドメモリＡ（７２２）におけるユーザデータのコピーをソリッドステートメモリモジュールＡ（７２６）に書き込む。ひとたび書き込みが完了すると、プロセッサ（７１４）は通知を受ける。ストレージモジュールＡ（７１８）からの通知の受信があると、プロセッサ（７１４）はインメモリデータ構造を更新し得る。
【０１０２】
図７Ｄを参照して、その後のある時点で、プロセッサ（７１４）は、同じブロック（すなわちＴＥ１に対応するフラグが格納されるブロック）におけるＴＥ１およびフラグについての他のＴＯＣエントリ（図示せず）の合計の累積サイズがページサイズと等しいということを決定する。この決定に基づいて、プロセッサはＴＯＣページを作成し、その後、（ＤＭＡエンジン（図示せず）を介して）ＴＥ１が対応するフラグを含むソリッドステートメモリモジュールにおいてブロック（図示せず）にＴＯＣページを書き込む。
【０１０３】
図７Ｅを参照して、その後のある時点で、ひとたびフラグがソリッドステートメモリモジュールＡに書き込まれると、プロセッサ（７１４）は、それぞれのボールテッドメモリからユーザデータのコピーを除去するよう、ボールテッドメモリにおいてユーザデータのコピーを含むすべてのストレージモジュールに要求を発行する。さらに、ひとたびＴＯＣページがソリッドステートメモリモジュールＡに書き込まれると、プロセッサ（７１４）は、それぞれのボールテッドメモリからこのようなＴＯＣエントリを除去するよう、上記のＴＯＣページに書き込まれたいずれかのＴＯＣエントリのコピーを含むすべてのストレージモジュールに要求を発行する。これらの要求の完了の際、ストレージモジュールは各々、制御モジュールに通知する。図７Ｅは、すべてのストレージモジュールが上記の要求を完了した後のシステムの状態を示す。プロセッサ（７１４）は、ボールテッドメモリにおけるユーザデータのすべてのコピーが除去されたという、ストレージモジュールからの通知を受信すると、インメモリデータ構造を更新し得る。
【０１０４】
本発明の１つ以上の実施形態において、ＴＯＣエントリがユーザデータの各コピーについて作成され、ＴＯＣエントリの１つが破損、失われるか、そうでなければ利用不可能である場合にユーザデータの各コピーがアクセスされ得るようにボールテッドメモリに格納される。さらに、停電の場合には、ボールテッドメモリ内のすべてのＴＯＣエントリは、対応するソリッドステートメモリモジュールに書き込まれる。さらに、上記のＴＯＣエントリに対応するフラグは、クライアントについての書込要求が処理された時に、プロセッサが元々決定した物理アドレスに書き込まれる。
【０１０５】
図８は、本発明の１つ以上の実施形態に従ったフローチャートを示す。より具体的には、図８は、本発明の１つ以上の実施形態に従った、インメモリデータ構造を生成するための方法を示す。フローチャートにおけるさまざまなステップが順次、提示および記載されるが、当業者であれば、ステップのうちのいくつかまたはすべてが異なる順番で実行されてもよいこと、ステップのうちのいくつかまたはすべてが組み合わせられてもよくまたは省略されてもよいこと、およびステップのうちのいくつかまたはすべてが並列に実行されてもよいことを理解するであろう。
【０１０６】
ステップ８００では、あるブロックが選択される。ステップ８０２では、当該ブロックにおける最後のページが取得される。たとえば、プロセッサは最後のページの内容を読み出す。上で論じたように、ストレージ機器内のソリッドステートメモリモジュールにおける各ブロックの最後のページは、ＴＯＣページである。ステップ８０４では、ＴＯＣペー
ジからＴＯＣエントリが抽出される。
【０１０７】
ステップ８０６では、ステップ８０４において取得されるＴＯＣエントリの各々は、インメモリデータ構造にポピュレートするよう処理される。より具体的には、各ＴＯＣエントリを処理することは、以下の１つ以上を含み得る。すなわち、（ｉ）ＴＯＣエントリからページＩＤおよびバイト情報を抽出することと、（ｉｉ）物理アドレスを得るよう、（ｉ）における情報を＜ストレージモジュール，チャンネル，チップイネーブル，ＬＵＮ，プレーン，ブロック＞と組み合わせることと、（ｉｉｉ）ＴＯＣエントリからオブジェクトＩＤおよびオフセットＩＤ（および随意に発生時間）を抽出することと、（ｉｖ）ハッシュ値を生成するよう、ハッシュ関数を＜オブジェクトＩＤ，オフセットＩＤ＞（または随意に、＜オブジェクトＩＤ，オフセットＩＤ，発生時間＞）を適用することと、（ｖ）ハッシュ値と物理アドレスとのマッピングをインメモリデータ構造にポピュレートすることとのうち１つ以上を含み得る。
【０１０８】
本発明の一実施形態において、プロセッサは、＜ストレージモジュール，チャンネル，チップイネーブル，ＬＵＮ，プレーン，ブロック＞に関して情報をブロックの最後のページを取得するために必要としたので、既にこの情報を含んでいる。本発明の一実施形態において、プロセッサは、フラグがバッドページに存在するかどうか決定するよう、ＴＯＣエントリにおいて（ｉ）タイプフィールドを使用し得る。フラグがバッドページに格納されていれば、プロセッサは、ＴＯＣエントリについて、インメモリデータ構造におけるマッピングを生成し得ない。
【０１０９】
ステップ８０８では、ひとたびＴＯＣページにおけるすべてのＴＯＣエントリが処理されると、ＴＯＣページが当該ブロック（すなわちステップ８００において選択されたブロック）における別のＴＯＣページへの参照を含むかどうかに関して決定がなされる。ＴＯＣページが当該ブロックにおける別のＴＯＣページへの参照を含む場合、プロセスはステップ８１０に進み、そうでなければプロセスは終了する。ステップ８１０では、参照されたＴＯＣページが取得される。ステップ８１２では、ＴＯＣエントリがＴＯＣページから抽出される。その後、プロセスはステップ８０６に進む。
【０１１０】
本発明の一実施形態において、図８における方法は、システムの電源が入れられると、ストレージ機器内にすべてのブロック（またはブロックのサブセット）について並列に行なわれ得る。このプロセスの後、結果得られるインメモリデータ構造は、新しいユーザデータがストレージ機器に書き込まれると、プロセッサによって更新され得る。
【０１１１】
当業者であれば、本発明は各ブロックにおける最後のページがＴＯＣページとして確保される場合について記載されているが、本発明から逸脱することがなければ、ブロックにおける別のページを、確保されたＴＯＣページとして設定することにより本発明の実施形態が実現されてもよいということを理解するであろう。
【０１１２】
本発明の一実施形態では、ソリッドステートメモリモジュールに格納される任意のデータに対して行なわれる任意の動作（たとえば読出動作、書込操作および／または消去動作）に先立って、インメモリデータ構造が生成される。
【０１１３】
本発明の１つ以上の実施形態は、ストレージ機器に格納されるすべてのユーザデータが、そのメタデータとともに同じ位置に配置されるシステムおよび方法を提供する。これにより、ストレージ機器に格納されるすべてのユーザデータは自己記述型である。本発明のさまざまな実施形態に従ってユーザデータおよび対応するメタデータを配することによって、ストレージ機器は、所与のソリッドステートメモリモジュール（またはそのサブセット）の障害からさらに保護される。換言すると、所与のソリッドステートメモリモジュー
ル（またはそのサブセット）が障害を起こしても、当該システムにおける他のソリッドステートメモリモジュールにおけるユーザデータは、他のソリッドステートメモリモジュールにおけるユーザデータにアクセスするのに必要なメタデータそれ自体が他のソリッドステートメモリモジュールに位置するので、それでもアクセス可能である。
【０１１４】
さらに、本発明の実施形態は、制御モジュールが単一のルックアップステップにおいてユーザデータにアクセスすることを可能にするインメモリデータ構造の作成を可能にする。換言すると、制御モジュールは、ストレージ機器におけるユーザデータの物理アドレスを直接的に確認するためにインメモリデータ構造を使用し得る。この情報を使用して、制御モジュールはユーザデータに直接的にアクセスすることができ、ユーザデータを取得するために如何なる中間のメタデータヒエラルキを横断する必要はない。
【０１１５】
本発明の１つ以上の実施形態は、当該システムにおける１つ以上のプロセッサによって実行される命令を使用して実施されてもよい。さらに、このような命令は、１つ以上の一時的でないコンピュータ読取可能媒体上に格納されるコンピュータ読取可能命令に対応してもよい。
【０１１６】
本発明を限られた数の実施形態に関して記載したが、この開示の利益を有する当業者であれば、本願明細書において開示される本発明の範囲から逸脱しない他の実施形態が作り出され得るということを理解するであろう。したがって、本発明の範囲は、添付の請求の範囲によってのみ限定されるべきである。
【図１Ａ】
0006385995.tif 000002
【図１Ｂ】
0006385995.tif 000003
【図１Ｃ】
0006385995.tif 000004
【図１Ｄ】
0006385995.tif 000005
【図１Ｅ】
0006385995.tif 000006
【図２Ａ】
0006385995.tif 000007
【図２Ｂ】
0006385995.tif 000008
【図２Ｃ】
0006385995.tif 000009
【図２Ｄ】
0006385995.tif 000010
【図３】
0006385995.tif 000011
【図４Ａ】
0006385995.tif 000012
【図４Ｂ】
0006385995.tif 000013
【図４Ｃ】
0006385995.tif 000014
【図４Ｄ】
0006385995.tif 000015
【図４Ｅ】
0006385995.tif 000016
【図４Ｆ】
0006385995.tif 000017
【図５】
0006385995.tif 000018
【図６Ａ】
0006385995.tif 000019
【図６Ｂ】
0006385995.tif 000020
【図６Ｃ】
0006385995.tif 000021
【図７Ａ】
0006385995.tif 000022
【図７Ｂ】
0006385995.tif 000023
【図７Ｃ】
0006385995.tif 000024
【図７Ｄ】
0006385995.tif 000025
【図７Ｅ】
0006385995.tif 000026
【図８】
0006385995.tif 000027