(57)【特許請求の範囲】
【請求項１】
データを書き込むための方法であって、
クライアントメモリに位置するデータを書き込む要求をクライアントから受け取るステップと、
前記データの第１のコピーを書き込むべき第１のメモリにおける第１の位置、および前記データの第２のコピーを書き込むべき第２のメモリにおける第２の位置をストレージ機器によって選択するステップとを含み、前記第１のメモリは第１の持続性ストレージを含む第１のストレージモジュールに位置しており、前記第２のメモリは第２の持続性ストレージを含む第２のストレージモジュールに位置しており、前記ストレージ機器は前記第１のストレージモジュールおよび前記第２のストレージモジュールを含み、
前記選択するステップの後に、
前記ストレージ機器によって前記データを取得するステップと、
前記データの取得に応答して、前記第１の位置に前記第１のコピーを書き込む第１の要求、前記第２の位置に前記第２のコピーを書き込む第２の要求、および第３の位置に第３のコピーを書き込む第３の要求を生成するステップとを含み、前記第３の位置は、前記ストレージ機器における制御モジュール中の第３のメモリに存在しており、
前記第１の要求に応答して、前記データの前記第１のコピーが前記第１の位置に書き込まれ、
前記第２の要求に応答して、前記データの前記第２のコピーが前記第２の位置に書き込まれ、
前記第３の要求に応答して、前記データの前記第３のコピーが前記第３の位置に書き込まれる、方法。
【請求項２】
前記データの前記第１のコピーが前記第１の位置に書き込まれ、前記データの前記第２のコピーが前記第２の位置に書き込まれ、前記データの前記第３のコピーが前記第３の位置に書き込まれた後、前記データを書き込む前記要求が完了したことを前記クライアントに通知するステップをさらに含む、請求項１に記載の方法。
【請求項３】
前記クライアントに通知した後、前記第１の持続性ストレージに前記データの前記第１のコピーを書き込むステップをさらに含む、請求項２に記載の方法。
【請求項４】
前記ストレージ機器におけるプロセッサが、前記第１の持続性ストレージへの前記データの前記第１のコピーの書き込みを開始する、請求項３に記載の方法。
【請求項５】
前記第１の持続性ストレージはソリッドステートメモリモジュールを含む、請求項１に記載の方法。
【請求項６】
前記ソリッドステートメモリモジュールは複数のＮＡＮＤダイを含む、請求項５に記載の方法。
【請求項７】
前記第１のメモリ、前記第２のメモリ、前記第３のメモリおよび前記クライアントメモリの少なくともある部分は、統合されたアドレス空間の一部である、請求項１に記載の方法。
【請求項８】
ストレージ機器であって、
第１のメモリおよび第１の持続性ストレージを含む第１のストレージモジュールと、
第２のメモリおよび第２の持続性ストレージを含む第２のストレージモジュールと、
制御モジュールとを含み、前記制御モジュールは、
プロセッサと、
第３のメモリとを含み、
前記制御モジュールは、
クライアントメモリに位置するデータを書き込む第１の要求をクライアントから受け取り、
前記データの第１のコピーを書き込むべき前記第１のメモリにおける第１の位置を選択し、前記データの第２のコピーを書き込むべき前記第２のメモリにおける第２の位置を選択し、
前記第１の位置を選択した後、前記第２の位置を選択した後、および前記ストレージ機器によって前記クライアントから前記データを取得した後、前記第１の位置に前記データの前記第１のコピーを書き込む第２の要求、前記第２の位置に前記データの前記第２のコピーを書き込む第３の要求、および前記第３のメモリにおける第３の位置に前記データの第３のコピーを書き込む第４の要求を生成するよう構成されており、
前記第１のストレージモジュールは、前記第２の要求に応答して、前記第１の位置に前記データの前記第１のコピーを格納するよう構成されており、
前記第２のストレージモジュールは、前記第３の要求に応答して、前記第２の位置に前記データの前記第２のコピーを格納するよう構成されており、
前記第４の要求に応答して、前記データの前記第３のコピーが前記第３の位置に格納される、ストレージ機器。
【請求項９】
前記制御モジュールはさらに、前記データの前記第１のコピーが前記第１の位置に書き込まれ、前記データの前記第２のコピーが前記第２の位置に書き込まれ、前記データの前記第３のコピーが前記第３の位置に書き込まれた後、前記データを書き込む前記要求が完了したことを前記クライアントに通知するよう構成される、請求項８に記載のストレージ機器。
【請求項１０】
前記制御モジュールはさらに、前記クライアントに通知した後、前記第１の持続性ストレージに前記データの前記第１のコピーを書き込むよう構成される、請求項９に記載のストレージ機器。
【請求項１１】
前記第１のメモリはボールテッドメモリである、請求項８に記載のストレージ機器。
【請求項１２】
前記第１の持続性ストレージはソリッドステートメモリを含む、請求項８に記載のストレージ機器。
【請求項１３】
前記第１の持続性ストレージはＮＡＮＤフラッシュを含む、請求項８に記載のストレージ機器。
【請求項１４】
前記第１のメモリ、前記第２のメモリ、前記第３のメモリおよび前記クライアントメモリの少なくともある部分は、ストレージファブリックの一部である、請求項８に記載のストレージ機器。
【請求項１５】
前記ストレージファブリックは、統合されたアドレス空間に関連付けられる、請求項１４に記載のストレージ機器。
【請求項１６】
前記方法は、前記クライアントメモリから前記データを読み出し、マルチキャストアドレスのための第４の書込要求を発行するようにダイレクトメモリアクセス（ＤＭＡ）エンジンをプログラムするステップをさらに含み、前記第１の位置、前記第２の位置および前記第３の位置は、前記マルチキャストアドレスに関連付けられ、前記方法はさらに、
前記プログラムの後、前記ＤＭＡエンジンから、前記ストレージ機器におけるスイッチファブリック中のスイッチにて前記第４の書込要求を受け取るステップをさらに含み、
前記第１の要求と、前記第２の要求と、前記第３の要求とは前記第４の書込要求を受け取ることに応答して前記スイッチにおいて生成され、
前記ＤＭＡエンジンは前記クライアントメモリから前記データを読み出す、請求項１に記載の方法。
【請求項１７】
前記制御モジュールは、前記クライアントメモリから前記データを読み出し、マルチキャストアドレスのための第５の書込要求を発行するようにダイレクトメモリアクセス（ＤＭＡ）エンジンをプログラムするようさらに構成され、前記第１の位置、前記第２の位置および前記第３の位置は、前記マルチキャストアドレスに関連付けられ、前記制御モジュールはさらに、
前記プログラムの後、前記ＤＭＡエンジンから、前記ストレージ機器におけるスイッチファブリック中のスイッチにて前記第５の書込要求を受け取るようさらに構成され、
前記第２の要求と前記第３の要求と前記第４の要求とは、前記第５の書込要求を受け取ることに応答して前記スイッチにおいて生成され、
前記ＤＭＡエンジンは、前記クライアントメモリから前記データを読み出す、請求項８に記載のストレージ機器。
【請求項１８】
前記方法は、
前記第１の持続性ストレージに前記データの前記第１のコピーを書き込むステップと、
前記第１の持続性ストレージに前記データの前記第１のコピーが書き込まれた後に、前記第１の位置における前記第１のコピーと前記第２の位置における第２のコピーとを除去するステップとをさらに含む、請求項１に記載の方法。
【請求項１９】
前記制御モジュールは
前記第１の持続性ストレージに前記データの前記第１のコピーを書き込み、
前記第１の持続性ストレージに前記データの前記第１のコピーが書き込まれた後に、前記第１の位置における前記第１のコピーと前記第２の位置における第２のコピーとを除去するようにさらに構成される、請求項８に記載のストレージ機器。
【発明の詳細な説明】
【背景技術】
【０００１】
背景
システムが持続性ストレージにデータを書き込みかつ持続性ストレージからデータを読み出し得るスピードはしばしば、システムの全体の性能の重大なファクタである。持続性ストレージシステムにデータを転送するまたは持続性ストレージシステムからデータを転送する従来のアプローチは、クライアントシステムおよび持続性ストレージシステムの両方上のソフトウェア、ファームウェアおよびハードウェアの複数のレイヤーによる処理を必要とする。さらにデータは典型的に、これらのレイヤー間を移動する際にコピーされる。結果として、存在する物理的なストレージ媒体を読み出すまたは書き込むのに必要とされるレイテンシーを越えて余分なレイテンシーが引き起こされ、このレイテンシーはシステムの全体の性能を低減する。
【発明の概要】
【課題を解決するための手段】
【０００２】
概要
一般に、１つの局面において、本発明はデータを書き込むための方法に関する。上記方法は、データを書き込む要求をクライアントから受け取るステップを含み、上記データはクライアントメモリに位置しており、上記方法はさらに、上記データの第１のコピーを書き込むべき第１のメモリにおける第１の位置と、上記データの第２のコピーを書き込むべき第２のメモリにおける第２の位置とをストレージ機器によって決定するステップを含み、上記第１のメモリは第１の持続性ストレージを含む第１のストレージモジュールに位置しており、上記第２のメモリは第２の持続性ストレージを含む第２のストレージモジュールに位置しており、上記ストレージ機器は上記第１のストレージモジュールおよび上記第２のストレージモジュールを含み、上記方法はさらに、上記クライアントメモリから上記データを読み出し、マルチキャストアドレスに第１の書込要求を発行するようにダイレクトメモリアクセス（ＤＭＡ）エンジンをプログラムするステップを含み、上記第１の位置、上記第２の位置および第３の位置は、上記マルチキャストアドレスに関連付けられている。上記方法はさらに、プログラムの後、上記ＤＭＡエンジンから、上記ストレージ機器におけるスイッチファブリック中のスイッチにて上記第１の要求を受け取るステップと、上記第１の要求を受け取ることに応答して、上記スイッチにおいて、上記第１の位置に上記第１のコピーを書き込む第２の要求と、上記第２の位置に上記第２のコピーを書き込む第３の要求と、上記第３の位置に上記第３のコピーを書き込む第４の要求とを生成するステップとを含み、上記第３の位置は、上記ストレージ機器における制御モジュール中の第３のメモリに存在しており、上記第２の要求に応答して、上記データの上記第１のコピーが上記第１の位置に書き込まれ、上記第３の要求に応答して、上記データの上記第２のコピーが上記第２の位置に書き込まれ、上記第４の要求に応答して、上記データの上記第３のコピーが上記第３の位置に書き込まれ、上記ＤＭＡエンジンは上記クライアントメモリから上記データを読み出し、上記第１のメモリ、上記第２のメモリ、上記第３のメモリ、および上記クライアントメモリの少なくともある部分は、統合されたアドレス空間によってアクセス可能なストレージファブリックの一部である。
【０００３】
一般に、１つの局面において、本発明はデータを読み出すための方法に関する。上記方法は、ストレージ機器に格納されたデータを読み出す要求をクライアントから受け取るステップを含み、上記要求は上記データに関連付けられる論理アドレスを含んでおり、上記方法はさらに、上記論理アドレスを使用してインメモリデータ構造における位置を上記ストレージ機器によって決定するステップと、上記インメモリデータ構造における上記位置から物理アドレスを取得するステップとを含み、上記物理アドレスは持続性ストレージにおける第１の位置に対応しており、上記持続性ストレージは上記ストレージ機器におけるストレージモジュールに位置しており、上記データは上記第１の位置に位置しており、上記方法はさらに、上記第１の位置から上記データを読み出し、第２の位置に上記データの第１のコピーを格納するようストレージモジュールコントローラをプログラムするステップを含み、上記第２の位置は上記ストレージモジュールにおけるメモリに存在し、上記方法はさらに、上記ストレージモジュールコントローラをプログラムした後、上記ストレージモジュールコントローラによって上記第１の位置から上記データを読み出すステップと、上記第２の位置に上記データの上記第１のコピーを上記ストレージモジュールコントローラによって書き込むステップとを含み、上記方法はさらに、上記第２の位置から上記データを読み出し、クライアントメモリにおける第３の位置に上記データの第２のコピーを書き込むようダイレクトメモリアクセス（ＤＭＡ）エンジンをプログラムするステップを含み、上記方法はさらに、上記ＤＭＡエンジンをプログラムした後、上記第２の位置からの上記データの上記第１のコピーを上記ＤＭＡエンジンによって読み出すステップと、上記第３の位置に上記データの上記第２のコピーを上記ＤＭＡエンジンによって書き込むステップとを含み、上記持続性ストレージ、上記メモリ、および上記クライアントメモリの少なくともある部分である。
【０００４】
一般に、１つの局面において、本発明はシステムに関する。上記システムは、クライアントプロセッサおよびクライアントメモリを含むクライアントと、ストレージ機器とを含む。
【０００５】
上記ストレージ機器は、第１のダイレクトメモリアクセス（ＤＭＡ）エンジンおよび第２のＤＭＡエンジンをプログラムするように構成されるプロセッサと、第１のメモリと、第２のメモリ、第１の持続性ストレージおよび上記第２のＤＭＡエンジンを含む第１のストレージモジュールと、第３のメモリおよび第２の持続性ストレージを含む第２のストレージモジュールと、マルチキャスティングを実現するように構成されるスイッチを含むスイッチファブリックとを含み、上記システムはさらに、上記第１のＤＭＡエンジンおよびノントランスペアレントなブリッジを含むクライアントスイッチを含み、上記ノントランスペアレントなブリッジによって、上記ストレージ機器が上記クライアントメモリの少なくともある部分にアクセスすることが可能になり、上記第１のＤＭＡエンジンは、上記クライアントメモリから第１のデータを読み出し、上記スイッチにおけるマルチキャストアドレスに上記第１のデータを書き込むよう構成されており、上記第２のＤＭＡエンジンは、上記第１の持続性ストレージおよび上記第２の持続性ストレージからなる群から選択されるものの少なくとも１つから第２のデータを読み出し、上記クライアントメモリに上記第２のデータを書き込むよう構成されており、上記クライアントメモリの上記部分、上記第１のメモリ、上記第２のメモリおよび上記第３のメモリは、統合されたアドレス空間によってアクセス可能であるストレージファブリックの一部である。
【０００６】
本発明の他の局面は、以下の記載および添付の特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【０００７】
【図１Ａ】本発明の１つ以上の実施形態に従ったシステムを示す図である。
【図１Ｂ】本発明の１つ以上の実施形態に従ったシステムを示す図である。
【図１Ｃ】本発明の１つ以上の実施形態に従ったシステムを示す図である。
【図１Ｄ】本発明の１つ以上の実施形態に従ったシステムを示す図である。
【図１Ｅ】本発明の１つ以上の実施形態に従ったシステムを示す図である。
【図２Ａ】本発明の１つ以上の実施形態に従ったストレージ機器を示す図である。
【図２Ｂ】本発明の１つ以上の実施形態に従ったストレージ機器を示す図である。
【図２Ｃ】本発明の１つ以上の実施形態に従ったストレージ機器を示す図である。
【図２Ｄ】本発明の１つ以上の実施形態に従ったストレージ機器を示す図である。
【図３】本発明の１つ以上の実施形態に従ったストレージモジュールを示す図である。
【図４Ａ】本発明の１つ以上の実施形態に従ったフローチャートを示す図である。
【図４Ｂ】本発明の１つ以上の実施形態に従ったフローチャートを示す図である。
【図５Ａ】本発明の１つ以上の実施形態に従った例を示す図である。
【図５Ｂ】本発明の１つ以上の実施形態に従った例を示す図である。
【図５Ｃ】本発明の１つ以上の実施形態に従った例を示す図である。
【図６】本発明の１つ以上の実施形態に従ったフローチャートを示す図である。
【図７Ａ】本発明の１つ以上の実施形態に従った例を示す図である。
【図７Ｂ】本発明の１つ以上の実施形態に従った例を示す図である。
【図７Ｃ】本発明の１つ以上の実施形態に従った例を示す図である。
【発明を実施するための形態】
【０００８】
詳細な説明
ここで、本発明の特定の実施形態を添付の図面を参照して詳細に記載する。本発明の実施形態の以下の詳細な説明において、本発明のより完全な理解を提供するために多くの特定の詳細が記載される。しかしながら、本発明がこれらの特定の詳細がなくても実施されてもよいことは当業者には明らかであろう。他の例では、説明を不必要に複雑にすることを回避するよう周知の機構は詳細に記載されない。
【０００９】
図１Ａ〜図７Ｃの以下の説明では、本発明のさまざまな実施形態において図に関して記載される任意の構成要素は、任意の他の図に関して記載された同様の名称を有する１つ以上の構成要素と同等であり得る。簡潔さのために、これらの構成要素の説明は、各図に関して繰り返されない。したがって、各図の構成要素の各実施形態は、参照により援用され、同様の名称を有する１つ以上の構成要素を有する他のすべての図内に随意に存在すると想定される。さらに、本発明のさまざまな実施形態に従うと、ある図の構成要素の如何なる記載も、任意の他の図中の対応する同様の名称を有する構成要素に関して記載された実施形態に加えて、当該実施形態に関連して、または当該実施形態の代わりに実施されてもよい随意の実施形態として解釈されるべきである。
【００１０】
一般に、本発明の実施形態はストレージシステムに関する。より具体的には、本発明の実施形態は、１つ以上のストレージ機器を含むストレージシステムに関する。当該１つ以上のストレージ機器の各々は、物理的なストレージレイアウトを制御するとともに抽象的な論理レイアウトをそのクライアントに提示するストレージ機器の能力を維持しつつ、クライアントがクライアントのメモリと物理的なストレージモジュールのメモリとの間での単一のダイレクトメモリアクセス（ＤＭＡ）を使用してクライアントからストレージ機器までデータを転送することを可能にするように構成される。このアーキテクチャでは、各読み取りまたは書き込みについての１つのユニークなＤＭＡ以外、データのなされるコピーはゼロであり、このアーキテクチャはゼロコピーＤＭＡ（Zero-Copy DMA）と称される。特に本発明の１つ以上の実施形態において、ストレージ機器はストレージモジュールを含んでおり、クライアントは、ゼロコピーＤＭＡを使用して、ストレージモジュールにデータを直接的に転送できる。さらに、本発明の１つ以上の実施形態において、ストレージ機器は、ゼロコピーＤＭＡを使用して、ストレージモジュールからクライアントメモリにデータを直接的に転送する機能を含む。
【００１１】
図１Ａ〜図１Ｅは、本発明の１つ以上の実施形態に従ったシステムを示す。図１Ａを参照して、システムは、ストレージ機器（１０２）に動作可能に接続される１つ以上のクライアント（クライアントＡ（１００Ａ），（クライアントＭ（１００Ｍ）））を含む。
【００１２】
本発明の一実施形態において、クライアント（１００Ａ，１００Ｍ）は、ストレージ機器（１０２）に読出要求を発行するおよび／またはストレージ機器（１０２）に書込要求を発行する機能を含む任意のシステムに対応する。図１Ａに示されないが、クライアント（１００Ａ，１００Ｍ）の各々は、クライアントプロセッサおよびクライアントメモリを含み得る。クライアントにおけるコンポーネントに関する付加的な詳細は、以下の図１Ｄにおいて記載される。本発明の一実施形態において、クライアント（１００Ａ，１００Ｍ）は、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）のようなポイント・ツー・ポイント相互接続を使用して互いに直接的に通信し得る。当業者であれば、本発明から逸脱することがなければ、他のポイント・ツー・ポイント通信メカニズムがプロセッサ（２６８，２７０，２７２，２７４）間の直接的な通信を可能にするよう使用されてもよいということを理解するであろう。さらに、制御モジュールＡにおけるプロセッサ（２６８，２７０）は、制御モジュールＢにおけるスイッチファブリック（２８６）への直接接続を介して、制御モジュールＢにおけるコンポーネントと通信し得る。同様に、制御モジュールＢにおけるプロセッサ（２７２，２７４）は、制御モジュールＡにおけるスイッチファブリック（２８４）への直接接続を介して、制御モジュールＡにおけるコンポーネントと通信し得る。
【００５３】
本発明の一実施形態において、制御モジュールの各々は、（ストレージモジュールグループ（３０４，３０６，３０８，３１０）によって示される）さまざまなストレージモジュールに接続される。図２Ｄに示されるように、各制御モジュールは、制御モジュールにおけるスイッチファブリックに接続されるストレージモジュールと通信し得る。さらに、制御モジュールＡ（２６４）におけるプロセッサは、スイッチファブリックＢ（２８６）を使用して、制御モジュールＢ（２６６）に接続されるストレージモジュールと通信し得る。同様に、制御モジュールＢ（２６６）におけるプロセッサは、スイッチファブリックＡ（２８４）を使用して、制御モジュールＡ（２６４）に接続されるストレージモジュールと通信し得る。
【００５４】
制御モジュール間の相互接続によって、どの制御モジュールがＩ／Ｏ要求を受け取るかに関わらず、ストレージ制御がストレージ機器に亘ってＩ／Ｏ負荷を分散することが可能になる。さらに、制御モジュールの相互接続によって、ストレージ機器はより多くのＩ／Ｏ要求を処理することが可能になる。さらに、制御モジュールの相互接続は、制御モジュール（または１つ以上のコンポーネント）に障害が起きた場合に、ビルトインの冗長性を提供する。
【００５５】
図２Ｂ〜図２Ｄに関して、本発明の１つ以上の実施形態において、インメモリデータ構造が、制御モジュールにおけるメモリに亘ってミラーリングされる。このような場合、制御モジュールにおけるプロセッサは、インメモリデータ構造がすべてのメモリに亘ってミラーリングされるようにストレージ機器内のすべてのメモリを更新するのに必要なコマンドを発行する。これにより、いずれのプロセッサも、ストレージ機器において（上で論じられたｎタプルによって規定されるような）データの位置を決定するために自身のメモリを使用し得る。この機能により、ストレージモジュール内のデータの位置に関して、如何なるプロセッサも如何なるＩ／Ｏ要求も処理することが可能になる。さらにインメモリデータ構造をミラーリングすることによって、メモリのうちの１つに障害が起きても、ストレージ機器は動作し続け得る。
【００５６】
当業者であれば、図２Ａ〜図２Ｄは限られた数のストレージモジュールに接続される制御モジュールを示すが、本発明から逸脱することがなければ、制御モジュールは任意の数のストレージモジュールに接続されてもよいということを理解するであろう。当業者であれば、図２Ａ〜図２Ｄは、ストレージ機器のさまざまな構成を示しているが、本発明から逸脱することがなければ、ストレージ機器は他の構成を使用して実施されてもよいということを理解するであろう。
【００５７】
図３は、本発明の１つ以上の実施形態に従ったストレージモジュールを示す。ストレージモジュール（３２０）は、ストレージモジュールコントローラ（３２２）、メモリ（３２４）および１つ以上のソリッドステートメモリモジュール（３３０Ａ，３３０Ｎ）を含む。これらのコンポーネントの各々は以下に記載される。
【００５８】
本発明の一実施形態では、ストレージモジュールコントローラ（３２２）は、１つ以上の制御モジュールからのデータの読み出しおよび／または１つ以上の制御モジュールへのデータの書き込みをする要求を受け取るよう構成される。さらに、ストレージモジュールコントローラ（３２２）は、メモリ（３２４）および／またはソリッドステートメモリモジュール（３３０Ａ，３３０Ｎ）を使用して、読出要求および書込要求を処理するように構成される。図３には示されないが、ストレージモジュールコントローラ（３２２）は、メモリ（３２４）またはソリッドステートメモリモジュール（３３０Ａ，３３０Ｎ）の１つからデータを読み出し、クライアントメモリ（図１Ｄ中の１１４）における物理アドレスにデータのコピーを書き込むように構成されるＤＭＡエンジンを含んでもよい。さらに、ＤＭＡエンジンは、メモリ（３２４）からのデータをソリッドステートメモリモジュールの１つ以上に書き込むよう構成され得る。本発明の一実施形態では、ＤＭＡエンジンは、プロセッサ（たとえば図２Ａ中の２０８）によってプログラムされるように構成される。当業者であれば、本発明から逸脱することがなければ、ストレージモジュールはストレージモジュールコントローラの外部のＤＭＡエンジンを含んでもよいということを理解するであろう。
【００５９】
本発明の一実施形態において、メモリ（３２４）は、任意の揮発性メモリに対応する。当該揮発性メモリは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、シンクロナスＤＲＡＭ、ＳＤＲ  ＳＤＲＡＭおよびＤＤＲ  ＳＤＲＡＭを含むが、これらに限定されない。
【００６０】
本発明の一実施形態において、メモリ（３２４）は、ボールテッドメモリ（３２６）およびキャッシュ（３２８）に論理的または物理的にパーティショニングされ得る。本発明の一実施形態において、ストレージモジュールコントローラ（３２２）は、ストレージモジュールにおける停電の通知の場合（またはストレージモジュールが電力を失い得る別の場合）、ボールテッドメモリ（３２６）のすべての内容をソリッドステートメモリモジュール（３３０Ａ，３３０Ｎ）の１つ以上に書き込むように構成される。本発明の一実施形態において、ストレージモジュールコントローラ（３２２）は、停電の通知の時間とストレージモジュールの実際の電力損失との間に、ボールテッドメモリ（３２６）のすべての内容をソリッドステートメモリモジュール（３３０Ａ，３３０Ｎ）の１つ以上に書き込むように構成される。対照的に、キャッシュ（３２８）の内容は、停電の場合（またはストレージモジュールが電力を失い得る別の場合）には失われる。
【００６１】
本発明の一実施形態において、ソリッドステートメモリモジュールは、持続性のデータを格納するようソリッドステートメモリを使用する任意のデータストレージデバイスに対応する。本発明の一実施形態において、ソリッドステートメモリは、ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、磁気ＲＡＭメモリ（Ｍ−ＲＡＭ）、スピントルク磁気ＲＡＭメモリ（ＳＴ−ＭＲＡＭ）、相変化メモリ（ＰＣＭ）、メモリジスティブメモリ（memristive memory）、または不揮発性ストレージクラスメモリ（ＳＣＭ）として規定される任意の他のメモリを含んでもよいが、これらに限定されない。当業者であれば、本発明の実施形態はストレージクラスメモリに限定されないということを理解するであろう。
【００６２】
本発明の一実施形態では、（ｉ）クライアントスイッチを介してアクセス可能なクライアントメモリの部分、（ｉｉ）制御モジュールにおけるメモリ、（ｉｉｉ）ストレージモジュールにおけるメモリ、および（ｉｖ）ソリッドステートメモリモジュールといったストレージ位置が、統合されたアドレス空間の一部である。したがって、ストレージ機器におけるプロセッサの視点から、（物理的に別個である）上記のストレージ位置同士が、物理アドレスの単一のプールとして現われる。換言すると、プロセッサは、統合されたアドレス空間において物理アドレスのうちのいずれかに格納されるデータについて読出要求および／または書込要求を発行し得る。上記のストレージ位置は、統合されたアドレス空間を使用してアクセス可能であるストレージファブリックと称され得る。
【００６３】
本発明の一実施形態において、統合されたアドレス空間は、クライアントスイッチにおけるノントランスペアレントなブリッジによって部分的に作成され、これにより、制御モジュールにおけるプロセッサがクライアントメモリの部分を「見る」ことを可能になる。したがって、制御モジュールにおけるプロセッサは、プロセッサが「見ること」ができるクライアントメモリの部分において、読出要求および／または書込要求を行ない得る。
【００６４】
図４Ａ〜図４Ｂは、本発明の１つ以上の実施形態に従ったフローチャートを示す。より具体的には、図４Ａ〜図４Ｂは、本発明の１つ以上の実施形態に従った、ストレージ機器にデータを格納するための方法を示す。フローチャートにおけるさまざまなステップが順次、提示および記載されるが、当業者であれば、ステップのうちのいくつかまたはすべてが異なる順番で実行されてもよいこと、ステップのうちのいくつかまたはすべてが組み合わせられてもよくまたは省略されてもよいこと、およびステップのうちのいくつかまたはすべてが並行に実行されてもよいことを理解するであろう。本発明の一実施形態では、図４Ａに示されるステップは、図４Ｂに示されるステップと並行に行なわれ得る。
【００６５】
図４Ａを参照して、ステップ４００において、クライアントは、制御モジュールにおけるプロセッサ（図２Ａ中の２０８）の送信キュー（ＳＱ）に書込コマンド（書込要求）を書き込む。本発明の一実施形態では、書込コマンドは、クライアントメモリにおけるデータの論理アドレス（「ソースアドレス」とも称される）を特定する。本発明の一実施形態において、書込コマンドは、プロセッサのＳＱに到達する前に、少なくともクライアントスイッチおよびスイッチファブリックを通過する。
【００６６】
ステップ４０２では、クライアントは、新しいＳＱテール（SQ tail）をＳＱテールドアベルレジスタ（SQ Tail doorbell register）に書き込む。本発明の一実施形態において、ＳＱテールドアベルレジスタに書き込むことにより、クライアントは、その送信キューにおいて処理するべき新しいコマンドがあるとプロセッサに通知する。
【００６７】
ステップ４０４では、プロセッサはＳＱから書込コマンドを取得する。ステップ４０６では、プロセッサは、データを書き込むべき物理アドレスを決定する。本発明の一実施形態では、物理アドレスはソリッドステートメモリモジュールにおける位置に対応する。本発明の一実施形態において、プロセッサは、データのコピーを書き込むべき２つの物理アドレスを選択する。当該物理アドレスの各々は別個のソリッドステートメモリモジュールに存在する。
【００６８】
ステップ４０８では、プロセッサは、マルチキャストアドレスへの書込を発行するようにＤＭＡエンジンをプログラムする。本発明の一実施形態において、マルチキャストアドレスはマルチキャストグループに関連付けられており、当該マルチキャストグループは、制御モジュールにおけるメモリ中の第１のメモリ位置、第１のボールトメモリにおける第２のメモリ位置、および第２のボールテッドメモリにおける第３のメモリ位置を特定する。本発明の一実施形態において、第１のボールテッドメモリは、プロセッサによって特定される物理アドレスを含むソリッドステートメモリモジュールと同じストレージモジュールに位置する。本発明の一実施形態では、第２のボールテッドメモリは、同様の態様で決定される。本発明の一実施形態において、ステップ４０６においてプロセッサによって識別される各物理アドレスについて選択される１つのボールテッドメモリ位置が存在する。
【００６９】
ステップ４１０では、ＤＭＡエンジンは、クライアントメモリにおけるソースアドレスからユーザデータを読み出し、制御モジュールによって指示されるようにマルチキャストアドレスにデータを書き込む。本発明の一実施形態では、スイッチファブリックにおけるスイッチは、マルチキャストアドレスに関連付けられる。アドレスの受信の際、スイッチは、３つのアドレス、すなわち上記のメモリ位置の各々に対するアドレスを取得するようマルチキャストアドレス上で必要な変換を行なう。その後、スイッチは３つのメモリ位置にユーザデータのコピーを送信する。当業者であれば、マルチキャストを実現する特定のスイッチはスイッチファブリックの実現例に基づき変動し得るということを理解するであろう。この実施形態では、クライアントとストレージ機器との間には発行された書込は１つだけ存在する。
【００７０】
本発明の別の実施形態において、ステップ４０８では、プロセッサは、３つの書込要求、すなわち上記のメモリ位置の各々に対する書込要求を並行に発行するようにＤＭＡエンジンをプログラムする。この実施形態において、ステップ４１０では、ＤＭＡエンジンはこれらの３つの書込要求を並行に発行する。この実施形態では、クライアントとストレージ機器との間で３つの書込の発行が存在する。
【００７１】
図４Ａを引き続き参照して、ステップ４１２では、プロセッサは、データの３つのコピーがストレージ機器に格納されることを反映するようインメモリデータ構造を更新する。ステップ４１４では、プロセッサは、（プロセッサのＳＱを識別する）ＳＱ識別子と（クライアントがプロセッサに発行した特定の書込コマンドを識別する）書込コマンド識別子とをクライアントの完了キュー（ＣＱ）に書き込む。
【００７２】
ステップ４１６では、プロセッサは、クライアントプロセッサについて割込を生成する。本発明の一実施形態では、プロセッサは、ノントランスペアレントなブリッジによって提供されるドアベル割込を使用してクライアントプロセッサに割込を発行する。ステップ４１８では、クライアントは、そのＣＱにおけるデータを処理する。この段階では、クライアントは、書込要求が処理されたと通知されている。ステップ４２０では、ひとたびクライアントが完了キューのヘッドにあるデータを処理すると、クライアントは新しいＣＱヘッドをＣＱヘッドドアベルに書き込む。これはプロセッサに、クライアントへの将来の通知において使用するＣＱの中の次の位置を示す。
【００７３】
図４Ｂを参照して、ステップ４２２では、制御モジュールにおけるプロセッサは、ボールテッドメモリからステップ４０６で識別された物理アドレスへのデータの書き込みを開始する。本発明の一実施形態において、制御モジュールにおけるプロセッサは、ボールテッドメモリからデータを読み出し、ソリッドステートメモリモジュールにおける物理アドレスにこのデータのコピーを書き込むよう、ストレージモジュールコントローラにおけるＤＭＡエンジンをプログラムする。
【００７４】
ステップ４２２の後、ステップ４２４では、制御モジュールにおけるプロセッサは、ステップ４２２においてソリッドステートメモリモジュールに書き込まれたデータに対応する、ボールテッドメモリにおけるデータのすべてのコピーが除去されることを要求する。ステップ４２６では、それぞれのボールテッドメモリにおいて（ステップ４１０において書き込まれた）データのコピーを含んでいたストレージモジュールの各々によって、除去確認が制御モジュールにおけるプロセッサに送信される。
【００７５】
図５Ａ〜図５Ｃは、本発明の１つ以上の実施形態に従った、ストレージ機器にデータを格納する例を示す。この例は、本発明の範囲を限定するようには意図されない。さらに、図５Ａ〜図５Ｃにおける明瞭さのために、クライアントおよびストレージ機器におけるさまざまな構成要素が省略されている。
【００７６】
図５Ａを参照して、クライアント（５００）が、ストレージ機器に（黒い丸によって示される）データを書き込む要求を発行するシナリオを考える。要求に応答して、制御モジュール（５０４）におけるプロセッサ（５１４）は、データの第１のコピーがストレージモジュールＡ（５１８）中のソリッドステートメモリモジュールＡ（５２６）における第１の物理的位置に書き込まれるべきであり、データの第２のコピーがストレージモジュールＢ（５２０）中のソリッドステートメモリモジュールＢ（５２８）における第２の物理的位置に書き込まれるべきであるということを決定する。
【００７７】
この決定に基づいて、プロセッサ（５１４）は、３メンバーを有するマルチキャストグループを作成する。第１のメンバーはボールテッドメモリＡ（５２２）において宛先アドレスを有しており、第２のメンバーはボールテッドメモリＢ（５２４）において宛先アドレスを有しており、第３のメンバーはメモリ（５１２）において宛先アドレスを有している。プロセッサ（５１４）はその後、マルチキャストグループを実現するよう、スイッチファブリック（５１６）におけるスイッチ（図示せず）をプログラムする。
【００７８】
ＤＭＡエンジンは、マルチキャストグループに関連付けられるマルチキャストアドレスに書込を発行するよう進む。この書込は、スイッチファブリックに送信され、最終的に、マルチキャストグループを実施するスイッチ（図示せず）に到達する。その後、スイッチは、３つの書込（マルチキャストグループによって特定された宛先に対する各々）を作成し、ターゲットメモリ位置へ書込を発行する。本発明の一実施形態において、３つの書込が並行に発生する。
【００７９】
さまざまな宛先アドレスに書き込まれるべきデータのコピーはスイッチファブリック（５１６）を通過する。ひとたび書き込みが完了すると、ストレージ機器において当該データの３つのコピーが存在する。ひとたび書き込みが完了すると、メモリ（５１２）におけるインメモリデータ構造（図示せず）は、データがストレージ機器内の３つの位置に格納されていることを反映するよう更新される。さらに、クライアント（５００）には、書き込みが完了したことが通知される。
【００８０】
図５Ｂを参照して、その後のある時点で、プロセッサ（５１４）は、現在ボールテッドメモリＡ（５２２）に存在するデータのコピーをソリッドステートメモリモジュールＡ（５２６）における物理アドレスに書き込むよう、ストレージモジュールＡ（５１８）に要求を発行する。要求に応答して、ストレージモジュールコントローラ（図示せず）は、ボールテッドメモリＡ（５２２）におけるデータのコピーをソリッドステートメモリモジュールＡ（５２６）に書き込む。ひとたび書き込みが完了すると、プロセッサ（５１４）は通知を受ける。ストレージモジュールＡ（５１８）からの通知の受信があると、プロセッサ（５１４）はインメモリデータ構造を更新し得る。
【００８１】
さらにストレージ機器の動作から独立して、クライアント（５００）は、（既にストレージ機器に書き込まれた）データをクライアントメモリ（５０８）から除去し得る。
【００８２】
図５Ｃを参照して、ひとたびデータのコピーがソリッドステートメモリモジュールＡに書き込まれると、プロセッサ（５１４）は、それぞれのボールテッドメモリからデータのコピーを除去するよう、ボールテッドメモリにおいてデータのコピーを含むすべてのストレージモジュールに要求を発行する。この要求の完了の際、ストレージモジュールは各々、制御モジュールに通知する。図５Ｃは、すべてのストレージモジュールがこの要求を完了した後のシステムの状態を示す。プロセッサ（５１４）は、ボールテッドメモリにおけるデータのすべてのコピーが除去されたという、ストレージモジュールからの通知を受信すると、インメモリデータ構造を更新し得る。
【００８３】
図６は、本発明の１つ以上の実施形態に従ったフローチャートを示す。より具体的には、図６は、本発明の１つ以上の実施形態に従った、ストレージ機器からデータを読み出すための方法を示す。フローチャートにおけるさまざまなステップが順次、提示および記載されるが、当業者であれば、ステップのうちのいくつかまたはすべてが異なる順番で実行されてもよいこと、ステップのうちのいくつかまたはすべてが組み合わせられてもよくまたは省略されてもよいこと、およびステップのうちのいくつかまたはすべてが並行に実行されてもよいことを理解するであろう。
【００８４】
ステップ６００では、クライアントは、制御モジュールにおけるプロセッサの送信キュー（ＳＱ）に読出コマンド（読出要求）を書き込む。本発明の一実施形態では、読出コマンドは論理アドレスを含む。上で論じたように、論理アドレスの内容は、実現例に基づき変動し得る。
【００８５】
ステップ６０２では、クライアントはＳＱテールドアベルレジスタに新しいＳＱテールを書き込む。本発明の一実施形態において、ＳＱテールドアベルレジスタに書き込むことによって、クライアントは、その送信キューにおいて処理するべき新しいコマンドが存在するとプロセッサに通知する。ステップ６０４では、プロセッサは、ＳＱから読出コマンドを取得する。ステップ６０６では、プロセッサは、論理アドレスに基づき、インメモリデータ構造において物理アドレスの位置を決定する。
【００８６】
ステップ６０８では、プロセッサはステップ６０６において決定された位置から物理アドレスを取得する。本発明の一実施形態では、物理アドレスは、ストレージ機器におけるデータの１つ以上の位置に対応する。たとえば、データ位置は、プロセッサのメモリにおける位置、ストレージモジュール中のメモリにおける位置、および／またはソリッドステートメモリモジュールにおける位置の１つ以上を含み得る。
【００８７】
本発明の代替的な実施形態において、インメモリデータ構造が物理アドレスへの論理アドレスの直接的なマッピングを含む場合、ステップ６０６および６０８は、論理アドレスが直接的に物理アドレスを取得するために使用される単一のルックアップへと組み合わせられ得る。
【００８８】
ステップ６１０では、データ位置のうちの１つが制御モジュールにおけるメモリに存在するかどうかについて決定が行われる。データ位置のうちの１つが制御モジュールにおけるメモリに存在する場合、プロセスはステップ６２２に進む。代替的には、プロセスはステップ６１２に進む。本発明の一実施形態において、ストレージ機器にデータの複数のコピーが存在する場合、データは、制御モジュールにおけるメモリから優先的に読み出される。データが制御モジュールのメモリに存在しなければ、データは、（ボールテッドメモリに存在する場合）ボールテッドメモリから優先的に読み出され、次いで（データのコピーがボールテッドメモリに存在しない場合）ソリッドステートメモリモジュールから読み出される。
【００８９】
ステップ６１２では、プロセッサは、ストレージモジュールの送信キュー（ＳＱ）に読出物理データコマンド（Read Physical Data Command）を書き込む。
【００９０】
ステップ６１４では、ソリッドステートメモリモジュールにおける物理的位置からストレージモジュールメモリ（たとえば図３中の３２４）にストレージモジュールはデータを転送し、ストレージモジュールメモリからクライアントメモリへのデータのＤＭＡ転送を開始し、次いで、ＤＭＡ完了の際、読出コマンド完了をプロセッサ完了キュー（ＣＱ）に書き込む。本発明の一実施形態において、要求された物理的位置がボールテッドメモリに存在する場合、ストレージモジュールは、ソリッドステートメモリモジュールにおける物理的位置からストレージモジュールメモリにデータを転送する必要がない。
【００９１】
本発明の一実施形態において、ＤＭＡエンジンは、データが位置するストレージモジュールのストレージモジュールコントローラに位置する。本発明の一実施形態において、ＤＭＡエンジンは、クライアントスイッチにデータのコピーを送信するように構成される。クライアントスイッチによる受信の際、クライアントスイッチは、クライアントメモリにおける適切な位置を識別するために、必要なマッピング（または変換）を行なう。その後、データのコピーは、クライアントメモリにおいて、識別された位置に書き込まれる。
【００９２】
ステップ６１６では、ストレージモジュールは、プロセッサについて割込を生成する。ステップ６１８では、プロセッサは、そのＣＱ中のデータを処理する。この段階では、プロセッサは、読出要求が処理されたと通知されている。ステップ６２０では、ひとたびプロセッサが完了キューのヘッドにあるデータを処理すると、クライアントは新しいＣＱヘッドをＣＱヘッドドアベルに書き込む。これはストレージモジュールに、プロセッサへの将来の通知において使用するＣＱの中の次の位置を示す。その後、プロセスはステップ６２４に進む。
【００９３】
ステップ６２２では、プロセッサは、制御モジュールにおけるメモリからデータを読み出し、ノントランスペアレントなブリッジを介してアクセス可能であるクライアントメモリにおける位置にデータのコピーを書き込むよう、（ストレージ機器またはクライアントスイッチに位置し得る）ＤＭＡエンジンをプログラムする。ＤＭＡエンジンはその後、制御モジュールにおけるメモリからデータを読み出し、クライアントメモリにデータのコピーを書き込む。
【００９４】
ステップ６２４では、プロセッサは、（プロセッサのＳＱを識別する）ＳＱ識別子と（クライアントがプロセッサに発行した特定の読出コマンドを識別する）読出コマンド識別子とをクライアントの完了キュー（ＣＱ）に書き込む。ステップ６２６では、プロセッサは、クライアントプロセッサについて割込を生成する。本発明の一実施形態において、プロセッサは、ノントランスペアレントなブリッジによって提供されるドアベル割込を使用して、クライアントプロセッサに割込を発行する。ステップ６２８では、クライアントは、そのＣＱにおけるデータを処理する。この段階では、クライアントは、読出要求が処理されたと通知されている。ステップ６３０では、ひとたびクライアントが完了キューのヘッドにあるデータを処理すると、クライアントは新しいＣＱヘッドをＣＱヘッドドアベルに書き込む。これはプロセッサに、クライアントへの将来の通知において使用するＣＱの中の次の位置を示す。
【００９５】
図７Ａ〜図７Ｃは、本発明の１つ以上の実施形態に従った、ストレージ機器からデータを読み出す例を示す。この例は、本発明の範囲を限定するようには意図されない。
【００９６】
図７Ａを参照して、クライアント（５００）が、ストレージ機器から（黒い丸によって示される）データを読み出す要求を発行するシナリオを考える。要求に応答して、制御モジュール（５０４）におけるプロセッサ（５１４）は、データの第１のコピーがメモリ（５１２）に位置することと、データの第２のコピーがソリッドステートメモリモジュールＢ（５２８）に位置することとを決定する。この決定に基づいて、プロセッサ（５１４）は、メモリ（５１２）からデータを読み出し、クライアントメモリ（５０８）における物理アドレスにデータのコピーを書き込むよう、ＤＭＡエンジン（図示せず）をプログラムする。ひとたびプログラムされると、ＤＭＡエンジンはメモリ（５１２）からデータを読み出し、クライアントメモリ（５０８）に書込を発行する。書き込まれるべきデータのコピーがクライアントスイッチ（５０２）に到達すると、クライアントスイッチは、ＤＭＡエンジンによって提供される宛先アドレスをクライアントメモリ（５０８）におけるアドレスにマッピング（または変換）する。その後、データのコピーは、クライアントスイッチ（５０２）によって決定されたアドレスにてクライアントメモリ（５０８）に書き込まれる。この例において、ＤＭＡエンジンは、クライアントスイッチ（５０２）に位置してもよい。
【００９７】
図７Ｂを参照して、クライアント（５００）が、ストレージ機器から（黒い丸によって示される）データを読み出す要求を発行するシナリオを考える。要求に応答して、制御モジュール（５０４）におけるプロセッサ（５１４）は、データのコピーがソリッドステートメモリモジュールＢ（５２８）に位置することを決定する。この決定に基づき、プロセッサは、ソリッドステートメモリモジュールＢ（５２８）から、ＤＭＡエンジン（図示せず）によってアクセス可能なメモリ（たとえばボールテッドメモリＢ（５２４））へのデータの転送を開始し、次いで、このメモリ位置からデータを読み出し、クライアントメモリ（５０８）における要求された位置にデータのコピーを書き込むようＤＭＡエンジンをプログラムする。書き込まれるべきデータのコピーがクライアントスイッチ（５０２）に到達すると、クライアントスイッチは、ＤＭＡエンジンによって提供される宛先アドレスをクライアントメモリ（５０８）におけるアドレスにマッピング（または変換）する。その後、データのコピーは、クライアントスイッチ（５０２）によって決定されたアドレスにてクライアントメモリ（５０８）に書き込まれる。この例において、ＤＭＡエンジンは、ストレージモジュールＢ（５２０）に位置してもよい。
【００９８】
図７Ｃを参照して、クライアント（５００）が、ストレージ機器から（黒い丸によって示される）データを読み出す要求を発行するシナリオを考える。要求に応答して、制御モジュール（５０４）におけるプロセッサ（５１４）は、データの第１のコピーがボールテッドメモリＢ（５２４）に位置することと、データの第２のコピーがソリッドステートメモリモジュールＢ（５２８）に位置することとを決定する。この決定に基づいて、プロセッサ（５１４）は、ボールテッドメモリＢ（５２４）からデータを読み出し、クライアントメモリ（５０８）における物理アドレスにデータのコピーを書き込むよう、ＤＭＡエンジン（図示せず）をプログラムする。ひとたびプログラムされると、ＤＭＡエンジンはボールテッドメモリＢ（５２４）からデータを読み出し、クライアントメモリ（５０８）に書込を発行する。書き込まれるべきデータのコピーがクライアントスイッチ（５０２）に到達すると、クライアントスイッチは、ＤＭＡエンジンによって提供される宛先アドレスをクライアントメモリ（５０８）におけるアドレスにマッピング（または変換）する。その後、データのコピーは、クライアントスイッチ（５０２）によって決定されたアドレスにてクライアントメモリ（５０８）に書き込まれる。この例において、ＤＭＡエンジンは、ストレージモジュールＢ（５２０）に位置してもよい。
【００９９】
本発明の１つ以上の実施形態は、当該システムにおける１つ以上のプロセッサによって実行される命令を使用して実施されてもよい。さらに、このような命令は、１つ以上の一時的でないコンピュータ読取可能媒体上に格納されるコンピュータ読取可能命令に対応してもよい。
【０１００】
本発明を限られた数の実施形態に関して記載したが、この開示の利益を有する当業者であれば、本願明細書において開示される本発明の範囲から逸脱しない他の実施形態が作り出され得るということを理解するであろう。したがって、本発明の範囲は、添付の請求の範囲によってのみ限定されるべきである。
【図１Ａ】
0006005835.tif 000002
【図１Ｂ】
0006005835.tif 000003
【図１Ｃ】
0006005835.tif 000004
【図１Ｄ】
0006005835.tif 000005
【図１Ｅ】
0006005835.tif 000006
【図２Ａ】
0006005835.tif 000007
【図２Ｂ】
0006005835.tif 000008
【図２Ｃ】
0006005835.tif 000009
【図２Ｄ】
0006005835.tif 000010
【図３】
0006005835.tif 000011
【図４Ａ】
0006005835.tif 000012
【図４Ｂ】
0006005835.tif 000013
【図５Ａ】
0006005835.tif 000014
【図５Ｂ】
0006005835.tif 000015
【図５Ｃ】
0006005835.tif 000016
【図６】
0006005835.tif 000017
【図７Ａ】
0006005835.tif 000018
【図７Ｂ】
0006005835.tif 000019
【図７Ｃ】
0006005835.tif 000020