(58)【調査した分野】(Int.Cl.,DB名)
前記ページおよび前記第2のページは前記ソリッドステートメモリモジュールの留保部分に関連付けられ、前記第2のフラグは前記ソリッドステートメモリモジュールにおける第3のページに格納され、前記第3のページは前記ソリッドステートメモリモジュールの非留保部分に関連付けられる、請求項9に記載の方法。
前記ソリッドステートメモリモジュールはフラッシュメモリであり、前記留保部分はシングルレベルセル(SLC: single-level cell)モードで動作しており、前記非留保部分はマルチレベルセル(MLC: multi-level cell)モードで動作している、請求項10に記載の方法。
前記ソリッドステートメモリモジュールはフラッシュメモリであり、前記ソリッドステートメモリモジュールの留保部分はシングルレベルセル(SLC: single-level cell)モードで動作している、請求項7に記載の方法。
コンピュータ読取可能プログラムコードを含むデータを格納するための一時的でないコンピュータ読取可能記録媒体であって、前記コンピュータ読取可能プログラムコードは、
ボールテッドメモリにおけるオープンデータページにフラグを書き込むことを1つ以上のプロセッサに実行させ、前記オープンデータページは第1のテーブルオブコンテンツ(TOC)ビットおよび第1の物理アドレスを含み、前記第1のTOCビットは、前記フラグが書き込まれる前記ボールテッドメモリの部分がデータページであることを示し、前記コンピュータ読取可能プログラムコードはさらに、
前記ボールテッドメモリにおけるオープンTOCページに、前記フラグについての第1のテーブルオブコンテンツエントリ(TE)を書き込むことを前記1つ以上のプロセッサに実行させ、前記オープンTOCページは第2のTOCビット、仮の第2の物理アドレス、および第2のTEを含み、前記第2のTOCビットは、前記第1のTEおよび前記第2のTEが書き込まれる前記ボールテッドメモリの部分がTOCページであることを示し、前記コンピュータ読取可能プログラムコードはさらに、
前記ボールテッドメモリが位置するストレージモジュールについて電源障害のイベント通知を受け取ることを前記1つ以上のプロセッサに実行させ、
前記イベント通知に応答して、
前記ストレージモジュールにおけるソリッドステートメモリモジュールにおける、前記第1の物理アドレスに関連付けられないページに前記フラグを書き込むことと、
前記ソリッドステートメモリモジュールにおける、前記仮の第2の物理アドレスに関連付けられない第2のページに前記第1のTEおよび前記第2のTEを書き込むこととを前記1つ以上のプロセッサに実行させる、一時的でないコンピュータ読取可能記録媒体。
前記ページおよび前記第2のページは前記ソリッドステートメモリモジュールの留保部分に関連付けられ、前記第2のフラグは前記ソリッドステートメモリモジュールにおける第3のページに格納され、前記第3のページは前記ソリッドステートメモリモジュールの非留保部分に関連付けられる、請求項17に記載の一時的でないコンピュータ読取可能記録媒体。
前記ソリッドステートメモリモジュールはフラッシュメモリであり、前記留保部分はシングルレベルセル(SLC: single-level cell)モードで動作しており、前記非留保部分はマルチレベルセル(MLC: multi-level cell)モードで動作している、請求項18に記載の一時的でないコンピュータ読取可能記録媒体。
前記ページおよび前記第2のページは、前記ソリッドステートメモリモジュールの最下位ビット(LSB)ページである、請求項15に記載の一時的でないコンピュータ読取可能記録媒体。
【発明を実施するための形態】
【0004】
詳細な説明
ここで、当該技術の特定の実施形態が添付の図面を参照して詳細に記載される。当該技術の実施形態の以下の詳細な説明において、当該技術のより完全な理解を提供するために多くの特定の詳細が記載される。しかしながら、当該技術がこれらの特定の詳細がなくても実施されてもよいことは当業者には明らかであろう。他の例では、説明を不必要に複雑にすることを回避するよう周知の機構は詳細に記載されない。
【0005】
図1〜
図8Bの以下の説明では、当該技術のさまざまな実施形態において図に関して記載される任意の構成要素は、任意の他の図に関して記載された同様の名称を有する1つ以上の構成要素と同等であり得る。簡潔さのために、これらの構成要素の説明は、各図に関して繰り返されない。したがって、各図の構成要素の各実施形態は、参照により援用され、同様の名称を有する1つ以上の構成要素を有する他のすべての図内に随意に存在すると想定される。さらに、当該技術のさまざまな実施形態に従うと、ある図の構成要素の如何なる記載も、任意の他の図中の対応する同様の名称を有する構成要素に関して記載された実施形態に加えて、当該実施形態に関連して、または当該実施形態の代わりに実施されてもよい随意の実施形態として解釈されるべきである。
【0006】
一般に、当該技術の実施形態はストレージシステムに関する。より具体的には、当該技術の実施形態は、自己記述型データを含むストレージシステムに関する。さらに、当該技術の実施形態は、ストレージシステムに格納されるユーザデータにアクセスするのに必要なすべてのメタデータが、それが記述するユーザデータとともに位置するストレージシステムに関する。さらに、メタデータは、インメモリデータ構造のみを使用してストレージシステムが直接的にユーザデータにアクセスすることを可能にするインメモリデータ構造にポピュレート(populate)するために使用される。さらに、当該技術の実施形態は、電源障害(または他のシステム障害)の場合に、永続ストレージにユーザデータおよびメタデータを格納し、次いで、電力が回復されると、そのような格納されたデータおよびメタデータをリカバリすることに関する。
【0007】
図1A〜
図1Eは、当該技術の1つ以上の実施形態に従ったシステムを示す。
図1Aを参照して、システムは、ストレージ機器(102)に動作可能に接続される1つ以上のクライアント(クライアントA(100A),クライアントM(100M)))を含む。
【0008】
当該技術の一実施形態において、クライアント(100A,100M)は、ストレージ機器(102)に読出要求を発行するおよび/またはストレージ機器(102)に書込要求を発行する機能を含む任意のシステムに対応する。
図1Aに示されないが、クライアン
ト(100A,100M)の各々は、クライアントプロセッサおよびクライアントメモリを含み得る。クライアントにおけるコンポーネントに関する付加的な詳細は、以下の
図1Dにおいて記載される。当該技術の一実施形態において、ペリフェラルコンポーネントインターコネクト(PCI: Peripheral Component Interconnect)、PCIエクスプレス(PCIe: PCI-Express)、PCIエクステンデッド(PCI−X:PCI-eXtended)、ノンボラタイルメモリエクスプレス(NVMe: Non-Volatile Memory Express)、ノンボラタイルメモリエクスプレス(NVMe)オーバPCIエクスプレスファブリック(Non-Volatile Memory Express (NVMe) over a PCI-Express fabric)、ノンボラタイルメモリエクスプレス(NVMe)オーバイーサネット(登録商標)ファブリック(Non-Volatile Memory Express (NVMe) over an Ethernet fabric)、およびノンボラタイルメモリエクスプレス(NVMe)オーバインフィニバンドファブリック(Non-Volatile Memory Express (NVMe) over an Infiniband fabric)といったプロトコルの1つ以上を使用して、クライアント(100A,100M)はストレージ機器(102)と通信するように構成される。当業者であれば、当該技術は上記のプロトコルに限定されないということを理解するであろう。
【0009】
当該技術の1つ以上の実施形態において、クライアントがPCI、PCI−エクスプレスまたはNVMeを実施する場合、クライアントはルートコンプレックス(root complex)(図示せず)を含む。当該技術の一実施形態において、ルートコンプレックスは、クライアントプロセッサおよびクライアントメモリをPCIeファブリックに接続するデバイスである。当該技術の一実施形態において、ルートコンプレックスはクライアントプロセッサに統合される。
【0010】
当該技術の一実施形態において、PCIeファブリックは、スイッチ(たとえば
図1Dにおけるクライアントスイッチ(116)およびたとえば
図2Aにおけるスイッチファブリック(206)のようなスイッチファブリック内のスイッチ)を介して接続されるルートコンプレックスおよびエンドポイントを含む。当該技術の一実施形態では、エンドポイントは、PCIトランザクション(たとえば読出要求、書込要求)を発生させ得るかまたはPCIトランザクションのターゲットである、ルートコンプレックスまたはスイッチ以外のデバイスである。
【0011】
当該技術の一実施形態において、単一のクライアントおよび単一のストレージ機器は単一のPCIeファブリックの一部と考えられ得る。当該技術の別の実施形態において、1つ以上のクライアントおよび1つ以上のストレージ機器の任意の組合せは、単一のPCIeファブリックの一部と考えられ得る。さらに、PCIeを使用してストレージ機器内の個々のコンポーネントが通信するとともにPCIeを使用してクライアントにおける個々のコンポーネント(
図1D参照)が通信する場合、ストレージ機器およびクライアントにおけるすべてのコンポーネントは単一のPCIeファブリックの一部と考えられ得る。当業者であれば、当該技術から逸脱することがなければ、当該技術のさまざまな実施形態が別のタイプのファブリックを使用して実現されてもよいことを理解するであろう。
【0012】
引き続き
図1Aを参照して、当該技術の一実施形態において、ストレージ機器(102)は、揮発性および永続ストレージを含むシステムであり、1つ以上のクライアント(100A,100M)からの読出要求および/または書込要求を処理するように構成される。ストレージ機器(102)のさまざまな実施形態が以下の
図2A〜
図2Dに記載される。
【0013】
図1Bを参照して、
図1Bは、クライアント(100A,100M)が(
図1Bにおいてストレージ機器メッシュ(104)として示される)メッシュ構成で配される複数のストレージ機器(104A,104B,104C,104D)に接続されるシステムを示す
。
図1Bに示されるように、ストレージ機器メッシュ(104)は、完全接続のメッシュ構成(fully-connected mesh configuration)にある、すなわち、ストレージ機器メッシュ(104)におけるすべてのストレージ機器(104A,104B,104C,104D)がストレージ機器メッシュ(104)におけるすべての他のストレージ機器(104A,104B,104C,104D)に直接的に接続されるのが示される。当該技術の一実施形態において、クライアント(100A,100M)の各々は、ストレージ機器メッシュ(104)における1つ以上のストレージ機器(104A,104B,104C,104D)に直接的に接続され得る。当業者であれば、当該技術から逸脱することがなければ、ストレージ機器メッシュは、他のメッシュ構成(たとえば部分接続メッシュ(partially connected mesh))を使用して実現され得るということを理解するであろう。
【0014】
図1Cを参照して、
図1Cは、ファンアウト構成(fan-out configuration)に配され
る複数のストレージ機器(104A,104B,104C,104D)にクライアント(100A,100M)が接続されるシステムを示す。この構成では、各クライアント(100A,100M)は、ストレージ機器(104A,104B,104C,104D)の1つ以上に接続されるが、個々のストレージ機器(104A,104B,104C,104D)同士の間に通信は存在しない。
【0015】
図1Dを参照して、
図1Dは、当該技術の1つ以上の実施形態に従ったクライアントを示す。
図1Dに示されるように、クライアント(110)は、クライアントプロセッサ(112)と、クライアントメモリ(114)と、クライアントスイッチ(116)とを含む。これらのコンポーネントの各々は以下に記載される。
【0016】
当該技術の一実施形態において、クライアントプロセッサ(112)は、命令を実行するように構成される単一のコアまたは複数のコアを有する電子回路のグループである。当該技術の一実施形態において、クライアントプロセッサ(112)は、複合命令セット(CISC: Complex Instruction Set)アーキテクチャまたは縮小命令セット(RISC: Reduced Instruction Set)アーキテクチャを使用して実現され得る。当該技術の1つ以上の実施形態において、クライアントプロセッサ(112)は、(PCIeプロトコルによって規定されるように)ルートコンプレックスを含む(図示せず)。当該技術の一実施形態において、クライアント(110)が(クライアントプロセッサ(112)へ統合され得る)ルートコンプレックスを含んでいれば、クライアントメモリ(114)は、ルートコンプレックスを介してクライアントプロセッサ(112)に接続される。代替的には、クライアントメモリ(114)は、別のポイントツーポイント接続メカニズムを使用して、クライアントプロセッサ(112)に直接的に接続される。当該技術の一実施形態において、クライアントメモリ(114)は、任意の揮発性メモリに対応する。当該揮発性メモリは、ダイナミックランダムアクセスメモリ(DRAM)、シンクロナスDRAM、SDR SDRAMおよびDDR SDRAMを含むが、これらに限定されない。
【0017】
当該技術の一実施形態では、クライアントメモリ(114)は、クライアントプロセッサについての送信キューと、クライアントプロセッサについての完了キューとのうちの1つ以上を含む。当該技術の一実施形態において、ストレージ機器メモリは、ファブリックを通じてクライアントに可視であるクライアントプロセッサについての1つ以上の送信キューを含み、クライアントメモリは、ファブリックを通じてストレージ機器に可視であるクライアントプロセッサについての1つ以上の完了キューを含む。当該技術の一実施形態において、クライアントプロセッサについての送信キューは、クライアントプロセッサにコマンド(たとえば読出要求、書込要求)を送信するよう使用される。当該技術の一実施形態において、クライアントプロセッサについての完了キューは、別のエンティティに発行したコマンドが完了したことを、クライアントプロセッサに信号通知するよう使用される。当該技術の実施形態は、当該技術から逸脱することがなければ、他の通知メカニズム
を使用して実現されてもよい。
【0018】
当該技術の一実施形態において、クライアントスイッチ(116)は単一のスイッチのみを含む。当該技術の別の実施形態において、クライアントスイッチ(116)は、複数の相互接続されたスイッチを含む。クライアントスイッチ(116)が複数のスイッチを含んでいる場合、各スイッチは他のすべてのスイッチに接続されてもよく、スイッチファブリックにおけるスイッチのサブセットに接続されてもよく、または1つの他のスイッチにのみ接続されてもよい。当該技術の一実施形態において、クライアントスイッチ(116)におけるスイッチの各々は、データおよびメッセージがクライアント(110)とストレージ機器(図示せず)との間で転送されることを可能にするように構成される、ハードウェアおよび(たとえば集積回路を使用して実現される)(スイッチファブリックが実施するプロトコルによって規定されるような)ロジックの組み合わせである。
【0019】
当該技術の一実施形態において、クライアント(100A,100M)がPCI、PCIeまたはPCI−Xのうち1つ以上のプロトコルを実施する場合、クライアントスイッチ(116)はPCIスイッチである。
【0020】
このような実施形態では、クライアントスイッチ(116)は、多くのポートを含み、各ポートはトランスペアレントなブリッジまたはノントランスペアレントなブリッジとして構成され得る。トランスペアレントなブリッジとして実施されるポートは、ルートコンプレックスが、ポートに(直接的にまたは間接的に)接続されたデバイス(他のルートコンプレックス、スイッチ、PCIブリッジまたはエンドポイントであってもよい)の発見を継続することを可能にする。対照的に、ルートコンプレックスがノントランスペアレントなブリッジとして実施されたポートに直面すると、ルートコンプレックスは、ポートに接続されたデバイスの発見を継続することができず、むしろ、ルートコンプレックスは、このようなポートをエンドポイントとして扱う。
【0021】
ポートがノントランスペアレントなブリッジとして実施される場合、ノントランスペアレントなブリッジのいずれかの側上のデバイスは、メールボックスシステムおよびドアベル割込(doorbell interrupt)(クライアントスイッチによって実現される)を用いてのみ通信し得る。ドアベル割込は、ノントランスペアレントなブリッジの一方の側のプロセッサがノントランスペアレントなブリッジの他方の側のプロセッサに割込を発行するのを可能にする。さらに、メールボックスシステムは、スイッチファブリックのいずれかの側のプロセッサによって読出可能および書込可能である1つ以上のレジスタを含む。上記のレジスタは、クライアントスイッチのいずれかの側のプロセッサがノントランスピアレントなブリッジに亘って制御および状態情報を通過させるのを可能にする。
【0022】
当該技術の一実施形態において、ノントランスペアレントなブリッジの一方の側のデバイスからノントランスペアレントなブリッジの他方の側のデバイスにPCIトランザクションを送信するために、PCIトランザクションはノントランスペアレントなブリッジを実現するポートへアドレス指定されなければならない。PCIトランザクションの受信の際、クライアントスイッチは、(直接アドレス変換メカニズムまたはルックアップテーブルに基づいた変換メカニズムのいずれかを使用して)アドレス変換を行なう。次いで、結果得られるアドレスはノントランスペアレントなブリッジの他の側の適切なデバイスに向かうようパケットをルーティングするよう使用される。
【0023】
当該技術の一実施形態において、クライアントスイッチ(116)は、クライアントメモリ(114)の少なくともある部分がストレージ機器に直接的にアクセス可能であるように構成される。換言すると、クライアントスイッチの一方の側上のストレージ機器は、クライアントスイッチを介して、クライアントスイッチの他方の側上のクライアントメモ
リに直接的にアクセスし得る。
【0024】
当該技術の一実施形態では、クライアントスイッチ(116)はDMAエンジン(118)を含む。当該技術の一実施形態において、DMAエンジン(118)は、クライアントプロセッサかまたはクライアントスイッチに接続されたストレージ機器のいずれかによってプログラムされ得る。上で論じたように、クライアントスイッチ(116)は、クライアントメモリ(114)の少なくともある部分がストレージ機器またはストレージモジュールにアクセス可能であるように構成される。したがって、DMAエンジン(118)は、ストレージ機器にアクセス可能であるクライアントメモリの当該部分におけるアドレスからデータを読み出し、かつストレージ機器またはストレージモジュールにおいてメモリにこのようなデータのコピーを直接的に書き込むようにプログラムされ得る。さらに、DMAエンジン(118)は、ストレージ機器からデータを読み出し、ストレージ機器にアクセス可能であるクライアントメモリの当該部分におけるアドレスにこのようなデータのコピーを直接的に書き込むようにプログラムされ得る。
【0025】
当該技術の一実施形態では、DMAエンジン(118)はマルチキャスティングをサポートする。このような実施形態において、ストレージ機器におけるプロセッサ(
図2A参照)は、マルチキャストグループを作成し得る。当該マルチキャストグループの各メンバーは、ストレージ機器上のメモリにおけるユニークな宛先アドレスに対応する。マルチキャストグループの各メンバーは、(i)宛先アドレス、(ii)ソースアドレス、(iii)転送サイズフィールド、および(iv)制御フィールドを特定する記述子に関連付けられる。記述子の各々についてのソースアドレスは一定のままである一方、宛先アドレスは各記述子について変化する。ひとたびマルチキャストグループが作られると、DMAエンジンによって開始された転送を含む、マルチキャストグループアドレスをターゲットとするスイッチを通じた如何なるデータ転送によっても、マルチキャストグループに関連付けられる宛先アドレスのすべてにデータの同一のコピーが配置される。当該技術の一実施形態において、スイッチは、マルチキャストグループ記述子のすべてを並列に処理する。
【0026】
図1Dの議論を継続して、当業者であれば、
図1Dはクライアント(110)に位置するクライアントスイッチ(116)を示しているが、当該技術から逸脱することがなければ、クライアントスイッチ(116)はクライアントの外部に配置されてもよいということを理解するであろう。さらに、当業者であれば、当該技術から逸脱することがなければ、DMAエンジン(118)はクライアントスイッチ(116)の外部に配置されてもよいということを理解するであろう。
【0027】
図1Eを参照して、
図1Eは、メッシュ構成(
図1Eにおいてストレージ機器メッシュ(104)として示される)に配される複数のストレージ機器(104A,104B,104C,104D)にクライアントスイッチ(108)を介してクライアント(100A,100M)が接続されるシステムを示す。
図1Eに示される実施形態では、各クライアント(100A,100M)は自身のクライアントスイッチを含んでおらず、クライアントのすべては、クライアントスイッチ(108)を共有する。
図1Eに示されるように、ストレージ機器メッシュ(104)は、完全接続のメッシュ構成で示される。すなわち、ストレージ機器メッシュ(104)におけるすべてのストレージ機器(104A,104B,104C,104D)は、ストレージ機器メッシュ(104)におけるその他のすべてのストレージ機器(104A,104B,104C,104D)に直接的に接続される。当該技術の一実施形態では、クライアントスイッチ(108)は、ストレージ機器メッシュ(104)における1つ以上のストレージ機器(104A,104B,104C,104D)に直接的に接続され得る。当業者であれば、当該技術から逸脱することがなければ、ストレージ機器メッシュが他のメッシュ構成(たとえば部分接続メッシュ)を使用して実現され得るということを理解するであろう。
【0028】
図1Eに示されないが、各クライアントは、自身のクライアントスイッチを(
図1Dに示されるように)含んでもよいが、(以下に規定される)スイッチファブリックを使用して、ストレージ機器メッシュ(104)に接続されてもよい。
【0029】
当業者であれば、
図1A〜
図1Eは限られた数のクライアントに接続されるストレージ機器を示すが、当該技術から逸脱することがなければ、ストレージ機器は如何なる数のクライアントに接続されてもよいということを理解するであろう。当業者であれば、
図1A〜
図1Eはさまざまなシステム構成を示すが、当該技術は上記のシステム構成に限定されないということを理解するであろう。さらに当業者であれば、当該技術から逸脱することがなければ、クライアント(システムの構成にかかわらず)は、スイッチファブリック(図示せず)(以下に記載される)を使用して、ストレージ機器に接続され得るということを理解するであろう。
【0030】
図2A〜
図2Dは、当該技術の1つ以上の実施形態に従ったストレージ機器の実施形態を示す。
図2Aを参照して、ストレージ機器は、制御モジュール(200)およびストレージモジュールグループ(202)を含む。これらのコンポーネントの各々は以下に記載される。一般に、制御モジュール(200)は、1つ以上のクライアントからの読出要求および書込要求の処理を管理するように構成される。特に、制御モジュールは、(以下に論じられる)IOMを介して1つ以上のクライアントから要求を受け取り、要求を処理(ストレージモジュールに要求を送信することを含み得る)し、要求が処理された後にクライアントに応答を提供するよう構成される。制御モジュールにおけるコンポーネントに関する付加的な詳細は以下に含まれる。さらに、読出要求および書込要求の処理に関する制御モジュールの動作は、
図4A〜
図7Cを参照して以下に記載される。
【0031】
図2Aの議論を継続して、当該技術の一実施形態において、制御モジュール(200)は、入力/出力モジュール(IOM)(204)、スイッチファブリック(206)、プロセッサ(208)、メモリ(210)および随意にフィールドプログラマブルゲートアレイ(FPGA)(212)を含む。当該技術の一実施形態において、IOM(204)は、クライアント(
図1A〜
図1Eにおける100A,100M)とストレージ機器における他のコンポーネントとの間の物理インターフェイスである。IOMは、PCI、PCIe、PCI−X、イーサネット(登録商標)(IEEE802.3a〜802.3bjの下で規定されるさまざまな規格を含むがこれらに限定されない)、インフィニバンド、およびリモートダイレクトメモリアクセス(RDMA)オーバコンバージドイーサネット(RoCE: Remote Direct Memory Access over Converged Ethernet)といったプロトコルの1つ以上をサポートする。当業者であれば、当該技術から逸脱することがなければ、IOMは、上でリストされたもの以外のプロトコルを使用して実現されてもよいということを理解するであろう。
【0032】
図2Aの議論を継続して、スイッチファブリック(206)は単一のスイッチのみを含む。当該技術の別の実施形態では、スイッチファブリック(206)は、複数の相互接続されたスイッチを含む。スイッチファブリック(206)が複数のスイッチを含んでいる場合、各スイッチは他のすべてのスイッチに接続され得るか、スイッチファブリックにおけるスイッチのサブセットに接続され得るか、または、スイッチファブリックにおける1つの他のスイッチにのみ接続され得る。当該技術の一実施形態において、スイッチファブリック(206)におけるスイッチの各々は、ハードウェアと(スイッチファブリックが実施するプロトコルによって規定されるように)(たとえば集積回路を使用して実施される)ロジックとの組み合わせであり、ストレージ機器においてさまざまなコンポーネントを一緒に接続し、当該接続されたさまざまなコンポーネント同士の間でパケットを(当該ロジックを使用して)ルーティングするように構成される。当該技術の一実施形態におい
て、スイッチファブリック(206)は、IOM(204)と、プロセッサ(208)と、ストレージモジュールグループ(202)と、存在していればFPGA(212)とに物理的に接続される。当該技術の一実施形態において、制御モジュール(200)におけるすべてのコンポーネント間の通信(プロセッサ(208)とメモリ(210)との間は除く)は、スイッチファブリック(206)を通過する。さらに、制御モジュール(200)とストレージモジュールグループ(202)との間のすべての通信はスイッチファブリック(206)を通過する。当該技術の一実施形態では、スイッチファブリック(206)は、PCIプロトコル(たとえばPCI、PCIe、PCI−X、または別のPCIプロトコル)を使用して実施される。このような実施形態では、スイッチファブリック(206)を通過する通信はすべて、対応するPCIプロトコルを使用する。
【0033】
当該技術の一実施形態において、スイッチファブリックがPCIプロトコルを実施する場合、スイッチファブリック(206)は、プロセッサのためのポート(またはより具体的には、プロセッサ(208)に統合されたルートコンプレックスのためのポートもしくはプロセッサに接続されたルートコンプレックスのためのポート)と、ストレージモジュールグループ(202)におけるストレージモジュール(214A,214N)(
図3A〜
図3B参照)のための1つ以上のポートと、FPGA(212)(存在する場合)のためのポートと、IOM(204)のためのポートとを含む。当該技術の1つ以上の実施形態において、上記のポートの各々は、(上で論じたように)トランスペアレントなブリッジまたはノントランスペアレントなブリッジとして構成され得る。当業者であれば、スイッチファブリック(206)がPCIの実現例に関して記載されているが、当該技術から逸脱することがなければ、スイッチファブリック(206)は他のプロトコルを使用して実現されてもよいということを理解するであろう。
【0034】
当該技術の一実施形態では、スイッチファブリック(206)における少なくとも1つのスイッチは、マルチキャスティングを実現するように構成される。より具体的には、当該技術の一実施形態において、プロセッサ(208)はマルチキャストグループを生成するように構成される。当該マルチキャストグループは、2つ以上のメンバーを含んでおり、各メンバーは、メモリ(210)および/またはストレージモジュール(214A,214N)におけるアドレスを特定する。マルチキャストグループが作られる場合、マルチキャストグループはマルチキャストアドレスに関連付けられる。マルチキャスティングを実施するために、スイッチファブリックにおける少なくとも1つのスイッチは以下のように構成される、すなわち、宛先アドレスとしてマルチキャストアドレスを特定する書込が受け取られると、当該スイッチがマルチキャストグループにおける各メンバーについて新しい書込を生成し、ストレージ機器における適切なアドレスに書込を発行するように構成される。当該技術の一実施形態において、マルチキャストアドレスに特定のオフセットを加えることによって、スイッチによって生成される各書込についてのアドレスが決定される。
【0035】
図2Aを引き続き参照して、プロセッサ(208)は、命令を実行するように構成される単一のコアまたは複数のコアを有する電子回路のグループである。当該技術の一実施形態において、プロセッサ(208)は、複合命令セット(CISC: Complex Instruction Set)アーキテクチャまたは縮小命令セット(RISC: Reduced Instruction Set)アーキテクチャを使用して実現され得る。当該技術の1つ以上の実施形態において、プロセッサ(208)は、(PCIeプロトコルによって規定されるような)ルートコンプレックスを含む。当該技術の一実施形態において、制御モジュール(200)が(プロセッサ(208)へ統合され得る)ルートコンプレックスを含んでいれば、メモリ(210)は、ルートコンプレックスを介してプロセッサ(208)に接続される。代替的には、メモリ(210)は、別のポイントツーポイント接続メカニズムを使用して、プロセッサ(208)に直接的に接続される。当該技術の一実施形態において、メモリ(210)は、
任意の揮発性メモリに対応する。当該揮発性メモリは、ダイナミックランダムアクセスメモリ(DRAM)、シンクロナスDRAM、SDR SDRAMおよびDDR SDRAMを含むが、これらに限定されない。
【0036】
当該技術の一実施形態において、プロセッサ(208)は、インメモリデータ構造(in-memory data structure)(図示せず)を作成し更新するように構成され、当該インメモリデータ構造はメモリ(210)に格納される。当該技術の一実施形態において、インメモリデータ構造は、論理アドレスとストレージモジュールのセットにおける物理的なストレージアドレスとの間のマッピング(直接または間接)を含む。当該技術の一実施形態では、論理アドレスは、データがクライアントの視点から見て存在するように思われるアドレスである。当該技術の一実施形態では、論理アドレスは、nタプルにハッシュ関数(たとえばSHA−1、MD−5など)を適用することによって生成されるハッシュ値である(または当該ハッシュ値を含む)。当該技術の一実施形態では、nタプルは<オブジェクトID,オフセットID>であり、オブジェクトIDはファイルを規定し、オフセットIDはファイルの開始アドレスに対する位置を規定する。当該技術の別の実施形態において、nタプルは<オブジェクトID,オフセットID,発生時間>であり、発生時間は、(オブジェクトIDを使用して識別される)ファイルが作成された時間に対応する。代替的には、論理アドレスは、論理オブジェクトIDおよび論理バイトアドレスか、または論理オブジェクトIDおよび論理アドレスオフセットを含んでもよい。当該技術の別の実施形態では、論理アドレスは、オブジェクトIDおよびオフセットIDを含む。当業者であれば、複数の論理アドレスが単一の物理アドレスにマッピングされてもよく、論理アドレスは上記の実施形態に限定されないということを理解するであろう。
【0037】
当該技術の一実施形態において、物理アドレスは、(i)メモリ(210)における位置、(ii)ボールテッドメモリ(vaulted memory)(たとえば
図3Aにおける326)における位置、または(iii)ソリッドステートメモリモジュール(たとえば
図3Bにおける330)における位置に対応し得る。当該技術の一実施形態において、インメモリデータ構造は、ストレージ機器にデータの複数のコピーが存在する場合、単一のハッシュ値を複数の物理アドレスにマッピングし得る。
【0038】
当該技術の一実施形態では、メモリ(210)は、プロセッサについての送信キュー、プロセッサについての完了キュー、ストレージ機器におけるストレージモジュールの各々についての送信キュー、およびストレージ機器におけるストレージモジュールの各々についての完了キューの1つ以上を含む。当該技術の一実施形態では、プロセッサについての送信キューは、コマンド(たとえば読出要求、書込要求)をプロセッサに送信するよう使用される。当該技術の一実施形態において、プロセッサについての完了キューは、別のエンティティに発行したコマンドが完了したことを、プロセッサに信号通知するよう使用される。ストレージモジュールについての送信キューおよび完了キューは同様の態様で機能する。
【0039】
当該技術の一実施形態では、(スイッチファブリックを介する)プロセッサは、FPGA(212)にさまざまなタイプの処理をオフロードするように構成される。当該技術の一実施形態では、FPGA(212)は、ストレージモジュールに書き込まれているデータおよび/またはストレージモジュールから読み出されているデータについてチェックサムを計算する機能を含む。さらに、FPGA(212)は、RAIDスキーム(たとえばRAID2〜RAID6)を使用してストレージモジュールにデータを格納するためにPおよび/もしくはQパリティー情報を計算する機能、ならびに/またはRAIDスキーム(たとえばRAID2〜RAID6)を使用して格納された破損データをリカバリするのに必要なさまざまな計算を行なう機能を含み得る。当該技術の一実施形態において、ストレージモジュールグループ(202)は、データを格納するよう各々が構成される1つ以
上のストレージモジュール(214A,214N)を含む。ストレージモジュールは、以下に
図3A〜
図3Bにおいて記載される。
【0040】
当該技術の一実施形態では、プロセッサ(208)は、システムにおいて1つ以上のDMAエンジンをプログラムするように構成される。たとえば、プロセッサ(208)はクライアントスイッチにおけるDMAエンジンをプログラムするように構成される(
図1D参照)。プロセッサ(208)はさらに、ストレージモジュールにおけるDMAエンジンをプログラムするように構成され得る(
図3A〜
図3B参照)。当該技術の一実施形態において、クライアントスイッチにおけるDMAエンジンをプログラムすることは、マルチキャストグループを作成することと、当該マルチキャストグループにおけるメンバーの各々について記述子を生成することとを含み得る。
【0041】
図2Bを参照して、
図2Bは、当該技術の1つ以上の実施形態に従ったストレージ機器を示す図である。ストレージ機器は、制御モジュール(216)と、少なくとも2つのストレージモジュールグループ(236,238)とを含む。制御モジュール(216)は、IOM A(218)と、IOM B(220)と、プロセッサA(222)と、プロセッサB(224)と、(存在する場合)FPGA A(230)と、(存在する場合)FPGA B(232)と、ストレージモジュールグループA(236)におけるストレージモジュール(236A,236N)と、ストレージモジュールグループB(238)におけるストレージモジュール(238A,238N)とに直接的に接続されるスイッチファブリック(234)を含む。上記のコンポーネント間のすべての通信(プロセッサA(222)とプロセッサB(224)との間以外)はスイッチファブリック(234)を通過する。当該技術の一実施形態では、制御モジュール(216)内のプロセッサ(222,224)は、たとえばインテル(登録商標)QuickPathインターコネクト(Intel QuickPath Interconnect)のようなポイントツーポイント相互接続を使用して直接的に通信することができる。当業者であれば、当該技術から逸脱することがなければ、他のポイントツーポイント通信メカニズムがプロセッサ(222,224)間の直接的な通信を可能にするよう使用されてもよいということを理解するであろう。
【0042】
図2Bを引き続き参照して、当該技術の一実施形態において、制御モジュール(216)は、
図2Aにおける制御モジュール(200)と実質的に同様である。当該技術の一実施形態では、スイッチファブリック(234)は、
図2Aにおけるスイッチファブリック(206)と実質的に同様である。当該技術の一実施形態では、各プロセッサ(222,224)は、
図2Aにおけるプロセッサ(208)と実質的に同様である。当該技術の一実施形態では、メモリ(226,228)は、
図2Aにおけるメモリ(210)と実質的に同様である。当該技術の一実施形態では、IOM(218,220)は、
図2AにおけるIOM(204)と実質的に同様である。当該技術の一実施形態では、FPGA(230,232)は、
図2AにおけるFPGA(212)と実質的に同様である。最後に、ストレージモジュールグループ(236,238)は、
図2Aにおけるストレージモジュールグループ(202)と実質的に同様である。
【0043】
当該技術の一実施形態において、制御モジュール(216)における2つのIOM(218,220)は、(単一のIOMを有する制御モジュールのI/O帯域幅に対して)制御モジュール(216)についてのI/O帯域幅を2倍にする。さらに、第2のIOM(または付加的なIOM)の追加によって、所与の制御モジュールに接続され得るクライアントの数、ひいてはストレージ機器に接続され得るクライアントの数が増加される。当該技術の一実施形態において、さまざまな接続される(上記の)コンポーネント間の通信を扱うためのスイッチファブリック(234)の使用によって、プロセッサ(222,224)の各々が、スイッチファブリック(234)に接続されるすべてのFPGA(230,232)およびすべてのストレージモジュール(236A,236N,238A,23
8N)に(スイッチファブリック(234)を介して)直接的にアクセスすることが可能になる。
【0044】
図2Cを参照して、
図2Cは、ストレージモジュールグループ(256,258,260,262)における複数のストレージモジュール(図示せず)に(スイッチファブリック(246)を介して)接続された制御モジュール(240)を含むストレージ機器を示す。
図2Cに示されるように、制御モジュール(240)は、2つのIOM(242,244)、2つのプロセッサ(248,250)およびメモリ(252,254)を含む。当該技術の一実施形態では、制御モジュール(240)におけるすべてのコンポーネントは、スイッチファブリック(246)を介して通信する。さらに、プロセッサ(248,250)は、スイッチファブリック(246)または(
図2Cに示されるような)直接接続を使用して互いに通信し得る。当該技術の一実施形態では、制御モジュール(240)内のプロセッサ(248,250)は、たとえばインテル(登録商標)QuickPathインターコネクト(Intel QuickPath Interconnect)のようなポイントツーポイント相互接続を使用して直接的に通信することができる。当業者であれば、当該技術から逸脱することがなければ、他のポイントツーポイント通信メカニズムがプロセッサ(248,250)間の直接的な通信を可能にするよう使用されてもよいということを理解するであろう。
【0045】
当該技術の一実施形態において、プロセッサA(248)は主として、ストレージモジュールグループAおよびB(256,258)からのデータの格納および抽出に関係付けられる要求を扱うように構成され、プロセッサB(250)は主として、ストレージモジュールグループCおよびD(260,262)からのデータの格納および抽出に関係付けられる要求を扱うように構成される。しかしながら、プロセッサ(248,250)は、(スイッチファブリック(246)を介して)ストレージモジュールグループ(256,258,260,262)のすべてと通信するように構成される。この構成は、制御モジュール(240)がプロセッサ間でのI/O要求の処理を拡張することを可能にし、および/またはプロセッサの一つに障害が起きるシナリオに対処するために、ビルトインの冗長性を提供する。
【0046】
図2Cを引き続き参照して、当該技術の一実施形態において、制御モジュール(240)は、
図2Aにおける制御モジュール(200)と実質的に同様である。当該技術の一実施形態では、スイッチファブリック(246)は、
図2Aにおけるスイッチファブリック(206)と実質的に同様である。当該技術の一実施形態では、各プロセッサ(248,250)は、
図2Aにおけるプロセッサ(208)と実質的に同様である。当該技術の一実施形態では、メモリ(252,254)は、
図2Aにおけるメモリ(210)と実質的に同様である。当該技術の一実施形態では、IOM(242,244)は、
図2AにおけるIOM(204)と実質的に同様である。最後に、ストレージモジュールグループ(256,258,260,262)は、
図2Aにおけるストレージモジュールグループ(202)と実質的に同様である。
【0047】
図2Dを参照して、
図2Dは、2つの制御モジュール(264,266)を含むストレージ機器を示す。各制御モジュールは、IOM(296,298,300,302)、プロセッサ(268,270,272,274)、メモリ(276,278,280,282)およびFPGA(存在する場合)(288,290,292,294)を含む。制御モジュール(264,266)の各々は、制御モジュール内のコンポーネントがそこを経由して通信するスイッチファブリック(284,286)を含む。
【0048】
当該技術の一実施形態では、制御モジュール内のプロセッサ(268,270,272,274)は、たとえばインテル(登録商標)QuickPathインターコネクト(In
tel QuickPath Interconnect)のようなポイントツーポイント相互接続を使用して互いに直接的に通信し得る。当業者であれば、当該技術から逸脱することがなければ、他のポイントツーポイント通信メカニズムがプロセッサ(268,270,272,274)間の直接的な通信を可能にするよう使用されてもよいということを理解するであろう。さらに、制御モジュールAにおけるプロセッサ(268,270)は、制御モジュールBにおけるスイッチファブリック(286)への直接接続を介して、制御モジュールBにおけるコンポーネントと通信し得る。同様に、制御モジュールBにおけるプロセッサ(272,274)は、制御モジュールAにおけるスイッチファブリック(284)への直接接続を介して、制御モジュールAにおけるコンポーネントと通信し得る。
【0049】
当該技術の一実施形態において、制御モジュールの各々は、(ストレージモジュールグループ(304,306,308,310)によって示される)さまざまなストレージモジュールに接続される。
図2Dに示されるように、各制御モジュールは、制御モジュールにおけるスイッチファブリックに接続されるストレージモジュールと通信し得る。さらに、制御モジュールA(264)におけるプロセッサは、スイッチファブリックB(286)を使用して、制御モジュールB(266)に接続されるストレージモジュールと通信し得る。同様に、制御モジュールB(266)におけるプロセッサは、スイッチファブリックA(284)を使用して、制御モジュールA(264)に接続されるストレージモジュールと通信し得る。
【0050】
制御モジュール間の相互接続によって、どの制御モジュールがI/O要求を受け取るかに関わらず、ストレージ制御がストレージ機器に亘ってI/O負荷を分散することが可能になる。さらに、制御モジュールの相互接続によって、ストレージ機器はより多くのI/O要求を処理することが可能になる。さらに、制御モジュールの相互接続は、制御モジュール(または当該制御モジュールにおける1つ以上のコンポーネント)に障害が起きた場合に、ビルトインの冗長性を提供する。
【0051】
図2B〜
図2Dに関して、当該技術の1つ以上の実施形態において、インメモリデータ構造が、制御モジュールにおけるメモリに亘ってミラーリングされる。このような場合、制御モジュールにおけるプロセッサは、インメモリデータ構造がすべてのメモリに亘ってミラーリングされるようにストレージ機器内のすべてのメモリを更新するのに必要なコマンドを発行する。これにより、いずれのプロセッサも、ストレージ機器において(上で論じられたnタプルによって規定されるように)データの位置を決定するために自身のメモリを使用し得る。この機能により、ストレージモジュール内のデータの位置に関して、如何なるプロセッサも如何なるI/O要求も処理することが可能になる。さらにインメモリデータ構造をミラーリングすることによって、メモリのうちの1つに障害が起きても、ストレージ機器は動作し続け得る。
【0052】
当業者であれば、
図2A〜
図2Dは限られた数のストレージモジュールに接続される制御モジュールを示すが、当該技術から逸脱することがなければ、制御モジュールは任意の数のストレージモジュールに接続されてもよいということを理解するであろう。当業者であれば、
図2A〜
図2Dは、ストレージ機器のさまざまな構成を示しているが、当該技術から逸脱することがなければ、ストレージ機器は他の構成を使用して実施されてもよいということを理解するであろう。
【0053】
図3A〜
図3Bは、当該技術の1つ以上の実施形態に従ったストレージモジュールを示す。
図3Aを参照して、ストレージモジュール(320)は、ストレージモジュールコントローラ(322)、メモリ(324)および1つ以上のソリッドステートメモリモジュール(330A,330N)を含む。これらのコンポーネントの各々は以下に記載される。
【0054】
当該技術の一実施形態では、ストレージモジュールコントローラ(322)は、1つ以上の制御モジュールからのデータの読み出しおよび/または1つ以上の制御モジュールへのデータの書き込みをする要求を受け取るよう構成される。さらに、ストレージモジュールコントローラ(322)は、メモリ(324)および/またはソリッドステートメモリモジュール(330A,330N)を使用して、読出要求および書込要求を処理するように構成される。
図3Aには示されないが、ストレージモジュールコントローラ(322)は、メモリ(324)またはソリッドステートメモリモジュール(330A,330N)の1つからデータを読み出し、クライアントメモリ(
図1Dにおける114)における物理アドレスにデータのコピーを書き込むように構成されるDMAエンジンを含んでもよい。さらに、DMAエンジンは、メモリ(324)からのデータをソリッドステートメモリモジュールの1つ以上に書き込むよう構成され得る。当該技術の一実施形態では、DMAエンジンは、プロセッサ(たとえば
図2Aにおける208)によってプログラムされるように構成される。当業者であれば、当該技術から逸脱することがなければ、ストレージモジュールはストレージモジュールコントローラの外部のDMAエンジンを含んでもよいということを理解するであろう。
【0055】
当該技術の一実施形態において、メモリ(324)は、任意の揮発性メモリに対応する。当該揮発性メモリは、ダイナミックランダムアクセスメモリ(DRAM)、シンクロナスDRAM、SDR SDRAMおよびDDR SDRAMを含むが、これらに限定されない。
【0056】
当該技術の一実施形態において、メモリ(324)は、ボールテッドメモリ(326)およびキャッシュ(328)に論理的または物理的にパーティショニングされ得る。当該技術の一実施形態において、ストレージモジュールコントローラ(322)は、ストレージモジュールにおける電源障害の通知の場合(またはストレージモジュールが電力を失い得る別の場合)、ボールテッドメモリ(326)の全コンテンツをソリッドステートメモリモジュール(330A,330N)の1つ以上に書き出すように構成される。当該技術の一実施形態において、ストレージモジュールコントローラ(322)は、電源障害の通知の時間とストレージモジュールの実際の電力損失との間に、ボールテッドメモリ(326)の全コンテンツをソリッドステートメモリモジュール(330A,330N)の1つ以上に書き込むように構成される。対照的に、キャッシュ(328)のコンテンツは、電源障害の場合(またはストレージモジュールが電力を失い得る別の場合)には失われる。
【0057】
当該技術の一実施形態において、ソリッドステートメモリモジュール(330A,330N)は、永続データを格納するようソリッドステートメモリを使用する任意のデータストレージデバイスに対応する。当該技術の一実施形態において、ソリッドステートメモリは、NANDフラッシュメモリ、NORフラッシュメモリ、磁気RAMメモリ(M−RAM)、スピントルク磁気RAMメモリ(ST−MRAM)、相変化メモリ(PCM)、または不揮発性ストレージクラスメモリ(SCM)として規定される任意の他のメモリを含んでもよいが、これらに限定されない。
【0058】
図3Bを参照して、当該技術の一実施形態において、ソリッドステートメモリモジュール(330)がフラッシュメモリ(たとえばNANDフラッシュメモリ、NORフラッシュメモリなど)を含む場合、フラッシュメモリの一部がシングルレベルセル(SLC: single-level cell)モード(332)で動作し得、フラッシュメモリの別の部分がマルチレベルセル(MLC: multi-level cell)モードで動作し得る。より具体的には、当該
技術の一実施形態において、フラッシュメモリはMLCフラッシュメモリであり、ストレージモジュールコントローラは、SLCブロックとしてあるブロック(すなわちSLCモード部分(332))を指定し、MLCブロックとして他のブロック(すなわちMLCモ
ード部分(334))を指定する機能を含む。上記の指定に基づいて、ストレージモデルコントローラは、フラッシュメモリは実際にはMLCフラッシュメモリであるが、まるでSLCフラッシュメモリのように、SLCブロックと相互作用し得る。
【0059】
MLCモードで動作しているフラッシュメモリの割合(すなわちMLCモード部分334のサイズ)と比較した、SLCモードで動作しているフラッシュメモリの割合(すなわちSLCモード部分(332)のサイズ)は、当該技術の実現例に基づき変動し得る。たとえば、当該技術の一実施形態において、SLCモードで動作するフラッシュメモリの量は、(
図3Aにおいて示されるような)ボールテッドメモリ(326)のサイズと少なくとも等しく、フラッシュメモリの残部はMLCモードで動作する。
【0060】
当該技術の一実施形態では、(i)クライアントスイッチを介してアクセス可能なクライアントメモリの部分、(ii)制御モジュールにおけるメモリ、(iii)ストレージモジュールにおけるメモリ、および(iv)ソリッドステートメモリモジュールといったストレージ位置が、統合されたアドレス空間の一部である。したがって、ストレージ機器におけるプロセッサの視点から、(物理的に別個である)上記のストレージ位置同士が、物理アドレスの単一のプールとして現われる。換言すると、プロセッサは、統合されたアドレス空間において物理アドレスのうちのいずれかに格納されるデータについて読出要求および/または書込要求を発行し得る。上記のストレージ位置は、統合されたアドレス空間を使用してアクセス可能であるストレージファブリックと称され得る。
【0061】
当該技術の一実施形態において、統合されたアドレス空間は、クライアントスイッチにおけるノントランスペアレントなブリッジによって部分的に作成され、これにより、制御モジュールにおけるプロセッサがクライアントメモリの部分を「見る」ことを可能になる。したがって、制御モジュールにおけるプロセッサは、プロセッサが「見ること」ができるクライアントメモリの部分において、読出要求および/または書込要求を行ない得る。
【0062】
図4Aは、当該技術の1つ以上の実施形態に従ったストレージモジュールを示す。ソリッドステートメモリモジュール(400)は1つ以上のブロックを含む。当該技術の一実施形態において、ブロックは、ソリッドステートメモリモジュール(400)内のストレージの最も小さな消去可能な単位である。
【0063】
図4Bは、当該技術の1つ以上の実施形態に従ったブロックを示す。より具体的には、各ブロック(402)は1つ以上のページを含む。当該技術の一実施形態において、ページは、ソリッドステートメモリモジュールにおける(ページへの初期書込を含む)読出およびプログラム動作についての最も小さなアドレス指定可能な単位である。当該技術の一実施形態において、ブロック内のページを再書き込みすることは、全ブロックが再書き込みされることを必要とする。当該技術の一実施形態において、ブロック内における各ページは、フラグページ(Frag Page)(
図4C参照)またはテーブルオブコンテンツ(TO
C: Table of Contents)ページのいずれかである(
図4D参照)。
【0064】
図4Cは、当該技術の1つ以上の実施形態に従ったデータページ(404)を示す。当該技術の一実施形態において、データページ(404)は、1つ以上のフラグを含む。当該技術の一実施形態において、フラグは、有限の量のユーザデータに対応する。さらに、所与のページ内におけるフラグは、均一のサイズまたは非均一のサイズであり得る。さらに、所与のブロック内のフラグは、均一のサイズまたは非均一のサイズであり得る。当該技術の一実施形態において、所与のフラグはページのサイズ未満であり得、ちょうどページのサイズであり得、または、1つ以上のページに亘って延在し得る。当該技術の一実施形態において、データページはフラグのみを含む。当該技術の一実施形態において、各フラグは、ユーザデータ(すなわちストレージ機器における格納のためにクライアントによ
って提供されるデータ)を含む。この説明の目的のために、「フラグ」および「ユーザデータ」という用語は、交換可能に使用される。
【0065】
図4Dは、当該技術の1つ以上の実施形態に従ったTOCページを示す。当該技術の一実施形態において、TOCページ(406)は、1つ以上のTOCエントリを含んでおり、TOCエントリの各々は、所与のフラグについてのメタデータを含む。さらに、TOCページ(406)は、ブロック(402)において別のTOCページへの参照を含み得る。当該技術の一実施形態において、TOCページは、TOCエントリ(および随意に、当該ブロックにおける別のTOCページへの参照)のみを含むが、如何なるフラグも含まない。当該技術の一実施形態において、各TOCエントリは、ブロック(402)においてフラグ(
図4C参照)に対応する。TOCエントリはブロック内のフラグにのみ対応する。換言すると、TOCページはブロックに関連付けられており、そのブロックにおけるフラグについてのTOCエントリのみを含む。当該技術の一実施形態において、ソリッドステートメモリモジュールの各々内における各ブロックに欠陥がない最終ページがTOCページである。
【0066】
図4Eは、当該技術の1つ以上の実施形態に従ったブロックを示す。より具体的には、
図4Eは、TOCページ(420,424,431)およびデータページ(416,418,422,428,428,430)を含むブロック(408)を示す。当該技術の一実施形態において、ブロック(408)は概念的に、「頂部」から「底部」に充填される。さらに、データページにおけるフラグについてのTOCエントリの累積サイズがひとたびページのサイズと等しくなれば、TOCページが生成および格納される。
図4Eを参照して、たとえば、データページ0(416)およびデータページ1(418)がブロック(408)に格納される。データページ0(416)およびデータページ1(418)におけるフラグ(図示せず)について対応するTOCエントリ(図示せず)は、当該ブロックにおけるページのサイズと等しい合計累積サイズを有する。したがって、TOCページ(414)が(ブロックにおけるフラグに対応するTOCエントリを使用して)生成され、ブロック(408)に格納される。フラグページ2(420)はその後、ブロック(408)に書き込まれる。データページ2(420)におけるフラグ(図示せず)に対応するTOCエントリは、ブロックにおけるページのサイズと等しい合計累積サイズを有するので、TOCページ(412)は作成され、ブロック(408)に格納される。さらに、ブロック(408)にTOCページが既に存在するので、TOCページ(412)はさらにTOCページ(414)への参照を含む。
【0067】
このプロセスは、ブロック(408)において、充填するべきページの残りが1つになるまで、繰り返される。この点において、TOCページ(410)は、ブロック(408)の最終ページにおいて作成および格納される。当業者は、TOCページ(410)におけるTOCエントリの合計累積サイズがページのサイズ未満であり得るということを認識するであろう。そのような場合、TOCページは、TOCエントリの累積サイズとページサイズとの間の差に対応するために水増し(padding)することを含み得る。最後に、ブ
ロック(408)に他のTOCページが存在するので、TOCページ(410)は、1つの他のTOCページ(412)への参照を含む。
【0068】
図4Eに示されるように、TOCページは、TOCページの下にあるTOCページからの参照に従うことによってTOCページが得られ得るように、ブロックの「底部」からページの「頂部」にリンクされる。たとえば、TOCページ(412)は、TOCページ(410)における参照を使用してアクセスされ得る。
【0069】
当業者は、ブロック(408)はデータページおよびTOCページのみを含むが、当該技術から逸脱することがなければ、ブロック(408)は、データページおよびTOCペ
ージ以外のページ(たとえばパリティーデータを含むページ)を含んでもよいということを認識するであろう。そのような他のページは、ブロック内に存在し得、実現例に依存して、TOCページとデータページとの間にインターリーブされる。
【0070】
図4Fは、当該技術の1つ以上の実施形態に従ったTOCエントリを示す。当該技術の一実施形態において、各TOCエントリ(430)は、フラグ(特にフラグにおけるユーザデータ)についてメタデータを含んでおり、(i)格納されているオブジェクト(たとえばファイル)を識別するオブジェクトID(432)と、(ii)TOCエントリに対応するフラグがボールテッドメモリに書き込まれた時間を特定する発生時間(434)(たとえば制御モジュールにおけるプロセッサのプロセッサクロック値)と、(iii)(オブジェクトIDによって識別される)オブジェクトの開始に対するフラグにおけるユーザデータの始点を識別するオフセットID(436)と、(iv)フラグのサイズを特定するフラグメントサイズ(438)と、(v)フラグが格納されるブロックにおけるページを識別するページID(440)と、(vi)(ページIDによって識別される)ページにおけるフラグの開始位置を識別するバイト(442)と、(vii)フラグにおけるユーザデータの非圧縮長さを特定する論理長(444)と、(viii)フラグにおけるユーザデータのタイプ(たとえばバッドページ(badpage)、データ、スナップショット
、プール)を特定するタイプ(446)と、(ix)フラグが有効なユーザデータまたはトリムであるかどうか特定する種類(448)(ソリッドステートメモリモジュールがガーベッジコレクションを実行する際に当該フラグが消去され得ることを示す)と、(x)他のユーザデータを格納するために使用され得るTOCエントリにおけるスペースに対応する留保(450)といったフィールドのうち1つ以上を含み得る。
【0071】
当該技術の一実施形態において、<オブジェクトID,オフセットID>または<オブジェクトID,オフセットID,発生時間>は、クライアントによって提供されるユーザデータを識別する。さらに、<オブジェクトID,オフセットID>または<オブジェクトID,オフセットID,発生時間>は、特定のユーザデータを識別するようクライアントによって使用され、ストレージ機器は、ストレージ機器内のユーザデータを識別するために物理アドレスを使用する。当業者は、クライアントがオブジェクトIDおよびオフセットIDの代わりに論理アドレスを提供し得ることを認識するであろう。
【0072】
当業者は、TOCエントリが、当該技術から逸脱することがなければ、
図4Fにおいて示されるより多いまたは少ないフィールドを含み得るということを認識するであろう。さらに、TOCエントリにおけるフィールドは、当該技術から逸脱することがなければ、異なる順に配され、および/または組み合わせられ得る。さらに、
図4Fにおいて示されるTOCエントリにおけるフィールドはすべて、同じ大きさのものであるように思われるが、TOCエントリにおけるさまざまなフィールドのサイズは非均一であり得、任意の所与のフィールドのサイズはTOCエントリの実現例に基づいて変動する。
【0073】
図4Gは、当該技術の1つ以上の実施形態に従ったボールテッドメモリコンテンツを示す。ボールテッドメモリ(460)内のメモリの部分は、最終的に永続ストレージに格納されるページと同じサイズであるセグメントへ割り当てられ得る(たとえば
図4E参照)。当該技術の一実施形態において、前述のセグメントは、(i)オープンTOCページ(462)、(ii)オープンデータページ(464)、および(iii)書込データページ(466)を含み得る。以下のセクションは、単一のオープンTOCページ、単一のオープンデータページおよび単一の書込データページに関して当該技術を説明しているが、当該技術から逸脱することがなければ、当該技術の実施形態は、複数のオープンTOCページ、複数のオープンデータページおよび/または複数の書込ページを使用して実現され得る。ボールテッドメモリは、当該技術から逸脱することがなければ、他のセグメントを含み得る。
【0074】
オープンTOCページ(462)は、TOCエントリが適切なソリッドステートメモリモジュールに書き込まれる前に、そのようなTOCエントリを格納するために使用されるメモリの部分である。より具体的には、TOCエントリは、ボールテッドメモリ内のオープンTOCページに格納され、何らかの時点において、オープンTOCページは一杯になる(すなわち如何なる付加的なTOCエントリももはや格納することができない)。これが発生すると、オープンTOCページのコンテンツは、TOCページとしてストレージメモリモジュールにおける適切なブロックに書き込まれる(たとえば
図4D参照)。オープンTOCページに関する付加的な詳細が
図4Hに示される。
【0075】
オープンデータページ(464)は、フラグが適切なソリッドステートメモリモジュールに書き込まれる前にそのようなフラグを格納するために使用されるメモリの部分である。オープンデータページに関する付加的な詳細が
図4Hに示される。書込データページ(466)は、適切なソリッドステートメモリモジュールに現在書き込まれているフラグを含むメモリの部分である。メモリの前述の部分の指定は時間にわたり変化し得る。たとえば、メモリのある部分は、オープンデータページとして最初に指定され得る。メモリのこの部分がひとたび一杯になると(すなわち当該メモリの部分にこれ以上のフラグが格納することができなくなると)、当該メモリの部分の指定は書込データページに変更される。その後、書込データページのコンテンツは、データページとして、ソリッドステートメモリモジュールにおける適切なブロックに書き出される(たとえば
図4C参照)。オープンTOCページ、オープンデータページおよび書込データページの使用に関する付加的な詳細が以下の
図6A〜
図7Gに示され得る。
【0076】
図4Hは、当該技術の1つ以上の実施形態に従ったオープンTOCページを示す。オープンTOCページ(470)は、TOCビット(476)を含んでおり、TOCビットの状態(たとえば0または1のいずれか)は、メモリの部分がTOCページであることを反映する。オープンTOCページ(470)はさらに、TOCページが最終的に格納されることになる(ソリッドステートメモリモジュールにおける)ブロックにおける位置に対応するが、TOCページが格納されることになるブロックにおける実際の位置に必ずしも対応しない仮物理アドレス(478)を含む。より具体的には、TOCページが所与のブロックにおいて格納される位置は、
図6Cに従って決定される。したがって、TOCページが生成されている時(すなわちTOCエントリがオープンTOCページに格納されている時)、TOCページの最終位置は分からない。しかしながら、TOCページが格納されることになるブロックは分かっている。したがって、仮物理アドレスは、TOCページが格納されることになるブロック内のアドレスとして選択される。TOCビット(476)および仮物理アドレス(478)は、集合的にタグ(472)と称される。タグ(472)は、他のコンテンツがオープンTOCページに格納される前にオープンTOCページに格納され得る。
図4Hを参照して、オープンTOCページはさらに、集合的にペイロードと称され得る1つ以上のTOCエントリを含む。
【0077】
図4Iは、当該技術の1つ以上の実施形態に従ったオープンデータページを示す。オープンデータページ(480)は、TOCビット(486)を含んでおり、TOCビットの状態(たとえば0または1のいずれか)は、メモリの部分がデータページであることを反映する。オープンデータページ(480)はさらに、データページが最終的に格納されることになる(ソリッドステートメモリモジュールにおける)ブロックにおける位置に対応する物理アドレス(488)を含む。TOCビット(486)および物理アドレス(488)は、集合的にタグ(482)と称される。タグ(482)は、他のコンテンツがオープンデータページに格納される前にオープンデータページに格納され得る。
図4Iを参照して、オープンデータページはさらに、集合的にペイロード(484)と称され得る1つ以上のフラグを含む。
【0078】
図5Aは、当該技術の1つ以上の実施形態に従ったデータ構造を示す。上で論じたように、制御モジュールにおけるメモリはインメモリデータ構造を含む。当該技術の一実施形態において、インメモリデータ構造は、nタプル(たとえば<オブジェクトID,オフセットID>(500)、<オブジェクトID,オフセットID,発生時間>(図示せず))と、ソリッドステートメモリモジュールにおけるフラグの物理アドレス(502)との間のマッピングを含む。当該技術の一実施形態において、当該マッピングは、nタプルのハッシュと物理アドレスとの間に存在する。当該技術の一実施形態において、フラグについての物理アドレスは、<ストレージモジュール,チャンネル,チップイネーブル,LUN,プレーン,ブロック,ページ,バイト>といったnタプルとして規定される。前述のタプルは、物理アドレスのコンテンツの論理表現に対応する。前述のコンテンツはたとえば、ストレージ機器においてさまざまなコンポーネントによって使用される48ビットの物理アドレスにエンコードされ得る(たとえば
図1A〜
図3B参照)。
【0079】
図5Bは、当該技術の1つ以上の実施形態に従ったデータ構造を示す。当該技術の一実施形態において、制御モジュールは、ブロック(504)当たりのTOCエントリ(506)の数をトラッキングする。より具体的には、フラグがボールテッドメモリに書き込まれるごとに、フラグについてのTOCエントリが作成される。制御モジュールは、新しく作成されたTOCエントリが関連付けられるのはどのブロックかをトラッキングし、TOCページを生成するためにこの情報を使用する。たとえば、制御モジュールは上記情報を使用して、TOCページに書き込まれていない所与のブロックに関連付けられるすべてのTOCエントリの累積サイズがブロックにおけるページサイズと等しいかどうか判定する。TOCページに書き込まれていない所与のブロックに関連付けられるすべてのTOCエントリの累積サイズがブロックにおけるページサイズと等しい場合、制御モジュールは上記エントリを使用してTOCページを生成し、ストレージモジュールへのTOCページの書込を開始し得る(たとえば
図6C参照)。
【0080】
図6A〜
図6Cは、当該技術の1つ以上の実施形態に従ったフローチャートを示す。より具体的には、
図6A〜
図6Cは、当該技術の1つ以上の実施形態に従った、ストレージ機器にユーザデータを格納するための方法を示す。フローチャートにおけるさまざまなステップが順次、提示および記載されるが、当業者であれば、ステップのうちのいくつかまたはすべてが異なる順番で実行されてもよいこと、ステップのうちのいくつかまたはすべてが組み合わせられてもよくまたは省略されてもよいこと、およびステップのうちのいくつかまたはすべてが並列に実行されてもよいことを理解するであろう。当該技術の一実施形態では、
図6Aに示されるステップは、
図6Bに示されるステップおよび
図6Cに示されるステップと並列に行なわれ得る。さらに、
図6Bに示されるステップは、
図6Cに示されるステップと並列に行なわれ得る。
【0081】
図6Aを参照して、ステップ600において、クライアントは、制御モジュールにおけるプロセッサ(
図2Aにおける208)の送信キュー(SQ: submission queue)に書
込コマンド(書込要求)を書き込む。当該技術の一実施形態では、書込コマンドは、クライアントメモリにおけるユーザデータの論理アドレス(「ソースアドレス」とも称され得る)を特定する。当該技術の一実施形態において、書込コマンドは、<オブジェクトID,オフセットID>を使用してユーザデータを特定し得る。当該技術の一実施形態において、書込コマンドは、プロセッサのSQに到達する前に、少なくともクライアントスイッチおよびスイッチファブリックを通過する。
【0082】
ステップ602では、クライアントはSQテールドアベルレジスタに新しいSQテールを書き込む。当該技術の一実施形態において、SQテールドアベルレジスタに書き込むことによって、クライアントは、そのSQにおいて処理するべき新しいコマンドが存在する
とプロセッサに通知する。
【0083】
ステップ604では、プロセッサはSQから書込コマンドを取得する。ステップ606では、プロセッサは、ユーザデータを(フラグの一部として)書き込むべき物理アドレスを決定する。当該技術の一実施形態では、物理アドレスはソリッドステートメモリモジュールにおける位置に対応する。当該技術の一実施形態において、プロセッサは、ユーザデータのコピーを書き込むべき2つの物理アドレスを選択する。当該物理アドレスの各々は別個のソリッドステートメモリモジュールに存在する。
【0084】
上で論じたように、フラグは、ソリッドステートメモリモジュールに書き込まれる前に、ボールテッドメモリにおけるオープンデータページに書き込まれ、各物理アドレスは、<ストレージモジュール,チャンネル,チップイネーブル,LUN,プレーン,ブロック,ページ,バイト>として特定され得る。したがって、オープンデータページに格納されるフラグの各々についての物理アドレスは、<バイト>値を除いて、物理アドレスのすべての部分について同じ値を有し得る。したがって、当該技術の一実施形態において、ステップ606において選択される物理アドレスが、オープンデータページのタグ(482)における物理アドレス(486)を使用して決定され得る。換言すると、所与のフラグが特定のソリッドステートメモリモジュールに書き込まれるべきであるという決定がひとたびなされると、ボールテッドメモリにおけるオープンデータページにおけるタグにおける物理アドレスに基づき、フラグを格納するべき物理アドレスが決定され得る。そのような場合、フラグを書き込むべき物理アドレスは、タグにおける物理アドレスを取得し、その後、この物理アドレスの<バイト>部分を修正することにより決定され得る(たとえば
図7A〜
図7G参照)。
【0085】
ステップ608では、プロセッサは、マルチキャストアドレスへの書込を発行するようにDMAエンジンをプログラムする。当該技術の一実施形態において、マルチキャストアドレスはマルチキャストグループに関連付けられており、当該マルチキャストグループは、制御モジュールにおけるメモリにおける第1のメモリ位置、第1のボールテッドメモリにおけるオープンデータページにおける第2のメモリ位置、および第2のボールテッドメモリにおけるオープンデータページにおける第3のメモリ位置を特定する。当該技術の一実施形態において、第1のボールテッドメモリは、プロセッサによって特定される物理アドレスを含むソリッドステートメモリモジュールと同じストレージモジュールに位置する。当該技術の一実施形態において、第2のボールテッドメモリは、第1のストレージモジュールの障害から保護するよう異なるストレージモジュールに位置する。当該技術の一実施形態において、ステップ606においてプロセッサによって識別される各物理アドレスについて選択される1つのボールテッドメモリ位置が存在する。
【0086】
ステップ610では、DMAエンジンは、クライアントメモリにおけるソースアドレスからユーザデータを読み出し、制御モジュールによって指示されるようにマルチキャストアドレスにデータを書き込む。当該技術の一実施形態では、スイッチファブリックにおけるスイッチは、マルチキャストアドレスに関連付けられる。アドレスの受信の際、スイッチは、3つのアドレス、すなわち上記のメモリ位置の各々に対するアドレスを取得するようマルチキャストアドレスに対して必要な変換を行なう。その後、スイッチは3つのメモリ位置にユーザデータのコピーを送信する。当業者であれば、マルチキャストを実現する特定のスイッチはスイッチファブリックの実現例に基づき変動し得るということを理解するであろう。この実施形態では、クライアントとストレージ機器との間には発行された書込は1つだけ存在する。
【0087】
当該技術の別の実施形態において、ステップ608では、プロセッサは、3つの書込要求、すなわち上記のメモリ位置の各々に対する書込要求を並列に発行するようにDMAエ
ンジンをプログラムする。この実施形態において、ステップ610では、DMAエンジンはこれらの3つの書込要求を並列に発行する。この実施形態では、クライアントとストレージ機器との間で3つの書込の発行が存在する。
【0088】
図6Aを引き続き参照して、ステップ612において、TOCエントリはボールテッドメモリに格納されたユーザデータの各コピーについて作成される。さらに、各TOCエントリにおいて特定されるページおよびバイトは、ステップ606において識別される対応する物理アドレスのページおよびバイトの部分に対応する。したがって、対応するTOCエントリが作成される時に、ソリッドステートメモリモジュールにおける物理アドレスにフラグが書き込まれない間、(データページの一部としての)フラグが物理アドレスに後の時点で書き込まれるように意図される。上で論じたように、TOCエントリの各々はTOCページに格納され、TOCページは、ソリッドステートメモリモジュールに最終的に書き込まれる。しかしながら、TOCページの作成の前に、TOCエントリは、作成されて、制御モジュールにおけるメモリと、ソリッドステートメモリモジュールのうちの1つの上のボールテッドメモリとに、一時的に格納される。
【0089】
図6Aを引き続き参照して、ステップ614において、ステップ612において作成されたTOCエントリはボールテッドメモリに格納される。より具体的には、各TOCエントリは、ストレージモジュールのボールテッドメモリにおけるオープンTOCページに格納され、かつ、対応するフラグが後の時点に書き込まれる物理アドレスを含む。
【0090】
ステップ616では、プロセッサは、ユーザデータの3つのコピーがストレージ機器に格納されることを反映するようインメモリデータ構造を更新する。プロセッサはさらに、ブロック当たりのTOCエントリをトラッキングするデータ構造を更新し得る(
図5参照)。ステップ618では、プロセッサは、(プロセッサのSQを識別する)SQ識別子と(クライアントがプロセッサに発行した特定の書込コマンドを識別する)書込コマンド識別子とをクライアントの完了キュー(CQ)に書き込む。
【0091】
ステップ620では、プロセッサは、クライアントプロセッサについて割込を生成する。当該技術の一実施形態において、プロセッサは、ノントランスペアレントなブリッジによって提供されるドアベル割込を使用して、クライアントプロセッサに割込を発行する。ステップ622では、クライアントは、そのCQにおけるデータを処理する。この段階では、クライアントは、書込要求が処理されたと通知されている。ステップ624では、ひとたびクライアントが完了キューのヘッドにあるデータを処理すると、クライアントは新しいCQヘッドをCQヘッドドアベルに書き込む。これはプロセッサに、クライアントへの将来の通知において使用するCQにおける次の位置を示す。
【0092】
図6Bを参照して、ボールテッドメモリにおけるオープンデータページ(たとえば
図4Gの464参照)がもはや任意の付加的なフラグを格納することができない場合(すなわちオープンデータページが一杯である場合)、オープンデータページは書込データページになる。ステップ626では、制御モジュールにおけるプロセッサは、タグ(482)における適切な位置(すなわち物理アドレス(486)に対応するソリッドステートメモリモジュールにおける位置)に対して書込データページのコンテンツを開始する。当該技術の一実施形態において、制御モジュールにおけるプロセッサは、ストレージモジュールコントローラにおけるDMAエンジンをプログラムして、書込データページ(または書込データページのコンテンツ)をソリッドステートメモリモジュールに書き込む。当該技術の別の実施形態において、ストレージモジュールコントローラは、ソリッドステートメモリモジュールへの書込データページの書込を開始し得る。書込がひとたび完了すると、ストレージモジュールコントローラは制御モジュールに通知し得る。
【0093】
ステップ626の後、ステップ628では、制御モジュールにおけるプロセッサは、ステップ626においてソリッドステートメモリモジュールに書き込まれたユーザデータに対応する、ボールテッドメモリにおけるユーザデータのすべてのコピーが除去されることを要求する。換言すると、プロセッサは、書込データページのコンテンツがボールテッドメモリから消去されることを要求し得る。ステップ630では、消去された書込データページを含んでいたストレージモジュールの各々によって、除去の確認が制御モジュールにおけるプロセッサへ送信される。
【0094】
図6Cを参照して、
図6Cは、TOCエントリが作成されるごとに実行される方法を示す。ステップ632において、空ページが1ページより多くブロックに残っているかどうかについて判定がなされる。換言すると、ブロックにおける最終ページを除いて、データページおよびTOCページがすべての他のページに書き込まれたかどうかについて判定がなされる。空ページが1ページより多くブロックに残っている場合、プロセスはステップ634に進み、そうでなければ、プロセスはステップ636に進む。上で論じたように、データページまたはTOCページのいずれかを書き込むべき空ページが1ページだけブロックに存在する場合、TOCページはブロックにおける最終ページに書き込まれなければならない。
【0095】
ステップ634では、オープンTOCページが一杯であるかどうか(すなわちTOCエントリの累積サイズが、付加的なTOCエントリがオープンTOCページに格納されるのを防止するかどうか)について判定がなされる。オープンTOCページが一杯の場合、プロセスはステップ636に進み、そうでなければプロセスは終了する。
【0096】
ステップ636では、オープンTOCページにおける仮物理アドレス(478)が最終物理アドレス(すなわちオープンTOCページ(またはオープンTOCページのコンテンツ)が格納されるべきブロックにおける実際の位置)に変更される。当該技術の一実施形態において、ユーザデータを書き込むべき空ページが1ページだけブロックに存在するとともにTOCページが一杯ではない場合、当該TOCページを充填するために、水増しがオープンTOCページに追加され得る。ステップ638において、ブロックが別のTOCページを含むかどうかについて判定がなされる。ブロックが別のTOCページを含んでいる場合、プロセスはステップ640に進み、そうでなければ、プロセスはステップ642に進む。ステップ640では、ブロックにおける最近格納されたTOCページへの参照がステップ636において作成されたTOCページに含まれる(たとえば、TOCページ(410)が
図4EにおけるTOCページ(412)を参照する)。
【0097】
ステップ642では、プロセッサは、ソリッドステートメモリモジュール(または、より具体的には、TOCページにおいて特定される最終物理アドレス)に対して一杯のTOCページの書込を開始する。
【0098】
ステップ644では、プロセッサは、ステップ642においてソリッドステートメモリモジュールに書き込まれるTOCページに含まれていたTOCエントリを含むすべてのストレージモジュールに、それぞれのボールテッドメモリからそのようなTOCエントリを除去することを要求する。換言すると、プロセッサは、オープンTOCページのコンテンツがボールテッドメモリから消去されることを要求する。ステップ646では、プロセッサはストレージモジュールから、上記TOCエントリが除去されたという確認を受け取る。
【0099】
図7A〜
図7Gは、当該技術の1つ以上の実施形態に従った、ストレージ機器にユーザデータを格納する例を示す。この例は、当該技術の範囲を限定するようには意図されない。
【0100】
図7Aを参照して、ボールテッドメモリが、オープンTOCページと、(最初にオープンデータページとして指定される)データページAと、(最初に書込データページとして指定される)データページBとを含むシナリオを考える。「データページA」および「データページB」としてのページの指定は、この例示目的のために含まれているだけであり、データページAがデータページBより高いブロック番号に関連付けられる(またはその逆)を暗示するようには意図されておらず、むしろ、ページは、当該技術のさまざまな実施形態について説明するためにそのように指定されている。オープンTOCページは、(自身がTOCページであることを示す)セットTOCビットと、自身が最終的に格納されることになるソリッドステートストレージ(図示せず)におけるブロックにおける物理位置に対応する仮物理アドレスとを含む。オープンTOCページはさらにTOCエントリ(TE1)を含む。TE1は、データページAに格納されるフラグ1についてのTOCエントリである。
【0101】
図7Aに示されるように、データページAは、セットされない(データページであることを示している)TOCビットを含む。データページAは、データページが最終的に書き込まれることになるソリッドステートストレージにおける物理位置に対応する物理アドレス(PA2)をさらに含む。最後に、データページAは、データページAの内の<バイト>値に格納されるフラグ1を含み、<バイト>値に対する<バイト>値がTE1において特定される(たとえば
図4Fの442参照)。
【0102】
図7Bを参照して、何らかの後の時点で、第2のフラグ(フラグ2)および第2のTOCエントリ(TE2)がボールテッドメモリに書き込まれる。
図7Bは、フラグ2がデータページAに格納されるとともにTE2がオープンTOCページに格納される場合のボールテッドメモリの状態を示す。
【0103】
この段階において、この段階ではデータページAは一杯であり、したがって、その指定が書込データページに変更される。指定のこの変更の結果、データページBの指定も変更される。具体的には、データページBの指定は、書込データページからオープンデータページに遷移される。したがって、後で受け取られるフラグがデータページBに格納され得る。
図7Cは、データページの指定における上記変更の後のボールテッドメモリの状態を示す。
図7Cにおいて示されるように、データページBの指定がひとたびオープンデータページに変更されると、TOCビット(0にセットされる)と、物理アドレス(PA3)(ソリッドステートメモリモジュールにおける物理位置に対応する)とが、データページBに格納される。タグ(すなわちTOCビットおよび物理アドレス)がひとたびデータページBに格納されると、フラグはデータページBに格納され得る。
【0104】
何らかの後の時点で、データページAのコンテンツはソリッドステートメモリモジュールにおけるPA1に書き込まれ、その後、データページAのコンテンツはデータページAから消去される。さらに、フラグ3およびフラグ4がデータページBに書き込まれ、対応するTOCエントリ(TE3およびTE4)がオープンTOCページに書き込まれる。
図7Dは、上記のイベントが発生した後のボールテッドメモリの状態を示す。
【0105】
この段階では、オープンTOCページは一杯である(すなわち、これ以上のTOCエントリがオープンTOCページに格納され得ない)。したがって、オープンTOCページ(またはオープンTOCページのコンテンツ)についての最終物理アドレスが決定される。オープンTOCページにおけるタグは、最終物理アドレスを含むよう更新され得る。
図7Eは、上記のイベントが発生した後のボールテッドメモリの状態を示す。
【0106】
図7Eにおいて示されるように、オープンTOCページおよびデータページBの両方は
一杯である。したがって、制御モジュールまたはストレージモジュールコントローラは、オープンTOCページのコンテンツおよびデータページBのコンテンツの書込をソリッドステートメモリモジュールにおける適切な位置に対して開始し得る。
【0107】
ソリッドステートメモリモジュールへのオープンTOCページのコンテンツの書込が成功すれば、ソリッドステートメモリモジュールは、最終物理アドレスに対応する位置におけるTOCページを含むことになる。さらに、ソリッドステートメモリモジュールへのデータページBのコンテンツの書込が成功すれば、ソリッドステートメモリモジュールはPA2に対応する位置にデータページを含むことになる。さらに、上記のコンテンツは、適切なMLCコマンドを使用してソリッドステートメモリモジュールのMLCモード部分に書き込まれ得る。
図7Fは、上記のイベントが発生した後のソリッドステートメモリモジュールの状態を示す。
【0108】
しかしながら、TOCページのコンテンツ(
図7E参照)およびデータページBのコンテンツ(
図7E参照)がソリッドステートメモリモジュールに書き込まれる前に電源障害の通知が受け取られる場合、TOCページのコンテンツ(
図7E参照)およびデータページBのコンテンツ(
図7E参照)が、適切なSLCコマンドを使用して、ソリッドステートメモリモジュールのSLCモード部分に書き込まれる。上記ページ(たとえばデータページおよびTOCページ)が格納される位置は、前述のページに格納されるタグに存在する物理アドレスに対応しない。前述のコンテンツは、ソリッドステートメモリモジュールのSLCモード部分内の最下位ビット(LSB: Least Significant Bit)ページにのみ格納され得る。そのような場合、SLCモード部分のサイズは、ボールテッドメモリのサイズより(たとえば2倍)大きくなり得る。
図7Gは、上記のイベントが発生した後のボールテッドメモリの状態を示す。
【0109】
当該技術の一実施形態において、制御モジュールが再起動されると、ソリッドステートメモリモジュールにおけるTOCエントリは、クライアントがストレージ機器に格納されるユーザデータにアクセスすることを可能にするために、適切なインメモリデータ構造を生成するよう使用され得る(たとえば
図5参照)。
図8Aは、当該技術の1つ以上の実施形態に従った、ソリッドステートメモリモジュールのMLCモード部分に格納されたTOCエントリを使用してインメモリデータ構造を生成するための方法を示す。
図8Bは、当該技術の1つ以上の実施形態に従った、ソリッドステートメモリモジュールのSLCモード部分に格納されるTOCエントリを使用してインメモリデータ構造を生成するための方法を示す。前述のフローチャートにおけるさまざまなステップが順次提示および記載されるが、当業者は、ステップのうちのいくつかまたはすべてが異なる順番で実行されるか、組み合わせられるか、省略されるか、または、並列に実行され得るということを認識するであろう。
【0110】
図8Aを参照して、ステップ800では、ブロックが選択される。ステップ802では、当該ブロックにおける最終ページが取得される。たとえば、プロセッサは、最終ページのコンテンツを読み出す。上で論じたように、ストレージ機器内のソリッドステートメモリモジュールにおけるすべてのブロックの最終ページはTOCページである。ステップ804では、TOCエントリはTOCページから抽出される。
【0111】
ステップ806では、ステップ804で取得されたTOCエントリの各々がインメモリデータ構造にポピュレートするように処理される。より具体的には、各TOCエントリを処理することは、(i)TOCエントリからページIDおよびバイト情報を抽出することと、(ii)物理アドレスを取得するために、(i)における情報を<ストレージモジュール,チャンネル,チップイネーブル,LUN,プレーン,ブロック>と組み合わせることと、(iii)TOCエントリからオブジェクトIDおよびオフセットID(随意に発
生時間)を抽出することと、(iv)ハッシュ値を生成するために、<オブジェクトID,オフセットID>(または、随意に<オブジェクトID,オフセットID,発生時間>)にハッシュ関数を適用することと、(v)ハッシュ値と物理アドレスとのマッピングをインメモリデータ構造にポピュレートすることとのうち1つ以上を含み得る。
【0112】
当該技術の一実施形態において、プロセッサはブロックの最終ページを取得するために<ストレージモジュール,チャンネル,チップイネーブル,LUN,プレーン,ブロック>についての情報を必要としたので、プロセッサは既にこの情報を含んでいる。当該技術の一実施形態において、プロセッサは、フラグがバッドページに存在するかどうか判定するよう、TOCエントリにおけるタイプフィールドを使用し得る。フラグがバッドページに格納されている場合、プロセッサは、TOCエントリについて、インメモリデータ構造においてマッピングを生成しなくてもよい。
【0113】
ステップ808では、ひとたびTOCページにおけるすべてのTOCエントリが処理されると、TOCページがブロック(すなわちステップ800で選択されたブロック)における別のTOCページに対する参照を含むかどうかに関して判定がなされる。TOCページがブロックにおける別のTOCページへの参照を含む場合、プロセスはステップ810に進み、そうでなければプロセスは終了する。ステップ810では、参照されたTOCページが得られる。ステップ812では、TOCエントリがTOCページから抽出される。その後、プロセスはステップ806に進む。
【0114】
図8Bを参照して、ステップ820では、ソリッドステートメモリモジュールのSLCモード部分からのコンテンツが制御モジュールにおけるメモリにロードされる。当該コンテンツは、1つ以上のオープンTOCページと、1つ以上のオープンデータページと、1つ以上の書込データページとを含み得る。当該技術の一実施形態において、システムが電力を失った時にボールテッドメモリに存在したすべてのデータは、制御モジュールのメモリにコピーされている。ストレージ機器がマルチキャスト書込メカニズム(たとえば
図6A〜
図6C参照)を実現するので、ボールテッドメモリにデータの複数のコピーが存在し得る。ソリッドステートメモリモジュールの任意の所与のSLCモード部分における具体的なコンテンツにかかわらず、SLCモード部分に格納される各ページはタグを含む(たとえば
図7G参照)。
【0115】
ステップ822において、TOCページはステップ820において得られるコンテンツから識別される。TOCページを識別することは、上記の取得されたコンテンツにおける、ページがTOCページであることを示すステータスを有するようにセットされるTOCビットを含むページを探索することを含み得る。たとえば、TOCビット=1を含むページは、TOCページであると識別され得る。
【0116】
ステップ824では、ステップ822において識別されるTOCページからのTOCエントリが取得される。当該技術の一実施形態において、TOCページの複数のコピーが制御モジュールメモリに存在する場合、TOCページの各コピーは、特定のTOCエントリ(すなわちステップ824において得られるTOCエントリ)がTOCページの各コピーにおいて同一であることを判定するよう照合される。
【0117】
ステップ826では、ステップ824で得られたTOCエントリに対応するフラグの物理アドレスが、TOCページにおけるタグにおける物理アドレスおよびTOCエントリのコンテンツを使用して決定される。たとえば、TOCページの仮物理アドレスは<ストレージモジュール1,チャンネル1,チップイネーブル1,LUN1,プレーン1,ブロック2,ページ2,バイト0>であり得、選択されたTOCエントリからの<ページ,バイト>情報が<ページ2,バイト5>であり得る(たとえば
図4Fの440,442参照)
。したがって、TOCエントリに対応するフラグの物理アドレスは、<ストレージモジュール1,チャンネル1,チップイネーブル1,LUN1,プレーン1,ブロック2,ページ2,バイト5>であり得る。当業者は、前述の物理アドレスがnタプルとして表わされているが、前述の物理アドレスはたとえば48ビットの物理アドレスであり得るということを認識するであろう。
【0118】
ステップ828では、制御モジュールにおけるインメモリデータ構造は、<オブジェクトID,オフセットID>(TOCエントリから得られる)と、ステップ826において決定された物理アドレスとのマッピングを含むように更新される。前述の情報に基づいた他のマッピングは、当該技術から逸脱することがなければ、インメモリデータ構造に格納され得る(
図5参照)。
【0119】
ステップ830では、ステップ826において決定された物理アドレスに対応するフラグを特定するために、制御モジュールにおけるメモリが探索される。フラグがメモリに存在する場合、プロセスはステップ834に進み、そうでなければ、プロセスはステップ832に進む。
【0120】
以下は、制御モジュールのメモリにおける対応するフラグを特定するための非限定的な例である。ステップ826において決定されたフラグについての物理アドレスが<ストレージモジュール1,チャンネル1,チップイネーブル1,LUN1,プレーン1,ブロック2,ページ2,バイト5>であり、制御モジュールが、TOCビット=0を含むタグと、<ストレージモジュール1,チャンネル1,チップイネーブル1,LUN1,プレーン1,ブロック2,ページ2>を含む物理アドレスとを含むページを特定するためにメモリを探索し得るシナリオを考える。そのようなページが特定されると、フラグはメモリに存在すると判定され、そうでなければ、フラグはソリッドステートメモリモジュールに存在すると判定される。
【0121】
ステップ832では、フラグは、ステップ826で取得した物理アドレスを使用して、ソリッドステートメモリモジュールから得られる。
【0122】
ステップ834では、
図6A〜
図6Cに従って、(ステップ832において取得されたか、または、ステップ830において存在すると識別された)フラグが、ストレージモジュールにおける新しい位置に書き込まれる。
【0123】
当該技術の一実施形態において、フラグがメモリに存在しない場合(すなわちフラグがソリッドステートメモリモジュールに存在する場合)、
図8Bに従ってTOCエントリを処理する際にメモリに対応するフラグをコピーする代わりに、フラグがガーベッジコレクションのためにマーキングされ得る。より具体的には、フラグは、ガーベッジコレクション動作の一部として、ソリッドステートメモリモジュールにおける他の位置へ再配置されるようにマーキングされ得る。
【0124】
図8Bの議論を引き続き参照して、ステップ836では、処理すべき付加的なTOCエントリが存在するかどうかに関して判定がなされる。処理するべき付加的なTOCエントリが存在する場合、当該方法はステップ824に進み、そうでなければプロセスは終了する。
【0125】
当該技術の一実施形態では、
図8Bに示される方法は、メモリに格納されたすべてのオープンTOCページ上で実行され得る。さらに、
図8Bにおける方法は、システムの電源がオンされている場合、メモリにおけるすべてのTOCページについて並列で実行され得る。
【0126】
当該技術の一実施形態において、
図8Aにおける方法は、システムの電源がオンされている場合、ストレージ機器内のすべてのブロック(またはブロックのサブセット)について並列で実行され得る。さらに、
図8Aにおける方法は、
図8Bにおいて示される方法と並列に実行され得る。このプロセスの後、新しいユーザデータがストレージ機器に書き込まれると、結果得られるインメモリデータ構造はプロセッサによって更新され得る。
【0127】
前述の議論は、TOCページ、オープンデータページおよび書込データページがソリッドステートメモリのSLCモード部分に書き込まれ得ることを示すが、当該技術は、SLCモード部分およびMLCモード部分を有するソリッドステートメモリモジュールがなくても、実現され得る。
【0128】
たとえば、当該技術は、たとえばMLCモードを使用して動作するとともに留保部分および非留保部分を含むソリッドステートメモリモジュールを使用して実現され得、当該留保部分は、電源障害(または電源障害の通知)の場合には、オープンTOCページ、オープンデータページおよび書込データページからのコンテンツを格納するために使用されるソリッドステートメモリモジュールの部分に対応しており、ソリッドステートメモリモジュールの非留保部分は、
図6Bおよび
図6Cに従って、TOCページおよび書込データページからのコンテンツを格納するために使用される。
【0129】
別の例において、当該技術は、たとえばSLCモードを使用して動作するとともに留保部分および非留保部分を含むソリッドステートメモリモジュールを使用して実現され得、当該留保部分は、電源障害(または電源障害の通知)の場合には、TOCページ、オープンデータページおよび書込データページからのコンテンツを格納するために使用されるソリッドステートメモリモジュールの部分に対応しており、ソリッドステートメモリモジュールの非留保部分は、
図6Bおよび
図6Cに従って、TOCページおよび書込データページからのコンテンツを格納するために使用される。
【0130】
当業者は、ソリッドステートメモリモジュールにおける技術を実現することに関して当該技術が記載されているが、当該技術の実施形態は他のタイプの不揮発性ストレージ媒体を使用して実現され得るということを認識するであろう。
【0131】
当業者は、永続ストレージ(たとえばソリッドステートメモリモジュール)と同じ位置にボールテッドメモリを配置することに関して当該技術が記載されているが、ボールテッドメモリが永続ストレージと同じ位置に配置されない当該技術の実施形態が実現され得るということを認識するであろう。
【0132】
当業者は、TOCページとして留保されている各ブロックにおける最終ページに関して当該技術が記載されたが、当該技術から逸脱することがなければ、留保されたTOCページとしてブロックにおいて別ページをセットすることによって、当該技術の実施形態が実現され得るということを認識するであろう。
【0133】
当該技術の一実施形態において、インメモリデータ構造は、ソリッドステートメモリモジュールに格納される任意のデータに対して任意の動作(たとえば読出動作、書込動作および/または消去動作)が行われる前に生成される。
【0134】
当該技術の1つ以上の実施形態は、ストレージ機器に格納されるすべてのユーザデータがそのメタデータと同じ位置に配置されるシステムおよび方法を提供する。これにより、ストレージ機器に格納されるすべてのユーザデータは自己記述的である。当該技術のさまざまな実施形態に従ってユーザデータおよび対応するメタデータを配することによって、
ストレージ機器は、所与のソリッドステートメモリモジュール(またはそのサブセット)の障害に対してより良好に保護される。換言すると、所与のソリッドステートメモリモジュール(またはそのサブセット)に障害が起きても、他のソリッドステートメモリモジュールにおけるユーザデータにアクセスするのに必要なメタデータ自体が他のソリッドステートメモリモジュールに位置しているので、システムにおける他のソリッドステートメモリモジュールにおけるユーザデータはまだアクセス可能である。
【0135】
さらに、当該技術の実施形態は、単一のルックアップステップでユーザデータに制御モジュールがアクセスすることを可能にするインメモリデータ構造の作成を可能にする。換言すると、制御モジュールは、ストレージ機器におけるユーザデータの物理アドレスを直接的に確認するようインメモリデータ構造を使用し得る。この情報を使用して、制御モジュールはユーザデータに直接的にアクセスすることが可能であり、ユーザデータを得るために任意の中間メタデータヒエラルキーを横断する必要はない。
【0136】
当該技術の1つ以上の実施形態は、当該システムにおける1つ以上のプロセッサによって実行される命令を使用して実施されてもよい。さらに、このような命令は、1つ以上の一時的でないコンピュータ読取可能
記録媒体上に格納されるコンピュータ読取可能命令に対応してもよい。
【0137】
当該技術を限られた数の実施形態に関して記載したが、この開示の利益を有する当業者であれば、本願明細書において開示される当該技術の範囲から逸脱しない他の実施形態が作り出され得るということを理解するであろう。したがって、当該技術の範囲は、添付の特許請求の範囲によってのみ限定されるべきである。