JP5597666B2 - 半導体記憶装置、情報処理システムおよび制御方法 - Google Patents

半導体記憶装置、情報処理システムおよび制御方法 Download PDF

Info

Publication number
JP5597666B2
JP5597666B2 JP2012070322A JP2012070322A JP5597666B2 JP 5597666 B2 JP5597666 B2 JP 5597666B2 JP 2012070322 A JP2012070322 A JP 2012070322A JP 2012070322 A JP2012070322 A JP 2012070322A JP 5597666 B2 JP5597666 B2 JP 5597666B2
Authority
JP
Japan
Prior art keywords
address
key
value
storage unit
page
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.)
Expired - Fee Related
Application number
JP2012070322A
Other languages
English (en)
Other versions
JP2013200839A (ja
Inventor
孝生 丸亀
敦寛 木下
貴宏 栗田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba 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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2012070322A priority Critical patent/JP5597666B2/ja
Priority to US13/762,986 priority patent/US20130250686A1/en
Publication of JP2013200839A publication Critical patent/JP2013200839A/ja
Application granted granted Critical
Publication of JP5597666B2 publication Critical patent/JP5597666B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/08Address circuits; Decoders; Word-line control circuits
    • 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
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0616Improving the reliability of storage systems in relation to life time, e.g. increasing Mean Time Between Failures [MTBF]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • G06F12/1018Address translation using page tables, e.g. page table structures involving hashing techniques, e.g. inverted page tables
    • 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/7201Logical to physical mapping or translation of blocks or pages

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System (AREA)

Description

本発明の実施形態は、半導体記憶装置、情報処理システムおよび制御方法に関する。
一般的なホストシステム、例えばコンピュータシステムが備えるストレージ装置として、磁気式のハードディスクドライブ(HDD)、不揮発性半導体メモリを搭載する固体ドライブ(SSD)、および、埋め込みNANDフラッシュメモリなどが存在する。SSDや埋め込みNANDフラッシュメモリはストレージに分類されるが、規模が拡張されたメモリシステムとも言える。
このようなメモリシステムは、例えばインタフェースと、第1のメモリブロックと、第2のメモリブロックと、コントローラとを備える。第1のメモリブロックはデータを格納する。第2のメモリブロックはデータ書き込み/読み出し時のバッファメモリである。第1のメモリブロックは、不揮発性メモリであり、第2のメモリブロックよりも大容量であるが、アクセス速度が遅い。第2のメモリブロックは、第1のメモリブロックのアドレス変換テーブルを処理するための一時保存メモリである。また、第2のメモリブロックは、インタフェースの通信速度と、第1のメモリブロックの書き込み/読み出し速度との速度差を補うためにも使用される。
例えば、第1のメモリブロックは不揮発性のフラッシュメモリであり、第2のメモリブロックは揮発性のDRAMまたはSRAMである。このような従来のストレージ型のメモリシステムでは、アドレスを指定したデータの書き込み/読み出し機能を実現するための構成をとっている。特に、SSDなどの大容量メモリシステムでは、フラッシュメモリ管理のために論理アドレスと物理アドレスとを分けて管理している。2種類のアドレスを使い分けることにより、管理が容易になる。
一方、メモリシステムに保存されている、あるテキストに関連付けられた別のテキスト、バイナリファイルにおける特定のビットパターン、動画ファイルにおける特定パターン、および、音声ファイルにおける特徴的な音声パターンなどのデータを効率的取り出すためには、データを指定したデータ読出し機能を持たせることが望ましい。このため、通常のデータ保存のみならず、データに関連付けられたメタデータを付属させて保存しておき、所望のデータを得るためにメタデータを参照する方法が用いられる。
メタデータの管理方法の1つとして、1対1または1対多にデータが対応するKVS(key−value store(キーバリューストア))が存在する。KVSでは、検索要求としてキー(key)が与えられると、それに対応付けられるバリュー(value)が出力される。
特許第4551958号公報 特開2005−209214号公報
しかしながら、従来システムでKVSを実現するには、メモリシステム内に格納されたデータや複数のメタデータを、ホストシステムの主記憶装置(DRAMなど)にデータを展開した上で、中央演算装置(CPU)を使用して演算を施した後に、再びストレージ(メモリシステム)からデータを読み出して照合するという、繰り返しのデータ入出力処理を実行する必要があった。
実施形態の半導体記憶装置は、記憶部と、受付部と、取得部と、出力制御部と、を備える。記憶部は、バリュー、および、バリューに対応するキーに基づいて生成されるキーアドレスとバリューの物理アドレスとを対応づけるアドレス情報を記憶する。受付部は、キーを含む、当該キーに対応するバリューの取得要求を受け付ける。取得部は、アドレス情報に基づいて、取得要求に含まれるキーのキーアドレスに対応する物理アドレスを取得する。出力制御部は、取得された物理アドレスのバリューを記憶部から取得し、取得したバリューを、取得要求に対する応答として出力する。
第1の実施形態にかかる半導体記憶装置のハードウェア図。 デバイス制御部のブロック図。 L2Pテーブルを使ったアクセスを説明する図。 K2Pテーブルのデータ形式の一例を示す図。 K2Pテーブルのデータ形式の一例を示す図。 K2PテーブルをL2Pテーブルと独立に管理する例を示す図。 K2PテーブルとL2Pテーブルとを1つのテーブルで管理する例を示す図。 キーアドレスの衝突について説明する図。 P2Kテーブルのデータ形式の一例を示す図。 P2L/P2Kテーブルのデータ形式の一例を示す図。 登録コマンドを受け付けた場合の処理のフローチャート。 書込コマンドを受け付けた場合の処理のフローチャート。 取得コマンドを受け付けた場合の処理のフローチャート。 読出コマンドを受け付けた場合の処理のフローチャート。 物理ブロックテーブルを用いる場合のデータアクセスの仕組みを説明する図。 変形例1の物理ブロックテーブルのデータ形式の一例を示す図。 多段階の検索テーブルを用いる変形例2を説明する図。 変形例3のK2Pテーブルのデータ形式の一例を示す図。 2種類のハッシュ関数を用いる例を説明する図。 第2の実施形態にかかる半導体記憶装置のハードウェア図。 CAMを用いた検索処理例を説明する図。 第3の実施形態にかかる半導体記憶装置のハードウェア図。 第4の実施形態にかかる半導体記憶装置のハードウェア図。 第4の実施形態の変形例にかかる半導体記憶装置のハードウェア図。 第5の実施形態にかかる半導体記憶装置のハードウェア図。
以下に添付図面を参照して、この発明にかかる半導体記憶装置の好適な実施形態を詳細に説明する。
以下では、従来システムとして、SSDを想定して説明する。以下の実施形態では、SSDは、広い意味でのNANDフラッシュベースの固体メモリによるストレージを意味し、埋め込みNANDフラッシュメモリシステムも含む。また、実施形態のSSDは、それらよりも大型のサーバ向けストレージも含まれる。
SSDでのKVSの実現方法とその問題点を説明する。従来型SSDでKVSを実現する場合、例えば、データ(実データ)はファイルとして保存され、データに付属するキーバリュー型のメタデータ(KVSデータ)もまたファイルとして保存される。すなわちKVSを実現しているのはファイルシステム以上の上位システムである。例えば、OS(オペレーティングシステム)に実装されたファイルシステムまたはアプリケーションがKVSを実現する。この場合、汎用的なハードウェア構成でKVSを実現できるという利点がある。しかしこの場合、KVSの取り扱いは、通常のデータと同じである。このため、例えばホストシステムがKVSデータファイルをメインメモリ(例えばDRAM)に読み出してから、メタデータ(KVSデータ)の読み出し/書き込み操作および検索操作を行うことになる。従って、ソフトウェア(SW)としての取り扱い以上の効果は期待できない。
一方、SSDの読み出し/書き込みの過程では、NANDフラッシュメモリのハードウェア(HW)の仕組みに基づいてアドレス変換が行われる仕組みになっている。NANDフラッシュメモリは、読み出し/書き込み時に、例えば4KBや8KBなどのページ単位でアクセスされる。一方、NANDフラッシュメモリは、例えば512KBや1024KBなどのページを複数まとめたブロックと呼ばれる単位で消去される仕組みとなっている。
通常、同一ページのデータ更新はできないので、更新されたデータは新しいページに書き込むことになる。このため、使われているページと使われていないページを管理するアドレス管理テーブルが必要となる。また同じページへの書き込みが集中しないように、書き込みアドレスをランダムに選択するようにしている。このため、使用している物理アドレス(物理ページアドレス)と、ホストシステム側やメモリ制御部(後述)が指定する論理アドレス(論理ページアドレス)の変換テーブルが必要になる。これが論理(Logical)アドレス物理(Physical)アドレス変換テーブルであり、通称L2Pテーブルと呼ばれる。L2Pテーブルでデータを管理することにより、SSDの寿命が向上することになるが、その反面、データ管理の仕組みは複雑化する。
以下の実施形態の半導体記憶装置は、例えばNANDフラッシュメモリなどから構成される不揮発性メモリシステムであって、KVSデータ(キーバリュー情報)を、アドレス変換テーブルによって効率的かつ高速に処理する。また、通常のアドレス指定データ出力のためのアドレス変換テーブルとKVSのためのアドレス変換テーブルとを共存させて、効率よく動作させる。なお、以下では半導体記憶装置を、メモリシステムまたはデバイスともいう。
次に、各実施形態に共通するKVSデータの詳細について説明する。メモリシステムのメモリアクセス可能なアドレス空間内には、アドレス指定で実データにアクセス可能なデータ格納領域(実アドレス空間)と、KVSデータ格納領域とが存在する。実アドレス空間は、例えば従来の論理アドレス空間に対応する。KVSデータ格納領域は、メモリシステム側が適宜用いるデータ領域である。従って、ユーザまたはクライアントは、メモリシステムのインタフェースに対するKVSコマンドによってアクセスする。
ここでKVSコマンドの一例について説明する。ホストシステムからは、メモリシステムのホストインタフェースに対し、KVSに対する操作要求(KVS要求)のための、次のKVSコマンドが与えられる。
・登録コマンド(PUT):キーに関連付けられた新たな集合(バリュー)を登録する。
・書込コマンド(APPEND):あるキーに関連付けられた集合(バリュー)に新たな要素(バリュー)を追加する。
・取得コマンド(GET):キーに関連付けられた集合(バリュー)の要素をワークメモリ(またはバッファメモリ)に格納しそのサイズを返す。
・読出コマンド(READ):ワークメモリ(またはバッファメモリ)に格納されている要素(バリュー)を読み出す。
コマンド名称は適宜変更されてもよい。KVS要求のために新たなコマンドが追加されてもよい。例えば、集合(キー)に属する要素(バリュー)を整理するためのコマンドを用いてもよい。また、K2Pテーブル(後述)内の集合(キー)の並び替え、および、要素(バリュー)同士の比較などを命令するコマンドを用いてもよい。
メモリシステムは、L2PテーブルとK2Pテーブルとを有する。L2Pテーブルは、論理アドレスと物理アドレスの変換テーブルである。K2Pテーブルは、キーから得た固定長アドレス(キーアドレス)と物理アドレスの変換テーブルである。メモリシステム(デバイス)を制御するデバイス制御部(詳細は後述)は、ホストシステムからの要求に応じてこれら2種類のテーブルを使い分け、実アドレス空間へのアクセスと、KVSデータへのアクセスとを行う。
K2Pテーブルは必要に応じて作られるので、ホストシステムから作成が要求されなければ、第1のメモリブロック内に存在しない場合も有り得る。このように、KVSデータおよびK2Pテーブルは固定されて設置されているわけではなく、任意に拡張および縮小されて存在できる。このため、ユーザはKVSデータを任意に扱いつつ、アクセス可能な物理メモリ空間を最大効率で利用可能となる。
KVSデータおよびK2Pテーブルの管理は、デバイス側(ローカルシステム側)の機能である。このため、ホストシステム側はメタデータ(KVSデータ)の管理から開放されている。
KVSデータおよびK2Pテーブルの実態は、第1のメモリブロックの物理ページに格納されている。通常のL2Pテーブルでアクセスすることも可能であるし、L2Pテーブルでアクセスできない特別領域として管理することも可能である。これらに関しては後述の実施形態で説明する。
次に、KVSデータを取り出す処理の具体例を説明する。一般的にKVSとは、キー(key)と値(value)の組を書き込み、キーを指定することで値を読み出せるデータベース管理方式を意味する。一般的にはネットワーク越しに使われる例が多い。データの格納先は、いずれかのローカルのメモリまたはストレージシステムであることは間違いない。
データは通常、保存されているメモリの先頭アドレスとデータ長を指定することで読み出される。データアドレスは、ホストシステムのOSやファイルシステムによって、例えば512バイトのセクタ単位で管理される。または、ファイルシステムを限定する必要がなければ、例えばNANDフラッシュメモリの読み出し/書き込みページサイズに合わせて、4KBや8KB単位で管理されてもよい。
最も単純な検索手順は、以下の(1)〜(3)のようになる。
(1)キーをHash関数などにより固定長データへ変換し、その固定長データを使用可能なメモリのアドレスに変換して固定長アドレスを得る。変換した固定長アドレスをキーアドレスとする。
(2)NANDフラッシュメモリ内に保存されているK2Pテーブルを参照し、物理アドレスを得る。
(3)物理アドレスのデータを読み、メモリシステム外へ出力する。
このような実データアドレスとKVSデータの関係、および、キーとバリューの関係は、要素と集合の関係となっている。すなわち、通常のファイルでは、例えば「a−file.txt」というファイル名のファイルが集合であり、そのファイルの中身に「This is a book」というテキストデータがあれば、そのそれぞれの単語が要素である。
一方、キーバリューでは集合と要素の関係が逆転して整理し直すことができる。すなわち、「転置」の関係に変換して保存することができる。例えば「book」という集合の中には、「a−file.txt」、「b−file.txt」というファイル名が要素として保存されることになる。キーバリューでは、この整理しなおされた集合名(「book」)を検索し、その要素(「a−file.txt」、「b−file.txt」)を求めていることになる。これは一般に全文検索で実行されている転置ファイル作成、および、検索手順そのものであって、キーバリューの実用上の一例といえる。
転置ファイルとは、全文検索機能の実現法の1つである転置インデックス法で用いられる検索のための索引ファイルである。転置インデックス法では、コンテンツごとに、当該コンテンツを含むファイルのリストを格納する転置ファイルと呼ばれる索引データファイルを予め作成する。そして、ファイルの追加/削除の都度、転置ファイルの内容を更新する。コンテンツ検索要求に対しては、検索対象のコンテンツに対応する転置ファイルの内容を検索結果として出力すればよい。そのため、全文検索の都度、すべてのファイルの内容を調べる必要がない。従って、検索を高速化できる。転置ファイルは、KVSデータの1つの用例である。本実施形態のKVSデータは転置ファイルに限定されるものではない。また、本実施形態は全文検索に特化した技術ではない。
以下、各実施形態の詳細について説明する。
(第1の実施形態)
図1は、第1の実施形態にかかる半導体記憶装置であるデバイス100およびホストシステム200のハードウェア構成の一例を示すブロック図である。図1に示すように、ホストシステム200は、CPU201と、メインメモリ202と、CPU201およびメインメモリ202を接続するバス211と、を備えている。
デバイス100は、ホストインタフェース101と、デバイス制御部110と、メモリ制御部120と、記憶部130と、を備えている。
ホストインタフェース101、デバイス制御部110、およびメモリ制御部120は、バス102を介して接続される。デバイス100内では、高速かつ効率的なバス線配置を取られることが望ましい。一方、例えばインタフェース規格と外部インタフェース規格の相違などで、2種類以上のバス線がデバイス100内で用いられていてもよい。
ホストシステム200は、例えばAMBA(Advanced Microcontroller Bus Architecture)、などのバス211を介してホストインタフェース101に接続される。ホストインタフェース101は、SATA(Serial Advanced Technology Attachment)、PCI Express、eMMC(embedded MMC)、UFS((Universal Flash Storage)」)および、USB(Universal Serial Bus)などを適宜選択する。
ホストインタフェース101は、ホストシステム200からアドレス指定による通常のデータ操作要求とKVS要求とを受け付けることができる。
第1のメモリブロックに相当する記憶部130は、実データブロック131と、テーブルブロック132と、KVSデータブロック133と、を含む。実データブロック131は、実データを記憶するブロックを表す。テーブルブロック132は、各種テーブルを記憶するブロックを表す。KVSデータブロック133は、KVSデータを記憶するブロックを表す。
テーブルブロック132は、例えばL2Pテーブル132aと、K2Pテーブル132bと、P2L/P2Kテーブル132cと、を記憶する。KVSデータブロック133は、例えば実データから抽出したKVSデータを格納する。後述するように、K2Pテーブル132bを用いれば、キーに対応するバリューの物理アドレスを特定できる。このため、KVSデータは、少なくともバリューを含んでいればよく、キーを含まなくてもよい。
KVS要求を処理するためには、少なくともK2Pテーブル132bが記憶されていればよい。P2L/P2Kテーブル132cは、実データおよびKVSデータの追加や修正を行う場合に用いる逆引きテーブルである(詳細は後述)。L2Pテーブル132aを備えない場合は、K2Pテーブル132bに対応する逆引きテーブル(P2Kテーブル)のみを備えればよい。
記憶部130は、例えば不揮発性半導体メモリのNANDフラッシュメモリである。記憶部130は、記憶容量を増大させるため複数のチップで構成されていてもよい。記憶部130は、これに限定されるものではなく、記憶不揮発性を有する半導体メモリであればあらゆる記憶媒体を適用できる。例えば、記憶部130として、MRAM(Magnetoresistive Random Access Memory)やReRAM(Resistance Random Access Memory)やFeRAM(Ferroelectric Random Access Memory)やPCRAM(Phase-Change Random Access Memory)などの不揮発性メモリを用いてもよい。
KVSデータは、データに関連付けられたメタデータとしてのキーと、関連付けられたデータの実データアドレスの先頭アドレスとを、例えばリストとして格納する。このKVSデータを用いて、例えば、上述した転置ファイルなどを構成することができる。
メモリ制御部120は、記憶部130への書き込み/読み出し要求を受付け、書き込み/読み出し要求に応じて記憶部130に対するアクセスを制御する。メモリ制御部120は、書き込みまたは読み出しを行う際に一時的に使用する第2のメモリブロックとしてのバッファメモリ121を備える。バッファメモリ121は、例えば記憶部130の多値動作を制御するための演算機能を備えてもよい。メモリ制御部120と記憶部130は近い位置に接続されており、1つのチップ内に収めることができる。また、チップを分けた場合でも1つのパッケージに収めることもできる。記憶部130の多値動作を制御するための演算機能は、記憶部130内に備わっていてもよい。
デバイス制御部110は、ホストインタフェース101と、メモリ制御部120を介して記憶部130の相互の信号送受信を制御する。デバイス制御部110は、RAMなどのワークメモリ111を備える。
デバイス制御部110は、記憶部130から出力されたデータに対するエラー訂正符号復号(ECC)機能を備えてもよい。また、デバイス制御部110は、記憶部130の論理アドレス物理アドレス変換を行うことができる。ECC機能は、メモリ制御部120に備わっている場合がある。同様に、ECC機能は、記憶部130に備わっている場合がある。2種類以上のECC機能が別々のブロックに備わっている場合がある。本実施形態ではメモリ制御部120に備わっていることを前提とし、データ読み出しの際にはECC処理が施されてからデバイス制御部に伝えられるものとする。
メモリ制御部120のバッファメモリ121は、これら処理のために用いてもよい。バッファメモリ121に相当する第2のメモリブロックは、メモリ制御部120の内部にあることは必須ではなく、デバイス制御部110の外部にバス線を介して接続されていてもよい。第2のメモリブロックは必須ではなく、第2のメモリブロック(バッファメモリ121)を備えないように構成してもよい。ただし、デバイス制御部110が第2のメモリブロックを利用できるのであれば、KVSデータを記憶部130から第2のメモリブロック内へ読み出して参照することができる。
なお、第2のメモリブロックは、例えば揮発性であり、かつ、記憶部130に比べて小容量であるがアクセス速度が速い記憶媒体が用いられる。例えば、第2のメモリブロックは揮発性のDRAMまたはSRAMである。または、同等の速度と容量が得られれば不揮発性のMRAMなどでもよい。
第2のメモリブロックは、ホストインタフェース101の通信速度と、記憶部130のアクセス速度との速度差を補うために使用される。記憶部130にフラッシュメモリを用いたメモリシステムであれば、デバイス制御部110、第2のメモリブロック、およびL2Pテーブル132aを用いて、ウェアレベリング(メモリセル寿命の平坦化)機能を備えるのが一般的である。各実施形態でこのようなウェアレベリング機能を備えるように構成してもよい。
図2は、デバイス制御部110の機能構成の一例を示すブロック図である。図2に示すように、デバイス制御部110は、受付部112と、取得部113と、出力制御部114と、書込部115と、転記処理部116と、生成部117と、を備えている。
受付部112は、キーに対応するバリューの取得要求を受け付ける。
取得部113は、記憶部130から各種データを読み出す。例えば、取得部113は、記憶部130に記憶されたK2Pテーブル132bを用いて、取得要求に含まれるキーのキーアドレスに対応するバリューの物理アドレスを取得する。また、取得部113は、物理アドレスのバリューをKVSデータから読み出す。
書込部115は、記憶部130に対して各種データを書き込む。書込部115が、ウェアレベリング機能を備えてもよい。例えば、書込部115は、P2Kテーブルに記憶された書換え回数(書換え頻度)を参照し、書換え回数が小さい物理ページを優先して使用するように構成してもよい。
出力制御部114は、読み出されたバリューを取得要求に対する応答として出力する。
転記処理部116は、ガベージコレクションおよびコンパクションを実行する。ガベージコレクションとは、ブロック内の不使用ページを整理する処理である。コンパクションとは、離散化した使用中ページを1つの物理ブロックにまとめて空きブロックを確保する処理である。
生成部117は、キーに対応する固定長のキーアドレスを生成する。生成部117は、例えばハッシュ関数を生成する機能を有する電子回路などにより実現できる。この電子回路は、専用回路、および、ハッシュ関数アルゴリズムを入力した汎用回路のいずれを用いてもよい。ハッシュ関数を用いたデータ格納方法および検索方法は後述する。
なお、図2に示す各部の全部または一部は、ハードウェア回路により実現してもよいし、デバイス制御部110に備えられるCPUにより実行されるソフトウェア(プログラム)により実現してもよい。
このプログラムは、例えばROM等に予め組み込んで提供される。または、第1のメモリブロックからシステムデータとして、デバイス起動時にプログラムが読み込まれる仕様にしてもよい。
本プログラムを、インストール可能な形式又は実行可能な形式のファイルでCD−ROM(Compact Disk Read Only Memory)、フレキシブルディスク(FD)、CD−R(Compact Disk Recordable)、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録されてコンピュータプログラムプロダクトとして提供するように構成してもよい。
また、本プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本プログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
本プログラムは、上述した各部を含むモジュール構成となっており、実際のハードウェアとしてはCPU(プロセッサ)が上記記憶媒体からプログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、上述した各部が主記憶装置上に生成されるようになっている。
次に、ハッシュ関数を用いたキーアドレス作成方法について説明する。デバイス制御部110がハッシュ関数を生成する機能またはハッシュ関数アルゴリズムを実行できるCPUを備えていると、任意長ビットデータをハッシュ関数によって固定長ビットデータに変換することができる。ここでは、この機能を用いて、生成部117が、任意長ビットデータのキーから、固定長ビットデータのキーアドレスを生成する例を示す。
ハッシュ関数としては、なるべく均一かつ疎な暗号学的ハッシュ関数が好ましい。例えば、SHA−1(Secure Hash Algorithm−1)、SHA−2(Secure Hash Algorithm−1)、MD4(MessageDigest4)、および、MD5(MessageDigest5)などが使用される。
例えば、MD5を用いて変換すると、「abcd」は、16バイトすなわち128ビット長の「e2fc714c4727ee9395f324cd2e7f331f(16進数)」となる。同様に、SHA−1アルゴリズムなどのアルゴリズムを用いて変換しても特定の固定長データパターンが得られる。
生成部117は、ハッシュ関数に従って生成された、ある固定長ビットのビット列を、所望のビット長(BitLength)に短縮する機能を有する。例えば、生成部117は、次式の除算機能を有する。
<KeyID>=hash(<Key>) mod BitLength
生成部117は、このようにビット除算や剰余算を行ってビット列を短縮する。生成部117が、単純に、生成された固定長ビットのビット列の先頭から所望の長さの分だけを切り取って使用してもよい。上記の例で、128ビットから32ビットを切り取ると「e2fc714c(16進数)」である。さらにKVSを格納するメモリのアドレス単位に沿ってアドレスを揃える。例えば下位8ビットを切り捨てて「e2fc7140(16進数)」となる。これがキーアドレスとなる。
このように生成されたキーアドレスの長さを、L2Pテーブル132aの論理アドレス長と等しくしておけば、L2Pテーブル132aの管理方法をそのまま利用できる。すなわち、論理アドレスを物理アドレスに変換する方法と同様に、キーアドレスを物理アドレスに変換することができる。
ハッシュ関数を用いたとしても、異なるデータからのハッシュ値が同一になる問題、いわゆるハッシュ値の衝突は、数学的には確率がゼロにはならない。
ハッシュ関数以外の、任意長から固定長を生成する簡単な方法として、「book」を「bo」、「blue」を「bl」、「note」を「no」というように、先頭数バイト分を切り取って、例えばそれをASCIIコードで変換して、「bo(1バイト文字)」を「0x62,0x6f」のようにして固定長を生成する方法を用いてもよい。ただしこの場合も衝突の可能性が生じるので注意が必要である。
ここで、一般的なL2Pテーブル132aを使ったデータアクセスの仕組みを、図3を用いて説明する。
SSD等のデバイス100へのデータアクセスは、ホストインタフェース101がコマンドを受け付けて、デバイス制御部110がそのコマンドを解釈して実行される(ステップS11)。
例えば書き込みコマンドのときには、書き込むデータは、当該コマンドと共にホストインタフェース101を介して送られる。このデータは、デバイス制御部110がアクセス可能なRAM(例えばワークメモリ111)に格納される。
例えば、読み出しコマンドを実行する場合、デバイス制御部110は、ワークメモリ111に事前に読み出したL2Pテーブル132aを用いて、当該コマンド内で指定された論理アドレスを物理アドレスに変換する(ステップS12)。
ワークメモリ111内に読み出されているL2Pテーブル132aに、これから読む論理アドレスが存在しない場合、デバイス制御部110は、記憶部130に保存されているL2Pテーブル132aを読み出して、ワークメモリ111に格納する(ステップS13)。その後、デバイス制御部110は、ワークメモリ111に格納したL2Pテーブル132aを用いて、論理アドレスを物理アドレスに変換する。デバイス制御部110は、得られた物理アドレスを指定して、記憶部130内の物理ページにアクセスし、データを読み出す(ステップS14)。
上述のように、従来はKVSデータも通常のデータとして管理されていた。このため、KVSデータを読み出す際には、まずKVSのための管理ファイル(転置ファイル)を通常アクセスでL2Pテーブル132aを使って読み出し、さらに管理ファイルを元に特定ファイル内に保存されたKVSデータを読み出していた。そして、KVSデータを読み出す際にも、L2Pテーブル132aを参照する必要があった。このため、結局L2Pテーブル132aへのアクセスを2回以上行う必要があった。
そこで、本実施形態では、L2Pテーブル132aと同様のアドレス変換テーブルであるK2Pテーブル132bを用いてKVSデータにアクセス可能とする。図3を用いて、K2Pテーブル132bを使ったKVSデータへのアクセスの仕組みを説明する。
本実施形態のデバイス100へのデータアクセスは、ホストインタフェース101がKVSコマンドを受け付けて、デバイス制御部110がそのKVSコマンドを解釈して実行される(ステップS11)。
例えばKVSコマンドが登録コマンド(PUT)のときには、登録するデータはKVSコマンドと共にホストインタフェース101を介して送られて、デバイス制御部110がアクセス可能なRAM(例えばワークメモリ111)に置かれる。登録するデータは、通常のデータと同じようにワークメモリ111に格納されてもよいし、記憶部130に格納する前のバッファとして他のメモリに格納されてもよい。説明を簡単化するためにワークメモリ111に格納されるものとする。
上述のように、本実施形態では、デバイス制御部110がデータの一部であるキーをアドレス(キーアドレス)に変換する仕組み(生成部117)を有する。例えば、キーに対応するバリューの取得要求に相当する取得コマンドを実行する場合、生成部117は、取得コマンド内で指定されたキーからキーアドレスを生成する(ステップS15)。このキーアドレスを元に、デバイス制御部110は、ワークメモリ111内でキーアドレスと物理アドレスの変換を行う(ステップS16)。
ワークメモリ111内に読み出されているK2Pテーブル132bに、これから読むキーアドレスが存在しない場合、デバイス制御部110は、記憶部130に保存されているK2Pテーブル132bを読み出して、ワークメモリ111に格納する(ステップS17)。その後、デバイス制御部110は、ワークメモリ111に格納したK2Pテーブル132bを用いて、キーアドレスを物理アドレスに変換する。デバイス制御部110は、得られた物理アドレスを指定して、記憶部130内の物理ページにアクセスし、KVSデータを読み出す(ステップS18)。
本実施形態によれば、KVSデータはK2Pテーブル132bで管理されているため、KVSデータを読み出す際に、L2Pテーブル132aへのアクセスを省略して、直接記憶部130の物理アドレスを参照して読み出せるようになる。このため、KVSデータに対するアクセス速度が向上する。
図4−1は、K2Pテーブル132bのデータ形式の一例を示す図である。K2Pテーブル132bは、複数のエントリを含むテーブルデータの形式を取る。エントリは、キーアドレスと物理アドレスとを対応させたアドレス情報(K2Pペア)を少なくとも1つ含む。例えば、K2Pテーブル132bは、32ビット(4バイト)のキーアドレスを、32ビット(4バイト)の物理アドレスのペアである8バイトのK2Pペアを格納していく。アドレス長は一例であり、システムの規模に合わせて適宜変更してよい。
図4−1では、K2Pテーブル内にキーアドレスを格納している例を示している。図4−2のように、エントリのアドレス保存順をキーアドレス値に対応させてもよい。これにより、キーアドレスを保存する容量をなくすことができる。図4−2の例では、物理アドレス(4バイト)だけでよいので、K2Pテーブルの容量は、図4−1の場合に比べて半分になる。
また、1エントリあたりのK2Pペアの数は、K2Pテーブル132bにアクセスするデバイス制御部110の仕様、ワークメモリ111の仕様、および、記憶部130のページサイズなどから、速度や設計容易性などを考慮して決めればよい。例えば、K2Pペアのサイズが8バイトのとき、1エントリあたり8KBで管理するとK2Pペアは1000個格納される。また例えば、1エントリあたり256Bで管理するとK2Pペアは32個格納される。
K2Pテーブル132bは、キーアドレスの生成に伴い、任意の拡張性を持たせることができる。例えば、ホストシステム200からのKVSコマンドの要求によって、キーアドレスが生成された場合、生成順にK2Pペアを作成していくこともできる。
この場合、K2Pテーブル132b自体は小さくなるが、ランダムなキーアドレスが生成順に格納される。従って、このままK2Pペアを検索すると検索時間が増加する可能性がある。このため、検索の高速化のために、K2Pペアの検索のためのテーブルをさらに用意してもよい。
また反対に、K2Pテーブル132bは最初から固定の大きさに設定してもよい。そもそも、デバイス100の中で記憶部130の容量追加の可能性がない場合、すなわち拡張性がない場合、物理ページの総数は決まっている。このため、最初からK2Pテーブル132bの大きさを固定しておいてもよい。例えばK2Pペアが8バイトで1エントリあたり8KBのとき、1エントリあたり1000ページ分の物理アドレスデータを格納していることになる。記憶部130の記憶容量が8GBでページサイズが8KBのときには、1000000ページが存在する。従って、K2Pテーブル132bは1000エントリを格納できればよい。すなわちK2Pテーブル132bの大きさは8MBとなる。
どの方式を採用するかは、デバイス100の規模および拡張性などを考慮して決めることができる。
次に、K2Pテーブル132bとL2Pテーブル132aの管理方法について図5および図6を用いて説明する。図5は、K2Pテーブル132bを、L2Pテーブル132aと独立に管理する例を示している。
本実施形態では、デバイス100が、通常のデータを取り扱うためのL2Pテーブル132aを搭載している場合、L2Pテーブル132aおよびK2Pテーブル132bに対して同様のデータ形式を用いる。これにより、デバイス制御部110のアルゴリズムや命令を共通化させて、必要なハードウェアの追加分を少なくすることができる。
例えば、L2Pテーブル132aは、論理アドレス32ビット(4バイト)と物理アドレス32ビット(4バイト)の合計8バイトのペアを格納する。同様に、K2Pテーブル132bは、キーアドレス32ビット(4バイト)と物理アドレス32ビット(4バイト)の合計8バイトのペア(K2Pペア)を格納する。
デバイス制御部110は、分類機能401を用いて、扱うべきアドレスがL2Pテーブル132aのアドレスであるか、または、K2Pテーブル132bのアドレスであるかを判断する。デバイス制御部110は、判断の後は、両者を同様に処理していくことができる。
図5のように、例えば、アドレス値として「0x0000_1000」が参照される場合であって、分類機能401によって、通常のデータの論理アドレスであると判断された場合は、デバイス制御部110はL2Pテーブル132aを参照する。
また、アドレス値として「0xF356_af14」が参照される場合であって、分類機能401によって、キーアドレスであると判断された場合は、デバイス制御部110は、K2Pテーブル132bを参照する。いずれかのテーブルを参照して物理アドレスが得られた後の処理は、基本的にL2Pテーブル132aもK2Pテーブル132bも同様である。
分類機能401は、いくつかの方法で実現できる。1つ目は、デバイス制御部110がホストシステム200からの要求(コマンド)を保持しているときに、保持するコマンドがK2PコマンドであればK2Pテーブル132bを読み、通常のデータアドレス指定のコマンドであればL2Pテーブル132aを読む方法である。
分類機能401の方法の2つ目は、分類のためのテーブル(分類テーブル)を設けておき、論理アドレスとキーアドレスのいずれを参照すべきか判断する方法である。分類テーブルを用いる場合は、論理アドレスとキーアドレスとが衝突しないようにキーアドレスの生成の段階で管理しておく必要がある。例えば、論理アドレスとして「0x0000_1000」が既に使用されていて、生成したキーアドレスが偶然「0x0000_1000」となったとする。この場合は、アドレスが衝突しているので、分類テーブル内でキーアドレスであることを判断してK2Pテーブル132bを読むようにする。分類機能401は、デバイス制御部110の設計要件に従い、製造者が選択することができる。
分類テーブルは、例えばアドレス値と使用状況を示す値の対をエントリとして構成しておく。アドレスが与えられると、分類テーブル内をサーチして、該当するアドレスが論理アドレスで使用されているか、物理アドレスで使用されているかを調べることができる。ただし、デバイス制御部110は予め通常のアドレス指定による読み書きかKVSコマンドなのかを把握しているので、分類テーブルは必ずしも必要ではない。
図6は、K2Pテーブル132bとL2Pテーブル132aとを1つの全体テーブルとして管理する例を示している。
例えば、32ビットの論理アドレスのうち、L2Pテーブル132aで使用する数を例えば「0x1000_0000」までのように所定サイズに制限しておく。そして、「0x1000_0001」以上のアドレスはキーアドレスであると判断する。境となるアドレス値は、デバイス制御部110が管理できるようにしてもよい。図6は、キーアドレスがそのまま全体テーブルの後半のアドレスに対応している例を示している。
図6に例示するような方法では、分類機能401が、全体テーブルのアドレスが所定の境目よりも前半か後半かを判断することで、アクセスすべきテーブルがL2Pテーブル132aおよびK2Pテーブル132bのいずれであるかを知ることができる。
図6の方法と、分類テーブルを用いる上述の方法とを組み合わせて用いることもできる。全体テーブルとしては、メモリシステム内の総物理ページ分を格納できる大きさのテーブルを用意する。
次に、生成部117が生成するキーアドレスの衝突について図7を用いて説明する。
一般にKVS方式では、キーの数に制限は設けない。このため、メモリシステム内に格納されるKVSの数、言い換えるとキーの種類が多くなると、キーに対して生成されるキーアドレスが衝突するようになる。例えば、キーが「Blue」という単語のときのキーアドレスが「0x0000_41a9b」であるとする。別のキーである「Car」という単語から作られるキーアドレスが偶然に「0x0000_41a9b」と一致してしまう確率はゼロではない。キーアドレスの生成に用いるHash関数に高度なものを用いて、数学的に疎な数を生成したとしても、キーアドレスの値を固定長サイズで小さく変換した際に、衝突の可能性が生じる。
キーアドレスの衝突をできるだけ回避するための方法はいくつか考えられる。1つ目は、キーアドレスをできるだけ長いままで用いる方法である。例えば、Hash関数で変換したままの値をキーアドレスとして用いればよい。ただし、アドレス長が長いため、K2Pテーブル132bが大きくなるので、その分だけ容量を消費するという問題、および、L2Pテーブル132aとのデータ形式の整合性が失われるという問題が生じる。記憶部130の容量を十分に大きくし、キーの種類に対して十分大きな数の物理ページ数を用意できるならば、キーの衝突確率を下げることができる。しかし、この場合であっても衝突確率をゼロにすることはできない。
2つ目は、任意長データを固定長変換方式として2つ以上の方式を組み合わせる方法である。例えば、キーアドレスを32ビット長にするとき、16ビット分をHash関数より生成し、ASCIIコードなどによってキー自体を変換したバイナリデータで残り16ビット分を表し結合させる方法を用いることができる。前半16ビットはランダムな値だが後半16ビットがデータそのものに由来する値となるため、キーの衝突は極力低下させることができる。しかし、この方法でも数学的に衝突の可能性はゼロではなく、キーの数が増えていくと衝突の可能性は増える。
結局、論理アドレスとは異なり、与えられるキーは任意長かつ無限のバリエーションを有していることから、キーから生成されるアドレス値は衝突を避けられない。
そこで、本実施形態では、衝突が発生した場合にも正しくバリューを読み出せる機能を備える。図7は、K2Pテーブル132bと、物理ページに格納されたバリュー(バリューデータ)とを模式的に示す図である。
図7の上部には、「Key1」が「Blue」であり、「Value1」がそれに対応するコンテンツ(バリュー)「<contents 1>」であるKVSデータの例が示されている。同様に、「Key2」が「Car」であり、「Value2」がそれに対応するコンテンツ「<contents 2>」であるKVSデータの例が示されている。
生成部117がHash関数により「Blue」と「Car」をそれぞれ変換してキーアドレスを生成した結果、これらのキーアドレス「0x0000_41a9b」が衝突したものとする。取得部113は、このキーアドレスに関連付けられた物理アドレスを参照し、バリューデータを読み出す。物理ページ内には「Key1」=「Blue」と「Key2」=「Car」にそれぞれ対応するバリューが保存されている。取得部113は、物理ページ全体を例えばワークメモリ111に読み出す。その後、デバイス制御部110またはホストシステム200が、読み出された物理ページを参照して、目的としていたキーに対応するバリューが保存されているかを判断する。例えば、目的とするキーが「Blue」であれば、デバイス制御部110またはホストシステム200は、読み出した物理ページ全体から、「Blue」に対応するバリュー「<contents 1>」を取得できる。また、例えば、目的とするキーが「Car」であれば、デバイス制御部110またはホストシステム200は、読み出した物理ページ全体から、「Car」に対応するバリュー「<contents 2>」を取得できる。なお、図7の例では、「<contents 2>」は、「<contents 2−1>」および「<contents 2−2>」として、2つのページに分割されて記憶されている。以下に述べるように、次のページを読むためのポインタを用いることで、分割されたバリューを連続して読み出すことができる。
すなわち、KVSでは、キーおよびバリューは任意長であるため、1つの物理ページ内にデータが収まるとは限らない。このため、図7に示したように、物理ページ内の特定箇所に次のページを読むためのポインタとなる記憶位置を示すアドレス(次ページアドレス:next page pointer(以下、次ページポインタという))を保存し、連続して読めるようにしておく。このようにKVSデータを格納する物理ページが複数に渡る場合は、その分だけ物理ページを消費する。次ページポインタは、NANDフラッシュメモリを用いた記憶部130の場合は、1つのページ内の冗長データ部または管理データ部と呼ばれる領域に格納しておくことができる。
次に、逆引きテーブルについて説明する。実データおよびKVSデータの追加や修正を行う場合、それぞれL2Pテーブル132aおよびK2Pテーブル132bの逆引きテーブルが必要となる。
記憶部130としてNANDフラッシュメモリを用いている場合、記憶セルは主に書き込みによって寿命が低下していく。このため、物理ページを均等に利用して記憶セルの寿命を最大限に利用する手続きが用いられる。物理ページを均等に利用して寿命を延ばすための技術は、ウェアレベリングと呼ばれる。NANDフラッシュメモリは、一般的にページ単位で読み書きされる。一方、NANDフラッシュメモリは、ブロック単位で消去が行われる。このため、特定のブロックにデータが集中すると、そのブロックの寿命が低下し、同時に信頼性も低下する。また、NANDフラッシュメモリは通常、同一ページに対する追記書き込みができない仕様になっていることが多い。このため、ある物理ページに書き込まれたデータを変更する場合は、別の物理ページに変更したデータを書き込み、その物理ページのアドレス(物理アドレス)に対して論理アドレスを対応させる。
このように、NANDフラッシュメモリを用いたメモリシステムでは、物理アドレスを論理アドレスに対応づけたP2Lテーブルを持つことが一般的である。この場合、新しく物理ページを割り当てる時に、いずれの物理ページが使用されていないか、または、いずれのページの書換え頻度が少ないかという履歴を元にして、いずれの物理ページを用いるかが決定される。
本実施形態でも、P2Lテーブルを用いて物理ページを管理するのと同様の手法により、K2Pテーブル132bの逆引きテーブルであるP2Kテーブルを用いてKVSデータの物理ページを管理する。これにより、デバイス100の寿命と信頼性を向上させることができる。
図8は、P2Kテーブルのデータ形式の一例を示す図である。P2Kテーブルは、物理アドレスとキーアドレスとのペアを各エントリに含む。
各エントリには、物理アドレスが使用されていることを示す例えば1ビットの判定情報(フラグ)を持たせることができる。このフラグを参照することにより物理アドレスの使用状況が判別できる。図8に示すように、例えば、「0x0」および「0x1」の場合に、それぞれ物理アドレスが使用されていないこと、および、使用されていること、を表すフラグを用いることができる。
なお、図8の判定情報は一例であり、これに限られるものではない。物理アドレスが使用されているか否か(物理アドレスのページが有効であるか否か)を表す情報であればどのような情報であってもよい。転記処理部116は、P2Kテーブルのフラグ(判定情報)を参照して、ガベージコレクションおよびコンパクションを実行する。例えば、転記処理部116は、P2Kテーブルのフラグが「0x1」である(使用されている(有効な))物理アドレスのページのデータを対象としてコンパクションを実行する。
K2Pペアが作られたあとで、P2Kテーブルも作成しておくことで、物理ページの管理を容易に行うことが可能となる。各エントリが、物理アドレスに対応する物理ページの書換え回数(書換え頻度)を含んでもよい。書換え回数を記録しておけば、書換え回数の少ない物理ページを選んで使用する制御が可能となる。
図9は、P2LテーブルとP2Kテーブルとを融合させたテーブル(P2L/P2Kテーブル132c)のデータ形式の一例を示す図である。このテーブルを参照することにより、物理アドレスが論理アドレスに対応付けられているのか、キーアドレスに対応付けられているのかを知ることができる。
なお、図7に示すようにKVSデータを格納する物理ページが複数に渡る場合も、各物理ページの物理アドレスと、KVSデータの論理アドレスとをP2Kテーブルに記録して管理しておく。
次に、このように構成された第1の実施形態にかかるデバイス100による各種処理について図10〜図13を用いて説明する。図10は、登録コマンドを受け付けた場合の処理の一例を示すフローチャートである。
受付部112が、登録コマンドを受け付けると、図10の処理が開始される。登録コマンドは、例えば登録するKVSデータを含む。生成部117は、登録するKVSデータに含まれるキーをキーアドレスに変換する(ステップS101)。
取得部113は、K2Pテーブル132bを参照し、キーアドレスが既にK2Pテーブル132bに存在していないか検索する(ステップS102)。取得部113は、キーアドレスがK2Pテーブル132b内に見つかったか否かを判断する(ステップS103)。見つかった場合(ステップS103:Yes)、取得部113は、キーアドレスに対応するバリューの物理アドレスを参照し(ステップS104)、バリューの物理ページに空きがあるかを判断する(ステップS105)。バリューの物理ページに空きがない場合(ステップS105:No)、取得部113は、次の物理アドレスへジャンプするためのポインタ(次ページポインタ)を格納して、その物理アドレスを参照する(ステップS106)。取得部113は、P2KテーブルおよびP2Lテーブルの少なくとも1つを参照して空いている物理アドレスを探し、ジャンプする物理アドレスを決定する。書込部115は、使用した物理アドレスをP2Kテーブルに登録する(ステップS107)。
バリューの物理ページに空きがある場合(ステップS105:Yes)、書込部115は、登録するKVSデータに含まれるバリューを当該物理ページに追記する(ステップS108)。ただし、フラッシュメモリなどのように、同一ページ内への追記が禁止される場合がある。その場合は、一般的なSSDなどと同様に、別の物理アドレスの物理ページにまとめてデータ(バリュー)を書き込む。出力制御部114は、追記後のバリューのデータサイズを出力し(ステップS109)、処理を終了する。
ステップS103で、キーアドレスがK2Pテーブル132b内に見つからなかった場合(ステップS103:No)、書込部115は、空いている物理アドレスの物理ページにバリューを追加する(ステップS110)。書込部115は、キーとバリューの物理アドレスとを関連付けてK2Pテーブル132bに登録する(ステップS111)。書込部115は、使用した物理アドレスをP2Kテーブルに登録する(ステップS112)。出力制御部114は、追記後のバリューのデータサイズを出力し(ステップS113)、処理を終了する。
図11は、書込コマンドを受け付けた場合の処理の一例を示すフローチャートである。受付部112が、書込コマンドを受け付けると、図11の処理が開始される。書込コマンドは、例えばKVSデータを含む。書込コマンドは、既に存在するキーに対するバリューの追記コマンドである。
ステップS201〜ステップS209は、図10のステップS101〜ステップS109までと同様であるため説明を省略する。
ステップS103で、キーアドレスがK2Pテーブル132b内に見つからなかった場合(ステップS203:No)、取得部113は、キーが存在しないことを返して処理を終了する(ステップS210)。取得部113は、例えば、SIZE=0を返すことにより、キーが存在しないことを通知する。
図12は、取得コマンドを受け付けた場合の処理の一例を示すフローチャートである。受付部112が、取得コマンドを受け付けると、図12の処理が開始される。取得コマンドは、例えばキーを含む。
ステップS301〜ステップS303は、図10のステップS101〜ステップS103までと同様であるため説明を省略する。
キーアドレスが見つかった場合(ステップS303:Yes)、取得部113は、キーアドレスに対応するバリューの物理アドレスを参照し(ステップS304)、キーアドレスに対応するバリューを読み出してワークメモリ111(またはバッファメモリ121)に格納する(ステップS305)。出力制御部114は、読み出したバリューのデータサイズを出力し(ステップS306)、処理を終了する。
ステップS303でキーアドレスがK2Pテーブル132b内に見つからなかった場合(ステップS303:No)、取得部113は、キーが存在しないことを返して処理を終了する(ステップS307)。取得部113は、例えば、SIZE=0を返すことにより、キーが存在しないことを通知する。
図13は、読出コマンドを受け付けた場合の処理の一例を示すフローチャートである。受付部112が、読出コマンドを受け付けると、図13の処理が開始される。読出コマンドは、例えばサイズの指定を含む。
取得部113は、集合(バリュー)の要素のワークメモリ111の保管場所を参照し(ステップS401)、バリューがこの保管場所内に見つかったか否かを判断する(ステップS402)。集合(バリュー)の要素が見つからなければ(ステップS402:No)、取得部113は、出力として例えばS=NULLを返すことにより、集合(バリュー)の要素が存在しないことを通知する(ステップS405)。見つかった場合(ステップS402:Yes)、指定されたサイズ分に対応する集合(バリュー)の要素を読み出す(ステップS403)。取得部113は、読み出したバリューの要素を出力し(ステップS404)、処理を終了する。
図13の例ではサイズ指定のみだが、ワークメモリ111内の場所(アドレス)を指定して読み出してもよい。
なお、実際の手順やコマンドは図10〜図13に示す例に限定されない。例えば、複数のキーが見つかった場合には、キーが見つかったことを示すフラグをたてておき、後でまとめてバリューを読むなどの手順を実行可能としてもよい。
以上のように、本実施形態では、ホストインタフェース101、または、ホストインタフェース101を介してデバイス制御部110やメモリ制御部120などがコマンドを受け付けてKVSの一連の処理を実行することができる。
(変形例1)
変形例1では、物理ブロックテーブルを用いる例を説明する。図14は、物理ブロックテーブルを用いる場合のデータアクセスの仕組みを説明する図である。
図14は、論理アドレスから変換された物理アドレスを、さらに物理ブロックとページオフセットとに変換する物理ブロックテーブル1401を用いる例を示している。図15は、物理ブロックテーブルのデータ形式の一例を示す図である。図15の物理ブロックテーブルは、物理アドレスから、当該物理アドレスのページが対応する物理ブロックを特定する際に利用される。このような物理ブロックテーブルを有しておくことで、例えばNANDフラッシュメモリを記憶部130として用いたデバイス100であれば、ガベージコレクションおよびコンパクションを効率的に行うことができる。
本実施形態のK2Pテーブル132bから参照されるのは物理アドレスである。このため、物理ブロックテーブルを用いることにより、KVSデータのガベージコレクションとコンパクションを、通常のL2P形式のデータ(実データ)と同様に取り扱うことができる。従って、K2PとL2Pが同居したデバイス100であっても、比較的容易に信頼性の高いシステムを作ることができる。
(変形例2)
変形例2では、多段階の検索テーブルを用いてL2Pテーブルへアクセスする例を説明する。図16に示すように、分類機能401により論理アドレス(実データ)とキーアドレス(KVSデータ)のいずれを参照するか分類した後、さらに1以上の検索テーブルを用いて、論理アドレスに対応する物理アドレスを参照するように構成してもよい。
L2Pテーブルは、記憶部130の全ページ情報を格納しているため、ワークメモリ111の容量と比較して大きなサイズとなる。デバイス制御部110は、アドレス指定の読み出し・書込み命令を受けた時に、目的の論理アドレスを格納するL2Pテーブルのエントリを第1のメモリブロックから探す必要がある。
例えば、記憶部130の容量が64GBのとき、1ページ容量が4KBだとすると、16000000ページ存在することになる。アドレス単位が32ビット(4バイト)であるとすれば、L2Pテーブルの容量は64MBになる。ワークメモリ111は一般的にSRAMで構成されるので、全L2Pテーブルを格納することができない。従って、目的とするL2Pエントリを記憶部130から効率よく探すためには、L2Pエントリを探すための検索テーブルを用いることができる。検索テーブルをツリー方式でたどって目的まで到達する。L2Pエントリのエントリ数とワークメモリ111の容量に応じて、検索テーブルを多段にする。検索テーブルを多段にすると、検索テーブルの読み出し回数が増えるため、その分L2P処理が遅くなる場合もあるため、適当な段数を用いる。
上記実施形態では、K2Pテーブル132bを単独で用いることができるため、または、L2Pテーブル132aと共存させることが容易なため、ユーザはKVSデータに対する処理によるシステムの負荷増大を感じることがない。
共存させる場合であっても、図16のように、K2Pテーブル132bの参照がL2Pテーブル132aの参照よりも少ない回数で行うことができるならば、KVSデータの方がアクセス速度を速くすることができる。
なお、KVSのデータ形式を採用している時点で、要求しているキーに対応するバリューのデータが直ちに得られるので検索が速くなる。本変形例では、KVSデータへのアクセス自体が余計なL2P参照の手順を省略できるため、さらに高速になる。L2Pテーブルの管理と同様の仕組みを用いているため、KVSデータを格納することのハードウェアコストの増大はほとんど無くすことができる。
(変形例3)
図4では、キーアドレスと物理アドレスの対応を複数個まとめたものを1つのエントリとしたK2Pテーブル132bの例を示した。変形例3では、これを拡張し、物理アドレスのあとにバリューのハッシュ値を格納する例を示す。図17は、変形例3のK2Pテーブル132bのデータ形式の一例を示す図である。
ホストシステム200からKVS要求の、例えば、GETコマンドと集合演算命令のANDがデバイス100に届いたとき、デバイス100側はハッシュ値を含むK2Pテーブル132bを参照することで、バリューの中身とその集合演算を予め記憶部130から読み出す前に判断することができる。無駄な読み出しが減るため、検索および集合演算に係る時間が短縮できる。
KVSではこの例のように、1つのキーに対し、複数のバリューが付与される場合がある。バリューは、物理アドレスが指し示す、記憶部130のページ内にそのまま保存される。図17の例では、各バリューのハッシュ値も、K2Pテーブル132bにまとめて保存しておく。こうしておくことで、バリューを読み出すことなく、各バリューが一致しているか否かを、K2Pテーブル132bを用いて判別することができる。
前述したようにハッシュ値は衝突している可能性があるので、ハッシュ値が同一であってもバリューを読み出したあとに、実際に同一なデータかどうかは比較照合しなければならない。しかし、同一データであって異なるハッシュ値であることはないので、ハッシュ値比較の段階で、まったく条件に一致していないデータは除外しておくことができる。この仕組みにより、余計なバリューの読み出しが少なくなり、NANDフラッシュメモリのように比較的読み出し速度が遅いRAMの場合は、検索速度が速くなる。
図17の例のように、K2Pテーブル132b内にバリューのハッシュ値が格納されている場合、そのハッシュ値と、ハッシュ値をアドレスとして格納できるRAMと、を使って、ハッシュ検索を行うことができる。例えば、ハッシュ値をアドレスとして、該当するアドレスにデータが書き込まれる。
例えばアドレスごとに4バイト格納できるRAMであれば、「value1」の値として「0x1010_1010」を書く。次に「value2」の値として、「0x0101_0101」をXORで上書きして書き込む。同じアドレスに対して書き込んだ場合、そのアドレスのデータは「0x1111_1111」になる。これを読めば一致していることが判断できる。
ただし、上述のようにハッシュ値は衝突している可能性があるので、衝突の有無を検証する必要がある。バリューを参照して確かめれば確実であるが、ここでは図18を用いて別の方法を例示する。各バリューは2種類以上のハッシュ関数で変換した値を持つとする。図18の例は、2種類のハッシュ関数を用いる例である。1種類だけでは衝突していたバリューも、異なるハッシュ関数で変換した場合は異なるハッシュ値になる確率が高くなる。このため、衝突の可能性を可及的に減らすことができる。ただし、2種類以上のハッシュ値を格納することはK2Pテーブル132bの肥大化を招くため、バリューの一致判定の目的に合わせて設計する必要がある。なお、ハッシュ値が一致している条件は集合演算のAND条件に相当する。
このように、第1の実施形態にかかる半導体記憶装置では、KVSデータを取り出す処理を、不揮発性メモリのアドレス管理方式と共存させることができる。これにより、KVS併用による書き込みなどデータ管理の負荷を増大させずに、読み出しではK2Pテーブルを用いてキーから直接的に物理アドレスを参照できる。このため、従来の方法では必要であった途中のL2P処理(例えばL2Pテーブルへのアクセス)を省略し、簡素かつ高速に検索を行うことができる。
(第2の実施形態)
第2の実施形態にかかる半導体記憶装置は、CAM(Content Addressable Memory)を用いてデータを検索可能とする。図19は、第2の実施形態にかかるデバイス100−2のハードウェア構成の一例を示すブロック図である。図19に示すように、デバイス100−2は、ホストインタフェース101と、デバイス制御部110と、メモリ制御部120−2と、記憶部130と、を備えている。
第2の実施形態では、メモリ制御部120−2がCAM122−2をさらに備える点が第1の実施形態と異なっている。その他の構成は第1の実施形態の図1と同様であるため説明を省略する。
記憶部130がNANDフラッシュメモリである場合は、記憶部130内に存在する読み出し/書き込みのためのバッファメモリがCAMであってもよい。すなわち、記憶部130から読み出されたデータが、デバイス100−2内のバス102を通って、デバイス制御部110が管理するワークメモリ111に到達する前に、CAM動作によってデータの照合が行われる構成であればよい。
上述したように、キーの衝突が問題となる場合、ページ内からデータを読み出して、そのページ内に特定のキーが保存されているか判断する機能が必要となる。また同様に、ページが複数に渡る場合も、例えばページの冗長データ部に保存されている次ページポインタを判別して次ページを読むための制御信号を出力するための機能が必要となる。
本実施形態で用いられるCAM122−2はこのために利用される。CAM122−2は、予め読み出されたKVSデータを記憶する。CAM122−2は、読み出されたKVSデータにキーが含まれていれば、正常値として当該キーに対応するバリューデータをワークメモリ111へ転送する。CAM122−2は、キーが含まれていなければ、エラー信号をデバイス制御部110に返す。
この仕組みにより、デバイス制御部110が、例えばワークメモリ111内のバリューデータからKVSデータを検索することが不要になり、KVS動作がより円滑に行われるようになる。次ページポインタの検索もまた同様である。
例えば、次ページポインタはページの最後に付与されており、実データ部、または、管理データ部の中に格納されている。いずれの場合も次ページポインタの存在を示す特定のデータ(特定情報)を、同様にCAM122−2を用いて検索することができる。次ページポインタの発見をメモリ制御部120へ通知することで、例えばメモリ制御部120は、次ページポインタの示すアドレスを続けて読みに行くことができる。次ページポインタの発見をデバイス制御部110へ通知する場合も同様であって、いずれの場合も次ページポインタの存在をページ内データから読み取る方式よりは速度が向上する。
図20は、CAM122−2を用いた検索処理例を説明する図である。例えば、キー「Car」が入力された場合、CAM122−2は、一致するキー「Car」を記憶しているため、このキー「Car」に対応するバリューである「<contents 2−1>」を出力する。また、例えば、次ページポインタが記憶されていることを発見した場合、CAM122−2は、次ページポインタが示す位置に記憶されているバリューを出力する。
なお、特定のデータ(特定情報)は、次ページポインタの存在を示す情報に限られるものではない。当該特定情報に応じて実行する処理が予め定められた情報であればどのような情報であってもよい。
(第3の実施形態)
第3の実施形態にかかる半導体記憶装置は、ワークメモリ以外に、ワークメモリよりも大きなサイズのバッファメモリをさらに備える。図21は、第3の実施形態にかかるデバイス100−3のハードウェア構成の一例を示すブロック図である。図21に示すように、デバイス100−3は、ホストインタフェース101と、デバイス制御部110と、メモリ制御部120と、記憶部130と、に加えて、バッファメモリ140−3を備えている。
バッファメモリ140−3は、ワークメモリ111よりサイズが大きいメモリである。バッファメモリ140−3は、デバイス制御部110からバス102を介してアクセスすることができる。バッファメモリ140−3は、例えばDRAMやMRAMやPCRAMなど、NANDフラッシュメモリよりも容量は小さいが高速なRAMにより構成できる。
デバイス制御部110は、記憶部130に格納されているK2Pテーブル132bおよびP2Kテーブル(P2L/P2Kテーブル132c)などの管理テーブルをバッファメモリ140−3にすべて転送しておく。デバイス制御部110は、バッファメモリ140−3上で、データのアクセスや変更を行う。これにより、記憶部130から都度読み書きするよりも高速にK2P処理を行うことが可能となる。
なお、バッファメモリ140−3に対しても、第2の実施形態のCAM122−2と同様のCAMを備えるように構成してもよい。
(第4の実施形態)
第4の実施形態にかかる半導体記憶装置は、ダイレクトメモリアクセスコントローラ(DMAC)をさらに備える。図22−1は、第4の実施形態にかかるデバイス100−4のハードウェア構成の一例を示すブロック図である。図22−1に示すように、デバイス100−4は、ホストインタフェース101−4と、デバイス制御部110と、メモリ制御部120と、記憶部130と、に加えて、DMAC150−4を備えている。
DMAC150−4は、デバイス100−4内でホストインタフェース101−4へデータを転送することを可能とする。DMAC150−4は、例えば、記憶部130内のL2Pテーブル132a、K2Pテーブル132b、および、P2L/P2Kテーブル132cをホストインタフェース101−4に転送する。ホストインタフェース101−4は、デバイス100−4内からのL2Pテーブル、K2Pテーブルの転送要求を受け付け、メインメモリ202−4に転送する。ホストインタフェース101−4は、ホストシステム200−4にDMACが備わっていればこれを利用することができる。ホストシステム200−4は、転送したテーブルにアクセスすることにより、記憶部130から都度読み書きするよりも高速にK2P処理を行うことが可能となる。
なお、上述のように、L2Pテーブル132aおよびK2Pテーブル132bに対して同様のデータ形式を用いれば、DMAC150−4およびホストインタフェース101−4のアルゴリズムや命令も共通化させることができる。これにより、必要なハードウェアの追加分を少なくすることができる。
(第4の実施形態の変形例)
第4の実施形態の変形例は、ダイレクトメモリアクセスコントローラ(DMAC)にホストとデバイスを繋ぐ別の通信線300をさらに備える。図22−2は、第4の実施形態の変形例のデバイス100−5のハードウェア構成の一例を示すブロック図である。図22−2に示すように、デバイス100−5は、ホストインタフェース101−4と、デバイス制御部110と、メモリ制御部120と、記憶部130と、に加えて、DMAC150−5を備えている。また、DMAC150−5は、デバイス100−5からホストシステム200−4へのホストインタフェース101−4とは別の通信線300を介してホストシステム200−4と接続される。
DMAC150−5は、通信線300を介して、デバイス100−4内からホストシステム200−4側のメインメモリ202−4にアクセスすることを可能とする。DMAC150−5は、例えば、記憶部130内のL2Pテーブル132a、K2Pテーブル132b、および、P2L/P2Kテーブル132cをメインメモリ202−4に転送する。ホストシステム200−4は、転送したテーブルにアクセスすることにより、記憶部130から都度読み書きするよりも高速にK2P処理を行うことが可能となる。
なお、上述のように、L2Pテーブル132aおよびK2Pテーブル132bに対して同様のデータ形式を用いれば、DMAC150−4のアルゴリズムや命令も共通化させることができる。これにより、必要なハードウェアの追加分を少なくすることができる。
(第5の実施形態)
第5の実施形態では、ホストシステムが、デバイスと同様のK2P処理の実行機能(サブ制御部)を備える。図23は、第5の実施形態にかかるデバイス100−4と、ホストシステム200−5のハードウェア構成の一例を示すブロック図である。デバイス100−4の構成は第4の実施形態(図22−1)と同様である。
図23に示すように、ホストシステム200−5は、さらにサブ制御部220−5を備える点が、第4の実施形態と異なっている。
サブ制御部220−5は、例えばデバイス制御部110の機能のうち、少なくともK2P処理に必要な機能と同様の機能を備えればよい。例えば、サブ制御部220−5は、キーに対応するバリューの取得要求を受け付ける機能(受付部112と同様の機能)を備える。また、例えばサブ制御部220−5は、メインメモリ202−4から各種データを読み出す機能(取得部113と同様の機能)を備える。また、例えばサブ制御部220−5は、メインメモリ202−4に対して各種データを書き込む機能(書込部115と同様の機能)を備える。また、例えばサブ制御部220−5は、読み出されたバリューを取得要求に対する応答として出力する機能(出力制御部114と同様の機能)を備える。
このような構成により、ホストシステム200−5のCPU201が、メインメモリ202−4内のK2Pテーブルを直接参照できるようになる。CPU201は、キーの有無を知った上でのデバイス100−4へのKVS要求を送信することができる。
デバイス100−4内のデバイス制御部110と連携して、ホストシステム200−4がKVS要求を送信する前に、予め決められたルールでデバイス100−4側のデータをメインメモリ202−4に転送するように構成してもよい。予め決められたルールとしては、例えばホストシステム200−4側で特定のキーに対するアクセスが頻発しているときに、デバイス100−4内のKVSデータをメインメモリ202−4に転送してデータキャッシュするといったルールである。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
例えば、デバイス制御部110が、メモリ管理ユニット(MMU(Memory Management Unit))を備えるように構成してもよい。一般にメモリ管理ユニットは、仮想アドレス(論理アドレス)と物理アドレスとを変換する機能などを備える。例えば、L2PテーブルおよびK2PテーブルなどをMMU内に記憶し、MMU内のテーブルを参照して上記実施形態の手法を適用するように構成できる。
また、デバイス制御部110が、TLB(Translation Lookaside Buffer)を備えるように構成してもよい。TLBは、仮想アドレスから物理アドレスへの変換の高速化を図るための専用キャッシュである。例えば、L2PテーブルおよびK2PテーブルなどをTLB内に記憶し、TLB内のテーブルを参照して上記実施形態の手法を適用するように構成できる。
100 デバイス
101 ホストインタフェース
102 バス
110 デバイス制御部
111 ワークメモリ
120 メモリ制御部
121 バッファメモリ
130 記憶部
200 ホストシステム
201 CPU
202 メインメモリ
211 バス

Claims (18)

  1. バリュー、および、前記バリューに対応するキーに基づいて生成されるキーアドレスと前記バリューの物理アドレスとを対応づけるアドレス情報を記憶する第1記憶部と、
    前記キーを含む、当該キーに対応する前記バリューの取得要求を受け付ける受付部と、
    前記アドレス情報に基づいて、前記取得要求に含まれる前記キーの前記キーアドレスに対応する前記物理アドレスを取得する取得部と、
    取得された前記物理アドレスの前記バリューを前記第1記憶部から取得し、取得した前記バリューを、前記取得要求に対する応答として出力する出力制御部と、
    を備える半導体記憶装置。
  2. キーとバリューとを対応づけるキーバリュー情報を記憶し、指定された前記キーを含む前記キーバリュー情報が記憶されている場合に、指定された前記キーに対応する前記バリューを出力する第2記憶部をさらに備える、
    請求項1に記載の半導体記憶装置。
  3. 前記第2記憶部は、指定された前記キーを含む前記キーバリュー情報が記憶されていない場合に、記憶されていないことを示す情報を出力する、
    請求項2に記載の半導体記憶装置。
  4. 前記第2記憶部は、特定情報が記憶されている場合に、前記特定情報に応じて定められた処理を実行し、実行結果を出力する、
    請求項2に記載の半導体記憶装置。
  5. 前記第2記憶部は、前記バリューの記憶位置を表す前記特定情報が記憶されている場合に、前記記憶位置に記憶されている前記バリューを出力する、
    請求項4に記載の半導体記憶装置。
  6. 前記第1記憶部より高速にアクセス可能であり、前記第1記憶部から転送される前記アドレス情報を記憶する第3記憶部をさらに備え、
    前記取得部は、前記第3記憶部に記憶された前記アドレス情報に基づいて、前記取得要求に含まれる前記キーの前記キーアドレスに対応する前記物理アドレスを取得する、
    請求項1に記載の半導体記憶装置。
  7. 前記第1記憶部より高速にアクセス可能な第4記憶部へのアクセスを制御するアクセス制御部をさらに備え、
    前記取得部は、前記アクセス制御部を介して、前記第4記憶部に記憶された前記アドレス情報を参照することにより、前記取得要求に含まれる前記キーの前記キーアドレスに対応する前記物理アドレスを取得する、
    請求項1に記載の半導体記憶装置。
  8. 前記取得部は、起動時に前記アドレス情報を前記第1記憶部から読み出し、読み出した前記アドレス情報を前記第4記憶部に記憶する、
    請求項7に記載の半導体記憶装置。
  9. 前記アクセス制御部は、前記取得要求が受付けられるインタフェースと異なるインタフェースを介して、前記第4記憶部へのアクセスを制御する、
    請求項7に記載の半導体記憶装置。
  10. 前記第1記憶部は、前記バリュー、および、前記キーに基づいて生成される固定長のキーアドレスと前記物理アドレスとを対応づける前記アドレス情報を記憶する、
    請求項1に記載の半導体記憶装置。
  11. 前記第1記憶部は、複数のページを含むブロックを複数含み、前記バリューが記憶される前記ページの物理アドレスを表すページアドレスと、前記キーアドレスと、前記ページアドレスのページが有効であるか否かを表す判定情報と、を対応づけてさらに記憶し、
    第1ブロックに含まれるページのうち前記判定情報が有効であることを表す有効ページを第2ブロックに書き込み、前記第1ブロックに記憶された前記有効ページを消去する転記処理部をさらに備える、
    請求項1に記載の半導体記憶装置。
  12. 前記第1記憶部は、複数のページを含むブロックを複数含み、前記ページに、当該ページの次に読み出すページの物理アドレスを表す次ページアドレスを対応づけて記憶し、
    取得部は、前記ページを読み出した後に、当該ページに対応づけられた前記次ページアドレスのページを読み出す、
    請求項1に記載の半導体記憶装置。
  13. 前記第1記憶部は、さらに、前記バリューと異なるデータを記憶し、
    前記アドレス情報は、前記データの論理アドレスと前記データの物理アドレスとを対応づけた情報をさらに含む、
    請求項1に記載の半導体記憶装置。
  14. 前記キーアドレスの長さと、前記論理アドレスの長さとが等しい、
    請求項13に記載の半導体記憶装置。
  15. 前記第1記憶部は、前記バリューが記憶されるページの物理アドレスを表すページアドレスと、前記キーアドレスと、前記ページアドレスのページが有効であるか否かを表す判定情報と、前記ページアドレスのページの書換え頻度と、を対応づけて記憶し、
    前記書換え頻度が低い前記ページに対して優先してデータを書き込む書込部をさらに備える、
    請求項1に記載の半導体記憶装置。
  16. 前記第1記憶部は、前記バリュー、および、前記キーアドレスと前記物理アドレスと前記バリューのハッシュ値とを対応づける前記アドレス情報を記憶する、
    請求項1に記載の半導体記憶装置。
  17. ホスト装置と、半導体記憶装置と、を備える情報処理システムであって、
    前記半導体記憶装置は、
    バリュー、および、前記バリューに対応するキーに基づいて生成されるキーアドレスと前記バリューの物理アドレスとを対応づけるアドレス情報を記憶する第1記憶部を備え、
    前記ホスト装置は、
    前記キーを含む、当該キーに対応する前記バリューの取得要求を受け付ける受付部と、
    前記アドレス情報に基づいて、前記取得要求に含まれる前記キーの前記キーアドレスに対応する前記物理アドレスを取得する取得部と、
    取得された前記物理アドレスの前記バリューを前記第1記憶部から取得し、取得した前記バリューを、前記取得要求に対する応答として出力する出力制御部と、を備える、
    情報処理システム。
  18. バリュー、および、前記バリューに対応するキーに基づいて生成されるキーアドレスと前記バリューの物理アドレスとを対応づけるアドレス情報を記憶する第1記憶部を備える半導体記憶装置で実行される制御方法であって、
    前記キーを含む、当該キーに対応する前記バリューの取得要求を受け付ける受付ステップと、
    前記アドレス情報に基づいて、前記取得要求に含まれる前記キーの前記キーアドレスに対応する前記物理アドレスを取得する取得ステップと、
    取得された前記物理アドレスの前記バリューを前記第1記憶部から取得し、取得した前記バリューを、前記取得要求に対する応答として出力する出力ステップと、
    を含む制御方法。
JP2012070322A 2012-03-26 2012-03-26 半導体記憶装置、情報処理システムおよび制御方法 Expired - Fee Related JP5597666B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012070322A JP5597666B2 (ja) 2012-03-26 2012-03-26 半導体記憶装置、情報処理システムおよび制御方法
US13/762,986 US20130250686A1 (en) 2012-03-26 2013-02-08 Semiconductor memory device, information processing system and control method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012070322A JP5597666B2 (ja) 2012-03-26 2012-03-26 半導体記憶装置、情報処理システムおよび制御方法

Publications (2)

Publication Number Publication Date
JP2013200839A JP2013200839A (ja) 2013-10-03
JP5597666B2 true JP5597666B2 (ja) 2014-10-01

Family

ID=49211682

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012070322A Expired - Fee Related JP5597666B2 (ja) 2012-03-26 2012-03-26 半導体記憶装置、情報処理システムおよび制御方法

Country Status (2)

Country Link
US (1) US20130250686A1 (ja)
JP (1) JP5597666B2 (ja)

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9536016B2 (en) * 2013-01-16 2017-01-03 Google Inc. On-disk multimap
KR102044023B1 (ko) * 2013-03-14 2019-12-02 삼성전자주식회사 키 값 기반 데이터 스토리지 시스템 및 이의 운용 방법
DE102013212525A1 (de) * 2013-06-27 2014-12-31 Siemens Aktiengesellschaft Datenspeichervorrichtung zum geschützten Datenaustausch zwischen verschiedenen Sicherheitszonen
CN103593477A (zh) 2013-11-29 2014-02-19 华为技术有限公司 一种哈希数据库的配置方法和装置
JP6211949B2 (ja) * 2014-02-12 2017-10-11 株式会社東芝 データベース装置
US9785547B2 (en) * 2014-02-13 2017-10-10 Hitachi, Ltd. Data management apparatus and method
WO2015136612A1 (ja) * 2014-03-11 2015-09-17 株式会社日立製作所 計算機システム、不揮発メモリシステム及びホストシステム
US9384144B1 (en) * 2014-03-25 2016-07-05 SK Hynix Inc. Error detection using a logical address key
JP6192171B2 (ja) * 2014-09-02 2017-09-06 日本電信電話株式会社 プログラムおよびクラスタシステム
US9846642B2 (en) * 2014-10-21 2017-12-19 Samsung Electronics Co., Ltd. Efficient key collision handling
JP6291435B2 (ja) * 2015-02-20 2018-03-14 日本電信電話株式会社 プログラムおよびクラスタシステム
JP6268116B2 (ja) * 2015-03-20 2018-01-24 東芝メモリ株式会社 データ処理装置、データ処理方法およびコンピュータプログラム
US11301422B2 (en) * 2016-02-23 2022-04-12 Samsung Electronics Co., Ltd. System and methods for providing fast cacheable access to a key-value device through a filesystem interface
JP6122170B1 (ja) * 2016-03-16 2017-04-26 株式会社東芝 不揮発性ram及び不揮発性ramを含むシステム
KR102532581B1 (ko) * 2016-03-17 2023-05-17 에스케이하이닉스 주식회사 메모리 장치를 포함하는 메모리 시스템 및 그의 동작 방법
JP6542152B2 (ja) * 2016-03-29 2019-07-10 東芝メモリ株式会社 オブジェクトストレージ、コントローラおよびプログラム
US11256431B1 (en) 2017-01-13 2022-02-22 Lightbits Labs Ltd. Storage system having a field programmable gate array
JP6785205B2 (ja) 2017-09-21 2020-11-18 キオクシア株式会社 メモリシステムおよび制御方法
JP2019079464A (ja) 2017-10-27 2019-05-23 東芝メモリ株式会社 メモリシステムおよび制御方法
JP6982468B2 (ja) 2017-10-27 2021-12-17 キオクシア株式会社 メモリシステムおよび制御方法
KR102545167B1 (ko) 2017-11-23 2023-06-19 삼성전자주식회사 키-밸류 스토리지 장치 및 상기 키-밸류 스토리지 장치의 동작 방법
US20190294497A1 (en) * 2018-03-22 2019-09-26 Winbond Electronics Corp. Method of implementing error correction code used by memory storage apparatus and memory storage apparatus using the same
US10514980B2 (en) * 2018-03-22 2019-12-24 Winbond Electronics Corp. Encoding method and memory storage apparatus using the same
JP2019194780A (ja) 2018-05-01 2019-11-07 富士通株式会社 情報処理装置、データ管理プログラム及びデータ管理方法
US20220035737A1 (en) * 2018-09-27 2022-02-03 Sony Corporation Storage apparatus, high dimensional gaussian filtering circuit, stereo depth calculation circuit, and information processing apparatus
US11580162B2 (en) * 2019-04-18 2023-02-14 Samsung Electronics Co., Ltd. Key value append
US11237953B2 (en) * 2019-05-21 2022-02-01 Micron Technology, Inc. Host device physical address encoding
US20210357533A1 (en) * 2019-07-22 2021-11-18 Andrew Duncan Britton Runtime Signature Integrity
JP7237782B2 (ja) * 2019-09-13 2023-03-13 キオクシア株式会社 ストレージシステム及びその制御方法
US11593258B2 (en) * 2019-11-26 2023-02-28 Micron Technology, Inc. Enhanced filesystem support for zone namespace memory
US11568077B2 (en) * 2019-12-26 2023-01-31 Micron Technology, Inc. Memory device data security based on content-addressable memory architecture
US11880584B2 (en) * 2021-06-15 2024-01-23 Vmware, Inc. Reverse range lookup on a unified logical map data structure of snapshots
US11853607B2 (en) 2021-12-22 2023-12-26 Western Digital Technologies, Inc. Optimizing flash memory utilization for NVMe KV pair storage
US11817883B2 (en) 2021-12-27 2023-11-14 Western Digital Technologies, Inc. Variable length ECC code according to value length in NVMe key value pair devices
US11733876B2 (en) 2022-01-05 2023-08-22 Western Digital Technologies, Inc. Content aware decoding in KV devices
US11966630B2 (en) 2022-06-27 2024-04-23 Western Digital Technologies, Inc. Key-to-physical table optimization for key value data storage devices

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0728690A (ja) * 1993-07-14 1995-01-31 Hitachi Ltd フラッシュメモリシステム
US5640591A (en) * 1995-05-15 1997-06-17 Nvidia Corporation Method and apparatus for naming input/output devices in a computer system
JP3197815B2 (ja) * 1996-04-15 2001-08-13 インターナショナル・ビジネス・マシーンズ・コーポレ−ション 半導体メモリ装置及びその制御方法
US6067547A (en) * 1997-08-12 2000-05-23 Microsoft Corporation Hash table expansion and contraction for use with internal searching
JP4085478B2 (ja) * 1998-07-28 2008-05-14 ソニー株式会社 記憶媒体及び電子機器システム
JP2001067258A (ja) * 1999-08-25 2001-03-16 Mitsubishi Electric Corp フラッシュメモリ内蔵半導体装置及びフラッシュメモリアドレス変換方法
JP2001188686A (ja) * 1999-10-22 2001-07-10 Sony Corp データ書換装置、制御方法および記録媒体
KR100449708B1 (ko) * 2001-11-16 2004-09-22 삼성전자주식회사 플래시 메모리 관리방법
US8463781B1 (en) * 2002-06-25 2013-06-11 Emc Corporation Pre-fetch of records identified by an index record
JP2004334273A (ja) * 2003-04-30 2004-11-25 Tokai Univ デバイスおよびデバイスの制御方法およびデバイス制御用プログラム
JPWO2006067923A1 (ja) * 2004-12-22 2008-06-12 松下電器産業株式会社 メモリコントローラ、不揮発性記憶装置、不揮発性記憶システム及びメモリ制御方法
JP2007310823A (ja) * 2006-05-22 2007-11-29 Matsushita Electric Ind Co Ltd メモリカード、メモリカード処理方法、制御プログラム、及び集積回路
US8234327B2 (en) * 2007-03-30 2012-07-31 Netapp, Inc. System and method for bandwidth optimization in a network storage environment
US7975109B2 (en) * 2007-05-30 2011-07-05 Schooner Information Technology, Inc. System including a fine-grained memory and a less-fine-grained memory
US8397051B2 (en) * 2009-02-23 2013-03-12 Autonomy, Inc. Hybrid hash tables
WO2010114006A1 (ja) * 2009-03-31 2010-10-07 日本電気株式会社 ストレージシステムとストレージアクセス方法とプログラム
US8402242B2 (en) * 2009-07-29 2013-03-19 International Business Machines Corporation Write-erase endurance lifetime of memory storage devices
JP2011123601A (ja) * 2009-12-09 2011-06-23 Nec Corp イベント一致判定装置、イベント一致判定方法、および、イベント一致判定プログラム
JP2011227802A (ja) * 2010-04-22 2011-11-10 Funai Electric Co Ltd データ記録装置
US20110276744A1 (en) * 2010-05-05 2011-11-10 Microsoft Corporation Flash memory cache including for use with persistent key-value store
US9026717B2 (en) * 2011-09-30 2015-05-05 SanDisk Technologies, Inc. Apparatus, system, and method for a persistent object store

Also Published As

Publication number Publication date
US20130250686A1 (en) 2013-09-26
JP2013200839A (ja) 2013-10-03

Similar Documents

Publication Publication Date Title
JP5597666B2 (ja) 半導体記憶装置、情報処理システムおよび制御方法
US10579683B2 (en) Memory system including key-value store
US9928167B2 (en) Information processing system and nonvolatile storage unit
KR102603070B1 (ko) 메모리 시스템, 메모리 시스템에 데이터를 기록하는 방법 및 메모리 시스템으로부터 데이터를 판독하는 방법
US8812816B2 (en) Garbage collection schemes for index block
KR20210057835A (ko) 압축한 키-값 저장소 트리 데이터 블록 유출
US10628303B2 (en) Storage device that maintains a plurality of layers of address mapping
JP6034183B2 (ja) 半導体記憶装置
JP2013137770A (ja) Lbaビットマップの使用
US20190391756A1 (en) Data storage device and cache-diversion method thereof
US11494115B2 (en) System method for facilitating memory media as file storage device based on real-time hashing by performing integrity check with a cyclical redundancy check (CRC)
TWI777720B (zh) 用來藉助於裝置側表資訊而在主機效能增幅器架構中進行記憶裝置的存取管理的方法及設備
JP2007280108A (ja) 記憶媒体制御装置、記憶媒体制御方法、プログラム
JP6258436B2 (ja) メモリシステムのローカルコントローラ
JP5646775B2 (ja) key−valueストア方式を有するメモリシステム
JP5833212B2 (ja) key−valueストア方式を有するメモリシステム
JP6034467B2 (ja) システム
CN108304331B (zh) 基于NorFlash的环形队列式数据存储方法及装置
Munegowda et al. Adapting Endurance and Performance Optimization Strategies of ExFAT file system to FAT file system for embedded storage devices
KR20190080110A (ko) 플래시 기반 스토리지에서의 중복 관리 방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140129

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140411

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140422

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140623

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140811

R151 Written notification of patent or utility model registration

Ref document number: 5597666

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees