JP2015144022A - ノンユニフォームアクセスメモリにおけるスケーラブルなインデックス付け - Google Patents

ノンユニフォームアクセスメモリにおけるスケーラブルなインデックス付け Download PDF

Info

Publication number
JP2015144022A
JP2015144022A JP2015075686A JP2015075686A JP2015144022A JP 2015144022 A JP2015144022 A JP 2015144022A JP 2015075686 A JP2015075686 A JP 2015075686A JP 2015075686 A JP2015075686 A JP 2015075686A JP 2015144022 A JP2015144022 A JP 2015144022A
Authority
JP
Japan
Prior art keywords
bucket
memory
index
physical
flash
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.)
Granted
Application number
JP2015075686A
Other languages
English (en)
Other versions
JP6126158B2 (ja
Inventor
ビーバーソン,アーサー・ジェイ
J Beaverson Arthur
ボウデン,ポール
Bowden Paul
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.)
SimpliVity Corp
Original Assignee
SimpliVity Corp
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 SimpliVity Corp filed Critical SimpliVity Corp
Publication of JP2015144022A publication Critical patent/JP2015144022A/ja
Application granted granted Critical
Publication of JP6126158B2 publication Critical patent/JP6126158B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1045Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
    • G06F12/1054Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache the data cache being concurrently physically addressed
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • 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/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0864Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using pseudo-associative means, e.g. set-associative or hashing
    • 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/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1408Protection against unauthorised use of memory or access to memory by using cryptography
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/13File access structures, e.g. distributed indices
    • G06F16/137Hash-based
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/211Schema design and management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9014Indexing; Data structures therefor; Storage structures hash tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9017Indexing; Data structures therefor; Storage structures using directory or table look-up
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/254Distributed memory
    • G06F2212/2542Non-uniform memory access [NUMA] architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/402Encrypted data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/50Control mechanisms for virtual memory, cache or TLB
    • G06F2212/502Control mechanisms for virtual memory, cache or TLB using adaptive policy
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6032Way prediction in set-associative cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7211Wear leveling

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Storage Device Security (AREA)
  • Memory System (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

【課題】多数のレコードにスケールし、高トランザクションレートを提供するインデックスを構築するための方法及び装置を提供する。【解決手段】インデックス付けアルゴリズムによって必要とされる論理バケットを、メモリデバイス上の物理バケットにマップする、あるデータ構造である変換テーブル17が作成される。バケットを集め、大きい順次書き出しとして、メモリデバイスへ順次書き出すために、もう1つのデータ構造である連想キャッシュが使用される。インデックス付けアルゴリズムによって必要とされる(レコードの)バケットでキャッシュ23をポピュレートする。フリー消去ブロックの生成を容易にするために、追加のバケットが、デマンド読出し中に、或いはスキャベンジング処理によって、メモリデバイス(フラッシュメモリ)26からキャッシュ23へ読み出される。【選択図】図1

Description

[001]本発明は、多数のレコードにスケールし、高トランザクションレートを提供する
インデックスの構築のための方法及び装置に関する。
[002]幾つかの現代のファイルシステムは、ファイルデータ及び他の内部ファイルシス
テム構造(「メタデータ」)を格納するために、オブジェクトを使用する。ファイルは、多数の小さいオブジェクト、恐らくは4KB(2^12バイト)ほどの大きさに分割される。64TB(2^46バイト)に及ぶファイルシステムでは、例えば、これは、2^(46−12)=2^34、即ち、およそ160億個を超えるオブジェクトを追跡し続ける結果となる。
[003]これに関連して、オブジェクトは、バイナリデータのシーケンスであり、しばし
ばGUID(グローバル一意ID)であるか、或いはコンテンツの暗号ハッシュである、オブジェクト名を有するが、各一意のオブジェクトが一意の名前を有する限り、他の命名規則は可能である。オブジェクト名は通常、人とは対照的に、プログラムによる使用向けの固定長のバイナリ文字列である。オブジェクトサイズは任意であるが、実際には、典型的には2の累乗であり、512バイト(2^9)から最大1MB(2^20)に及ぶ。これに関連するオブジェクトは、Java(登録商標)及びC++等、プログラミング言語で使用されるようなオブジェクトと混同されるべきではない。
[004]全てのオブジェクトのインデックス(時として、ディクショナリ又はカタログと
呼ばれる)は、ファイルシステムによって必要とされる。インデックス内の各レコードは、オブジェクト名、長さ、位置及び他の種々雑多な情報を含む場合がある。インデックスは、その主キーとして、オブジェクト名、オブジェクトの位置、又は場合によっては両方を有する場合がある。レコードは、数十バイト程度であり、32バイトは一例である。
[005]このインデックスにおける動作は、エントリを追加すること、エントリをルック
アップすること、エントリに修正を行うこと、及び、エントリを削除することを含む。これらは全て、任意のインデックスにおいて行われる典型的な動作である。
[006]これらのファイルシステムはオブジェクトと共に働くので、ファイルシステムが
受け入れ可能な性能レベルを得るために、インデックス付けソリューションは、容易に対処されない2つの課題を有する。
1)インデックス内のエントリの数が大変大きくなる可能性がある。上記の例では、各インデックスエントリが32(2^5)バイトである場合、インデックスは、2^(5+34)=2^39、即ち、512GBのメモリを要する。これは、現在のメモリ技術に高い費用対効果で適合しない。
2)インデックスに対する動作が大きい。商業的に実現可能なストレージシステムは、約256MB/秒(2^28バイト/秒)で行う必要のある場合がある。4KBのオブジェクトサイズでは、それは、毎秒2^(28−12)=2^16、即ち、64000個の動作である。ファイルシステムが典型的には他のデータ(オブジェクト)を内部で生成且
つ参照することを考えれば、インデックス動作レートは、100000動作/秒を容易に上回る可能性がある。比較のポイントとして、現在の最先端のディスクは、よくても毎秒400個の動作しか行うことができない。
[007]必要な性能及び容量レベルを達成することは、DRAMメモリ技術又はディスク
技術のみを使用するのでは実際的ではない。DRAMメモリは十分高速であるが、密度は十分ではない。ディスクは密度を有するが、性能を有していない。所望の特性に達するように、何れか(DRAMメモリ又はディスク)をスケールすることは、費用がかかり過ぎる。
[008]オブジェクト名は、それらの分布においても、アクセスパターンにおいても、一
様であることが多いので、空間及び時間局所性によって決まる典型的なキャッシングスキームの効果は限られている。よって、インデックス付けの問題は、サイズにおいても、動作レートにおいても、困難である。
[009]本発明の一実施形態によれば、ユニフォームアクセスインデックス付け処理によ
って、ノンユニフォームアクセスメモリに格納されたインデックスにアクセスする方法が提供され、この方法は、
インデックス付け処理によって生成された論理バケット識別子を、メモリの物理バケット位置にマップして、インデックス内の各レコードデータエントリにアクセスするために、変換テーブルを維持するステップと、
インデックスに書き込まれる複数のレコードデータエントリをキャッシュ内に集めるステップであって、該ステップは、メモリの少なくとも1つの物理バケット位置へのエントリの集まりの後続の順次書込みに先立つ、ステップと
を含む。
一実施形態では、この方法は、
レコードデータエントリの集まりを、キャッシュからメモリのバケット位置へ、順次書込みとして書き込むステップと、
集まりのレコードデータエントリのためのバケット位置により、変換テーブルを更新するステップと
を含む。
一実施形態では、この方法は、
1つ又は複数の順次レコードデータエントリを、メモリからキャッシュへ読み出すステップと、
1つ又は複数のエントリが読み出されたメモリ内の物理位置を、フリーとして指定するステップと
を含む。
一実施形態では、この方法は、
ブロック内の任意の有効エントリをキャッシュに読み出すこと、及び、そのようなエントリが読み出されたメモリ内の物理位置を、フリーとして指定することによって、メモリ内の複数の順次物理バケット位置をフリーブロックとするステップを含む。
一実施形態では、
インデックス付け処理が、一律に配布され一意のインデックスキーに基づいて、インデックスへのランダムアクセス要求を生成する。
一実施形態では、
キーは、暗号ハッシュダイジェストを含む。
一実施形態では、
インデックス付け処理は、置き換えハッシングの処理を含む。
一実施形態では、
置き換え(displacement)ハッシングは、カッコウハッシング処理を含む。
一実施形態では、
メモリは、フラッシュ、相変化及びソリッドステートディスクのメモリデバイスのうちの1つ又は複数を含む。
一実施形態では、
メモリは、ランダム書込みアクセス時間、ランダム読出し−修正−書込みアクセス時間、順次書込み、アラインメント制約、消去時間、消去ブロック境界及び摩耗のうちの1つ又は複数によって制限される。
一実施形態では、
物理バケットのサイズは、メモリの最小書込みサイズを含む。
一実施形態では、
物理バケットのサイズは、ページ又は部分ページを含む。
一実施形態では、
メモリは、複数のページを含む消去ブロックを有する。
一実施形態では、この方法は、
メモリ内のどのバケット位置が有効であるかを追跡するためのバケット有効テーブルを維持するステップを含む。
一実施形態では、
メモリ内のバケットは、1つ又は複数のレコードデータエントリのセット、及び、バケット変換テーブルへのセルフインデックスを含む。
一実施形態では、
バケット内のレコードデータエントリは順序付けされない。
一実施形態では、この方法は、
メモリに順次書き込まれたレコードデータエントリを、キャッシュ内で読出し専用として指定するステップを含む。
一実施形態では、
バケット変換テーブルは、永続メモリに格納される。
一実施形態では、この方法は、
消去ブロック内のフリーバケットの数を追跡し、フリーバケットのしきい値が満たされたとき、フリー消去ブロックを生成するための処理を実施するステップを含む。
一実施形態では、
インデックス付け処理は、レコードが挿入、削除、ルックアップ及び修正のうちの1以上をされる要求に基づいて、インデックス付けオペレーションを行う。
一実施形態では、
インデックス付け処理は、インデックスのレコードを格納する物理バケットを読み出し該物理バケットに書き込むための、論理バケットオペレーションを提示する。
一実施形態では、
物理バケットオペレーションは、ランダム読出し及び順次書込みを含む。
一実施形態では、
物理バケットオペレーションは、トリムコマンドを更に含む。
一実施形態では、
メモリは、ノンユニフォーム読出し及び書込みアクセス、並びに、サイズ、アラインメント及びタイミングについての不変性によって特徴付けられた物理デバイス層を含む。
一実施形態では、
レコードデータエントリは、キー、参照カウント及び物理ブロックアドレスのためのフィールドを含む。
一実施形態では、
キーは、データの暗号ハッシュダイジェストを含み、
物理ブロックアドレスフィールドは、ストレージデバイス上に格納されたデータの物理ブロックアドレスへのポインタを含む。
一実施形態では、
論理バケット位置は、複数のハッシュ関数によって生成される。
一実施形態では、
メモリは、複数の消去ブロックを含むフラッシュメモリデバイスを含み、各消去ブロックは複数のページを含み、各ページは複数のバケットを含む。
本発明の別の実施形態によれば、
プロセッサによって実行されるとき、前述の方法のステップを行うプログラムコード手段を含むコンピュータプログラム製品が提供される。
本発明の別の実施形態によればコンピュータ可読媒体が提供され、このコンピュータ可読媒体は、ユニフォームアクセスインデックス付け処理によってノンユニフォームアクセスメモリに格納されたインデックスにアクセスする方法のための実行可能プログラム命令を含み、上記方法は、
インデックス付け処理によって生成された論理バケット識別子を、メモリの物理バケット位置にマップして、インデックス内の各レコードデータエントリにアクセスするために、変換テーブルを維持するステップと、
インデックスに書き込まれる複数のレコードデータエントリをキャッシュ内に集めるステップであって、該ステップは、メモリの少なくとも1つの物理バケット位置へのエントリの集まりの後続の順次書込みに先立つ、ステップと
を含む。
本発明の別の実施形態によれば、物理プロセッサと、コンピュータ可読媒体を含むメモリデバイスとを含むシステムが提供され、
該コンピュータ可読媒体は、ユニフォームアクセスインデックス付け処理によってノンユニフォームアクセスメモリに格納されたインデックスにアクセスする方法のための実行可能プログラム命令を含み、上記方法は、
インデックス付け処理によって生成された論理バケット識別子を、メモリの物理バケット位置にマップして、インデックス内の各レコードデータエントリにアクセスするために、変換テーブルを維持するステップと、
インデックスに書き込まれる複数のレコードデータエントリをキャッシュ内に集めるステップであって、該ステップは、メモリの少なくとも1つの物理バケット位置へのエントリの集まりの後続の順次書込みに先立つ、ステップと
を含む。
一実施形態では、
インデックスを格納するメモリは、ノンユニフォーム読出し及び書込みアクセス、並びに、サイズ、アラインメント及びタイミングについての不変性によって特徴付けられた物理デバイス層を含む。
一実施形態では、
インデックスを格納するメモリは、フラッシュ、相変化及びソリッドステートディスクのメモリデバイスのうちの1つ又は複数を含む。
一実施形態では、
インデックスを格納するメモリは、複数の消去ブロックを含むフラッシュメモリデバイスを含み、各消去ブロックは複数のページを含み、各ページは複数のバケットを含む。
本発明の別の実施形態によれば、ユニフォームアクセスインデックス付け処理によって、ノンユニフォームアクセスメモリに格納されたインデックスにアクセスする方法が提供され、この方法は、
インデックス内のレコードデータエントリごとに論理バケット識別子をメモリの物理バケット位置にマップする変換テーブルに、インデックス付け処理によって生成された論理バケット識別子を提供するステップと、
論理バケット識別子にマップされた物理バケット位置にアクセスするステップと、
インデックスに書き込まれるレコードデータエントリをキャッシュ内に集めるステップと、
続いて、レコードデータエントリの集まりを、キャッシュから、メモリの少なくとも1つの新しい物理バケット位置におけるインデックスに順次書き込むステップと、
変換テーブルを更新して、少なくとも1つの新しい物理バケット位置を論理バケット識別子に関連付けるステップと
を含む。
本発明の別の実施形態によればあるコンピュータシステムが提供され、このコンピュータシステムは、
ノンユニフォームアクセスメモリであって、メモリの物理バケット位置においてレコードデータエントリを含むインデックスが格納される、ノンユニフォームアクセスメモリと、
ユニフォームアクセスインデックス付け処理によって生成された論理バケット識別子を、レコードデータエントリの各々のためのメモリの物理バケット位置にマップするための、変換テーブルと、
インデックスに書き込まれる集められたレコードデータエントリのためのキャッシュと

メモリの物理バケット位置にアクセスする手段であって、該物理バケット位置は、インデックス付け処理によって変換テーブルに供給された論理バケット識別子にマップされた、手段と、
レコードデータエントリの集まりを、キャッシュから、メモリの少なくとも1つの物理バケット位置のインデックスに順次書き込む手段と、
変換テーブルを更新して、少なくとも1つの物理バケット位置を論理バケット識別子に関連付ける手段と
を含む。
[010]本発明は、以下の図面と共に、詳細な説明を参照することによって、より十分に
理解される。
本発明の一実施形態により行われる、様々なインデックス付けオペレーションを例示する概略ブロック図である。 本発明で使用されうるデータ構造の様々な実施形態を例示する図である。 本発明で使用されうるデータ構造の様々な実施形態を例示する図である。 本発明で使用されうるデータ構造の様々な実施形態を例示する図である。 本発明で使用されうるデータ構造の様々な実施形態を例示する図である。 本発明の一実施形態によるルックアップオペレーションを例示する概略ブロック図である。 本発明の一実施形態による挿入オペレーションを例示する概略ブロック図である。 本発明の一実施形態による削除オペレーションの概略ブロック図である。 本発明の一実施形態による更新オペレーションの概略ブロック図である。 本発明の一実施形態によるフリー消去ブロックを生成するためのランダム読出し処理を例示する概略ブロック図である。 本発明の一実施形態によるフリー消去ブロックを生成するためのランダム読出し処理を例示する概略ブロック図である。 スキャベンジング処理に従ってフリー消去ブロックを生成する別の方法を例示する概略ブロック図である。 スキャベンジング処理に従ってフリー消去ブロックを生成する別の方法を例示する概略ブロック図である。 本発明の実装を例示するための6層のビュー又はスタックを例示する概略ブロック図である。 本発明の一実施形態で使用されるようなレコードエントリの概略図である。 図11A〜11Eは、本発明の一実施形態によるカッコウハッシングの実装を概略的に例示する図である。 本発明の一実施形態による、各バケットが複数のレコードを保持する、複数のバケットの概略的例示の図である。 本発明の一実施形態によるバケットのコンテンツの概略図である。 本発明の一実施形態による、複数のダイ、消去ブロック、ページ及びバケットを有する物理フラッシュチップの一例を例示する概略ブロック図である。 図15A〜図15Bは、本発明の一実施形態によるデバイス管理層のあるコンポーネントを例示する図である。
A.概観
[011]本発明の1つ又は複数の実施形態によれば、特化されたメモリ技術及びアルゴリ
ズムが使用されて、多数のレコード及びトランザクション要件を同時に有するインデックスが構築される。一実施形態は、置き換え(displacement)ハッシングインデックス付けアルゴリズム、例えばカッコウハッシングを利用する。本発明は、フラッシュ、相変化及びソリッドステートディスク(SSD)メモリデバイス等、ノンユニフォームアクセスメモリ技術の使用を可能とする。
[012]本発明の様々な実施形態では、メモリデバイスが、メモリデバイスにとって効率
的であるIO(入力/出力)パターンに遭遇しながら、インデックス付けアルゴリズムがアルゴリズムにとって自然(効率的)である方法で行うことを保証するために、新しいデータ構造及び方法が提供される。
[013]インデックス付けアルゴリズムによって見なされた論理バケットを、メモリデバ
イス上の物理バケットにマップする、あるデータ構造である間接指定テーブルが作成される。このマッピングは、ノンユニフォームアクセスメモリデバイスへの書込み性能が強化されるようにするものである。
[014]キャッシュの追い出し及びライトバックポリシーの一部として、バケットを集め
、メモリデバイスへ順次書き出すために、別のデータ構造である連想キャッシュが使用される。
[015]インデックス付けアルゴリズムによって必要とされる(レコードの)バケットで
キャッシュをポピュレートするために、方法が使用される。追加のバケットは、デマンド読出し中に又はスキャベンジング処理によって、メモリデバイスからキャッシュへ読み出されてもよい。
[016]間接指定テーブルと併せた、キャッシュの使用は、メモリデバイスへの大きい順
次書込みを可能にする。
[017]フラッシュ技術は、インデックス付け問題のために必要とされた容量及びIOレ
ートを達成する基本機能を有するが、フラッシュアクセス特性はノンユニフォームである。このノンユニフォーム性はかなり十分なので、通常のインデックス付けアルゴリズムは、フラッシュメモリデバイスと共に、たとえ機能するとしても、うまく機能しない。
[018]本発明で使用されるノンユニフォームアクセスフラッシュメモリは、数百から数
千ビットもの大きいブロックサイズで、即ち、バイトレベルのランダムアクセスではなく、読出し、書込み及び消去が行われなければならない、電気的消去可能プログラマブル読出し専用メモリ(EEPROM)である。物理的には、フラッシュは、フローティングゲートトランジスタからなるメモリセルのアレイに情報を格納する、不揮発性メモリ形式である。2つのタイプのフラッシュメモリデバイス、NANDフラッシュ及びNORフラッシュがある。NANDフラッシュは、NORフラッシュより高密度及び大容量をより低コストで提供し、より高速な消去、順次書込み及び順次読出し速度を有する。本願において、且つ本発明において使用されるとき、「フラッシュ」メモリは、NANDフラッシュメモリを包含するものであり、NORメモリを包含しないものである。NANDは、各セルが1ビットの情報のみを格納するシングルレベルセル(SLC)デバイス、及び、1つのセルにつき2ビット以上を格納することができる、より新しいマルチレベルセル(MLC)デバイスを共に含む。NANDフラッシュは高速なアクセス時間を提供するが、PC内でメインメモリとして使用された揮発性DRAMメモリほど高速ではない。フラッシュメモリデバイスは、フラッシュファイルシステムを含んでも含まなくてもよい。フラッシュファイルシステムは、典型的には、ウェアレベリング及び誤り訂正を行うために内蔵コン
トローラを有していない、内蔵フラッシュメモリと共に使用される。
[019]典型的なNANDフラッシュチップは、数GBのコンテンツを格納してもよい。
コンピュータに取り付けられたメモリとは異なり、フラッシュチップ上のメモリは、あるサイズで、且つ、ある境界上でアクセスされなければならない。更に、メモリのセクションに書き込まれた後、それらのメモリ位置が再び書込み可能となる前に、消去オペレーションが行われなければならない。また、位置は徐々になくなるので、全ての位置が同様の数の書込みを得ることを保証することは、使用を更に複雑にする。読出し時間、書込み時間及び消去時間は、大幅に(数マイクロ秒から数ミリ秒まで)変わる可能性がある。よって、タイミング、ウェアレベリング及びアラインメント制約は、フラッシュの実際的な使用を困難にするのがせいぜいである。
[020]フラッシュメモリデバイスは、1つ又は複数のダイ(シリコンウエハ)を含んで
もよい。各ダイは、大部分では、独立してアクセスされうる。
[021]ダイは、数千もの消去ブロックからなる。消去ブロックは典型的には、128〜
512KBのサイズである。データがクリアされる必要があるとき、消去ブロック境界上でクリアされなければならない。
[022]NANDフラッシュのもう1つの制限は、データが順次書き込まれることのみが
可能であることである。更に、書込みのためのセットアップ時間は長く、読出しのセットアップ時間のおよそ10倍である。
[023]データは、ページ粒度で読み出される。ページは、特定のフラッシュチップに応
じて、1KBから4KBまでに及ぶ場合がある。各ページに関連付けられるものは、誤り訂正符号(ECC)チェックサムのために使用されうる、数バイトである。
[024]データは、ページ粒度で書き込まれる。書き込まれた後、ページは、その消去ブ
ロック(ページを含む)が消去されるまで、再度書き込まれない場合がある。消去ブロックは、数十から100を超えるページを含む場合がある。
[025]上記の読出し及び書込みページ粒度に対する1つの例外は、サブページ書込み、
又は、部分ページプログラミングである。技術に応じて、ページは、消去が必要とされる前に最大4回、部分的に書き込まれる場合がある。
[026]NANDフラッシュブロック内のページは順次、且つ、ブロック消去オペレーシ
ョンの間に一度のみ書き込まれうるので、後続の書込みは、典型的には異なるフラッシュブロック内に位置する異なるページへの書込みを必要とする。ブロック消去の問題点は、フラッシュファイルシステムの機能である、書込み可能フラッシュブロックのプールを作成することによって、対処される。
[027]消去ブロックを消去することは、数ミリ秒を取りうるので、時間的に最も費用の
かかるオペレーションである。(トラフィック的に)多用されるデバイスでは、消去ブロックが生成されうる速度(即ち、どのくらい速くフリー消去ブロックが使用可能にされうるか)は、フラッシュ設計における制限要因であることが多い。
[028]多数のSSD(ソリッドステートディスク)は、フラッシュ技術を使用する。S
SDにおけるファームウェアは、フラッシュ変換層(FTL)と呼ばれる層において、前述のアクセスの問題点に対処する。そうすることにおいて、しかし、ファームウェアは、どのようにSSDが使用されるか(例えば、大部分は読出し、大部分は書込み、読出し及
び書込みのサイズ及びアラインメント)について仮定を行い、これらの仮定の結果として、SSDの性能特性は、インデックス付けアルゴリズムにとって準最適であることが多い。
[029]人が文献において、また実際に発見する多数のインデックス付けアルゴリズムは
、ユニフォームメモリアクセスモデルに基づいており、即ち、全てのメモリが、読出しでも書込みでも時間的に等しくアクセス可能であり、アクセスサイズ又はアラインメントにおけるいかなる一次制約もない。
[030]インデックス付けソリューションを考察する場合、挿入、削除、ルックアップ及
び修正等のオペレーションは典型的には、より多くの多様な時間の量を必要とし、ブロック、典型的には小さいブロック(4KBくらい)の読出し及び書込みは、より短い時間を必要とする。ブロックはランダムであるように見え、即ち、任意のブロックが読み出されてよく、任意の他のブロックが書き込まれてよい。幾つかのアルゴリズムでは、ランダム読出し−修正−書込みIOプロファイルがあり、即ち、ランダムブロックが読み出され、次いで、わずかに修正されたデータで同じ位置に書き戻される。
[031]インデックス付けアルゴリズムの効率的な動作を必要とするこのランダムIOは
、フラッシュが提供するように意図されるものではない。フラッシュは、ランダム読出しをうまく扱うことができるが、読出し−修正−書込みがそうであるように、ランダム書込みは困難である。この理由は、すでに書き込まれたものを上書きすることはできず、まずそれを消去しなければならないからである。この状況を更に複雑にすることには、消去は時間を要し、大きい境界(典型的には64KB)上で起こらなければならない。
[032]消去ブロックが消去されるとき、そのブロック内のいかなる有効データも他のと
ころへ移動される必要がある。アルゴリズムがフラッシュデバイス中でランダムな4KBブロックを書き込む場合、単純な実装は、その間ずっとブロックが消去され続ける結果となる。消去時間は遅いので、性能がかなり損なわれることになる。
[033]本発明によれば、フラッシュへの書込みを順次にすることを可能にするため、イ
ンデックス付けアルゴリズムが期待する論理ランダムアクセスをなお保ちながら、変換又は間接指定テーブルが作成される。このテーブルは、インデックス付けアルゴリズムによって必要とされるような(レコードの)論理バケットを、フラッシュデバイスの物理バケット(例えば、ページ)にマップする。
[034]インデックス付けアルゴリズムがバケット(例えば、フラッシュからのデータの
ページ)を読み込むとき、バケットコンテンツを修正(挿入、更新又は削除オペレーション)するために、バケットはキャッシュに移動される。フラッシュデバイス上の対応するバケットにはこのとき、有効ではない(フリー)としてマークが付けられうる。SSDの場合、これはTRIMコマンドの形式を取りうる。
[035]本発明の更なる実施形態によれば、フリー消去ブロックを生成するために、方法
が提供される。いかなる所与の時間でも、消去ブロックは、有効及び無効データの組み合わせを有する場合がある。消去ブロックを解放するため、全ての有効データは、そのブロックから離れるように移動されなければならない。これを達成するために使用されうる、2つの機構がある。1つは、インデックス付けアルゴリズムによって生成されたランダム読出しを使用して、(インデックス付けアルゴリズムによって必要とされるよりも)より多くを読出し、消去ブロックを解放するようにすることである。インデックス付けアルゴリズムはランダム読出しを生成する傾向があるので、経時的に、全ての消去ブロックは最終的に読み出され、空のページのために集積される。例えば、読出しを含む消去ブロック
が、幾つかのフリーページ及び幾つかの有効ページを有する場合、アルゴリズムは、消去ブロック全体を読み込み、且つ、全ての有効ページをキャッシュに入れることを選択してもよい。これは、後続の消去及び次いで書込みのために、その消去ブロックを解放する効果を有する。
[036]別法として、例えば、前述のランダム読出し処理が十分に高速でない場合、消去
ブロックを読み出し、別の消去ブロックと合体するために有効ページをキャッシュに入れるために、分離したスキャベンジング処理(例えば、スレッド)が使用されうる。
[037]キャッシュが一杯になるとき、エントリが書き出されなければならない。キャッ
シュエントリのセットが集められ、部分ページの隣接するセット(部分ページ書込みがフラッシュデバイスによって可能にされる場合)、複数のページ及び1つ又は複数の消去ブロックのうちの1以上へと、順次書き込まれるようになる。キャッシュエントリがフラッシュデバイスに書き込まれるとき、間接指定テーブルは更新されるので、インデックス付けアルゴリズムはなお、エントリが固定された論理アドレスにあるものと見なす。
B.インデックス付けオペレーション
[038]本発明の様々な実施形態がここで、添付の図1〜6を利用して説明され、本発明
に従って行われた様々なインデックス付けオペレーションが例示される。図7〜8は、ストレージ媒体(例えば、フラッシュメモリ)の効率的利用のためにフリー消去ブロックを生成する、2つの方法を例示する。これらの実施形態は例示的なものであり、限定するものではない。
[039]図1は、本発明の一実施形態による、バケット変換テーブル17及びキャッシュ
23を利用する幾つかのインデックス付けオペレーションの概観である。図1の上部に、3つのインデックスオペレーション12〜14が、ルックアップ関数15及び変換関数16への代替入力として示される。第1のインデックスオペレーション12は、キーのための(レコードエントリ)から衛星データを返すための「キーをルックアップする」である。第2のインデックスオペレーション13は、キーのためのレコードエントリを更新(修正)するための「キーのための衛星データを更新する」である。第3のインデックスオペレーション14は、新しいレコードエントリを挿入するための「新しいキーを挿入する」である。もう1つのインデックスオペレーションである削除は、図1では図示されないが、図5に関して後述される。
[040]全ての3つのインデックスオペレーションは、最初にルックアップ関数15を行
い、キーのある関数f(キー)が使用されて、インデックスが生成され、ここでは、ハッシュテーブルルックアップをサポート(例えば、加速)する論理バケット識別子である。バケット識別子(インデックス)は、変換関数16への入力であり、論理バケット識別子のある関数f(インデックス)は、フラッシュメモリ内の物理バケット位置を生成する。この変換関数はバケット変換テーブル17によって実装され、バケット変換テーブル17は、対象フラッシュメモリ位置(フラッシュ内の物理バケット位置)への(インデックス付けアルゴリズムによって提供されるような)論理バケット識別子のマップである。フラッシュメモリ26に格納されたディクショナリ(インデックス)は、ルックアップキー(例えば、オブジェクト名)を衛星データ(例えば、ディスク上に格納されたオブジェクトへの位置ポインタ)にマップするレコードを備えてもよい。
[041]次に、3つのインデックス付けオペレーションのうちどれが行われているか(ル
ックアップ、更新又は挿入)に応じて、図1の下半分に示されたステップのうち1つ又は複数が行われる。
[042]ルックアップオペレーション18では、変換関数によって識別されたバケットエ
ントリは、キャッシュルックアサイドによる、フラッシュメモリ内の対象バケット22からの読出し30である(例えば、対象バケットがキャッシュに格納される場合、フラッシュメモリ26からではなく、キャッシュ23から読み出されてもよい)。
[043]更新オペレーション19では、変換関数によって識別されたバケットエントリ(
元のバケットエントリ)が、フラッシュメモリ(又はキャッシュ)の消去ブロック21a内の対象バケット22から読み出され30、バケットが更新され、キャッシュへ移動され32、且つ、後続の書込み24では、複数のキャッシュバケットエントリが、フラッシュメモリ内の部分ページの隣接するセット、複数のページ、及び、消去ブロック(例えば、新しい消去ブロック21b)のうちの1以上に順次読み出される。この処理は、フラッシュ内の全ての移動されたバケットのステータスを、有効ではないデータ(例えば、フリー、又は、トリムオペレーションのために使用可能)に更新する33。
[044]挿入オペレーション20では、対象バケットがフラッシュから再度読み出され、
修正されたバケットエントリが、フラッシュメモリ内の新しい位置への後続の順次書込み24のために再度、キャッシュに移動される34。
[045]図1は、隣接するフラッシュメモリバケットへの、キャッシュバケットエントリ
の集まりの順次書込み24を行うことに先立って、複数のバケットエントリを集めるためのキャッシュ23を概略的に示す。一実施形態では、スキャベンジングオペレーション25が、フリー消去ブロックを作成するために使用され、この処理は、スキャベンジング処理中に(消去ブロックからの)任意の有効バケットをキャッシュに格納すること、及び、フラッシュ消去ブロックをフリーとして再割振りすることを含む。
[046]図2に例示された新しいデータ構造の考察に続いて、図1で参照されたインデッ
クス付けオペレーションが、図3〜6のフロー図に関してより具体的に説明される。
C.データ構造
[047]図2は、本発明において有用なデータ構造の様々な実施形態を例示する。そのよ
うなデータ構造は例示的なものであり、限定するものではない。
[048]図2Aは、(インデックス付けアルゴリズムによって生成された)論理バケット
インデックスを、物理フラッシュバケットアドレスに変換するための、バケット変換テーブル(BTT)300の一実施形態を例示する。BTTテーブルエントリは、3つのフィールド、即ち、有効301、フラッシュ物理バケットアドレス302、及び、拡張バケット状態303を有して図示される。バケットアドレス粒度は、フラッシュデバイスの最小書込みサイズであり、即ち、(例えば、SLC NANDでの)部分ページ書込み、又は、(例えば、MLC NANDでの)ページ書込みである。BTTは、論理から物理バケットエントリへの1:1マッピングである。このテーブルは、より高いランダム性能(インデックス付けアルゴリズムによるランダム読出し及びランダム書込み)のために、フラッシュバケット割当ての再編成を可能とする。アルゴリズムのアクセラレーションを可能とするために、追加の状態情報がBTTへ、第3のフィールド内に追加されてもよい。
[049]図2Bは、バケット有効テーブル(BVT)305の一実施形態を示す。このテ
ーブルは、トリミングのためのブロックへのバケットのスキャベンジングを管理するために、フラッシュ内のどの物理バケットが有効であるかを追跡する。一例として、有効とラベル付けされたフィールド306は、小型のビット配列(1ビット/バケット)であってもよい。BVTのサイズは、フラッシュバケットエントリの総数であり、そのサブセットのみがBTTによって使用中である。
[050]図2Cは、バケット内に含まれた複数のレコード310、311、312...
を、逆BTTポインタ313(バケット変換テーブル17へのセルフインデックス)と共に有する、フラッシュバケット309の一実施形態を例示する。よって、各バケットは、1つ又は複数のレコードのセット、及び、フラッシュバケット(例えば、ページ)が挿入、移動又は削除されるとき、BTTを更新するための逆ポインタを含む。バケットの各要素(レコード又はポインタ)には、データ構造の個々の信頼性を向上させ、且つ、ストレージデバイスの有用寿命を著しく延ばすために、追加のECCビット等、冗長コンテンツが追加されてもよい。例えば、任意選択のシーケンス番号フィールドが、停電発生中にデータ一貫性チェックを行うためにフラッシュバケット309に追加されてもよく、他の最適化フラグも同様に提供されてもよい。
[051]レコードサイズはバケットサイズに比べて小さいので、これは、個々のレコード
ベースで追加の誤り回復情報を実装する(任意選択の)機会を提供する。この任意選択の機能は、訂正される可能性があるので下にあるストレージ技術の実効動作寿命を延ばす可能性のある、ビット誤り及び障害の数を増すことによって、ソリューションの全体の信頼性を向上させるようになる。
[052]図2Dは、複数の消去ブロック316(1からM)を含む、SLC NANDフ
ラッシュデバイス315の一例を示す。各消去ブロックは、複数のページ317(1からN)を含む。この例では、各ページは4KBであり、各ページは複数のバケット318(1からB)を含み、各バケットは1KBである。この例では、デバイスは部分ページ書込みをサポートする。
[053]バケットは、フラッシュデバイスの最小書込みサイズを表現する。典型的には、
バケットは1ページとなる。部分ページ書込みが可能にされる場合、1ページにつき4つのバケットをサポートする4部分ページSLC NANDデバイス等、1フラッシュページにつき1つ又は複数のバケットが提供されてもよい。
[054]1つの消去ブロックにつき、複数のフラッシュページが提供される。1つのフラ
ッシュデバイスにつき複数の消去ブロックがあり、各ブロックは個々に消去される。
[055]典型的なフラッシュサブシステムは、複数のフラッシュデバイスからなる。NA
NDフラッシュデバイスは、消去オペレーション間に所与のブロック内で1ページ(又は部分ページ)につき1回、順次書き込まれ、複数のブロックが、同時に書込み及び読出しを行うために使用可能である。
D.処理フローチャート
[056]図3は、キーの存在を検証し、関連付けられた衛星データを返すためのルックア
ップオペレーション処理の一実施形態を例示する。ステップ1 41で、ルックアップキーがルックアップ関数に入力される。ステップ2 42で、ルックアップ関数f(キー)は、ハッシュテーブルルックアップをサポート(例えば、加速)する論理バケット識別子を生成する。論理バケット識別子は変換関数に入力され、変換関数は、ステップ3 43で、バケット変換テーブル(BTT)17を介してフラッシュメモリ(物理バケット)位置にマップされる。ステップ4 44で、バケットがキャッシュに格納されるまで、フラッシュメモリ内の対象バケットがフラッシュメモリから読み出され45a、バケットがキャッシュに格納された場合、キャッシュ23から読出し可能である45b。ステップ6 46で、キーのための衛星(レコード)データがインデックス付けアルゴリズムに返される。
[057]図4は、挿入オペレーション処理の一実施形態を示す。最初のステップ71は、
キーをルックアップ関数に入力する。ステップ2 72で、ルックアップ関数f(キー)は、インデックス、ここでは論理バケット識別子を生成する。ステップ3 73で、バケット識別子が変換関数に入力され、変換関数は、バケット変換テーブル(BTT)17を利用して、バケット識別子を、挿入が起こるべきフラッシュメモリ物理バケット位置へマップする。ステップ4 74で、挿入処理は、対象バケット位置を変換関数から受信する。ステップ5 75で、挿入処理は、対象バケット22をフラッシュメモリの消去ブロック21aから75a、或いはキャッシュから75b、読み出す。ステップ6 76で、挿入処理は、レコードエントリを対象バケットに挿入し、修正済みバケットをキャッシュに書き込む。ステップ7 77で、挿入処理によって、複数のバケットエントリ(修正済み対象バケットを含む)がキャッシュ73から読み出される。ステップ8 78で、挿入処理は、キャッシュから読み出された修正済み対象バケット及び他のバケットを、フラッシュ26内の新しい位置(消去ブロック21b内のページ)へ書き込む。ステップ9 79で、挿入処理は、キャッシュからフラッシュへ移動された全てのバケットのための新しい位置により、バケット変換テーブル17を更新し79a、また、移動された全てのバケットについて、BVT内のバケット有効エントリをも更新する79b。ステップ10 80で、挿入処理は、移動されたキャッシュエントリに、読出し専用(使用可能)とマークを付ける。ステップ11 81で、挿入処理は、元のフラッシュバケット(このとき、新しい消去ブロックに移動済み)に、フリーとしてマークを付ける。
[058]図5は、削除オペレーション処理の一実施形態を例示する。最初のステップ91
では、キーがルックアップ関数に提供される。ステップ2 92で、ルックアップ関数f(キー)は、インデックス、ここでは論理バケット識別子を生成する。ステップ3 93で、バケット識別子が変換関数に提供され、変換関数は、バケット変換テーブル17を利用して、バケット識別子を物理フラッシュメモリバケット位置へマップする。ステップ4
94で、削除処理は、フラッシュメモリ位置を受信する。ステップ5 95で、対象バケットがフラッシュから読み出される。ステップ6 96で、処理は、バケット内の元のレコードエントリを削除し、修正済みバケットを(削除済みエントリと共に)キャッシュ23に書き込む。ステップ7 97で、バケットのグループ(集まり)がキャッシュから読み出される。ステップ8 98で、キャッシュ23から読み出された更新済み対象バケット及び他のバケットが、フラッシュ内のフリーページの隣接するセットに順次書き込まれる。ステップ9 99で、削除処理は、全ての移動されたバケットのためのフラッシュ内の新しい位置により、バケット変換テーブルを更新し99a、BVT内のそれらのバケット有効ステータスを更新する99b。ステップ10 100で、削除処理は、キャッシュエントリに、読出し専用としてマークを付ける。ステップ11 101で、削除処理は、このとき、フラッシュ内の新しい位置に移動された元のフラッシュバケットに、フリーとしてマークを付ける。
[059]図6は、フラッシュメモリに格納されたインデックス内のレコードを修正するた
めの更新オペレーション処理の一実施形態を例示する。最初のステップ51で、キーが入力としてルックアップ関数に提供される。ステップ2 52で、ルックアップ関数f(キー)は、インデックス、ここでは論理バケット識別子を生成する。バケット識別子は変換関数に入力される。ステップ3 53で、変換関数は、バケット変換テーブル17を利用して、バケット識別子を、更新が起こるべきフラッシュメモリ内の物理バケットへマップする。ステップ5 55で、対象バケットはフラッシュから55a、或いはキャッシュから55b、読み出される。ステップ6 56で、エントリを更新した後、更新済みバケットがキャッシュ23に書き込まれる。ステップ7 57で、バケットのグループがキャッシュ23から読み出され、ステップ8 58で、キャッシュからフラッシュメモリ26内の新しい位置へ順次書き込まれる。ステップ9 59で、更新処理は、全ての移動されたバケットのための新しい位置により、バケット変換テーブル17を更新し59a、BVT
内のそれらの有効ステータスを更新する59b。ステップ10 60で、更新処理は、移動されたエントリに、キャッシュ23内で読出し専用(及び、よって上書きされるために使用可能)としてマークを付ける。最後に、ステップ11 61で、更新処理は、このとき新しい位置に移動された元のフラッシュバケットに、フリー(使用可能)としてマークを付ける。
[060]図7Aは、フリー消去ブロックを生成するための処理の一実施形態を例示し、(
ルックアップ、挿入又は修正等、アップストリームインデックス付けオペレーションによって生成された)デマンド読出しは、(対象バケットと)同じ消去ブロック内の追加のバケットを読み出す。図7Aで、この処理は、更新要求と共に例示される。ステップ1 111で、キーがルックアップ関数に提供される。ステップ2 112で、ルックアップ関数f(キー)は、インデックス、ここでは論理バケット識別子を生成する。ステップ3 113で、バケット識別子が、フラッシュ内の物理対象バケット位置にマップされる。ステップ4 114で、更新及びスキャベンジ処理は、対象フラッシュメモリ位置を受信する。ステップ5 115で、処理は、対象バケットと同じ消去ブロック内の全ての有効バケットを識別する。ステップ6 116で、更新処理は、対象バケット及び全ての識別された有効バケットを、対象バケットを含むフラッシュブロックから読み出す。ステップ7
117で、処理は、対象バケット内のレコードエントリを更新し、フラッシュブロックからの全ての有効バケットをキャッシュ23に書き込む。ステップ8 118で、更新処理は、キャッシュからブロックのグループを読み出す。ステップ9 119で、更新処理は、キャッシュ23から読み出された更新済み対象バケット及び他のバケットを、フラッシュ26に書き込む。ステップ10 120で、更新処理は、移動された(キャッシュからフラッシュ内の新しい消去ブロック21bに書き込まれた)全てのバケットのための新しい位置により、バケット変換テーブル17を更新し120a、BVT内のバケットエントリを更新する120b。ステップ11 121で、更新処理は、このとき古いキャッシュエントリに、読出し専用としてマークを付ける。ステップ12 122で、更新処理は、元のフラッシュブロック(対象ブロック内の全てのバケット)に、フリーとしてマークを付ける。
[061]図7Bは、フリー消去ブロックを生成するためにのみ記載された、ランダム読出
し処理の特定の実施形態を例示する。
[062]この実施形態では、置き換えハッシングインデックス付けアルゴリズム125は
、論理バケット126を生成する。インデックス付けアルゴリズムによって見なされる論理バケットサイズは、インデックス付けアルゴリズム及びフラッシュメモリが互換性を有するように、フラッシュ消去ブロックサイズに関連付けられる。これらのバケットは、インデックス読出し及び更新の結果として、ランダムに読み出されるようになる。
[063]バケット変換(間接指定)テーブル127は、論理バケットインデックスを物理
フラッシュデバイスバケット位置に変換する。この間接指定テーブルは、インデックス付けアルゴリズムが、読出し、書込み及び更新のために、ランダムに動作し、且つ、フラッシュデバイスレベルで行われる大きい順次書込みをなお有することを可能とする。好ましくは、間接指定テーブルは永続メモリに格納されるが、揮発性メモリに格納される場合、必要に応じて再構築されうる。
[064]間接指定テーブルの出力、即ち、物理デバイスバケット位置は、入力として、完
全連想バケットキャッシュ128に提供される。この実施形態では、空の消去ブロックfifo129のコンテンツがハイウォーターマークQ未満である場合、消去ブロック全体(対象4KBバケットを含む)が読み出される。
[065]消去ブロックは論理バケットをホストし、典型的な構成は、1つの消去ブロック
が16個の4KB論理バケットを保持するものである。物理デバイスは、負荷、例えば、90%のために構成され、バケットの90%が使用中であることを意味する。キャッシング及び犠牲化(victimization)(追い出し)は、残りのバケットの10%の大部分がフリー消去ブロックに集中させられるように、フラッシュメモリ内で論理バケットをパックする(集中させる)ために、使用される。
[066]キャッシュ犠牲化(追い出し処理)は、キャッシュ内に集められた16個のバケ
ットを取り、それら16個のバケットをキャッシュからフリー消去ブロック130に書き出す。消去ブロックはランダム読出しオペレーションによってランダムに触れられるので、読出しオペレーションは、フリー消去ブロックを生成するために使用されうる。論理バケット識別子を生成するための暗号ハッシュ関数の使用は、読出しオペレーションのランダム性を増大させ、よって、フリー消去ブロックのランダム読出し生成を改善するようになる。
[067]図8A及び8Bは、フリー消去ブロックを生成するための代替スキャベンジング
処理を例示する。このスキャベンジング処理は、何れかのインデックス付けオペレーションの一部ではない。むしろ、より下位レベルのデバイス管理層の一部として実装される。この処理では、フラッシュ消去ブロック内の物理バケットのグループ(一部又は全部)がフラッシュから直接読み出され、バケット有効テーブル27が、消去ブロック内のどのバケットが有効であるかを決定するために使用される。
[068]図8Aに例示されるように、ステップ1 220で、スキャベンジング処理25
は、完全な消去ブロック21aを読み出す。ステップ2 222で、スキャベンジング処理は、バケット有効テーブル27を使用して、有効であるそれらの読出しの全てのバケットを識別する。ステップ3 224で、各有効バケットについて、論理バケット識別子がバケットから抽出される。ステップ4 226で、有効バケットがキャッシュ23に格納され、各々はその論理バケット識別子によってインデックス付けされる。
[069]図8Bは、ステップ1で、スキャベンジング処理25がバケット[94,97]
を、94及び97を含めて読み出す一例を示す。ステップ2で、処理は、95及び96でのバケットが有効であると決定する。有効バケットは、「1」によって指定されたバケット有効テーブルにおいて示され、非有効バケットは「0」による。ステップ3で、バケット95及び96のための論理バケット識別子、即ち、タグ23及び49がそれぞれバケットから抽出される。ステップ4で、この2つのタグ並びにそれらの各バケット95及び96は、それらの各タグ23、49をインデックスとして使用して、キャッシュに挿入される。
E.スタックレベルビュー及び実装
[070]本発明のもう1つのより具体的な実施例が、ここで図9〜16を参照して説明さ
れる。
[071]図9は、物理フラッシュメモリデバイス211によって望まれるものとは大変異
なるビューである、インデックス付けアルゴリズム203によって望まれたIO使用プロファイルビューを、フラッシュアダプテーション層207が適合させる、本発明の一実装を例示するための6層のビュー又はスタック200を示す。最高レベル201で、レコードのディクショナリ(インデックス)が提供され、それに対して、あるインデックス付けオペレーション204(レコードをルックアップ、削除、挿入且つ修正する)が必要とされる。インデックス付けアルゴリズム層203は、1つ又は複数のインデックス付けアルゴリズムによりディクショナリを実装し、例えば、カッコウ置き換えハッシングアルゴリ
ズムが一例である。インデックス付けアルゴリズムは、インデックスへのキーがどのようにインデックス永続層205によって格納されるかのビューを有する。インデックス付けビューは、論理ビューであり、論理アドレス位置を特定する。このビューは更に、サイズ、アラインメント及びタイミングについて、インデックスへのユニフォームアクセスが存在するようになること、及び、インデックスが可変(安定)ストレージ上に格納されることを仮定する。
[072]インデックス永続層205は、インデックスのレコードを格納する物理バケット
を読み出し、それらの物理バケットに書き込むための論理バケットオペレーション206を提示するようになる。これらの論理バケットオペレーション206は、フラッシュアダプテーション層207に提示され、フラッシュアダプテーション層207は、前述のように、(インデックス付け処理の)論理バケットをフラッシュストレージデバイス上の物理バケット位置に変換する。フラッシュアダプテーション層は、よって、上記のインデックス付けアルゴリズムによって望まれたビュー及びIO使用プロファイルを、下記の物理ストレージデバイス(フラッシュメモリ211)によって望まれた大変異なるビューに適合させる。ここで、物理バケットオペレーション208は、ランダム読出し及び集約(ブロック順次)書込みを含み、これらのランダム読出し及び集約(ブロック順次)書込みは、バケットアクセスのノンユニフォームモデルを構成する。この実施例の物理バケットオペレーションは、トリムコマンドを更に含んでもよい。
[073]物理バケットオペレーションは、物理フラッシュデバイス上の資源を追跡且つ調
節する、デバイス管理層209によって実装される。これらの物理デバイスオペレーション210はここでは、ランダム読出し、大きい順次書込み及びトリムコマンドを含む。
[074]物理デバイス層211は、そのノンユニフォーム読出し及び書込み、並びに、サ
イズ、アラインメント及びタイミングについての不変性によって特徴付けられる。そのような物理デバイスの例は、生のフラッシュ、相変化、SSD、及びデバイス上に存在するフラッシュファイルシステムを有するフラッシュのうちの1以上を含む。
[075]本発明は、以下のもの等、デバイス管理層より下の追加の任意選択の強化を可能
とする。
・バケットトリミング(細かいページトリミング)及びページ内のバケット追跡のモデルは、SSD又は同等のストレージデバイスのフラッシュファイルシステムに直接組み込まれる場合、よりよい消去ブロック管理を可能とする。
・フラッシュページ上へのバケットのマッピングは、抽象化である。変化ごとにフラッシュに書き込まれたデータの量を最小化することによって、それらのデバイスの寿命を延ばすために、バケットは、SLC NANDのための部分ページへマップすることができる。バケットはまた、これがシステム全体の性能にとって有益であった場合、複数のフラッシュページ上にマップすることもできる。
[076]図10は、インデックスレコードの一例を示す。レコード140は、フィンガー
プリント(キー)を格納するための最初の20バイトのフィールド141を含め、合計で32バイトである。フィンガープリントは、好ましくはデータコンテンツの暗号ハッシュダイジェスト、例えば、SHA−1ハッシュアルゴリズムである。例示を容易にするため、フィンガープリントを、「AB92345E203...」等、16進数で入力するのではなく、個々のフィンガープリントは、図11〜14において、P、Q、R、S、T等、単一の大文字によって指定される。やはり例示のために簡潔にするため、これらの大文字はまた、レコード全体の代理としての役割も果たすようになる。レコードのフィールド
はまた、2バイトの参照カウントフィールド142、5バイトの物理ブロックアドレスフィールド143、1バイトのフラグフィールド144、及び、4バイトの雑フィールド145をも含む。PBAフィールド143は、指定されたフィンガープリント141のために、ディスク上で格納されたデータの物理ブロックアドレスへのポインタを含む。参照カウントは、ディスク上で格納されたデータへの参照の数を追跡する。
[077]本発明の一実施形態によれば、インデックスレコードからのフィンガープリント
141は、前述(図1)のルックアップ関数f(キー)への入力キーとして使用され、この実施例では、関数f(キー)は、4つのハッシュ関数H、H、H及びHのセットを備える。一般に、2つ以上のハッシュ関数の任意のセットを使用することができる。ハッシュ関数Hは、フィンガープリントを、0及びN−1を含めて範囲[0,N−1]へマップし、但し、Nはハッシュテーブルのサイズである。この実施例では、フィンガープリント自体がハッシュであることを考えれば、BitFieldを抽出して、以下の4つのハッシュ値のファミリを生成することができる。
(x)=x<0:31>mod N
(x)=x<032:63>mod N
(x)=x<064:95>mod N
(x)=x<096:127>mod N
[078]抽出されたBitField幅は、log(N)以上である。ばらばらのビッ
トの任意の組み合わせを使用することができ、log(N)制約を受ける。図10に例示されるように、最初のフィールド141内のフィンガープリントのみがハッシュされて、キーが形成される。レコード140の残りのコンテンツ(フィールド142〜145)は、値又はペイロードを備える。
[079]図11は、カッコウハッシングとして知られる、置き換えハッシングインデック
ス付けアルゴリズムの一例を例示する。例示を容易にするため、2つの関数のみが使用される。図11Aは、フィンガープリントPがそれぞれ関数H(x)及びH(x)からハッシュ値2及び5を生成する一方、フィンガープリントQがこれらの同じ関数からハッシュ値1及び3を生成する、2×3グリッドを示す。カッコウハッシングアルゴリズムは、0〜6のラベルが付けられた7個のスロット(図11B)のうち1つにP及びQを入れるための、2つの代替ハッシュ値の中から選択するようになる。Pは、2つの位置のうち1つ、2又は5に入る可能性があり、Qは、2つの位置のうち1つ、1又は3に入る可能性がある。図11Cに示すように、このアルゴリズムは、Qを最下位の空スロット1に、Pをスロット2に入れる。この実施例では、レコードコンテナは、1つのレコードを保持するスロットとして見なされるが、本発明はそのように限定されず、インデックス付けアルゴリズムはまた、複数のレコードを保持するバケットをもコンテナと見なすことを理解されたい。ここでは、説明を簡素化するため、単一のレコードスロットが使用される。
[080]このとき、もう1つのフィンガープリントRが提供され、Rは、同じハッシュ関
数から1及び2のハッシュ値を生成する(図11Dのテーブルを参照)。ハッシングアルゴリズムは、Rを左の位置、即ちスロット1に入れ、現在のエントリQを変位させるようになる(図11E)。Qはこのとき、H(Q)によって指定された他の任意選択の位置、即ち位置3に移動されるようになる。このアルゴリズムは、各レコードが空のスロットに入るまで、レコードを変位させ続けるようになる。
[081]この実施例では、「Rを挿入する」オペレーションを達成するため、インデック
ス付けアルゴリズムは、以下の読出し及び書込み要求を生成する。
1を読み出す(Qを得る)
2を読み出す(Pを得る)
1を書き込む(Rを書き込む)
3を読み出す(妥当性チェック)
3を書き込む(Q)
[082]最初の2つの読出しは、Rがインデックス内にすでに存在しているのではないこ
とを検証するために使用される。妥当性チェック(3を読み出す)は、スロット番号3が空であるかどうかを決定し、そうである場合、Qがスロット3に書込み可能となり、どのエントリもスロット3に再書込みされなかったとき、このアルゴリズムは終了される。スロット3が空でなかった場合、スロット3内の現在のエントリが別のスロットに移動されることが必要となる。我々がビットマップを有する場合、スロット3のコンテンツは既知であり、そうでない場合、我々は、そのステータスを決定するために、スロット3内のエントリを読み出す必要がある。各エントリは、そのエントリが有効であるかどうかを示す有効ビットを含む。有効とは、それが使用中である(且つ、その位置を現在占有しているものが変位されなければならない)ことを意味する。有効ではないとは、その位置が空であることを意味し、処理中のレコードがそこに書込み可能である。有効ビットのコンテンツもまた、あるメモリを犠牲にして、別のビットマップに格納されうる。
[083]カッコウハッシングアルゴリズムは、空のエントリに着地するまで、複数のエン
トリに渡って書き込み、以前のコンテンツを変位させ続けるという点において、再帰的である。実際には、この処理はめったに1回の変位を越えることはない。
[084]インデックス付けアルゴリズムは、バケット及び個々のレコードオペレーション
を共に有する。インデックス付けアルゴリズムは、1つのレコードを1つのコンテナ(スロット)に入れることとして(図11で)上述されるが、インデックス付けアルゴリズムによって、レコードがバケット、即ち、複数のレコードを含むバケットに集約されてもよいことは理解される。よって、上記の実施例は非限定的であり、概してレコードオペレーションを例示するものである。
[085]前述のように、個々のレコードの読出し及び書込みは、フラッシュメモリにとっ
て効率的ではないので、個々のレコードはバケットに集約される。図12は、各々が2つ以上のレコードを含む、4つのそのようなバケットを例示し、即ち、レコード位置0及び1を有するバケットB、レコード位置2及び3を有するB、レコード位置4及び5を有するB、並びに、レコード位置6及びxを有するBである。バケットサイズはフラッシュデバイスによって決定された最小書込みサイズ、即ち、完全ページ書込み又は部分ページ書込みの関数である(且つ、好ましくはそれに等しい)。典型的なバケットサイズは、4KBであってもよい。レコードの具体的な順序付けは、バケット内で必要とされない−−ルックアップオペレーション中にバケット全体が有効レコードについて検索されるので、レコードはバケット内のいかなる点でも挿入可能である。カッコウハッシングアルゴリズムによる置き換え時、バケット内のエントリはランダムに置き換えされうる。インデックス付けアルゴリズムは、よって、論理バケットを、ランダムな位置のように見えるものに、1つずつ書き込み、最終的にフラッシュアダプテーション層によって、フラッシュデバイスへのより大きい、物理的に隣接する(順次)書込みに集約される。
[086]図13は、バケットエントリ160の一例を例示する。4KBのバケットサイズ
は、下にあるデバイスの最小書込みサイズ、ここでは4KBのページに基づく。4KBのバケットは、バケットエントリ内のレコードの数を指定する、4バイトの最初のフィールド161を含む。4バイトのタグフィールド162は、論理バケット識別子を指定する。この識別子(タグ)は論理アドレスであり、物理的なものではない。変換テーブルは、アルゴリズムバケットアドレス(ABA)をフラッシュバケットアドレスFBAにマップする。キャッシュは、(CPUの用語で)仮想キャッシュとして動作し、各キャッシュライ
ン(エントリ)は、タグ、この場合はABAによって識別される。アルゴリズムがレコードを要求するとき、キャッシュを通過中にそれが知ることは、要求されたABAがキャッシュされることのみであり、ABAがマップされるところ(FBA)は、キャッシュの下端(例えば、図2Cにおける、BTTへの逆ポインタ313を参照)である。バケットは、複数のレコードR、R、R...を保持するためのフィールド163を含み、各レコードは、32バイトのサイズである。この例では、4KBのバケットは、1バケットにつき(4096−4−4)/32個のレコード、即ち、約127個のレコードを保持するようになる。
[087]図14は、一実施形態における、バケット、ページ及び消去ブロックの相対サイ
ズを例示する、フラッシュメモリデバイス164の概略図である。物理フラッシュデバイスは、2GBのサイズであるチップ(パッケージ)165である。チップ上に、2つのダイ(シリコンウエハ)166a、167bがある。各ダイ上に、2^14個の消去ブロックがあってもよく、各消去ブロック167は典型的には64KBである。ページ168は、書込み可能である最小サイズ、ここでは4KBであり、スタック(図9を参照)内のより上位で使用されるような、同じく4KBである、バケット169のサイズを決定する。
[088]図15は、物理フラッシュデバイス上の資源を追跡且つ調節するためのデバイス
管理層(図9の209)の一実施形態による、選ばれたコンポーネントを例示する。図15Aは、(上部に)複数のページ(バケット)170と、その後に続く、どのページが有効であるか(1は有効、0は有効でない)を示す、ページアロケーションマップ171を示す。この下は、将来トリムされることになるが、まだそうされていないページの、保留中トリムマップ172である。ページアロケーション及び保留中トリムマップは、前述のような本発明の様々な実施形態では、バケットが有効データを保持するかどうかを決定する(図1に例示されたバケット有効テーブル27を参照)するために使用されうる。
[089]図15Bは、消去ブロックインデックスによってインデックス付けされた、消去
ブロック記述子テーブル175の一例を例示する。各消去ブロック記述子エントリ176は、消去済みの数177、部分書込みの数178、部分読出しの数179、完全読出しの数180、完全書込みの数181、及び、誤りの数182を含む、複数のフィールドを含む。この情報は、本発明の様々な実施形態において前述されたように、フリー消去ブロックの生成において使用されうる。
F.更なる実施形態
[090]本発明は、本願と同日に出願され、2009年6月26日出願の米国仮特許出願
第61/269,633号に対する優先権を主張する、A.J.Beaverson及び
P.Bowdenによる、同時係属の、所有者が同じであるFile System(ファイルシステム)という名称の米国特許出願第__________号に記載された、ファイルシステムのインデックスを実装するために使用されうる。両出願に対する優先権が本明細書で主張され、各々の完全な開示はそれらの全体として参照により本明細書に組み込まれる。
[091]本発明の実施形態は、デジタル電子回路において、或いは、コンピュータハード
ウェア、ファームウェア、ソフトウェアにおいて、或いは、それらの組み合わせにおいて実装されうる。本発明の実施形態は、コンピュータプログラム製品として、即ち、情報キャリア内で、例えば、マシン可読ストレージデバイス内で、データ処理装置、例えば、プログラマブルプロセッサ、コンピュータ又は複数のコンピュータによる実行のため、或いはそれらのオペレーションを制御するために、有形に実施されたコンピュータプログラムとして実装されうる。コンピュータプログラムは、コンパイラ型又はインタープリタ型言語を含む任意の形式のプログラミング言語で書かれてよく、スタンドアロンのプログラム
又はモジュール、コンポーネント、サブルーチン若しくはコンピューティング環境で使用するために適した他のユニットを含む任意の形式で配置されうる。コンピュータプログラムは、1つのコンピュータ又は複数のコンピュータ上で実行されるように配置することができ、これら複数のコンピュータは、1つの場所にあるか又は複数の場所に渡って分散され通信ネットワークによって相互接続される。
[092]本発明の実施形態の方法ステップは、1つ又は複数のプログラマブルプロセッサ
がコンピュータプログラムを実行して、入力データに関して動作し、出力を生成することにより、本発明の機能を行うことによって、行われうる。方法ステップはまた、専用論理回路、例えば、FPGA(フィールドプログラマブルゲートアレイ)又はASIC(特定用途向け集積回路)によって行われてもよく、本発明の装置は、専用論理回路、例えば、FPGA又はASICとして実装されうる。
[093]コンピュータプログラムの実行に適したプロセッサは、例として、汎用及び専用
マイクロプロセッサ、及び、任意の種類のデジタルコンピュータの任意の1つ又は複数のプロセッサを含む。一般に、プロセッサは、命令及びデータを、読出し専用メモリ若しくはランダムアクセスメモリ又は両方から受信するようになる。コンピュータの必須要素は、命令を実行するためのプロセッサ、並びに、命令及びデータを格納するための1つ又は複数のメモリデバイスである。一般に、コンピュータはまた、データを格納するための1つ又は複数の大容量ストレージデバイス、例えば、磁気、光磁気ディスク若しくは光ディスクをも含むか、或いは、それらからデータを受信し、若しくはそれらへデータを転送するように動作可能に結合されるか、或いはその両方となる。コンピュータプログラム命令及びデータを実施するために適した情報キャリアは、例として、例えば、EPROM、EEPROM及びフラッシュメモリデバイス等、半導体メモリデバイスと、例えば、内蔵ハードディスク又はリムーバブルディスク等、磁気ディスクと、光磁気ディスクと、CD ROM及びDVD−ROMディスクとを含む、全ての形式の不揮発性メモリを含む。プロセッサ及びメモリは、専用論理回路によって補われるか又は専用論理回路に組み込まれうる。
[094]前述の記載は、本発明の範囲を例示するためのものであり、限定するように意図
されないことを理解されたい。
[001]本発明は、多数のレコードにスケールし、高トランザクションレートを提供するインデックスの構築のための方法及び装置に関する。
[002]幾つかの現代のファイルシステムは、ファイルデータ及び他の内部ファイルシステム構造(「メタデータ」)を格納するために、オブジェクトを使用する。ファイルは、多数の小さいオブジェクト、恐らくは4KB(2^12バイト)ほどの大きさに分割される。64TB(2^46バイト)に及ぶファイルシステムでは、例えば、これは、2^(46−12)=2^34、即ち、およそ160億個を超えるオブジェクトを追跡し続ける結果となる。
[003]これに関連して、オブジェクトは、バイナリデータのシーケンスであり、しばしばGUID(グローバル一意ID)であるか、或いはコンテンツの暗号ハッシュである、オブジェクト名を有するが、各一意のオブジェクトが一意の名前を有する限り、他の命名規則は可能である。オブジェクト名は通常、人とは対照的に、プログラムによる使用向けの固定長のバイナリ文字列である。オブジェクトサイズは任意であるが、実際には、典型的には2の累乗であり、512バイト(2^9)から最大1MB(2^20)に及ぶ。これに関連するオブジェクトは、Java(登録商標)及びC++等、プログラミング言語で使用されるようなオブジェクトと混同されるべきではない。
[004]全てのオブジェクトのインデックス(時として、ディクショナリ又はカタログと呼ばれる)は、ファイルシステムによって必要とされる。インデックス内の各レコードは、オブジェクト名、長さ、位置及び他の種々雑多な情報を含む場合がある。インデックスは、その主キーとして、オブジェクト名、オブジェクトの位置、又は場合によっては両方を有する場合がある。レコードは、数十バイト程度であり、32バイトは一例である。
[005]このインデックスにおける動作は、エントリを追加すること、エントリをルックアップすること、エントリに修正を行うこと、及び、エントリを削除することを含む。これらは全て、任意のインデックスにおいて行われる典型的な動作である。
[006]これらのファイルシステムはオブジェクトと共に働くので、ファイルシステムが受け入れ可能な性能レベルを得るために、インデックス付けソリューションは、容易に対処されない2つの課題を有する。
1)インデックス内のエントリの数が大変大きくなる可能性がある。上記の例では、各インデックスエントリが32(2^5)バイトである場合、インデックスは、2^(5+34)=2^39、即ち、512GBのメモリを要する。これは、現在のメモリ技術に高い費用対効果で適合しない。
2)インデックスに対する動作が大きい。商業的に実現可能なストレージシステムは、約256MB/秒(2^28バイト/秒)で行う必要のある場合がある。4KBのオブジェクトサイズでは、それは、毎秒2^(28−12)=2^16、即ち、64000個の動作である。ファイルシステムが典型的には他のデータ(オブジェクト)を内部で生成且つ参照することを考えれば、インデックス動作レートは、100000動作/秒を容易に上回る可能性がある。比較のポイントとして、現在の最先端のディスクは、よくても毎秒400個の動作しか行うことができない。
[007]必要な性能及び容量レベルを達成することは、DRAMメモリ技術又はディスク技術のみを使用するのでは実際的ではない。DRAMメモリは十分高速であるが、密度は十分ではない。ディスクは密度を有するが、性能を有していない。所望の特性に達するように、何れか(DRAMメモリ又はディスク)をスケールすることは、費用がかかり過ぎる。
[008]オブジェクト名は、それらの分布においても、アクセスパターンにおいても、一様であることが多いので、空間及び時間局所性によって決まる典型的なキャッシングスキームの効果は限られている。よって、インデックス付けの問題は、サイズにおいても、動作レートにおいても、困難である。
[009]本発明の一実施形態によれば、ユニフォームアクセスインデックス付け処理によって、ノンユニフォームアクセスメモリに格納されたインデックスにアクセスする方法が提供され、この方法は、
インデックス付け処理によって生成された論理バケット識別子を、メモリの物理バケット位置にマップして、インデックス内の各レコードデータエントリにアクセスするために、変換テーブルを維持するステップと、
インデックスに書き込まれる複数のレコードデータエントリをキャッシュ内に集めるステップであって、該ステップは、メモリの少なくとも1つの物理バケット位置へのエントリの集まりの後続の順次書込みに先立つ、ステップと
を含む。
一実施形態では、この方法は、
レコードデータエントリの集まりを、キャッシュからメモリのバケット位置へ、順次書込みとして書き込むステップと、
集まりのレコードデータエントリのためのバケット位置により、変換テーブルを更新するステップと
を含む。
一実施形態では、この方法は、
1つ又は複数の順次レコードデータエントリを、メモリからキャッシュへ読み出すステップと、
1つ又は複数のエントリが読み出されたメモリ内の物理位置を、フリーとして指定するステップと
を含む。
一実施形態では、この方法は、
ブロック内の任意の有効エントリをキャッシュに読み出すこと、及び、そのようなエントリが読み出されたメモリ内の物理位置を、フリーとして指定することによって、メモリ内の複数の順次物理バケット位置をフリーブロックとするステップを含む。
一実施形態では、
インデックス付け処理が、一律に配布され一意のインデックスキーに基づいて、インデックスへのランダムアクセス要求を生成する。
一実施形態では、
キーは、暗号ハッシュダイジェストを含む。
一実施形態では、
インデックス付け処理は、置き換えハッシングの処理を含む。
一実施形態では、
置き換え(displacement)ハッシングは、カッコウハッシング処理を含む。
一実施形態では、
メモリは、フラッシュ、相変化及びソリッドステートディスクのメモリデバイスのうちの1つ又は複数を含む。
一実施形態では、
メモリは、ランダム書込みアクセス時間、ランダム読出し−修正−書込みアクセス時間、順次書込み、アラインメント制約、消去時間、消去ブロック境界及び摩耗のうちの1つ又は複数によって制限される。
一実施形態では、
物理バケットのサイズは、メモリの最小書込みサイズを含む。
一実施形態では、
物理バケットのサイズは、ページ又は部分ページを含む。
一実施形態では、
メモリは、複数のページを含む消去ブロックを有する。
一実施形態では、この方法は、
メモリ内のどのバケット位置が有効であるかを追跡するためのバケット有効テーブルを維持するステップを含む。
一実施形態では、
メモリ内のバケットは、1つ又は複数のレコードデータエントリのセット、及び、バケット変換テーブルへのセルフインデックスを含む。
一実施形態では、
バケット内のレコードデータエントリは順序付けされない。
一実施形態では、この方法は、
メモリに順次書き込まれたレコードデータエントリを、キャッシュ内で読出し専用として指定するステップを含む。
一実施形態では、
バケット変換テーブルは、永続メモリに格納される。
一実施形態では、この方法は、
消去ブロック内のフリーバケットの数を追跡し、フリーバケットのしきい値が満たされたとき、フリー消去ブロックを生成するための処理を実施するステップを含む。
一実施形態では、
インデックス付け処理は、レコードが挿入、削除、ルックアップ及び修正のうちの1以上をされる要求に基づいて、インデックス付けオペレーションを行う。
一実施形態では、
インデックス付け処理は、インデックスのレコードを格納する物理バケットを読み出し該物理バケットに書き込むための、論理バケットオペレーションを提示する。
一実施形態では、
物理バケットオペレーションは、ランダム読出し及び順次書込みを含む。
一実施形態では、
物理バケットオペレーションは、トリムコマンドを更に含む。
一実施形態では、
メモリは、ノンユニフォーム読出し及び書込みアクセス、並びに、サイズ、アラインメント及びタイミングについての不変性によって特徴付けられた物理デバイス層を含む。
一実施形態では、
レコードデータエントリは、キー、参照カウント及び物理ブロックアドレスのためのフィールドを含む。
一実施形態では、
キーは、データの暗号ハッシュダイジェストを含み、
物理ブロックアドレスフィールドは、ストレージデバイス上に格納されたデータの物理ブロックアドレスへのポインタを含む。
一実施形態では、
論理バケット位置は、複数のハッシュ関数によって生成される。
一実施形態では、
メモリは、複数の消去ブロックを含むフラッシュメモリデバイスを含み、各消去ブロックは複数のページを含み、各ページは複数のバケットを含む。
本発明の別の実施形態によれば、
プロセッサによって実行されるとき、前述の方法のステップを行うプログラムコード手段を含むコンピュータプログラム製品が提供される。
本発明の別の実施形態によればコンピュータ可読媒体が提供され、このコンピュータ可読媒体は、ユニフォームアクセスインデックス付け処理によってノンユニフォームアクセスメモリに格納されたインデックスにアクセスする方法のための実行可能プログラム命令を含み、上記方法は、
インデックス付け処理によって生成された論理バケット識別子を、メモリの物理バケット位置にマップして、インデックス内の各レコードデータエントリにアクセスするために、変換テーブルを維持するステップと、
インデックスに書き込まれる複数のレコードデータエントリをキャッシュ内に集めるステップであって、該ステップは、メモリの少なくとも1つの物理バケット位置へのエントリの集まりの後続の順次書込みに先立つ、ステップと
を含む。
本発明の別の実施形態によれば、物理プロセッサと、コンピュータ可読媒体を含むメモリデバイスとを含むシステムが提供され、
該コンピュータ可読媒体は、ユニフォームアクセスインデックス付け処理によってノンユニフォームアクセスメモリに格納されたインデックスにアクセスする方法のための実行可能プログラム命令を含み、上記方法は、
インデックス付け処理によって生成された論理バケット識別子を、メモリの物理バケット位置にマップして、インデックス内の各レコードデータエントリにアクセスするために、変換テーブルを維持するステップと、
インデックスに書き込まれる複数のレコードデータエントリをキャッシュ内に集めるステップであって、該ステップは、メモリの少なくとも1つの物理バケット位置へのエントリの集まりの後続の順次書込みに先立つ、ステップと
を含む。
一実施形態では、
インデックスを格納するメモリは、ノンユニフォーム読出し及び書込みアクセス、並びに、サイズ、アラインメント及びタイミングについての不変性によって特徴付けられた物理デバイス層を含む。
一実施形態では、
インデックスを格納するメモリは、フラッシュ、相変化及びソリッドステートディスクのメモリデバイスのうちの1つ又は複数を含む。
一実施形態では、
インデックスを格納するメモリは、複数の消去ブロックを含むフラッシュメモリデバイスを含み、各消去ブロックは複数のページを含み、各ページは複数のバケットを含む。
本発明の別の実施形態によれば、ユニフォームアクセスインデックス付け処理によって、ノンユニフォームアクセスメモリに格納されたインデックスにアクセスする方法が提供され、この方法は、
インデックス内のレコードデータエントリごとに論理バケット識別子をメモリの物理バケット位置にマップする変換テーブルに、インデックス付け処理によって生成された論理バケット識別子を提供するステップと、
論理バケット識別子にマップされた物理バケット位置にアクセスするステップと、
インデックスに書き込まれるレコードデータエントリをキャッシュ内に集めるステップと、
続いて、レコードデータエントリの集まりを、キャッシュから、メモリの少なくとも1つの新しい物理バケット位置におけるインデックスに順次書き込むステップと、
変換テーブルを更新して、少なくとも1つの新しい物理バケット位置を論理バケット識別子に関連付けるステップと
を含む。
本発明の別の実施形態によればあるコンピュータシステムが提供され、このコンピュータシステムは、
ノンユニフォームアクセスメモリであって、メモリの物理バケット位置においてレコードデータエントリを含むインデックスが格納される、ノンユニフォームアクセスメモリと、
ユニフォームアクセスインデックス付け処理によって生成された論理バケット識別子を、レコードデータエントリの各々のためのメモリの物理バケット位置にマップするための、変換テーブルと、
インデックスに書き込まれる集められたレコードデータエントリのためのキャッシュと、
メモリの物理バケット位置にアクセスする手段であって、該物理バケット位置は、インデックス付け処理によって変換テーブルに供給された論理バケット識別子にマップされた、手段と、
レコードデータエントリの集まりを、キャッシュから、メモリの少なくとも1つの物理バケット位置のインデックスに順次書き込む手段と、
変換テーブルを更新して、少なくとも1つの物理バケット位置を論理バケット識別子に関連付ける手段と
を含む。
[010]本発明は、以下の図面と共に、詳細な説明を参照することによって、より十分に理解される。
本発明の一実施形態により行われる、様々なインデックス付けオペレーションを例示する概略ブロック図である。 本発明で使用されうるデータ構造の様々な実施形態を例示する図である。 本発明で使用されうるデータ構造の様々な実施形態を例示する図である。 本発明で使用されうるデータ構造の様々な実施形態を例示する図である。 本発明で使用されうるデータ構造の様々な実施形態を例示する図である。 本発明の一実施形態によるルックアップオペレーションを例示する概略ブロック図である。 本発明の一実施形態による挿入オペレーションを例示する概略ブロック図である。 本発明の一実施形態による削除オペレーションの概略ブロック図である。 本発明の一実施形態による更新オペレーションの概略ブロック図である。 本発明の一実施形態によるフリー消去ブロックを生成するためのランダム読出し処理を例示する概略ブロック図である。 本発明の一実施形態によるフリー消去ブロックを生成するためのランダム読出し処理を例示する概略ブロック図である。 スキャベンジング処理に従ってフリー消去ブロックを生成する別の方法を例示する概略ブロック図である。 スキャベンジング処理に従ってフリー消去ブロックを生成する別の方法を例示する概略ブロック図である。 本発明の実装を例示するための6層のビュー又はスタックを例示する概略ブロック図である。 本発明の一実施形態で使用されるようなレコードエントリの概略図である。 図11A〜11Eは、本発明の一実施形態によるカッコウハッシングの実装を概略的に例示する図である。 本発明の一実施形態による、各バケットが複数のレコードを保持する、複数のバケットの概略的例示の図である。 本発明の一実施形態によるバケットのコンテンツの概略図である。 本発明の一実施形態による、複数のダイ、消去ブロック、ページ及びバケットを有する物理フラッシュチップの一例を例示する概略ブロック図である。 図15A〜図15Bは、本発明の一実施形態によるデバイス管理層のあるコンポーネントを例示する図である。
A.概観
[011]本発明の1つ又は複数の実施形態によれば、特化されたメモリ技術及びアルゴリズムが使用されて、多数のレコード及びトランザクション要件を同時に有するインデックスが構築される。一実施形態は、置き換え(displacement)ハッシングインデックス付けアルゴリズム、例えばカッコウハッシングを利用する。本発明は、フラッシュ、相変化及びソリッドステートディスク(SSD)メモリデバイス等、ノンユニフォームアクセスメモリ技術の使用を可能とする。
[012]本発明の様々な実施形態では、メモリデバイスが、メモリデバイスにとって効率的であるIO(入力/出力)パターンに遭遇しながら、インデックス付けアルゴリズムがアルゴリズムにとって自然(効率的)である方法で行うことを保証するために、新しいデータ構造及び方法が提供される。
[013]インデックス付けアルゴリズムによって見なされた論理バケットを、メモリデバイス上の物理バケットにマップする、あるデータ構造である間接指定テーブルが作成される。このマッピングは、ノンユニフォームアクセスメモリデバイスへの書込み性能が強化されるようにするものである。
[014]キャッシュの追い出し及びライトバックポリシーの一部として、バケットを集め、メモリデバイスへ順次書き出すために、別のデータ構造である連想キャッシュが使用される。
[015]インデックス付けアルゴリズムによって必要とされる(レコードの)バケットでキャッシュをポピュレートするために、方法が使用される。追加のバケットは、デマンド読出し中に又はスキャベンジング処理によって、メモリデバイスからキャッシュへ読み出されてもよい。
[016]間接指定テーブルと併せた、キャッシュの使用は、メモリデバイスへの大きい順次書込みを可能にする。
[017]フラッシュ技術は、インデックス付け問題のために必要とされた容量及びIOレートを達成する基本機能を有するが、フラッシュアクセス特性はノンユニフォームである。このノンユニフォーム性はかなり十分なので、通常のインデックス付けアルゴリズムは、フラッシュメモリデバイスと共に、たとえ機能するとしても、うまく機能しない。
[018]本発明で使用されるノンユニフォームアクセスフラッシュメモリは、数百から数千ビットもの大きいブロックサイズで、即ち、バイトレベルのランダムアクセスではなく、読出し、書込み及び消去が行われなければならない、電気的消去可能プログラマブル読出し専用メモリ(EEPROM)である。物理的には、フラッシュは、フローティングゲートトランジスタからなるメモリセルのアレイに情報を格納する、不揮発性メモリ形式である。2つのタイプのフラッシュメモリデバイス、NANDフラッシュ及びNORフラッシュがある。NANDフラッシュは、NORフラッシュより高密度及び大容量をより低コストで提供し、より高速な消去、順次書込み及び順次読出し速度を有する。本願において、且つ本発明において使用されるとき、「フラッシュ」メモリは、NANDフラッシュメモリを包含するものであり、NORメモリを包含しないものである。NANDは、各セルが1ビットの情報のみを格納するシングルレベルセル(SLC)デバイス、及び、1つのセルにつき2ビット以上を格納することができる、より新しいマルチレベルセル(MLC)デバイスを共に含む。NANDフラッシュは高速なアクセス時間を提供するが、PC内でメインメモリとして使用された揮発性DRAMメモリほど高速ではない。フラッシュメモリデバイスは、フラッシュファイルシステムを含んでも含まなくてもよい。フラッシュファイルシステムは、典型的には、ウェアレベリング及び誤り訂正を行うために内蔵コントローラを有していない、内蔵フラッシュメモリと共に使用される。
[019]典型的なNANDフラッシュチップは、数GBのコンテンツを格納してもよい。コンピュータに取り付けられたメモリとは異なり、フラッシュチップ上のメモリは、あるサイズで、且つ、ある境界上でアクセスされなければならない。更に、メモリのセクションに書き込まれた後、それらのメモリ位置が再び書込み可能となる前に、消去オペレーションが行われなければならない。また、位置は徐々になくなるので、全ての位置が同様の数の書込みを得ることを保証することは、使用を更に複雑にする。読出し時間、書込み時間及び消去時間は、大幅に(数マイクロ秒から数ミリ秒まで)変わる可能性がある。よって、タイミング、ウェアレベリング及びアラインメント制約は、フラッシュの実際的な使用を困難にするのがせいぜいである。
[020]フラッシュメモリデバイスは、1つ又は複数のダイ(シリコンウエハ)を含んでもよい。各ダイは、大部分では、独立してアクセスされうる。
[021]ダイは、数千もの消去ブロックからなる。消去ブロックは典型的には、128〜512KBのサイズである。データがクリアされる必要があるとき、消去ブロック境界上でクリアされなければならない。
[022]NANDフラッシュのもう1つの制限は、データが順次書き込まれることのみが可能であることである。更に、書込みのためのセットアップ時間は長く、読出しのセットアップ時間のおよそ10倍である。
[023]データは、ページ粒度で読み出される。ページは、特定のフラッシュチップに応じて、1KBから4KBまでに及ぶ場合がある。各ページに関連付けられるものは、誤り訂正符号(ECC)チェックサムのために使用されうる、数バイトである。
[024]データは、ページ粒度で書き込まれる。書き込まれた後、ページは、(当該ページを含む)その消去ブロックが消去されるまで、再度書き込むことができない場合がある。消去ブロックは、数十から100を超えるページを含む場合がある。
[025]上記の読出し及び書込みページ粒度に対する1つの例外は、サブページ書込み、又は、部分ページプログラミングである。技術に応じて、ページは、消去が必要とされる前に最大4回、部分的に書き込ことができる場合がある。
[026]NANDフラッシュブロック内のページは順次、且つ、ブロック消去オペレーションとブロック消去オペレーションとの間に一度のみ書き込まれうるので、後続の書込みは、典型的には異なるフラッシュブロック内に位置する異なるページへの書込みを必要とする。ブロック消去の問題点は、フラッシュファイルシステムの機能である、書込み可能フラッシュブロックのプールを作成することによって、対処される。
[027]消去ブロックを消去することは、数ミリ秒を取りうるので、時間的に最も費用のかかるオペレーションである。(トラフィック的に)多用されるデバイスでは、消去ブロックが生成されうる速度(即ち、どのくらい速くフリー消去ブロックが使用可能にされうるか)は、フラッシュ設計における制限要因であることが多い。
[028]多数のSSD(ソリッドステートディスク)は、フラッシュ技術を使用する。SSDにおけるファームウェアは、フラッシュ変換層(FTL)と呼ばれる層において、前述のアクセスの問題点に対処する。そうすることにおいて、しかし、ファームウェアは、どのようにSSDが使用されるか(例えば、大部分は読出し、大部分は書込み、読出し及び書込みのサイズ及びアラインメント)について仮定を行い、これらの仮定の結果として、SSDの性能特性は、インデックス付けアルゴリズムにとって準最適であることが多い。
[029]人が文献において、また実際に発見する多数のインデックス付けアルゴリズムは、ユニフォームメモリアクセスモデルに基づいており、即ち、全てのメモリが、読出しでも書込みでも時間的に等しくアクセス可能であり、アクセスサイズ又はアラインメントにおけるいかなる一次制約もない。
[030]インデックス付けソリューションを考察する場合、挿入、削除、ルックアップ及び修正等のオペレーションは典型的には、より多くの多様な時間の量を必要とし、ブロック、典型的には小さいブロック(4KBくらい)の読出し及び書込みは、より短い時間を必要とする。ブロックはランダムであるように見え、即ち、任意のブロックが読み出されてよく、任意の他のブロックが書き込まれてよい。幾つかのアルゴリズムでは、ランダム読出し−修正−書込みIOプロファイルがあり、即ち、ランダムブロックが読み出され、次いで、わずかに修正されたデータで同じ位置に書き戻される。
[031]インデックス付けアルゴリズムの効率的な動作を必要とするこのランダムIOは、フラッシュが提供するように意図されるものではない。フラッシュは、ランダム読出しをうまく扱うことができるが、読出し−修正−書込みがそうであるように、ランダム書込みは困難である。この理由は、すでに書き込まれたものを上書きすることはできず、まずそれを消去しなければならないからである。この状況を更に複雑にすることには、消去は時間を要し、大きい境界(典型的には64KB)上で起こらなければならない。
[032]消去ブロックが消去されるとき、そのブロック内のいかなる有効データも他のところへ移動される必要がある。アルゴリズムがフラッシュデバイス中でランダムな4KBブロックを書き込む場合、単純な実装は、その間ずっとブロックが消去され続ける結果となる。消去時間は遅いので、性能がかなり損なわれることになる。
[033]本発明によれば、フラッシュへの書込みを順次にすることを可能にするため、インデックス付けアルゴリズムが期待する論理ランダムアクセスをなお保ちながら、変換又は間接指定テーブルが作成される。このテーブルは、インデックス付けアルゴリズムによって必要とされるような(レコードの)論理バケットを、フラッシュデバイスの物理バケット(例えば、ページ)にマップする。
[034]インデックス付けアルゴリズムがバケット(例えば、フラッシュからのデータのページ)を読み込むとき、バケットコンテンツを修正(挿入、更新又は削除オペレーション)するために、バケットはキャッシュに移動される。フラッシュデバイス上の対応するバケットにはこのとき、有効ではない(フリー)としてマークが付けられうる。SSDの場合、これはTRIMコマンドの形式を取りうる。
[035]本発明の更なる実施形態によれば、フリー消去ブロックを生成するために、方法が提供される。いかなる所与の時間でも、消去ブロックは、有効及び無効データの組み合わせを有する場合がある。消去ブロックを解放するため、全ての有効データは、そのブロックから離れるように移動されなければならない。これを達成するために使用されうる、2つの機構がある。1つは、インデックス付けアルゴリズムによって生成されたランダム読出しを使用して、(インデックス付けアルゴリズムによって必要とされるよりも)より多くを読出し、消去ブロックを解放するようにすることである。インデックス付けアルゴリズムはランダム読出しを生成する傾向があるので、経時的に、全ての消去ブロックは最終的に読み出され、空のページのために集積される。例えば、読出しを含む消去ブロックが、幾つかのフリーページ及び幾つかの有効ページを有する場合、アルゴリズムは、消去ブロック全体を読み込み、且つ、全ての有効ページをキャッシュに入れることを選択してもよい。これは、後続の消去及び次いで書込みのために、その消去ブロックを解放する効果を有する。
[036]別法として、例えば、前述のランダム読出し処理が十分に高速でない場合、消去ブロックを読み出し、別の消去ブロックと合体するために有効ページをキャッシュに入れるために、分離したスキャベンジング処理(例えば、スレッド)が使用されうる。
[037]キャッシュが一杯になるとき、エントリが書き出されなければならない。キャッシュエントリのセットが集められ、複数の部分ページ(部分ページ書込みがフラッシュデバイスによって可能にされる場合)、複数のページ及び1つ又は複数の消去ブロックのうちの1以上の隣接又は連続するセットへと、順次書き込まれるようになる。キャッシュエントリがフラッシュデバイスに書き込まれるとき、間接指定テーブルは更新されるので、インデックス付けアルゴリズムはなお、エントリが固定された論理アドレスにあるものと見なす。
B.インデックス付けオペレーション
[038]本発明の様々な実施形態がここで、添付の図1〜6を利用して説明され、本発明に従って行われた様々なインデックス付けオペレーションが例示される。図7〜8は、ストレージ媒体(例えば、フラッシュメモリ)の効率的利用のためにフリー消去ブロックを生成する、2つの方法を例示する。これらの実施形態は例示的なものであり、限定するものではない。
[039]図1は、本発明の一実施形態による、バケット変換テーブル17及びキャッシュ23を利用する幾つかのインデックス付けオペレーションの概観である。図1の上部に、3つのインデックスオペレーション12〜14が、ルックアップ関数15及び変換関数16への代替入力として示される。第1のインデックスオペレーション12は、キーのための(レコードエントリ)から衛星データを返すための「キーをルックアップする」である。第2のインデックスオペレーション13は、キーのためのレコードエントリを更新(修正)するための「キーのための衛星データを更新する」である。第3のインデックスオペレーション14は、新しいレコードエントリを挿入するための「新しいキーを挿入する」である。もう1つのインデックスオペレーションである削除は、図1では図示されないが、図5に関して後述される。
[040]全ての3つのインデックスオペレーションは、最初にルックアップ関数15を行い、キーのある関数f(キー)が使用されて、インデックスが生成され、ここでは、ハッシュテーブルルックアップをサポート(例えば、加速)する論理バケット識別子である。バケット識別子(インデックス)は、変換関数16への入力であり、論理バケット識別子のある関数f(インデックス)は、フラッシュメモリ内の物理バケット位置を生成する。この変換関数はバケット変換テーブル17によって実装され、バケット変換テーブル17は、対象フラッシュメモリ位置(フラッシュ内の物理バケット位置)への(インデックス付けアルゴリズムによって提供されるような)論理バケット識別子のマップである。フラッシュメモリ26に格納されたディクショナリ(インデックス)は、ルックアップキー(例えば、オブジェクト名)を衛星データ(例えば、ディスク上に格納されたオブジェクトへの位置ポインタ)にマップするレコードを備えてもよい。
[041]次に、3つのインデックス付けオペレーションのうちどれが行われているか(ルックアップ、更新又は挿入)に応じて、図1の下半分に示されたステップのうち1つ又は複数が行われる。
[042]ルックアップオペレーション18では、変換関数によって識別されたバケットエントリは、キャッシュルックアサイドによる、フラッシュメモリ内の対象バケット22からの読出し30である(例えば、対象バケットがキャッシュに格納される場合、フラッシュメモリ26からではなく、キャッシュ23から読み出されてもよい)。
[043]更新オペレーション19では、変換関数によって識別されたバケットエントリ(元のバケットエントリ)が、フラッシュメモリの消去ブロック21a内の対象バケット22(又はキャッシュ)から読み出され30、バケットが更新され、キャッシュへ移動され32、且つ、後続の書込み24では、複数のキャッシュバケットエントリが、フラッシュメモリ内の複数の部分ページ、複数のページ、及び、複数の消去ブロック(例えば、新しい消去ブロック21b)のうちの1以上の隣接又は連続するセットに順次読み出される。この処理は、フラッシュ内の全ての移動されたバケットのステータスを、有効ではないデータ(例えば、フリー、又は、トリムオペレーションのために使用可能)に更新する33。
[044]挿入オペレーション20では、対象バケットがフラッシュから再度読み出され、修正されたバケットエントリが、フラッシュメモリ内の新しい位置への後続の順次書込み24のために再度、キャッシュに移動される34。
[045]図1は、隣接又は連続するフラッシュメモリバケットへの、キャッシュバケットエントリの集まりの順次書込み24を行うことに先立って、複数のバケットエントリを集めるためのキャッシュ23を概略的に示す。一実施形態では、スキャベンジングオペレーション25が、フリー消去ブロックを作成するために使用され、この処理は、スキャベンジング処理中に(消去ブロックからの)任意の有効バケットをキャッシュに格納すること、及び、フラッシュ消去ブロックをフリーとして再割振りすることを含む。
[046]図2に例示された新しいデータ構造の考察に続いて、図1で参照されたインデックス付けオペレーションが、図3〜6のフロー図に関してより具体的に説明される。
C.データ構造
[047]図2は、本発明において有用なデータ構造の様々な実施形態を例示する。そのようなデータ構造は例示的なものであり、限定するものではない。
[048]図2Aは、(インデックス付けアルゴリズムによって生成された)論理バケットインデックスを、物理フラッシュバケットアドレスに変換するための、バケット変換テーブル(BTT)300の一実施形態を例示する。BTTテーブルエントリは、3つのフィールド、即ち、有効301、フラッシュ物理バケットアドレス302、及び、拡張バケット状態303を有して図示される。バケットアドレス粒度は、フラッシュデバイスの最小書込みサイズであり、即ち、(例えば、SLC NANDでの)部分ページ書込み、又は、(例えば、MLC NANDでの)ページ書込みである。BTTは、論理から物理バケットエントリへの1:1マッピングである。このテーブルは、より高いランダム性能(インデックス付けアルゴリズムによるランダム読出し及びランダム書込み)のために、フラッシュバケット割当ての再編成を可能とする。アルゴリズムのアクセラレーションを可能とするために、追加の状態情報がBTTへ、第3のフィールド内に追加されてもよい。
[049]図2Bは、バケット有効テーブル(BVT)305の一実施形態を示す。このテーブルは、トリミングのためのブロックへのバケットのスキャベンジングを管理するために、フラッシュ内のどの物理バケットが有効であるかを追跡する。一例として、有効とラベル付けされたフィールド306は、小型のビット配列(1ビット/バケット)であってもよい。BVTのサイズは、フラッシュバケットエントリの総数であり、そのサブセットのみがBTTによって使用中である。
[050]図2Cは、バケット内に含まれた複数のレコード310、311、312...を、逆BTTポインタ313(バケット変換テーブル17へのセルフインデックス)と共に有する、フラッシュバケット309の一実施形態を例示する。よって、各バケットは、1つ又は複数のレコードのセット、及び、フラッシュバケット(例えば、ページ)が挿入、移動又は削除されるとき、BTTを更新するための逆ポインタを含む。バケットの各要素(レコード又はポインタ)には、データ構造の個々の信頼性を向上させ、且つ、ストレージデバイスの有用寿命を著しく延ばすために、追加のECCビット等、冗長コンテンツが追加されてもよい。例えば、任意選択のシーケンス番号フィールドが、停電発生中にデータ一貫性チェックを行うためにフラッシュバケット309に追加されてもよく、他の最適化フラグも同様に提供されてもよい。
[051]レコードサイズはバケットサイズに比べて小さいので、これは、個々のレコードベースで追加の誤り回復情報を実装する(任意選択の)機会を提供する。この任意選択の機能は、訂正される可能性があるので下にあるストレージ技術の実効動作寿命を延ばす可能性のある、ビット誤り及び障害の数を増すことによって、ソリューションの全体の信頼性を向上させるようになる。
[052]図2Dは、複数の消去ブロック316(1からM)を含む、SLC NANDフラッシュデバイス315の一例を示す。各消去ブロックは、複数のページ317(1からN)を含む。この例では、各ページは4KBであり、各ページは複数のバケット318(1からB)を含み、各バケットは1KBである。この例では、デバイスは部分ページ書込みをサポートする。
[053]バケットは、フラッシュデバイスの最小書込みサイズを表現する。典型的には、バケットは1ページとなる。部分ページ書込みが可能にされる場合、1ページにつき4つのバケットをサポートする4部分ページSLC NANDデバイス等、1フラッシュページにつき1つ又は複数のバケットが提供されてもよい。
[054]1つの消去ブロックにつき、複数のフラッシュページが提供される。1つのフラッシュデバイスにつき複数の消去ブロックがあり、各ブロックは個々に消去される。
[055]典型的なフラッシュサブシステムは、複数のフラッシュデバイスからなる。NANDフラッシュデバイスは、消去オペレーションと消去オペレーションとの間に所与のブロック内で1ページ(又は部分ページ)につき1回、順次書き込まれ、複数のブロックが、同時に書込み及び読出しを行うために使用可能である。
D.処理フローチャート
[056]図3は、キーの存在を検証し、関連付けられた衛星データを返すためのルックアップオペレーション処理の一実施形態を例示する。ステップ1 41で、ルックアップキーがルックアップ関数に入力される。ステップ2 42で、ルックアップ関数f(キー)は、ハッシュテーブルルックアップをサポート(例えば、加速)する論理バケット識別子を生成する。論理バケット識別子は変換関数に入力され、変換関数は、ステップ3 43で、バケット変換テーブル(BTT)17を介してフラッシュメモリ(物理バケット)位置にマップされる。ステップ4 44で、バケットがキャッシュに格納されるまで、フラッシュメモリ内の対象バケットがフラッシュメモリから読み出され45a、バケットがキャッシュに格納された場合、キャッシュ23から読出し可能である45b。ステップ6 46で、キーのための衛星(レコード)データがインデックス付けアルゴリズムに返される。
[057]図4は、挿入オペレーション処理の一実施形態を示す。最初のステップ71は、キーをルックアップ関数に入力する。ステップ2 72で、ルックアップ関数f(キー)は、インデックス、ここでは論理バケット識別子を生成する。ステップ3 73で、バケット識別子が変換関数に入力され、変換関数は、バケット変換テーブル(BTT)17を利用して、バケット識別子を、挿入が起こるべきフラッシュメモリ物理バケット位置へマップする。ステップ4 74で、挿入処理は、対象バケット位置を変換関数から受信する。ステップ5 75で、挿入処理は、対象バケット22をフラッシュメモリの消去ブロック21aから75a、或いはキャッシュから75b、読み出す。ステップ6 76で、挿入処理は、レコードエントリを対象バケットに挿入し、修正済みバケットをキャッシュに書き込む。ステップ7 77で、挿入処理によって、複数のバケットエントリ(修正済み対象バケットを含む)がキャッシュ73から読み出される。ステップ8 78で、挿入処理は、キャッシュから読み出された修正済み対象バケット及び他のバケットを、フラッシュ26内の新しい位置(消去ブロック21b内のページ)へ書き込む。ステップ9 79で、挿入処理は、キャッシュからフラッシュへ移動された全てのバケットのための新しい位置により、バケット変換テーブル17を更新し79a、また、移動された全てのバケットについて、BVT内のバケット有効エントリをも更新する79b。ステップ10 80で、挿入処理は、移動されたキャッシュエントリに、読出し専用(使用可能)とマークを付ける。ステップ11 81で、挿入処理は、元のフラッシュバケット(このとき、新しい消去ブロックに移動済み)に、フリーとしてマークを付ける。
[058]図5は、削除オペレーション処理の一実施形態を例示する。最初のステップ91では、キーがルックアップ関数に提供される。ステップ2 92で、ルックアップ関数f(キー)は、インデックス、ここでは論理バケット識別子を生成する。ステップ3 93で、バケット識別子が変換関数に提供され、変換関数は、バケット変換テーブル17を利用して、バケット識別子を物理フラッシュメモリバケット位置へマップする。ステップ4 94で、削除処理は、フラッシュメモリ位置を受信する。ステップ5 95で、対象バケットがフラッシュから読み出される。ステップ6 96で、処理は、バケット内の元のレコードエントリを削除し、修正済みバケットを(削除済みエントリと共に)キャッシュ23に書き込む。ステップ7 97で、バケットのグループ(集まり)がキャッシュから読み出される。ステップ8 98で、キャッシュ23から読み出された更新済み対象バケット及び他のバケットが、フラッシュ内のフリーページの隣接又は連続するセットに順次書き込まれる。ステップ9 99で、削除処理は、全ての移動されたバケットのためのフラッシュ内の新しい位置により、バケット変換テーブルを更新し99a、BVT内のそれらのバケット有効ステータスを更新する99b。ステップ10 100で、削除処理は、キャッシュエントリに、読出し専用としてマークを付ける。ステップ11 101で、削除処理は、このとき、フラッシュ内の新しい位置に移動された元のフラッシュバケットに、フリーとしてマークを付ける。
[059]図6は、フラッシュメモリに格納されたインデックス内のレコードを修正するための更新オペレーション処理の一実施形態を例示する。最初のステップ51で、キーが入力としてルックアップ関数に提供される。ステップ2 52で、ルックアップ関数f(キー)は、インデックス、ここでは論理バケット識別子を生成する。バケット識別子は変換関数に入力される。ステップ3 53で、変換関数は、バケット変換テーブル17を利用して、バケット識別子を、更新が起こるべきフラッシュメモリ内の物理バケットへマップする。ステップ5 55で、対象バケットはフラッシュから55a、或いはキャッシュから55b、読み出される。ステップ6 56で、エントリを更新した後、更新済みバケットがキャッシュ23に書き込まれる。ステップ7 57で、バケットのグループがキャッシュ23から読み出され、ステップ8 58で、キャッシュからフラッシュメモリ26内の新しい位置へ順次書き込まれる。ステップ9 59で、更新処理は、全ての移動されたバケットのための新しい位置により、バケット変換テーブル17を更新し59a、BVT内のそれらの有効ステータスを更新する59b。ステップ10 60で、更新処理は、移動されたエントリに、キャッシュ23内で読出し専用(及び、よって上書きされるために使用可能)としてマークを付ける。最後に、ステップ11 61で、更新処理は、このとき新しい位置に移動された元のフラッシュバケットに、フリー(使用可能)としてマークを付ける。
[060]図7Aは、フリー消去ブロックを生成するための処理の一実施形態を例示し、(ルックアップ、挿入又は修正等、アップストリームインデックス付けオペレーションによって生成された)デマンド読出しは、(対象バケットと)同じ消去ブロック内の追加のバケットを読み出す。図7Aで、この処理は、更新要求と共に例示される。ステップ1 111で、キーがルックアップ関数に提供される。ステップ2 112で、ルックアップ関数f(キー)は、インデックス、ここでは論理バケット識別子を生成する。ステップ3 113で、バケット識別子が、フラッシュ内の物理対象バケット位置にマップされる。ステップ4 114で、更新及びスキャベンジ処理は、対象フラッシュメモリ位置を受信する。ステップ5 115で、処理は、対象バケットと同じ消去ブロック内の全ての有効バケットを識別する。ステップ6 116で、更新処理は、対象バケット及び全ての識別された有効バケットを、対象バケットを含むフラッシュブロックから読み出す。ステップ7 117で、処理は、対象バケット内のレコードエントリを更新し、フラッシュブロックからの全ての有効バケットをキャッシュ23に書き込む。ステップ8 118で、更新処理は、キャッシュからブロックのグループを読み出す。ステップ9 119で、更新処理は、キャッシュ23から読み出された更新済み対象バケット及び他のバケットを、フラッシュ26に書き込む。ステップ10 120で、更新処理は、移動された(キャッシュからフラッシュ内の新しい消去ブロック21bに書き込まれた)全てのバケットのための新しい位置により、バケット変換テーブル17を更新し120a、BVT内のバケットエントリを更新する120b。ステップ11 121で、更新処理は、このとき古いキャッシュエントリに、読出し専用としてマークを付ける。ステップ12 122で、更新処理は、元のフラッシュブロック(対象ブロック内の全てのバケット)に、フリーとしてマークを付ける。
[061]図7Bは、フリー消去ブロックを生成するためにのみ記載された、ランダム読出し処理の特定の実施形態を例示する。
[062]この実施形態では、置き換えハッシングインデックス付けアルゴリズム125は、論理バケット126を生成する。インデックス付けアルゴリズムによって見なされる論理バケットサイズは、インデックス付けアルゴリズム及びフラッシュメモリが互換性を有するように、フラッシュ消去ブロックサイズに関連付けられる。これらのバケットは、インデックス読出し及び更新の結果として、ランダムに読み出されるようになる。
[063]バケット変換(間接指定)テーブル127は、論理バケットインデックスを物理フラッシュデバイスバケット位置に変換する。この間接指定テーブルは、インデックス付けアルゴリズムが、読出し、書込み及び更新のために、ランダムに動作し、且つ、フラッシュデバイスレベルで行われる大きい順次書込みをなお有することを可能とする。好ましくは、間接指定テーブルは永続メモリに格納されるが、揮発性メモリに格納される場合、必要に応じて再構築されうる。
[064]間接指定テーブルの出力、即ち、物理デバイスバケット位置は、入力として、完全連想バケットキャッシュ128に提供される。この実施形態では、空の消去ブロックfifo129のコンテンツがハイウォーターマークQ未満である場合、消去ブロック全体(対象4KBバケットを含む)が読み出される。
[065]消去ブロックは論理バケットをホストし、典型的な構成は、1つの消去ブロックが16個の4KB論理バケットを保持するものである。物理デバイスは、負荷、例えば、90%のために構成され、バケットの90%が使用中であることを意味する。キャッシング及び犠牲化(victimization)(追い出し)は、残りのバケットの10%の大部分がフリー消去ブロックに集中させられるように、フラッシュメモリ内で論理バケットをパックする(集中させる)ために、使用される。
[066]キャッシュ犠牲化(追い出し処理)は、キャッシュ内に集められた16個のバケットを取り、それら16個のバケットをキャッシュからフリー消去ブロック130に書き出す。消去ブロックはランダム読出しオペレーションによってランダムに触れられるので、読出しオペレーションは、フリー消去ブロックを生成するために使用されうる。論理バケット識別子を生成するための暗号ハッシュ関数の使用は、読出しオペレーションのランダム性を増大させ、よって、フリー消去ブロックのランダム読出し生成を改善するようになる。
[067]図8A及び8Bは、フリー消去ブロックを生成するための代替スキャベンジング処理を例示する。このスキャベンジング処理は、何れかのインデックス付けオペレーションの一部ではない。むしろ、より下位レベルのデバイス管理層の一部として実装される。この処理では、フラッシュ消去ブロック内の物理バケットのグループ(一部又は全部)がフラッシュから直接読み出され、バケット有効テーブル27が、消去ブロック内のどのバケットが有効であるかを決定するために使用される。
[068]図8Aに例示されるように、ステップ1 220で、スキャベンジング処理25は、完全な消去ブロック21aを読み出す。ステップ2 222で、スキャベンジング処理は、バケット有効テーブル27を使用して、有効であるそれらの読出しの全てのバケットを識別する。ステップ3 224で、各有効バケットについて、論理バケット識別子がバケットから抽出される。ステップ4 226で、有効バケットがキャッシュ23に格納され、各々はその論理バケット識別子によってインデックス付けされる。
[069]図8Bは、ステップ1で、スキャベンジング処理25がバケット[94,97]を、94及び97を含めて読み出す一例を示す。ステップ2で、処理は、95及び96でのバケットが有効であると決定する。有効バケットは、「1」によって指定されたバケット有効テーブルにおいて示され、非有効バケットは「0」による。ステップ3で、バケット95及び96のための論理バケット識別子、即ち、タグ23及び49がそれぞれバケットから抽出される。ステップ4で、この2つのタグ並びにそれらの各バケット95及び96は、それらの各タグ23、49をインデックスとして使用して、キャッシュに挿入される。
E.スタックレベルビュー及び実装
[070]本発明のもう1つのより具体的な実施例が、ここで図9〜16を参照して説明される。
[071]図9は、物理フラッシュメモリデバイス211によって望まれるものとは大変異なるビューである、インデックス付けアルゴリズム203によって望まれたIO使用プロファイルビューを、フラッシュアダプテーション層207が適合させる、本発明の一実装を例示するための6層のビュー又はスタック200を示す。最高レベル201で、レコードのディクショナリ(インデックス)が提供され、それに対して、あるインデックス付けオペレーション204(レコードをルックアップ、削除、挿入且つ修正する)が必要とされる。インデックス付けアルゴリズム層203は、1つ又は複数のインデックス付けアルゴリズムによりディクショナリを実装し、例えば、カッコウ置き換えハッシングアルゴリズムが一例である。インデックス付けアルゴリズムは、インデックスへのキーがどのようにインデックス永続層205によって格納されるかのビューを有する。インデックス付けビューは、論理ビューであり、論理アドレス位置を特定する。このビューは更に、サイズ、アラインメント及びタイミングについて、インデックスへのユニフォームアクセスが存在するようになること、及び、インデックスが可変(安定)ストレージ上に格納されることを仮定する。
[072]インデックス永続層205は、インデックスのレコードを格納する物理バケットを読み出し、それらの物理バケットに書き込むための論理バケットオペレーション206を提示するようになる。これらの論理バケットオペレーション206は、フラッシュアダプテーション層207に提示され、フラッシュアダプテーション層207は、前述のように、(インデックス付け処理の)論理バケットをフラッシュストレージデバイス上の物理バケット位置に変換する。フラッシュアダプテーション層は、よって、上記のインデックス付けアルゴリズムによって望まれたビュー及びIO使用プロファイルを、下記の物理ストレージデバイス(フラッシュメモリ211)によって望まれた大変異なるビューに適合させる。ここで、物理バケットオペレーション208は、ランダム読出し及び集約(ブロック順次)書込みを含み、これらのランダム読出し及び集約(ブロック順次)書込みは、バケットアクセスのノンユニフォームモデルを構成する。この実施例の物理バケットオペレーションは、トリムコマンドを更に含んでもよい。
[073]物理バケットオペレーションは、物理フラッシュデバイス上の資源を追跡且つ調節する、デバイス管理層209によって実装される。これらの物理デバイスオペレーション210はここでは、ランダム読出し、大きい順次書込み及びトリムコマンドを含む。
[074]物理デバイス層211は、そのノンユニフォーム読出し及び書込み、並びに、サイズ、アラインメント及びタイミングについての不変性によって特徴付けられる。そのような物理デバイスの例は、生のフラッシュ、相変化、SSD、及びデバイス上に存在するフラッシュファイルシステムを有するフラッシュのうちの1以上を含む。
[075]本発明は、以下のもの等、デバイス管理層より下の追加の任意選択の強化を可能とする。
・バケットトリミング(細かいページトリミング)及びページ内のバケット追跡のモデルは、SSD又は同等のストレージデバイスのフラッシュファイルシステムに直接組み込まれる場合、よりよい消去ブロック管理を可能とする。
・フラッシュページ上へのバケットのマッピングは、抽象化である。変化ごとにフラッシュに書き込まれたデータの量を最小化することによって、それらのデバイスの寿命を延ばすために、バケットは、SLC NANDのための部分ページへマップすることができる。バケットはまた、これがシステム全体の性能にとって有益であった場合、複数のフラッシュページ上にマップすることもできる。
[076]図10は、インデックスレコードの一例を示す。レコード140は、フィンガープリント(キー)を格納するための最初の20バイトのフィールド141を含め、合計で32バイトである。フィンガープリントは、好ましくはデータコンテンツの暗号ハッシュダイジェスト、例えば、SHA−1ハッシュアルゴリズムである。例示を容易にするため、フィンガープリントを、「AB92345E203...」等、16進数で入力するのではなく、個々のフィンガープリントは、図11〜14において、P、Q、R、S、T等、単一の大文字によって指定される。やはり例示のために簡潔にするため、これらの大文字はまた、レコード全体の代理としての役割も果たすようになる。レコードのフィールドはまた、2バイトの参照カウントフィールド142、5バイトの物理ブロックアドレスフィールド143、1バイトのフラグフィールド144、及び、4バイトの雑フィールド145をも含む。PBAフィールド143は、指定されたフィンガープリント141のために、ディスク上で格納されたデータの物理ブロックアドレスへのポインタを含む。参照カウントは、ディスク上で格納されたデータへの参照の数を追跡する。
[077]本発明の一実施形態によれば、インデックスレコードからのフィンガープリント141は、前述(図1)のルックアップ関数f(キー)への入力キーとして使用され、この実施例では、関数f(キー)は、4つのハッシュ関数H、H、H及びHのセットを備える。一般に、2つ以上のハッシュ関数の任意のセットを使用することができる。ハッシュ関数Hは、フィンガープリントを、0及びN−1を含めて範囲[0,N−1]へマップし、但し、Nはハッシュテーブルのサイズである。この実施例では、フィンガープリント自体がハッシュであることを考えれば、BitFieldを抽出して、以下の4つのハッシュ値のファミリを生成することができる。
(x)=x<0:31>mod N
(x)=x<032:63>mod N
(x)=x<064:95>mod N
(x)=x<096:127>mod N
[078]抽出されたBitField幅は、log(N)以上である。ばらばらのビットの任意の組み合わせを使用することができ、log(N)制約を受ける。図10に例示されるように、最初のフィールド141内のフィンガープリントのみがハッシュされて、キーが形成される。レコード140の残りのコンテンツ(フィールド142〜145)は、値又はペイロードを備える。
[079]図11は、カッコウハッシングとして知られる、置き換えハッシングインデックス付けアルゴリズムの一例を例示する。例示を容易にするため、2つの関数のみが使用される。図11Aは、フィンガープリントPがそれぞれ関数H(x)及びH(x)からハッシュ値2及び5を生成する一方、フィンガープリントQがこれらの同じ関数からハッシュ値1及び3を生成する、2×3グリッドを示す。カッコウハッシングアルゴリズムは、0〜6のラベルが付けられた7個のスロット(図11B)のうち1つにP及びQを入れるための、2つの代替ハッシュ値の中から選択するようになる。Pは、2つの位置のうち1つ、2又は5に入る可能性があり、Qは、2つの位置のうち1つ、1又は3に入る可能性がある。図11Cに示すように、このアルゴリズムは、Qを最下位の空スロット1に、Pをスロット2に入れる。この実施例では、レコードコンテナは、1つのレコードを保持するスロットとして見なされるが、本発明はそのように限定されず、インデックス付けアルゴリズムはまた、複数のレコードを保持するバケットをもコンテナと見なすことを理解されたい。ここでは、説明を簡素化するため、単一のレコードスロットが使用される。
[080]このとき、もう1つのフィンガープリントRが提供され、Rは、同じハッシュ関数から1及び2のハッシュ値を生成する(図11Dのテーブルを参照)。ハッシングアルゴリズムは、Rを左の位置、即ちスロット1に入れ、現在のエントリQを変位させるようになる(図11E)。Qはこのとき、H(Q)によって指定された他の任意選択の位置、即ち位置3に移動されるようになる。このアルゴリズムは、各レコードが空のスロットに入るまで、レコードを変位させ続けるようになる。
[081]この実施例では、「Rを挿入する」オペレーションを達成するため、インデックス付けアルゴリズムは、以下の読出し及び書込み要求を生成する。
1を読み出す(Qを得る)
2を読み出す(Pを得る)
1を書き込む(Rを書き込む)
3を読み出す(妥当性チェック)
3を書き込む(Q)
[082]最初の2つの読出しは、Rがインデックス内にすでに存在しているのではないことを検証するために使用される。妥当性チェック(3を読み出す)は、スロット番号3が空であるかどうかを決定し、そうである場合、Qがスロット3に書込み可能となり、どのエントリもスロット3に再書込みされなかったとき、このアルゴリズムは終了される。スロット3が空でなかった場合、スロット3内の現在のエントリが別のスロットに移動されることが必要となる。我々がビットマップを有する場合、スロット3のコンテンツは既知であり、そうでない場合、我々は、そのステータスを決定するために、スロット3内のエントリを読み出す必要がある。各エントリは、そのエントリが有効であるかどうかを示す有効ビットを含む。有効とは、それが使用中である(且つ、その位置を現在占有しているものが変位されなければならない)ことを意味する。有効ではないとは、その位置が空であることを意味し、処理中のレコードがそこに書込み可能である。有効ビットのコンテンツもまた、あるメモリを犠牲にして、別のビットマップに格納されうる。
[083]カッコウハッシングアルゴリズムは、空のエントリに着地するまで、複数のエントリに渡って書き込み、以前のコンテンツを変位させ続けるという点において、再帰的である。実際には、この処理はめったに1回の変位を越えることはない。
[084]インデックス付けアルゴリズムは、バケット及び個々のレコードオペレーションを共に有する。インデックス付けアルゴリズムは、1つのレコードを1つのコンテナ(スロット)に入れることとして(図11で)上述されるが、インデックス付けアルゴリズムによって、レコードがバケット、即ち、複数のレコードを含むバケットに集約されてもよいことは理解される。よって、上記の実施例は非限定的であり、概してレコードオペレーションを例示するものである。
[085]前述のように、個々のレコードの読出し及び書込みは、フラッシュメモリにとって効率的ではないので、個々のレコードはバケットに集約される。図12は、各々が2つ以上のレコードを含む、4つのそのようなバケットを例示し、即ち、レコード位置0及び1を有するバケットB、レコード位置2及び3を有するB、レコード位置4及び5を有するB、並びに、レコード位置6及びxを有するBである。バケットサイズはフラッシュデバイス、即ち、完全ページ書込みか又は部分ページ書込みかによって決定された最小書込みサイズの関数である(且つ、好ましくはそれに等しい)。典型的なバケットサイズは、4KBであってもよい。レコードの具体的な順序付けは、バケット内で必要とされない−−ルックアップオペレーション中にバケット全体が有効レコードについて検索されるので、レコードはバケット内のいかなる点でも挿入可能である。カッコウハッシングアルゴリズムによる置き換え時、バケット内のエントリはランダムに置き換えされうる。インデックス付けアルゴリズムは、よって、論理バケットを、ランダムな位置のように見えるものに、1つずつ書き込み、最終的にフラッシュアダプテーション層によって、フラッシュデバイスへのより大きい、物理的に隣接又は連続する(順次)書込みに集約される。
[086]図13は、バケットエントリ160の一例を例示する。4KBのバケットサイズは、下にあるデバイスの最小書込みサイズ、ここでは4KBのページに基づく。4KBのバケットは、バケットエントリ内のレコードの数を指定する、4バイトの最初のフィールド161を含む。4バイトのタグフィールド162は、論理バケット識別子を指定する。この識別子(タグ)は論理アドレスであり、物理的なものではない。変換テーブルは、アルゴリズムバケットアドレス(ABA)をフラッシュバケットアドレスFBAにマップする。キャッシュは、(CPUの用語で)仮想キャッシュとして動作し、各キャッシュライン(エントリ)は、タグ、この場合はABAによって識別される。アルゴリズムがレコードを要求するとき、キャッシュを通過中にそれが知ることは、要求されたABAがキャッシュされることのみであり、ABAがマップされるところ(FBA)は、キャッシュの下端(例えば、図2Cにおける、BTTへの逆ポインタ313を参照)である。バケットは、複数のレコードR、R、R...を保持するためのフィールド163を含み、各レコードは、32バイトのサイズである。この例では、4KBのバケットは、1バケットにつき(4096−4−4)/32個のレコード、即ち、約127個のレコードを保持するようになる。
[087]図14は、一実施形態における、バケット、ページ及び消去ブロックの相対サイズを例示する、フラッシュメモリデバイス164の概略図である。物理フラッシュデバイスは、2GBのサイズであるチップ(パッケージ)165である。チップ上に、2つのダイ(シリコンウエハ)166a、167bがある。各ダイ上に、2^14個の消去ブロックがあってもよく、各消去ブロック167は典型的には64KBである。ページ168は、書込み可能である最小サイズ、ここでは4KBであり、スタック(図9を参照)内のより上位で使用されるような、同じく4KBである、バケット169のサイズを決定する。
[088]図15は、物理フラッシュデバイス上の資源を追跡且つ調節するためのデバイス管理層(図9の209)の一実施形態による、選ばれたコンポーネントを例示する。図15Aは、(上部に)複数のページ(バケット)170と、その後に続く、どのページが有効であるか(1は有効、0は有効でない)を示す、ページアロケーションマップ171を示す。この下は、将来トリムされることになるが、まだそうされていないページの、保留中トリムマップ172である。ページアロケーション及び保留中トリムマップは、前述のような本発明の様々な実施形態では、バケットが有効データを保持するかどうかを決定する(図1に例示されたバケット有効テーブル27を参照)するために使用されうる。
[089]図15Bは、消去ブロックインデックスによってインデックス付けされた、消去ブロック記述子テーブル175の一例を例示する。各消去ブロック記述子エントリ176は、消去済みの数177、部分書込みの数178、部分読出しの数179、完全読出しの数180、完全書込みの数181、及び、誤りの数182を含む、複数のフィールドを含む。この情報は、本発明の様々な実施形態において前述されたように、フリー消去ブロックの生成において使用されうる。
F.更なる実施形態
[090]本発明は、本願と同日に出願され、2009年6月26日出願の米国仮特許出願第61/269,633号に対する優先権を主張する、A.J.Beaverson及びP.Bowdenによる、同時係属の、所有者が同じであるFile System(ファイルシステム)という名称の米国特許出願第__________号に記載された、ファイルシステムのインデックスを実装するために使用されうる。両出願に対する優先権が本明細書で主張され、各々の完全な開示はそれらの全体として参照により本明細書に組み込まれる。
[091]本発明の実施形態は、デジタル電子回路において、或いは、コンピュータハードウェア、ファームウェア、ソフトウェアにおいて、或いは、それらの組み合わせにおいて実装されうる。本発明の実施形態は、コンピュータプログラム製品として、即ち、情報キャリア内で、例えば、マシン可読ストレージデバイス内で、データ処理装置、例えば、プログラマブルプロセッサ、コンピュータ又は複数のコンピュータによる実行のため、或いはそれらのオペレーションを制御するために、有形に実施されたコンピュータプログラムとして実装されうる。コンピュータプログラムは、コンパイラ型又はインタープリタ型言語を含む任意の形式のプログラミング言語で書かれてよく、スタンドアロンのプログラム又はモジュール、コンポーネント、サブルーチン若しくはコンピューティング環境で使用するために適した他のユニットを含む任意の形式で配置されうる。コンピュータプログラムは、1つのコンピュータ又は複数のコンピュータ上で実行されるように配置することができ、これら複数のコンピュータは、1つの場所にあるか又は複数の場所に渡って分散され通信ネットワークによって相互接続される。
[092]本発明の実施形態の方法ステップは、1つ又は複数のプログラマブルプロセッサがコンピュータプログラムを実行して、入力データに関して動作し、出力を生成することにより、本発明の機能を行うことによって、行われうる。方法ステップはまた、専用論理回路、例えば、FPGA(フィールドプログラマブルゲートアレイ)又はASIC(特定用途向け集積回路)によって行われてもよく、本発明の装置は、専用論理回路、例えば、FPGA又はASICとして実装されうる。
[093]コンピュータプログラムの実行に適したプロセッサは、例として、汎用及び専用マイクロプロセッサ、及び、任意の種類のデジタルコンピュータの任意の1つ又は複数のプロセッサを含む。一般に、プロセッサは、命令及びデータを、読出し専用メモリ若しくはランダムアクセスメモリ又は両方から受信するようになる。コンピュータの必須要素は、命令を実行するためのプロセッサ、並びに、命令及びデータを格納するための1つ又は複数のメモリデバイスである。一般に、コンピュータはまた、データを格納するための1つ又は複数の大容量ストレージデバイス、例えば、磁気、光磁気ディスク若しくは光ディスクをも含むか、或いは、それらからデータを受信し、若しくはそれらへデータを転送するように動作可能に結合されるか、或いはその両方となる。コンピュータプログラム命令及びデータを実施するために適した情報キャリアは、例として、例えば、EPROM、EEPROM及びフラッシュメモリデバイス等、半導体メモリデバイスと、例えば、内蔵ハードディスク又はリムーバブルディスク等、磁気ディスクと、光磁気ディスクと、CD ROM及びDVD−ROMディスクとを含む、全ての形式の不揮発性メモリを含む。プロセッサ及びメモリは、専用論理回路によって補われるか又は専用論理回路に組み込まれうる。
[094]前述の記載は、本発明の範囲を例示するためのものであり、限定するように意図されないことを理解されたい。

Claims (23)

  1. ユニフォームアクセスインデックス付け処理を、ノンユニフォームアクセスメモリ(26,235)に適合させる方法であって、前記インデックス付け処理は、一様に分布した一意のインデックスキーに基づくインデックスレコードのディクショナリに対するランダムアクセス要求を生成し、前記方法は、
    a) インデックスレコードのディクショナリを前記ノンユニフォームアクセスメモリ(26)に記憶するステップであって、各インデックスレコードは関連付けられたインデックスキーを含む、ステップと、
    b) 論理バケット識別子を前記メモリの物理バケット位置にマッピングするためのバケット変換テーブル(17,300)を維持するステップであって、1つのインデックスキー(141)を置き換えハッシングすることにより1つの論理バケット識別子を生成するステップを含み、前記テーブルは、前記1つの論理バケット識別子の、関連付けられた前記インデックスレコード(310,311,312)が記憶された前記メモリの1つの物理バケット位置(22,309)へのマッピングを含む、ステップと、
    c) 複数の前記インデックスレコードをキャッシュ(23)内に集めるステップであって、該ステップは、前記メモリの1つの物理バケット位置への前記キャッシュからの複数のインデックスレコードの集まりの順次書き込みとしての書き込みに先立つ、ステップと、
    d) 前記バケット変換テーブル(17)を前記集まりの中の複数の前記インデックスレコードに対する前記1つの物理バケット位置で更新するステップと
    を含む方法。
  2. 請求項1に記載の方法であって、1つ又は複数の順次インデックスレコードを、前記メモリ(26,23)から前記キャッシュへ読み出すステップと、
    前記1つ又は複数のインデックスレコードが読み出されたメモリ内の物理位置を、フリーとして指定するステップと
    を含む方法。
  3. 請求項1又は2に記載の方法であって、前記ブロック内の任意の有効インデックスレコードを前記キャッシュに読み出すこと、及び、そのようなインデックスレコードが読み出された前記メモリ内の物理位置を、フリーとして指定することによって、前記メモリ内の複数の順次物理バケット位置(22,309)をフリーブロックとするステップを含む方法。
  4. 請求項1から3の何れか一項に記載の方法であって、複数の論理バケット識別子を前記インデックスキーに対して生成すること、前記置き換えハッシングの関数は、複数の生成された前記論理バケット識別子の間で選択することを特徴とする方法。
  5. 請求項1から4の何れか一項に記載の方法であって、前記メモリは、フラッシュ、相変化及びソリッドステートディスクのメモリデバイスのうちの1つ又は複数を含むことを特徴とする方法。
  6. 請求項1から5の何れか一項に記載の方法であって、前記メモリは、ランダム書き込みアクセス時間、ランダム読み出し−修正−書き込みアクセス時間、順次書き込み、アラインメント制約、消去時間、消去ブロック境界及び摩耗のうちの1つ又は複数によって制限されることを特徴とする方法。
  7. 請求項1から6の何れか一項に記載の方法であって、前記バケットのサイズは、ページまたは部分ページ等の前記メモリの最小書き込みサイズの関数であることを特徴とする方
    法。
  8. 請求項7に記載の方法であって、前記メモリは、複数のページを含む消去ブロックを有することを特徴とする方法。
  9. 請求項1から8の何れか一項に記載の方法であって、前記メモリ内のどの物理バケット位置が有効であるかを追跡するためのバケット有効テーブル(271)を維持するステップを含む方法。
  10. 請求項1から9の何れか一項に記載の方法であって、前記メモリの物理バケット位置(23)は、1つ又は複数のインデックスレコードのセット、及び、前記バケット変換テーブルへのセルフインデックスを含むことを特徴とする方法。
  11. 請求項10に記載の方法であって、前記バケットの前記インデックスレコードは順序付けされないことを特徴とする方法。
  12. 請求項1から11の何れか一項に記載の方法であって、前記バケット変換テーブルは、永続メモリに記憶されたことを特徴とする方法。
  13. 請求項1から12の何れか一項に記載の方法であって、消去ブロック内のフリー物理バケット位置の数を追跡し、フリーバケット位置のしきい値が満たされたとき、フリー消去ブロックを生成するための処理を実施するステップを含む方法。
  14. 請求項1から13の何れか一項に記載の方法であって、前記インデックス付け処理は、インデックスレコードが挿入、削除、ルックアップ及び修正のうちの1以上をされる要求に基づいて、インデックス付けオペレーションを行うことを特徴とする方法。
  15. 請求項1から14の何れか一項に記載の方法であって、前記インデックス付け処理は、前記インデックスレコードを記憶する物理バケット位置を読み出し該物理バケット位置に書き込むための論理バケットオペレーションを提示することを特徴とする方法。
  16. 請求項1から15に記載の方法であって、前記メモリ(26)は、複数の消去ブロックを含むフラッシュメモリデバイスを含み、各消去ブロックは複数のページを含み、各ページは複数のバケットを含むことを特徴とする方法。
  17. 請求項16に記載の方法であって、ランダム読み出しオペレーションに応答して前記キャッシュに対する追加のバケットを読み出すことにより、フリー消去ブロックを生成するステップを含む方法。
  18. 請求項16又は17に記載の方法であって、スキャベンジング処理(114)を実行して、前記キャッシュに対する消去ブロックを読みだすことによりフリー消去ブロックを生成するステップを含む方法。
  19. プロセッサに請求項1から18の何れか一項に記載の方法の前記ステップを実行させるプログラムコードを含むコンピュータプログラム。
  20. インデックス付け処理を実施するための命令を実行するプロセッサを含むコンピュータシステムであって、前記インデックス付け処理は、一様に分布した一意のインデックスキーに基づくインデックスレコードのディクショナリに対するランダムアクセス要求を生成し、前記システムは、
    ノンユニフォームアクセスメモリ(26)であって、前記メモリの物理バケット位置に記憶されたインデックスレコードのディクショナリを含む前記ノンユニフォームアクセスメモリと、
    前記ディクショナリの1つのインデックスキーの置き換えハッシングにより生成された1つの論理バケット識別子を、該1つのインデックスキーに関連付けられたインデックスレコード(310,311,312)が記憶された前記メモリの1つの物理バケット位置にマッピングするためのバケット変換テーブル(17)と、
    前記メモリに書き込まれる複数のインデックスレコードを集めるためのキャッシュ(23)と、
    前記メモリのある物理バケット位置にアクセスするための手段(18)であって、該ある物理バケット位置は、ユニフォームアクセスインデックス付け処理により前記バケット変換テーブルに供給された論理バケット識別子にマッピングされた、手段と、
    前記キャッシュからの複数の前記インデックスレコードの集まりを、前記メモリの少なくとも1つの物理バケット位置に順次書き込むための手段(24)と、
    前記バケット変換テーブル(17)を前記集まりの中の複数の前記インデックスレコードに対する前記少なくとも1つの物理バケット位置で更新するための手段(19)と
    を含む、コンピュータシステム。
  21. 請求項20に記載のコンピュータシステムであって、インデックスを記憶する前記メモリは物理デバイス層を含み、該物理デバイス層は、ノンユニフォーム読み出し及び書き込みアクセス、並びに、サイズ、アラインメント及びタイミングについての不変性によって特徴付けられたコンピュータシステム。
  22. 請求項20又は21に記載のコンピュータシステムであって、インデックスを記憶する前記メモリは、フラッシュ、相変化及びソリッドステートディスクのメモリデバイスのうちの1つ又は複数を含むことを特徴とするコンピュータシステム。
  23. 請求項20から22の何れか一項に記載のコンピュータシステムであって、インデックスを記憶する前記メモリは、複数の消去ブロックを含むフラッシュメモリデバイスを含み、各消去ブロックは複数のページを含み、各ページは複数のバケットを含むことを特著とするコンピュータシステム。
JP2015075686A 2009-06-26 2015-04-02 ノンユニフォームアクセスメモリにおけるスケーラブルなインデックス付け Active JP6126158B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US26963309P 2009-06-26 2009-06-26
US61/269,633 2009-06-26

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2012517764A Division JP2012531674A (ja) 2009-06-26 2010-06-25 ノンユニフォームアクセスメモリにおけるスケーラブルなインデックス付け

Publications (2)

Publication Number Publication Date
JP2015144022A true JP2015144022A (ja) 2015-08-06
JP6126158B2 JP6126158B2 (ja) 2017-05-10

Family

ID=42541578

Family Applications (3)

Application Number Title Priority Date Filing Date
JP2012517764A Pending JP2012531674A (ja) 2009-06-26 2010-06-25 ノンユニフォームアクセスメモリにおけるスケーラブルなインデックス付け
JP2012517787A Active JP5695040B2 (ja) 2009-06-26 2010-06-25 ファイルシステム
JP2015075686A Active JP6126158B2 (ja) 2009-06-26 2015-04-02 ノンユニフォームアクセスメモリにおけるスケーラブルなインデックス付け

Family Applications Before (2)

Application Number Title Priority Date Filing Date
JP2012517764A Pending JP2012531674A (ja) 2009-06-26 2010-06-25 ノンユニフォームアクセスメモリにおけるスケーラブルなインデックス付け
JP2012517787A Active JP5695040B2 (ja) 2009-06-26 2010-06-25 ファイルシステム

Country Status (10)

Country Link
US (2) US8880544B2 (ja)
EP (2) EP2433227B1 (ja)
JP (3) JP2012531674A (ja)
CN (2) CN102483755B (ja)
AU (2) AU2010265954B2 (ja)
BR (2) BRPI1013789A8 (ja)
CA (2) CA2766161C (ja)
DK (2) DK2433226T3 (ja)
ES (2) ES2548194T3 (ja)
WO (2) WO2010151750A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11243877B2 (en) 2018-05-01 2022-02-08 Fujitsu Limited Method, apparatus for data management, and non-transitory computer-readable storage medium for storing program

Families Citing this family (77)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8478799B2 (en) 2009-06-26 2013-07-02 Simplivity Corporation Namespace file system accessing an object store
US10558705B2 (en) * 2010-10-20 2020-02-11 Microsoft Technology Licensing, Llc Low RAM space, high-throughput persistent key-value store using secondary memory
WO2012126180A1 (en) 2011-03-24 2012-09-27 Microsoft Corporation Multi-layer search-engine index
US8346810B2 (en) * 2011-05-13 2013-01-01 Simplivity Corporation Reference count propagation
US8924629B1 (en) 2011-06-07 2014-12-30 Western Digital Technologies, Inc. Mapping table for improving write operation efficiency
JP5524144B2 (ja) 2011-08-08 2014-06-18 株式会社東芝 key−valueストア方式を有するメモリシステム
US9626434B2 (en) * 2011-08-30 2017-04-18 Open Text Sa Ulc Systems and methods for generating and using aggregated search indices and non-aggregated value storage
CN102364474B (zh) * 2011-11-17 2014-08-20 中国科学院计算技术研究所 用于机群文件系统的元数据存储系统和管理方法
US9165005B2 (en) * 2012-02-24 2015-10-20 Simplivity Corporation Method and apparatus utilizing non-uniform hash functions for placing records in non-uniform access memory
US9032183B2 (en) 2012-02-24 2015-05-12 Simplivity Corp. Method and apparatus for content derived data placement in memory
US9390055B2 (en) 2012-07-17 2016-07-12 Coho Data, Inc. Systems, methods and devices for integrating end-host and network resources in distributed memory
US9152325B2 (en) 2012-07-26 2015-10-06 International Business Machines Corporation Logical and physical block addressing for efficiently storing data
US9225675B2 (en) 2012-08-08 2015-12-29 Amazon Technologies, Inc. Data storage application programming interface
US9904788B2 (en) 2012-08-08 2018-02-27 Amazon Technologies, Inc. Redundant key management
US8805793B2 (en) 2012-08-08 2014-08-12 Amazon Technologies, Inc. Data storage integrity validation
US10120579B1 (en) 2012-08-08 2018-11-06 Amazon Technologies, Inc. Data storage management for sequentially written media
SG10201600997YA (en) * 2012-08-08 2016-03-30 Amazon Tech Inc Archival data storage system
US8392428B1 (en) * 2012-09-12 2013-03-05 DSSD, Inc. Method and system for hash fragment representation
JP5925968B2 (ja) * 2012-09-19 2016-05-25 ヒタチ データ システムズ エンジニアリング ユーケー リミテッドHitachi Data Systems Engineering Uk Limited ファイルストレージシステムにおけるチェックポイントを用いて重複排除を管理するシステムおよび方法
US9043334B2 (en) * 2012-12-26 2015-05-26 Industrial Technology Research Institute Method and system for accessing files on a storage system
WO2014105019A1 (en) * 2012-12-27 2014-07-03 Empire Technology Development, Llc Virtual machine monitor (vmm) extension for time shared accelerator management and side-channel vulnerability prevention
US9612955B2 (en) * 2013-01-09 2017-04-04 Wisconsin Alumni Research Foundation High-performance indexing for data-intensive systems
US10558581B1 (en) 2013-02-19 2020-02-11 Amazon Technologies, Inc. Systems and techniques for data recovery in a keymapless data storage system
US9208105B2 (en) * 2013-05-30 2015-12-08 Dell Products, Lp System and method for intercept of UEFI block I/O protocol services for BIOS based hard drive encryption support
US9430492B1 (en) * 2013-06-28 2016-08-30 Emc Corporation Efficient scavenging of data and metadata file system blocks
US9594795B1 (en) * 2013-06-28 2017-03-14 EMC IP Holding Company LLC Maintaining data consistency when data is changed out from under another data service
US9043576B2 (en) * 2013-08-21 2015-05-26 Simplivity Corporation System and method for virtual machine conversion
US9531722B1 (en) 2013-10-31 2016-12-27 Google Inc. Methods for generating an activity stream
US9542457B1 (en) 2013-11-07 2017-01-10 Google Inc. Methods for displaying object history information
US9614880B1 (en) 2013-11-12 2017-04-04 Google Inc. Methods for real-time notifications in an activity stream
US9509772B1 (en) 2014-02-13 2016-11-29 Google Inc. Visualization and control of ongoing ingress actions
EP2913938A1 (de) * 2014-02-26 2015-09-02 Siemens Aktiengesellschaft Verfahren und Anordnung zum Zugriff auf Informationen eines drahtlos zugreifbaren Datenträgers
US9536199B1 (en) 2014-06-09 2017-01-03 Google Inc. Recommendations based on device usage
US9507791B2 (en) 2014-06-12 2016-11-29 Google Inc. Storage system user interface with floating file collection
US10078781B2 (en) 2014-06-13 2018-09-18 Google Llc Automatically organizing images
CN105320466A (zh) * 2014-07-29 2016-02-10 广明光电股份有限公司 固态硬盘安排操作的方法
US9727575B2 (en) * 2014-08-29 2017-08-08 Microsoft Technology Licensing, Llc File system with data block sharing
WO2016093809A1 (en) * 2014-12-09 2016-06-16 Hewlett Packard Enterprise Development Lp Storage media sections with alternative cells
US9870420B2 (en) 2015-01-19 2018-01-16 Google Llc Classification and storage of documents
US11755201B2 (en) * 2015-01-20 2023-09-12 Ultrata, Llc Implementation of an object memory centric cloud
US9880755B2 (en) 2015-02-25 2018-01-30 Western Digital Technologies, Inc. System and method for copy on write on an SSD
US10678650B1 (en) * 2015-03-31 2020-06-09 EMC IP Holding Company LLC Managing snaps at a destination based on policies specified at a source
US11449322B2 (en) 2015-05-08 2022-09-20 Desktop 365, Inc. Method and system for managing the end to end lifecycle of a cloud-hosted desktop virtualization environment
US10303453B2 (en) 2015-05-08 2019-05-28 Desktop 365, LLC Method and system for managing the end to end lifecycle of the virtualization environment for an appliance
WO2016192025A1 (en) 2015-06-01 2016-12-08 SZ DJI Technology Co., Ltd. Systems and methods for memory architecture
JP6030713B1 (ja) * 2015-06-16 2016-11-24 株式会社ソフトギア 分散型データ処理プログラム、情報処理装置、分散型データベースシステム及び分散システム
US10019382B2 (en) * 2015-10-20 2018-07-10 Sap Se Secondary data structures for storage class memory (scm) enables main-memory databases
JP6034467B2 (ja) * 2015-10-23 2016-11-30 株式会社東芝 システム
CN105183401A (zh) * 2015-10-30 2015-12-23 深圳市泽云科技有限公司 一种固态硬盘数据恢复方法、装置及系统
EP3374881B1 (en) * 2015-12-16 2021-06-09 Hewlett Packard Enterprise Development LP Dynamic allocation of hash table resources
CN105550345B (zh) * 2015-12-25 2019-03-26 百度在线网络技术(北京)有限公司 文件操作方法和装置
US9880743B1 (en) * 2016-03-31 2018-01-30 EMC IP Holding Company LLC Tracking compressed fragments for efficient free space management
US20170315928A1 (en) * 2016-04-28 2017-11-02 Netapp, Inc. Coarse-grained cache replacement scheme for a cloud-backed deduplication storage system
JP6203929B2 (ja) * 2016-10-20 2017-09-27 株式会社ソフトギア 分散型データ処理プログラム、情報処理装置、分散型データベースシステム及び分散システム
US11010300B2 (en) 2017-05-04 2021-05-18 Hewlett Packard Enterprise Development Lp Optimized record lookups
CN107391701B (zh) * 2017-07-27 2021-04-23 郑州云海信息技术有限公司 一种文件创建方法及装置
US10545921B2 (en) 2017-08-07 2020-01-28 Weka.IO Ltd. Metadata control in a load-balanced distributed storage system
CN107688463B (zh) * 2017-09-21 2020-08-18 杭州全维技术股份有限公司 一种嵌入式设备版本文件打包的方法
US11243703B2 (en) 2018-04-27 2022-02-08 Hewlett Packard Enterprise Development Lp Expandable index with pages to store object records
EP3791274B1 (en) * 2018-05-08 2024-05-01 Telefonaktiebolaget LM Ericsson (publ) Method and node for managing a request for hardware acceleration by means of an accelerator device
US11163489B2 (en) * 2018-05-23 2021-11-02 SK Hynix Inc. Workload clusterization for memory system and method of executing the same
CN110633296A (zh) * 2018-05-31 2019-12-31 北京京东尚科信息技术有限公司 数据查询方法、装置、介质及电子设备
CN108984686B (zh) * 2018-07-02 2021-03-30 中国电子科技集团公司第五十二研究所 一种基于日志合并的分布式文件系统索引方法和装置
US10884917B2 (en) * 2018-12-05 2021-01-05 Western Digital Technologies, Inc Dual media packaging targeted for SSD usage
US11170803B1 (en) 2019-04-05 2021-11-09 Western Digital Technologies, Inc. Magnetic recording write head with spin-torque oscillator (STO) and extended seed layer
US11354038B2 (en) 2019-07-19 2022-06-07 International Business Machines Corporation Providing random access to variable-length data
WO2021170228A1 (en) * 2020-02-26 2021-09-02 Huawei Technologies Co., Ltd. A device and a method for indexing snapshots of multiple file systems
US11138115B2 (en) * 2020-03-04 2021-10-05 Micron Technology, Inc. Hardware-based coherency checking techniques
US11436187B2 (en) 2020-10-20 2022-09-06 Micron Technology, Inc. Method of notifying a process or programmable atomic operation traps
US11403023B2 (en) 2020-10-20 2022-08-02 Micron Technology, Inc. Method of organizing a programmable atomic unit instruction memory
US11740929B2 (en) * 2020-10-20 2023-08-29 Micron Technology, Inc. Registering a custom atomic operation with the operating system
US11586439B2 (en) 2020-10-20 2023-02-21 Micron Technology, Inc. Detecting infinite loops in a programmable atomic transaction
US20230251894A1 (en) * 2020-10-20 2023-08-10 Micron Technology, Inc. Method of executing programmable atomic unit resources within a multi-process system
US11693690B2 (en) 2020-10-20 2023-07-04 Micron Technology, Inc. Method of completing a programmable atomic transaction by ensuring memory locks are cleared
US11755495B2 (en) * 2021-03-16 2023-09-12 Micron Technology, Inc. Storing a logical-to-physical mapping in NAND memory
US11734189B2 (en) * 2021-03-16 2023-08-22 Micron Technology, Inc. Caching of logical-to-physical mapping information in a memory sub-system
CN113703678B (zh) * 2021-08-20 2023-12-22 济南浪潮数据技术有限公司 一种存储桶索引重分裂的方法、装置、设备和介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080228691A1 (en) * 2007-03-12 2008-09-18 Shavit Nir N Concurrent extensible cuckoo hashing
US20090106486A1 (en) * 2007-10-19 2009-04-23 Inha-Industry Partnership Institute Efficient prefetching and asynchronous writing for flash memory

Family Cites Families (59)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2251323B (en) * 1990-12-31 1994-10-12 Intel Corp Disk emulation for a non-volatile semiconductor memory
JPH06195253A (ja) * 1992-12-24 1994-07-15 Nippon Telegr & Teleph Corp <Ntt> ファイル管理装置
US5815709A (en) * 1996-04-23 1998-09-29 San Microsystems, Inc. System and method for generating identifiers for uniquely identifying object types for objects used in processing of object-oriented programs and the like
US6128346A (en) 1998-04-14 2000-10-03 Motorola, Inc. Method and apparatus for quantizing a signal in a digital system
US6412080B1 (en) * 1999-02-23 2002-06-25 Microsoft Corporation Lightweight persistent storage system for flash memory devices
US6453404B1 (en) * 1999-05-27 2002-09-17 Microsoft Corporation Distributed data cache with memory allocation model
US6704730B2 (en) * 2000-02-18 2004-03-09 Avamar Technologies, Inc. Hash file system and method for use in a commonality factoring system
US7266555B1 (en) 2000-03-03 2007-09-04 Intel Corporation Methods and apparatus for accessing remote storage through use of a local device
CA2331474A1 (en) 2001-01-19 2002-07-19 Stergios V. Anastasiadis Stride-based disk space allocation scheme
US7043637B2 (en) 2001-03-21 2006-05-09 Microsoft Corporation On-disk file format for a serverless distributed file system
US7062490B2 (en) 2001-03-26 2006-06-13 Microsoft Corporation Serverless distributed file system
US6912645B2 (en) 2001-07-19 2005-06-28 Lucent Technologies Inc. Method and apparatus for archival data storage
US7115919B2 (en) * 2002-03-21 2006-10-03 Hitachi, Ltd. Storage system for content distribution
JP3896077B2 (ja) * 2002-09-11 2007-03-22 株式会社東芝 計算機システムおよびファイル管理方法
JP4077313B2 (ja) * 2002-12-27 2008-04-16 株式会社リコー 情報処理装置、フラッシュrom管理方法およびプログラム
US7139781B2 (en) 2003-04-29 2006-11-21 International Business Machines Corporation Managing filesystem versions
US7380059B2 (en) * 2003-05-16 2008-05-27 Pillar Data Systems, Inc. Methods and systems of cache memory management and snapshot operations
US7092976B2 (en) * 2003-06-24 2006-08-15 International Business Machines Corporation Parallel high speed backup for a storage area network (SAN) file system
US7877426B2 (en) 2003-07-17 2011-01-25 International Business Machines Corporation Performance-enhancing system and method of accessing file system objects
US7509473B2 (en) * 2003-08-27 2009-03-24 Adaptec, Inc. Segmented storage system mapping
US8417913B2 (en) * 2003-11-13 2013-04-09 International Business Machines Corporation Superpage coalescing which supports read/write access to a new virtual superpage mapping during copying of physical pages
US7328217B2 (en) 2003-11-26 2008-02-05 Symantec Operating Corporation System and method for detecting and storing file identity change information within a file system
US20050187898A1 (en) * 2004-02-05 2005-08-25 Nec Laboratories America, Inc. Data Lookup architecture
US7272654B1 (en) * 2004-03-04 2007-09-18 Sandbox Networks, Inc. Virtualizing network-attached-storage (NAS) with a compact table that stores lossy hashes of file names and parent handles rather than full names
US20110179219A1 (en) * 2004-04-05 2011-07-21 Super Talent Electronics, Inc. Hybrid storage device
US8583657B2 (en) * 2004-05-06 2013-11-12 Oracle International Corporation Method and apparatus for using a hash-partitioned index to access a table that is not partitioned or partitioned independently of the hash partitioned index
US8108429B2 (en) 2004-05-07 2012-01-31 Quest Software, Inc. System for moving real-time data events across a plurality of devices in a network for simultaneous data protection, replication, and access services
US7827182B1 (en) * 2004-06-02 2010-11-02 Cisco Technology, Inc Searching for a path to identify where to move entries among hash tables with storage for multiple entries per bucket during insert operations
EP1617341A1 (en) 2004-07-16 2006-01-18 International Business Machines Corporation File operation management device
US7730114B2 (en) * 2004-11-12 2010-06-01 Microsoft Corporation Computer file system
US7814078B1 (en) 2005-06-20 2010-10-12 Hewlett-Packard Development Company, L.P. Identification of files with similar content
US20060294163A1 (en) 2005-06-23 2006-12-28 Emc Corporation Methods and apparatus for accessing content stored in a file system
US8560503B1 (en) 2006-01-26 2013-10-15 Netapp, Inc. Content addressable storage system
US7454592B1 (en) * 2006-02-16 2008-11-18 Symantec Operating Corporation Block-level and hash-based single-instance storage
US8131682B2 (en) * 2006-05-11 2012-03-06 Hitachi, Ltd. System and method for replacing contents addressable storage
US8307148B2 (en) * 2006-06-23 2012-11-06 Microsoft Corporation Flash management techniques
US8145865B1 (en) * 2006-09-29 2012-03-27 Emc Corporation Virtual ordered writes spillover mechanism
EP2102750B1 (en) 2006-12-04 2014-11-05 Commvault Systems, Inc. System and method for creating copies of data, such as archive copies
US20100115175A9 (en) * 2006-12-18 2010-05-06 Zhiqing Zhuang Method of managing a large array of non-volatile memories
US8140625B2 (en) 2007-02-20 2012-03-20 Nec Laboratories America, Inc. Method for operating a fixed prefix peer to peer network
US20080243878A1 (en) * 2007-03-29 2008-10-02 Symantec Corporation Removal
US8489830B2 (en) * 2007-03-30 2013-07-16 Symantec Corporation Implementing read/write, multi-versioned file system on top of backup data
US7870122B2 (en) * 2007-04-23 2011-01-11 Microsoft Corporation Self-tuning index for flash-based databases
US20080270436A1 (en) * 2007-04-27 2008-10-30 Fineberg Samuel A Storing chunks within a file system
US8028106B2 (en) 2007-07-06 2011-09-27 Proster Systems, Inc. Hardware acceleration of commonality factoring with removable media
US7890555B2 (en) * 2007-07-10 2011-02-15 International Business Machines Corporation File system mounting in a clustered file system
US7725437B2 (en) * 2007-07-31 2010-05-25 Hewlett-Packard Development Company, L.P. Providing an index for a data store
US7945815B2 (en) * 2007-08-14 2011-05-17 Dell Products L.P. System and method for managing memory errors in an information handling system
JP4949176B2 (ja) * 2007-09-10 2012-06-06 ソニー株式会社 情報処理装置、記録方法およびコンピュータプログラム
US20090198952A1 (en) * 2008-02-04 2009-08-06 Apple Inc Memory Mapping Architecture
US7747663B2 (en) 2008-03-05 2010-06-29 Nec Laboratories America, Inc. System and method for content addressable storage
US8346730B2 (en) 2008-04-25 2013-01-01 Netapp. Inc. Deduplication of data on disk devices based on a threshold number of sequential blocks
US8271564B2 (en) * 2008-07-14 2012-09-18 Symbol Technologies, Inc. Lookup table arrangement and related management method for accommodating concurrent processors
US8135723B2 (en) * 2008-11-12 2012-03-13 Microsoft Corporation Leveraging low-latency memory access
US9542409B2 (en) 2008-11-26 2017-01-10 Red Hat, Inc. Deduplicated file system
US20100274772A1 (en) * 2009-04-23 2010-10-28 Allen Samuels Compressed data objects referenced via address references and compression references
US8195636B2 (en) 2009-04-29 2012-06-05 Netapp, Inc. Predicting space reclamation in deduplicated datasets
US8478799B2 (en) 2009-06-26 2013-07-02 Simplivity Corporation Namespace file system accessing an object store
US9165005B2 (en) * 2012-02-24 2015-10-20 Simplivity Corporation Method and apparatus utilizing non-uniform hash functions for placing records in non-uniform access memory

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080228691A1 (en) * 2007-03-12 2008-09-18 Shavit Nir N Concurrent extensible cuckoo hashing
US20090106486A1 (en) * 2007-10-19 2009-04-23 Inha-Industry Partnership Institute Efficient prefetching and asynchronous writing for flash memory

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JPN7016001327; Hongchan Roh, et al: 'An Efficient Hash Index Structure for Solid State Disks' Proceedings of the 2008 International Conference on Information and Knowledge Engineering, IKE 2008 , 20080714, pp.256-261 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11243877B2 (en) 2018-05-01 2022-02-08 Fujitsu Limited Method, apparatus for data management, and non-transitory computer-readable storage medium for storing program

Also Published As

Publication number Publication date
EP2433227A1 (en) 2012-03-28
CA2766161C (en) 2018-07-17
JP2012531675A (ja) 2012-12-10
BRPI1013794A2 (pt) 2016-04-05
JP6126158B2 (ja) 2017-05-10
AU2010265984C1 (en) 2016-06-02
AU2010265984A1 (en) 2012-02-16
BRPI1013789A2 (pt) 2016-04-12
US20100332846A1 (en) 2010-12-30
CA2766231C (en) 2017-01-17
US8880544B2 (en) 2014-11-04
WO2010151813A1 (en) 2010-12-29
JP5695040B2 (ja) 2015-04-01
ES2548194T3 (es) 2015-10-14
DK2433226T3 (en) 2015-11-02
CA2766161A1 (en) 2010-12-29
EP2433226A1 (en) 2012-03-28
CN102483754A (zh) 2012-05-30
BRPI1013789A8 (pt) 2017-10-10
BRPI1013794A8 (pt) 2017-10-10
AU2010265954A1 (en) 2012-02-09
CN102483754B (zh) 2015-03-11
CN102483755A (zh) 2012-05-30
CA2766231A1 (en) 2010-12-29
AU2010265954B2 (en) 2016-01-28
US20150039907A1 (en) 2015-02-05
DK2433227T3 (en) 2016-01-04
JP2012531674A (ja) 2012-12-10
WO2010151750A1 (en) 2010-12-29
ES2546562T3 (es) 2015-09-24
EP2433226B1 (en) 2015-08-12
CN102483755B (zh) 2014-01-29
US10176113B2 (en) 2019-01-08
EP2433227B1 (en) 2015-09-16
AU2010265984B2 (en) 2016-02-04

Similar Documents

Publication Publication Date Title
JP6126158B2 (ja) ノンユニフォームアクセスメモリにおけるスケーラブルなインデックス付け
JP6205650B2 (ja) 不均等アクセス・メモリにレコードを配置するために不均等ハッシュ機能を利用する方法および装置
US10430084B2 (en) Multi-tiered memory with different metadata levels
Wu et al. An efficient B-tree layer for flash-memory storage systems
US7624239B2 (en) Methods for the management of erase operations in non-volatile memories
US7783845B2 (en) Structures for the management of erase operations in non-volatile memories
KR101533744B1 (ko) 플래시 메모리 시스템 및 그것의 플래시 변환 계층 설계 방법
US7774392B2 (en) Non-volatile memory with management of a pool of update memory blocks based on each block&#39;s activity and data order
TWI399644B (zh) 非揮發記憶體區塊管理方法
US7779056B2 (en) Managing a pool of update memory blocks based on each block&#39;s activity and data order
KR20090079197A (ko) 비휘발성 메모리 및 클래스 기반의 업데이트 블록 대체 규칙을 위한 방법
Lee et al. An efficient buffer management scheme for implementing a B-tree on NAND flash memory
Gong et al. A write-optimized B-tree layer for NAND flash memory
Kumar et al. A survey on flash translation layer for NAND flash memory
Boucetta et al. LHFTL: A novel SSD performance optimisation approach using the LH index
Chiao et al. HybridLog: an Efficient Hybrid-Mapped Flash Translation Layer for Modern NAND Flash Memory

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160427

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160527

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160826

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20161027

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161028

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170308

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170406

R150 Certificate of patent or registration of utility model

Ref document number: 6126158

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: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350