(57)【要約】      （修正有）【課題】電源障害の場合に永続ストレージにユーザデータおよびメタデータを格納し、電力が回復されると、格納されたデータおよびメタデータをリカバリする方法を提供する。【解決手段】ボールテッドメモリにおけるオープンデータページにフラグを書き込む。オープンデータページは第１のテーブルオブコンテンツ（ＴＯＣ）ビットおよび仮の第１の物理アドレスを含む。ボールテッドメモリにおけるオープンＴＯＣページに、フラグについてのテーブルオブコンテンツエントリ（ＴＥ）を書き込む。オープンＴＯＣページは第２のＴＯＣビットおよび第２の物理アドレスを含み、オープンデータページが一杯であるという第１の判定に基づいて、ソリッドステートメモリモジュールにおけるページにフラグを書き込む。ページは仮の第１の物理アドレスに関連付けられており、ソリッドステートメモリモジュールおよびボールテッドメモリはストレージモジュールに位置する。【選択図】図６Ａ
2018156679.tif 000002
【特許請求の範囲】
【請求項１】
データを格納するための方法であって、
ボールテッドメモリにおけるオープンデータページにフラグを書き込むことを含み、前記オープンデータページは第１のテーブルオブコンテンツ（ＴＯＣ）ビットおよび第１の物理アドレスを含み、前記方法はさらに、
前記ボールテッドメモリにおけるオープンＴＯＣページに、前記フラグについてのテーブルオブコンテンツエントリ（ＴＥ）を書き込むことを含み、前記オープンＴＯＣページは第２のＴＯＣビットおよび第２の物理アドレスを含み、前記方法はさらに、
前記オープンデータページが一杯であるという第１の判定を行うことと、
前記第１の判定に基づいて、ソリッドステートメモリモジュールにおけるページに前記フラグを書き込むこととを含み、前記ページは前記第１の物理アドレスに関連付けられており、
前記ソリッドステートメモリモジュールおよび前記ボールテッドメモリはストレージモジュールに位置する、方法。
【請求項２】
前記オープンＴＯＣページに前記ＴＥを書き込む前に前記オープンデータページに第１のタグを書き込むことをさらに含み、前記オープンＴＯＣページにおける第２のタグは前記第２のＴＯＣビットおよび前記第２の物理アドレスを含む、請求項１に記載の方法。
【請求項３】
前記第１の物理アドレスおよび前記第２の物理アドレスは、前記ソリッドステートメモリモジュールにおける同じブロックに位置し、関連付けられる、請求項１に記載の方法。
【請求項４】
前記オープンＴＯＣページが一杯であるという第２の判定を行うことと、
前記第２の判定に基づいて、前記第２の物理アドレスを第３の物理アドレスに置換することと、
前記ソリッドステートメモリモジュールにおいて第２のページに前記ＴＥを書き込むこととをさらに含み、前記第２のページは前記第３の物理アドレスに関連付けられる、請求項１に記載の方法。
【請求項５】
前記第１の物理アドレスおよび前記第３の物理アドレスは、前記ソリッドステートメモリモジュールにおける同じブロックに位置し、関連付けられる、請求項４に記載の方法。
【請求項６】
前記ソリッドステートメモリモジュールはフラッシュメモリである、請求項１に記載の方法。
【請求項７】
データを格納するための方法であって、
ボールテッドメモリにおけるオープンデータページにフラグを書き込むことを含み、前記オープンデータページは第１のテーブルオブコンテンツ（ＴＯＣ）ビットおよび第１の物理アドレスを含み、前記方法はさらに、
前記ボールテッドメモリにおけるオープンＴＯＣページに、前記フラグについての第１のテーブルオブコンテンツエントリ（ＴＥ）を書き込むことを含み、前記オープンＴＯＣページは、第２のＴＯＣビット、第２の物理アドレス、および第２のＴＥを含み、前記方法はさらに、
前記ボールテッドメモリが位置するストレージモジュールについて電源障害のイベント通知を受け取ることを含み、
前記イベント通知に応答して、
前記ストレージモジュールにおけるソリッドステートメモリモジュールにおける、前記第１の物理アドレスに関連付けられないページに前記フラグを書き込むことと、
前記ソリッドステートメモリモジュールにおける、前記第２の物理アドレスに関連付
けられない第２のページに前記第１のＴＥおよび前記第２のＴＥを書き込むこととを含む、方法。
【請求項８】
前記ストレージモジュールの電源をオンした後、
前記ソリッドステートメモリモジュールから制御モジュールのメモリへ前記ページおよび前記第２のページのコンテンツをロードすることと、
前記メモリにおける前記第１のＴＥを識別することと、
前記第２の物理アドレスおよび前記第１のＴＥの少なくとも一部に基づき第３の物理アドレスを決定することと、
前記第３の物理アドレスを使用して、前記フラグが前記メモリに位置することを判定することと、
前記ソリッドステートメモリモジュールおよび別のソリッドステートメモリモジュールからなる群から選択されたものにおいて、第４の物理アドレスへの前記フラグの書込を開始することとをさらに含む、請求項７に記載の方法。
【請求項９】
前記ストレージモジュールの電源をオンした後、
前記ソリッドステートメモリモジュールから制御モジュールのメモリへ前記ページおよび前記第２のページのコンテンツをロードすることと、
前記メモリにおける前記第２のＴＥを識別することと、
前記第２の物理アドレスおよび前記第２のＴＥの少なくとも一部に基づき第３の物理アドレスを決定することと、
前記第３の物理アドレスを使用して、前記第３の物理アドレスに関連付けられる第２のフラグが前記メモリに位置していないと判定することと、
前記ソリッドステートメモリモジュールおよび別のソリッドステートメモリモジュールからなる群から選択されるものにおいて、別の位置に前記第２のフラグを再配置するようガーベッジコレクション動作を開始することとをさらに含む、請求項７に記載の方法。
【請求項１０】
前記ページおよび前記第２のページは前記ソリッドステートメモリモジュールの留保部分に関連付けられ、前記第２のフラグは前記ソリッドステートメモリモジュールにおける第３のページに格納され、前記第３のページは前記ソリッドステートメモリモジュールの非留保部分に関連付けられる、請求項９に記載の方法。
【請求項１１】
前記ソリッドステートメモリモジュールはフラッシュメモリであり、前記留保部分はシングルレベルセル（ＳＬＣ： single-level cell）モードで動作しており、前記非留保部分はマルチレベルセル（ＭＬＣ： multi-level cell）モードで動作している、請求項１
０に記載の方法。
【請求項１２】
前記ページおよび前記第２のページは、前記ソリッドステートメモリモジュールの留保部分に関連付けられる、請求項７に記載の方法。
【請求項１３】
前記ソリッドステートメモリモジュールはフラッシュメモリであり、前記留保部分はシングルレベルセル（ＳＬＣ： single-level cell）モードで動作している、請求項７に記載の方法。
【請求項１４】
前記ページおよび前記第２のページは、前記ソリッドステートメモリモジュールの最下位ビット（ＬＳＢ）ページである、請求項７に記載の方法。
【請求項１５】
コンピュータ読取可能プログラムコードを含むデータを格納するための一時的でないコンピュータ読取可能媒体であって、前記コンピュータ読取可能プログラムコードは、
ボールテッドメモリにおけるオープンデータページにフラグを書き込むことを行うため
のものであり、前記オープンデータページは第１のテーブルオブコンテンツ（ＴＯＣ）ビットおよび第１の物理アドレスを含み、前記コンピュータ読取可能プログラムコードはさらに、
前記ボールテッドメモリにおけるオープンＴＯＣページに、前記フラグについての第１のテーブルオブコンテンツエントリ（ＴＥ）を書き込むことを行うためのものであり、前記オープンＴＯＣページは第２のＴＯＣビット、第２の物理アドレス、および第２のＴＥを含み、前記コンピュータ読取可能プログラムコードはさらに、
前記ボールテッドメモリが位置するストレージモジュールについて電源障害のイベント通知を受け取ることを行うためのものであり、
前記イベント通知に応答して、
前記ストレージモジュールにおけるソリッドステートメモリモジュールにおける、前記第１の物理アドレスに関連付けられないページに前記フラグを書き込むことと、
前記ソリッドステートメモリモジュールにおける、前記第２の物理アドレスに関連付けられない第２のページに前記第１のＴＥおよび前記第２のＴＥを書き込むこととを行うためのものである、一時的でないコンピュータ読取可能媒体。
【請求項１６】
前記ストレージモジュールの電源をオンした後、
前記ソリッドステートメモリモジュールから制御モジュールのメモリへ前記ページおよび前記第２のページのコンテンツをロードすることと、
前記メモリにおける前記第１のＴＥを識別することと、
前記第２の物理アドレスおよび前記第１のＴＥの少なくとも一部に基づき第３の物理アドレスを決定することと、
前記第３の物理アドレスを使用して、前記フラグがメモリに位置することを判定することと、
前記ソリッドステートメモリモジュールおよび別のソリッドステートメモリモジュールからなる群から選択されたものにおいて、第４の物理アドレスへの前記フラグの書込を開始することとを行うためのコンピュータ読取可能プログラムコードをさらに含む、請求項１５に記載の一時的でないコンピュータ読取可能媒体。
【請求項１７】
前記ストレージモジュールの電源をオンした後、
前記ソリッドステートメモリモジュールから制御モジュールのメモリへ前記ページおよび前記第２のページのコンテンツをロードすることと、
前記メモリにおける前記第２のＴＥを識別することと、
前記第２の物理アドレスおよび前記第２のＴＥの少なくとも一部に基づき第３の物理アドレスを決定することと、
前記第３の物理アドレスを使用して、前記第３の物理アドレスに関連付けられる第２のフラグが前記メモリに位置していないと判定することと、
前記ソリッドステートメモリモジュールおよび別のソリッドステートメモリモジュールからなる群から選択されるものにおいて、別の位置に前記第２のフラグを再配置するようガーベッジコレクション動作を開始することとを行うためのコンピュータ読取可能プログラムコードをさらに含む、請求項１５に記載の一時的でないコンピュータ読取可能媒体。
【請求項１８】
前記ページおよび前記第２のページは前記ソリッドステートメモリモジュールの留保部分に関連付けられ、前記第２のフラグは前記ソリッドステートメモリモジュールにおける第３のページに格納され、前記第３のページは前記ソリッドステートメモリモジュールの非留保部分に関連付けられる、請求項１７に記載の一時的でないコンピュータ読取可能媒体。
【請求項１９】
前記ソリッドステートメモリモジュールはフラッシュメモリであり、前記留保部分はシ
ングルレベルセル（ＳＬＣ： single-level cell）モードで動作しており、前記非留保部分はマルチレベルセル（ＭＬＣ： multi-level cell）モードで動作している、請求項１
８に記載の一時的でないコンピュータ読取可能媒体。
【請求項２０】
前記ページおよび前記第２のページは、前記ソリッドステートメモリモジュールの最下位ビット（ＬＳＢ）ページである、請求項１５に記載の一時的でないコンピュータ読取可能媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
関連出願への相互参照
この出願は、２０１５年５月１９日に出願された米国仮特許出願連続番号第６２／１６３，７８２号の優先権を主張する。米国仮特許出願連続番号第６２／１６３，７８２号は、ここでその全文が参照により援用される。
【０００２】
背景
システムが永続ストレージにデータを書き込みかつ永続ストレージからデータを読み出し得るスピードはしばしば、システムの全体の性能の重大なファクタである。永続ストレージからデータを読み出すとともに永続ストレージにデータを書き込む従来のアプローチは、システムカーネルにおける複数のレイヤーによる処理およびハードウェアにおける複数のエンティティによる処理を必要とする。結果として、永続ストレージからデータを読み出すことおよび永続ストレージにデータを書き込むことによって、システムに有意なレイテンシーが導入され、その結果、システムの全体の性能が低減する。
【図面の簡単な説明】
【０００３】
【図１Ａ】当該技術の１つ以上の実施形態に従ったシステムを示す図である。
【図１Ｂ】当該技術の１つ以上の実施形態に従ったシステムを示す図である。
【図１Ｃ】当該技術の１つ以上の実施形態に従ったシステムを示す図である。
【図１Ｄ】当該技術の１つ以上の実施形態に従ったシステムを示す図である。
【図１Ｅ】当該技術の１つ以上の実施形態に従ったシステムを示す図である。
【図２Ａ】当該技術の１つ以上の実施形態に従ったストレージ機器を示す図である。
【図２Ｂ】当該技術の１つ以上の実施形態に従ったストレージ機器を示す図である。
【図２Ｃ】当該技術の１つ以上の実施形態に従ったストレージ機器を示す図である。
【図２Ｄ】当該技術の１つ以上の実施形態に従ったストレージ機器を示す図である。
【図３Ａ】当該技術の１つ以上の実施形態に従ったストレージモジュールを示す図である。
【図３Ｂ】当該技術の１つ以上の実施形態に従ったストレージモジュールを示す図である。
【図４Ａ】当該技術の１つ以上の実施形態に従ったストレージモジュールを示す図である。
【図４Ｂ】当該技術の１つ以上の実施形態に従ったブロックを示す図である。
【図４Ｃ】当該技術の１つ以上の実施形態に従ったデータページを示す図である。
【図４Ｄ】当該技術の１つ以上の実施形態に従ったＴＯＣページを示す図である。
【図４Ｅ】当該技術の１つ以上の実施形態に従ったブロックを示す図である。
【図４Ｆ】当該技術の１つ以上の実施形態に従ったテーブルオブコンテンツ（ＴＯＣ）エントリを示す図である。
【図４Ｇ】当該技術の１つ以上の実施形態に従ったボールテッドメモリコンテンツを示す図である。
【図４Ｈ】当該技術の１つ以上の実施形態に従ったオープンＴＯＣページを示す図である。
【図４Ｉ】当該技術の１つ以上の実施形態に従ったオープンデータページを示す図である。
【図５Ａ】当該技術の１つ以上の実施形態に従ったさまざまなデータ構造を示す図である。
【図５Ｂ】当該技術の１つ以上の実施形態に従ったさまざまなデータ構造を示す図である。
【図６Ａ】当該技術の１つ以上の実施形態に従ったフローチャートを示す図である。
【図６Ｂ】当該技術の１つ以上の実施形態に従ったフローチャートを示す図である。
【図６Ｃ】当該技術の１つ以上の実施形態に従ったフローチャートを示す図である。
【図７Ａ】当該技術の１つ以上の実施形態に従った例を示す図である。
【図７Ｂ】当該技術の１つ以上の実施形態に従った例を示す図である。
【図７Ｃ】当該技術の１つ以上の実施形態に従った例を示す図である。
【図７Ｄ】当該技術の１つ以上の実施形態に従った例を示す図である。
【図７Ｅ】当該技術の１つ以上の実施形態に従った例を示す図である。
【図７Ｆ】当該技術の１つ以上の実施形態に従った例を示す図である。
【図７Ｇ】当該技術の１つ以上の実施形態に従った例を示す図である。
【図８Ａ】当該技術の１つ以上の実施形態に従ったフローチャートを示す図である。
【図８Ｂ】当該技術の１つ以上の実施形態に従ったフローチャートを示す図である。
【発明を実施するための形態】
【０００４】
詳細な説明
ここで、当該技術の特定の実施形態が添付の図面を参照して詳細に記載される。当該技術の実施形態の以下の詳細な説明において、当該技術のより完全な理解を提供するために多くの特定の詳細が記載される。しかしながら、当該技術がこれらの特定の詳細がなくても実施されてもよいことは当業者には明らかであろう。他の例では、説明を不必要に複雑にすることを回避するよう周知の機構は詳細に記載されない。
【０００５】
図１〜図８Ｂの以下の説明では、当該技術のさまざまな実施形態において図に関して記載される任意の構成要素は、任意の他の図に関して記載された同様の名称を有する１つ以上の構成要素と同等であり得る。簡潔さのために、これらの構成要素の説明は、各図に関して繰り返されない。したがって、各図の構成要素の各実施形態は、参照により援用され、同様の名称を有する１つ以上の構成要素を有する他のすべての図内に随意に存在すると想定される。さらに、当該技術のさまざまな実施形態に従うと、ある図の構成要素の如何なる記載も、任意の他の図中の対応する同様の名称を有する構成要素に関して記載された実施形態に加えて、当該実施形態に関連して、または当該実施形態の代わりに実施されてもよい随意の実施形態として解釈されるべきである。
【０００６】
一般に、当該技術の実施形態はストレージシステムに関する。より具体的には、当該技術の実施形態は、自己記述型データを含むストレージシステムに関する。さらに、当該技術の実施形態は、ストレージシステムに格納されるユーザデータにアクセスするのに必要なすべてのメタデータが、それが記述するユーザデータとともに位置するストレージシステムに関する。さらに、メタデータは、インメモリデータ構造のみを使用してストレージシステムが直接的にユーザデータにアクセスすることを可能にするインメモリデータ構造にポピュレート（populate）するために使用される。さらに、当該技術の実施形態は、電源障害（または他のシステム障害）の場合に、永続ストレージにユーザデータおよびメタデータを格納し、次いで、電力が回復されると、そのような格納されたデータおよびメタデータをリカバリすることに関する。
【０００７】
図１Ａ〜図１Ｅは、当該技術の１つ以上の実施形態に従ったシステムを示す。図１Ａを参照して、システムは、ストレージ機器（１０２）に動作可能に接続される１つ以上のクライアント（クライアントＡ（１００Ａ），クライアントＭ（１００Ｍ）））を含む。
【０００８】
当該技術の一実施形態において、クライアント（１００Ａ，１００Ｍ）は、ストレージ機器（１０２）に読出要求を発行するおよび／またはストレージ機器（１０２）に書込要求を発行する機能を含む任意のシステムに対応する。図１Ａに示されないが、クライアン
ト（１００Ａ，１００Ｍ）の各々は、クライアントプロセッサおよびクライアントメモリを含み得る。クライアントにおけるコンポーネントに関する付加的な詳細は、以下の図１Ｄにおいて記載される。当該技術の一実施形態において、ペリフェラルコンポーネントインターコネクト（ＰＣＩ： 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）のようなポイントツーポイント相互接続を使用して直接的に通信することができる。当業者であれば、当該技術から逸脱することがなければ、他のポイントツーポイント通信メカニズムがプロセッサ（２４８，２５０）間の直接的な通信を可能にするよう使用されてもよいということを理解するであろう。
【００４５】
当該技術の一実施形態において、プロセッサＡ（２４８）は主として、ストレージモジュールグループＡおよびＢ（２５６，２５８）からのデータの格納および抽出に関係付けられる要求を扱うように構成され、プロセッサＢ（２５０）は主として、ストレージモジュールグループＣおよびＤ（２６０，２６２）からのデータの格納および抽出に関係付けられる要求を扱うように構成される。しかしながら、プロセッサ（２４８，２５０）は、（スイッチファブリック（２４６）を介して）ストレージモジュールグループ（２５６，２５８，２６０，２６２）のすべてと通信するように構成される。この構成は、制御モジュール（２４０）がプロセッサ間でのＩ／Ｏ要求の処理を拡張することを可能にし、および／またはプロセッサの一つに障害が起きるシナリオに対処するために、ビルトインの冗長性を提供する。
【００４６】
図２Ｃを引き続き参照して、当該技術の一実施形態において、制御モジュール（２４０）は、図２Ａにおける制御モジュール（２００）と実質的に同様である。当該技術の一実施形態では、スイッチファブリック（２４６）は、図２Ａにおけるスイッチファブリック（２０６）と実質的に同様である。当該技術の一実施形態では、各プロセッサ（２４８，２５０）は、図２Ａにおけるプロセッサ（２０８）と実質的に同様である。当該技術の一実施形態では、メモリ（２５２，２５４）は、図２Ａにおけるメモリ（２１０）と実質的に同様である。当該技術の一実施形態では、ＩＯＭ（２４２，２４４）は、図２ＡにおけるＩＯＭ（２０４）と実質的に同様である。最後に、ストレージモジュールグループ（２５６，２５８，２６０，２６２）は、図２Ａにおけるストレージモジュールグループ（２０２）と実質的に同様である。
【００４７】
図２Ｄを参照して、図２Ｄは、２つの制御モジュール（２６４，２６６）を含むストレージ機器を示す。各制御モジュールは、ＩＯＭ（２９６，２９８，３００，３０２）、プロセッサ（２６８，２７０，２７２，２７４）、メモリ（２７６，２７８，２８０，２８２）およびＦＰＧＡ（存在する場合）（２８８，２９０，２９２，２９４）を含む。制御モジュール（２６４，２６６）の各々は、制御モジュール内のコンポーネントがそこを経由して通信するスイッチファブリック（２８４，２８６）を含む。
【００４８】
当該技術の一実施形態では、制御モジュール内のプロセッサ（２６８，２７０，２７２，２７４）は、たとえばインテル（登録商標）ＱｕｉｃｋＰａｔｈインターコネクト（In
tel QuickPath Interconnect）のようなポイントツーポイント相互接続を使用して互いに直接的に通信し得る。当業者であれば、当該技術から逸脱することがなければ、他のポイントツーポイント通信メカニズムがプロセッサ（２６８，２７０，２７２，２７４）間の直接的な通信を可能にするよう使用されてもよいということを理解するであろう。さらに、制御モジュールＡにおけるプロセッサ（２６８，２７０）は、制御モジュールＢにおけるスイッチファブリック（２８６）への直接接続を介して、制御モジュールＢにおけるコンポーネントと通信し得る。同様に、制御モジュールＢにおけるプロセッサ（２７２，２７４）は、制御モジュールＡにおけるスイッチファブリック（２８４）への直接接続を介して、制御モジュールＡにおけるコンポーネントと通信し得る。
【００４９】
当該技術の一実施形態において、制御モジュールの各々は、（ストレージモジュールグループ（３０４，３０６，３０８，３１０）によって示される）さまざまなストレージモジュールに接続される。図２Ｄに示されるように、各制御モジュールは、制御モジュールにおけるスイッチファブリックに接続されるストレージモジュールと通信し得る。さらに、制御モジュールＡ（２６４）におけるプロセッサは、スイッチファブリックＢ（２８６）を使用して、制御モジュールＢ（２６６）に接続されるストレージモジュールと通信し得る。同様に、制御モジュールＢ（２６６）におけるプロセッサは、スイッチファブリックＡ（２８４）を使用して、制御モジュールＡ（２６４）に接続されるストレージモジュールと通信し得る。
【００５０】
制御モジュール間の相互接続によって、どの制御モジュールがＩ／Ｏ要求を受け取るかに関わらず、ストレージ制御がストレージ機器に亘ってＩ／Ｏ負荷を分散することが可能になる。さらに、制御モジュールの相互接続によって、ストレージ機器はより多くのＩ／Ｏ要求を処理することが可能になる。さらに、制御モジュールの相互接続は、制御モジュール（または当該制御モジュールにおける１つ以上のコンポーネント）に障害が起きた場合に、ビルトインの冗長性を提供する。
【００５１】
図２Ｂ〜図２Ｄに関して、当該技術の１つ以上の実施形態において、インメモリデータ構造が、制御モジュールにおけるメモリに亘ってミラーリングされる。このような場合、制御モジュールにおけるプロセッサは、インメモリデータ構造がすべてのメモリに亘ってミラーリングされるようにストレージ機器内のすべてのメモリを更新するのに必要なコマンドを発行する。これにより、いずれのプロセッサも、ストレージ機器において（上で論じられたｎタプルによって規定されるように）データの位置を決定するために自身のメモリを使用し得る。この機能により、ストレージモジュール内のデータの位置に関して、如何なるプロセッサも如何なるＩ／Ｏ要求も処理することが可能になる。さらにインメモリデータ構造をミラーリングすることによって、メモリのうちの１つに障害が起きても、ストレージ機器は動作し続け得る。
【００５２】
当業者であれば、図２Ａ〜図２Ｄは限られた数のストレージモジュールに接続される制御モジュールを示すが、当該技術から逸脱することがなければ、制御モジュールは任意の数のストレージモジュールに接続されてもよいということを理解するであろう。当業者であれば、図２Ａ〜図２Ｄは、ストレージ機器のさまざまな構成を示しているが、当該技術から逸脱することがなければ、ストレージ機器は他の構成を使用して実施されてもよいということを理解するであろう。
【００５３】
図３Ａ〜図３Ｂは、当該技術の１つ以上の実施形態に従ったストレージモジュールを示す。図３Ａを参照して、ストレージモジュール（３２０）は、ストレージモジュールコントローラ（３２２）、メモリ（３２４）および１つ以上のソリッドステートメモリモジュール（３３０Ａ，３３０Ｎ）を含む。これらのコンポーネントの各々は以下に記載される。
【００５４】
当該技術の一実施形態では、ストレージモジュールコントローラ（３２２）は、１つ以上の制御モジュールからのデータの読み出しおよび／または１つ以上の制御モジュールへのデータの書き込みをする要求を受け取るよう構成される。さらに、ストレージモジュールコントローラ（３２２）は、メモリ（３２４）および／またはソリッドステートメモリモジュール（３３０Ａ，３３０Ｎ）を使用して、読出要求および書込要求を処理するように構成される。図３Ａには示されないが、ストレージモジュールコントローラ（３２２）は、メモリ（３２４）またはソリッドステートメモリモジュール（３３０Ａ，３３０Ｎ）の１つからデータを読み出し、クライアントメモリ（図１Ｄにおける１１４）における物理アドレスにデータのコピーを書き込むように構成されるＤＭＡエンジンを含んでもよい。さらに、ＤＭＡエンジンは、メモリ（３２４）からのデータをソリッドステートメモリモジュールの１つ以上に書き込むよう構成され得る。当該技術の一実施形態では、ＤＭＡエンジンは、プロセッサ（たとえば図２Ａにおける２０８）によってプログラムされるように構成される。当業者であれば、当該技術から逸脱することがなければ、ストレージモジュールはストレージモジュールコントローラの外部のＤＭＡエンジンを含んでもよいということを理解するであろう。
【００５５】
当該技術の一実施形態において、メモリ（３２４）は、任意の揮発性メモリに対応する。当該揮発性メモリは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、シンクロナスＤＲＡＭ、ＳＤＲ  ＳＤＲＡＭおよびＤＤＲ  ＳＤＲＡＭを含むが、これらに限定されない。
【００５６】
当該技術の一実施形態において、メモリ（３２４）は、ボールテッドメモリ（３２６）およびキャッシュ（３２８）に論理的または物理的にパーティショニングされ得る。当該技術の一実施形態において、ストレージモジュールコントローラ（３２２）は、ストレージモジュールにおける電源障害の通知の場合（またはストレージモジュールが電力を失い得る別の場合）、ボールテッドメモリ（３２６）の全コンテンツをソリッドステートメモリモジュール（３３０Ａ，３３０Ｎ）の１つ以上に書き出すように構成される。当該技術の一実施形態において、ストレージモジュールコントローラ（３２２）は、電源障害の通知の時間とストレージモジュールの実際の電力損失との間に、ボールテッドメモリ（３２６）の全コンテンツをソリッドステートメモリモジュール（３３０Ａ，３３０Ｎ）の１つ以上に書き込むように構成される。対照的に、キャッシュ（３２８）のコンテンツは、電源障害の場合（またはストレージモジュールが電力を失い得る別の場合）には失われる。
【００５７】
当該技術の一実施形態において、ソリッドステートメモリモジュール（３３０Ａ，３３０Ｎ）は、永続データを格納するようソリッドステートメモリを使用する任意のデータストレージデバイスに対応する。当該技術の一実施形態において、ソリッドステートメモリは、ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、磁気ＲＡＭメモリ（Ｍ−ＲＡＭ）、スピントルク磁気ＲＡＭメモリ（ＳＴ−ＭＲＡＭ）、相変化メモリ（ＰＣＭ）、または不揮発性ストレージクラスメモリ（ＳＣＭ）として規定される任意の他のメモリを含んでもよいが、これらに限定されない。
【００５８】
図３Ｂを参照して、当該技術の一実施形態において、ソリッドステートメモリモジュール（３３０）がフラッシュメモリ（たとえばＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリなど）を含む場合、フラッシュメモリの一部がシングルレベルセル（ＳＬＣ： single-level cell）モード（３３２）で動作し得、フラッシュメモリの別の部分がマルチレベルセル（ＭＬＣ： multi-level cell）モードで動作し得る。より具体的には、当該
技術の一実施形態において、フラッシュメモリはＭＬＣフラッシュメモリであり、ストレージモジュールコントローラは、ＳＬＣブロックとしてあるブロック（すなわちＳＬＣモード部分（３３２））を指定し、ＭＬＣブロックとして他のブロック（すなわちＭＬＣモ
ード部分（３３４））を指定する機能を含む。上記の指定に基づいて、ストレージモデルコントローラは、フラッシュメモリは実際にはＭＬＣフラッシュメモリであるが、まるでＳＬＣフラッシュメモリのように、ＳＬＣブロックと相互作用し得る。
【００５９】
ＭＬＣモードで動作しているフラッシュメモリの割合（すなわちＭＬＣモード部分３３４のサイズ）と比較した、ＳＬＣモードで動作しているフラッシュメモリの割合（すなわちＳＬＣモード部分（３３２）のサイズ）は、当該技術の実現例に基づき変動し得る。たとえば、当該技術の一実施形態において、ＳＬＣモードで動作するフラッシュメモリの量は、（図３Ａにおいて示されるような）ボールテッドメモリ（３２６）のサイズと少なくとも等しく、フラッシュメモリの残部はＭＬＣモードで動作する。
【００６０】
当該技術の一実施形態では、（ｉ）クライアントスイッチを介してアクセス可能なクライアントメモリの部分、（ｉｉ）制御モジュールにおけるメモリ、（ｉｉｉ）ストレージモジュールにおけるメモリ、および（ｉｖ）ソリッドステートメモリモジュールといったストレージ位置が、統合されたアドレス空間の一部である。したがって、ストレージ機器におけるプロセッサの視点から、（物理的に別個である）上記のストレージ位置同士が、物理アドレスの単一のプールとして現われる。換言すると、プロセッサは、統合されたアドレス空間において物理アドレスのうちのいずれかに格納されるデータについて読出要求および／または書込要求を発行し得る。上記のストレージ位置は、統合されたアドレス空間を使用してアクセス可能であるストレージファブリックと称され得る。
【００６１】
当該技術の一実施形態において、統合されたアドレス空間は、クライアントスイッチにおけるノントランスペアレントなブリッジによって部分的に作成され、これにより、制御モジュールにおけるプロセッサがクライアントメモリの部分を「見る」ことを可能になる。したがって、制御モジュールにおけるプロセッサは、プロセッサが「見ること」ができるクライアントメモリの部分において、読出要求および／または書込要求を行ない得る。
【００６２】
図４Ａは、当該技術の１つ以上の実施形態に従ったストレージモジュールを示す。ソリッドステートメモリモジュール（４００）は１つ以上のブロックを含む。当該技術の一実施形態において、ブロックは、ソリッドステートメモリモジュール（４００）内のストレージの最も小さな消去可能な単位である。
【００６３】
図４Ｂは、当該技術の１つ以上の実施形態に従ったブロックを示す。より具体的には、各ブロック（４０２）は１つ以上のページを含む。当該技術の一実施形態において、ページは、ソリッドステートメモリモジュールにおける（ページへの初期書込を含む）読出およびプログラム動作についての最も小さなアドレス指定可能な単位である。当該技術の一実施形態において、ブロック内のページを再書き込みすることは、全ブロックが再書き込みされることを必要とする。当該技術の一実施形態において、ブロック内における各ページは、フラグページ（Frag Page）（図４Ｃ参照）またはテーブルオブコンテンツ（ＴＯ
Ｃ： Table of Contents）ページのいずれかである（図４Ｄ参照）。
【００６４】
図４Ｃは、当該技術の１つ以上の実施形態に従ったデータページ（４０４）を示す。当該技術の一実施形態において、データページ（４０４）は、１つ以上のフラグを含む。当該技術の一実施形態において、フラグは、有限の量のユーザデータに対応する。さらに、所与のページ内におけるフラグは、均一のサイズまたは非均一のサイズであり得る。さらに、所与のブロック内のフラグは、均一のサイズまたは非均一のサイズであり得る。当該技術の一実施形態において、所与のフラグはページのサイズ未満であり得、ちょうどページのサイズであり得、または、１つ以上のページに亘って延在し得る。当該技術の一実施形態において、データページはフラグのみを含む。当該技術の一実施形態において、各フラグは、ユーザデータ（すなわちストレージ機器における格納のためにクライアントによ
って提供されるデータ）を含む。この説明の目的のために、「フラグ」および「ユーザデータ」という用語は、交換可能に使用される。
【００６５】
図４Ｄは、当該技術の１つ以上の実施形態に従ったＴＯＣページを示す。当該技術の一実施形態において、ＴＯＣページ（４０６）は、１つ以上のＴＯＣエントリを含んでおり、ＴＯＣエントリの各々は、所与のフラグについてのメタデータを含む。さらに、ＴＯＣページ（４０６）は、ブロック（４０２）において別のＴＯＣページへの参照を含み得る。当該技術の一実施形態において、ＴＯＣページは、ＴＯＣエントリ（および随意に、当該ブロックにおける別のＴＯＣページへの参照）のみを含むが、如何なるフラグも含まない。当該技術の一実施形態において、各ＴＯＣエントリは、ブロック（４０２）においてフラグ（図４Ｃ参照）に対応する。ＴＯＣエントリはブロック内のフラグにのみ対応する。換言すると、ＴＯＣページはブロックに関連付けられており、そのブロックにおけるフラグについてのＴＯＣエントリのみを含む。当該技術の一実施形態において、ソリッドステートメモリモジュールの各々内における各ブロックに欠陥がない最終ページがＴＯＣページである。
【００６６】
図４Ｅは、当該技術の１つ以上の実施形態に従ったブロックを示す。より具体的には、図４Ｅは、ＴＯＣページ（４２０，４２４，４３１）およびデータページ（４１６，４１８，４２２，４２８，４２８，４３０）を含むブロック（４０８）を示す。当該技術の一実施形態において、ブロック（４０８）は概念的に、「頂部」から「底部」に充填される。さらに、データページにおけるフラグについてのＴＯＣエントリの累積サイズがひとたびページのサイズと等しくなれば、ＴＯＣページが生成および格納される。図４Ｅを参照して、たとえば、データページ０（４１６）およびデータページ１（４１８）がブロック（４０８）に格納される。データページ０（４１６）およびデータページ１（４１８）におけるフラグ（図示せず）について対応するＴＯＣエントリ（図示せず）は、当該ブロックにおけるページのサイズと等しい合計累積サイズを有する。したがって、ＴＯＣページ（４１４）が（ブロックにおけるフラグに対応するＴＯＣエントリを使用して）生成され、ブロック（４０８）に格納される。フラグページ２（４２０）はその後、ブロック（４０８）に書き込まれる。データページ２（４２０）におけるフラグ（図示せず）に対応するＴＯＣエントリは、ブロックにおけるページのサイズと等しい合計累積サイズを有するので、ＴＯＣページ（４１２）は作成され、ブロック（４０８）に格納される。さらに、ブロック（４０８）にＴＯＣページが既に存在するので、ＴＯＣページ（４１２）はさらにＴＯＣページ（４１４）への参照を含む。
【００６７】
このプロセスは、ブロック（４０８）において、充填するべきページの残りが１つになるまで、繰り返される。この点において、ＴＯＣページ（４１０）は、ブロック（４０８）の最終ページにおいて作成および格納される。当業者は、ＴＯＣページ（４１０）におけるＴＯＣエントリの合計累積サイズがページのサイズ未満であり得るということを認識するであろう。そのような場合、ＴＯＣページは、ＴＯＣエントリの累積サイズとページサイズとの間の差に対応するために水増し（padding）することを含み得る。最後に、ブ
ロック（４０８）に他のＴＯＣページが存在するので、ＴＯＣページ（４１０）は、１つの他のＴＯＣページ（４１２）への参照を含む。
【００６８】
図４Ｅに示されるように、ＴＯＣページは、ＴＯＣページの下にあるＴＯＣページからの参照に従うことによってＴＯＣページが得られ得るように、ブロックの「底部」からページの「頂部」にリンクされる。たとえば、ＴＯＣページ（４１２）は、ＴＯＣページ（４１０）における参照を使用してアクセスされ得る。
【００６９】
当業者は、ブロック（４０８）はデータページおよびＴＯＣページのみを含むが、当該技術から逸脱することがなければ、ブロック（４０８）は、データページおよびＴＯＣペ
ージ以外のページ（たとえばパリティーデータを含むページ）を含んでもよいということを認識するであろう。そのような他のページは、ブロック内に存在し得、実現例に依存して、ＴＯＣページとデータページとの間にインターリーブされる。
【００７０】
図４Ｆは、当該技術の１つ以上の実施形態に従ったＴＯＣエントリを示す。当該技術の一実施形態において、各ＴＯＣエントリ（４３０）は、フラグ（特にフラグにおけるユーザデータ）についてメタデータを含んでおり、（ｉ）格納されているオブジェクト（たとえばファイル）を識別するオブジェクトＩＤ（４３２）と、（ｉｉ）ＴＯＣエントリに対応するフラグがボールテッドメモリに書き込まれた時間を特定する発生時間（４３４）（たとえば制御モジュールにおけるプロセッサのプロセッサクロック値）と、（ｉｉｉ）（オブジェクトＩＤによって識別される）オブジェクトの開始に対するフラグにおけるユーザデータの始点を識別するオフセットＩＤ（４３６）と、（ｉｖ）フラグのサイズを特定するフラグメントサイズ（４３８）と、（ｖ）フラグが格納されるブロックにおけるページを識別するページＩＤ（４４０）と、（ｖｉ）（ページＩＤによって識別される）ページにおけるフラグの開始位置を識別するバイト（４４２）と、（ｖｉｉ）フラグにおけるユーザデータの非圧縮長さを特定する論理長（４４４）と、（ｖｉｉｉ）フラグにおけるユーザデータのタイプ（たとえばバッドページ（badpage）、データ、スナップショット
、プール）を特定するタイプ（４４６）と、（ｉｘ）フラグが有効なユーザデータまたはトリムであるかどうか特定する種類（４４８）（ソリッドステートメモリモジュールがガーベッジコレクションを実行する際に当該フラグが消去され得ることを示す）と、（ｘ）他のユーザデータを格納するために使用され得るＴＯＣエントリにおけるスペースに対応する留保（４５０）といったフィールドのうち１つ以上を含み得る。
【００７１】
当該技術の一実施形態において、＜オブジェクトＩＤ，オフセットＩＤ＞または＜オブジェクトＩＤ，オフセットＩＤ，発生時間＞は、クライアントによって提供されるユーザデータを識別する。さらに、＜オブジェクトＩＤ，オフセットＩＤ＞または＜オブジェクトＩＤ，オフセットＩＤ，発生時間＞は、特定のユーザデータを識別するようクライアントによって使用され、ストレージ機器は、ストレージ機器内のユーザデータを識別するために物理アドレスを使用する。当業者は、クライアントがオブジェクトＩＤおよびオフセットＩＤの代わりに論理アドレスを提供し得ることを認識するであろう。
【００７２】
当業者は、ＴＯＣエントリが、当該技術から逸脱することがなければ、図４Ｆにおいて示されるより多いまたは少ないフィールドを含み得るということを認識するであろう。さらに、ＴＯＣエントリにおけるフィールドは、当該技術から逸脱することがなければ、異なる順に配され、および／または組み合わせられ得る。さらに、図４Ｆにおいて示されるＴＯＣエントリにおけるフィールドはすべて、同じ大きさのものであるように思われるが、ＴＯＣエントリにおけるさまざまなフィールドのサイズは非均一であり得、任意の所与のフィールドのサイズはＴＯＣエントリの実現例に基づいて変動する。
【００７３】
図４Ｇは、当該技術の１つ以上の実施形態に従ったボールテッドメモリコンテンツを示す。ボールテッドメモリ（４６０）内のメモリの部分は、最終的に永続ストレージに格納されるページと同じサイズであるセグメントへ割り当てられ得る（たとえば図４Ｅ参照）。当該技術の一実施形態において、前述のセグメントは、（ｉ）オープンＴＯＣページ（４６２）、（ｉｉ）オープンデータページ（４６４）、および（ｉｉｉ）書込データページ（４６６）を含み得る。以下のセクションは、単一のオープンＴＯＣページ、単一のオープンデータページおよび単一の書込データページに関して当該技術を説明しているが、当該技術から逸脱することがなければ、当該技術の実施形態は、複数のオープンＴＯＣページ、複数のオープンデータページおよび／または複数の書込ページを使用して実現され得る。ボールテッドメモリは、当該技術から逸脱することがなければ、他のセグメントを含み得る。
【００７４】
オープンＴＯＣページ（４６２）は、ＴＯＣエントリが適切なソリッドステートメモリモジュールに書き込まれる前に、そのようなＴＯＣエントリを格納するために使用されるメモリの部分である。より具体的には、ＴＯＣエントリは、ボールテッドメモリ内のオープンＴＯＣページに格納され、何らかの時点において、オープンＴＯＣページは一杯になる（すなわち如何なる付加的なＴＯＣエントリももはや格納することができない）。これが発生すると、オープンＴＯＣページのコンテンツは、ＴＯＣページとしてストレージメモリモジュールにおける適切なブロックに書き込まれる（たとえば図４Ｄ参照）。オープンＴＯＣページに関する付加的な詳細が図４Ｈに示される。
【００７５】
オープンデータページ（４６４）は、フラグが適切なソリッドステートメモリモジュールに書き込まれる前にそのようなフラグを格納するために使用されるメモリの部分である。オープンデータページに関する付加的な詳細が図４Ｈに示される。書込データページ（４６６）は、適切なソリッドステートメモリモジュールに現在書き込まれているフラグを含むメモリの部分である。メモリの前述の部分の指定は時間にわたり変化し得る。たとえば、メモリのある部分は、オープンデータページとして最初に指定され得る。メモリのこの部分がひとたび一杯になると（すなわち当該メモリの部分にこれ以上のフラグが格納することができなくなると）、当該メモリの部分の指定は書込データページに変更される。その後、書込データページのコンテンツは、データページとして、ソリッドステートメモリモジュールにおける適切なブロックに書き出される（たとえば図４Ｃ参照）。オープンＴＯＣページ、オープンデータページおよび書込データページの使用に関する付加的な詳細が以下の図６Ａ〜図７Ｇに示され得る。
【００７６】
図４Ｈは、当該技術の１つ以上の実施形態に従ったオープンＴＯＣページを示す。オープンＴＯＣページ（４７０）は、ＴＯＣビット（４７６）を含んでおり、ＴＯＣビットの状態（たとえば０または１のいずれか）は、メモリの部分がＴＯＣページであることを反映する。オープンＴＯＣページ（４７０）はさらに、ＴＯＣページが最終的に格納されることになる（ソリッドステートメモリモジュールにおける）ブロックにおける位置に対応するが、ＴＯＣページが格納されることになるブロックにおける実際の位置に必ずしも対応しない仮物理アドレス（４７８）を含む。より具体的には、ＴＯＣページが所与のブロックにおいて格納される位置は、図６Ｃに従って決定される。したがって、ＴＯＣページが生成されている時（すなわちＴＯＣエントリがオープンＴＯＣページに格納されている時）、ＴＯＣページの最終位置は分からない。しかしながら、ＴＯＣページが格納されることになるブロックは分かっている。したがって、仮物理アドレスは、ＴＯＣページが格納されることになるブロック内のアドレスとして選択される。ＴＯＣビット（４７６）および仮物理アドレス（４７８）は、集合的にタグ（４７２）と称される。タグ（４７２）は、他のコンテンツがオープンＴＯＣページに格納される前にオープンＴＯＣページに格納され得る。図４Ｈを参照して、オープンＴＯＣページはさらに、集合的にペイロードと称され得る１つ以上のＴＯＣエントリを含む。
【００７７】
図４Ｉは、当該技術の１つ以上の実施形態に従ったオープンデータページを示す。オープンデータページ（４８０）は、ＴＯＣビット（４８６）を含んでおり、ＴＯＣビットの状態（たとえば０または１のいずれか）は、メモリの部分がデータページであることを反映する。オープンデータページ（４８０）はさらに、データページが最終的に格納されることになる（ソリッドステートメモリモジュールにおける）ブロックにおける位置に対応する物理アドレス（４８８）を含む。ＴＯＣビット（４８６）および物理アドレス（４８８）は、集合的にタグ（４８２）と称される。タグ（４８２）は、他のコンテンツがオープンデータページに格納される前にオープンデータページに格納され得る。図４Ｉを参照して、オープンデータページはさらに、集合的にペイロード（４８４）と称され得る１つ以上のフラグを含む。
【００７８】
図５Ａは、当該技術の１つ以上の実施形態に従ったデータ構造を示す。上で論じたように、制御モジュールにおけるメモリはインメモリデータ構造を含む。当該技術の一実施形態において、インメモリデータ構造は、ｎタプル（たとえば＜オブジェクトＩＤ，オフセットＩＤ＞（５００）、＜オブジェクトＩＤ，オフセットＩＤ，発生時間＞（図示せず））と、ソリッドステートメモリモジュールにおけるフラグの物理アドレス（５０２）との間のマッピングを含む。当該技術の一実施形態において、当該マッピングは、ｎタプルのハッシュと物理アドレスとの間に存在する。当該技術の一実施形態において、フラグについての物理アドレスは、＜ストレージモジュール，チャンネル，チップイネーブル，ＬＵＮ，プレーン，ブロック，ページ，バイト＞といったｎタプルとして規定される。前述のタプルは、物理アドレスのコンテンツの論理表現に対応する。前述のコンテンツはたとえば、ストレージ機器においてさまざまなコンポーネントによって使用される４８ビットの物理アドレスにエンコードされ得る（たとえば図１Ａ〜図３Ｂ参照）。
【００７９】
図５Ｂは、当該技術の１つ以上の実施形態に従ったデータ構造を示す。当該技術の一実施形態において、制御モジュールは、ブロック（５０４）当たりのＴＯＣエントリ（５０６）の数をトラッキングする。より具体的には、フラグがボールテッドメモリに書き込まれるごとに、フラグについてのＴＯＣエントリが作成される。制御モジュールは、新しく作成されたＴＯＣエントリが関連付けられるのはどのブロックかをトラッキングし、ＴＯＣページを生成するためにこの情報を使用する。たとえば、制御モジュールは上記情報を使用して、ＴＯＣページに書き込まれていない所与のブロックに関連付けられるすべてのＴＯＣエントリの累積サイズがブロックにおけるページサイズと等しいかどうか判定する。ＴＯＣページに書き込まれていない所与のブロックに関連付けられるすべてのＴＯＣエントリの累積サイズがブロックにおけるページサイズと等しい場合、制御モジュールは上記エントリを使用してＴＯＣページを生成し、ストレージモジュールへのＴＯＣページの書込を開始し得る（たとえば図６Ｃ参照）。
【００８０】
図６Ａ〜図６Ｃは、当該技術の１つ以上の実施形態に従ったフローチャートを示す。より具体的には、図６Ａ〜図６Ｃは、当該技術の１つ以上の実施形態に従った、ストレージ機器にユーザデータを格納するための方法を示す。フローチャートにおけるさまざまなステップが順次、提示および記載されるが、当業者であれば、ステップのうちのいくつかまたはすべてが異なる順番で実行されてもよいこと、ステップのうちのいくつかまたはすべてが組み合わせられてもよくまたは省略されてもよいこと、およびステップのうちのいくつかまたはすべてが並列に実行されてもよいことを理解するであろう。当該技術の一実施形態では、図６Ａに示されるステップは、図６Ｂに示されるステップおよび図６Ｃに示されるステップと並列に行なわれ得る。さらに、図６Ｂに示されるステップは、図６Ｃに示されるステップと並列に行なわれ得る。
【００８１】
図６Ａを参照して、ステップ６００において、クライアントは、制御モジュールにおけるプロセッサ（図２Ａにおける２０８）の送信キュー（ＳＱ： submission queue）に書
込コマンド（書込要求）を書き込む。当該技術の一実施形態では、書込コマンドは、クライアントメモリにおけるユーザデータの論理アドレス（「ソースアドレス」とも称され得る）を特定する。当該技術の一実施形態において、書込コマンドは、＜オブジェクトＩＤ，オフセットＩＤ＞を使用してユーザデータを特定し得る。当該技術の一実施形態において、書込コマンドは、プロセッサのＳＱに到達する前に、少なくともクライアントスイッチおよびスイッチファブリックを通過する。
【００８２】
ステップ６０２では、クライアントはＳＱテールドアベルレジスタに新しいＳＱテールを書き込む。当該技術の一実施形態において、ＳＱテールドアベルレジスタに書き込むことによって、クライアントは、そのＳＱにおいて処理するべき新しいコマンドが存在する
とプロセッサに通知する。
【００８３】
ステップ６０４では、プロセッサはＳＱから書込コマンドを取得する。ステップ６０６では、プロセッサは、ユーザデータを（フラグの一部として）書き込むべき物理アドレスを決定する。当該技術の一実施形態では、物理アドレスはソリッドステートメモリモジュールにおける位置に対応する。当該技術の一実施形態において、プロセッサは、ユーザデータのコピーを書き込むべき２つの物理アドレスを選択する。当該物理アドレスの各々は別個のソリッドステートメモリモジュールに存在する。
【００８４】
上で論じたように、フラグは、ソリッドステートメモリモジュールに書き込まれる前に、ボールテッドメモリにおけるオープンデータページに書き込まれ、各物理アドレスは、＜ストレージモジュール，チャンネル，チップイネーブル，ＬＵＮ，プレーン，ブロック，ページ，バイト＞として特定され得る。したがって、オープンデータページに格納されるフラグの各々についての物理アドレスは、＜バイト＞値を除いて、物理アドレスのすべての部分について同じ値を有し得る。したがって、当該技術の一実施形態において、ステップ６０６において選択される物理アドレスが、オープンデータページのタグ（４８２）における物理アドレス（４８６）を使用して決定され得る。換言すると、所与のフラグが特定のソリッドステートメモリモジュールに書き込まれるべきであるという決定がひとたびなされると、ボールテッドメモリにおけるオープンデータページにおけるタグにおける物理アドレスに基づき、フラグを格納するべき物理アドレスが決定され得る。そのような場合、フラグを書き込むべき物理アドレスは、タグにおける物理アドレスを取得し、その後、この物理アドレスの＜バイト＞部分を修正することにより決定され得る（たとえば図７Ａ〜図７Ｇ参照）。
【００８５】
ステップ６０８では、プロセッサは、マルチキャストアドレスへの書込を発行するようにＤＭＡエンジンをプログラムする。当該技術の一実施形態において、マルチキャストアドレスはマルチキャストグループに関連付けられており、当該マルチキャストグループは、制御モジュールにおけるメモリにおける第１のメモリ位置、第１のボールテッドメモリにおけるオープンデータページにおける第２のメモリ位置、および第２のボールテッドメモリにおけるオープンデータページにおける第３のメモリ位置を特定する。当該技術の一実施形態において、第１のボールテッドメモリは、プロセッサによって特定される物理アドレスを含むソリッドステートメモリモジュールと同じストレージモジュールに位置する。当該技術の一実施形態において、第２のボールテッドメモリは、第１のストレージモジュールの障害から保護するよう異なるストレージモジュールに位置する。当該技術の一実施形態において、ステップ６０６においてプロセッサによって識別される各物理アドレスについて選択される１つのボールテッドメモリ位置が存在する。
【００８６】
ステップ６１０では、ＤＭＡエンジンは、クライアントメモリにおけるソースアドレスからユーザデータを読み出し、制御モジュールによって指示されるようにマルチキャストアドレスにデータを書き込む。当該技術の一実施形態では、スイッチファブリックにおけるスイッチは、マルチキャストアドレスに関連付けられる。アドレスの受信の際、スイッチは、３つのアドレス、すなわち上記のメモリ位置の各々に対するアドレスを取得するようマルチキャストアドレスに対して必要な変換を行なう。その後、スイッチは３つのメモリ位置にユーザデータのコピーを送信する。当業者であれば、マルチキャストを実現する特定のスイッチはスイッチファブリックの実現例に基づき変動し得るということを理解するであろう。この実施形態では、クライアントとストレージ機器との間には発行された書込は１つだけ存在する。
【００８７】
当該技術の別の実施形態において、ステップ６０８では、プロセッサは、３つの書込要求、すなわち上記のメモリ位置の各々に対する書込要求を並列に発行するようにＤＭＡエ
ンジンをプログラムする。この実施形態において、ステップ６１０では、ＤＭＡエンジンはこれらの３つの書込要求を並列に発行する。この実施形態では、クライアントとストレージ機器との間で３つの書込の発行が存在する。
【００８８】
図６Ａを引き続き参照して、ステップ６１２において、ＴＯＣエントリはボールテッドメモリに格納されたユーザデータの各コピーについて作成される。さらに、各ＴＯＣエントリにおいて特定されるページおよびバイトは、ステップ６０６において識別される対応する物理アドレスのページおよびバイトの部分に対応する。したがって、対応するＴＯＣエントリが作成される時に、ソリッドステートメモリモジュールにおける物理アドレスにフラグが書き込まれない間、（データページの一部としての）フラグが物理アドレスに後の時点で書き込まれるように意図される。上で論じたように、ＴＯＣエントリの各々はＴＯＣページに格納され、ＴＯＣページは、ソリッドステートメモリモジュールに最終的に書き込まれる。しかしながら、ＴＯＣページの作成の前に、ＴＯＣエントリは、作成されて、制御モジュールにおけるメモリと、ソリッドステートメモリモジュールのうちの１つの上のボールテッドメモリとに、一時的に格納される。
【００８９】
図６Ａを引き続き参照して、ステップ６１４において、ステップ６１２において作成されたＴＯＣエントリはボールテッドメモリに格納される。より具体的には、各ＴＯＣエントリは、ストレージモジュールのボールテッドメモリにおけるオープンＴＯＣページに格納され、かつ、対応するフラグが後の時点に書き込まれる物理アドレスを含む。
【００９０】
ステップ６１６では、プロセッサは、ユーザデータの３つのコピーがストレージ機器に格納されることを反映するようインメモリデータ構造を更新する。プロセッサはさらに、ブロック当たりのＴＯＣエントリをトラッキングするデータ構造を更新し得る（図５参照）。ステップ６１８では、プロセッサは、（プロセッサのＳＱを識別する）ＳＱ識別子と（クライアントがプロセッサに発行した特定の書込コマンドを識別する）書込コマンド識別子とをクライアントの完了キュー（ＣＱ）に書き込む。
【００９１】
ステップ６２０では、プロセッサは、クライアントプロセッサについて割込を生成する。当該技術の一実施形態において、プロセッサは、ノントランスペアレントなブリッジによって提供されるドアベル割込を使用して、クライアントプロセッサに割込を発行する。ステップ６２２では、クライアントは、そのＣＱにおけるデータを処理する。この段階では、クライアントは、書込要求が処理されたと通知されている。ステップ６２４では、ひとたびクライアントが完了キューのヘッドにあるデータを処理すると、クライアントは新しいＣＱヘッドをＣＱヘッドドアベルに書き込む。これはプロセッサに、クライアントへの将来の通知において使用するＣＱにおける次の位置を示す。
【００９２】
図６Ｂを参照して、ボールテッドメモリにおけるオープンデータページ（たとえば図４Ｇの４６４参照）がもはや任意の付加的なフラグを格納することができない場合（すなわちオープンデータページが一杯である場合）、オープンデータページは書込データページになる。ステップ６２６では、制御モジュールにおけるプロセッサは、タグ（４８２）における適切な位置（すなわち物理アドレス（４８６）に対応するソリッドステートメモリモジュールにおける位置）に対して書込データページのコンテンツを開始する。当該技術の一実施形態において、制御モジュールにおけるプロセッサは、ストレージモジュールコントローラにおけるＤＭＡエンジンをプログラムして、書込データページ（または書込データページのコンテンツ）をソリッドステートメモリモジュールに書き込む。当該技術の別の実施形態において、ストレージモジュールコントローラは、ソリッドステートメモリモジュールへの書込データページの書込を開始し得る。書込がひとたび完了すると、ストレージモジュールコントローラは制御モジュールに通知し得る。
【００９３】
ステップ６２６の後、ステップ６２８では、制御モジュールにおけるプロセッサは、ステップ６２６においてソリッドステートメモリモジュールに書き込まれたユーザデータに対応する、ボールテッドメモリにおけるユーザデータのすべてのコピーが除去されることを要求する。換言すると、プロセッサは、書込データページのコンテンツがボールテッドメモリから消去されることを要求し得る。ステップ６３０では、消去された書込データページを含んでいたストレージモジュールの各々によって、除去の確認が制御モジュールにおけるプロセッサへ送信される。
【００９４】
図６Ｃを参照して、図６Ｃは、ＴＯＣエントリが作成されるごとに実行される方法を示す。ステップ６３２において、空ページが１ページより多くブロックに残っているかどうかについて判定がなされる。換言すると、ブロックにおける最終ページを除いて、データページおよびＴＯＣページがすべての他のページに書き込まれたかどうかについて判定がなされる。空ページが１ページより多くブロックに残っている場合、プロセスはステップ６３４に進み、そうでなければ、プロセスはステップ６３６に進む。上で論じたように、データページまたはＴＯＣページのいずれかを書き込むべき空ページが１ページだけブロックに存在する場合、ＴＯＣページはブロックにおける最終ページに書き込まれなければならない。
【００９５】
ステップ６３４では、オープンＴＯＣページが一杯であるかどうか（すなわちＴＯＣエントリの累積サイズが、付加的なＴＯＣエントリがオープンＴＯＣページに格納されるのを防止するかどうか）について判定がなされる。オープンＴＯＣページが一杯の場合、プロセスはステップ６３６に進み、そうでなければプロセスは終了する。
【００９６】
ステップ６３６では、オープンＴＯＣページにおける仮物理アドレス（４７８）が最終物理アドレス（すなわちオープンＴＯＣページ（またはオープンＴＯＣページのコンテンツ）が格納されるべきブロックにおける実際の位置）に変更される。当該技術の一実施形態において、ユーザデータを書き込むべき空ページが１ページだけブロックに存在するとともにＴＯＣページが一杯ではない場合、当該ＴＯＣページを充填するために、水増しがオープンＴＯＣページに追加され得る。ステップ６３８において、ブロックが別のＴＯＣページを含むかどうかについて判定がなされる。ブロックが別のＴＯＣページを含んでいる場合、プロセスはステップ６４０に進み、そうでなければ、プロセスはステップ６４２に進む。ステップ６４０では、ブロックにおける最近格納されたＴＯＣページへの参照がステップ６３６において作成されたＴＯＣページに含まれる（たとえば、ＴＯＣページ（４１０）が図４ＥにおけるＴＯＣページ（４１２）を参照する）。
【００９７】
ステップ６４２では、プロセッサは、ソリッドステートメモリモジュール（または、より具体的には、ＴＯＣページにおいて特定される最終物理アドレス）に対して一杯のＴＯＣページの書込を開始する。
【００９８】
ステップ６４４では、プロセッサは、ステップ６４２においてソリッドステートメモリモジュールに書き込まれるＴＯＣページに含まれていたＴＯＣエントリを含むすべてのストレージモジュールに、それぞれのボールテッドメモリからそのようなＴＯＣエントリを除去することを要求する。換言すると、プロセッサは、オープンＴＯＣページのコンテンツがボールテッドメモリから消去されることを要求する。ステップ６４６では、プロセッサはストレージモジュールから、上記ＴＯＣエントリが除去されたという確認を受け取る。
【００９９】
図７Ａ〜図７Ｇは、当該技術の１つ以上の実施形態に従った、ストレージ機器にユーザデータを格納する例を示す。この例は、当該技術の範囲を限定するようには意図されない。
【０１００】
図７Ａを参照して、ボールテッドメモリが、オープンＴＯＣページと、（最初にオープンデータページとして指定される）データページＡと、（最初に書込データページとして指定される）データページＢとを含むシナリオを考える。「データページＡ」および「データページＢ」としてのページの指定は、この例示目的のために含まれているだけであり、データページＡがデータページＢより高いブロック番号に関連付けられる（またはその逆）を暗示するようには意図されておらず、むしろ、ページは、当該技術のさまざまな実施形態について説明するためにそのように指定されている。オープンＴＯＣページは、（自身がＴＯＣページであることを示す）セットＴＯＣビットと、自身が最終的に格納されることになるソリッドステートストレージ（図示せず）におけるブロックにおける物理位置に対応する仮物理アドレスとを含む。オープンＴＯＣページはさらにＴＯＣエントリ（ＴＥ１）を含む。ＴＥ１は、データページＡに格納されるフラグ１についてのＴＯＣエントリである。
【０１０１】
図７Ａに示されるように、データページＡは、セットされない（データページであることを示している）ＴＯＣビットを含む。データページＡは、データページが最終的に書き込まれることになるソリッドステートストレージにおける物理位置に対応する物理アドレス（ＰＡ２）をさらに含む。最後に、データページＡは、データページＡの内の＜バイト＞値に格納されるフラグ１を含み、＜バイト＞値に対する＜バイト＞値がＴＥ１において特定される（たとえば図４Ｆの４４２参照）。
【０１０２】
図７Ｂを参照して、何らかの後の時点で、第２のフラグ（フラグ２）および第２のＴＯＣエントリ（ＴＥ２）がボールテッドメモリに書き込まれる。図７Ｂは、フラグ２がデータページＡに格納されるとともにＴＥ２がオープンＴＯＣページに格納される場合のボールテッドメモリの状態を示す。
【０１０３】
この段階において、この段階ではデータページＡは一杯であり、したがって、その指定が書込データページに変更される。指定のこの変更の結果、データページＢの指定も変更される。具体的には、データページＢの指定は、書込データページからオープンデータページに遷移される。したがって、後で受け取られるフラグがデータページＢに格納され得る。図７Ｃは、データページの指定における上記変更の後のボールテッドメモリの状態を示す。図７Ｃにおいて示されるように、データページＢの指定がひとたびオープンデータページに変更されると、ＴＯＣビット（０にセットされる）と、物理アドレス（ＰＡ３）（ソリッドステートメモリモジュールにおける物理位置に対応する）とが、データページＢに格納される。タグ（すなわちＴＯＣビットおよび物理アドレス）がひとたびデータページＢに格納されると、フラグはデータページＢに格納され得る。
【０１０４】
何らかの後の時点で、データページＡのコンテンツはソリッドステートメモリモジュールにおけるＰＡ１に書き込まれ、その後、データページＡのコンテンツはデータページＡから消去される。さらに、フラグ３およびフラグ４がデータページＢに書き込まれ、対応するＴＯＣエントリ（ＴＥ３およびＴＥ４）がオープンＴＯＣページに書き込まれる。図７Ｄは、上記のイベントが発生した後のボールテッドメモリの状態を示す。
【０１０５】
この段階では、オープンＴＯＣページは一杯である（すなわち、これ以上のＴＯＣエントリがオープンＴＯＣページに格納され得ない）。したがって、オープンＴＯＣページ（またはオープンＴＯＣページのコンテンツ）についての最終物理アドレスが決定される。オープンＴＯＣページにおけるタグは、最終物理アドレスを含むよう更新され得る。図７Ｅは、上記のイベントが発生した後のボールテッドメモリの状態を示す。
【０１０６】
図７Ｅにおいて示されるように、オープンＴＯＣページおよびデータページＢの両方は
一杯である。したがって、制御モジュールまたはストレージモジュールコントローラは、オープンＴＯＣページのコンテンツおよびデータページＢのコンテンツの書込をソリッドステートメモリモジュールにおける適切な位置に対して開始し得る。
【０１０７】
ソリッドステートメモリモジュールへのオープンＴＯＣページのコンテンツの書込が成功すれば、ソリッドステートメモリモジュールは、最終物理アドレスに対応する位置におけるＴＯＣページを含むことになる。さらに、ソリッドステートメモリモジュールへのデータページＢのコンテンツの書込が成功すれば、ソリッドステートメモリモジュールはＰＡ２に対応する位置にデータページを含むことになる。さらに、上記のコンテンツは、適切なＭＬＣコマンドを使用してソリッドステートメモリモジュールのＭＬＣモード部分に書き込まれ得る。図７Ｆは、上記のイベントが発生した後のソリッドステートメモリモジュールの状態を示す。
【０１０８】
しかしながら、ＴＯＣページのコンテンツ（図７Ｅ参照）およびデータページＢのコンテンツ（図７Ｅ参照）がソリッドステートメモリモジュールに書き込まれる前に電源障害の通知が受け取られる場合、ＴＯＣページのコンテンツ（図７Ｅ参照）およびデータページＢのコンテンツ（図７Ｅ参照）が、適切なＳＬＣコマンドを使用して、ソリッドステートメモリモジュールのＳＬＣモード部分に書き込まれる。上記ページ（たとえばデータページおよびＴＯＣページ）が格納される位置は、前述のページに格納されるタグに存在する物理アドレスに対応しない。前述のコンテンツは、ソリッドステートメモリモジュールのＳＬＣモード部分内の最下位ビット（ＬＳＢ： Least Significant Bit）ページにのみ格納され得る。そのような場合、ＳＬＣモード部分のサイズは、ボールテッドメモリのサイズより（たとえば２倍）大きくなり得る。図７Ｇは、上記のイベントが発生した後のボールテッドメモリの状態を示す。
【０１０９】
当該技術の一実施形態において、制御モジュールが再起動されると、ソリッドステートメモリモジュールにおけるＴＯＣエントリは、クライアントがストレージ機器に格納されるユーザデータにアクセスすることを可能にするために、適切なインメモリデータ構造を生成するよう使用され得る（たとえば図５参照）。図８Ａは、当該技術の１つ以上の実施形態に従った、ソリッドステートメモリモジュールのＭＬＣモード部分に格納されたＴＯＣエントリを使用してインメモリデータ構造を生成するための方法を示す。図８Ｂは、当該技術の１つ以上の実施形態に従った、ソリッドステートメモリモジュールのＳＬＣモード部分に格納されるＴＯＣエントリを使用してインメモリデータ構造を生成するための方法を示す。前述のフローチャートにおけるさまざまなステップが順次提示および記載されるが、当業者は、ステップのうちのいくつかまたはすべてが異なる順番で実行されるか、組み合わせられるか、省略されるか、または、並列に実行され得るということを認識するであろう。
【０１１０】
図８Ａを参照して、ステップ８００では、ブロックが選択される。ステップ８０２では、当該ブロックにおける最終ページが取得される。たとえば、プロセッサは、最終ページのコンテンツを読み出す。上で論じたように、ストレージ機器内のソリッドステートメモリモジュールにおけるすべてのブロックの最終ページはＴＯＣページである。ステップ８０４では、ＴＯＣエントリはＴＯＣページから抽出される。
【０１１１】
ステップ８０６では、ステップ８０４で取得されたＴＯＣエントリの各々がインメモリデータ構造にポピュレートするように処理される。より具体的には、各ＴＯＣエントリを処理することは、（ｉ）ＴＯＣエントリからページＩＤおよびバイト情報を抽出することと、（ｉｉ）物理アドレスを取得するために、（ｉ）における情報を＜ストレージモジュール，チャンネル，チップイネーブル，ＬＵＮ，プレーン，ブロック＞と組み合わせることと、（ｉｉｉ）ＴＯＣエントリからオブジェクトＩＤおよびオフセットＩＤ（随意に発
生時間）を抽出することと、（ｉｖ）ハッシュ値を生成するために、＜オブジェクトＩＤ，オフセットＩＤ＞（または、随意に＜オブジェクトＩＤ，オフセットＩＤ，発生時間＞）にハッシュ関数を適用することと、（ｖ）ハッシュ値と物理アドレスとのマッピングをインメモリデータ構造にポピュレートすることとのうち１つ以上を含み得る。
【０１１２】
当該技術の一実施形態において、プロセッサはブロックの最終ページを取得するために＜ストレージモジュール，チャンネル，チップイネーブル，ＬＵＮ，プレーン，ブロック＞についての情報を必要としたので、プロセッサは既にこの情報を含んでいる。当該技術の一実施形態において、プロセッサは、フラグがバッドページに存在するかどうか判定するよう、ＴＯＣエントリにおけるタイプフィールドを使用し得る。フラグがバッドページに格納されている場合、プロセッサは、ＴＯＣエントリについて、インメモリデータ構造においてマッピングを生成しなくてもよい。
【０１１３】
ステップ８０８では、ひとたびＴＯＣページにおけるすべてのＴＯＣエントリが処理されると、ＴＯＣページがブロック（すなわちステップ８００で選択されたブロック）における別のＴＯＣページに対する参照を含むかどうかに関して判定がなされる。ＴＯＣページがブロックにおける別のＴＯＣページへの参照を含む場合、プロセスはステップ８１０に進み、そうでなければプロセスは終了する。ステップ８１０では、参照されたＴＯＣページが得られる。ステップ８１２では、ＴＯＣエントリがＴＯＣページから抽出される。その後、プロセスはステップ８０６に進む。
【０１１４】
図８Ｂを参照して、ステップ８２０では、ソリッドステートメモリモジュールのＳＬＣモード部分からのコンテンツが制御モジュールにおけるメモリにロードされる。当該コンテンツは、１つ以上のオープンＴＯＣページと、１つ以上のオープンデータページと、１つ以上の書込データページとを含み得る。当該技術の一実施形態において、システムが電力を失った時にボールテッドメモリに存在したすべてのデータは、制御モジュールのメモリにコピーされている。ストレージ機器がマルチキャスト書込メカニズム（たとえば図６Ａ〜図６Ｃ参照）を実現するので、ボールテッドメモリにデータの複数のコピーが存在し得る。ソリッドステートメモリモジュールの任意の所与のＳＬＣモード部分における具体的なコンテンツにかかわらず、ＳＬＣモード部分に格納される各ページはタグを含む（たとえば図７Ｇ参照）。
【０１１５】
ステップ８２２において、ＴＯＣページはステップ８２０において得られるコンテンツから識別される。ＴＯＣページを識別することは、上記の取得されたコンテンツにおける、ページがＴＯＣページであることを示すステータスを有するようにセットされるＴＯＣビットを含むページを探索することを含み得る。たとえば、ＴＯＣビット＝１を含むページは、ＴＯＣページであると識別され得る。
【０１１６】
ステップ８２４では、ステップ８２２において識別されるＴＯＣページからのＴＯＣエントリが取得される。当該技術の一実施形態において、ＴＯＣページの複数のコピーが制御モジュールメモリに存在する場合、ＴＯＣページの各コピーは、特定のＴＯＣエントリ（すなわちステップ８２４において得られるＴＯＣエントリ）がＴＯＣページの各コピーにおいて同一であることを判定するよう照合される。
【０１１７】
ステップ８２６では、ステップ８２４で得られたＴＯＣエントリに対応するフラグの物理アドレスが、ＴＯＣページにおけるタグにおける物理アドレスおよびＴＯＣエントリのコンテンツを使用して決定される。たとえば、ＴＯＣページの仮物理アドレスは＜ストレージモジュール１，チャンネル１，チップイネーブル１，ＬＵＮ１，プレーン１，ブロック２，ページ２，バイト０＞であり得、選択されたＴＯＣエントリからの＜ページ，バイト＞情報が＜ページ２，バイト５＞であり得る（たとえば図４Ｆの４４０，４４２参照）
。したがって、ＴＯＣエントリに対応するフラグの物理アドレスは、＜ストレージモジュール１，チャンネル１，チップイネーブル１，ＬＵＮ１，プレーン１，ブロック２，ページ２，バイト５＞であり得る。当業者は、前述の物理アドレスがｎタプルとして表わされているが、前述の物理アドレスはたとえば４８ビットの物理アドレスであり得るということを認識するであろう。
【０１１８】
ステップ８２８では、制御モジュールにおけるインメモリデータ構造は、＜オブジェクトＩＤ，オフセットＩＤ＞（ＴＯＣエントリから得られる）と、ステップ８２６において決定された物理アドレスとのマッピングを含むように更新される。前述の情報に基づいた他のマッピングは、当該技術から逸脱することがなければ、インメモリデータ構造に格納され得る（図５参照）。
【０１１９】
ステップ８３０では、ステップ８２６において決定された物理アドレスに対応するフラグを特定するために、制御モジュールにおけるメモリが探索される。フラグがメモリに存在する場合、プロセスはステップ８３４に進み、そうでなければ、プロセスはステップ８３２に進む。
【０１２０】
以下は、制御モジュールのメモリにおける対応するフラグを特定するための非限定的な例である。ステップ８２６において決定されたフラグについての物理アドレスが＜ストレージモジュール１，チャンネル１，チップイネーブル１，ＬＵＮ１，プレーン１，ブロック２，ページ２，バイト５＞であり、制御モジュールが、ＴＯＣビット＝０を含むタグと、＜ストレージモジュール１，チャンネル１，チップイネーブル１，ＬＵＮ１，プレーン１，ブロック２，ページ２＞を含む物理アドレスとを含むページを特定するためにメモリを探索し得るシナリオを考える。そのようなページが特定されると、フラグはメモリに存在すると判定され、そうでなければ、フラグはソリッドステートメモリモジュールに存在すると判定される。
【０１２１】
ステップ８３２では、フラグは、ステップ８２６で取得した物理アドレスを使用して、ソリッドステートメモリモジュールから得られる。
【０１２２】
ステップ８３４では、図６Ａ〜図６Ｃに従って、（ステップ８３２において取得されたか、または、ステップ８３０において存在すると識別された）フラグが、ストレージモジュールにおける新しい位置に書き込まれる。
【０１２３】
当該技術の一実施形態において、フラグがメモリに存在しない場合（すなわちフラグがソリッドステートメモリモジュールに存在する場合）、図８Ｂに従ってＴＯＣエントリを処理する際にメモリに対応するフラグをコピーする代わりに、フラグがガーベッジコレクションのためにマーキングされ得る。より具体的には、フラグは、ガーベッジコレクション動作の一部として、ソリッドステートメモリモジュールにおける他の位置へ再配置されるようにマーキングされ得る。
【０１２４】
図８Ｂの議論を引き続き参照して、ステップ８３６では、処理すべき付加的なＴＯＣエントリが存在するかどうかに関して判定がなされる。処理するべき付加的なＴＯＣエントリが存在する場合、当該方法はステップ８２４に進み、そうでなければプロセスは終了する。
【０１２５】
当該技術の一実施形態では、図８Ｂに示される方法は、メモリに格納されたすべてのオープンＴＯＣページ上で実行され得る。さらに、図８Ｂにおける方法は、システムの電源がオンされている場合、メモリにおけるすべてのＴＯＣページについて並列で実行され得る。
【０１２６】
当該技術の一実施形態において、図８Ａにおける方法は、システムの電源がオンされている場合、ストレージ機器内のすべてのブロック（またはブロックのサブセット）について並列で実行され得る。さらに、図８Ａにおける方法は、図８Ｂにおいて示される方法と並列に実行され得る。このプロセスの後、新しいユーザデータがストレージ機器に書き込まれると、結果得られるインメモリデータ構造はプロセッサによって更新され得る。
【０１２７】
前述の議論は、ＴＯＣページ、オープンデータページおよび書込データページがソリッドステートメモリのＳＬＣモード部分に書き込まれ得ることを示すが、当該技術は、ＳＬＣモード部分およびＭＬＣモード部分を有するソリッドステートメモリモジュールがなくても、実現され得る。
【０１２８】
たとえば、当該技術は、たとえばＭＬＣモードを使用して動作するとともに留保部分および非留保部分を含むソリッドステートメモリモジュールを使用して実現され得、当該留保部分は、電源障害（または電源障害の通知）の場合には、オープンＴＯＣページ、オープンデータページおよび書込データページからのコンテンツを格納するために使用されるソリッドステートメモリモジュールの部分に対応しており、ソリッドステートメモリモジュールの非留保部分は、図６Ｂおよび図６Ｃに従って、ＴＯＣページおよび書込データページからのコンテンツを格納するために使用される。
【０１２９】
別の例において、当該技術は、たとえばＳＬＣモードを使用して動作するとともに留保部分および非留保部分を含むソリッドステートメモリモジュールを使用して実現され得、当該留保部分は、電源障害（または電源障害の通知）の場合には、ＴＯＣページ、オープンデータページおよび書込データページからのコンテンツを格納するために使用されるソリッドステートメモリモジュールの部分に対応しており、ソリッドステートメモリモジュールの非留保部分は、図６Ｂおよび図６Ｃに従って、ＴＯＣページおよび書込データページからのコンテンツを格納するために使用される。
【０１３０】
当業者は、ソリッドステートメモリモジュールにおける技術を実現することに関して当該技術が記載されているが、当該技術の実施形態は他のタイプの不揮発性ストレージ媒体を使用して実現され得るということを認識するであろう。
【０１３１】
当業者は、永続ストレージ（たとえばソリッドステートメモリモジュール）と同じ位置にボールテッドメモリを配置することに関して当該技術が記載されているが、ボールテッドメモリが永続ストレージと同じ位置に配置されない当該技術の実施形態が実現され得るということを認識するであろう。
【０１３２】
当業者は、ＴＯＣページとして留保されている各ブロックにおける最終ページに関して当該技術が記載されたが、当該技術から逸脱することがなければ、留保されたＴＯＣページとしてブロックにおいて別ページをセットすることによって、当該技術の実施形態が実現され得るということを認識するであろう。
【０１３３】
当該技術の一実施形態において、インメモリデータ構造は、ソリッドステートメモリモジュールに格納される任意のデータに対して任意の動作（たとえば読出動作、書込動作および／または消去動作）が行われる前に生成される。
【０１３４】
当該技術の１つ以上の実施形態は、ストレージ機器に格納されるすべてのユーザデータがそのメタデータと同じ位置に配置されるシステムおよび方法を提供する。これにより、ストレージ機器に格納されるすべてのユーザデータは自己記述的である。当該技術のさまざまな実施形態に従ってユーザデータおよび対応するメタデータを配することによって、
ストレージ機器は、所与のソリッドステートメモリモジュール（またはそのサブセット）の障害に対してより良好に保護される。換言すると、所与のソリッドステートメモリモジュール（またはそのサブセット）に障害が起きても、他のソリッドステートメモリモジュールにおけるユーザデータにアクセスするのに必要なメタデータ自体が他のソリッドステートメモリモジュールに位置しているので、システムにおける他のソリッドステートメモリモジュールにおけるユーザデータはまだアクセス可能である。
【０１３５】
さらに、当該技術の実施形態は、単一のルックアップステップでユーザデータに制御モジュールがアクセスすることを可能にするインメモリデータ構造の作成を可能にする。換言すると、制御モジュールは、ストレージ機器におけるユーザデータの物理アドレスを直接的に確認するようインメモリデータ構造を使用し得る。この情報を使用して、制御モジュールはユーザデータに直接的にアクセスすることが可能であり、ユーザデータを得るために任意の中間メタデータヒエラルキーを横断する必要はない。
【０１３６】
当該技術の１つ以上の実施形態は、当該システムにおける１つ以上のプロセッサによって実行される命令を使用して実施されてもよい。さらに、このような命令は、１つ以上の一時的でないコンピュータ読取可能媒体上に格納されるコンピュータ読取可能命令に対応してもよい。
【０１３７】
当該技術を限られた数の実施形態に関して記載したが、この開示の利益を有する当業者であれば、本願明細書において開示される当該技術の範囲から逸脱しない他の実施形態が作り出され得るということを理解するであろう。したがって、当該技術の範囲は、添付の特許請求の範囲によってのみ限定されるべきである。
【図１Ａ】
2018156679.tif 000003
【図１Ｂ】
2018156679.tif 000004
【図１Ｃ】
2018156679.tif 000005
【図１Ｄ】
2018156679.tif 000006
【図１Ｅ】
2018156679.tif 000007
【図２Ａ】
2018156679.tif 000008
【図２Ｂ】
2018156679.tif 000009
【図２Ｃ】
2018156679.tif 000010
【図２Ｄ】
2018156679.tif 000011
【図３Ａ】
2018156679.tif 000012
【図３Ｂ】
2018156679.tif 000013
【図４Ａ】
2018156679.tif 000014
【図４Ｂ】
2018156679.tif 000015
【図４Ｃ】
2018156679.tif 000016
【図４Ｄ】
2018156679.tif 000017
【図４Ｅ】
2018156679.tif 000018
【図４Ｆ】
2018156679.tif 000019
【図４Ｇ】
2018156679.tif 000020
【図４Ｈ】
2018156679.tif 000021
【図４Ｉ】
2018156679.tif 000022
【図５Ａ】
2018156679.tif 000023
【図５Ｂ】
2018156679.tif 000024
【図６Ａ】
2018156679.tif 000025
【図６Ｂ】
2018156679.tif 000026
【図６Ｃ】
2018156679.tif 000027
【図７Ａ】
2018156679.tif 000028
【図７Ｂ】
2018156679.tif 000029
【図７Ｃ】
2018156679.tif 000030
【図７Ｄ】
2018156679.tif 000031
【図７Ｅ】
2018156679.tif 000032
【図７Ｆ】
2018156679.tif 000033
【図７Ｇ】
2018156679.tif 000034
【図８Ａ】
2018156679.tif 000035
【図８Ｂ】
2018156679.tif 000036
【手続補正書】
【提出日】平成30年6月7日(2018.6.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データを格納するための方法であって、
ボールテッドメモリにおけるオープンデータページにフラグを書き込むことを含み、前記オープンデータページは第１のテーブルオブコンテンツ（ＴＯＣ）ビットおよび仮の第１の物理アドレスを含み、前記方法はさらに、
前記ボールテッドメモリにおけるオープンＴＯＣページに、前記フラグについてのテーブルオブコンテンツエントリ（ＴＥ）を書き込むことを含み、前記オープンＴＯＣページは第２のＴＯＣビットおよび第２の物理アドレスを含み、前記方法はさらに、
前記オープンデータページが一杯であるという第１の判定を行うことと、
前記第１の判定に基づいて、ソリッドステートメモリモジュールにおけるページに前記フラグを書き込むこととを含み、前記ページは前記仮の第１の物理アドレスに関連付けられており、
前記ソリッドステートメモリモジュールおよび前記ボールテッドメモリはストレージモジュールに位置する、方法。
【請求項２】
前記オープンＴＯＣページに前記ＴＥを書き込む前に前記オープンデータページに第１のタグを書き込むことをさらに含み、前記オープンＴＯＣページにおける第２のタグは前記第２のＴＯＣビットおよび前記第２の物理アドレスを含む、請求項１に記載の方法。
【請求項３】
前記仮の第１の物理アドレスおよび前記第２の物理アドレスは、前記ソリッドステートメモリモジュールにおける同じブロックに位置し、関連付けられる、請求項１に記載の方法。
【請求項４】
前記オープンＴＯＣページが一杯であるという第２の判定を行うことと、
前記第２の判定に基づいて、前記第２の物理アドレスを第３の物理アドレスに置換することと、
前記ソリッドステートメモリモジュールにおいて第２のページに前記ＴＥを書き込むこととをさらに含み、前記第２のページは前記第３の物理アドレスに関連付けられる、請求項１に記載の方法。
【請求項５】
前記仮の第１の物理アドレスおよび前記第３の物理アドレスは、前記ソリッドステートメモリモジュールにおける同じブロックに位置し、関連付けられる、請求項４に記載の方法。
【請求項６】
前記ソリッドステートメモリモジュールはフラッシュメモリである、請求項１に記載の方法。
【請求項７】
データを格納するための方法であって、
ボールテッドメモリにおけるオープンデータページにフラグを書き込むことを含み、前記オープンデータページは第１のテーブルオブコンテンツ（ＴＯＣ）ビットおよび仮の第１の物理アドレスを含み、前記方法はさらに、
前記ボールテッドメモリにおけるオープンＴＯＣページに、前記フラグについての第１のテーブルオブコンテンツエントリ（ＴＥ）を書き込むことを含み、前記オープンＴＯＣページは、第２のＴＯＣビット、第２の物理アドレス、および第２のＴＥを含み、前記方法はさらに、
前記ボールテッドメモリが位置するストレージモジュールについて電源障害のイベント通知を受け取ることを含み、
前記イベント通知に応答して、
前記ストレージモジュールにおけるソリッドステートメモリモジュールにおける、前記仮の第１の物理アドレスに関連付けられないページに前記フラグを書き込むことと、
前記ソリッドステートメモリモジュールにおける、前記第２の物理アドレスに関連付けられない第２のページに前記第１のＴＥおよび前記第２のＴＥを書き込むこととを含む、方法。
【請求項８】
前記ストレージモジュールの電源をオンした後、
前記ソリッドステートメモリモジュールから制御モジュールのメモリへ前記ページおよび前記第２のページのコンテンツをロードすることと、
前記メモリにおける前記第１のＴＥを識別することと、
前記第２の物理アドレスおよび前記第１のＴＥの少なくとも一部に基づき第３の物理アドレスを決定することと、
前記第３の物理アドレスを使用して、前記フラグが前記メモリに位置することを判定することと、
前記ソリッドステートメモリモジュールおよび別のソリッドステートメモリモジュールからなる群から選択されたものにおいて、第４の物理アドレスへの前記フラグの書込を開始することとをさらに含む、請求項７に記載の方法。
【請求項９】
前記ストレージモジュールの電源をオンした後、
前記ソリッドステートメモリモジュールから制御モジュールのメモリへ前記ページおよび前記第２のページのコンテンツをロードすることと、
前記メモリにおける前記第２のＴＥを識別することと、
前記第２の物理アドレスおよび前記第２のＴＥの少なくとも一部に基づき第３の物理アドレスを決定することと、
前記第３の物理アドレスを使用して、前記第３の物理アドレスに関連付けられる第２のフラグが前記メモリに位置していないと判定することと、
前記ソリッドステートメモリモジュールおよび別のソリッドステートメモリモジュールからなる群から選択されるものにおいて、別の位置に前記第２のフラグを再配置するようガーベッジコレクション動作を開始することとをさらに含む、請求項７に記載の方法。
【請求項１０】
前記ページおよび前記第２のページは前記ソリッドステートメモリモジュールの留保部分に関連付けられ、前記第２のフラグは前記ソリッドステートメモリモジュールにおける第３のページに格納され、前記第３のページは前記ソリッドステートメモリモジュールの非留保部分に関連付けられる、請求項９に記載の方法。
【請求項１１】
前記ソリッドステートメモリモジュールはフラッシュメモリであり、前記留保部分はシングルレベルセル（ＳＬＣ： single-level cell）モードで動作しており、前記非留保部分はマルチレベルセル（ＭＬＣ： multi-level cell）モードで動作している、請求項１０に記載の方法。
【請求項１２】
前記ページおよび前記第２のページは、前記ソリッドステートメモリモジュールの留保部分に関連付けられる、請求項７に記載の方法。
【請求項１３】
前記ソリッドステートメモリモジュールはフラッシュメモリであり、前記ソリッドステートメモリモジュールの留保部分はシングルレベルセル（ＳＬＣ： single-level cell）モードで動作している、請求項７に記載の方法。
【請求項１４】
前記ページおよび前記第２のページは、前記ソリッドステートメモリモジュールの最下位ビット（ＬＳＢ）ページである、請求項７に記載の方法。
【請求項１５】
コンピュータ読取可能プログラムコードを含むデータを格納するための一時的でないコンピュータ読取可能記録媒体であって、前記コンピュータ読取可能プログラムコードは、
ボールテッドメモリにおけるオープンデータページにフラグを書き込むことを行うためのものであり、前記オープンデータページは第１のテーブルオブコンテンツ（ＴＯＣ）ビットおよび仮の第１の物理アドレスを含み、前記コンピュータ読取可能プログラムコードはさらに、
前記ボールテッドメモリにおけるオープンＴＯＣページに、前記フラグについての第１のテーブルオブコンテンツエントリ（ＴＥ）を書き込むことを行うためのものであり、前記オープンＴＯＣページは第２のＴＯＣビット、第２の物理アドレス、および第２のＴＥを含み、前記コンピュータ読取可能プログラムコードはさらに、
前記ボールテッドメモリが位置するストレージモジュールについて電源障害のイベント通知を受け取ることを行うためのものであり、
前記イベント通知に応答して、
前記ストレージモジュールにおけるソリッドステートメモリモジュールにおける、前記仮の第１の物理アドレスに関連付けられないページに前記フラグを書き込むことと、
前記ソリッドステートメモリモジュールにおける、前記第２の物理アドレスに関連付けられない第２のページに前記第１のＴＥおよび前記第２のＴＥを書き込むこととを行うためのものである、一時的でないコンピュータ読取可能記録媒体。
【請求項１６】
前記ストレージモジュールの電源をオンした後、
前記ソリッドステートメモリモジュールから制御モジュールのメモリへ前記ページおよび前記第２のページのコンテンツをロードすることと、
前記メモリにおける前記第１のＴＥを識別することと、
前記第２の物理アドレスおよび前記第１のＴＥの少なくとも一部に基づき第３の物理アドレスを決定することと、
前記第３の物理アドレスを使用して、前記フラグがメモリに位置することを判定することと、
前記ソリッドステートメモリモジュールおよび別のソリッドステートメモリモジュールからなる群から選択されたものにおいて、第４の物理アドレスへの前記フラグの書込を開始することとを行うためのコンピュータ読取可能プログラムコードをさらに含む、請求項１５に記載の一時的でないコンピュータ読取可能記録媒体。
【請求項１７】
前記ストレージモジュールの電源をオンした後、
前記ソリッドステートメモリモジュールから制御モジュールのメモリへ前記ページおよび前記第２のページのコンテンツをロードすることと、
前記メモリにおける前記第２のＴＥを識別することと、
前記第２の物理アドレスおよび前記第２のＴＥの少なくとも一部に基づき第３の物理アドレスを決定することと、
前記第３の物理アドレスを使用して、前記第３の物理アドレスに関連付けられる第２のフラグが前記メモリに位置していないと判定することと、
前記ソリッドステートメモリモジュールおよび別のソリッドステートメモリモジュールからなる群から選択されるものにおいて、別の位置に前記第２のフラグを再配置するようガーベッジコレクション動作を開始することとを行うためのコンピュータ読取可能プログラムコードをさらに含む、請求項１５に記載の一時的でないコンピュータ読取可能記録媒体。
【請求項１８】
前記ページおよび前記第２のページは前記ソリッドステートメモリモジュールの留保部分に関連付けられ、前記第２のフラグは前記ソリッドステートメモリモジュールにおける第３のページに格納され、前記第３のページは前記ソリッドステートメモリモジュールの非留保部分に関連付けられる、請求項１７に記載の一時的でないコンピュータ読取可能記録媒体。
【請求項１９】
前記ソリッドステートメモリモジュールはフラッシュメモリであり、前記留保部分はシングルレベルセル（ＳＬＣ： single-level cell）モードで動作しており、前記非留保部分はマルチレベルセル（ＭＬＣ： multi-level cell）モードで動作している、請求項１８に記載の一時的でないコンピュータ読取可能記録媒体。
【請求項２０】
前記ページおよび前記第２のページは、前記ソリッドステートメモリモジュールの最下位ビット（ＬＳＢ）ページである、請求項１５に記載の一時的でないコンピュータ読取可能記録媒体。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０１３６
【補正方法】変更
【補正の内容】
【０１３６】
当該技術の１つ以上の実施形態は、当該システムにおける１つ以上のプロセッサによって実行される命令を使用して実施されてもよい。さらに、このような命令は、１つ以上の一時的でないコンピュータ読取可能記録媒体上に格納されるコンピュータ読取可能命令に対応してもよい。
【外国語明細書】
2018156679000001.pdf