JP6211579B2 - テーブル・オブ・コンテンツエントリを使用してデータを格納するためのシステムおよび方法 - Google Patents

テーブル・オブ・コンテンツエントリを使用してデータを格納するためのシステムおよび方法 Download PDF

Info

Publication number
JP6211579B2
JP6211579B2 JP2015501909A JP2015501909A JP6211579B2 JP 6211579 B2 JP6211579 B2 JP 6211579B2 JP 2015501909 A JP2015501909 A JP 2015501909A JP 2015501909 A JP2015501909 A JP 2015501909A JP 6211579 B2 JP6211579 B2 JP 6211579B2
Authority
JP
Japan
Prior art keywords
page
block
memory
data
toc
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2015501909A
Other languages
English (en)
Other versions
JP2015515678A (ja
Inventor
ボンウィック,ジェフリー・エス
シャピロ,マイケル・ダブリュ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
DSSD Inc
Original Assignee
DSSD Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by DSSD Inc filed Critical DSSD Inc
Publication of JP2015515678A publication Critical patent/JP2015515678A/ja
Application granted granted Critical
Publication of JP6211579B2 publication Critical patent/JP6211579B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • G06F12/1018Address translation using page tables, e.g. page table structures involving hashing techniques, e.g. inverted page tables

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Multi Processors (AREA)

Description

背景
システムが持続性ストレージにデータを書き込みかつ持続性ストレージからデータを読み出し得るスピードはしばしば、システムの全体の性能の重大なファクタである。持続性ストレージからのデータの読み出しおよび持続性ストレージへのデータの書き込みの従来のアプローチは、システムカーネルにおける複数のレイヤーおよびハードウェアにおける複数のエンティティによる処理を必要とする。結果として、持続性ストレージからのデータの読み出しおよび持続性ストレージへのデータの書き込みによって、システムにおいて著しいレイテンシーが導入され、その結果、システムの全体の性能が低減される。
概要
一般に、1つの局面において、データを格納するための方法である。この方法は、第1の論理アドレスを使用して規定される第1のデータを持続性ストレージに書き込む要求を受け取るステップと、上記持続性ストレージにおいて、第1のブロックIDおよび第1のサブブロックIDを含む第1の物理アドレスを決定するステップと、上記第1の物理アドレスに上記第1のデータを書き込むステップと、上記第1の論理アドレスおよび上記第1のサブブロックIDを含む第1のテーブル・オブ・コンテンツエントリ(TE)を生成するステップと、上記持続性ストレージにおいて、上記第1のブロックIDおよび第2のサブブロックIDを含む第2の物理アドレスに上記第1のTEを書き込むステップとを含み、第2のサブブロックが上記第2のサブブロックIDに対応し、上記第2のサブブロックは上記第1のブロックIDに対応する第1のブロック内に配置される。
一般に、1つの局面では、本発明は、データを格納するための方法に関し、この方法は、第1の論理アドレスを使用して規定される第1のデータを持続性ストレージに書き込む要求を受け取るステップと、持続性ストレージにおいて、第1のブロックIDおよび第1のページIDを含む第1の物理アドレスを決定するステップと、上記第1のデータのコピーを含む第1のフラグを上記第1の物理アドレスに書き込むステップと、上記第1の論理アドレスおよび上記第1のページIDを含む第1のテーブル・オブ・コンテンツエントリ(TE)を生成するステップと、第2の論理アドレスを使用して規定される第2のデータを上記持続性ストレージに書き込む要求を受け取るステップと、上記持続性ストレージにおいて、上記第1のブロックIDおよび第2のページIDを含む第2の物理アドレスを決定するステップと、上記第2のデータのコピーを含む第2のフラグを上記第2の物理アドレスに書き込むステップと、上記第1の論理アドレスおよび上記第2のページIDを含む第2のTEを生成するステップと、上記第1のTEおよび上記第2のTEを含むテーブル・オブ・コンテンツ(TOC)ページを生成するステップと、上記持続性ストレージにおいて、上記第1のブロックIDおよび第3のページIDを含む第3の物理アドレスに上記TOCページを書き込むステップとを含む。
一般に、1つの局面では、本発明は、インメモリデータ構造にポピュレートするための方法に関する。この方法は、(a)持続性ストレージにおいて第1のブロックを選択するステップと、(b)上記第1のブロックにおいて最後のページを抽出するステップとを含み、上記第1のブロックは第1のブロックIDに関連付けられており、上記方法はさらに、(c)上記第1のブロックにおいて、第1のデータについての第1の論理アドレス、および上記第1のデータが配置される上記第1のブロックにおけるページに対応する第1のページIDを含む第1のテーブル・オブ・コンテンツエントリ(TE)を上記最後のページから抽出するステップと、(d)上記第1のブロックIDおよび上記第1のページIDを使用して、上記第1のデータについて第1の物理アドレスを生成するステップと、(e)第1のハッシュ値を取得するよう上記第1の論理アドレスをハッシングするステップと、(f)上記第1のハッシュ値と上記第1の物理アドレスとの間の第1のマッピングを上記インメモリデータ構造にポピュレートするステップとを含む。
本発明の他の局面は、以下の記載および添付の特許請求の範囲から明らかになるであろう。
本発明の1つ以上の実施形態に従ったシステムを示す図である。 本発明の1つ以上の実施形態に従ったシステムを示す図である。 本発明の1つ以上の実施形態に従ったシステムを示す図である。 本発明の1つ以上の実施形態に従ったシステムを示す図である。 本発明の1つ以上の実施形態に従ったシステムを示す図である。 本発明の1つ以上の実施形態に従ったストレージ機器を示す図である。 本発明の1つ以上の実施形態に従ったストレージ機器を示す図である。 本発明の1つ以上の実施形態に従ったストレージ機器を示す図である。 本発明の1つ以上の実施形態に従ったストレージ機器を示す図である。 本発明の1つ以上の実施形態に従ったストレージモジュールを示す図である。 本発明の1つ以上の実施形態に従ったストレージモジュールを示す図である。 本発明の1つ以上の実施形態に従ったブロックを示す図である。 本発明の1つ以上の実施形態に従ったフラグページを示す図である。 本発明の1つ以上の実施形態に従ったTOCページを示す図である。 本発明の1つ以上の実施形態に従ったブロックを示す図である。 本発明の1つ以上の実施形態に従ったテーブル・オブ・コンテンツ(TOC)エントリを示す図である。 本発明の1つ以上の実施形態に従ったデータ構造を示す図である。 本発明の1つ以上の実施形態に従ったフローチャートを示す図である。 本発明の1つ以上の実施形態に従ったフローチャートを示す図である。 本発明の1つ以上の実施形態に従ったフローチャートを示す図である。 本発明の1つ以上の実施形態に従った例を示す図である。 本発明の1つ以上の実施形態に従った例を示す図である。 本発明の1つ以上の実施形態に従った例を示す図である。 本発明の1つ以上の実施形態に従った例を示す図である。 本発明の1つ以上の実施形態に従った例を示す図である。 本発明の1つ以上の実施形態に従ったフローチャートを示す図である。
詳細な説明
ここで、本発明の特定の実施形態を添付の図面を参照して詳細に記載する。本発明の実施形態の以下の詳細な説明において、本発明のより完全な理解を提供するために多くの特定の詳細が記載される。しかしながら、本発明がこれらの特定の詳細がなくても実施されてもよいことは当業者には明らかであろう。他の例では、説明を不必要に複雑にすることを回避するよう周知の機構は詳細に記載されない。
図1A〜図8の以下の説明では、本発明のさまざまな実施形態において図に関して記載される任意の構成要素は、任意の他の図に関して記載された同様の名称を有する1つ以上の構成要素と同等であり得る。簡潔さのために、これらの構成要素の説明は、各図に関して繰り返されない。したがって、各図の構成要素の各実施形態は、参照により援用され、同様の名称を有する1つ以上の構成要素を有する他のすべての図内に随意に存在すると想定される。さらに、本発明のさまざまな実施形態に従うと、ある図の構成要素の如何なる記載も、任意の他の図中の対応する同様の名称を有する構成要素に関して記載された実施形態に加えて、当該実施形態に関連して、または当該実施形態の代わりに実施されてもよい随意の実施形態として解釈されるべきである。
一般に、本発明の実施形態はストレージシステムに関する。より具体的には、本発明の実施形態は、自己記述型データを含むストレージシステムに関する。さらに、本発明の実施形態は、ストレージシステムに格納されるユーザデータにアクセスするのに必要なメタデータがすべて、それが記述しているユーザデータとともに配置されるストレージシステムに関する。さらに、メタデータは、インメモリデータ構造にポピュレートするよう使用される。当該インメモリデータ構造は、ストレージシステムがインメモリデータ構造のみを使用して、直接的にユーザデータにアクセスすることを可能にする。
図1A〜図1Eは、本発明の1つ以上の実施形態に従ったシステムを示す。図1Aを参照して、システムは、ストレージ機器(102)に動作可能に接続される1つ以上のクライアント(クライアントA(100A),クライアントM(100M)))を含む。
本発明の一実施形態において、クライアント(100A,100M)は、ストレージ機器(102)に読出要求を発行するおよび/またはストレージ機器(102)に書込要求を発行する機能を含む任意のシステムに対応する。図1Aに示されないが、クライアント(100A,100M)の各々は、クライアントプロセッサおよびクライアントメモリを含み得る。クライアントにおけるコンポーネントに関する付加的な詳細は、以下の図1Dにおいて記載される。本発明の一実施形態において、クライアント(100A,100M)は、Peripheral Component Interconnect(PCI)、PCI-Express(PCIe)、PCI-eXtended(PCI−X)、Non-Volatile Memory Express(NVMe)、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といったプロトコルの1つ以上を使用してストレージ機器(102)と通信するように構成される。当業者であれば、本発明は上記のプロトコルに限定されないということを理解するであろう。
本発明の1つ以上の実施形態において、クライアントがPCI、PCI−expressまたはNVMeを実施する場合、クライアントはルートコンプレックス(root complex)(図示せず)を含む。本発明の一実施形態において、ルートコンプレックスは、クライアントプロセッサおよびクライアントメモリをPCIeファブリックに接続するデバイスである。本発明の一実施形態において、ルートコンプレックスはクライアントプロセッサに統合される。
本発明の一実施形態において、PCIeファブリックは、スイッチ(たとえば図1Dにおけるクライアントスイッチ(116)およびたとえば図2Aにおけるスイッチファブリック(206)のようなスイッチファブリック内のスイッチ)を介して接続されるルートコンプレックスおよびエンドポイントを含む。本発明の一実施形態では、エンドポイントは、PCIトランザクション(たとえば読出要求、書込要求)を発生させ得るかまたはPCIトランザクションのターゲットである、ルートコンプレックスまたはスイッチ以外のデバイスである。
本発明の一実施形態において、単一のクライアントおよび単一のストレージ機器は単一のPCIeファブリックの一部と考えられ得る。本発明の別の実施形態において、1つ以上のクライアントおよび1つ以上のストレージ機器の任意の組合せは、単一のPCIeファブリックの一部と考えられ得る。さらに、PCIeを使用してストレージ機器内の個々のコンポーネントが通信するとともにPCIeを使用してクライアントにおける個々のコンポーネント(図1D参照)が通信する場合、ストレージ機器およびクライアントにおけるすべてのコンポーネントは単一のPCIeファブリックの一部と考えられ得る。当業者であれば、本発明から逸脱することがなければ、本発明のさまざまな実施形態が別のタイプのファブリックを使用して実現されてもよいことを理解するであろう。
引き続き図1Aを参照して、本発明の一実施形態において、ストレージ機器(102)は、揮発性および持続性のストレージを含むシステムであり、1つ以上のクライアント(100A,100M)からの読出要求および/または書込要求を処理するように構成される。ストレージ機器(102)のさまざまな実施形態が以下の図2A〜図2Dに記載される。
図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))を使用して実現され得るということを理解するであろう。
図1Cを参照して、図1Cは、ファンアウト構成(fan-out configuration)に配される複数のストレージ機器(104A,104B,104C,104D)にクライアント(100A,100M)が接続されるシステムを示す。この構成では、各クライアント(100A,100M)は、ストレージ機器(104A,104B,104C,104D)の1つ以上に接続されるが、個々のストレージ機器(104A,104B,104C,104D)同士の間に通信は存在しない。
図1Dを参照して、図1Dは、本発明の1つ以上の実施形態に従ったクライアントを示す。図1Dに示されるように、クライアント(110)は、クライアントプロセッサ(112)と、クライアントメモリ(114)と、クライアントスイッチ(116)とを含む。これらのコンポーネントの各々は以下に記載される。
本発明の一実施形態において、クライアントプロセッサ(112)は、命令を実行するように構成される単一のコアまたは複数のコアを有する電子回路のグループである。本発明の一実施形態において、クライアントプロセッサ(112)は、複合命令セット(Complex Instruction Set(CISC))アーキテクチャまたは縮小命令セット(Reduced Instruction Set(RISC))アーキテクチャを使用して実現され得る。本発明の1つ以上の実施形態において、クライアントプロセッサ(112)は、(PCIeプロトコルによって規定されるように)ルートコンプレックスを含む(図示せず)。本発明の一実施形態において、クライアント(110)が(クライアントプロセッサ(112)へ統合され得る)ルートコンプレックスを含んでいれば、クライアントメモリ(114)は、ルートコンプレックスを介してクライアントプロセッサ(112)に接続される。代替的には、クライアントメモリ(114)は、別のポイント・ツー・ポイント接続メカニズムを使用して、クライアントプロセッサ(112)に直接的に接続される。本発明の一実施形態において、クライアントメモリ(114)は、任意の揮発性メモリに対応する。当該揮発性メモリは、ダイナミックランダムアクセスメモリ(DRAM)、シンクロナスDRAM、SDR SDRAMおよびDDR SDRAMを含むが、これらに限定されない。
本発明の一実施形態では、クライアントメモリ(114)は、クライアントプロセッサについての送信キューと、クライアントプロセッサについての完了キューとのうちの1つ以上を含む。本発明の一実施形態において、ストレージ機器メモリは、ファブリックを通じてクライアントに見えるクライアントプロセッサについての1つ以上の送信キューを含み、クライアントメモリは、ファブリックを通じてストレージ機器に見えるクライアントプロセッサについての1つ以上の完了キューを含む。本発明の一実施形態において、クライアントプロセッサについての送信キューは、クライアントプロセッサにコマンド(たとえば読出要求、書込要求)を送信するよう使用される。本発明の一実施形態において、クライアントプロセッサについての完了キューは、別のエンティティに発行したコマンドが完了したことを、クライアントプロセッサに信号通知するよう使用される。本発明の実施形態は、本発明から逸脱することがなければ、他の通知メカニズムを使用して実現されてもよい。
本発明の一実施形態において、クライアントスイッチ(116)は単一のスイッチのみを含む。本発明の別の実施形態において、クライアントスイッチ(116)は、複数の相互接続されたスイッチを含む。クライアントスイッチ(116)が複数のスイッチを含んでいる場合、各スイッチは他のすべてのスイッチに接続されてもよく、スイッチファブリックにおけるスイッチのサブセットに接続されてもよく、または1つの他のスイッチにのみ接続されてもよい。本発明の一実施形態において、クライアントスイッチ(116)におけるスイッチの各々は、データおよびメッセージがクライアント(110)とストレージ機器(図示せず)との間で転送されることを可能にするように構成される、ハードウェアおよび(たとえば集積回路を使用して実現される)(スイッチファブリックが実施するプロトコルによって規定されるような)ロジックの組み合わせである。
本発明の一実施形態において、クライアント(100A,100M)がPCI、PCIeまたはPCI−Xのうち1つ以上のプロトコルを実施する場合、クライアントスイッチ(116)はPCIスイッチである。
このような実施形態では、クライアントスイッチ(116)は、多くのポートを含み、各ポートはトランスペアレントなブリッジまたはノントランスペアレントなブリッジとして構成され得る。トランスペアレントなブリッジとして実施されるポートは、ルートコンプレックスが、ポートに(直接的にまたは間接的に)接続されたデバイス(他のルートコンプレックス、スイッチ、PCIブリッジまたはエンドポイントであってもよい)の発見を継続することを可能にする。対照的に、ルートコンプレックスがノントランスペアレントなブリッジとして実施されたポートに直面すると、ルートコンプレックスは、ポートに接続されたデバイスの発見を継続することができず、むしろ、ルートコンプレックスは、このようなポートをエンドポイントとして扱う。
ポートがノントランスペアレントなブリッジとして実施される場合、ノントランスペアレントなブリッジのいずれかの側上のデバイスは、メールボックスシステムおよびドアベル割込(doorbell interrupt)(クライアントスイッチによって実現される)を用いてのみ通信し得る。ドアベル割込は、ノントランスペアレントなブリッジの一方の側のプロセッサがノントランスペアレントなブリッジの他方の側のプロセッサに割込を発行するのを可能にする。さらに、メールボックスシステムは、スイッチファブリックのいずれかの側のプロセッサによって読出可能および書込可能である1つ以上のレジスタを含む。上記のレジスタは、クライアントスイッチのいずれかの側のプロセッサがノントランスピアレントなブリッジに亘って制御および状態情報を通過させるのを可能にする。
本発明の一実施形態において、ノントランスペアレントなブリッジの一方の側のデバイスからノントランスペアレントなブリッジの他方の側のデバイスにPCIトランザクションを送信するために、PCIトランザクションはノントランスペアレントなブリッジを実現するポートへアドレス指定されなければならない。PCIトランザクションの受信の際、クライアントスイッチは、(直接アドレス変換メカニズムまたはルックアップテーブルに基づいた変換メカニズムのいずれかを使用して)アドレス変換を行なう。次いで、結果得られるアドレスはノントランスペアレントなブリッジの他の側の適切なデバイスに向かうようパケットをルーティングするよう使用される。
本発明の一実施形態において、クライアントスイッチ(116)は、クライアントメモリ(114)の少なくともある部分がストレージ機器に直接的にアクセス可能であるように構成される。換言すると、クライアントスイッチの一方の側上のストレージ機器は、クライアントスイッチを介して、クライアントスイッチの他方の側上のクライアントメモリに直接的にアクセスし得る。
本発明の一実施形態では、クライアントスイッチ(116)はDMAエンジン(118)を含む。本発明の一実施形態において、DMAエンジン(118)は、クライアントプロセッサかまたはクライアントスイッチに接続されたストレージ機器のいずれかによってプログラムされ得る。上で論じたように、クライアントスイッチ(116)は、クライアントメモリ(114)の少なくともある部分がストレージ機器またはストレージモジュールにアクセス可能であるように構成される。したがって、DMAエンジン(118)は、ストレージ機器にアクセス可能であるクライアントメモリの当該部分におけるアドレスからデータを読み出し、かつストレージ機器またはストレージモジュールにおいてメモリにこのようなデータのコピーを直接的に書き込むようにプログラムされ得る。さらに、DMAエンジン(118)は、ストレージ機器からデータを読み出し、ストレージ機器にアクセス可能であるクライアントメモリの当該部分におけるアドレスにこのようなデータのコピーを直接的に書き込むようにプログラムされ得る。
本発明の一実施形態では、DMAエンジン(118)はマルチキャスティングをサポートする。このような実施形態において、ストレージ機器におけるプロセッサ(図2A参照)は、マルチキャストグループを作成し得る。当該マルチキャストグループの各メンバーは、ストレージ機器上のメモリにおけるユニークな宛先アドレスに対応する。マルチキャストグループの各メンバーは、(i)宛先アドレス、(ii)ソースアドレス、(iii)転送サイズフィールド、および(iv)制御フィールドを特定する記述子に関連付けられる。記述子の各々についてのソースアドレスは一定のままである一方、宛先アドレスは各記述子について変化する。ひとたびマルチキャストグループが作られると、DMAエンジンによって開始された転送を含む、マルチキャストグループアドレスをターゲットとするスイッチを通じた如何なるデータ転送によっても、マルチキャストグループに関連付けられる宛先ポートのすべてにデータの同一のコピーが配置される。本発明の一実施形態において、スイッチは、マルチキャストグループ記述子のすべてを並列に処理する。
図1Dの議論を継続して、当業者であれば、図1Dはクライアント(110)に位置するクライアントスイッチ(116)を示しているが、本発明から逸脱することがなければ、クライアントスイッチ(116)はクライアントの外部に配置されてもよいということを理解するであろう。さらに、当業者であれば、本発明から逸脱することがなければ、DMAエンジン(118)はクライアントスイッチ(116)の外部に配置されてもよいということを理解するであろう。
図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)に直接的に接続され得る。当業者であれば、本発明から逸脱することがなければ、ストレージ機器メッシュが他のメッシュ構成(たとえば部分接続メッシュ)を使用して実現され得るということを理解するであろう。
図1Eに示されないが、各クライアントは、自身のクライアントスイッチを(図1Dに示されるように)含んでもよいが、(以下に規定される)スイッチファブリックを使用して、ストレージ機器メッシュ(104)に接続されてもよい。
当業者であれば、図1A〜図1Eは限られた数のクライアントに接続されるストレージ機器を示すが、本発明から逸脱することがなければ、ストレージ機器は如何なる数のクライアントに接続されてもよいということを理解するであろう。当業者であれば、図1A〜図1Eはさまざまなシステム構成を示すが、本発明は上記のシステム構成に限定されないということを理解するであろう。さらに当業者であれば、本発明から逸脱することがなければ、クライアント(システムの構成にかかわらず)は、スイッチファブリック(図示せず)(以下に記載される)を使用して、ストレージ機器に接続され得るということを理解するであろう。
図2A〜図2Dは、本発明の1つ以上の実施形態に従ったストレージ機器の実施形態を示す。図2Aを参照して、ストレージ機器は、制御モジュール(200)およびストレージモジュールグループ(202)を含む。これらのコンポーネントの各々は以下に記載される。一般に、制御モジュール(200)は、1つ以上のクライアントからの読出要求および書込要求の処理を管理するように構成される。特に、制御モジュールは、(以下に論じられる)IOMを介して1つ以上のクライアントから要求を受け取り、要求を処理(ストレージモジュールに要求を送信することを含み得る)し、要求が処理された後にクライアントに応答を提供するよう構成される。制御モジュールにおけるコンポーネントに関する付加的な詳細は以下に含まれる。さらに、読出要求および書込要求の処理に関する制御モジュールの動作は、図4A〜図7Cを参照して以下に記載される。
図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は、上でリストされたもの以外のプロトコルを使用して実現されてもよいということを理解するであろう。
図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プロトコルを使用する。
本発明の一実施形態において、スイッチファブリックがPCIプロトコルを実施する場合、スイッチファブリック(206)は、プロセッサのためのポート(またはより具体的には、プロセッサ(208)に統合されたルートコンプレックスのためのポートもしくはプロセッサに接続されたルートコンプレックスのためのポート)と、ストレージモジュールグループ(202)におけるストレージモジュール(214A,214N)(図3参照)のための1つ以上のポートと、FPGA(212)(存在する場合)のためのポートと、IOM(204)のためのポートとを含む。本発明の1つ以上の実施形態において、上記のポートの各々は、(上で論じたように)トランスペアレントなブリッジまたはノントランスペアレントなブリッジとして構成され得る。当業者であれば、スイッチファブリック(206)がPCIの実現例に関して記載されているが、本発明から逸脱することがなければ、スイッチファブリック(206)は他のプロトコルを使用して実現されてもよいということを理解するであろう。
本発明の一実施形態では、スイッチファブリック(206)における少なくとも1つのスイッチは、マルチキャスティングを実現するように構成される。より具体的には、本発明の一実施形態において、プロセッサ(208)はマルチキャストグループを生成するように構成される。当該マルチキャストグループは、2以上のメンバーを含んでおり、各メンバーは、メモリ(210)および/またはストレージモジュール(214A,214N)におけるアドレスを特定する。マルチキャストグループが作られる場合、マルチキャストグループはマルチキャストアドレスに関連付けられる。マルチキャスティングを実施するために、スイッチファブリックにおける少なくとも1つのスイッチは以下のように構成される、すなわち、宛先アドレスとしてマルチキャストアドレスを特定する書込が受け取られると、当該スイッチがマルチキャストグループにおける各メンバーについて新しい書込を生成し、ストレージ機器における適切なアドレスに書込を発行するように構成される。本発明の一実施形態において、マルチキャストアドレスに特定のオフセットを加えることによって、スイッチによって生成される各書込についてのアドレスが決定される。
図2Aを引き続き参照して、プロセッサ(208)は、命令を実行するように構成される単一のコアまたは複数のコアを有する電子回路のグループである。本発明の一実施形態において、プロセッサ(208)は、複合命令セット(Complex Instruction Set(CISC))アーキテクチャまたは縮小命令セット(Reduced Instruction Set(RISC))アーキテクチャを使用して実現され得る。本発明の1つ以上の実施形態において、プロセッサ(208)は、(PCIeプロトコルによって規定されるように)ルートコンプレックスを含む。本発明の一実施形態において、制御モジュール(200)が(プロセッサ(208)へ統合され得る)ルートコンプレックスを含んでいれば、メモリ(210)は、ルートコンプレックスを介してプロセッサ(208)に接続される。代替的には、メモリ(210)は、別のポイント・ツー・ポイント接続メカニズムを使用して、プロセッサ(208)に直接的に接続される。本発明の一実施形態において、メモリ(210)は、任意の揮発性メモリに対応する。当該揮発性メモリは、ダイナミックランダムアクセスメモリ(DRAM)、シンクロナスDRAM、SDR SDRAMおよびDDR SDRAMを含むが、これらに限定されない。
本発明の一実施形態において、プロセッサ(208)は、インメモリデータ構造(in-memory data structure)(図示せず)を作成し更新するように構成され、当該インメモリデータ構造はメモリ(210)に格納される。本発明の一実施形態において、インメモリデータ構造は、論理アドレスとストレージモジュールのセットにおける物理的なストレージアドレスとの間のマッピング(直接または間接)を含む。本発明の一実施形態では、論理アドレスは、データがクライアントの視点から見て存在するように思われるアドレスである。本発明の一実施形態では、論理アドレスは、nタプルにハッシュ関数(たとえばSHA−1、MD−5など)を適用することによって生成されるハッシュ値である(または当該ハッシュ値を含む)。本発明の一実施形態では、nタプルは<オブジェクトID,オフセットID>であり、オブジェクトIDはファイルを規定し、オフセットIDはファイルの開始アドレスに対する位置を規定する。本発明の別の実施形態において、nタプルは<オブジェクトID,オフセットID,発生時間>であり、発生時間は、(オブジェクトIDを使用して識別される)ファイルが作成された時間に対応する。代替的には、論理アドレスは、論理オブジェクトIDおよび論理バイトアドレスか、または論理オブジェクトIDおよび論理アドレスオフセットを含んでもよい。本発明の別の実施形態では、論理アドレスは、オブジェクトIDおよびオフセットIDを含む。当業者であれば、複数の論理アドレスが単一の物理アドレスにマッピングされてもよく、論理アドレスは上記の実施形態に限定されないということを理解するであろう。
本発明の一実施形態において、物理アドレスは、(i)メモリ(210)における位置、(ii)ボールテッドメモリ(vaulted memory)(たとえば図3の324)における位置、または(iii)ソリッドステートメモリモジュール(たとえば図3の中の330A)における位置に対応し得る。本発明の一実施形態において、インメモリデータ構造は、ストレージ機器にデータの複数のコピーが存在する場合、単一のハッシュ値を複数の物理アドレスにマッピングし得る。
本発明の一実施形態では、メモリ(210)は、プロセッサについての送信キュー、プロセッサについての完了キュー、ストレージ機器におけるストレージモジュールの各々についての送信キュー、およびストレージ機器におけるストレージモジュールの各々についての完了キューの1つ以上を含む。本発明の一実施形態では、プロセッサについての送信キューは、コマンド(たとえば読出要求、書込要求)をプロセッサに送信するよう使用される。本発明の一実施形態において、プロセッサについての完了キューは、別のエンティティに発行したコマンドが完了したことを、プロセッサに信号通知するよう使用される。ストレージモジュールについての送信キューおよび完了キューは同様の態様で機能する。
本発明の一実施形態では、(スイッチファブリックを介する)プロセッサは、FPGA(212)にさまざまなタイプの処理をオフロードするように構成される。本発明の一実施形態では、FPGA(212)は、ストレージモジュールに書き込まれているデータおよび/またはストレージモジュールから読み出されているデータについてチェックサムを計算する機能を含む。さらに、FPGA(212)は、RAIDスキーム(たとえばRAID2〜RAID6)を使用してストレージモジュールにデータを格納するためにPおよび/もしくはQパリティー情報を計算する機能、ならびに/またはRAIDスキーム(たとえばRAID2〜RAID6)を使用して格納された破損データを回復するのに必要なさまざまな計算を行なう機能を含み得る。本発明の一実施形態において、ストレージモジュールグループ(202)は、データを格納するよう各々が構成される1つ以上のストレージモジュール(214A,214N)を含む。ストレージモジュールは、以下に図3において記載される。
本発明の一実施形態では、プロセッサ(208)は、システムにおいて1つ以上のDMAエンジンをプログラムするように構成される。たとえば、プロセッサ(208)はクライアントスイッチにおけるDMAエンジンをプログラムするように構成される(図1D参照)。プロセッサ(208)はさらに、ストレージモジュールにおけるDMAエンジンをプログラムするように構成され得る(図3参照)。本発明の一実施形態において、クライアントスイッチにおけるDMAエンジンをプログラムすることは、マルチキャストグループを作ることと、当該マルチキャストグループにおけるメンバーの各々について記述子を生成することとを含み得る。
図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)間の直接的な通信を可能にするよう使用されてもよいということを理解するであろう。
図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)と実質的に同様である。
本発明の一実施形態において、制御モジュール(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,238N)に(スイッチファブリック(234)を介して)直接的にアクセスすることが可能になる。
図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)間の直接的な通信を可能にするよう使用されてもよいということを理解するであろう。
本発明の一実施形態において、プロセッサA(248)は主として、ストレージモジュールグループAおよびB(256,258)からのデータの格納および抽出に関係付けられる要求を扱うように構成され、プロセッサB(250)は主として、ストレージモジュールグループCおよびD(260,262)からのデータの格納および抽出に関係付けられる要求を扱うように構成される。しかしながら、プロセッサ(248,250)は、(スイッチファブリック(246)を介して)ストレージモジュールグループ(256,258,260,262)のすべてと通信するように構成される。この構成は、制御モジュール(240)がプロセッサ間でのI/O要求の処理を拡張することを可能にし、および/またはプロセッサの一つに障害が起きるシナリオに対処するために、ビルトインの冗長性を提供する。
図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)と実質的に同様である。
図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)を含む。
本発明の一実施形態では、制御モジュール内のプロセッサ(268,270,272,274)は、たとえばインテル(登録商標)QuickPathインターコネクト(Intel QuickPath Interconnect)のようなポイント・ツー・ポイント相互接続を使用して互いに直接的に通信し得る。当業者であれば、本発明から逸脱することがなければ、他のポイント・ツー・ポイント通信メカニズムがプロセッサ(268,270,272,274)間の直接的な通信を可能にするよう使用されてもよいということを理解するであろう。さらに、制御モジュールAにおけるプロセッサ(268,270)は、制御モジュールBにおけるスイッチファブリック(286)への直接接続を介して、制御モジュールBにおけるコンポーネントと通信し得る。同様に、制御モジュールBにおけるプロセッサ(272,274)は、制御モジュールAにおけるスイッチファブリック(284)への直接接続を介して、制御モジュールAにおけるコンポーネントと通信し得る。
本発明の一実施形態において、制御モジュールの各々は、(ストレージモジュールグループ(304,306,308,310)によって示される)さまざまなストレージモジュールに接続される。図2Dに示されるように、各制御モジュールは、制御モジュールにおけるスイッチファブリックに接続されるストレージモジュールと通信し得る。さらに、制御モジュールA(264)におけるプロセッサは、スイッチファブリックB(286)を使用して、制御モジュールB(266)に接続されるストレージモジュールと通信し得る。同様に、制御モジュールB(266)におけるプロセッサは、スイッチファブリックA(284)を使用して、制御モジュールA(264)に接続されるストレージモジュールと通信し得る。
制御モジュール間の相互接続によって、どの制御モジュールがI/O要求を受け取るかに関わらず、ストレージ制御がストレージ機器に亘ってI/O負荷を分散することが可能になる。さらに、制御モジュールの相互接続によって、ストレージ機器はより多くのI/O要求を処理することが可能になる。さらに、制御モジュールの相互接続は、制御モジュール(または1つ以上のコンポーネント)に障害が起きた場合に、ビルトインの冗長性を提供する。
図2B〜図2Dに関して、本発明の1つ以上の実施形態において、インメモリデータ構造が、制御モジュールにおけるメモリに亘ってミラーリングされる。このような場合、制御モジュールにおけるプロセッサは、インメモリデータ構造がすべてのメモリに亘ってミラーリングされるようにストレージ機器内のすべてのメモリを更新するのに必要なコマンドを発行する。これにより、いずれのプロセッサも、ストレージ機器において(上で論じられたnタプルによって規定されるような)データの位置を決定するために自身のメモリを使用し得る。この機能により、ストレージモジュール内のデータの位置に関して、如何なるプロセッサも如何なるI/O要求も処理することが可能になる。さらにインメモリデータ構造をミラーリングすることによって、メモリのうちの1つに障害が起きても、ストレージ機器は動作し続け得る。
当業者であれば、図2A〜図2Dは限られた数のストレージモジュールに接続される制御モジュールを示すが、本発明から逸脱することがなければ、制御モジュールは任意の数のストレージモジュールに接続されてもよいということを理解するであろう。当業者であれば、図2A〜図2Dは、ストレージ機器のさまざまな構成を示しているが、本発明から逸脱することがなければ、ストレージ機器は他の構成を使用して実施されてもよいということを理解するであろう。
図3は、本発明の1つ以上の実施形態に従ったストレージモジュールを示す。ストレージモジュール(320)は、ストレージモジュールコントローラ(322)、メモリ(324)および1つ以上のソリッドステートメモリモジュール(330A,330N)を含む。これらのコンポーネントの各々は以下に記載される。
本発明の一実施形態では、ストレージモジュールコントローラ(322)は、1つ以上の制御モジュールからのデータの読み出しおよび/または1つ以上の制御モジュールへのデータの書き込みをする要求を受け取るよう構成される。さらに、ストレージモジュールコントローラ(322)は、メモリ(324)および/またはソリッドステートメモリモジュール(330A,330N)を使用して、読出要求および書込要求を処理するように構成される。図3には示されないが、ストレージモジュールコントローラ(322)は、メモリ(324)またはソリッドステートメモリモジュール(330A,330N)の1つからデータを読み出し、クライアントメモリ(図1D中の114)における物理アドレスにデータのコピーを書き込むように構成されるDMAエンジンを含んでもよい。さらに、DMAエンジンは、メモリ(324)からのデータをソリッドステートメモリモジュールの1つ以上に書き込むよう構成され得る。本発明の一実施形態では、DMAエンジンは、プロセッサ(たとえば図2A中の208)によってプログラムされるように構成される。当業者であれば、本発明から逸脱することがなければ、ストレージモジュールはストレージモジュールコントローラの外部のDMAエンジンを含んでもよいということを理解するであろう。
本発明の一実施形態において、メモリ(324)は、任意の揮発性メモリに対応する。当該揮発性メモリは、ダイナミックランダムアクセスメモリ(DRAM)、シンクロナスDRAM、SDR SDRAMおよびDDR SDRAMを含むが、これらに限定されない。
本発明の一実施形態において、メモリ(324)は、ボールテッドメモリ(326)およびキャッシュ(328)に論理的または物理的にパーティショニングされ得る。本発明の一実施形態において、ストレージモジュールコントローラ(322)は、ストレージモジュールにおける停電の通知の場合(またはストレージモジュールが電力を失い得る別の場合)、ボールテッドメモリ(326)のすべての内容をソリッドステートメモリモジュール(330A,330N)の1つ以上に書き込むように構成される。本発明の一実施形態において、ストレージモジュールコントローラ(322)は、停電の通知の時間とストレージモジュールの実際の電力損失との間に、ボールテッドメモリ(326)のすべての内容をソリッドステートメモリモジュール(330A,330N)の1つ以上に書き込むように構成される。対照的に、キャッシュ(328)の内容は、停電の場合(またはストレージモジュールが電力を失い得る別の場合)には失われる。
本発明の一実施形態において、ソリッドステートメモリモジュールは、持続性のデータを格納するようソリッドステートメモリを使用する任意のデータストレージデバイスに対応する。本発明の一実施形態において、ソリッドステートメモリは、NANDフラッシュメモリ、NORフラッシュメモリ、磁気RAMメモリ(M−RAM)、スピントルク磁気RAMメモリ(ST−MRAM)、相変化メモリ(PCM)、または不揮発性ストレージクラスメモリ(SCM)として規定される任意の他のメモリを含んでもよいが、これらに限定されない。
本発明の一実施形態では、(i)クライアントスイッチを介してアクセス可能なクライアントメモリの部分、(ii)制御モジュールにおけるメモリ、(iii)ストレージモジュールにおけるメモリ、および(iv)ソリッドステートメモリモジュールといったストレージ位置が、統合されたアドレス空間の一部である。したがって、ストレージ機器におけるプロセッサの視点から、(物理的に別個である)上記のストレージ位置同士が、物理アドレスの単一のプールとして現われる。換言すると、プロセッサは、統合されたアドレス空間において物理アドレスのうちのいずれかに格納されるデータについて読出要求および/または書込要求を発行し得る。上記のストレージ位置は、統合されたアドレス空間を使用してアクセス可能であるストレージファブリックと称され得る。
本発明の一実施形態において、統合されたアドレス空間は、クライアントスイッチにおけるノントランスペアレントなブリッジによって部分的に作成され、これにより、制御モジュールにおけるプロセッサがクライアントメモリの部分を「見る」ことが可能になる。したがって、制御モジュールにおけるプロセッサは、プロセッサが「見ること」ができるクライアントメモリの部分において、読出要求および/または書込要求を行ない得る。
図4Aは、本発明の1つ以上の実施形態に従ったストレージモジュールを示す。ソリッドステートメモリモジュール(400)は1つ以上のブロックを含む。本発明の一実施形態では、ブロックは、ソリッドステートメモリモジュール(400)内のストレージの最小の消去可能な単位である。
図4Bは、本発明の1つ以上の実施形態に従ったブロックを示す。より具体的には、各ブロック(402)は1つ以上のページを含む。本発明の一実施形態において、ページは、ソリッドステートメモリモジュールでの読出動作およびプログラム動作(ページへの初期書き込みを含む)のための最小のアドレス指定可能な単位である。本発明の一実施形態において、ブロック内にページを再書き込みすることは、全ブロックが再書き込みされることが必要である。本発明の一実施形態では、ブロック内の各ページは、フラグページ(Frag Page)(図4C参照)またはTOCページ(図4D参照)のいずれかである。
図4Cは、本発明の1つ以上の実施形態に従ったフラグページを示す。本発明の一実施形態では、フラグページは1つ以上のフラグ(frag)を含む。本発明の一実施形態では、フラグは有限量のユーザデータに対応する。さらに、所与のページ内のフラグは、均一なサイズまたは非均一なサイズであってもよい。さらに、所与のブロック内のフラグは、均一なサイズまたは非均一なサイズであってもよい。本発明の一実施形態では、所与のフラグは、ページのサイズ未満であってもよく、ページのサイズと全く同じであってもよく、または1つ以上のページに亘ってもよい。本発明の一実施形態では、フラグページはフラグのみを含む。本発明の一実施形態では、各フラグは、ユーザデータ(すなわち、ストレージ機器における格納のためにクライアントによって提供されるデータ)を含んでいる。この説明の目的のために、「フラグ」および「ユーザデータ」という用語は、交換可能に使用される。
図4Dは、本発明の1つ以上の実施形態に従ったTOCページを示す。本発明の一実施形態では、TOCページ(406)は、1つ以上のTOCエントリを含んでおり、TOCエントリの各々は、所与のフラグについてのメタデータを含んでいる。さらに、TOCページ(406)は、ブロック(402)における別のTOCページへの参照を含んでもよい。本発明の一実施形態において、TOCページは、TOCエントリ(および随意にブロックにおける別のTOCページへの参照)のみを含むが、如何なるフラグも含まない。本発明の一実施形態では、各TOCエントリは、ブロック(402)におけるフラグ(図4C参照)に対応する。TOCエントリは、ブロック内のフラグにのみ対応する。換言すると、TOCページは、ブロックに関連付けられ、当該ブロックにおけるフラグについてのTOCエントリのみを含む。本発明の一実施形態において、ソリッドステートメモリモジュールの各々内の各ブロックにおいて欠陥がない最後のページはTOCページである。
図4Eは、本発明の1つ以上の実施形態に従ったブロックを示す。より具体的には、図4Eは、TOCページ(410,412,414)およびフラグページ(416,418,420,422,424,426)を含むブロック(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)への参照を含む。
このプロセスは、充填するべきブロック(408)に残っているページが1つだけになるまで繰り返される。この時点で、TOCページ(410)が作成され、ブロック(408)の最後のページに格納される。当業者であれば、TOCページ(410)におけるTOCエントリの合計の累積のサイズがページのサイズ未満であり得るということを理解するであろう。このような場合、TOCページは、TOCエントリの累積サイズとページサイズとの間の差に対応するためにパディングを含んでもよい。最後に、ブロック(408)において他のTOCページが存在するので、TOCページ(410)は1つの他のTOCページ(412)への参照を含む。
図4Eに示されるように、TOCページは、TOCページが当該TOCページの下に存在するTOCページからの参照をフォローすることにより取得され得るように、ブロックの「底部」からページの「上部」までリンクされる。たとえば、TOCページ(412)は、TOCページ(410)における参照を使用してアクセスされ得る。
当業者であれば、本発明から逸脱することがなければ、ブロック(408)はフラグページおよびTOCページのみを含む一方、ブロック(408)はフラグページおよびTOCページ以外のページ(たとえばパリティデータを含むページ)を含んでもよいということを理解するであろう。このような他のページは、ブロック内に位置し得、実現例に依存して、TOCページとフラグページとの間に挟まれ得る。
図4Fは、本発明の1つ以上の実施形態に従ったTOCエントリを示す。本発明の一実施形態では、各TOCエントリ(430)は、フラグ(および特にフラグにおけるユーザデータ)についてのメタデータを含んでおり、以下のフィールドの1つ以上を含み得る。すなわち、(i)格納されているオブジェクト(たとえばファイル)を識別するオブジェクトID(432)と、(ii)TOCエントリに対応するフラグがボールテッドメモリに書き込まれた時間(たとえば、制御モジュールにおけるプロセッサのプロセッサクロック値)を特定する発生時間(434)と、(iii)(オブジェクトIDによって識別される)オブジェクトの始まりに対する、フラグにおけるユーザデータの始点を識別するオフセットID(436)と、(iv)フラグのサイズを特定するフラグメントサイズ(438)と、(v)フラグが格納されるブロックにおけるページを識別するページID(440)と、(vi)(ページIDによって識別される)ページにおけるフラグの開始位置を識別するバイト(442)と、(vii)フラグにおけるユーザデータの非圧縮長さを特定する論理長さ(444)と、(viii)フラグにおけるユーザデータのタイプ(たとえばバッドページ(badpage)、データ、スナップショット、プール)を特定するタイプ(446)と、(ix)フラグが有効なユーザデータであるか、または(ソリッドステートメモリモジュールがガーベッジコレクションを行なう際に、当該フラグが消去され得ることを示す)トリム(trim)であるかを特定する種類(448)と、(ix)他のユーザデータを格納するよう使用され得るTOCエントリにおけるスペースに対応するリザーブ(450)といったフィールドの1つ以上を含み得る。
本発明の一実施形態において、<オブジェクトID,オフセットID>または<オブジェクトID,オフセットID,発生時間>は、クライアントによって提供されるユーザデータを識別する。さらに、<オブジェクトID,オフセットID>または<オブジェクトID,オフセットID,発生時間>は、特定のユーザデータを識別するようクライアントによって使用される一方、ストレージ機器は、ストレージ機器内におけるユーザデータを識別するよう物理アドレスを使用する。当業者であれば、クライアントは、オブジェクトIDおよびオフセットIDの代わりに論理アドレスを提供してもよいということを理解するであろう。
当業者であれば、本発明から逸脱することがなければ、TOCエントリは図4Fに示されるよりも多いまたは少ないフィールドを含んでもよいということを理解するであろう。さらに、本発明から逸脱することがなければ、TOCエントリにおけるフィールドは、異なる順で配されてもよく、および/または組み合わせられてもよい。さらに、図4Fに示されるTOCエントリにおけるフィールドがすべて同じサイズである一方、TOCエントリにおけるさまざまなフィールドのサイズは非均一であり得、任意の所与のフィールドのサイズは、TOCエントリの実現例に基づいて変動する。
図5は、本発明の1つ以上の実施形態に従ったデータ構造を示す。上で論じたように、制御モジュールにおけるメモリは、インメモリデータ構造を含む。本発明の一実施形態では、インメモリデータ構造は、nタプル(たとえば、<オブジェクトID,オフセットID>(500)、<オブジェクトID,オフセットID,発生時間>(図示せず))と、ソリッドステートメモリモジュールにおけるフラグの物理アドレス(502)との間のマッピングを含む。本発明の一実施形態では、マッピングは、nタプルのハッシュと物理アドレスとの間である。本発明の一実施形態では、フラグについての物理アドレスは、<ストレージモジュール,チャンネル,チップイネーブル,LUN,プレーン,ブロック,ページ,バイト>といったnタプルとして規定される。
本発明の一実施形態では、制御モジュールはまた、ブロック(504)ごとのTOCエントリ(506)の数をトラッキングする。より具体的には、フラグがボールテッドメモリに書き込まれるたびに、フラグについてのTOCエントリが作成される。制御モジュールは、新しく作成されたTOCエントリが関連付けられるブロックをトラッキングし、この情報を使用してTOCページを生成する。たとえば、制御モジュールは上記の情報を使用して、TOCページに書き込まれていない、所与のブロックに関連付けられるすべてのTOCエントリの累積サイズがブロックにおけるページサイズと等しいかどうか決定する。TOCページに書き込まれていない、所与のブロックに関連付けられるすべてのTOCエントリの累積サイズがブロックにおけるページサイズと等しい場合、制御モジュールは上記のエントリを使用してTOCページを生成し、ストレージモジュールへのTOCページの書き込みを開始する。
図6A〜図6Cは、本発明の1つ以上の実施形態に従ったフローチャートを示す。より具体的には、図6A〜図6Cは、本発明の1つ以上の実施形態に従った、ストレージ機器にユーザデータを格納するための方法を示す。フローチャートにおけるさまざまなステップが順次、提示および記載されるが、当業者であれば、ステップのうちのいくつかまたはすべてが異なる順番で実行されてもよいこと、ステップのうちのいくつかまたはすべてが組み合わせられてもよくまたは省略されてもよいこと、およびステップのうちのいくつかまたはすべてが並列に実行されてもよいことを理解するであろう。本発明の一実施形態では、図6Aに示されるステップは、図6Bに示されるステップおよび図6Cに示されるステップと並列に行なわれ得る。さらに、図6Bに示されるステップは、図6Cに示されるステップと並列に行なわれ得る。
図6Aを参照して、ステップ600において、クライアントは、制御モジュールにおけるプロセッサ(図2A中の208)の送信キュー(SQ)に書込コマンド(書込要求)を書き込む。本発明の一実施形態では、書込コマンドは、クライアントメモリにおけるユーザデータの論理アドレス(「ソースアドレス」とも称される)を特定する。本発明の一実施形態では、書込コマンドは、<オブジェクトID,オフセットID>を使用してユーザデータを特定し得る。本発明の一実施形態において、書込コマンドは、プロセッサのSQに到達する前に、少なくともクライアントスイッチおよびスイッチファブリックを通過する。
ステップ602では、クライアントはSQテールドアベルレジスタに新しいSQテールを書き込む。本発明の一実施形態において、SQテールドアベルレジスタに書き込むことによって、クライアントは、そのSQにおいて処理するべき新しいコマンドが存在するとプロセッサに通知する。
ステップ604では、プロセッサはSQから書込コマンドを取得する。ステップ606では、プロセッサは、(フラグの一部として)ユーザデータを書き込むべき物理アドレスを決定する。本発明の一実施形態では、物理アドレスはソリッドステートメモリモジュールにおける位置に対応する。本発明の一実施形態において、プロセッサは、ユーザデータのコピーを書き込むべき2つの物理アドレスを選択する。当該物理アドレスの各々は別個のソリッドステートメモリモジュールに存在する。
ステップ608では、プロセッサは、マルチキャストアドレスへの書込を発行するようにDMAエンジンをプログラムする。本発明の一実施形態において、マルチキャストアドレスはマルチキャストグループに関連付けられており、当該マルチキャストグループは、制御モジュールにおけるメモリ中の第1のメモリ位置、第1のボールトメモリにおける第2のメモリ位置、および第2のボールテッドメモリにおける第3のメモリ位置を特定する。本発明の一実施形態において、第1のボールテッドメモリは、プロセッサによって特定される物理アドレスを含むソリッドステートメモリモジュールと同じストレージモジュールに位置する。本発明の一実施形態では、第2のボールテッドメモリは、同様の態様で決定される。本発明の一実施形態において、ステップ606においてプロセッサによって識別される各物理アドレスについて選択される1つのボールテッドメモリ位置が存在する。
ステップ610では、DMAエンジンは、クライアントメモリにおけるソースアドレスからユーザデータを読み出し、制御モジュールによって指示されるようにマルチキャストアドレスにデータを書き込む。本発明の一実施形態では、スイッチファブリックにおけるスイッチは、マルチキャストアドレスに関連付けられる。アドレスの受信の際、スイッチは、3つのアドレス、すなわち上記のメモリ位置の各々に対するアドレスを取得するようマルチキャストアドレスに必要な変換を行なう。その後、スイッチは3つのメモリ位置にユーザデータのコピーを送信する。当業者であれば、マルチキャストを実現する特定のスイッチはスイッチファブリックの実現例に基づき変動し得るということを理解するであろう。この実施形態では、クライアントとストレージ機器との間には発行された書込は1つだけ存在する。
本発明の別の実施形態において、ステップ608では、プロセッサは、3つの書込要求、すなわち上記のメモリ位置の各々に対する書込要求を並列に発行するようにDMAエンジンをプログラムする。この実施形態において、ステップ610では、DMAエンジンはこれらの3つの書込要求を並列に発行する。この実施形態では、クライアントとストレージ機器との間には3つの書込の発行が存在する。
引き続き図6Aを参照して、ステップ612では、ボールテッドメモリに格納されるユーザデータのコピーごとにTOCエントリが作成される。さらに、各TOCエントリにおいて特定されるページおよびバイトは、ステップ606において識別される対応する物理アドレスのページおよびバイト部分に対応する。したがって、フラグは、対応するTOCエントリが作成される時に、ソリッドステートメモリモジュールにおける物理アドレスに書き込まれないが、(フラグページの一部としての)フラグは、その後のある時点で、物理アドレスに書き込まれるように意図される。上で論じたように、TOCエントリの各々はTOCページに格納され、その結果、当該TOCページはソリッドステートメモリモジュールに書き込まれる。しかしながら、TOCページの作成に先立って、TOCエントリが作成され、制御モジュールにおけるメモリと、ソリッドステートストレージモジュールのうちの1つ上のボールテッドメモリとに一時的に格納される。
引き続き図6Aを参照して、ステップ614では、ステップ612において作成されたTOCエントリは、ボールテッドメモリに格納される。より具体的には、各TOCエントリは、ストレージモジュールのボールテッドメモリに格納され、対応するフラグがその後のある時点で書き込まれる物理アドレスを含む。
ステップ616では、プロセッサは、ユーザデータの3つのコピーがストレージ機器に格納されることを反映するようインメモリデータ構造を更新する。プロセッサはまた、ブロックごとにTOCエントリをトラッキングするデータ構造を更新し得る(図5参照)。ステップ618では、プロセッサは、(プロセッサのSQを識別する)SQ識別子と(クライアントがプロセッサに発行した特定の書込コマンドを識別する)書込コマンド識別子とをクライアントの完了キュー(CQ)に書き込む。
ステップ620では、プロセッサは、クライアントプロセッサについて割込を生成する。本発明の一実施形態において、プロセッサは、ノントランスペアレントなブリッジによって提供されるドアベル割込を使用して、クライアントプロセッサに割込を発行する。ステップ622では、クライアントは、そのCQにおけるデータを処理する。この段階では、クライアントは、書込要求が処理されたと通知されている。ステップ624では、ひとたびクライアントが完了キューのヘッドにあるデータを処理すると、クライアントは新しいCQヘッドをCQヘッドドアベルに書き込む。これはプロセッサに、クライアントへの将来の通知において使用するCQの中の次の位置を示す。
図6Bを参照して、ステップ626では、制御モジュールにおけるプロセッサは、ボールテッドメモリからステップ608で識別された物理アドレスへのユーザデータのコピーの書き込みを開始する。本発明の一実施形態において、制御モジュールにおけるプロセッサは、ボールテッドメモリからユーザデータを読み出し、ソリッドステートメモリモジュールにおける物理アドレスにこのユーザデータのコピーを書き込むよう、ストレージモジュールコントローラにおけるDMAエンジンをプログラムする。上述したように、ユーザデータのコピーが書き込まれる物理アドレスは、以前にステップ606においてプロセッサによって決定された物理アドレスである。
ステップ626の後、ステップ628では、制御モジュールにおけるプロセッサは、ステップ626においてソリッドステートメモリモジュールに書き込まれたユーザデータに対応する、ボールテッドメモリにおけるユーザデータのすべてのコピーが除去されることを要求する。ステップ630では、それぞれのボールテッドメモリにおいて(ステップ626において書き込まれた)ユーザデータのコピーを含んでいたストレージモジュールの各々によって、除去確認が制御モジュールにおけるプロセッサに送信される。
図6Cを参照して、図6Cは、TOCエントリが作成されるごとに行なわれる方法を示す。ステップ632では、1つより多い空ページがブロックに残っているかどうかに関して決定がなされる。換言すると、ユーザデータがブロックにおける最後のページ以外のすべての他のページに書き込まれたかどうかに関して決定がなされる。1つより多い空ページがブロックに残っている場合、プロセスはステップ636に進み、そうでなければ、プロセスはステップ634に進む。上に論じられたように、ブロックにおいて、ユーザデータを書き込むべき空ページが1つだけ存在する場合、当該ブロックにおいてこの最後のページにTOCページが書き込まれなければならない。
ステップ634では、ブロックに関連付けられるTOCエントリ(当該ブロックにおいてTOCページに書き込まれていない)の累積サイズがページサイズ以上であるかどうかに関して決定がなされる。ブロックに関連付けられるTOCエントリ(当該ブロックにおいてTOCページに書き込まれていない)の累積サイズがページサイズ以上である場合、プロセスはステップ636に進み、そうでなければプロセスは終了する。
ステップ636では、ブロックについての(ブロックにおいてTOCページに書き込まれていない)TOCエントリは、TOCページを作成するよう組み合わせられる。本発明の一実施形態において、ユーザデータを書き込むべきブロックに空ページが1つだけ存在する場合、このシナリオにおいて作成されるTOCページは、(上で論じたように)パディングを含んでもよい。ステップ638では、ブロックが別のTOCページを含むかどうかに関して決定がなされる。ブロックが別のTOCページを含む場合、プロセスはステップ640に進み、そうでなければ、プロセスはステップ642に進む。ステップ640では、ブロックにおける最も最近格納されたTOCページへの参照が、ステップ636において作成されるTOCページに含まれる(たとえば、TOCページ(410)は、図4EにおいてTOCページ(412)を参照する)。
ステップ642では、プロセッサは、ソリッドステートメモリモジュールへのTOCページの書込みを開始する。より具体的には、プロセッサによってプログラムされるDMAエンジンは、TOCページのコピーを、TOCページにおけるTOCエントリに対応するフラグを含む、ソリッドステートメモリモジュールにおけるブロックに書き込む。
ステップ644では、プロセッサは、ステップ642においてソリッドステートメモリモジュールに書き込まれたTOCページに含まれていたTOCエントリを含むすべてのストレージモジュールに、それぞれのボールテッドメモリからこのようなTOCエントリを除去するよう要求する。ステップ646では、プロセッサは、上記のTOCエントリが除去されたという確認をストレージモジュールから受ける。
図7A〜図7Eは、本発明の1つ以上の実施形態に従った、ストレージ機器にユーザデータを格納する例を示す。この例は、本発明の範囲を限定するようには意図されない。
図7Aを参照して、クライアント(700)が、ストレージ機器に(黒い丸によって示される)ユーザデータを書き込む要求を発行するシナリオを考える。要求に応答して、制御モジュール(704)におけるプロセッサ(714)は、ユーザデータの第1のコピーがストレージモジュールA(718)中のソリッドステートメモリモジュールA(726)における第1の物理的位置に書き込まれるべきであり、ユーザデータの第2のコピーがストレージモジュールB(720)中のソリッドステートメモリモジュールB(728)における第2の物理的位置に書き込まれるべきであるということを決定する。
書込要求を受け取る前のプロセッサ(714)は、3つのメンバーを有するマルチキャストグループを作成する。第1のメンバーはボールテッドメモリA(722)において宛先アドレスを有しており、第2のメンバーはボールテッドメモリB(724)において宛先アドレスを有しており、第3のメンバーはメモリ(712)において宛先アドレスを有している。プロセッサ(714)はその後、マルチキャストグループを実現するよう、スイッチファブリック(716)におけるスイッチ(図示せず)をプログラムする。
DMAエンジンは、マルチキャストグループに関連付けられるマルチキャストアドレスに書込を発行するよう進む。この書込は、スイッチファブリックに送信され、最終的に、マルチキャストグループを実施するスイッチ(図示せず)に到達する。その後、スイッチは、3つの書込(マルチキャストグループによって特定された宛先に対する各々)を作成し、ターゲットメモリ位置へ書込を発行する。本発明の一実施形態において、3つの書込が並列に発生する。
さまざまな宛先アドレスに書き込まれるべきフラグはスイッチファブリック(716)を通過する。ひとたび書き込みが完了すると、ストレージ機器において当該ユーザデータの3つのコピーが存在する。ひとたび書き込みが完了すると、メモリ(712)におけるインメモリデータ構造(図示せず)は、ユーザデータがストレージ機器内の3つの位置に格納されていることを反映するよう更新される。さらに、クライアント(700)には、書き込みが完了したことが通知される。
図7Bを参照して、ひとたびフラグがボールテッドメモリに書き込まれると、プロセッサは、ボールテッドメモリに格納されるフラグの各々について、メモリ(712)においてTOCエントリ(TE1,TE2)を生成する。TE1は、ボールテッドメモリA(722)に格納されるフラグからのTOCエントリであり、TE2は、ボールテッドメモリB(724)に格納されるフラグについてのTOCエントリである。(図示しないDMAエンジンを介する)プロセッサはその後、ボールテッドメモリA(722)にTE1のコピーを書き込み、ボールテッドメモリB(724)にTE2のコピーを書き込む。上で論じたように、この段階では、TOCエントリ(TE1およびTE2)は、それらがTOCページに加えられて適切なソリッドステートメモリモジュールに書き込まれるまで、上記のボールテッドメモリに一時的に格納される。
さらにストレージ機器の動作から独立して、クライアント(700)は、(既にストレージ機器に書き込まれた)ユーザデータをクライアントメモリ(708)から除去し得る。
図7Cを参照して、その後のある時点で、プロセッサ(714)は、現在ボールテッドメモリA(722)に存在するユーザデータのコピーをソリッドステートメモリモジュールA(726)における物理アドレスに書き込むよう、ストレージモジュールA(718)に要求を発行する。要求に応答して、ストレージモジュールコントローラ(図示せず)は、ボールテッドメモリA(722)におけるユーザデータのコピーをソリッドステートメモリモジュールA(726)に書き込む。ひとたび書き込みが完了すると、プロセッサ(714)は通知を受ける。ストレージモジュールA(718)からの通知の受信があると、プロセッサ(714)はインメモリデータ構造を更新し得る。
図7Dを参照して、その後のある時点で、プロセッサ(714)は、同じブロック(すなわちTE1に対応するフラグが格納されるブロック)におけるTE1およびフラグについての他のTOCエントリ(図示せず)の合計の累積サイズがページサイズと等しいということを決定する。この決定に基づいて、プロセッサはTOCページを作成し、その後、(DMAエンジン(図示せず)を介して)TE1が対応するフラグを含むソリッドステートメモリモジュールにおいてブロック(図示せず)にTOCページを書き込む。
図7Eを参照して、その後のある時点で、ひとたびフラグがソリッドステートメモリモジュールAに書き込まれると、プロセッサ(714)は、それぞれのボールテッドメモリからユーザデータのコピーを除去するよう、ボールテッドメモリにおいてユーザデータのコピーを含むすべてのストレージモジュールに要求を発行する。さらに、ひとたびTOCページがソリッドステートメモリモジュールAに書き込まれると、プロセッサ(714)は、それぞれのボールテッドメモリからこのようなTOCエントリを除去するよう、上記のTOCページに書き込まれたいずれかのTOCエントリのコピーを含むすべてのストレージモジュールに要求を発行する。これらの要求の完了の際、ストレージモジュールは各々、制御モジュールに通知する。図7Eは、すべてのストレージモジュールが上記の要求を完了した後のシステムの状態を示す。プロセッサ(714)は、ボールテッドメモリにおけるユーザデータのすべてのコピーが除去されたという、ストレージモジュールからの通知を受信すると、インメモリデータ構造を更新し得る。
本発明の1つ以上の実施形態において、TOCエントリがユーザデータの各コピーについて作成され、TOCエントリの1つが破損、失われるか、そうでなければ利用不可能である場合にユーザデータの各コピーがアクセスされ得るようにボールテッドメモリに格納される。さらに、停電の場合には、ボールテッドメモリ内のすべてのTOCエントリは、対応するソリッドステートメモリモジュールに書き込まれる。さらに、上記のTOCエントリに対応するフラグは、クライアントについての書込要求が処理された時に、プロセッサが元々決定した物理アドレスに書き込まれる。
図8は、本発明の1つ以上の実施形態に従ったフローチャートを示す。より具体的には、図8は、本発明の1つ以上の実施形態に従った、インメモリデータ構造を生成するための方法を示す。フローチャートにおけるさまざまなステップが順次、提示および記載されるが、当業者であれば、ステップのうちのいくつかまたはすべてが異なる順番で実行されてもよいこと、ステップのうちのいくつかまたはすべてが組み合わせられてもよくまたは省略されてもよいこと、およびステップのうちのいくつかまたはすべてが並列に実行されてもよいことを理解するであろう。
ステップ800では、あるブロックが選択される。ステップ802では、当該ブロックにおける最後のページが取得される。たとえば、プロセッサは最後のページの内容を読み出す。上で論じたように、ストレージ機器内のソリッドステートメモリモジュールにおける各ブロックの最後のページは、TOCページである。ステップ804では、TOCページからTOCエントリが抽出される。
ステップ806では、ステップ804において取得されるTOCエントリの各々は、インメモリデータ構造にポピュレートするよう処理される。より具体的には、各TOCエントリを処理することは、以下の1つ以上を含み得る。すなわち、(i)TOCエントリからページIDおよびバイト情報を抽出することと、(ii)物理アドレスを得るよう、(i)における情報を<ストレージモジュール,チャンネル,チップイネーブル,LUN,プレーン,ブロック>と組み合わせることと、(iii)TOCエントリからオブジェクトIDおよびオフセットID(および随意に発生時間)を抽出することと、(iv)ハッシュ値を生成するよう、ハッシュ関数を<オブジェクトID,オフセットID>(または随意に、<オブジェクトID,オフセットID,発生時間>)を適用することと、(v)ハッシュ値と物理アドレスとのマッピングをインメモリデータ構造にポピュレートすることとのうち1つ以上を含み得る。
本発明の一実施形態において、プロセッサは、<ストレージモジュール,チャンネル,チップイネーブル,LUN,プレーン,ブロック>に関して情報をブロックの最後のページを取得するために必要としたので、既にこの情報を含んでいる。本発明の一実施形態において、プロセッサは、フラグがバッドページに存在するかどうか決定するよう、TOCエントリにおいて(i)タイプフィールドを使用し得る。フラグがバッドページに格納されていれば、プロセッサは、TOCエントリについて、インメモリデータ構造におけるマッピングを生成し得ない。
ステップ808では、ひとたびTOCページにおけるすべてのTOCエントリが処理されると、TOCページが当該ブロック(すなわちステップ800において選択されたブロック)における別のTOCページへの参照を含むかどうかに関して決定がなされる。TOCページが当該ブロックにおける別のTOCページへの参照を含む場合、プロセスはステップ810に進み、そうでなければプロセスは終了する。ステップ810では、参照されたTOCページが取得される。ステップ812では、TOCエントリがTOCページから抽出される。その後、プロセスはステップ806に進む。
本発明の一実施形態において、図8における方法は、システムの電源が入れられると、ストレージ機器内にすべてのブロック(またはブロックのサブセット)について並列に行なわれ得る。このプロセスの後、結果得られるインメモリデータ構造は、新しいユーザデータがストレージ機器に書き込まれると、プロセッサによって更新され得る。
当業者であれば、本発明は各ブロックにおける最後のページがTOCページとして確保される場合について記載されているが、本発明から逸脱することがなければ、ブロックにおける別のページを、確保されたTOCページとして設定することにより本発明の実施形態が実現されてもよいということを理解するであろう。
本発明の一実施形態では、ソリッドステートメモリモジュールに格納される任意のデータに対して行なわれる任意の動作(たとえば読出動作、書込操作および/または消去動作)に先立って、インメモリデータ構造が生成される。
本発明の1つ以上の実施形態は、ストレージ機器に格納されるすべてのユーザデータが、そのメタデータとともに同じ位置に配置されるシステムおよび方法を提供する。これにより、ストレージ機器に格納されるすべてのユーザデータは自己記述型である。本発明のさまざまな実施形態に従ってユーザデータおよび対応するメタデータを配することによって、ストレージ機器は、所与のソリッドステートメモリモジュール(またはそのサブセット)の障害からさらに保護される。換言すると、所与のソリッドステートメモリモジュール(またはそのサブセット)が障害を起こしても、当該システムにおける他のソリッドステートメモリモジュールにおけるユーザデータは、他のソリッドステートメモリモジュールにおけるユーザデータにアクセスするのに必要なメタデータそれ自体が他のソリッドステートメモリモジュールに位置するので、それでもアクセス可能である。
さらに、本発明の実施形態は、制御モジュールが単一のルックアップステップにおいてユーザデータにアクセスすることを可能にするインメモリデータ構造の作成を可能にする。換言すると、制御モジュールは、ストレージ機器におけるユーザデータの物理アドレスを直接的に確認するためにインメモリデータ構造を使用し得る。この情報を使用して、制御モジュールはユーザデータに直接的にアクセスすることができ、ユーザデータを取得するために如何なる中間のメタデータヒエラルキを横断する必要はない。
本発明の1つ以上の実施形態は、当該システムにおける1つ以上のプロセッサによって実行される命令を使用して実施されてもよい。さらに、このような命令は、1つ以上の一時的でないコンピュータ読取可能媒体上に格納されるコンピュータ読取可能命令に対応してもよい。
本発明を限られた数の実施形態に関して記載したが、この開示の利益を有する当業者であれば、本願明細書において開示される本発明の範囲から逸脱しない他の実施形態が作り出され得るということを理解するであろう。したがって、本発明の範囲は、添付の請求の範囲によってのみ限定されるべきである。

Claims (17)

  1. データを格納するための方法であって、
    第1の論理アドレスを使用して規定される第1のデータを持続性ストレージに書き込む要求を受け取るステップを含み前記持続性ストレージは複数のブロックを含み、各前記ブロックは複数のページを含み、前記方法はさらに、
    前記持続性ストレージにおいて、第1のブロックを識別する第1のブロックIDおよび前記第1のブロックにおける第1のページを識別する第1のページIDを含む第1の物理アドレスを決定するステップと、
    前記第1のデータのコピーを含む第1のフラグを前記第1の物理アドレスに書き込むステップと、
    前記第1の論理アドレスおよび前記第1のページIDを含み、前記第1のブロックIDを含まず、前記第1のページIDによって識別される前記第1のページに格納されない第1のテーブル・オブ・コンテンツエントリ(TE)を生成するステップと、
    第2の論理アドレスを使用して規定される第2のデータを前記持続性ストレージに書き込む要求を受け取るステップと、
    前記持続性ストレージにおいて、前記第1のブロックIDおよび前記第1のブロックにおける第2のページを識別する第2のページIDを含む第2の物理アドレスを決定するステップと、
    前記第2のデータのコピーを含む第2のフラグを前記第2の物理アドレスに書き込むステップと、
    前記第2の論理アドレスおよび前記第2のページIDを含み、前記第1のブロックIDを含まず、前記第2のページIDによって識別される前記第2のページに格納されない第2のTEを生成するステップと、
    前記第1のTEおよび前記第2のTEを含み、前記第1のデータおよび前記第2のデータを含まない第1のテーブル・オブ・コンテンツ(TOC)ページを生成するステップと、
    前記持続性ストレージにおいて、前記第1のブロックIDおよび前記第1のブロックにおける第3のページを識別する第3のページIDを含む第3の物理アドレスに前記第1のTOCページを書き込むステップとを含む、方法。
  2. 第3の論理アドレスを使用して規定される第3のデータを前記持続性ストレージに書き込む要求を受け取るステップと、
    前記持続性ストレージにおいて、前記第1のブロックIDおよび前記第1のブロックにおける第4のページを識別する第4のページIDを含む第4の物理アドレスを決定するステップと、
    前記第3のデータのコピーを含む第3のフラグを前記第4の物理アドレスに書き込むステップと、
    前記第3の論理アドレスおよび前記第4のページIDを含み、前記第1のブロックIDを含まず、前記第3のページIDによって識別される前記第3のページに格納されない第3のTEを生成するステップと、
    前記第3のTEを含む第2のTOCページを生成するステップと、
    前記持続性ストレージにおいて、前記第1のブロックIDおよび前記第1のブロックにおける第5のページを識別する第5のページIDを含む第5の物理アドレスに前記第2のTOCページを書き込むステップとをさらに含み、前記第2のTOCページは前記第3のデータを含まない、請求項1に記載の方法。
  3. 前記第5のページIDに対応する前記第5のページは、前記第1のブロックにおける最後のページである、請求項2に記載の方法。
  4. 前記第2のTOCページは、前記第1のTOCページへの参照を含む、請求項3に記載の方法。
  5. 前記参照は、前記第2のTOCページの終わりに配置される、請求項4に記載の方法。
  6. 前記持続性ストレージにおいて前記第1の物理アドレスに前記第1のフラグを書き込む前に、前記第1のフラグの第1のコピーが第1のメモリに格納されるとともに前記第1のフラグの第2のコピーが第2のメモリに格納され、前記第1のフラグの前記第2のコピーについて第3のTEが生成され、ひとたび前記第1のTOCページが前記第3の物理アドレスに書き込まれると、前記第3のTEが消去される、請求項1に記載の方法。
  7. 前記第1のメモリは第1のストレージモジュールに配置され、前記第2のメモリは第2のストレージモジュールに配置され、前記持続性ストレージは、前記第1のストレージモジュールに配置される、請求項6に記載の方法。
  8. 前記第1のTEは、発生時間フィールド、タイプフィールド、論理長さフィールドおよび種類フィールドからなる群から選択される少なくとも1つをさらに含む、請求項1に記載の方法。
  9. 前記第1の論理アドレスはオブジェクトIDおよびオフセットIDを含む、請求項1に記載の方法。
  10. インメモリデータ構造にポピュレートするための方法であって、
    (a)持続性ストレージにおいて第1のブロックを選択するステップと、
    (b)前記第1のブロックにおいて最後のページを抽出するステップとを含み、前記第1のブロックは第1のブロックIDに関連付けられており、前記方法はさらに、
    (c)前記第1のブロックにおいて、第1のデータについての第1の論理アドレスに対応するオブジェクトIDおよびオフセットIDと記第1のデータが配置される前記第1のブロックにおけるページを識別する第1のページIDを含む第1のテーブル・オブ・コンテンツエントリ(TE)を前記最後のページから抽出するステップを含み、前記ページは前記最後のページではなく、前記第1の論理アドレスは前記第1のページIDを含んでおらず、前記第1のTEは前記第1のブロックIDを含んでおらず、前記方法はさらに、
    (d)前記第1のブロックID前記第1のTEから抽出される前記第1のページIDを使用して、前記第1のデータについて、前記第1のページIDを含む第1の物理アドレスを生成するステップと、
    (e)第1のハッシュ値を取得するよう前記第1の論理アドレスに対応するオブジェクトIDおよびオフセットIDを含むnタプルをハッシングするステップと、
    (f)前記第1のハッシュ値と前記第1の物理アドレスとの間の第1のマッピングを前記インメモリデータ構造にポピュレートするステップとを含む、方法。
  11. (g)前記持続性ストレージにおいて第2のブロックを選択するステップと、
    (h)前記第2のブロックにおいて最後のページを抽出するステップとをさらに含み、前記第2のブロックは第2のブロックIDに関連付けられており、前記方法はさらに、
    (i)前記第2のブロックにおいて、第2のデータについての第2の論理アドレスに対応するオブジェクトIDおよびオフセットIDと、前記第2のデータが配置される前記第2のブロックにおけるページに対応する第2のページIDとを含む第2のTEを前記最後のページから抽出するステップを含み前記第2のTEは前記第2のブロックIDを含んでおらず、前記方法はさらに、
    (j)前記第2のブロックIDと前記第2のTEから抽出される前記第2のページIDとを使用して、前記第2のデータについて第2の物理アドレスを生成するステップと、
    (k)第2のハッシュ値を取得するよう前記第2の論理アドレスに対応するオブジェクトIDおよびオフセットIDを含むnタプルをハッシングするステップと、
    (l)前記第2のハッシュ値と前記第2の物理アドレスとの間の第2のマッピングを前記インメモリデータ構造にポピュレートするステップとを含む、請求項10に記載の方法。
  12. ステップ(a)〜(c)およびステップ(g)〜(i)は並列に行われる、請求項11に記載の方法。
  13. 前記第1のブロックは第1のストレージモジュールに配置され、前記第2のブロックは第2のストレージモジュールに配置され、前記インメモリデータ構造は、前記第1のストレージモジュールおよび前記第2のストレージモジュールの外部のメモリに配置される、請求項11に記載の方法。
  14. 前記第1のブロックにおける最後のページが前記第1のブロックにおける第2のページへの参照を含むという決定をするステップをさらに含み、前記第2のページは第2のTEを含んでおり、前記第2のTEは、第2のデータについての第2の論理アドレスに対応するオブジェクトIDおよびオフセットIDと、前記第2のデータが配置される前記第1のブロックにおけるページに対応する第2のページIDとを含んでおり、前記第2のTEは前記第1のブロックIDを含んでおらず、前記方法はさらに、
    前記第1のブロックIDおよび前記第2のページIDを使用して、前記第2のデータについて第2の物理アドレスを生成するステップと、
    第2のハッシュ値を取得するよう前記第2の論理アドレスに対応するオブジェクトIDおよびオフセットIDを含むnタプルをハッシングするステップと、
    前記第2のハッシュ値と前記第2の物理アドレスとの間の第2のマッピングを前記インメモリデータ構造にポピュレートするステップとを含む、請求項10に記載の方法。
  15. 前記持続性ストレージはソリッドステートメモリである、請求項10に記載の方法。
  16. 読出動作、書込動作および消去動作からなる群における任意の動作が前記持続性ストレージに格納される任意のデータに対して行われる前に、前記インメモリデータ構造には前記持続性ストレージにおけるすべてのTEがポピュレートされる、請求項10に記載の方法。
  17. 前記第1の論理アドレスは、前記オブジェクトIDおよび前記オフセットIDを含むnタプルをハッシングすることによって取得される前記第1のハッシュ値である、請求項10に記載の方法。
JP2015501909A 2012-03-23 2013-03-21 テーブル・オブ・コンテンツエントリを使用してデータを格納するためのシステムおよび方法 Active JP6211579B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/428,771 2012-03-23
US13/428,771 US8370567B1 (en) 2012-03-23 2012-03-23 Storage system with self describing data
PCT/US2013/033276 WO2013142673A1 (en) 2012-03-23 2013-03-21 System and methods for storing data using table of contents entries

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2016179528A Division JP6385995B2 (ja) 2012-03-23 2016-09-14 テーブル・オブ・コンテンツエントリを使用してデータを格納するためのシステムおよび方法

Publications (2)

Publication Number Publication Date
JP2015515678A JP2015515678A (ja) 2015-05-28
JP6211579B2 true JP6211579B2 (ja) 2017-10-11

Family

ID=47604714

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2015501909A Active JP6211579B2 (ja) 2012-03-23 2013-03-21 テーブル・オブ・コンテンツエントリを使用してデータを格納するためのシステムおよび方法
JP2016179528A Active JP6385995B2 (ja) 2012-03-23 2016-09-14 テーブル・オブ・コンテンツエントリを使用してデータを格納するためのシステムおよび方法

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2016179528A Active JP6385995B2 (ja) 2012-03-23 2016-09-14 テーブル・オブ・コンテンツエントリを使用してデータを格納するためのシステムおよび方法

Country Status (5)

Country Link
US (1) US8370567B1 (ja)
EP (1) EP2828757B1 (ja)
JP (2) JP6211579B2 (ja)
CN (1) CN104246724B (ja)
WO (1) WO2013142673A1 (ja)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8601206B1 (en) * 2013-03-14 2013-12-03 DSSD, Inc. Method and system for object-based transactions in a storage system
US9348537B2 (en) * 2013-09-10 2016-05-24 Qualcomm Incorporated Ascertaining command completion in flash memories
AU2014348774A1 (en) * 2013-11-12 2016-06-30 Western Digital Technologies, Inc. Apparatus and method for routing information in a non-volatile memory-based storage device
US9430156B1 (en) * 2014-06-12 2016-08-30 Emc Corporation Method to increase random I/O performance with low memory overheads
US10180889B2 (en) * 2014-06-23 2019-01-15 Liqid Inc. Network failover handling in modular switched fabric based data storage systems
US9378149B1 (en) * 2014-08-29 2016-06-28 Emc Corporation Method and system for tracking modification times of data in a storage system
US9600409B2 (en) * 2014-08-29 2017-03-21 EMC IP Holding Company LLC Method and system for garbage collection in a storage system based on longevity of stored data
KR20160075165A (ko) * 2014-12-19 2016-06-29 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
US9911487B2 (en) 2015-05-19 2018-03-06 EMC IP Holding Company LLC Method and system for storing and recovering data from flash memory
US10019168B2 (en) * 2015-05-19 2018-07-10 EMC IP Holding Company LLC Method and system for multicasting data to persistent memory
US10409514B2 (en) * 2015-11-30 2019-09-10 International Business Machines Corporation IP multicast message transmission for event notifications
US9858003B2 (en) 2016-05-02 2018-01-02 Toshiba Memory Corporation Storage system that reliably stores lower page data
US9996471B2 (en) * 2016-06-28 2018-06-12 Arm Limited Cache with compressed data and tag
KR102653389B1 (ko) * 2016-06-30 2024-04-03 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
US10277677B2 (en) * 2016-09-12 2019-04-30 Intel Corporation Mechanism for disaggregated storage class memory over fabric
KR102711037B1 (ko) * 2016-09-19 2024-09-30 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법

Family Cites Families (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04323748A (ja) * 1991-04-24 1992-11-12 Fujitsu Ltd アドレス変換方法および装置
US5600821A (en) * 1993-07-28 1997-02-04 National Semiconductor Corporation Distributed directory for information stored on audio quality memory devices
JPH1185589A (ja) * 1997-09-12 1999-03-30 Toshiba Corp 情報記憶装置および同装置に適用される管理データ再構築方法
US7610438B2 (en) * 2000-01-06 2009-10-27 Super Talent Electronics, Inc. Flash-memory card for caching a hard disk drive with data-area toggling of pointers stored in a RAM lookup table
US7543100B2 (en) 2001-06-18 2009-06-02 3Par, Inc. Node controller for a data storage system
US7685126B2 (en) * 2001-08-03 2010-03-23 Isilon Systems, Inc. System and methods for providing a distributed file system utilizing metadata to track information about data stored throughout the system
US6850969B2 (en) * 2002-03-27 2005-02-01 International Business Machined Corporation Lock-free file system
US6996682B1 (en) * 2002-12-27 2006-02-07 Storage Technology Corporation System and method for cascading data updates through a virtual copy hierarchy
JP2005085011A (ja) * 2003-09-09 2005-03-31 Renesas Technology Corp 不揮発性メモリ制御装置
EP1805625A1 (en) * 2004-09-03 2007-07-11 Nokia Corporation Storing and reading of data from a memory medium
US7366825B2 (en) * 2005-04-26 2008-04-29 Microsoft Corporation NAND flash memory management
DE602006019263D1 (de) * 2005-08-03 2011-02-10 Sandisk Corp Nichtflüchtiger speicher mit blockverwaltung
US7634627B1 (en) * 2005-08-19 2009-12-15 Symantec Operating Corporation System and method for performing extent level backups that support single file restores
US20070073989A1 (en) * 2005-08-31 2007-03-29 Interdigital Technology Corporation Method and apparatus for efficient data storage and management
JP2006114064A (ja) * 2005-12-28 2006-04-27 Hitachi Ltd 記憶サブシステム
US7702870B2 (en) * 2006-01-19 2010-04-20 Network Appliance Inc. Method and apparatus for defragmentation and for detection of relocated blocks
US10303783B2 (en) * 2006-02-16 2019-05-28 Callplex, Inc. Distributed virtual storage of portable media files
US7650458B2 (en) * 2006-06-23 2010-01-19 Microsoft Corporation Flash memory driver
US7694091B2 (en) * 2006-10-23 2010-04-06 Hewlett-Packard Development Company, L.P. Non-volatile storage for backing up volatile storage
KR100816761B1 (ko) * 2006-12-04 2008-03-25 삼성전자주식회사 낸드 플래시 메모리 및 에스램/노어 플래시 메모리를포함하는 메모리 카드 및 그것의 데이터 저장 방법
US8074011B2 (en) * 2006-12-06 2011-12-06 Fusion-Io, Inc. Apparatus, system, and method for storage space recovery after reaching a read count limit
JP4897524B2 (ja) * 2007-03-15 2012-03-14 株式会社日立製作所 ストレージシステム及びストレージシステムのライト性能低下防止方法
US7913032B1 (en) * 2007-04-25 2011-03-22 Apple Inc. Initiating memory wear leveling
US7870327B1 (en) * 2007-04-25 2011-01-11 Apple Inc. Controlling memory operations using a driver and flash memory type tables
US7739312B2 (en) * 2007-04-27 2010-06-15 Network Appliance, Inc. Data containerization for reducing unused space in a file system
US20090019245A1 (en) * 2007-07-10 2009-01-15 Prostor Systems, Inc. Methods for implementation of data formats on a removable disk drive storage system
US7836018B2 (en) * 2007-10-24 2010-11-16 Emc Corporation Simultaneously accessing file objects through web services and file services
US8195912B2 (en) * 2007-12-06 2012-06-05 Fusion-io, Inc Apparatus, system, and method for efficient mapping of virtual and physical addresses
US7934052B2 (en) * 2007-12-27 2011-04-26 Pliant Technology, Inc. System and method for performing host initiated mass storage commands using a hierarchy of data structures
US8397014B2 (en) * 2008-02-04 2013-03-12 Apple Inc. Memory mapping restore and garbage collection operations
JP4498426B2 (ja) * 2008-03-01 2010-07-07 株式会社東芝 メモリシステム
US7917803B2 (en) * 2008-06-17 2011-03-29 Seagate Technology Llc Data conflict resolution for solid-state memory devices
US8321652B2 (en) * 2008-08-01 2012-11-27 Infineon Technologies Ag Process and method for logical-to-physical address mapping using a volatile memory device in solid state disks
US8086799B2 (en) * 2008-08-12 2011-12-27 Netapp, Inc. Scalable deduplication of stored data
US8732388B2 (en) * 2008-09-16 2014-05-20 Micron Technology, Inc. Embedded mapping information for memory devices
US8219741B2 (en) * 2008-10-24 2012-07-10 Microsoft Corporation Hardware and operating system support for persistent memory on a memory bus
US7987162B2 (en) * 2009-03-06 2011-07-26 Bluearc Uk Limited Data compression in a file storage system
US8635402B2 (en) * 2009-03-31 2014-01-21 Nec Corporation Storage system and storage access method and program
US8321645B2 (en) * 2009-04-29 2012-11-27 Netapp, Inc. Mechanisms for moving data in a hybrid aggregate
US8468293B2 (en) * 2009-07-24 2013-06-18 Apple Inc. Restore index page
JP5066209B2 (ja) * 2010-03-18 2012-11-07 株式会社東芝 コントローラ、データ記憶装置、及びプログラム
US8812816B2 (en) * 2010-03-23 2014-08-19 Apple Inc. Garbage collection schemes for index block

Also Published As

Publication number Publication date
EP2828757A1 (en) 2015-01-28
CN104246724A (zh) 2014-12-24
JP2017016691A (ja) 2017-01-19
CN104246724B (zh) 2017-12-01
US8370567B1 (en) 2013-02-05
EP2828757B1 (en) 2018-05-09
JP2015515678A (ja) 2015-05-28
JP6385995B2 (ja) 2018-09-05
WO2013142673A1 (en) 2013-09-26

Similar Documents

Publication Publication Date Title
JP6385995B2 (ja) テーブル・オブ・コンテンツエントリを使用してデータを格納するためのシステムおよび方法
US10229734B1 (en) Method and system for storing and recovering data from flash memory
JP6005835B2 (ja) マルチキャストdmaおよび統合されたアドレス空間を有するストレージシステム
US8301832B1 (en) Storage system with guaranteed read latency
US10445018B2 (en) Switch and memory device
US9921756B2 (en) Method and system for synchronizing an index of data blocks stored in a storage system using a shared storage module
CN104765575B (zh) 信息存储处理方法
CN104508644B (zh) 智能存储器缓冲器
CN113253919A (zh) 多功能存储装置和处理消息的方法
US8341342B1 (en) Storage system with incremental multi-dimensional RAID
US8392428B1 (en) Method and system for hash fragment representation
US10289550B1 (en) Method and system for dynamic write-back cache sizing in solid state memory storage
CN106201328A (zh) 一种管理存储节点的磁盘空间的方法、装置和服务器
EP4303711A1 (en) Systems, methods, and apparatus for data placement in a storage device
EP4303734A1 (en) Systems, methods, and devices for using a reclaim unit based on a reference update in a storage device

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150928

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151006

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20160517

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170710

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170913

R150 Certificate of patent or registration of utility model

Ref document number: 6211579

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

Free format text: JAPANESE INTERMEDIATE CODE: R313113

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250