JP2019057178A - メモリシステムおよび制御方法 - Google Patents
メモリシステムおよび制御方法 Download PDFInfo
- Publication number
- JP2019057178A JP2019057178A JP2017181723A JP2017181723A JP2019057178A JP 2019057178 A JP2019057178 A JP 2019057178A JP 2017181723 A JP2017181723 A JP 2017181723A JP 2017181723 A JP2017181723 A JP 2017181723A JP 2019057178 A JP2019057178 A JP 2019057178A
- Authority
- JP
- Japan
- Prior art keywords
- data
- reference count
- address
- block
- write data
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
- G06F12/0261—Garbage collection, i.e. reclamation of unreferenced memory using reference counting
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0804—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
- G06F12/1018—Address translation using page tables, e.g. page table structures involving hashing techniques, e.g. inverted page tables
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
- G06F2212/1044—Space efficiency improvement
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/20—Employing a main memory using a specific memory technology
- G06F2212/202—Non-volatile memory
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7205—Cleaning, compaction, garbage collection, erase control
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
【課題】ガベージコレクションの効率を考慮した仕組みによって重複排除を実行することができるメモリシステムを実現する。【解決手段】実施形態によれば、メモリシステムは、不揮発性メモリ内の複数の第1ブロックに対応する複数の管理テーブルを管理する。各管理テーブルは対応する第1ブロック内の複数のデータに対応する複数の参照カウントを含む。メモリシステムは、ガベージコレクションのコピー元ブロックに対応する第1の管理テーブルに基づいて、非ゼロの参照カウントにそれぞれ対応するデータのみをコピー元ブロックからコピー先ブロックにコピーし、前記データがコピーされた前記コピー先ブロック内の位置それぞれを示す物理アドレスを前記コピーされたデータに対応する中間アドレスそれぞれに関連付ける。【選択図】図7
Description
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
このようなメモリシステムの一つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。SSDは、様々なコンピューティングデバイスのメインストレージとして使用されている。
ところで、最近では、大量のデータを効率よくストレージに保存することが要求されている。
ストレージ効率を改善するための技術としては、重複排除(De−duplication)が知られている。
しかし、従来の重複排除技術では、不揮発性メモリのガベージコレクションの効率については考慮されていない。ガベージコレクションの効率の低下はSSDの性能を低下させる要因となり得る。したがって、重複排除をサポートするSSDの実現に際しては、ガベージコレクションの効率を十分に考慮することが必要とされる。
本発明が解決しようとする課題は、ガベージコレクションの効率を考慮した仕組みによって重複排除を実行することができるメモリシステムおよび制御方法を提供することである。
実施形態によれば、メモリシステムは、不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備する。前記コントローラは、前記不揮発性メモリ内の複数の第1ブロックに対応する複数の管理テーブルを管理する。各管理テーブルは対応する第1ブロック内の複数のデータに対応する複数の参照カウントを含み、各参照カウントは対応するデータを参照している論理アドレスの数を示す。前記コントローラは、ホストから受信されるライトデータと一致する重複データが前記不揮発性メモリに存在していない場合、論理アドレスそれぞれと中間アドレスそれぞれとの対応関係を管理する第1の変換テーブルを更新して、未使用の第1の中間アドレスを前記ライトデータの論理アドレスに関連付け、前記ライトデータを前記不揮発性メモリに書き込み、前記中間アドレスそれぞれと物理アドレスそれぞれとの対応関係を管理する第2の変換テーブルを更新して、前記ライトデータが書き込まれた前記不揮発性メモリ内の位置を示す物理アドレスを前記第1の中間アドレスに関連付け、前記ライトデータに対応する参照カウントを1に設定する。前記コントローラは、前記ライトデータと一致する前記重複データが前記不揮発性メモリに既に存在している場合、前記ライトデータを前記不揮発性メモリに書き込まずに、前記第1の変換テーブルを更新して、前記重複データに対応する物理アドレスを保持している前記第2の変換テーブル内のエントリを指す第2の中間アドレスを前記ライトデータの前記論理アドレスに関連付け、前記重複データに対応する参照カウントを1増やす。前記コントローラは、前記ライトデータが前記不揮発性メモリに既に書き込まれているデータの更新データである場合、前記既に書き込まれているデータに対応する参照カウントを1減らす。前記コントローラは、前記複数の第1ブロックの一つがガベージコレクションのコピー元ブロックとして選択された場合、前記コピー元ブロックに対応する前記複数の管理テーブル内の第1の管理テーブルに基づいて、非ゼロの参照カウントにそれぞれ対応するデータのみを前記コピー元ブロックからコピー先ブロックにコピーし、前記第2の変換テーブルを更新して、前記データがコピーされた前記コピー先ブロック内の位置それぞれを示す物理アドレスを前記コピーされたデータに対応する中間アドレスそれぞれに関連付け、前記非ゼロの参照カウントそれぞれを、前記第1の管理テーブルから前記コピー先ブロックに対応する第2の管理テーブルにコピーする。
以下、図面を参照して、実施形態を説明する。
まず、図1を参照して、実施形態に係るメモリシステムを含む情報処理システム1の構成を説明する。
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み込むように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、NAND型フラッシュメモリを備えたソリッドステートドライブ(SSD)3として実現されている。
情報処理システム1は、ホスト(ホストデバイス)2と、SSD3とを含む。ホスト2は、サーバ、パーソナルコンピュータのような情報処理装置(コンピューティングデバイス)である。ホスト2がサーバによって実現されるケースにおいては、このホスト(サーバ)2は、ネットワーク50を介して複数のエンドユーザ端末(クライアント)90に接続されてもよい。ホスト2は、これらエンドユーザ端末90に対して様々なサービスを提供することができる。
ホスト(サーバ)2によって提供可能なサービスには、複数のエンドユーザ端末(クライアント)90に仮想デスクトップ環境を提供するサービスが含まれてもよい。この場合、ホスト(サーバ)2は、仮想デスクトップ基盤(VDI)を使用して仮想デスクトップ環境を提供するように構成されたVDIサーバとして機能してもよい。VDIサーバとして機能するホスト(サーバ)2においては、複数のエンドユーザ端末(クライアント)90にそれぞれ対応する複数の仮想マシンが実行されてもよい。これら仮想マシンの各々は、OS(仮想デスクトップOS)と、OS(仮想デスクトップOS)上で実行されるアプリケーションプログラムを含む。これら仮想マシンに対応する複数のOS/アプリケーションプログラムは、SSD3に格納され得る。
SSD3は、ホスト2として機能する情報処理装置のメインストレージとして使用され得る。SSD3は、この情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
ホスト2とSSD3とを相互接続するためのインタフェースとしては、SCSI、Serial Attached SCSI(SAS)、ATA、Serial ATA(SATA)、PCI Express(PCIe)、Ethernet(登録商標)、Fibre channel、NVM Express(NVMe)(登録商標)等を使用し得る。
SSD3は、コントローラ4および不揮発性メモリ(NAND型フラッシュメモリ)5を備える。SSD3は、ランダムアクセスメモリ、例えば、DRAM6も備えていてもよい。
NAND型フラッシュメモリ5は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。NAND型フラッシュメモリ5は、2次元構造のNAND型フラッシュメモリであってもよいし、3次元構造のNAND型フラッシュメモリであってもよい。NAND型フラッシュメモリ5内の領域(記憶領域)は、ユーザデータ領域7と管理領域8とを含む。ユーザデータ領域7は、ホスト2からのデータ(ユーザデータ)を格納するための領域である。管理領域8は、SSD3の動作を管理するための管理情報を格納するための領域である。
NAND型フラッシュメモリ5のメモリセルアレイは、図2に示されているように、複数の物理ブロックBLK〜BLKm−1を含む。物理ブロックBLK0〜BLKm−1の各々は多数のページ(ここではページP0〜Pn−1)によって編成される。物理ブロックBLK0〜BLKm−1は、アドレス指定可能な最小の消去単位として機能する。物理ブロックは、「消去ブロック」、「物理消去ブロック」、または単に「ブロック」と称されることもある。ページP0〜Pn−1の各々は、同一ワード線に接続された複数のメモリセルを含む。ページP0〜Pn−1は、データ書き込み動作およびデータ読み込み動作の単位である。
物理ブロックB0〜Bm−1は限られた消去回数を有している。消去回数は、プログラム/消去サイクル(Program/Erase cycles)の数によって表されてもよい。ある物理ブロックの一つのプログラム/消去サイクル(Program/Erase cycles)は、この物理ブロック内の全てのメモリセルを消去状態にするための消去動作と、この物理ブロックのページそれぞれにデータを書き込む書き込み動作(プログラム動作)とを含む。物理ブロックB0〜Bm−1は限られた消去回数(限られたプログラム/消去サイクル)を有しているので、物理ブロックB0〜Bm−1のプログラム/消去サイクルをできるだけ均一化することが好ましい。
本実施形態では、図1のコントローラ4は、1以上の物理ブロックを各々が含む複数の第1ブロックを管理し、第1ブロックの単位で消去動作を実行する。したがって、第1ブロックは、実際上、消去単位として機能する。以下、第1ブロックはスーパーブロックとして参照される。なお、スーパーブロックは論理ブロックと称されることもある。
コントローラ4は、Toggle、Open NAND Flash Interface(ONFI)のようなNANDインタフェース13を介して、不揮発性メモリであるNAND型フラッシュメモリ5に電気的に接続されている。コントローラ4は、NAND型フラッシュメモリ5を制御するメモリコントローラ(制御回路)である。このコントローラ4は、システム・オン・ア・チップ(SoC)のようなワンチップLSIによって実現されていてもよい。
NAND型フラッシュメモリ5は、図3に示すように、複数のNAND型フラッシュメモリチップ(NAND型フラッシュメモリダイ)を含む。個々のNAND型フラッシュメモリチップは独立して動作可能である。このため、NAND型フラッシュメモリチップは、並列動作可能な単位として機能する。図3においては、NANDインタフェース13に16個のチャンネルCh.1〜Ch.16が接続されており、16個のチャンネルCh.1〜Ch.16の各々に2つのNAND型フラッシュメモリチップが接続されている場合が例示されている。この場合、チャンネルCh.1〜Ch.16に接続された16個のNAND型フラッシュメモリチップ#1〜#16がバンク#0として編成されてもよく、またチャンネルCh.1〜Ch.16に接続された残りの16個のNAND型フラッシュメモリチップ#17〜#32がバンク#1として編成されてもよい。バンクは、複数のメモリモジュールをバンクインタリーブによって並列動作させるための単位として機能する。図3の構成例においては、16チャンネルと、2つのバンクを使用したバンクインタリーブとによって、最大32個のNAND型フラッシュメモリチップを並列動作させることができる。
一つのスーパーブロックは、これに限定されないが、NAND型フラッシュメモリチップ#1〜#32から一つずつ選択される計32個の物理ブロックを含んでいてもよい。なお、NAND型フラッシュメモリチップ#1〜#32の各々はマルチプレーン構成を有していてもよい。例えば、NAND型フラッシュメモリチップ#1〜#32の各々が、2つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、NAND型フラッシュメモリチップ#1〜#32に対応する64個のプレーンから一つずつ選択される計64個の物理ブロックを含んでいてもよい。
図4には、32個の物理ブロック(ここでは、NAND型フラッシュメモリチップ#1内の物理ブロックBLK2、NAND型フラッシュメモリチップ#2内の物理ブロックBLK3、NAND型フラッシュメモリチップ#3内の物理ブロックBLK7、NAND型フラッシュメモリチップ#4内の物理ブロックBLK4、NAND型フラッシュメモリチップ#5内の物理ブロックBLK6、…NAND型フラッシュメモリチップ#32内の物理ブロックBLK3)を含む一つのスーパーブロック(SB)が例示されている。
なお、一つのスーパーブロックが一つの物理ブロックのみを含む構成が利用されてもよく、この場合には、一つのスーパーブロックは一つの物理ブロックと等価である。
上述したように、コントローラ4は、スーパーブロックの単位で消去動作を実行する。したがって、同一のスーパーブロックに含まれるこれら32個の物理ブロックの消去動作は並列に実行される。
また、このスーパーブロックへのデータ書き込みにおいては、コントローラ4は、NAND型フラッシュメモリチップ#1内の物理ブロックBLK2のページ0、NAND型フラッシュメモリチップ#2内の物理ブロックBLK3のページ0、NAND型フラッシュメモリチップ#3内の物理ブロックBLK7のページ0、NAND型フラッシュメモリチップ#4内の物理ブロックBLK4のページ0、NAND型フラッシュメモリチップ#5内の物理ブロックBLK6のページ0、…NAND型フラッシュメモリチップ#32内の物理ブロックBLK3のページ0という順序でデータを書き込んでもよい。これにより、最大32ページへのデータ書き込みを並列に実行することができる。また、このスーパーブロックからのデータリードにおいても、最大で32ページからのデータリードを並列に実行することができる。
次に、図1のコントローラ4の構成について説明する。
コントローラ4は、複数のチャンネル(例えば16個のチャンネル)を介して複数のNAND型フラッシュメモリチップに電気的に接続される。コントローラ4は、NAND型フラッシュメモリ5(複数のNAND型フラッシュメモリチップ)を制御する。
コントローラ4は、NAND型フラッシュメモリ5のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能してもよい。このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)ページ単位のリード/ライトとブロック単位(スーパーブロック単位)の消去動作とを隠蔽するための処理、等が含まれる。論理アドレスは、SSD3をアドレス指定するためにホストによって使用されるアドレスである。この論理アドレスとしては、LBA(logical block address(addressing))が使用され得る。
通常のSSDにおいて、論理アドレスそれぞれと物理アドレスそれぞれとの間の対応関係(マッピング)の管理は、論理−物理アドレス変換テーブルとして機能するルックアップテーブルのみを用いて実行される。ある論理アドレスに対応する物理アドレスは、この論理アドレスのデータがライトされたNAND型フラッシュメモリ内の最新の位置(最新の物理記憶位置)を示す。
本実施形態においては、ガベージコレクションの効率を維持しつつSSD3内部で重複排除(De−duplication)のための動作を実行できるようにするために新たなアドレス参照経路が利用される。
この新たなアドレス参照経路は、論理アドレスから物理アドレスを直接参照するのではなく、中間アドレスを介して論理アドレスから物理アドレスを参照する。論理アドレスそれぞれと中間アドレスそれぞれとの対応関係は、論理−中間アドレス変換テーブル(第1の変換テーブル)として機能するルックアップテーブル(LUT)32によって管理される。中間アドレスそれぞれと物理アドレスそれぞれとの対応関係は、中間−物理アドレス変換テーブル(第2の変換テーブル)として機能する中間ルックアップテーブル(iLUT)34によって管理される。
本実施形態においては、ホスト2から新たに受信されたライトデータ(ユーザデータ)と一致するデータ(「重複データ」として参照される)が既にNAND型フラッシュメモリ5に格納されている場合、コントローラ4は、このライトデータをNAND型フラッシュメモリ5に書き込まない。代わりに、コントローラ4は、論理−中間アドレス変換テーブル(LUT)32を更新して、重複データに既に関連付けられている中間アドレス、つまり重複データに対応する物理アドレスを保持している中間−物理アドレス変換テーブル(iLUT)34内のエントリを指す特定の中間アドレスを、このライトデータの論理アドレスに関連付けられる。
これにより、重複データの論理アドレスおよびライトデータの論理アドレスを含む2つの論理アドレスから同一の中間アドレスを参照でき、この同一の中間アドレスから、重複データが格納されている物理記憶位置の物理アドレスを参照することができる。この結果、重複データの論理アドレスおよびライトデータの論理アドレスの双方からこの重複データを参照することが可能となり、ストレージ効率を高めることができる。
上述の説明から理解されるように、本実施形態では、論理−中間アドレス変換テーブル(LUT)32と中間−物理アドレス変換テーブル(iLUT)34とを使用して2レベルのアドレス変換が実行される。論理−中間アドレス変換テーブル(LUT)32においては、既に存在するあるデータに一致するライトデータの論理アドレスには、既に存在するデータの中間アドレスと同じ中間アドレスが関連付けられる。したがって、中間−物理アドレス変換テーブル(iLUT)34においては、あるデータを参照している論理アドレスの数にかかわらず、各物理アドレスは一つの中間アドレスのみに関連付けられている。
よって、複数の論理アドレスから参照されているデータ(重複データ)がガベージコレクションによって別のスーパーブロックにコピーされたケースにおいては、コントローラ4は、この一つの中間アドレスに対応する中間−物理アドレス変換テーブル(iLUT)34内の一つのエントリのみをコピー先物理アドレスに更新するという動作を行うだけで、これら複数の論理アドレスからこのコピー先物理アドレスを正しく参照できることを保証することができる。
さらに、コントローラ4は、ユーザデータ領域7内の複数のスーパーブロック(SB)100−0、100−1、…100−iにそれぞれ対応する複数のスーパーブロック(SB)管理テーブル200−0、200−1、…200−iを管理する。
これらSB管理テーブル200−0、200−1、…200−iの各々は、対応するスーパーブロックに保持されている複数のデータを管理するためのブロック管理情報である。
各SB管理テーブルは、対応するスーパーブロック内の複数のデータに対応する複数の参照カウントを含む。各SB管理テーブルにおいては、これら参照カウントは、対応するスーパーブロックの物理アドレスの並び順と同じ順序で配置されている。各参照カウントは、対応するデータ(つまりスーパーブロック内の対応する位置(物理記憶位置)を参照している論理アドレスの数を示す。
例えば、もしあるデータが1つの論理アドレスのみによって参照されているならば、つまり、もしこのデータが格納されている物理記憶位置の物理アドレスに関連付けられた中間アドレスが1つの論理アドレスのみによって独占的に使用されているならば、このデータに対応する参照カウントは1である。
もしあるデータが2つの論理アドレスによって参照されているならば、つまり、もしこのデータが格納されている物理記憶位置の物理アドレスに関連付けられた中間アドレスが2つの論理アドレスによって共有されているならば、このデータに対応する参照カウントは2である。
もしあるデータが3つの論理アドレスによって参照されているならば、つまり、もしこのデータが格納されている物理記憶位置の物理アドレスに関連付けられた中間アドレスが3つの論理アドレスによって共有されているならば、このデータに対応する参照カウントは3である。
コントローラ4は、SB管理テーブル200−0、200−1、…200−iの各々を使用して、各スーパーブロック内の複数のデータに対応する複数の参照カウントを管理する。これらSB管理テーブル200−0、200−1、…200−iは、SSD3がパワーオンされた時にNAND型フラッシュメモリ5内の管理領域8からDRAM6にロードされてもよい。
NAND型フラッシュメモリ5内の管理領域8においては、他の様々な管理情報、例えば、論理−中間アドレス変換テーブル(LUT)32、ハッシュLUT33、および中間−物理アドレス変換テーブル(iLUT)34も格納されている。これら論理−中間アドレス変換テーブル(LUT)32、ハッシュLUT33、および中間−物理アドレス変換テーブル(iLUT)34も、SSD3がパワーオンされた時にNAND型フラッシュメモリ5内の管理領域8からDRAM6にロードされてもよい。
通常、NAND型フラッシュメモリ5においては、ページへのデータ書き込みは、1消去サイクル当たり1回のみ可能である。
このため、コントローラ4は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されているNAND型フラッシュメモリ5内の位置(物理記憶位置)ではなく、NAND型フラッシュメモリ5内の別の位置に書き込む。そして、コントローラ4は、中間−物理アドレス変換テーブル(iLUT)34を更新して、この別の物理記憶位置の物理アドレスを、この論理アドレスに対応する中間アドレスに関連付ける。
ブロック管理には、バッドブロックの管理と、ウェアレベリングと、ガベージコレクション等が含まれる。ウェアレベリングは、物理ブロックそれぞれの消耗を均一化するための動作である。ガベージコレクションは、データを書き込むことが可能なフリーブロック(フリースーパーブロック)の個数を増やすため、有効データと無効データとが混在する幾つかのコピー元ブロック(コピー元スーパーブロック)内の有効データをコピー先ブロック(コピー先スーパーブロック)にコピーする。ここで、有効データとは、論理アドレスから最新のデータとして紐付けられているデータ、つまり後にホスト2からリードされる可能性があるデータを意味する。無効データとは、もはやホスト2からリードされる可能性が無いデータを意味する。
本実施形態では、スーパーブロック(SB)100−0、100−1、…100−iの各々に含まれる全てのユーザデータの参照カウントは、各スーパーブロックに対応するSB管理テーブルに格納されている。換言すれば、コントローラ4は、各スーパーブロックに対応するSB管理テーブルを使用して、各スーパーブロック内の複数のデータに対応する複数の参照カウントを管理する。したがって、コントローラ4は、ガベージコレクションのためのコピー元ブロックに対応するSB管理テーブル内の参照カウント群のみに基づいて、ガベージコレクションのためのデータコピー動作を実行することができる。すなわち、コントローラ4は、ゼロの参照カウントに対応するデータをコピーせず、非ゼロの参照カウントに対応するデータのみをガベージコレクション対象スーパーブロック(ガベージコレクションのコピー元ブロック)からコピー先ブロックにコピーする。ガベージコレクション対象スーパーブロック(ガベージコレクションのコピー元ブロック)は、GCソーススーパーブロックとしても参照される。また、コピー先ブロックは、GCディスティネーションスーパーブロックとしても参照される。つまり、ゼロの参照カウントに対応するデータはどの論理アドレスからも参照されてないので、無効データとして扱われる。非ゼロの参照カウントに対応するデータは1以上の論理アドレスから参照されているので、有効データとして扱われる。非ゼロの参照カウントに対応するデータがコピー先ブロックに移動されることによってもはや非ゼロの参照カウントに対応するデータが存在しなくなったコピー元ブロックは、フリーブロック(フリースーパーブロック)として解放される。これによって、このフリースーパーブロックはその消去動作が実行された後に再利用することが可能となる。
ガベージコレクションにおいては、コントローラ4は、さらに、コピー元ブロックに対応するSB管理テーブル内の非ゼロの参照カウントそれぞれを、コピー先ブロックに対応するSB管理テーブルにコピーする。これにより、データがコピー元ブロックからコピー先ブロックにコピーされた後においても、コピーされたデータそれぞれに対応する参照カウントの値を正しく管理することが可能となる。
また、各SB管理テーブルの内容は、そのSB管理テーブルに対応するスーパーブロックの消去動作が実行された時に不要とされる。したがって、あるスーパーブロック内のデータそれぞれが不要となるタイミングとこのスーパーブロックに対応するSB管理テーブル内の参照カウントそれぞれが不要となるタイミングとが同時に起こるので、各スーパーブロック内のデータそれぞれに対応する参照カウントそれぞれを管理するためのコストを低減することができる。
コントローラ4は、ホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14等を含んでもよい。これらCPU12、NANDインタフェース13、DRAMインタフェース14は、バス10を介して相互接続されていてもよい。
ホストインタフェース11は、ホスト2から様々なコマンド(例えば、ライトコマンド、リードコマンド、アンマップ(UNMAP)/トリム(Trim)コマンド、等)を受信する。
CPU12は、ホストインタフェース11、NANDインタフェース13、およびDRAMインタフェース14を制御するように構成されたプロセッサである。CPU12は、SSD3の電源オンに応答して、NAND型フラッシュメモリ5または図示しないROMに格納されている制御プログラム(ファームウェア)をDRAM6上にロードし、このファームウェアを実行することによって様々な処理を行う。このCPU12は、例えば、上述のFTLの処理に加え、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。CPU12の動作は、CPU12によって実行される上述のファームウェアによって制御される。なお、FTL処理およびコマンド処理の一部または全部は、コントローラ4内の専用ハードウェアによって実行してもよい。
CPU12は、重複排除処理部21、ガベージコレクション(GC)動作制御部22、データ分離動作制御部23として機能することができる。
<重複排除処理部21>
重複排除処理部21は、SSD3内で重複排除を実現するためのデータ書き込み動作を実行する。
重複排除処理部21は、SSD3内で重複排除を実現するためのデータ書き込み動作を実行する。
重複排除処理部21がライトデータ(書き込むべきユーザデータ)をホスト2から受信した時、重複排除処理部21は、以下のデータ書き込み動作を実行する。
(1)ライトデータと一致するデータ(重複データ)がNAND型フラッシュメモリ5に存在していない場合、重複排除処理部21は、論理アドレスそれぞれと中間アドレスそれぞれとの対応関係を管理するLUT32を更新して、未使用の第1の中間アドレスをライトデータの論理アドレスに関連付ける。重複排除処理部21は、ライトデータを複数のスーパーブロックの一つ(書き込み先スーパーブロック)に書き込む。重複排除処理部21は、中間アドレスそれぞれと物理アドレスそれぞれとの対応関係を管理するiLUT34を更新して、ライトデータが書き込まれたNAND型フラッシュメモリ5内の位置(物理記憶位置)を示す物理アドレスを第1の中間アドレスに関連付ける。そして、重複排除処理部21は、このライトデータに対応する参照カウントを1に設定する。
(2)ライトデータと一致する重複データがNAND型フラッシュメモリ5に既に存在している場合、重複排除処理部21は、ライトデータを複数のスーパーブロックの一つ(書き込み先スーパーブロック)に書き込まずに、LUT32を更新して、この重複データに対応する物理アドレスを保持しているiLUT34内のエントリを指す第2の中間アドレスをライトデータの論理アドレスに関連付ける。そして、重複排除処理部21は、重複データに対応する参照カウントを1増やす。
(3)ライトデータがNAND型フラッシュメモリ5に既に書き込まれているデータの更新データである場合、重複排除処理部21は、既に書き込まれているこのデータに対応する参照カウントを1減らす。
重複排除処理部21は、ハッシュLUT33も管理する。このハッシュLUT33は、ハッシュ値それぞれと中間アドレスそれぞれとの対応関係を管理する変換テーブルである。ライトデータの論理アドレスにある中間アドレスを関連付けるための処理においては、重複排除処理部21は、以下の動作を実行してもよい。
(1)重複排除処理部21は、ライトデータのハッシュ値を得る。
(2)得られたハッシュ値に対応する中間アドレスがハッシュLUT33に存在しない場合、重複排除処理部21は、ライトデータと一致する重複データがNAND型フラッシュメモリ5に存在していないと判定する。そして、重複排除処理部21は、未使用の中間アドレスを、得られたハッシュ値に付与し、得られたハッシュ値と得られたハッシュ値に付与された中間アドレスとの対応関係を、ハッシュLUT33に格納する。このように、ライトデータと一致する重複データがNAND型フラッシュメモリ5に存在していない場合には、得られたハッシュ値に付与された中間アドレスが、ライトデータの論理アドレスに、上述の第1の中間アドレスとして関連付けられる。
(3)得られたハッシュ値に対応する中間アドレスがハッシュLUT33に既に存在する場合、重複排除処理部21は、iLUT34を参照して、前記得られたハッシュ値に対応する中間アドレスに関連付けられた物理アドレスを取得する。重複排除処理部21は、ライトデータを、取得された物理アドレスによって指定されるNAND型フラッシュメモリ5内の位置に格納されているデータと比較する。これらデータが互いに一致する場合、重複排除処理部21は、ライトデータと一致する重複データがNAND型フラッシュメモリ5に既に存在していると判定する。このように、ライトデータと一致する重複データがNAND型フラッシュメモリ5に既に存在している場合には、重複排除処理部21は、得られたハッシュ値に対応し且つハッシュLUT33に既に存在する上述の中間アドレスが、ライトデータの論理アドレスに、上述の第2の中間アドレスとして関連付けられる。
<GC動作制御部22>
GC動作制御部22は、コピー元ブロック(コピー元スーパーブロック)に対応するSB管理テーブル内の参照カウントそれぞれに基づいて、以下のGC動作を実行する。
GC動作制御部22は、コピー元ブロック(コピー元スーパーブロック)に対応するSB管理テーブル内の参照カウントそれぞれに基づいて、以下のGC動作を実行する。
(1)複数のスーパーブロック100−1、100−2、…100−iの一つがガベージコレクションのコピー元ブロック(コピー元スーパーブロック)として選択された場合、GC動作制御部22は、コピー元ブロックに対応するSB管理テーブルに基づいて、非ゼロの参照カウントにそれぞれ対応するデータのみをコピー元ブロックからコピー先ブロック(コピー先スーパーブロック)にコピーする。
(2)GC動作制御部22は、iLUT34を更新して、非ゼロの参照カウントにそれぞれ対応するデータがコピーされたコピー先ブロック内の位置それぞれを示す物理アドレスを、コピーされたデータに対応する中間アドレスそれぞれに関連付ける。
(3)GC動作制御部22は、コピー元ブロックに対応するSB管理テーブル内の非ゼロの参照カウントそれぞれを、コピー先ブロックに対応するSB管理テーブルにコピーする。
このように、iLUT34においては、中間アドレスそれぞれと物理アドレスそれぞれとが互いに一対一にマッピングされる。したがって、複数の論理アドレスから参照されているデータ(重複データ)がガベージコレクション(GC)によってコピー元ブロックからコピー先ブロックにコピーされたケースにおいては、コントローラ4は、iLUT34のみを更新するだけで、このデータの旧物理アドレス(コピー元物理アドレス)を新物理アドレス(コピー先物理アドレス)に正しく変更することができる。
また、コントローラ4は、あるスーパーブロックに格納されている複数のデータそれぞれに対応する複数の参照カウントの全てを、このスーパーブロックに対応するSB管理テーブルを使用して管理する。そして、あるスーパーブロックがGCのためのコピー元ブロックとして選択された場合には、このスーパーブロックに対応するSB管理テーブルの内容に基づいて、非ゼロの参照カウントに対応するデータのみをコピー元ブロックからコピー先ブロックにコピーする処理と、非ゼロの参照カウントそれぞれを、コピー元ブロックに対応するSB管理テーブルからコピー先ブロックに対応するSB管理テーブルにコピーする処理とが実行される。したがって、コピー元ブロックに対応するSB管理テーブルの内容のみに基づいてGC動作を実行することが可能となり、重複排除を実現しつつ、GC動作の効率を改善することができる。
<データ分離動作制御部23>
データ分離動作制御部23は、大きな参照カウントを有するデータ群と小さな参照カウントを有するデータ群とを互いに分離して、大きな参照カウントを有するデータ群と小さな参照カウントを有するデータ群とを互いに異なるスーパーブロックに格納するための動作を実行する。換言すれば、データ分離動作制御部23は、同じ参照カウント範囲に属するデータ群を同じスーパーブロックに集めるために、以下の動作を実行する。
データ分離動作制御部23は、大きな参照カウントを有するデータ群と小さな参照カウントを有するデータ群とを互いに分離して、大きな参照カウントを有するデータ群と小さな参照カウントを有するデータ群とを互いに異なるスーパーブロックに格納するための動作を実行する。換言すれば、データ分離動作制御部23は、同じ参照カウント範囲に属するデータ群を同じスーパーブロックに集めるために、以下の動作を実行する。
スーパーブロック100−0、100−1、…100−iの一つがガベージコレクションのコピー元ブロックとして選択された場合、データ分離動作制御部23は、コピー元ブロックに対応するSB管理テーブルに基づいて、コピー元ブロック内に含まれ且つ第1の参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を、第1のコピー先ブロックにコピーする。さらに、データ分離動作制御部23は、コピー元ブロック内に含まれ且つ第1の参照カウント範囲の上限よりも大きい下限を有する第2の参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を、第2のコピー先ブロックにコピーする。
各SB管理テーブルは、ある設定されたビット長を各々が有する複数の参照カウントを格納可能な参照カウント記憶領域を有している。各参照カウントのビット長が長くなるほど、カウント可能な参照カウントの最大値を大きくすることができるが、確保することが必要な参照カウント記憶領域のサイズは増大する。もし一つのスーパーブロックに大きな参照カウントを有するデータ群と小さな参照カウントを有するデータ群とが混在していたならば、大きな参照カウントを表現可能な長いビット長を各々が有する複数の参照カウントを格納可能な大きなサイズの参照カウント記憶領域を確保することが必要となる。しかし、このスーパーブロックには小さな参照カウントを有するデータ群も含まれている。したがって、この大きなサイズの参照カウント記憶領域内の多くのメモリリソースが無駄に消費される可能性がある。
本実施形態では、同じ参照カウント範囲に属するデータ群を同じスーパーブロックに集められる。したがって、各SB管理テーブル内に設けることが必要な参照カウント記憶領域のサイズを最適化することが可能となり、この結果、参照カウントそれぞれの管理に必要とされるメモリリソースの量を削減することができる。
また、大きな参照カウントを有するデータ群は、書き換えられる確率が低いデータ、つまり、長いライフタイムを有するデータであるといえる。なぜなら、大きな参照カウントを有するデータを参照している多くの数の論理アドレスそれぞれに対応するデータが全て更新されない限り、このデータに対応する参照カウントはゼロにならないためである。例えば、SSD3が上述のVDIサーバのストレージとして使用されているケースにおいては、複数のエンドユーザに提供される複数の仮想デスクトップOSそれぞれのアップデートが実行されると、互いに同じ内容を有するデータを書き込むための多数の書き込み要求がホスト2(VDIサーバ)からSSD3に送信される可能性がある。この結果、NAND型フラッシュメモリ5においては、大きな参照カウントをそれぞれ有する多数のデータが存在することになる。これら大きな参照カウントを有するデータ群は、仮想デスクトップOSそれぞれの次回のアップデートまでは有効に維持される可能性が高い。
一方、小さい参照カウントを有するデータ群は、書き換えられる確率が比較的高いデータ、つまり、短いライフタイムを有するデータである。
もし大きな参照カウントを有するデータ群と小さい参照カウントを有するデータ群とが同じスーパーブロックに混在される環境であったならば、ライトアンプリフィケーションが増加する可能性がある。
なぜなら、大きな参照カウントを有するデータ群と小さい参照カウントを有するデータ群とが混在するスーパーブロックにおいては、小さい参照カウントを有するデータ群だけが早いタイミングで無効化される一方、このスーパーブロック内の残りのデータ群(大きな参照カウントを有するデータ群)は有効状態に長い間維持される可能性があるためである。
ライトアンプリフィケーション(WA)は、以下のように定義される。
WA=「SSDにライトされたデータの総量」 / 「ホストからSSDにライトされたデータの総量」
「SSDにライトされたデータの総量」は、ホストからSSDにライトされたデータの総量とガベージコレクション等によって内部的にSSDにライトされたデータの総量との和に相当する。
「SSDにライトされたデータの総量」は、ホストからSSDにライトされたデータの総量とガベージコレクション等によって内部的にSSDにライトされたデータの総量との和に相当する。
ライトアンプリフィケーション(WA)の増加は、SSD3内のスーパーブロック/物理ブロックそれぞれの書き換え回数(プログラム/イレーズ回数)の増加を引き起こす。つまり、ライトアンプリフィケーション(WA)が大きい程、物理ブロックのプログラム/イレーズ回数が、そのプログラム/イレーズ回数の上限値に速く達しやすくなる。この結果、SSD3の耐久性および寿命の劣化が引き起こされる。
本実施形態では、同じ参照カウント範囲に属するデータ群が同じスーパーブロックに集められるので、同じスーパーブロックに含まれるデータそれぞれのライフタイムを同程度に揃えることができる。同程度のライフタイムを有するデータ群は、その削除または更新によってほぼ同時期に無効化される可能性が高いデータグループを意味する。全データが無効化されたスーパーブロックに関しては、GCを実行することなく、そのスーパーブロックをフリーブロックにすることができる。結果として、同じスーパーブロックに含まれるデータそれぞれの参照カウントを同程度に揃えることは、GCの頻度を抑えることを可能とし、これによってライトアンプリフィケーションを下げることができる。
さらに、データ分離動作制御部23は、大きな参照カウントを有するデータ群が集められているスーパーブロック群と、小さい参照カウントを有するデータ群が集められているスーパーブロック群との間で、GCソーススーパーブロック(つまり、コピー元ブロックの候補)を選択するための条件を変更する処理を実行する。つまり、データに対応する参照カウントが大きいほど、そのデータが書き換えられる確率は低いので、データ分離動作制御部23は、大きな参照カウントを有するデータ群が集められているスーパーブロック群を、小さい参照カウントを有するデータ群が集められているスーパーブロック群よりも優先的にGC候補に選択する。
より詳しくは、データ分離動作制御部23は、以下の動作を実行する。
(1)データ分離動作制御部23は、スーパーブロック100−1、100−2、…100−iを、第1の参照カウント範囲に属するデータの集合が集められている第1のブロック群と、第2の参照カウント範囲に属するデータの集合が集められている第2のブロック群とに分類する。
(2)第1のブロック群については、データ分離動作制御部23は、無効データ量が第1の閾値よりも大きいという条件を満たすブロック(スーパーブロック)をガベージコレクションのためのコピー元ブロックの候補として選択する。
(3)第2のブロック群については、データ分離動作制御部23は、無効データ量が、第1の閾値よりも小さい第2の閾値よりも大きいという条件を満たすブロック(スーパーブロック)をガベージコレクションのためのコピー元ブロックの候補として選択する。
第2の参照カウント範囲に属するデータの集合が集められている第2のブロック、つまり大きな参照カウントを有するデータ群が集められているスーパーブロックにおいては、無効データが格納されている無効データ記憶領域は、長い間、新たなデータの格納に利用されない。この無効データ記憶領域は、SSD3のオーバープロビジョニング容量を無駄に消費する。本実施形態では、大きな参照カウントを有するデータ群が集められているスーパーブロック群を、小さい参照カウントを有するデータ群が集められているスーパーブロック群よりも優先的にGC候補に選択することができるので、大きな参照カウントを有するデータ群が集められているスーパーブロック群内の無効データ記憶領域を新たなデータを格納するためのメモリリソースとして利用しやすくすることができる。このことは、SSD3の実質的なオーバープロビジョニング容量を増加することを可能にし、これによってライトアンプリフィケーションを下げることができる。
図1のDRAMインタフェース14は、DRAM6をアクセス制御するように構成されたDRAMコントローラである。DRAM6の記憶領域の一部は、ライトバッファ(WB)31を格納するために使用される。DRAM6の記憶領域の他の一部は、上述のLUT32、ハッシュLUT33、iLUT34をルックアップテーブルキャッシュとして格納するために使用される。LUT32、ハッシュLUT33、iLUT34の各々の一部分のみがルックアップテーブルキャッシュに格納されてもよいし、LUT32、ハッシュLUT33、iLUT34の各々の全てがルックアップテーブルキャッシュに格納されてもよい。DRAM6の記憶領域のさらに他の一部は、上述のSB管理テーブル200−0、200−1、…200−iを格納するために使用される。
図5は、LUT32とiLUT34との関係を示す。
上述したように、LUT32は、論理−中間アドレス変換テーブルとして機能し、論理アドレスLBA)それぞれと中間アドレスそれぞれとの対応関係を管理する。以下では、中間アドレスをiLBAと称する。
また、上述したように、iLUT34は、中間−物理アドレス変換テーブルとして機能する中間ルックアップテーブルであり、iLBAそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの対応関係を管理する。以下では、物理アドレスをPBAとも称する。
NAND型フラッシュメモリ5に既に存在しているあるデータが複数のLBAから参照されている場合、LUT32においては、これらLBAには同一のiLBAが関連付けられる。iLUT34においては、このiLBAには、このデータが格納されているNAND型フラッシュメモリ5内の位置を示すPBAが関連付けられている。したがって、これらLBAから同一のiLBAを参照でき、この同一のiLBAからこのデータが格納されているNAND型フラッシュメモリ5内の位置を示すPBAを参照することができる。
iLUT34においては、iLBAそれぞれとPBAそれぞれとが互いに一対一にマッピングされる。したがって、複数の論理アドレスから参照されているデータ(重複データ)がガベージコレクション(GC)によってコピー元ブロックからコピー先ブロックにコピーされたケースにおいては、コントローラ4は、iLUT34のみを更新するだけで、このデータの旧PBAを新PBAに正しく変更することができる。
複数のLBAから同一のPBAを直接参照するというアドレス変換構造を使用することも可能である。しかし、この場合には、LUT32においては、もしあるデータが1000個のLBAから参照されているならば、これら1000個のLBAに対応する1000個のエントリに同じPBAをそれぞれ格納することが必要とされる。したがって、1000個のLBAから参照されているデータ(重複データ)がガベージコレクション(GC)によってコピー元ブロックからコピー先ブロックにコピーされたケースにおいては、コントローラ4は、これら1000個のエントリ内のPBAをそれぞれ更新することが必要とされる。
本実施形態では、たとえあるデータが1000個のLBAから参照されていても、これらLBAは一つのiLBAを参照し、このデータのPBAは、この一つのiLBAにのみ関連付けられる。したがって、コントローラ4は、このPBAが格納されているiLUT34内の一つのエントリのPBAのみを更新するだけでよい。
図6に示されているように、複数のLUT32からiLUT34が参照されてもよい。図6においては、2つのLUT32−0、LUT32−1からiLUT34が参照されるケースが例示されている。LUT32−0は、あるネームスペースに対応するLBAそれぞれとiLBAそれぞれとの対応関係を管理するLUTであってもよく、LUT32−1は、別のネームスペースに対応するLBAそれぞれとiLBAそれぞれとの対応関係を管理するLUTであってもよい。各ネームスペースには、LBA0から始まるLBA範囲が割り当てられる。ホスト2からのライトコマンド/リードコマンドは、特定のネームスペースを指定する識別子(ネームスペースID)を含んでいてもよい。ホスト2は、あるエンドユーザからのI/O要求に応じて、このエンドユーザに割り当てられた特定のネームスペースを指定するネームスペースIDを含むライトコマンド/リードコマンドをSSD3に送信してもよい。また、ホスト2は、別のエンドユーザからのI/O要求に応じて、この別のエンドユーザに割り当てられた別の特定のネームスペースを指定するネームスペースIDを含むライトコマンド/リードコマンドをSSD3に送信してもよい。
図7は、アドレス参照構造を示す。
SSD3のコントローラ4は、ホスト2からライトデータとこのライトデータに対応するLBAとを受信する。一つのLBAに対応するライトデータのサイズは、例えば、4Kバイト(4KB)であってもよい。
コントローラ4は、ホスト2から受信されたライトデータのハッシュ値を得る。ハッシュ計算のためのアルゴリズムは限定されず、任意のアルゴリズムを利用することができる。ハッシュ計算によって得られるハッシュ値のビット幅は、ライトデータのサイズ、例えば、4KB(=32768ビット)、よりも小さいビット幅であればよい。ハッシュ計算によって得られるハッシュ値のビット幅は256ビットであってもよい。コントローラ4は、得られたハッシュ値に対してあるiLBAを付与し、得られたハッシュ値とこのハッシュ値に付与されたiLBAとをハッシュLUT33に格納する。
得られたハッシュ値に対するiLBAの付与は以下のように行われてもよい。
もし得られたハッシュ値に対応するiLBAがハッシュLUT33に存在していないならば、コントローラ4は、ライトデータと一致するデータ(重複データ)がNAND型フラッシュメモリ5に存在していないと判定し、未使用の任意のiLBAをこのハッシュ値に付与する。そして、コントローラ4は、得られたハッシュ値とこのハッシュ値に付与されたiLBAとをハッシュLUT33に格納する。この付与されたiLBAは、LUT32に通知される。LUT32においては、この通知されたiLBAが、ホスト2から受信されたライトデータに対応するLBAに関連付けられる。コントローラ4は、ライトデータを複数のスーパーブロック100−0、100−1、100−2、…の一つ(書き込み先スーパーブロック)に書き込む。そして、コントローラ4は、iLUT34を更新して、ライトデータが書き込まれたNAND型フラッシュメモリ5内の位置(物理記憶位置)を示す物理アドレス(PBA)を、この付与されたiLBAに関連付ける。コントローラ4は、書き込み先スーパーブロックに対応するSB管理テーブルを更新して、このライトデータに対応する参照カウントを1に設定する。
もし得られたハッシュ値に対応するiLBAがハッシュLUT33に既に存在していたならば、コントローラ4は、このライトデータと一致するデータ(重複データ)がNAND型フラッシュメモリ5に既に存在している可能性があると判定する。
この場合、コントローラ4は、まず、得られたハッシュ値に対応するiLBAをハッシュLUT33から取得する。コントローラ4は、このiLBAに対応するPBAをiLUT34から取得し、取得されたPBAによって指定されるNAND型フラッシュメモリ5内の位置に格納されているデータをリードする。そして、コントローラ4は、ライトデータとリードデータとを比較する。ライトデータとリードデータとが一致するならば、コントローラ4は、ライトデータと一致するデータ(重複データ)がNAND型フラッシュメモリ5に既に存在していると判定する。この場合、ライトデータは、複数のスーパーブロック100−0、100−1、100−2、…の一つ(書き込み先スーパーブロック)に書き込まれない。コントローラ4は、得られたハッシュ値に対応するこのiLBA、つまり重複データが格納されているNAND型フラッシュメモリ5内の位置を示すPBAを保持しているiLUT34内のエントリを指すiLBAを、LUT32に通知する。LUT32においては、この通知されたiLBAが、ホスト2から受信されたライトデータに対応するLBAに関連付けられる。そして、コントローラ4は、重複データが格納されているスーパーブロックに対応するSB管理テーブルを更新して、この重複データに対応する参照カウントを1だけ増やす。
図8は、スーパーブロック管理テーブルの構成例を示す。
図8においては、図示を簡単化するために、スーパーブロック(SB)100−0が、各々が4つの4KBデータが格納可能なPage0〜kを有するケースが例示されている。また、各4KBデータが格納されている物理記憶位置には物理アドレス(PBA)が割り当てられている。
Page0において、PBA0に対応する物理記憶位置にはDataAが、PBA1に対応する物理記憶位置にはDataBが、PBA2に対応する物理記憶位置にはDataCが、PBA3に対応する物理記憶位置にはDataDが格納されている。
また、Page1において、PBA4に対応する物理記憶位置にはDataEが、PBA5に対応する物理記憶位置にはDataFが、PBA6に対応する物理記憶位置にはDataGが、PBA7に対応する物理記憶位置にはDataHが格納されている。
同様に、Pagekにおいて、PBAn−3に対応する物理記憶位置にはDataWが、PBAn−2に対応する物理記憶位置にはDataXが、PBAn−1に対応する物理記憶位置にはDataYが、PBAnに対応する物理記憶位置にはDataZが格納されている。
スーパーブロック(SB)100−1、100−2、…も、スーパーブロック(SB)100−0と同様の構成を有している。
SB管理テーブル200−0、200−1、200−2、…はそれぞれ、スーパーブロック(SB)100−0、100−1、100−2、…に対応して設けられている。各SB管理テーブルにおいては、対応するスーパーブロック(SB)に格納された複数のデータに対応する複数の参照カウント(Refcount)が格納される。これら参照カウント(Refcount)は、対応するスーパーブロック(SB)の物理アドレス(PBA)の並び順に配置されている。
例として、スーパーブロック(SB)100−0に対応するSB管理テーブル200−0においては、スーパーブロック(SB)100−0内のデータそれぞれに対応する参照カウントは以下のように管理される。
SB管理テーブル200−0では、スーパーブロック(SB)100−0のPBA0〜nに対応するn+1個の参照カウント(Refcount)が管理される。これらn+1個の参照カウント(Refcount)は、PBA0〜nの並びの順にSB管理テーブル200−0内に配置される。
PBA0に対応するSB管理テーブル200−0内の先頭記憶位置に格納されているRefcount「3」は、PBA0に対応する物理記憶位置に格納されたDataAに対応する参照カウントであり、DataAを参照している論理アドレス(LBA)の数が3であることを示している。
重複排除の仕組みを有さない通常のSSDにおいては、これら3つのLBAに対応する3つのユーザデータがNAND型フラッシュメモリに書き込まれる。もし一つのLBAに対応するユーザデータサイズが4Kバイトであるならば、3つの4Kバイトデータの書き込みのために12Kバイトのメモリリソースが消費される。
本実施形態では、これら3つのLBAに対応する3つのユーザデータの一つのみがNAND型フラッシュメモリ5に書き込まれる。したがって、消費されるメモリリソースを4Kバイトに減らすことができる。このように、SSD3は、SSD3に書き込まれるべきユーザデータを重複排除機能によって圧縮することを可能にする。
PBA1に対応するSB管理テーブル200−0内の2番目の記憶位置に格納されているRefcount「4」は、PBA1に対応する物理記憶位置に格納されたDataBに対応する参照カウントであり、DataBを参照している論理アドレス(LBA)の数が4であることを示している。同様に、PBAnに対応するSB管理テーブル200−0内のn+1番目の記憶位置に格納されているRefcount「0」は、PBAnに対応する物理記憶位置に格納されたDataZに対応する参照カウントであり、DataZを参照している論理アドレス(LBA)の数がゼロであることを示している。
同様に、SB管理テーブル200−1、200−2、…の各々では、対応するスーパーブロック(SB)100−1、100−2、…内の複数のデータに対応する複数の参照カウントが、対応するスーパーブロック(SB)内のPBAの並びの順に配置されている。
図9は、中間ルックアップテーブル(iLUT)34の構成例を示す。
iLUT34は、中間アドレス(iLBA)それぞれとNAND型フラッシュメモリ5の物理アドレス(PBA)それぞれとの対応関係を管理する。
iLUT34は、iLBA0〜mに対応するm+1個のエントリを有していてもよい。例えば、iLBA0に対応するエントリは、iLBA0が付与された1つ以上のLBAに対応するデータが格納されているNAND型フラッシュメモリ5内の位置(物理記憶位置)を示すPBA(ここではPBA0)を格納するために使用される。iLBA1に対応するエントリは、iLBA1が付与された1つ以上のLBAに対応するデータが格納されているNAND型フラッシュメモリ5内の位置(物理記憶位置)を示すPBA(ここではPBA1)を格納するために使用される。
図10は、ルックアップテーブル(LUT)32の構成例を示す。
LUT32は、論理アドレス(LBA)それぞれと中間アドレス(iLBA)それぞれとの対応関係を管理する。
LUT32は、LBA0〜jに対応するj+1個のエントリを有していてもよい。
例えば、LBA0に対応するエントリは、LBA0に付与されたiLBA(ここではiLBA0)を格納するために使用される。LBA1に対応するエントリは、LBA1に付与されたiLBA(ここではiLBA1)を格納するために使用される。LBA2に対応するエントリは、LBA2に付与されたiLBA(ここではiLBA7)を格納するために使用される。同様に、LBA10に対応するエントリは、LBA10に付与されたiLBA(ここではiLBA0)を格納するために使用され、LBAjに対応するエントリはLBAjに付与されたiLBA(ここではiLBA0)を格納するために使用される。
図11は、ハッシュルックアップテーブル(ハッシュLUT)33の構成例を示す。
ハッシュLUT33は、ハッシュ値(Hash(Data))それぞれと中間アドレス(iLBA)それぞれとの対応関係を管理する。
ハッシュルックアップテーブル(ハッシュLUT)33は、複数のエントリを有しており、各エントリは、あるハッシュ値(Hash(Data))とこのハッシュ値(Hash(Data))に付与された中間アドレス(iLBA)とを格納する。基本的には、異なるハッシュ値に対しては異なるiLBAが付与される。SSD3は、ホスト2からのライトデータのハッシュ値を得、得られたハッシュ値がハッシュLUT33に存在しないならば、未使用の任意のiLBAを得られたハッシュ値に付与し、得られたハッシュ値と付与されたiLBAとの対応関係をハッシュLUT33に格納する。
図11では、DataAのハッシュ値(Hash(DataA))にはiLBA0が付与され、DataBのハッシュ値(Hash(DataB))にはiLBA1が付与され、DataCのハッシュ値(Hash(DataC))にはiLBA7が付与され、DataDのハッシュ値(Hash(DataD))にはiLBA5が付与され、DataEのハッシュ値(Hash(DataE))にはiLBA10が付与され、DataFのハッシュ値(Hash(DataF))にはiLBA2が付与され、DataGのハッシュ値(Hash(DataG))にはiLBA4が付与され、DataHのハッシュ値(Hash(DataH))にはiLBA6が付与された場合が例示されている。
次に、図12を用いて本実施形態において実行されるアドレス変換動作について説明する。
ここでは、SSD3が、ホスト2から、各々が4KBのサイズを有する4つの新規ライトデータ、つまり、DataA、DataB、DataC、DataD、DataEを受信した場合を想定する。また、DataA、DataB、DataC、DataDは互いに異なる内容、つまり互いに異なるビット列を含むデータであり、DataEはDataAと一致するデータである場合を想定する。
DataA、DataB、DataC、DataDそれぞれのハッシュ値(Hash(DataA)、Hash(DataB)、Hash(DataC)、Hash(DataD)が計算され、それらのハッシュ値に未使用の中間アドレス(iLBA)がそれぞれ付与される。
図12においては、Hash(DataA)にはiLBA0が、Hash(DataB)にはiLBA1が、Hash(DataC)にはiLBA2が、Hash(DataD)にはiLBA3が付与された場合が例示されている。ハッシュLUT33には、4つのハッシュ値と4つのiLBAとの対応関係、つまり、Hash(DataA)とiLBA0のペアと、Hash(DataB)とiLBA1のペアと、Hash(DataC)とiLBA2のペアと、Hash(DataD)とiLBA3のペアとが格納される。また、LUT32が更新され、これによってiLBA0が、DataAに対応するLBA0に関連付けられ、iLBA1が、DataBに対応するLBA1に関連付けられ、iLBA2が、DataCに対応するLBA2に関連付けられ、iLBA3が、DataDに対応するLBA3に関連付けられる。
DataA、DataB、DataCおよびDataDは、複数のスーパーブロックの一つ(図12では、スーパーブロック(SB)100−0)に書き込まれる。このスーパーブロック(SB)100−0は、現在の書き込み先ブロック(現在の書き込み先スーパーブロック)として割り当てられているスーパーブロックである。そして、iLUT34が更新され、これによってDataAが書き込まれた書き込み先スーパーブロック(SB)100−0内の物理記憶位置を示すPBA0がiLBA0に関連付けられ、DataBが書き込まれた書き込み先スーパーブロック(SB)100−0内の物理記憶位置を示すPBA1がiLBA1に関連付けられ、DataCが書き込まれた書き込み先スーパーブロック(SB)100−0内の物理記憶位置を示すPBA2がiLBA2に関連付けられ、DataDが書き込まれた書き込み先スーパーブロック(SB)100−0内の物理記憶位置を示すPBA3がiLBA3に関連付けられる。なお、スーパーブロック(SB)100−0へのDataA、DataB、DataCおよびDataDの書き込みの前にiLUT34の更新が実行されてもよい。
DataEのハッシュ値(Hash(DataE))は、Hash(DataA)と一致する。このため、Hash(DataE)(=Hash(DataA))に対応するiLBA(ここではiLBA0)は、ハッシュLUT33に既に存在している。この場合、iLBA0に対応するPBA0によって指定される物理記憶位置に格納されているデータ(ここではDataA)とDataEとが比較され、DataEがDataAと一致するか否かが判定される。
DataEがDataAに一致するならば、DataEはスーパーブロック(SB)100−0に書き込まれない(重複排除)。そして、LUT32が更新され、Hash(DataE)に対応し且つハッシュLUT33に既に存在しているiLBA(ここではiLBA0)が、DataEに対応するLBA4に関連付けられる。
次に、図13を用いて本実施形態において実行されるデータ読み出し動作について説明する。
SSD3のコントローラ4がホスト2からLBA4を含むリードコマンドを受信した場合、コントローラ4は、LUT32を参照する。LBA4に対応する中間アドレスはiLBA0であるため、コントローラ4は、iLBA0に基づいてiLUT34を参照する。iLBA0に対応する物理アドレスは、PBA0である。このため、コントローラ4は、PBA0によって指定されるSB100−0内の物理記憶位置からDataAをリードし、DataAをホスト2に返す。
図14は、ユーザデータ管理のための構造を示す。
図14において、ルックアップテーブルキャッシュ38は、NAND型フラッシュメモリ5の管理領域8にそれぞれ格納されているLUT32全体およびiLUT34全体の各々の一部をDRAM6上に保持するために使用される。また、図14において、Non volatile LUT36は、NAND型フラッシュメモリ5の管理領域8に格納されているLUT32全体の内容を表し、Non volatile iLUT37は、NAND型フラッシュメモリ5の管理領域8に格納されているiLUT33全体の内容を表している。
ルックアップテーブルキャッシュ38に目的のアドレス変換情報(LBA−iLBA変換情報、またはiLBA−PBA変換情報)が存在しない場合(キャッシュミス)、目的のアドレス変換情報はNAND型フラッシュメモリ5(Non volatile LUT36、またはNon volatile iLUT37)からリードされ、ルックアップテーブルキャッシュ38内のある置換対象キャッシュラインの内容が、このリードされたアドレス変換情報に置き換えられる。この置換対象キャッシュラインに保持されているアドレス変換情報が更新されている場合には、この置換対象キャッシュラインに保持されているアドレス変換情報の内容がNAND型フラッシュメモリ5(Non volatile LUT36、またはNon volatile iLUT37)に書き戻される(Updatate cache lines)。
ユーザデータ領域7内の各スーパーブロック(SB)の状態は、有効データを格納しているアクティブブロック(アクティブスーパーブロック)と、有効データを格納していないフリーブロック(フリースーパーブロック)とに大別される。本実施形態では、非ゼロの参照カウントに対応するデータは有効データとして扱われ、ゼロの参照カウントに対応するデータは無効データとして扱われる。
アクティブブロックである各スーパーブロック(SB)は、ストレージブロックプール(アクティブブロックプール)51と称されるリストによって管理される。一方、フリーブロックである各スーパーブロック(SB)は、フリーブロックプール52と称されるリストによって管理される。
本実施形態では、コントローラ4は、フリーブロックプール52から選択された一つのスーパーブロック(フリースーパーブロック)を、ホスト2から受信されたライトデータが書き込まれるべき書き込み先ブロック(書き込み先スーパーブロック)として割り当てる。この場合、コントローラ4は、まず、選択されたスーパーブロック(フリースーパーブロック)内の各物理ブロックに対する消去動作を実行し、これによってこのスーパーブロック内の各物理ブロックを、書き込み可能な消去状態にする。現在の書き込み先スーパーブロックの全体がホスト2からのライトデータで満たされると、コントローラ4は、現在の書き込み先スーパーブロック54をストレージブロックプール51に移動し、フリーブロックプール52から新たな一つのスーパーブロック(フリースーパーブロック)を新たな書き込み先スーパーブロックとして割り当てる。
ストレージブロックプール51内のあるスーパーブロック内に全てのデータそれぞれの参照カウントが、データ更新、アンマップ、ガベージコレクション(GC)等によってゼロになると、コントローラ4は、このスーパーブロックをフリーブロックプール52に移動する。
GC動作においては、コントローラ4は、フリーブロックプール52から選択された一つのスーパーブロック(フリースーパーブロック)を、GCのためのコピー先ブロック(コピー先スーパーブロック)53として割り当てる。この場合、コントローラ4は、まず、選択されたスーパーブロック(フリースーパーブロック)内の各物理ブロックに対する消去動作を実行し、これによってこのスーパーブロック内の各物理ブロックを、書き込み可能な消去状態にする。コントローラ4は、ストレージブロックプール51内の一つ以上のスーパーブロックをコピー元ブロック(コピー元スーパーブロック)として選択する。
現在のコピー先ブロック53の全体がコピー元ブロック(コピー元スーパーブロック)からコピーされたデータで満たされると、コントローラ4は、現在のコピー先ブロック53をストレージブロックプール51に移動する。また、コントローラ4は、GCによって非ゼロの参照カウントに対応するデータが存在しなくなったコピー元ブロックを、フリーブロックプール52に移動する。
現在のコピー先ブロック53の全体がコピー元ブロック(コピー元スーパーブロック)からコピーされたデータで満たされると、コントローラ4は、現在のコピー先ブロック53をストレージブロックプール51に移動する。また、コントローラ4は、GCによって非ゼロの参照カウントに対応するデータが存在しなくなったコピー元ブロックを、フリーブロックプール52に移動する。
以下、ライト動作、リード動作、GC動作についてそれぞれ説明する。
<ライト動作>
ホスト2からの、ライトデータとLBAを含むライトコマンドがSSD3によって受信されると、ライトデータは、ライトバッファ(WB)31に一時的に格納される。
ホスト2からの、ライトデータとLBAを含むライトコマンドがSSD3によって受信されると、ライトデータは、ライトバッファ(WB)31に一時的に格納される。
ライトデータと一致する重複データがNAND型フラッシュメモリ5に存在していないならば、未使用のiLBAがライトデータのLBAに付与される。そして、コントローラ4は、LUT32を更新して、付与されたiLBAをライトデータのLBAに関連付ける。この場合、コントローラ4は、付与されたiLBAをライトデータのLBAに関連付けるためのルックアップテーブルキャッシュ更新要求(Update reguest)をルックアップテーブルキャッシュ38に送出してもよい。これにより、ルックアップテーブルキャッシュ38(LUT32)が更新されて、付与されたiLBAがライトデータのLBAに関連付けられる。そして、このライトデータは書き込み先スーパーブロック(SB)54に書き込まれる。ライトデータが書き込み先スーパーブロック(SB)54に書き込まれると、コントローラ4は、iLUT34を更新して、ライトデータが書き込まれた物理記憶位置を示すPBAを上述の付与されたiLBAに関連付ける。この場合、コントローラ4は、ライトデータが書き込まれた物理記憶位置を示すPBAを上述の付与されたiLBAに関連付けるためのルックアップテーブルキャッシュ更新要求(Update reguest)をルックアップテーブルキャッシュ38に送出してもよい。これにより、ルックアップテーブルキャッシュ38(iLUT34)が更新されて、このPBAが上述の付与されたiLBAに関連付けられる。
ライトデータと一致する重複データがNAND型フラッシュメモリ5に既に存在しているならば、重複データに付与されているiLBAがライトデータのLBAに付与される。そして、コントローラ4は、LUT32を更新して、重複データに付与されているiLBAをライトデータのLBAに関連付ける。この場合、コントローラ4は、重複データに付与されているiLBAをライトデータのLBAに関連付けるためのルックアップテーブルキャッシュ更新要求(Update reguest)をルックアップテーブルキャッシュ38に送出してもよい。これにより、ルックアップテーブルキャッシュ38(LUT32)が更新されて、付与されたiLBAがライトデータのLBAに関連付けられる。このライトデータは重複データと一致しているので、コントローラ4は、このライトデータを書き込み先スーパーブロック(SB)54に書き込むための書き込み動作を実行しない。これにより、重複排除を実行することがとできる。
<リード動作>
ホスト2からの、LBAを含むリードコマンドが受信されると、コントローラ4は、ルックアップテーブルキャッシュ38(LUT32)を参照して、このリードコマンドによって指定されたLBAに対応するiLBAを取得する。この場合、コントローラ4は、指定されたLBAに対応するiLBAを取得するためのルックアップテーブルキャッシュ(LUT)参照要求(Lookup reguest)をルックアップテーブルキャッシュ38に送出してもよい。
ホスト2からの、LBAを含むリードコマンドが受信されると、コントローラ4は、ルックアップテーブルキャッシュ38(LUT32)を参照して、このリードコマンドによって指定されたLBAに対応するiLBAを取得する。この場合、コントローラ4は、指定されたLBAに対応するiLBAを取得するためのルックアップテーブルキャッシュ(LUT)参照要求(Lookup reguest)をルックアップテーブルキャッシュ38に送出してもよい。
次いで、コントローラ4は、取得したiLBAに基づいて、ルックアップテーブルキャッシュ38(iLUT34)を参照し、PBAを取得する。この場合、コントローラ4は、取得されたiLBAに対応するPBAを取得するためのルックアップテーブルキャッシュ(iLUT)参照要求(Lookup reguest)をルックアップテーブルキャッシュ38に送出してもよい。
そして、コントローラ4は、取得したPBAによって指定される物理記憶位置からデータをリードし、リードしたデータをホスト2に返す。ここで、リードコマンドに含まれているLBAに対応するPBAが、ストレージブロックプール(アクティブブロックプール)51内のいずれかのアクティブブロックや書き込み先スーパーブロック内の物理記憶位置に対応する場合がある。また、ライトバッファ31内の物理記憶位置に対応する場合もある。
<GC動作>
コントローラ4は、フリーブロックプール52から選択された一つのスーパーブロック(フリースーパーブロック)を、コピー先ブロック(コピー先スーパーブロック)53として割り当てる。
コントローラ4は、フリーブロックプール52から選択された一つのスーパーブロック(フリースーパーブロック)を、コピー先ブロック(コピー先スーパーブロック)53として割り当てる。
また、コントローラ4は、ストレージブロックプール(アクティブブロックプール)51内のアクティブブロック(アクティブスーパーブロック)の中からGC動作が必要と判断された一つのアクティブブロック(アクティブスーパーブロック)を、GC対象スーパーブロック(コピー元スーパーブロック)として選択する。このとき、アクティブブロック(アクティブスーパーブロック)に格納されている無効データ量がある閾値よりも多くなった場合に、そのアクティブブロック(アクティブスーパーブロック)はGC動作が必要であると判断されてもよい。
コントローラ4は、コピー元ブロックに対応するSB管理テーブルに基づいて、非ゼロの参照カウントにそれぞれ対応するデータのみをコピー元ブロックからコピー先ブロック53にコピーする。そして、コントローラ4は、iLUT34を更新して、データがコピーされたコピー先ブロック53内の物理記憶位置それぞれを示すPBAをこれらコピーされたデータに対応するiLBAそれぞれに関連付ける。この場合、コントローラ4は、ライトデータが書き込まれた物理記憶位置を示すPBAを上述の付与されたiLBAに関連付けるためのルックアップテーブルキャッシュ更新要求(Update reguest)をルックアップテーブルキャッシュ38に送出してもよい。これにより、ルックアップテーブルキャッシュ38(iLUT34)が更新されて、このPBAが上述のコピーされたデータに対応するiLBAそれぞれに関連付けられる。
コピー先ブロック53が非ゼロの参照カウントのデータで満たされると、そのコピー先ブロック53は、ストレージブロックプール(アクティブブロックプール)51に移動され、アクティブブロック(アクティブスーパーブロック)として管理される。
図15および図16を用いて、本実施形態において実行されるガベージコレクション動作について説明する。ここでは、図示の簡単化のために、スーパーブロック(SB)100−0、100−1、100−2の各々がPage0〜3を有し、各Pageに4つの4KBデータが格納される場合を想定する。
図15には、ガベージコレクション動作により、スーパーブロック(SB)100−0内に含まれ且つ非ゼロの参照カウントにそれぞれ対応するデータがスーパーブロック(SB)100−2にコピーされる場合が示されている。
スーパーブロック(SB)100−0においては、PBA0〜15でそれぞれ指定される物理記憶位置に、DataA0〜P0がそれぞれ格納されており、そのうち、DataA0、DataB0、DataG0、DataH0、DataI0、DataK0、DataN0、DataP0は、非ゼロの参照カウント(Refcount)に対応するデータである。他方、DataC0、DataD0、DataE0、DataF0、DataJ0、DataL0、DataM0、DataO0は、ゼロの参照カウント(Refcount)に対応するデータである。スーパーブロック(SB)100−0に格納されたこれらデータそれぞれの参照カウント(Refcount)は、PBA0〜15の並びの順にSB管理テーブル200−0内に配置されている。
図15には、PBA0で指定される物理記憶位置に格納されているDataA0の参照カウント(Refcount)は「1」であり、PBA1で指定される物理記憶位置に格納されているDataB0の参照カウント(Refcount)は「2」であり、PBA2で指定される物理記憶位置に格納されているDataC0の参照カウント(Refcount)は「0」であり、PBA3で指定される物理記憶位置に格納されているDataD0の参照カウント(Refcount)は「0」であり、…PBA15で指定される物理記憶位置に格納されているDataP0の参照カウント(Refcount)は「2」であることが示されている。
いま、スーパーブロック(SB)100−0がGC対象スーパーブロック(コピー元ブロック)として選択されたならば、コントローラ4は、スーパーブロック(SB)100−0に対応するSB管理テーブル(ここでは、SB管理テーブル200−0)に基づいて、スーパーブロック(SB)100−0に含まれている、非ゼロの参照カウント(Refcount)に対応するデータのみをコピー先スーパーブロック(ここでは、スーパーブロック(SB)100−2)にコピーする。図15では、DataA0、DataB0、DataG0、DataH0、DataI0、DataK0、DataN0、DataP0がそれぞれ、コピー先スーパーブロック(ここでは、スーパーブロック(SB)100−2)のPBA100〜107で指定されるそれぞれの物理記憶位置にコピーされる。
次いで、コントローラ4は、非ゼロの参照カウントそれぞれを、GC対象スーパーブロック(コピー元ブロック)に対応するSB管理テーブル(ここでは、SB管理テーブル200−0)からコピー先スーパーブロック(SB)に対応するSB管理テーブル(ここでは、SB管理テーブル200−2)にコピーする。具体的には、コピー元スーパーブロック(スーパーブロック(SB)100−0)に対応するSB管理テーブル200−0において管理されていた、DataA0、DataB0、DataG0、DataH0、DataI0、DataK0、DataN0、DataP0にそれぞれ対応する参照カウント(ここでは、1、2、2、3、2、1、1、2)が、コピー先スーパーブロック(スーパーブロック(SB)100−2)に対応するSB管理テーブル200−2にコピーされる。ゼロの参照カウント(Refcount)はコピーされない。非ゼロの参照カウント(Refcount)のコピーの結果、図15に示されているように、SB管理テーブル200−2においては、DataA0、DataB0、DataG0、DataH0、DataI0、DataK0、DataN0、DataP0にそれぞれ対応する参照カウント(1、2、2、3、2、1、1、2)がPBA100〜107の並びの順に配置される。
また、iLUT34が更新され、データがコピーされたコピー先スーパーブロック内の物理記憶位置それぞれを示すPBAが、これらコピーされたデータに対応するiLBAそれぞれに関連付けられる。図15では、DataA0のコピー先スーパーブロックの物理記憶位置を指定するPBA100が、DataA0に対応するiLBA0に、DataB0のコピー先スーパーブロックの物理記憶位置を指定するPBA101が、DataB0に対応するiLBA1に、DataG0のコピー先スーパーブロックの物理記憶位置を指定するPBA102が、DataG0に対応するiLBA4に、DataH0のコピー先スーパーブロックの物理記憶位置を指定するPBA103が、DataH0に対応するiLBA6に、DataI0のコピー先スーパーブロックの物理記憶位置を指定するPBA104が、DataI0に対応するiLBA12に、DataK0のコピー先スーパーブロックの物理記憶位置を指定するPBA105が、DataK0に対応するiLBA9に、DataN0のコピー先スーパーブロックの物理記憶位置を指定するPBA106が、DataN0に対応するiLBA13に、DataP0のコピー先スーパーブロックの物理記憶位置を指定するPBA107が、DataP0に対応するiLBA17にそれぞれ関連付けられる。各スーパーブロックにおいては、4KBのユーザデータとこのユーザデータに対応するiLBAとのペアがユーザデータ毎に格納されていてもよい。この場合、コントローラ4は、コピー元ブロックを参照することによって、DataA0に対応するiLBA0、DataB0に対応するiLBA1、DataG0対応するiLBA4、DataH0に対応するiLBA6、DataI0に対応するiLBA12、DataK0に対応するiLBA9、DataN0に対応するiLBA13、DataP0に対応するiLBA17を容易に認識することができ、これによってiLUT34を容易に更新することができる。
図16には、スーパーブロック(SB)100−0に対するガベージコレクション動作の実行後、スーパーブロック(SB)100−1に対するガベージコレクション動作により、スーパーブロック(SB)100−1内に含まれ且つ非ゼロの参照カウントにそれぞれ対応するデータがスーパーブロック(SB)100−2にコピーされる場合が示されている。
スーパーブロック(SB)100−1における、PBA50〜65でそれぞれ指定されている物理記憶位置には、それぞれDataA1〜P1が格納されており、そのうち、DataC1、DataD1、DataE1、DataF1、DataI1、DataL1、DataN1、DataO1は、参照カウント(Refcount)が非ゼロのデータである。他方、DataA1、DataB1、DataG1、DataH1、DataJ1、DataK1、DataM1、DataP1は、参照カウント(Refcount)がゼロのデータである。スーパーブロック(SB)100−1に格納された各データの参照カウント(Refcount)は、PBA50〜65の並びの順にSB管理テーブル200−1内に配置されている。
図16には、PBA50で指定される物理記憶位置に格納されているDataA1の参照カウント(Refcount)は「0」であり、PBA51で指定される物理記憶位置に格納されているDataB1の参照カウント(Refcount)は「0」であり、PBA52で指定される物理記憶位置に格納されているDataC1の参照カウント(Refcount)は「2」であり、PBA53で指定される物理記憶位置に格納されているDataD1の参照カウント(Refcount)は「1」であり、…PBA65で指定される物理記憶位置に格納されているDataP1の参照カウント(Refcount)は「0」であることが示されている。
いま、スーパーブロック(SB)100−1がGC対象スーパーブロック(コピー元ブロック)として選択されたならば、コントローラ4は、GC対象スーパーブロック(コピー元ブロック)に対応するSB管理テーブル(ここでは、SB管理テーブル200−1)に基づいて、スーパーブロック(SB)100−1に含まれる、非ゼロの参照カウント(Refcount)に対応するデータのみをコピー先スーパーブロック(ここでは、スーパーブロック(SB)100−2)にコピーする。図16では、DataC1、DataD1、DataE1、DataF1、DataI1、DataL0、DataN1、DataO1がそれぞれ、コピー先スーパーブロック(ここでは、スーパーブロック(SB)100−2)のPBA108〜115で指定される物理記憶位置にコピーされる。
次いで、コントローラ4は、非ゼロの参照カウントそれぞれを、GC対象スーパーブロック(コピー元ブロック)に対応するSB管理テーブル(ここでは、SB管理テーブル200−1)からコピー先スーパーブロック(SB)に対応するSB管理テーブル(ここでは、SB管理テーブル200−2)にコピーする。具体的には、コピー元スーパーブロック(スーパーブロック(SB)100−1)に対応するSB管理テーブル200−1において管理されていたDataC1、DataD1、DataE1、DataF1、DataI1、DataL0、DataN1、DataO1の参照カウント(Refcount)がコピー先スーパーブロック(スーパーブロック(SB)100−2)に対応するSB管理テーブル200−2にコピーされる。参照カウント(Refcount)のコピーの結果、図16では、SB管理テーブル200−2に、PBA108〜115の並びの順に、DataC1、DataD1、DataE1、DataF1、DataI1、DataL0、DataN1、DataO1の各参照カウント(Refcount)が配置されている。
また、iLUT34が更新され、データがコピーされたコピー先スーパーブロック内の物理記憶位置それぞれを示すPBAが、コピーされたデータに対応するiLBAそれぞれに関連付けられる。図16では、DataC1のコピー先スーパーブロックの物理記憶位置を指定するPBA108が、DataC1に対応するiLBA23に、DataD1のコピー先スーパーブロックの物理記憶位置を指定するPBA109が、DataD1に対応するiLBA32に、DataE1のコピー先スーパーブロックの物理記憶位置を指定するPBA110が、DataE1に対応するiLBA25に、DataF1のコピー先スーパーブロックの物理記憶位置を指定するPBA111が、DataF1に対応するiLBA30に、DataI1のコピー先スーパーブロックの物理記憶位置を指定するPBA112が、DataI1に対応するiLBA21に、DataL1のコピー先スーパーブロックの物理記憶位置を指定するPBA113が、DataL1に対応するiLBA35に、DataN1のコピー先スーパーブロックの物理記憶位置を指定するPBA114が、DataN1に対応するiLBA22に、DataO1のコピー先スーパーブロックの物理記憶位置を指定するPBA115が、DataO1に対応するiLBA31にそれぞれ関連付けられている。
以上のように、LUT32において管理されているLBAとiLBAとの関係を変更することなく、コピー元ブロックに対応するSB管理テーブル内の参照カウント情報のみを使用するだけでガベージコレクション動作を実行することができる。
図17のフローチャートは、本実施形態におけるデータ書き込み動作の手順を示す。
図17の左下には、SB管理テーブル200−0、スーパーブロック(SB)100−0、LUT32、ハッシュLUT33、iLUT34のデータ構造が示されている。SB管理テーブル200−0には、スーパーブロック(SB)100−0に格納されたデータそれぞれに対応する参照カウント(Refcount)が配置されている。スーパーブロック(SB)100−0には、DataとともにそのDataに対応するiLBAまたはLBAが格納されている。LUT32は、LBAそれぞれとiLBAそれぞれとの対応関係が格納されている。なお、あるライトデータに一致する重複データがNAND型フラッシュメモリ5内に存在しない場合には、このライトデータのLBAに、iLBAではなく、PBAが直接関連付けてもよい。この場合には、スーパーブロック(SB)100−0には、このライトデータとiLBAとのペアではなく、このライトデータとこのライトデータに対応するLBAとのペアが格納されてもよい。ハッシュLUT33は、ハッシュ値(DataのHash(Data))それぞれとiLBAそれぞれとの対応関係を管理する。iLUT34は、iLBAそれぞれとPBAそれぞれとの対応関係を管理する。
続いて、書き込み動作について説明する。
コントローラ4は、まず、ホスト2から受信したライトコマンドに含まれるLBAに対応するiLBAが、LUT32に存在するか否かを判定する(ステップS101)。LUT32に、ライトコマンドに含まれるLBAに対応するiLBAが存在しないならば(ステップS101のNO)、コントローラ4は、LUT32に、ライトコマンドに含まれるLBAに対応するPBAが存在するか否かを判定する(ステップS102)。LUT32に、ライトコマンドに含まれるLBAに対応するiLBA/PBAが存在しないならば(ステップS102のNO)、ライトコマンドに含まれるライトデータは、NAND型フラッシュメモリ5内に既に書き込まれているデータの更新データではなく、初めて書き込まれるデータであることを意味する(初回LBAの書き込み)。この場合、後述するステップS104に進む。
ライトコマンドに含まれるLBAに対応するiLBAが、LUT32に存在するならば(ステップS101のYES)、コントローラ4は、ライトデータがNAND型フラッシュメモリ5内に既に書き込まれているデータの更新データであると判定する。つまり、このライトデータの書き込みは、初めての書き込みではなく、二回目以降の書き込みであることになる(二回目以降のLBA書き込み)。この場合、SB管理テーブル200−0が更新される(ステップS103)。ここで、コントローラ4は、既に書き込まれているデータに対応する参照カウントを1減らす。なぜなら、このライトデータ(更新データ)は既に書き込まれているデータ(更新前データ)とは異なるので、この更新前データは、このライトデータのLBAから参照されなくなるからである。このとき、コントローラ4は、ライトコマンドに含まれるLBAに対応するiLBAに対応するPBAをiLUT34から取得し、SB管理テーブル200−0において、取得したPBAに対応するデータの参照カウント(Refcount)を「1」だけ減らす。
次に、コントローラ4は、ライトデータのハッシュ値を計算する(ステップS104)。そして、コントローラ4は、計算によって得られたハッシュ値に対応するiLBAが、ハッシュLUT33に存在するか否かを判定する(ステップS105)。得られたハッシュ値に対応するiLBAが、既にハッシュLUT33に存在するならば(ステップS105のYES)、コントローラ4は、iLUT34を参照して、得られたハッシュ値に対応するiLBAに対応するPBAのデータを取得し、その取得したデータと受信されたライトデータ(入力されたデータ)とを比較して、両データが一致するか否かを判定する(ステップS106)。両データが一致するならば(ステップS106のYES)、ライトデータと一致する重複データがNAND型フラッシュメモリ5内に存在することになる。この場合、ライトデータは、書き込み先スーパーブロック(スーパーブロック(SB)100−0)には書き込まれずに、得られたハッシュ値に付与されたiLBAに対応するPBAの参照カウント(Refcount)を管理するSB管理テーブル200−0が更新され、そのPBAに対応する参照カウント(Refcount)が「1」だけ増加される(ステップS114)。また、LUT32が更新され、得られたハッシュ値に対応するiLBAがライトコマンドに含まれたLBAと関連付けられる(ステップS115)。
他方、両データが一致しなければ(ステップS106のNO)、NAND型フラッシュメモリ5内に重複データは存在しないことになる。また、得られたハッシュ値に対応するiLBAが、ハッシュLUT33に存在しない場合も(ステップS105のNO)、重複データは存在しない。
ステップS106のNO、またはステップS105のNOの場合、コントローラ4は、ライトデータが書き込まれる書き込み先スーパーブロック(スーパーブロック(SB)100−0)に対応するSB管理テーブル200−0で管理されている参照カウント(Refcount)の中の最大参照カウント(Refcount)が「1」であるか否かを判定する(ステップS107)。最大参照カウント(Refcount)が「1」であるならば(ステップS107のYES)、iLBAを使わずに、LBAにPBAを直接関連付けるようにしてもよい。もちろん、常にiLBAを使用してもよい。
最大参照カウント(Refcount)が「1」ではないならば(ステップS107のNO)、ハッシュLUT33が更新される(ステップS110)。このとき、ステップS104で得られたハッシュ値に、新たなiLBA(未使用のiLBA)が付与される。そして、得られたハッシュ値と付与されたiLBAとの対応関係がハッシュLUT33に格納される。なお、ステップS105のNOの場合においては、ステップS104で得られたハッシュ値に対応するハッシュLUT33内のエントリには既にiLBAが存在しているので、このエントリに、新たなiLBA(未使用のiLBA)が追加されてもよい。
また、iLUT34が更新され、ライトデータが書き込まれる予定のNAND型フラッシュメモリ5内の物理記憶位置を示すPBAが、付与されたiLBAに関連付けられる(ステップS111)。
さらに、書き込み先スーパーブロック(スーパーブロック(SB)100−0)が更新される(ステップS112)。このとき、ライトデータが書き込み先スーパーブロック(スーパーブロック(SB)100−0)のライトデータが書き込まれる予定のPBA(新しいPBA)に対応する物理記憶位置に、付与されたiLBAとともに書き込まれる。
さらに、書き込み先スーパーブロック(スーパーブロック(SB)100−0)に対応するSB管理テーブル200−0が更新される(ステップS113)。このとき、ライトデータに対応する参照カウント(Refcount)、つまりこのライトデータが書き込まれた物理記憶位置のPBAに対応する参照カウント(Refcount)が「1」に設定される。
また、LUT32が更新され、付与されたiLBAがライトコマンドに含まれたLBAと関連付けられる(ステップS115)。
もし、最大参照カウント(Refcount)が「1」であるならば(ステップS107のYES)、書き込み先スーパーブロック(スーパーブロック(SB)100−0)には、2つ以上のLBAから参照されているデータが存在しないことになる。その場合、書き込み先スーパーブロック(スーパーブロック(SB)100−0)に書き込まれるライトデータは、iLBAを使用せずにPBAで直接管理することができると判断できる。なお、この状況においてもiLBAを使用して管理することにしてもよい。
続いて、書き込み先スーパーブロック(スーパーブロック(SB)100−0)が更新される(ステップS108)。このとき、ライトデータが書き込み先スーパーブロック(スーパーブロック(SB)100−0)のライトデータが書き込まれる予定のPBA(新しいPBA)に対応する物理記憶位置に、ライトコマンドに含まれているLBAとともに書き込まれる。
そして、書き込み先スーパーブロック(スーパーブロック(SB)100−0)に対応するSB管理テーブル200−0が更新される(ステップS109)。このとき、ライトデータに対応する参照カウント(Refcount)、つまりこのライトデータが書き込まれた物理記憶位置のPBAに対応する参照カウント(Refcount)が「1」に設定される。
また、LUT32が更新され、ライトデータが書き込まれた物理記憶位置のPBAがライトコマンドに含まれたLBAと関連付けられる(ステップS116)。
また、ライトコマンドに含まれるLBAに対応するPBAがLUT32に存在する場合(ステップS102のYES)、ライトデータの書き込みは二回目以降であることになる(二回目以降のLBA書き込み)。また、ライトコマンドに含まれるLBAに対応するiLBAが存在しないことから重複データが存在しないため、iLBAを使用しない方法でデータ管理が可能な状況にある。
そして、ライトデータが書き込み先スーパーブロック(スーパーブロック(SB)100−0)に書き込まれ、LUT32が更新され、ライトデータが書き込まれた物理記憶位置を指定する新しいPBAがライトコマンドに含まれたLBAと関連付けられる(ステップS116)。
図18のフローチャートは、ガベージコレクション動作の手順を示す。
コントローラ4は、GCを行うべきスーパーブロックをGC対象スーパーブロック(コピー元ブロック)として選択する(ステップS201)。次に、コントローラ4は、SB管理テーブルを参照し、非ゼロの参照カウント(Refcount)に対応するPBAを特定する(ステップS202)。
続いて、コントローラ4は、特定されたPBAに対応する物理記憶位置に格納されているデータを、即ち、非ゼロの参照カウントに対応するデータをコピー先ブロックにコピーする(ステップS203)。その後、コントローラ4は、iLUT34を更新し、コピーされたデータが格納されているコピー先ブロック内の物理記憶位置を示すPBAを、このコピーされたデータに対応するiLBAに関連付ける(ステップS204)。ステップS204では、コントローラ4は、さらに、コピー先ブロックに対応するSB管理テーブルに、このコピーされたデータに対応する参照カウント(Refcount)をコピーする。
次に、コントローラ4は、GC対象のスーパーブロック(コピー元ブロック)内に非ゼロの参照カウント(Refcount)に対応するデータが存在するか否かを判定する(ステップS205)。
GC対象スーパーブロック(コピー元ブロック)内に非ゼロの参照カウント(Refcount)に対応するデータが存在するならば(ステップS205のNO)、ステップS202の処理に移る。なお、GC対象スーパーブロック(コピー元ブロック)内に非ゼロの参照カウント(Refcount)に対応するデータが存在しなくなるまで、ステップS202〜S204の処理は繰り返される。
GC対象スーパーブロック(コピー元ブロック)内に非ゼロの参照カウント(Refcount)に対応するデータが存在しなくなれば(ステップS205のYES)、ガベージコレクション動作は完了する。
図19のフローチャートは、本実施形態におけるデータリード動作の手順を示す。
ホスト2からリードコマンドを受信すると(ステップS301のYES)、コントローラ4は、LUT32を参照して、リードコマンドに含まれるLBAに対応するiLBAを取得する(ステップS302)。次に、コントローラ4は、iLUT34を参照し、取得したiLBAに対応するPBAを取得する(ステップS303)。そして、コントローラ4は、取得したPBAに対応する物理記憶位置に格納されたデータをリードする(ステップS304)。
図20は、各スーパーブロック管理テーブル内の参照カウント記憶領域部の構成例を示す。
SB管理テーブルは、スーパーブロック(SB)毎に設けられている。SB管理テーブルは、対応するスーパーブロック(SB)に関する様々な管理情報(メタデータ)を保持する。管理情報(メタデータ)の例には、対応するスーパーブロック(SB)のプログラム/イレーズサイクルの数、対応するスーパーブロック(SB)の無効データ量(または有効データ量)が含まれていてもよい。
さらに、SB管理テーブルは、対応するスーパーブロック(SB)に格納可能な全てのデータそれぞれの参照カウントを格納するための参照カウント記憶領域を有している。各SB管理テーブル内の一つの参照カウントポインタは、一定のサイズ分(例えば、1024bit)の一つの参照カウント記憶領域部の位置を指す。各SB管理テーブルは、複数の参照カウントポインタを含む。これにより、各SB管理テーブルには複数の参照カウント記憶領域部が関連付けられる。これら複数の参照カウント記憶領域部が、対応するSB管理テーブル用の参照カウント記憶領域として利用される。
例えば、一つのスーパーブロックのサイズが4GBである場合、1M個の4KBデータが一つのスーパーブロックに格納される。この場合、一つのSB管理テーブルには、1M個の参照カウントを保持可能な参照カウント記憶領域が必要となる。
一つの参照カウントビット長が2ビットであるならば、“00”は、対応するデータがどの論理アドレスからも参照されていないことを表すために使用され、“01”は、対応するデータが一つの論理アドレスから参照されていることを表すために使用され、“10”は、対応するデータが2つの論理アドレスから参照されていることを表すために使用され、“11”は、対応するデータが3つの論理アドレスから参照されていることを表すために使用される。したがって、管理可能な最大参照カウントの値は3となる。
一つの参照カウントビット長が3ビットであるならば、管理可能な最大参照カウントの値は7となる。一つの参照カウントビット長が4ビットであるならば、管理可能な最大参照カウントの値は15となる。一つの参照カウントビット長が8ビットであるならば、管理可能な最大参照カウントの値は255となる。
このように、参照カウントビット長が長いほど、管理可能な最大参照カウントの値は増えるが、参照カウント記憶領域によって消費されるメモリリソースの量も増加される。
通常、参照カウントの値はデータ毎に異なる場合が多い。このため、同じスーパーブロックには、互いに参照カウントが異なるデータが混在される。参照カウントが異なるデータが同じスーパーブロックに混在されるという状況は、参照カウント記憶領域用に確保されたメモリリソースが浪費される要因となる。
本実施形態では、GCによって、大きな参照カウントを有するデータ群と小さな参照カウントを有するデータ群とが互いに分離される。これにより、同じ参照カウント範囲に属するデータ同士を同じスーパーブロックに格納することが可能となる。この結果、大きな参照カウントを有するデータ群が集められたスーパーブロックには、長いビット長を各々が有する多数の参照カウントを格納可能な大サイズの参照カウント記憶領域を含むSB管理テーブルを確保し、小さい参照カウントを有するデータ群が集められたスーパーブロックには、短いビット長を各々が有する多数の参照カウントを格納可能な小サイズの参照カウント記憶領域を含むSB管理テーブルを確保することが可能となる。
このため、各SB管理テーブルは、参照カウント記憶領域のサイズを可変できるように構成されている。各SB管理テーブルは、最大サイズの参照カウント記憶領域を構成するために必要な参照カウント記憶領域部の数と同数の参照カウントポインタをあらかじめ含んでいてもよい。
図20では、異なるサイズの参照カウント記憶領域を含む3種類のSB管理テーブルが例示されている。
SB管理テーブル200−0は、各々が1ビットの複数の参照カウントを格納可能な最小サイズの参照カウント記憶領域を含むSB管理テーブルに設定されている。
SB管理テーブル200−0においては、SB管理テーブル200−0に含まれる全参照カウントポインタのうち、1000個の参照カウントポインタのみが利用されている。一つの参照カウントポインタは、1024ビット長を有する一つの参照カウント記憶領域部の位置を示す。各参照カウントのビット長は1ビットである。このため、参照カウント記憶領域部は、1024個の4KBデータにそれぞれ対応する1024個のビットマップフラグ(BM)を含む。参照カウント(ビットマップフラグ)=“0”は、対応する4KBデータを参照している論理アドレスの数がゼロであることを示す。参照カウント(ビットマップフラグ)=“1”は、対応する4KBデータを参照している論理アドレスの数が1であることを示す。
SB管理テーブル200−1は、各々が2ビットの複数の参照カウントを格納可能な参照カウント記憶領域を含むSB管理テーブルに設定されている。
SB管理テーブル200−1においては、SB管理テーブル200−1に含まれる全参照カウントポインタのうち、2000個の参照カウントポインタが利用されている。一つの参照カウントポインタは、1024ビット長を有する一つの参照カウント記憶領域部の位置を示す。各参照カウントのビット長は2ビットである。一つの参照カウント記憶領域部は、512個の参照カウントを含む。したがって、1024個の4KBデータにそれぞれ対応する1024個の参照カウントの格納のために2つの参照カウント記憶領域部が利用される。
SB管理テーブル200−2は、各々が4ビットの複数の参照カウントを格納可能な参照カウント記憶領域を含むSB管理テーブルに設定されている。
SB管理テーブル200−2においては、SB管理テーブル200−2に含まれる全参照カウントポインタのうち、4000個の参照カウントポインタが利用されている。一つの参照カウントポインタは、1024ビット長を有する一つの参照カウント記憶領域部の位置を示す。各参照カウントのビット長は4ビットである。一つの参照カウント記憶領域部は、256個の参照カウントを含む。したがって、1024個の4KBデータにそれぞれ対応する1024個の参照カウントの格納のために4つの参照カウント記憶領域部が利用される。
SB管理テーブル200−0に関連付けられているスーパーブロック(SB)100−0は、参照カウント(Refcount)=0〜1のデータを格納するためのスーパーブロック(SB)として利用される。 SB管理テーブル200−1に関連付けられているスーパーブロック(SB)100−1は、主として、参照カウント(Refcount)=2〜3のデータを格納するためのスーパーブロック(SB)として利用される。
SB管理テーブル200−2に関連付けられているスーパーブロック(SB)100−2は、主として、参照カウント(Refcount)=4〜15のデータを格納するためのスーパーブロック(SB)として利用される。
図21は、大きい参照カウント(Refcount)に対応するデータと小さい参照カウント(Refcount)に対応するデータとを分離するガベージコレクション動作の概要を示す。
ここでは、コピー先スーパーブロック(SB)221、222が割り当てられている。また、SB管理テーブル221A、222Aは、それぞれ、コピー先スーパーブロック(SB)221、222に関連付けられている。また、SB管理テーブル221Aは、各々が4ビット長の複数の参照カウント(Refcount)を格納可能な参照カウント記憶領域を有し、SB管理テーブル222Aは、各々が2ビット長の複数の参照カウント(Refcount)を格納可能な参照カウント記憶領域を有している。
スーパーブロック(SB)210には、大きな参照カウント(Refcount=4〜15)を有するデータd1、データd2、データd4、データd5と、小さな参照カウント(Refcount=1〜3)を有するデータd6、データd8と、ゼロの参照カウント(Refcount)を有するデータd3、d7、等が格納されている。
スーパーブロック(SB)211には、大きな参照カウント(Refcount=4〜15)を有するデータd17と、小さな参照カウント(Refcount=1〜3)を有するデータd11、データd13、データd14、データd18と、ゼロの参照カウントを有するデータd12、データd15、データd16、等が格納されている。
スーパーブロック(SB)212には、大きな参照カウント(Refcount=4〜15)を有するデータd22、データd23、データd24と、小さな参照カウント(Refcount=1〜3)を有するデータd27、データd28と、ゼロの参照カウントを有するデータd21、データd25、データd26、等が格納されている。
スーパーブロック(SB)210がGC対象スーパーブロック(コピー元ブロック)として選択された場合、コントローラ4は、スーパーブロック(SB)210に対応するSB管理テーブル内に基づいて、スーパーブロック(SB)210に含まれ且つ第1の参照カウント範囲(ここでは、1〜3)に属する参照カウントを有するデータの集合を、コピー先スーパーブロック(SB)222にコピーし、スーパーブロック(SB)210に含まれ且つ第1の参照カウント範囲の上限(ここでは3)よりも大きい下限を有する第2の参照カウント範囲(ここでは、4〜15)に属する参照カウントを有するデータの集合を、コピー先スーパーブロック(SB)221にコピーする。
具体的には、大きな参照カウント(Refcount=4〜15)を有するデータd1、データd2、データd4、データd5は、コピー先スーパーブロック(SB)221にコピーされ、小さな参照カウント(Refcount=1〜3)を有するデータd6、データd8は、コピー先スーパーブロック(SB)222にコピーされる。
次に、スーパーブロック(SB)211がGC対象スーパーブロック(コピー元ブロック)として選択された場合、コントローラ4は、スーパーブロック(SB)211に対応するSB管理テーブル内に基づいて、スーパーブロック(SB)211に含まれ且つ第1の参照カウント範囲(ここでは、1〜3)に属する参照カウントを有するデータの集合を、コピー先スーパーブロック(SB)222にコピーし、スーパーブロック(SB)211に含まれ且つ第1の参照カウント範囲の上限(ここでは3)よりも大きい下限を有する第2の参照カウント範囲(ここでは、4〜15)に属する参照カウントを有するデータの集合を、コピー先スーパーブロック(SB)221にコピーする。
具体的には、大きな参照カウント(Refcount=4〜15)を有するデータd17は、コピー先スーパーブロック(SB)221にコピーされ、小さな参照カウント(Refcount=1〜3)を有するデータd11、データd13、データd14、データd18は、コピー先スーパーブロック(SB)222にコピーされる。
次に、スーパーブロック(SB)212がGC対象スーパーブロック(コピー元ブロック)として選択された場合、コントローラ4は、スーパーブロック(SB)212に対応するSB管理テーブル内に基づいて、スーパーブロック(SB)212に含まれ且つ第1の参照カウント範囲(ここでは、1〜3)に属する参照カウントを有するデータの集合を、コピー先スーパーブロック(SB)222にコピーし、スーパーブロック(SB)212に含まれ且つ第1の参照カウント範囲の上限(ここでは3)よりも大きい下限を有する第2の参照カウント範囲(ここでは、4〜15)に属する参照カウントを有するデータの集合を、コピー先スーパーブロック(SB)221にコピーする。
具体的には、大きな参照カウント(Refcount=4〜15)を有するデータd22、データd23、データd24は、コピー先スーパーブロック(SB)221にコピーされ、小さな参照カウント(Refcount=1〜3)を有するデータd27、データd28は、コピー先スーパーブロック(SB)222にコピーされる。
このように、GC動作においては、データがコピーされるべきコピー先ブロックが、このデータの参照カウント(Refcount)の値に応じて変更される。この結果、同じ参照カウント範囲に属するデータを同じスーパーブロックに集めることが可能となる。よって、大きな参照カウントを有するデータ群のみを、各々が長いビット長を有する複数の参照カウントを格納可能なSB管理テーブルに関連付けられたスーパーブロックに集めることができ、また、小さな参照カウントを有するデータ群のみを、各々が短いビット長を有する複数の参照カウントを格納可能なSB管理テーブルに関連付けられたスーパーブロックに集めることができる。よって、参照カウントが異なるデータが同じスーパーブロックに混在されるという状況に比べ、参照カウント記憶領域用のメモリリソースの消費量を大幅に低減することができる。
また、同じ参照カウント範囲に属するデータ群は、類似するライフタイムを有するデータ群である。したがって、同じスーパーブロックに含まれるデータそれぞれが同時期に無効化される確率を高めることが可能となり、これによってGCの頻度を抑えることを可能となる。このことは、ライトアンプリフィケーションを下げることを可能とし、この結果、SSD3の寿命を最大限まで伸ばすことが可能となる。
図22は、ガベージコレクション動作に含まれるデータコピー動作と参照カウントコピー動作とを示す。
ここでは、スーパーブロック(SB)100−0がGC対象スーパーブロック(GCのコピー元ブロック)として選択されており、スーパーブロック(SB)100−2およびスーパーブロック100−3がコピー先スーパーブロックとして割り当てられている。
また、SB管理テーブル200−0、200−2、200−3は、それぞれ、スーパーブロック(SB)100−0、100−2、100−3に関連付けられている。また、SB管理テーブル200−2は、各々が2ビット長の複数の参照カウント(Refcount)を格納可能な参照カウント記憶領域を有し、SB管理テーブル200−3は、各々が3ビット長の複数の参照カウント(Refcount)を格納可能な参照カウント記憶領域を有する。
GC対象スーパーブロック(GCのコピー元ブロック)であるスーパーブロック(SB)100−0には、非ゼロの参照カウントに対応するDataA0、DataB0、DataG0、DataH0、DataI0、DataK0、DataN0、DataP0と、ゼロの参照カウントに対応するDataC0、DataD0、DataE0、DataF0、DataJ0、DataL0、DataM0、DataO0が格納されている。
また、参照カウント(Refcount)=4〜7に対応するデータであるDataI0、DataK0、DataN0、DataP0は、それぞれスーパーブロック(SB)100−0内のPBA8、PBA10、PBA13、PBA15で指定される物理記憶位置に格納されている。参照カウント(Refcount)=1〜3に対応するデータであるDataA0、DataB0、DataG0、DataH0は、それぞれスーパーブロック(SB)100−0内のPBA0、PBA1、PBA6、PBA7で指定される物理記憶位置に格納されている。参照カウントがゼロであるDataC0、DataD0、DataE0、DataF0、DataJ0、DataL0、DataM0、DataO0は、それぞれスーパーブロック(SB)100−0内のPBA2、PBA3、PBA4、PBA5、PBA9、PBA11、PBA12、PBA14に対応する物理記憶位置に格納されている。
スーパーブロック(SB)100−0に対応するSB管理テーブル200−0には、スーパーブロック(SB)100−0内に格納されているデータそれぞれの参照カウント(Refcount)が格納されている。
スーパーブロック(SB)100−0に対するGC動作が開始されると、スーパーブロック(SB)100−0内のDataA0、DataB0、DataG0、DataH0は、コピー先スーパーブロックであるスーパーブロック(SB)100−2内のPBA100、PBA101、PBA102、PBA103で指定される物理記憶位置にそれぞれコピーされる。これに伴い、SB管理テーブル200−0で管理されているDataA0、DataB0、DataG0、DataH0それぞれに対応する参照カウント(“1”、“2”、“2”、“3”)が、コピー先スーパーブロックであるスーパーブロック(SB)100−2に対応するSB管理テーブル200−2にコピーされる。このとき、SB管理テーブル200−2においては、DataA0、DataB0、DataG0、DataH0それぞれに対応する参照カウント(“1”、“2”、“2”、“3”)が、この順で連続して配置される。
また、スーパーブロック(SB)100−0内のDataI0、DataK0、DataN0、DataP0はそれぞれ、コピー先スーパーブロックであるスーパーブロック(SB)100−3内のPBA150、PBA151、PBA152、PBA153で指定されるそれぞれの物理記憶位置にコピーされる。これに伴い、SB管理テーブル200−0で管理されているDataI0、DataK0、DataN0、DataP0それぞれに対応する参照カウント(“4”、“5”、“4”、“6”)が、コピー先スーパーブロックであるスーパーブロック(SB)100−3に対応するSB管理テーブル200−3にコピーされる。このとき、SB管理テーブル200−2においては、DataI0、DataK0、DataN0、DataP0それぞれに対応する参照カウント(“4”、“5”、“4”、“6”)が、この順で連続して配置される。
図23および図24を用いて、あるデータに対応する参照カウント(Refcount)がオーバーフローした場合に実行されるデータコピー動作を説明する。ここで、スーパーブロック(SB)100−0に関連付けられたSB管理テーブル200−0は、各々が2ビット長の複数の参照カウント(Refcount)を格納可能な参照カウント記憶領域を有し、スーパーブロック(SB)100−1に関連付けられたSB管理テーブル200−1は、各々が3ビット長の複数の参照カウント(Refcount)を格納可能な参照カウント記憶領域を有するとする。
スーパーブロック(SB)100−0には、参照カウント(Refcount)=1〜3に対応するデータであるDataA0、DataC0、DataD0、DataE0、DataF0、DataG0、DataH0、DataI0、DataJ0、DataK0、DataL0、DataM0、DataN0、DataO0、DataP0がそれぞれ、PBA0、PBA2、PBA3、PBA4、PBA5、PBA6、PBA7、PBA8、PBA9、PBA10、PBA11、PBA12、PBA13、PBA14、PBA15で指定される物理記憶位置に格納されており、参照カウント(Refcount)=0に対応するデータであるDataB0がPBA1で指定される物理記憶位置に格納されている。
スーパーブロック(SB)100−1には、参照カウント=4〜7に対応するデータであるDataA1、DataB1、DataC1、DataD1、DataE1、DataF1、DataG1、DataH1、DataI1、DataJ1、DataK1がそれぞれ、PBA50、PBA51、PBA52、PBA53、PBA54、PBA55、PBA56、PBA57、PBA58、PBA59、PBA60で指定される物理記憶位置に格納されている。PBA61〜PBA65で指定される物理記憶位置にはデータが格納されておらず、消去状態の物理記憶位置(利用可能な物理記憶位置)に対応する。
スーパーブロック(SB)100−0に格納されているDataH0に対応する参照カウントの値は“3”である。このため、DataH0に対応する参照カウントの値は、ホスト2からのDataH0に一致するライトデータの受信によって、SB管理テーブル200−0の参照カウント記憶領域に格納可能な各参照カウントのビット長(ここでは2ビット)によって表現可能な最大値(ここでは3)を超える(オーバーフロー)。
この場合、コントローラ4は、図24に示すように、DataH0を、SB管理テーブル200−0のよりも長いビット長を各々が有する複数の参照カウントを格納可能な参照カウント記憶領域を含むSB管理テーブル200−1に関連付けられたスーパーブロック(SB)100−1にコピーする。DataH0は、スーパーブロック(SB)100−1内の次の利用可能物理記憶位置(ここでは、PBA61によって指定される物理記憶位置)にコピーされる。これに伴い、コピー元スーパーブロック(スーパーブロック(SB)100−0)内のDataH0が格納されていた物理記憶位置を示すPBA7の参照カウント(Refcount)が3→0に更新される。これは、PBA7で指定される物理記憶位置に格納されているデータを無効化するためである。また、DataH0の参照カウント(ここでは、“4”)が、PBA61に対応するSB管理テーブル200−1内の位置にコピーされる。
図25を用いて、あるデータに対応する参照カウント(Refcount)がオーバーフローした場合に実行される参照カウント記憶領域拡張動作を説明する。ここで、スーパーブロック(SB)100−0に関連付けられたSB管理テーブル200−0は、各々が2ビット長の複数の参照カウントを格納可能な参照カウント記憶領域を有する。
いま、スーパーブロック(SB)100−0には、参照カウント(Refcount)=1〜3に対応するデータであるDataA0、DataC0、DataD0、DataE0、DataF0、DataG0、DataH0、DataI0、DataJ0、DataK0、DataL0、DataM0、DataN0、DataO0、DataP0がそれぞれ、PBA0、PBA2、PBA3、PBA4、PBA5、PBA6、PBA7、PBA8、PBA9、PBA10、PBA11、PBA12、PBA13、PBA14、PBA15で指定される物理記憶位置に格納されており、参照カウント(Refcount)=0に対応するデータであるDataB0がPBA1で指定される物理記憶位置に格納されている。
コントローラ4は、スーパーブロック(SB)100−0内のDataH0に対応する参照カウントの値が、ホスト2からの、DataH0に一致するライトデータを含むライトコマンドの受信によって、SB管理テーブル200−0の参照カウント記憶領域に格納可能な各参照カウントのビット長によって表現可能な最大値を超える場合、SB管理テーブル200−0の参照カウント記憶領域のサイズを拡張することによってSB管理テーブル200−0の参照カウント記憶領域に格納可能な各参照カウントのビット長を長くする。
具体的には、ホスト2からDataH0に一致するライトデータを含むライトコマンドが受信されると、DataH0の参照カウント(Refcount)が3→4に増加する。この場合、DataH0の参照カウント(Refcount)は、スーパーブロック(SB)100−0に対応するSB管理テーブル200−0の参照カウント記憶領域に格納可能な参照カウントの最大値を超える(オーバーフロー)。このとき、図25右側に示すように、例えば各参照カウントのビット長が2ビットから4ビットに変更されるように、SB管理テーブル200−0の参照カウント記憶領域のサイズが拡張される。この場合、コントローラ4は、以前の参照カウント記憶領域を開放してもよく、そして、代わりに、大きなサイズの参照カウント記憶領域を確保し直してもよい。
そして、コントローラ4は、DataH0に対応する参照カウントを1増やし、これによってDataH0に対応する参照カウントを“3”から“4”に変更する。
次に、図26を用いて、ガレージコレクション対象ブロック(コピー元ブロック)候補の選択条件を説明する。
コントローラ4は、スーパーブロック(SB)それぞれの無効データ量(または有効データ量)に基づいて、これらスーパーブロック(SB)からGC対象ブロック(コピー元ブロック)の候補を選択する。この場合、コントローラ4は、大きな参照カウントを有するデータが集められているスーパーブロック(SB)を、小さな参照カウントを有するデータが集められているスーパーブロック(SB)よりも優先的にGCのコピー元ブロックの候補として選択する。つまり、参照カウントが大きいデータほど、そのデータが書き換えられる確率は低いので、コントローラ4は、大きな参照カウントを有するデータが集められているスーパーブロック(SB)に関しては、たとえ小さな参照カウントを有するデータが集められているスーパーブロック(SB)よりも有効データ量が多くても、GCのコピー元ブロックの候補として選択する。
複数のスーパーブロック(SB)は、第1の参照カウント範囲に属するデータの集合が集められているスーパーブロック(SB)群と、第2の参照カウント範囲に属するデータの集合が集められているスーパーブロック(SB)群とに分類されている。
図26において、スーパーブロック(SB)100−0は、ある参照カウント範囲(第1の参照カウント範囲)に属するデータが集められているスーパーブロック(SB)群、つまり小さな参照カウントを有するデータが集められているスーパーブロック(SB)群に分類され、スーパーブロック(SB)100−1は、第1の参照カウント範囲の上限よりも大きい下限を有する参照カウント範囲(第2の参照カウント範囲)に属するデータが集められているスーパーブロック(SB)群、つまり大きな参照カウントを有するデータが集められているスーパーブロック(SB)群に分類されている。
このとき、コントローラ4は、スーパーブロック(SB)100−0については、無効データ量がある閾値Xaよりも大きいという条件を満たす場合に、GCのためのコピー元ブロックの候補として選択する。他方、スーパーブロック(SB)100−1については、コントローラ4は、無効データ量が、閾値Xaよりも小さい値である閾値Xbよりも大きいという条件を満たす場合に、GCのためのコピー元ブロックの候補として選択する。
上述したように、参照カウントが大きいデータほど、そのデータが書き換えられる確率は低い。したがって、通常、大きな参照カウントを有するデータが集められているスーパーブロック(SB)内の各データは長い期間利用され続け、このスーパーブロック(SB)が他のデータの格納のために再利用される確率は低くなる。このため、大きな参照カウントを有するデータが集められているスーパーブロック(SB)内に存在する無効データ(ゼロの参照カウントを有するデータ)の量だけ、SSD3のオーバープロビジョニングは減少されることとなる。本実施形態では、上述したように、大きな参照カウントを有するデータが集められているスーパーブロック(SB)に関しては、たとえ小さな参照カウントを有するデータが集められているスーパーブロック(SB)よりも有効データ量が多くても、GCのコピー元ブロックの候補として選択される。したがって、SSD3のオーバープロビジョニングの減少を低減でき、ライトアンプリフィケーションを下げることが可能となる。
図27は、GCのためのコピー元ブロックの候補を選択する動作を示す。
スーパーブロック(SB)100−0は、参照カウント=1〜3に対応するデータが集められている。スーパーブロック(SB)100−0には、DataA0〜DataP0が、それぞれPBA0〜15で指定される物理記憶位置に格納されている。スーパーブロック(SB)100−0に格納されているデータの中で参照カウントがゼロのデータは、SB管理テーブル200−0から、PBA1で指定されるDataB0、PBA4で指定されるDataE0、PBA11で指定されるDataL0、PBA12で指定されるDataM0であることが分かる。コントローラ4は、スーパーブロック(SB)100−0の無効データ量が閾値X1よりも大きいことを条件に、スーパーブロック(SB)100−0をGC対象ブロックの候補、つまりGCのためのコピー元ブロックの候補として選択する。無効データ量は、ゼロの参照カウントを有しているデータの数によって表されてもよい。この場合、スーパーブロック(SB)100−0の現在の無効データ量は4である。閾値X1が4に設定されているならば、スーパーブロック(SB)100−0は、上述の条件を満たさないので、GCのためのコピー元ブロックの候補として選択されない。
スーパーブロック(SB)100−1には、参照カウント=4〜7に対応するデータが集められている。スーパーブロック(SB)100−1には、DataA1〜DataP1が、それぞれPBA50〜65で指定される物理記憶位置に格納されている。スーパーブロック(SB)100−1に格納されているデータの中で参照カウントがゼロのデータは、SB管理テーブル200−1から、PBA53で指定されるDataD1、PBA55で指定されるDataF1、PBA60で指定されるDataK1、PBA62で指定されるDataM1であることが分かる。コントローラ4は、スーパーブロック(SB)100−1の無効データ量が閾値X2よりも大きいことを条件に、スーパーブロック(SB)100−1をGC対象ブロックの候補、つまりGCのためのコピー元ブロックの候補として選択する。スーパーブロック(SB)100−1の現在の無効データ量は、スーパーブロック(SB)100−0の無効データ量と同じ4である。閾値X2は閾値X1よりも小さい。閾値X1が4に設定されているならば、閾値X2は3以下の値に設定される。したがって、スーパーブロック(SB)100−1は、上述の条件を満たすので、GCのためのコピー元ブロックの候補として選択される。
図28のフローチャートは、コピー元ブロックの候補を選択する動作の手順を示す。ここでは、説明を簡単にするために、NAND型フラッシュメモリ5の全てのスーパーブロック(SB)を、参照カウントが1〜3の範囲に属するデータが集められたスーパーブロック(SB)群と、参照カウントが4〜7の範囲に属するデータが集められたスーパーブロック(SB)群と、参照カウントが8〜15の範囲に属するデータが集められたスーパーブロック(SB)群とに分類する場合を想定する。
まず、コントローラ4は、ある一つのスーパーブロック(SB)を選択する(ステップS401)。そして、コントローラ4は、選択されたスーパーブロック(SB)に関連付けられたSB管理テーブルを参照し(ステップS402)、選択されたスーパーブロック(SB)に格納されているすべてのデータの参照カウント(Refcount)に基づいて、それらの中から最大の参照カウント(Refcount)を特定する(ステップS403)。
特定された最大の参照カウント(Refcount)が4未満であるならば(ステップS404のYES)、コントローラ4は、選択されたスーパーブロック(SB)が、参照カウントが1〜3の範囲に属するデータが集められたスーパーブロック(SB)群に属すると判定する。そして、コントローラ4は、選択されたスーパーブロック(SB)の無効データ量が閾値X1よりも多いか否かを判定する(ステップS405)。
無効データ量が閾値X1よりも多いならば(ステップS405のYES)、コントローラ4は、選択されたスーパーブロック(SB)をGC対象スーパーブロック(コピー元ブロック)の候補として選択する(ステップS406)。無効データ量が閾値X1以下であるならば(ステップS405のNO)、コントローラ4は、選択されたスーパーブロック(SB)をGC対象スーパーブロック(コピー元ブロック)の候補として選択しない(ステップS407)。
特定された最大の参照カウント(Refcount)が4以上且つ8未満であるならば(ステップS404のNO、ステップS408のYES)、コントローラ4は、選択されたスーパーブロック(SB)が、参照カウントが4〜7の範囲に属するデータが集められたスーパーブロック(SB)群に属すると判定する。そして、コントローラ4は、選択されたスーパーブロック(SB)の無効データ量が閾値X2(<X1)よりも多いか否かを判定する(ステップS409)。
無効データ量が閾値X2よりも多いならば(ステップS409のYES)、コントローラ4は、選択されたスーパーブロック(SB)をGC対象スーパーブロック(コピー元ブロック)の候補として選択する(ステップS410)。無効データ量が閾値X2以下であるならば(ステップS409のNO)、コントローラ4は、選択されたスーパーブロック(SB)をGC対象スーパーブロック(コピー元ブロック)の候補として選択しない(ステップS411)。
特定された最大の参照カウント(Refcount)が8以上であるならば(ステップS408のNO)、コントローラ4は、選択されたスーパーブロック(SB)が、参照カウントが8〜15の範囲に属するデータが集められたスーパーブロック(SB)群に属すると判定する。そして、コントローラ4は、選択されたスーパーブロック(SB)の無効データ量が閾値X3(<X2)よりも多いか否かを判定する(ステップS412)。
無効データ量が閾値X3よりも多いならば(ステップS412のYES)、コントローラ4は、選択されたスーパーブロック(SB)をGC対象スーパーブロック(コピー元ブロック)の候補として選択する(ステップS413)。無効データ量が閾値X3以下であるならば(ステップS412のNO)、コントローラ4は、選択されたスーパーブロック(SB)をGC対象スーパーブロック(コピー元ブロック)の候補として選択しない(ステップS414)。
図29は、スーパーブロック(SB)内の各ページに書き込まれるユーザデータと中間アドレス(iLBA)との関係を示す。
コントローラ4は、ユーザデータとiLBAとのペアをスーパーブロック(SB)内のページに書き込む。この場合、コントローラ4は、まず、iLBAとユーザデータとの組み合わせに基づいてエラー検出符号(EDC)を生成してもよい。そして、コントローラ4は、iLBAとユーザデータとEDCのセットを、スーパーブロック(SB)内のページに書き込む。コントローラ4は、ユーザデータをスーパーブロック(SB)からリードする際、リードされたiLBAとリードされたユーザデータに基づいて計算された値と、リードされたEDCとが一致するか否かを検査することで、ユーザデータが正しくリードされたか否かを判定する。 次に、図30〜34を用いて、ガベージコレクション(GC)動作中に実行される重複排除動作について説明する。
図30は、あるデータに対応する参照カウント(Refcount)がオーバーフローする場合に実行されるデータ書き込み動作を示す。
ここで、スーパーブロック(SB)100−0は、参照カウント(Refcount)=0〜3に対応するデータを格納するためのスーパーブロックであるとする。即ち、スーパーブロック(SB)100−0に関連付けられたSB管理テーブル200−0は、各々が2ビット長の複数の参照カウント(Refcount)を格納可能な参照カウント記憶領域を有する。
ホスト2から受信されるライトデータ(DataX)が、スーパーブロック(SB)100−0に既に格納されているDataA0と一致するとする。もしこのDataA0の現在の参照カウントが3である場合には、DataA0に対応する参照カウントの値を3から4に変更することが必要となる。しかし、DataA0の参照カウント(Refcount)を管理するSB管理テーブル200−0は、3よりも大きい参照カウント(Refcount)を格納することはできないため、DataA0の参照カウント(Refcount)を3から4に変更することはできない(オーバーフロー)。
そこで、コントローラ4は、DataXを書き込み先スーパーブロック(ここでは、スーパーブロック(SB)100−1)に書き込む。このとき、LUT32が更新され、未使用のiLBA(ここでは、iLBAx)が、DataXに対応するLBAjに関連付けられる。また、iLUT34が更新され、DataXが書き込まれたNAND型フラッシュメモリ5内の物理記憶位置を示すPBA61が、iLBAxに関連付けられる。さらに、書き込み先スーパーブロック(スーパーブロック(SB)100−1)の参照カウント(Refcount)を管理するSB管理テーブル200−1において、DataXに対応する参照カウント(Refcount)が1に設定される。
次に、GC時に実行される重複排除動作について説明する。
図31では、DataXが書き込まれた書き込み先スーパーブロック(スーパーブロック(SB)100−1)全体がホスト2からのライトデータで満たされた後にGC対象スーパーブロック(GCのためのコピー元ブロック)として選択され、且つDataXと一致するDataA0の参照カウント(Refcount)が3→2に減少している場合が例示されている。この場合、コントローラ4は、図32に示すように、DataX以外の非ゼロの参照カウントに対応するデータ(DataA1、DataD1、DataF1、DataG1、DataI1、DataM1、DataO1)のみをコピー元ブロック(スーパーブロック(SB)100−1)からコピー先ブロック(スーパーブロック(SB)100−2)にコピーする。
そして、コントローラ4は、図33に示すように、非ゼロの参照カウント(Refcount)の中で、DataX(PBA61に対応)以外の参照カウント(Refcount)を、SB管理テーブル200−1からSB管理テーブル200−2にコピーする。即ち、DataA1(PBA50に対応)、DataD1(PBA53に対応)、DataF1(PBA55に対応)、DataG1(PBA56に対応)、DataI1(PBA58に対応)、DataM1(PBA62に対応)、DataO1(PBA64に対応)の各参照カウント(Refcount)が、コピー元ブロック(スーパーブロック(SB)100−1)に対応するSB管理テーブル200−1から、コピー先スーパーブロック(スーパーブロック(SB)100−2)に対応するSB管理テーブル200−2にコピーされる。
また、コントローラ4は、DataA0(PBA0に対応)の参照カウント(Refcount)を1増やす。これにより、DataXと一致するDataA0が格納されているスーパーブロック(SB)100−0に対応するSB管理テーブル200−0においては、DataA0(PBA0に対応)の参照カウント(Refcount)は、例えばへ、2から3に変更される
さらに、コントローラ4は、図34に示すように、LUT32を更新して、DataA0に対応するPBA0を保持しているiLUT34内のエントリを指すiLBA(ここでは、iLBA0)を、DataXのLBA(ここでは、LBAj)に関連付ける。これにより、LBAjを含むリードコマンドを受信したときに、LBAjに対応するiLBA0に基づいて、iLBA0と関連付いられているPBA0を参照できる。ゆえに、DataXと一致するDataA0をリードすることができる。
さらに、コントローラ4は、図34に示すように、LUT32を更新して、DataA0に対応するPBA0を保持しているiLUT34内のエントリを指すiLBA(ここでは、iLBA0)を、DataXのLBA(ここでは、LBAj)に関連付ける。これにより、LBAjを含むリードコマンドを受信したときに、LBAjに対応するiLBA0に基づいて、iLBA0と関連付いられているPBA0を参照できる。ゆえに、DataXと一致するDataA0をリードすることができる。
図35のフローチャートは、大きな参照カウントを有するデータと小さな参照カウントを有するデータを分離するためのGC動作の手順を示す。
コントローラ4は、非ゼロの参照カウントを有するデータとゼロの参照カウントを有するデータとが混在するスーパーブロック群からGC対象スーパーブロック(コピー元ブロック)を選択する(ステップS501)。
コントローラ4は、コピー元ブロックに対応するSB管理テーブルに基づいて、コピー元ブロック内に含まれ且つ第1の参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を、第1のコピー先ブロックにコピーする(ステップS502)。第1のコピー先ブロックは、第1のビット長を各々が有する複数の参照カウントを格納可能な参照カウント記憶領域を含むSB管理テーブルに関連付けられているスーパーブロックである。
次いで、コントローラ4は、コピー元ブロックに対応するSB管理テーブルに基づいて、コピー元ブロック内に含まれ且つ第1の参照カウント範囲の上限よりも大きい下限を有する第2の参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を、第2のコピー先ブロックにコピーする(ステップS503)。第2のコピー先ブロックは、第1のビット長よりも長い第2のビット長を各々が有する複数の参照カウントを格納可能な参照カウント記憶領域を含むSB管理テーブルに関連付けられているスーパーブロックである。
以上の処理により、第1の参照カウント範囲に属する参照カウントを有するデータと第2の参照カウント範囲に属する参照カウントを有するデータとが互いに異なるスーパーブロックに移動されるので、同じ参照カウント範囲に属するデータ群を同じスーパーブロックに集めることができる。したがって、各SB管理テーブルの参照カウント記憶領域の利用効率を高めることが可能となり、この結果、参照カウントそれぞれの管理に必要とされるメモリリソースの量を削減することができる。
図36のフローチャートは、あるデータに対応する参照カウントがオーバーフローする時に実行される重複データコピー処理の手順を示す。
コントローラ4は、既に格納されているあるデータ(第1のデータ)の参照カウントがホスト2からの新たなライトデータの受信によってオーバーフローしたか否かを判定する(ステップS601)。ステップS601では、コントローラ4は、第1のデータに対応する参照カウントの値が、ホスト2からの第1のデータに一致するライトデータの受信によって、第1のデータが格納されている第1のスーパーブロックに対応するSB管理テーブルの参照カウント記憶領域に格納可能な各参照カウントのビット長によって表現可能な最大値を超えるか否かを判定する。
第1のデータに対応する参照カウントの値が、第1のスーパーブロックに対応するSB管理テーブルの参照カウント記憶領域に格納可能な各参照カウントのビット長によって表現可能な最大値を超えるならば(ステップS601のYES)、コントローラ4は、第1のデータを、第1のデータが格納されている第1のスーパーブロックに対応するSB管理テーブル内の各参照カウントよりも長いビット長を各々が有する複数の参照カウントを格納可能な参照カウント記憶領域を含む管理テーブルに関連付けられた別のスーパーブロックにコピーする(ステップS602)。また、ステップS602では、コントローラ4は、図24で説明したように、第1のデータがコピーされたスーパーブロックに対応するSB管理テーブルを更新し、第1のデータに対応する参照カウントを1増やす。さらに、コントローラ4は、iLUT34を更新して、第1のデータがコピーされた物理記憶位置を示すPBAを、第1のデータに対応するiLBAに関連付ける。
図37のフローチャートは、あるデータに対応する参照カウントがオーバーフローする時に実行される参照カウント記憶領域拡張処理の手順を示す。
コントローラ4は、既に格納されているあるデータ(第1のデータ)の参照カウントがホスト2からの新たなライトデータの受信によってオーバーフローしたか否かを判定する(ステップS701)。ステップS701では、コントローラ4は、第1のデータに対応する参照カウントの値が、ホスト2からの第1のデータに一致するライトデータの受信によって、第1のデータが格納されている第1のスーパーブロックに対応するSB管理テーブルの参照カウント記憶領域に格納可能な各参照カウントのビット長によって表現可能な最大値を超えるか否かを判定する。
第1のデータに対応する参照カウントの値が、第1のスーパーブロックに対応するSB管理テーブルの参照カウント記憶領域に格納可能な各参照カウントのビット長によって表現可能な最大値を超えるならば(ステップS701のYES)、コントローラ4は、第1のスーパーブロックに対応するSB管理テーブルの参照カウント記憶領域のサイズを拡張することによって第1のスーパーブロックに対応するSB管理テーブルの参照カウント記憶領域に格納可能な各参照カウントのビット長を長くする(ステップS702)。ステップS702では、図20で説明したように、コントローラ4は、以前の参照カウント記憶領域を開放してもよく、そして、大きなサイズの参照カウント記憶領域を確保し直してもよい。
図38のフローチャートは、あるデータに対応する参照カウントがオーバーフローする時に実行されるデータ書き込み処理の手順を示す。
コントローラ4は、既に格納されているあるデータ(第1のデータ)の参照カウントがホスト2からの新たなライトデータの受信によってオーバーフローしたか否かを判定する(ステップS801)。ステップS801では、コントローラ4は、第1のデータに対応する参照カウントの値が、ホスト2からの第1のデータに一致するライトデータの受信によって、第1のデータが格納されている第1のスーパーブロックに対応するSB管理テーブルの参照カウント記憶領域に格納可能な各参照カウントのビット長によって表現可能な最大値を超えるか否かを判定する。
第1のデータに対応する参照カウントの値が、第1のスーパーブロックに対応するSB管理テーブルの参照カウント記憶領域に格納可能な各参照カウントのビット長によって表現可能な最大値を超えるならば(ステップS801のYES)、コントローラ4は、第1のデータに既に付与されているiLBAをライトデータのLBAに関連付ける代わりに、以下の処理を実行する。
コントローラ4は、LUT32を更新して、未使用のiLBA(例えばiLBAx)をライトデータのLBAに関連付ける(ステップS802)。次いで、コントローラ4は、ライトデータを、あるスーパーブロック(例えば、現在の書き込み先スーパーブロック)に書き込む(ステップS803)。コントローラ4は、iLUT34を更新して、ライトデータが書き込まれたNAND型フラッシュメモリ5内の位置(物理記憶位置)を示すPBAを、ライトデータのLBAに関連付けられている上述のiLBA(iLBAx)に関連付ける(ステップS804)。そして、コントローラ4は、ライトデータが書き込まれたスーパーブロックに対応するSB管理テーブルを更新して、ライトデータに対応する参照カウントを1に設定する(ステップS805)。
この結果、ライトデータに一致している既存のデータ(第1のデータ)の現在の参照カウントの値が、利用可能な参照カウントの最大ビット長によって表現可能な最大値に達している場合であっても、このライトデータをNAND型フラッシュメモリ5に書き込むことができる。
図39は、LBAからPBAを直接参照するアドレス参照経路と、iLBAを介してLBAからPBAを参照するアドレス参照経路とが混在するアドレス参照構造を示す。
図39においては、LBA32は、ある一つのLBAに、iLBAまたはPBAのいずれ一方を関連付けられるように構成されている。
あるLBAにiLBAが関連付けられている場合には、このLBAからPBAを直接参照するのではなく、iLBAを介してこのLBAからPBAが参照される。この場合、上述したように、LBA32とiLUT34を含む2つのアドレス変換テーブルを利用したアドレス変換が実行される。
一方、あるLBAにPBAが関連付けられている場合には、通常のSSDと同様に、LBAからPBAを直接参照することができ、これによって、例えばデータリード動作の性能を改善することができる。
本実施形態では、ホスト2から受信されるライトデータに一致するデータ(重複データ)がNAND型フラッシュメモリ5に存在していない場合においては、以下のいずれかが実行される。
(1)コントローラ4は、ハッシュLUT33を更新して、ライトデータのハッシュ値に対して未使用のiLBAを付与し、そしてLUT32を更新して、ライトデータのLBAに対してこのiLBAを関連付ける。
(2)コントローラ4は、LUT32を更新して、ライトデータのLBAに対してPBAを直接関連付ける。
(1)コントローラ4は、ハッシュLUT33を更新して、ライトデータのハッシュ値に対して未使用のiLBAを付与し、そしてLUT32を更新して、ライトデータのLBAに対してこのiLBAを関連付ける。
(2)コントローラ4は、LUT32を更新して、ライトデータのLBAに対してPBAを直接関連付ける。
(2)のケースにおいては、このライトデータは、独占タイプのスーパーブロックに書き込まれてもよい。図39において、スーパーブロック(SB)100−100、100−101、100−102…は、独占タイプのスーパーブロック(SB)を示している。独占タイプのスーパーブロック(SB)とは、単独のLBAのみから参照されるデータを格納するためのスーパーブロック(SB)を意味する。独占タイプのスーパーブロック(SB)は、各々が1ビット長の複数の参照カウント(Refcount)を格納可能な参照カウント記憶領域を含むSB管理テーブルに関連付けられている。1ビット長の参照カウント=0は、対応するデータがどのLBAからも参照されていないこと、つまり対応するデータが無効データであることを示す。1ビット長の参照カウント=1は、対応するデータが一つのLBAのみから参照されていること、つまり対応するデータが有効データであることを示す。ライトデータが独占タイプのスーパーブロックに書き込まれるケースにおいては、書き込み先のスーパーブロックが独占タイプのスーパーブロックであることがLUT32を通知され、これによって、ライトデータのLBAに対してPBAが関連付けられてもよい。
(1)のケースにおいては、このライトデータは、共有タイプのスーパーブロックに書き込まれてもよい。図39において、スーパーブロック(SB)100−0、100−1、100−2、…、100−50、100−51、100−52、…は、共有タイプのスーパーブロック(SB)を示している。共有タイプのスーパーブロック(SB)とは、複数のLBAから参照される可能性があるデータを格納するためのスーパーブロック(SB)を意味する。共有タイプのスーパーブロック(SB)は、各々が2ビット以上の複数の参照カウント(Refcount)を格納可能な参照カウント記憶領域を含むSB管理テーブルに関連付けられている。図39においては、スーパーブロック(SB)100−50、100−51、100−52、…の各々に関連付けられたSB管理テーブルは、各々が2ビット長(または8ビット長)の複数の参照カウントを格納可能な参照カウント記憶領域を有しており、スーパーブロック(SB)100−0、100−1、100−2、…の各々に関連付けられたSB管理テーブルは、各々が4ビット長(または16ビット長)の複数の参照カウントを格納可能な参照カウント記憶領域を有している場合が例示されている。ライトデータが共有タイプのスーパーブロックに書き込まれるケースにおいては、書き込み先のスーパーブロックが共有タイプのスーパーブロックであることがLUT32を通知され、これによって、ライトデータのLBAに対してiLBAが関連付けられてもよい。
共有タイプのスーパーブロック(SB)の各々においては、格納されているあるデータに対応する参照カウントのオーバーフローが生じた時に、対応するSB管理テーブルの参照カウント記憶領域のサイズが拡張されてもよい。例えば、スーパーブロック(SB)100−50に格納されているあるデータに対応する参照カウントが3から4に変更されることが必要な時(あるいは255から256に変更されることが必要な時)、スーパーブロック(SB)100−50に対応するSB管理テーブルの参照カウント記憶領域のサイズが拡張されることによってこのSB管理テーブルの各参照カウントのビット長が2ビットから4ビットに(または8ビットから16ビットに)変更されてもよい。
ホスト2から受信されるライトデータに一致するデータ(重複データ)がNAND型フラッシュメモリ5に存在していない場合、コントローラ4は、iLBA/PBAのどちらをこのライトデータのLBAに関連付けてもよい。この場合、ホスト2から受信されるヒント情報に基づいて、コントローラ4は、iLBA/PBAのどちらをこのライトデータのLBAに関連付けるかを決定してもよい。例えば、他のLBAから参照される可能性があるLBA群を示すヒント情報がSSD3に通知されたケースにおいては、コントローラ4は、ライトデータに一致するデータ(重複データ)がNAND型フラッシュメモリ5に存在しておらず、且つこのライトデータのLBAが、このヒント情報によって通知されるLBA群に属していない場合に、PBAをこのライトデータのLBAに関連付け、このライトデータを、独占タイプのスーパーブロックに書き込んでもよい。
図40は、すべてのデータに関してiLBAを介してLBAからPBAを参照するアドレス参照構造を示す。
ホスト2から受信されるライトデータに一致するデータ(重複データ)がNAND型フラッシュメモリ5に存在していない場合、コントローラ4は、ライトデータのハッシュ値に対して未使用のiLBAを付与し、ライトデータのLBAに対してこのiLBAを関連付ける。そして、コントローラ4は、このライトデータを、独占タイプのスーパーブロックに書き込む。
ある独占タイプのスーパーブロック(SB)においては、格納されているあるデータに対応する参照カウントのオーバーフローが生じた時に、対応するSB管理テーブルの参照カウント記憶領域のサイズが拡張されてもよい。
例えば、スーパーブロック(SB)100−10に格納されているあるデータに対応する参照カウントが1から2に変更されることが必要な時、スーパーブロック(SB)100−100に対応するSB管理テーブルの参照カウント記憶領域のサイズが拡張されることによってこのSB管理テーブルの各参照カウントのビット長が1ビットから2ビットに(または1ビットから8ビットに)変更されてもよい。
また、共有タイプのスーパーブロック(SB)においても、格納されているあるデータに対応する参照カウントのオーバーフローが生じた時に、対応するSB管理テーブルの参照カウント記憶領域のサイズが拡張されてもよい。
例えば、スーパーブロック(SB)100−50に格納されているあるデータに対応する参照カウントが3から4に変更されることが必要な時(あるいは255から256に変更されることが必要な時)、スーパーブロック(SB)100−50に対応するSB管理テーブルの参照カウント記憶領域のサイズが拡張されることによってこのSB管理テーブルの各参照カウントのビット長が2ビットから4ビットに(または8ビットから16ビットに)変更されてもよい。
なお、ホスト2から受信されるライトデータに一致するデータ(重複データ)がNAND型フラッシュメモリ5に存在していない場合、コントローラ4は、ホスト2から受信されるヒント情報に基づいて、このライトデータが書き込まれるべきスーパーブロック(SB)のタイプを決定してもよい。例えば、他のLBAそれぞれから参照される可能性が高いLBA群を示すヒント情報がSSD3に通知されたケースにおいては、コントローラ4は、ライトデータに一致するデータ(重複データ)がNAND型フラッシュメモリ5に存在しておらず、且つこのライトデータのLBAが、このヒント情報によって通知されるLBA群に属している場合に、このライトデータを、共有タイプのスーパーブロックに書き込んでもよい。
図41は、図39のアドレス参照構造において使用されるルックアップテーブル(LUT)32の構成例を示す。
LUT32は、複数のLBAに対応する複数のエントリを含む。各エントリは、フラグフィールドと、iLBA/PBAフィールドとを含む。フラグフィールドは、対応するiLBA/PBAフィールドの内容がiLBAまたはPBAのいずれであるかを示すフラグを保持する。例えば、“1”のフラグは、対応するiLBA/PBAフィールドの内容がiLBAであることを示し、“0”のフラグは、対応するiLBA/PBAフィールドの内容がPBAであることを示す。
ホスト2からリードコマンドを受信した時、コントローラ4は、LUT32を参照して、リードコマンドに含まれるLBAに対応するエントリからフラグおよびアドレス(iLBA/PBA)を取得する。
LUT32から取得したフラグが“1”であるならば、コントローラ4は、LUT32から取得したアドレス(iLBA)を使用してiLUT34を参照して、iLUT34からPBAを取得する。そして、コントローラ4は、iLUT34から取得したPBAによって指定されるNAND型フラッシュメモリ5内の物理記憶位置からデータをリードする。
一方、取得したフラグが“0”であるならば、コントローラ4は、iLUT34を参照せず、LUT32から取得したアドレス(PBA)によって指定されるNAND型フラッシュメモリ5内の物理記憶位置からデータをリードする。
図42は、ホスト2として機能する情報処理装置(コンピューティングデバイス)のハードウェア構成例を示す。
この情報処理装置は、サーバのようなコンピューティングデバイスとして実現される。この情報処理装置は、プロセッサ(CPU)101、メインメモリ102、BIOS−ROM103、ネットワークコントローラ105、周辺インタフェースコントローラ106、コントローラ107、およびエンベデッドコントローラ(EC)108等を含む。
プロセッサ101は、この情報処理装置の各コンポーネントの動作を制御するように構成されたCPUである。このプロセッサ101は、複数のSSD3のいずれか1つからメインメモリ102にロードされる様々なプログラムを実行する。メインメモリ102は、DRAMのようなランダムアクセスメモリから構成される。
また、プロセッサ101は、不揮発性メモリであるBIOS−ROM103に格納された基本入出力システム(BIOS)も実行する。BIOSはハードウェア制御のためのシステムプログラムである。
ネットワークコントローラ105は、有線LANコントローラ、無線LANコントローラのような通信デバイスである。周辺インタフェースコントローラ106は、USBデバイスのような周辺デバイスとの通信を実行するように構成されている。
コントローラ107は、複数のコネクタ107Aにそれぞれ接続されるデバイスとの通信を実行するように構成されている。複数のSSD3が複数のコネクタ107Aにそれぞれ接続されてもよい。コントローラ107は、SAS expander、PCIe Switch、PCIe expander、フラッシュアレイコントローラ、またはRAIDコントローラ等である。
EC108は、情報処理装置の電力管理を実行するように構成されたシステムコントローラとして機能する。EC108は、ユーザによる電源スイッチの操作に応じて情報処理装置をパワーオンおよびパワーオフする。
図43は、複数のSSD3とホスト2とを含む情報処理装置(コンピューティングデバイス)の構成例を示す。
この情報処理装置は、ラックに収容可能な薄い箱形の筐体201を備える。多数のSSD3は筐体201内に配置されても良い。この場合、各SSD3は筐体201の前面201Aに設けられたスロットに取り外し可能に挿入されてもよい。
システムボード(マザーボード)202は筐体201内に配置される。システムボード(マザーボード)202上においては、CPU101、メインメモリ102、ネットワークコントローラ105、コントローラ107を含む様々な電子部品が実装されている。これら電子部品がホスト2として機能する。
以上説明したように、本実施形態によれば、LUT32とiLUT34とを使用して2レベルのアドレス変換が実行される。LUT32においては、既に存在するあるデータに一致するライトデータの論理アドレス(LBA)には、既に存在するデータの中間アドレス(iLBA)と同じ中間アドレス(iLBA)が関連付けられる。したがって、iLUT34においては、あるデータを参照している論理アドレスの数にかかわらず、各物理アドレスは一つの中間アドレス(iLBA)のみに関連付けられる。
よって、複数の論理アドレスから参照されているデータ(重複データ)がガベージコレクションによって別のブロックにコピーされたケースにおいても、コントローラ4は、この一つの中間アドレスに対応するiLUT34内の一つのエントリのみをコピー先物理アドレスに更新するという動作を行うだけで、これら複数の論理アドレスからこのコピー先物理アドレスを正しく参照できることを保証することができる。
さらに、ある第1ブロック(スーパーブロック)に格納されている複数のデータそれぞれに対応する複数の参照カウントの全ては、この第1ブロックに対応する管理テーブル(SB管理テーブル)によって管理されている。そして、ある第1ブロックがGCのためのコピー元ブロックとして選択された場合には、この第1ブロックに対応する管理テーブルの内容に基づいて、非ゼロの参照カウントに対応するデータのみをコピー元ブロックからコピー先ブロックにコピーする処理と、非ゼロの参照カウントそれぞれを、コピー元ブロックに対応する管理テーブルからコピー先ブロックに対応する管理テーブルにコピーする処理とが実行される。したがって、コピー元ブロックに対応する管理テーブルの内容のみに基づいてGC動作を実行することが可能となり、重複排除を実現しつつ、GC動作の効率を改善することができる。
なお、本実施形態では、複数の物理ブロックを含むスーパーブロックの単位で書き込み先ブロック/コピー先ブロックの割り当て、消去動作、ライト動作、およびリード動作を行う場合を説明したが、物理ブロックの単位で書き込み先ブロック/コピー先ブロックの割り当て、消去動作、ライト動作、およびリード動作を行ってもよい。換言すれば、第1ブロックに含まれる物理ブロックの数は1以上であればよい。
なお、本実施形態では、不揮発性メモリとしてNAND型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
2…ホスト、3…SSD、4…コントローラ、5…NAND型フラッシュメモリ、21…重複排除処理部、22…GC動作制御部、23…データ分離動作制御部、32…LUT、33…ハッシュLUT、34…iLUT。
Claims (16)
- 不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、前記コントローラは、
前記不揮発性メモリ内の複数の第1ブロックに対応する複数の管理テーブルを管理し、各管理テーブルは対応する第1ブロック内の複数のデータに対応する複数の参照カウントを含み、各参照カウントは対応するデータを参照している論理アドレスの数を示し、
ホストから受信されるライトデータと一致する重複データが前記不揮発性メモリに存在していない場合、論理アドレスそれぞれと中間アドレスそれぞれとの対応関係を管理する第1の変換テーブルを更新して、未使用の第1の中間アドレスを前記ライトデータの論理アドレスに関連付け、前記ライトデータを前記不揮発性メモリに書き込み、前記中間アドレスそれぞれと物理アドレスそれぞれとの対応関係を管理する第2の変換テーブルを更新して、前記ライトデータが書き込まれた前記不揮発性メモリ内の位置を示す物理アドレスを前記第1の中間アドレスに関連付け、前記ライトデータに対応する参照カウントを1に設定し、
前記ライトデータと一致する前記重複データが前記不揮発性メモリに既に存在している場合、前記ライトデータを前記不揮発性メモリに書き込まずに、前記第1の変換テーブルを更新して、前記重複データに対応する物理アドレスを保持している前記第2の変換テーブル内のエントリを指す第2の中間アドレスを前記ライトデータの前記論理アドレスに関連付け、前記重複データに対応する参照カウントを1増やし、
前記ライトデータが前記不揮発性メモリに既に書き込まれているデータの更新データである場合、前記既に書き込まれているデータに対応する参照カウントを1減らし、
前記複数の第1ブロックの一つがガベージコレクションのコピー元ブロックとして選択された場合、前記コピー元ブロックに対応する前記複数の管理テーブル内の第1の管理テーブルに基づいて、非ゼロの参照カウントにそれぞれ対応するデータのみを前記コピー元ブロックからコピー先ブロックにコピーし、前記第2の変換テーブルを更新して、前記データがコピーされた前記コピー先ブロック内の位置それぞれを示す物理アドレスを前記コピーされたデータに対応する中間アドレスそれぞれに関連付け、前記非ゼロの参照カウントそれぞれを、前記第1の管理テーブルから前記コピー先ブロックに対応する第2の管理テーブルにコピーするように構成されている、メモリシステム。 - 前記複数の管理テーブルの各々において、前記複数の参照カウントは、対応する第1ブロックの物理アドレスの並びの順に配置されている請求項1記載のメモリシステム。
- 前記コントローラは、
ハッシュ値それぞれと前記中間アドレスそれぞれとの対応関係を管理する第3の変換テーブルを管理し、
前記ライトデータのハッシュ値を得、
前記得られたハッシュ値に対応する中間アドレスが前記第3の変換テーブルに存在しない場合、前記ライトデータと一致する重複データが前記不揮発性メモリに存在していないと判定し、未使用の中間アドレスを前記得られたハッシュ値に付与し、前記得られたハッシュ値と前記得られたハッシュ値に付与された前記中間アドレスとの対応関係を前記第3の変換テーブルに格納するように構成され、
前記ライトデータと一致する重複データが前記不揮発性メモリに存在していない場合、前記得られたハッシュ値に付与された前記中間アドレスが、前記ライトデータの前記論理アドレスに前記第1の中間アドレスとして関連付けられる、請求項1記載のメモリシステム。 - 前記コントローラは、
前記得られたハッシュ値に対応する中間アドレスが前記第3の変換テーブルに既に存在する場合、前記第2の変換テーブルを参照して、前記得られたハッシュ値に対応する前記中間アドレスに関連付けられた物理アドレスを取得し、
前記ライトデータを、前記取得された物理アドレスによって指定される前記不揮発性メモリ内の位置に格納されている第1のデータと比較し、
前記ライトデータと前記第1のデータが互いに一致する場合、前記ライトデータと一致する前記重複データが前記不揮発性メモリに既に存在していると判定するように構成され、
前記ライトデータと一致する前記重複データが前記不揮発性メモリに既に存在している場合、前記得られたハッシュ値に対応し且つ前記第3の変換テーブルに既に存在する前記中間アドレスが、前記ライトデータの前記論理アドレスに前記第2の中間アドレスとして関連付けられる、請求項3記載のメモリシステム。 - 前記コントローラは、論理アドレスを指定する前記ホストからのリード要求に応じて、前記第1の変換テーブルを参照して、前記指定された論理アドレスに対応する中間アドレスを取得し、前記第2の変換テーブルを参照して、前記取得した中間アドレスに対応する物理アドレスを取得し、前記取得された物理アドレスに基づいて前記不揮発性メモリからデータをリードするように構成されている請求項1記載のメモリシステム。
- 前記コントローラは、前記ライトデータの前記論理アドレスによって指される前記第1の変換テーブル内のエントリに既に中間アドレスが格納されている場合、前記ライトデータが前記不揮発性メモリに既に書き込まれているデータの更新データであると判定するように構成されている請求項1記載のメモリシステム。
- 複数の物理ブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、各々が1以上の物理ブロックを含む複数の第1ブロックを管理し、第1ブロックの単位で消去動作を実行するように構成されたコントローラとを具備し、前記コントローラは、
前記複数の第1ブロックに対応する複数の管理テーブルを管理し、各管理テーブルは対応する第1ブロック内の複数のデータに対応する複数の参照カウントを含み、各参照カウントは対応するデータを参照している論理アドレスの数を示し、
ライトデータをホストから受信し、
前記ライトデータと一致する重複データが前記不揮発性メモリに存在していない場合、論理アドレスそれぞれと中間アドレスそれぞれとの対応関係を管理する第1の変換テーブルを更新して、未使用の第1の中間アドレスを前記ライトデータの論理アドレスに関連付け、前記ライトデータを前記複数の第1ブロックの一つに書き込み、前記中間アドレスそれぞれと物理アドレスそれぞれとの対応関係を管理する第2の変換テーブルを更新して、前記ライトデータが書き込まれた前記不揮発性メモリ内の位置を示す物理アドレスを前記第1の中間アドレスに関連付け、前記ライトデータに対応する参照カウントを1に設定し、
前記ライトデータと一致する前記重複データが前記不揮発性メモリに既に存在している場合、前記ライトデータを前記複数の第1ブロックの一つに書き込まずに、前記第1の変換テーブルを更新して、前記重複データに対応する物理アドレスを保持している前記第2の変換テーブル内のエントリを指す第2の中間アドレスを前記ライトデータの前記論理アドレスに関連付け、前記重複データに対応する参照カウントを1増やし、
前記ライトデータが前記不揮発性メモリに既に書き込まれているデータの更新データである場合、前記既に書き込まれているデータに対応する参照カウントを1減らし、
前記複数の第1ブロックの一つがガベージコレクションのコピー元ブロックとして選択された場合、前記コピー元ブロックに対応する前記複数の管理テーブル内の第1の管理テーブルに基づいて、非ゼロの参照カウントにそれぞれ対応するデータのみを前記コピー元ブロックからコピー先ブロックにコピーし、前記第2の変換テーブルを更新して、前記データがコピーされた前記コピー先ブロック内の位置それぞれを示す物理アドレスを前記コピーされたデータに対応する中間アドレスそれぞれに関連付け、前記非ゼロの参照カウントそれぞれを、前記第1の管理テーブルから前記コピー先ブロックに対応する第2の管理テーブルにコピーするように構成されている、メモリシステム。 - 不揮発性メモリを制御する制御方法であって、
前記不揮発性メモリ内の複数の第1ブロックに対応する複数の管理テーブルを管理することと、各管理テーブルは対応する第1ブロック内の複数のデータに対応する複数の参照カウントを含み、各参照カウントは対応するデータを参照している論理アドレスの数を示し、
ホストから受信されるライトデータと一致する重複データが前記不揮発性メモリに存在していない場合、論理アドレスそれぞれと中間アドレスそれぞれとの対応関係を管理する第1の変換テーブルを更新して、未使用の第1の中間アドレスを前記ライトデータの論理アドレスに関連付ける動作と、前記ライトデータを前記不揮発性メモリに書き込む動作と、前記中間アドレスそれぞれと物理アドレスそれぞれとの対応関係を管理する第2の変換テーブルを更新して、前記ライトデータが書き込まれた前記不揮発性メモリ内の位置を示す物理アドレスを前記第1の中間アドレスに関連付ける動作と、前記ライトデータに対応する参照カウントを1に設定する動作とを実行することと、
前記ライトデータと一致する前記重複データが前記不揮発性メモリに既に存在している場合、前記ライトデータを前記不揮発性メモリに書き込まずに、前記第1の変換テーブルを更新して、前記重複データに対応する物理アドレスを保持している前記第2の変換テーブル内のエントリを指す第2の中間アドレスを前記ライトデータの前記論理アドレスに関連付ける動作と、前記重複データに対応する参照カウントを1増やす動作とを実行することと、
前記ライトデータが前記不揮発性メモリに既に書き込まれているデータの更新データである場合、前記既に書き込まれているデータに対応する参照カウントを1減らすことと、
前記複数の第1ブロックの一つがガベージコレクションのコピー元ブロックとして選択された場合、前記コピー元ブロックに対応する前記複数の管理テーブル内の第1の管理テーブルに基づいて、非ゼロの参照カウントにそれぞれ対応するデータのみを前記コピー元ブロックからコピー先ブロックにコピーする動作と、前記第2の変換テーブルを更新して、前記データがコピーされた前記コピー先ブロック内の位置それぞれを示す物理アドレスを前記コピーされたデータに対応する中間アドレスそれぞれに関連付ける動作と、前記非ゼロの参照カウントそれぞれを、前記第1の管理テーブルから前記コピー先ブロックに対応する第2の管理テーブルにコピーする動作とを実行することとを具備する制御方法。 - 前記複数の管理テーブルの各々において、前記複数の参照カウントは、対応する第1ブロックの物理アドレスの並びの順に配置されている請求項8記載の制御方法。
- ハッシュ値それぞれと前記中間アドレスそれぞれとの対応関係を管理する第3の変換テーブルを管理することと、
前記ライトデータのハッシュ値を得ることと、
前記得られたハッシュ値に対応する中間アドレスが前記第3の変換テーブルに存在しない場合、前記ライトデータと一致する重複データが前記不揮発性メモリに存在していないと判定し、未使用の中間アドレスを前記得られたハッシュ値に付与する動作と、前記得られたハッシュ値と前記得られたハッシュ値に付与された前記中間アドレスとの対応関係を前記第3の変換テーブルに格納する動作とを実行することとをさらに具備し、
前記ライトデータと一致する重複データが前記不揮発性メモリに存在していない場合、前記得られたハッシュ値に付与された前記中間アドレスが、前記ライトデータの前記論理アドレスに前記第1の中間アドレスとして関連付けられる請求項8記載の制御方法。 - 前記得られたハッシュ値に対応する中間アドレスが前記第3の変換テーブルに既に存在する場合、前記第2の変換テーブルを参照して、前記得られたハッシュ値に対応する前記中間アドレスに関連付けられた物理アドレスを取得することと、
前記ライトデータを、前記取得された物理アドレスによって指定される前記不揮発性メモリ内の位置に格納されている第1のデータと比較することと、
前記ライトデータと前記第1のデータが互いに一致する場合、前記ライトデータと一致する前記重複データが前記不揮発性メモリに既に存在していると判定することとをさらに具備し、
前記ライトデータと一致する前記重複データが前記不揮発性メモリに既に存在している場合、前記得られたハッシュ値に対応し且つ前記第3の変換テーブルに既に存在する前記中間アドレスが、前記ライトデータの前記論理アドレスに前記第2の中間アドレスとして関連付けられる請求項10記載の制御方法。 - 論理アドレスを指定する前記ホストからのリード要求に応じて、前記第1の変換テーブルを参照して、前記指定された論理アドレスに対応する中間アドレスを取得することと、
前記第2の変換テーブルを参照して、前記取得した中間アドレスに対応する物理アドレスを取得することと、
前記取得された物理アドレスに基づいて前記不揮発性メモリからデータをリードすることとをさらに具備する請求項8記載の制御方法。 - 不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、前記コントローラは、
前記不揮発性メモリ内の複数の第1ブロックに対応する複数の管理テーブルを管理し、各管理テーブルは対応する第1ブロック内の複数のデータに対応する複数の参照カウントを含み、各参照カウントは対応するデータを参照している論理アドレスの数を示し、
ホストから受信されるライトデータと一致する重複データが前記不揮発性メモリに存在していない場合、前記ライトデータを前記不揮発性メモリに書き込み、中間アドレスそれぞれと前記不揮発性メモリの物理アドレスそれぞれとの対応関係を管理する中間−物理アドレス変換テーブルを更新して、前記ライトデータが書き込まれた前記不揮発性メモリ内の位置を示す物理アドレスを、前記ライトデータの論理アドレスに付与された第1の中間アドレスに関連付け、前記ライトデータに対応する参照カウントを1に設定し、
前記ライトデータと一致する前記重複データが前記不揮発性メモリに既に存在している場合、前記ライトデータを前記不揮発性メモリに書き込まずに、前記重複データに付与されている第2の中間アドレスを前記ライトデータの前記論理アドレスに関連付け、前記重複データに対応する参照カウントを1増やし、
前記ライトデータが前記不揮発性メモリに既に書き込まれているデータの更新データである場合、前記既に書き込まれているデータに対応する参照カウントを1減らし、
前記複数の第1ブロックの一つがガベージコレクションのコピー元ブロックとして選択された場合、前記コピー元ブロックに対応する前記複数の管理テーブル内の第1の管理テーブルに基づいて、非ゼロの参照カウントにそれぞれ対応するデータのみを前記コピー元ブロックからコピー先ブロックにコピーするように構成されている、メモリシステム。 - 前記コントローラは、前記複数の第1ブロックの一つがガベージコレクションのコピー元ブロックとして選択された場合、前記コピー元ブロックに対応する前記複数の管理テーブル内の第1の管理テーブルに基づいて、非ゼロの参照カウントにそれぞれ対応するデータのみを前記コピー元ブロックからコピー先ブロックにコピーする動作と、前記中間−物理アドレス変換テーブルを更新して、前記データがコピーされた前記コピー先ブロック内の位置それぞれを示す物理アドレスを前記コピーされたデータに対応する中間アドレスそれぞれに関連付ける動作とを実行する請求項13記載のメモリシステム。
- 前記コントローラは、前記複数の第1ブロックの一つがガベージコレクションのコピー元ブロックとして選択された場合、前記コピー元ブロックに対応する前記複数の管理テーブル内の第1の管理テーブルに基づいて、非ゼロの参照カウントにそれぞれ対応するデータのみを前記コピー元ブロックからコピー先ブロックにコピーする動作と、前記非ゼロの参照カウントそれぞれを、前記第1の管理テーブルから前記コピー先ブロックに対応する第2の管理テーブルにコピーする動作とを実行する請求項13記載のメモリシステム。
- 前記コントローラは、前記複数の第1ブロックの一つがガベージコレクションのコピー元ブロックとして選択された場合、前記コピー元ブロックに対応する前記複数の管理テーブル内の第1の管理テーブルに基づいて、非ゼロの参照カウントにそれぞれ対応するデータのみを前記コピー元ブロックからコピー先ブロックにコピーする動作と、前記中間−物理アドレス変換テーブルを更新して、前記データがコピーされた前記コピー先ブロック内の位置それぞれを示す物理アドレスを前記コピーされたデータに対応する中間アドレスそれぞれに関連付ける動作と、前記非ゼロの参照カウントそれぞれを、前記第1の管理テーブルから前記コピー先ブロックに対応する第2の管理テーブルにコピーする動作とを実行する請求項13記載のメモリシステム。
Priority Applications (5)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2017181723A JP2019057178A (ja) | 2017-09-21 | 2017-09-21 | メモリシステムおよび制御方法 |
| TW106146169A TWI644211B (zh) | 2017-09-21 | 2017-12-28 | Memory system and control method for controlling non-volatile memory |
| TW107136914A TW201915744A (zh) | 2017-09-21 | 2017-12-28 | 記憶體系統及控制非揮發性記憶體之控制方法 |
| CN201810021940.7A CN109542797B (zh) | 2017-09-21 | 2018-01-10 | 存储器系统及控制非易失性存储器的控制方法 |
| US15/914,027 US10545863B2 (en) | 2017-09-21 | 2018-03-07 | Memory system and method for controlling nonvolatile memory |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2017181723A JP2019057178A (ja) | 2017-09-21 | 2017-09-21 | メモリシステムおよび制御方法 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JP2019057178A true JP2019057178A (ja) | 2019-04-11 |
Family
ID=65431686
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2017181723A Pending JP2019057178A (ja) | 2017-09-21 | 2017-09-21 | メモリシステムおよび制御方法 |
Country Status (4)
| Country | Link |
|---|---|
| US (1) | US10545863B2 (ja) |
| JP (1) | JP2019057178A (ja) |
| CN (1) | CN109542797B (ja) |
| TW (2) | TW201915744A (ja) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2022145781A (ja) * | 2020-07-31 | 2022-10-04 | 株式会社日立製作所 | ストレージシステム及びストレージシステムにおけるデータ複製方法 |
| JP7701500B1 (ja) | 2024-03-07 | 2025-07-01 | Necプラットフォームズ株式会社 | ストレージ制御装置、ストレージ制御方法、およびストレージ制御プログラム |
Families Citing this family (25)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2019057172A (ja) | 2017-09-21 | 2019-04-11 | 東芝メモリ株式会社 | メモリシステムおよび制御方法 |
| US11392491B2 (en) * | 2018-06-27 | 2022-07-19 | Intel Corporation | Hardware-assisted paging mechanisms |
| US11386002B2 (en) * | 2018-10-04 | 2022-07-12 | ScaleFlux, Inc. | Enhancing solid-state storage device speed performance through stream-aware garbage collection |
| US11210186B2 (en) * | 2019-03-07 | 2021-12-28 | Arm Limited | Error recovery storage for non-associative memory |
| CN110211617B (zh) * | 2019-05-17 | 2020-12-29 | 中国科学院计算技术研究所 | 一种哈希硬件处理装置及方法 |
| KR102739997B1 (ko) | 2019-12-02 | 2024-12-06 | 삼성전자주식회사 | 스토리지 장치 및 상기 스토리지 장치의 동작 방법 |
| KR20210142477A (ko) * | 2020-05-18 | 2021-11-25 | 에스케이하이닉스 주식회사 | 메모리 컨트롤러 및 그 동작 방법 |
| JP2022030661A (ja) * | 2020-08-07 | 2022-02-18 | キオクシア株式会社 | メモリシステム、制御方法、および情報処理システム |
| TWI864115B (zh) * | 2020-09-28 | 2024-12-01 | 韓商愛思開海力士有限公司 | 儲存裝置、儲存裝置的控制方法及記錄媒體 |
| CN112286448B (zh) * | 2020-10-16 | 2022-10-14 | 杭州宏杉科技股份有限公司 | 对象访问方法、装置、电子设备及机器可读存储介质 |
| CN112486684B (zh) * | 2020-11-30 | 2022-08-12 | 展讯半导体(成都)有限公司 | 行车影像显示方法、装置及平台、存储介质、嵌入式设备 |
| CN112632069B (zh) * | 2020-12-22 | 2021-08-31 | 中科驭数(北京)科技有限公司 | 哈希表数据存储管理方法、装置、介质和电子设备 |
| TWI808384B (zh) * | 2021-02-23 | 2023-07-11 | 慧榮科技股份有限公司 | 儲存裝置、快閃記憶體控制器及其控制方法 |
| TWI821152B (zh) * | 2021-02-23 | 2023-11-01 | 慧榮科技股份有限公司 | 儲存裝置、快閃記憶體控制器及其控制方法 |
| GB2604153B (en) * | 2021-02-26 | 2025-11-26 | Advanced Risc Mach Ltd | Data Processors |
| US12204503B2 (en) | 2021-06-22 | 2025-01-21 | Samsung Electronics Co., Ltd. | Mechanism for managing a migration of data with mapped page and dirty page bitmap sections |
| CN113485641B (zh) * | 2021-06-29 | 2024-04-16 | 成都忆芯科技有限公司 | 处理io命令的方法及其控制部件 |
| CN116264085B (zh) * | 2021-12-14 | 2025-08-15 | 长鑫存储技术有限公司 | 存储系统以及存储系统的数据写入方法 |
| US11899977B2 (en) | 2022-03-10 | 2024-02-13 | Silicon Motion, Inc. | Method and apparatus for performing access management of memory device with aid of serial number assignment timing control |
| CN114780448A (zh) * | 2022-05-18 | 2022-07-22 | 苏州忆联信息系统有限公司 | 数据快速拷贝的方法、装置、计算机设备及存储介质 |
| TWI835221B (zh) * | 2022-07-26 | 2024-03-11 | 旺宏電子股份有限公司 | 記憶體裝置及其操作方法 |
| US12056361B2 (en) | 2022-07-26 | 2024-08-06 | Macronix International Co., Ltd. | Memory device and operation method thereof |
| US12164372B2 (en) * | 2022-08-24 | 2024-12-10 | Western Digital Technologies, Inc. | Data retention (DR) warning system |
| US12277322B2 (en) * | 2022-09-30 | 2025-04-15 | Samsung Electronics Co., Ltd. | Method of optimizing quality of service (QOS) in solid-state drives (SSDS) and an SSD thereof |
| TWI892468B (zh) * | 2024-02-20 | 2025-08-01 | 點序科技股份有限公司 | 非揮發性記憶體裝置及其垃圾收集方法 |
Family Cites Families (21)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP3912355B2 (ja) * | 2003-10-14 | 2007-05-09 | ソニー株式会社 | データ管理装置、データ管理方法、不揮発性メモリ、不揮発性メモリを有する記憶装置及びデータ処理システム |
| CN100517268C (zh) * | 2004-04-20 | 2009-07-22 | 松下电器产业株式会社 | 非易失性存储系统、非易失性存储装置、存储控制器、存取装置以及非易失性存储装置的控制方法 |
| US20100082878A1 (en) * | 2005-06-24 | 2010-04-01 | Matsushita Electric Industrial Co., Ltd. | Memory controller, nonvolatile storage device, nonvolatile storage system, and data writing method |
| US7877540B2 (en) * | 2005-12-13 | 2011-01-25 | Sandisk Corporation | Logically-addressed file storage methods |
| JP4464378B2 (ja) * | 2006-09-05 | 2010-05-19 | 株式会社日立製作所 | 同一データを纏める事で格納領域を節約する計算機システム、ストレージシステム及びそれらの制御方法 |
| JP5198245B2 (ja) * | 2008-12-27 | 2013-05-15 | 株式会社東芝 | メモリシステム |
| US8688894B2 (en) * | 2009-09-03 | 2014-04-01 | Pioneer Chip Technology Ltd. | Page based management of flash storage |
| JP5066199B2 (ja) * | 2010-02-12 | 2012-11-07 | 株式会社東芝 | 半導体記憶装置 |
| US9251087B2 (en) * | 2011-02-11 | 2016-02-02 | SanDisk Technologies, Inc. | Apparatus, system, and method for virtual memory management |
| US9563555B2 (en) * | 2011-03-18 | 2017-02-07 | Sandisk Technologies Llc | Systems and methods for storage allocation |
| TWI521343B (zh) * | 2011-08-01 | 2016-02-11 | Toshiba Kk | An information processing device, a semiconductor memory device, and a semiconductor memory device |
| JP5586718B2 (ja) * | 2012-06-19 | 2014-09-10 | 株式会社東芝 | 制御プログラム、ホスト装置の制御方法、情報処理装置およびホスト装置 |
| JP6019940B2 (ja) * | 2012-08-30 | 2016-11-02 | 富士通株式会社 | 情報処理装置、コピー制御プログラム、およびコピー制御方法 |
| US9727245B2 (en) | 2013-03-15 | 2017-08-08 | Avalanche Technology, Inc. | Method and apparatus for de-duplication for solid state disks (SSDs) |
| US9563683B2 (en) | 2013-05-14 | 2017-02-07 | Actifio, Inc. | Efficient data replication |
| US20150186259A1 (en) * | 2013-12-30 | 2015-07-02 | Sandisk Technologies Inc. | Method and apparatus for storing data in non-volatile memory |
| US9652153B2 (en) * | 2014-09-02 | 2017-05-16 | Sandisk Technologies Llc | Process and apparatus to reduce declared capacity of a storage device by reducing a count of logical addresses |
| JP2016126632A (ja) | 2015-01-07 | 2016-07-11 | 富士通株式会社 | ストレージ装置、ストレージシステム、データ読み出し方法、及びストレージプログラム |
| US9733836B1 (en) | 2015-02-11 | 2017-08-15 | Violin Memory Inc. | System and method for granular deduplication |
| JP6414853B2 (ja) * | 2015-12-14 | 2018-10-31 | 東芝メモリ株式会社 | メモリシステムおよび制御方法 |
| US10114743B2 (en) * | 2016-04-06 | 2018-10-30 | Sandisk Technologies Inc. | Memory erase management |
-
2017
- 2017-09-21 JP JP2017181723A patent/JP2019057178A/ja active Pending
- 2017-12-28 TW TW107136914A patent/TW201915744A/zh unknown
- 2017-12-28 TW TW106146169A patent/TWI644211B/zh active
-
2018
- 2018-01-10 CN CN201810021940.7A patent/CN109542797B/zh active Active
- 2018-03-07 US US15/914,027 patent/US10545863B2/en active Active
Cited By (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2022145781A (ja) * | 2020-07-31 | 2022-10-04 | 株式会社日立製作所 | ストレージシステム及びストレージシステムにおけるデータ複製方法 |
| JP7309025B2 (ja) | 2020-07-31 | 2023-07-14 | 株式会社日立製作所 | ストレージシステム及びストレージシステムにおけるデータ複製方法 |
| JP7701500B1 (ja) | 2024-03-07 | 2025-07-01 | Necプラットフォームズ株式会社 | ストレージ制御装置、ストレージ制御方法、およびストレージ制御プログラム |
| JP2025136506A (ja) * | 2024-03-07 | 2025-09-19 | Necプラットフォームズ株式会社 | ストレージ制御装置、ストレージ制御方法、およびストレージ制御プログラム |
Also Published As
| Publication number | Publication date |
|---|---|
| CN109542797A (zh) | 2019-03-29 |
| US20190087327A1 (en) | 2019-03-21 |
| US10545863B2 (en) | 2020-01-28 |
| TW201915744A (zh) | 2019-04-16 |
| TWI644211B (zh) | 2018-12-11 |
| CN109542797B (zh) | 2023-03-10 |
| TW201915746A (zh) | 2019-04-16 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US11693770B2 (en) | Memory system and method for controlling nonvolatile memory | |
| CN109542797B (zh) | 存储器系统及控制非易失性存储器的控制方法 | |
| US11042487B2 (en) | Memory system and method for controlling nonvolatile memory | |
| JP7074453B2 (ja) | メモリシステムおよび制御方法 | |
| JP7074454B2 (ja) | 計算機システムおよび制御方法 | |
| US10789162B2 (en) | Memory system and method for controlling nonvolatile memory | |
| JP6785205B2 (ja) | メモリシステムおよび制御方法 | |
| JP6553566B2 (ja) | メモリシステムおよび制御方法 | |
| US10747666B2 (en) | Memory system | |
| JP6414853B2 (ja) | メモリシステムおよび制御方法 | |
| JP6785204B2 (ja) | メモリシステムおよび制御方法 | |
| JP2024043007A (ja) | メモリシステムおよび制御方法 | |
| JP7013546B2 (ja) | メモリシステム | |
| JP6666405B2 (ja) | メモリシステムおよび制御方法 | |
| JP6552701B2 (ja) | メモリシステムおよび制御方法 | |
| JP2022036263A (ja) | 制御方法 | |
| JP2022019787A (ja) | メモリシステムおよび制御方法 | |
| JP2019160347A (ja) | メモリシステムおよび制御方法 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A712 Effective date: 20180830 |