JP2019148913A - メモリシステム - Google Patents
メモリシステム Download PDFInfo
- Publication number
- JP2019148913A JP2019148913A JP2018032322A JP2018032322A JP2019148913A JP 2019148913 A JP2019148913 A JP 2019148913A JP 2018032322 A JP2018032322 A JP 2018032322A JP 2018032322 A JP2018032322 A JP 2018032322A JP 2019148913 A JP2019148913 A JP 2019148913A
- Authority
- JP
- Japan
- Prior art keywords
- data
- write
- block
- update frequency
- controller
- 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; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
【課題】ストレージ容量の利用効率を改善することができるメモリシステムを実現する。【解決手段】実施形態によれば、メモリシステムは、書き込むべきライトデータがシステムデータ特性を有するか否かを示すシステムデータタグを、ホストから受信する。メモリシステムは、受信されたシステムデータタグによってシステムデータ特性を有するデータであると指定された第1のライトデータを、第1レベルの更新頻度を有する第1タイプのデータを書き込むための第1のブロックに書き込む。メモリシステムは、受信されたシステムデータタグによってシステムデータ特性を有するデータであると指定されなかった第2のライトデータを、第1タイプのデータよりも低い第2レベルの更新頻度を有する第2タイプのデータを書き込むための第2のブロックに書き込む。【選択図】図11
Description
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
このようなメモリシステムの一つとして、NAND型フラッシュメモリを備えるフラッシュストレージデバイスが知られている。
NAND型フラッシュメモリにおいては、データが既に書き込まれているブロック内の領域上に新たなデータを直接上書きすることができない。そのため、既に書き込まれているデータを更新する場合には、そのブロック内または別ブロックの未書き込み領域に新たなデータを書き込み、そして以前のデータを無効データとして扱う、という動作が実行される。
したがって、NAND型フラッシュメモリにおいては、データが更新されるに連れて無効データを含むブロックの数が増加し、この結果、これらブロックにおいてフラグメンテーションがそれぞれ起こる場合がある。
NVM Express Revision 1.3, May 1, 2017, p.182-184
このようなフラグメンテーションは各ブロックに書き込み可能な有効データ量を低下させ、これによってストレージ容量の利用効率を下げる。また、ストレージ容量の利用効率の低下は、ガベージコレクションの実行頻度を高くする要因となる。このため、ストレージ容量の利用効率の低下は、フラッシュストレージデバイスの性能低下、ライトアンプリフィケーションファクタの増大を引き起こす要因となる。
本発明が解決しようとする課題は、ストレージ容量の利用効率を改善することができるメモリシステムを提供することである。
実施形態によれば、ホストに接続可能なメモリシステムは、複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備する。前記コントローラは、書き込むべきライトデータがシステムデータ特性を有するか否かを示すシステムデータタグを、前記ホストから受信する。前記コントローラは、前記受信されたシステムデータタグによって前記システムデータ特性を有するデータであると指定された第1のライトデータを、前記複数のブロックのうち、第1レベルの更新頻度を有する第1タイプのデータを書き込むための第1のブロックに書き込む。前記コントローラは、前記受信されたシステムデータタグによって前記システムデータ特性を有するデータであると指定されなかった第2のライトデータを、前記複数のブロックのうち、前記第1タイプのデータよりも低い第2レベルの更新頻度を有する第2タイプのデータを書き込むための第2のブロックに書き込む。
以下、図面を参照して、実施形態を説明する。
(第1実施形態)
まず、図1を参照して、第1実施形態に係るメモリシステムを含む情報処理システム1の構成を説明する。
まず、図1を参照して、第1実施形態に係るメモリシステムを含む情報処理システム1の構成を説明する。
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、NAND型フラッシュメモリを備えたフラッシュストレージデバイス3として実現されている。
情報処理システム1は、ホスト(ホストデバイス)2と、フラッシュストレージデバイス3とを含む。ホスト2は、フラッシュストレージデバイス3をアクセスする情報処理装置である。ホスト2として機能する情報処理装置の例には、パーソナルコンピュータ、サーバコンピュータ、様々な電子機器(携帯電話、スマートフォン、デジタルカメラ、等)が含まれる。
フラッシュストレージデバイス3は、ホスト2として機能する情報処理装置のストレージとして使用され得る。フラッシュストレージデバイス3は、ユニバーサルフラッシュストレージ(UFS)デバイスであってもよいし、エンベデッド・マルチメディア・カード(eMMC)デバイスであってもよいし、あるいはソリッドステートドライブ(SSD)であってもよい。
UFSデバイスはUFS規格に準拠するストレージデバイスであり、例えば、組み込みストレージデバイス、メモリカードデバイスとして実現される。
eMMCデバイスはeMMC規格に準拠するストレージデバイスである。eMMCデバイスも、例えば、組み込みストレージデバイスとして実現される。
フラッシュストレージデバイス3が組み込みストレージデバイスとして実現されているケースにおいては、フラッシュストレージデバイス3は、情報処理装置に内蔵される。フラッシュストレージデバイス3がカードデバイスとして実現されているケースにおいては、フラッシュストレージデバイス3は、情報処理装置のカードスロットに挿入される。フラッシュストレージデバイス3がSSDとして実現されているケースにおいては、フラッシュストレージデバイス3は、情報処理装置に内蔵されてもよいし、情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
ホスト2とフラッシュストレージデバイス3とを相互接続するためのインタフェースとしては、SCSI、Serial Attached SCSI(SAS)、ATA、Serial ATA(SATA)、PCI Express(PCIe)(登録商標)、Ethernet(登録商標)、Fibre channel、NVM Express(NVMe)(登録商標)、ユニバーサルシリアルバス(USB)、Mobile Industry Processor Interface(MIPI)、UniPro等を使用し得る。
フラッシュストレージデバイス3は、コントローラ4および不揮発性メモリ(例えばNAND型フラッシュメモリ)5を備える。NAND型フラッシュメモリ5は、複数のNAND型フラッシュメモリチップを含んでいてもよい。コントローラ4は、NAND型フラッシュメモリ5に電気的に接続され、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラとして動作する。このコントローラ4は、System−on−a−chip(SoC)のような回路によって実現されてもよい。
フラッシュストレージデバイス3は、ランダムアクセスメモリ、例えば、DRAM6も備えていてもよい。
NAND型フラッシュメモリ5は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。NAND型フラッシュメモリ5は、2次元構造のNAND型フラッシュメモリであってもよいし、3次元構造のNAND型フラッシュメモリであってもよい。
NAND型フラッシュメモリ5のメモリセルアレイは、複数のブロックBLK0〜BLKm−1を含む。ブロックBLK0〜BLK(m−1)の各々は複数のページ(ここではページP0〜P(n−1))を含む。ブロックBLK0〜BLK(m−1)は、消去単位として機能する。ページP0〜P(n−1)の各々は、同一ワード線に接続された複数のメモリセルを含む。ページP0〜P(n−1)は、データ書き込み動作およびデータ読み出し動作の単位である。
コントローラ4は、NAND型フラッシュメモリ5のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能し得る。このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)NAND型フラッシュメモリ5の制約(例えば、ページ単位のリード/ライト動作とブロック単位の消去動作)を隠蔽するための処理、等が含まれる。論理アドレスは、フラッシュストレージデバイス3の論理空間内の位置をアドレス指定するためにホスト2によって使用されるアドレスである。この論理アドレスとしては、LBA(logical block address(addressing))が使用され得る。
論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル(論理物理アドレス変換テーブル)32を用いて実行される。コントローラ4は、アドレス変換テーブル32を使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。ある論理アドレスに対応する物理アドレスは、この論理アドレスに対応するデータがライトされたNAND型フラッシュメモリ5内の最新の物理記憶位置を示す。アドレス変換テーブル32は、フラッシュストレージデバイス3の電源オン時にNAND型フラッシュメモリ5からDRAM6にロードされてもよい。
NAND型フラッシュメモリ5においては、ページへのデータ書き込みは1消去サイクル当たり1回のみ可能である。つまり、データが既に書き込まれているブロック内の領域に新たなデータを直接上書きすることができない。このため、既に書き込まれているデータを更新する場合には、コントローラ4はそのブロック内または別ブロックの未書き込み領域に新たなデータを書き込み、そして以前のデータを無効データとして扱う。換言すれば、コントローラ4は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ4は、アドレス変換テーブル32を更新してこの論理アドレスをこの別の物理記憶位置に関連付けると共に、以前のデータを無効化する。
ブロック管理には、バッドブロック(不良ブロック)の管理と、ウェアレベリングと、ガベージコレクション(GC)等が含まれる。ウェアレベリングは、ブロックそれぞれの書き換え回数(プログラム/イレーズサイクルの数)を均一化するための動作である。
GCは、フリーブロックの個数を増やすための動作である。フリーブロックとは、有効データを含まないブロックを意味する。
GCにおいては、コントローラ4は、有効データと無効データとが混在する幾つかのブロック内の有効データを別のブロック(例えばフリーブロック)にコピーする。ここで、有効データとは、ある論理アドレスに関連付けられているデータを意味する。例えば、アドレス変換テーブル32から参照されているデータ(すなわち論理アドレスから最新のデータとして紐付けられているデータ)は有効データであり、後にホスト2からリードされる可能性がある。無効データとは、どの論理アドレスにも関連付けられていないデータを意味する。どの論理アドレスにも関連付けられていないデータは、もはやホスト2からリードされる可能性が無いデータである。そして、コントローラ4は、アドレス変換テーブル32を更新して、コピーされた有効データの論理アドレスそれぞれをコピー先の物理アドレスにマッピングする。有効データが別のブロックにコピーされることによって無効データのみになったブロックはフリーブロックとして解放される。これによって、このブロックは、このブロックに対する消去動作が実行された後に再利用することが可能となる。
コントローラ4は、ホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14等を含んでもよい。これらホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14は、バス10を介して相互接続されていてもよい。
ホストインタフェース11は、ホスト2から様々なコマンド(例えば、ライトコマンド、リードコマンド、アンマップ(UNMAP)(SAS)/トリム(Trim)(SATA)/アンマップ(Unmap)(UFS)/イレーズ(Erase)(eMMC)コマンド、他の様々なコマンド)を受信する。
CPU12は、ホストインタフェース11、NANDインタフェース13、およびDRAMインタフェース14を制御するように構成されたプロセッサである。CPU12は、フラッシュストレージデバイス3の電源オンに応答して、NAND型フラッシュメモリ5または図示しないROMに格納されている制御プログラム(ファームウェア)をDRAM6上にロードし、このファームウェアを実行することによって様々な処理を行う。このCPU12は、例えば、上述のFTLの処理に加え、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。CPU12の動作は、CPU12によって実行される上述のファームウェアによって制御される。なお、FTL処理およびコマンド処理の一部または全部は、コントローラ4内のハードウェアによって実行してもよい。また、フラッシュストレージデバイス3はDRAM6を含まない構成であってもよい。この場合、コントローラ4に内蔵されたSRAMがDRAM6の代わりに使用されてもよい。
CPU12は、上述のファームウェアを実行することによって、システムデータタグチェック部21、データサイズチェック部22、ライト制御部23、ガベージコレクション(GC)制御部24として機能することができる。なお、これらシステムデータタグチェック部21、データサイズチェック部22、ライト制御部23、GC制御部24も、コントローラ4内のハードウェアによって実現してもよい。
システムデータタグチェック部21は、ホスト2から受信されるシステムデータタグの値をチェックする。システムデータタグは、書き込むべきライトデータがシステムデータ特性(system data characteristics)を有するか否かを示す情報である。ホスト2は、特定の値にセットされたシステムデータタグをフラッシュストレージデバイス3に送信することによって、ライトデータがシステムデータ特性を有するデータであることをフラッシュストレージデバイス3に通知することができる。
ホスト2によってフラッシュストレージデバイス3に書き込まれるデータの種類は、ユーザデータとシステムデータとに大別される。このシステムデータは、システムデータ特性を有するデータと称される。システムデータ(つまり、システムデータ特性を有するデータ)の例には、ログ、ファイルシステムメタデータ、オペレーティングシステムデータ、タイムスタンプ、設定パラメータ、等が含まれる。
コントローラ4は、システムデータタグによってシステムデータ特性を有するデータであると指定されたライトデータを更新頻度が高いデータとして取り扱う、という更新頻度判定機能を有する。ここで、あるデータの更新頻度とは、ホストによってこのデータが更新される頻度を意味する。例えば、ある論理アドレスのデータの更新頻度は、この論理アドレスを指定するライトコマンドがホスト2から発行される頻度によって表されてもよい。
コントローラ4は、システムデータタグによってシステムデータ特性を有するデータであると指定されたライトデータを更新頻度が高いデータであると判定し、更新頻度が高いデータを書き込むためのブロックにこのライトデータを書き込む。更新頻度が高いデータを書き込むためのブロックとは、更新頻度が高いデータを書き込むことを目的とした書き込み先ブロックを意味する。
また、コントローラ4は、システムデータタグによってシステムデータ特性を有するデータであると指定されなかったライトデータを更新頻度が低いデータであると判定し、更新頻度が低いデータを書き込むための別のブロックにこのライトデータを書き込む。更新頻度が低いデータを書き込むためのブロックとは、更新頻度が低いデータを書き込むことを目的とした書き込み先ブロックを意味する。
データサイズチェック部22は、ホスト2から受信するライトデータのサイズが閾値以下であるか否かを判定する。ライトデータのサイズは、ホスト2から受信するライトコマンドによって指定される。
ライト制御部23は、2種類の書き込み先ブロック(更新頻度が高いデータを書き込むためのブロックと、更新頻度が低いデータを書き込むためのブロック)を管理する。更新頻度が高いデータを書き込むためのブロックは、第1レベルの更新頻度を有する第1タイプのデータを書き込むためのブロック(更新頻度が高いデータ用のブロック)として利用される。更新頻度が低いデータを書き込むためのブロックは、第1タイプのデータよりも低い第2レベルの更新頻度を有するデータを書き込むためのブロック(更新頻度が低いデータ用のブロック)として利用される。
例えば、第1レベルの更新頻度を有する第1タイプのデータはある閾値よりも高い更新頻度をそれぞれ有するデータの集合であり、第2レベルの更新頻度を有する第2タイプのデータはこの閾値以下の更新頻度をそれぞれ有するデータの集合である。
ライト制御部23は、ホスト2から受信するシステムデータタグによってシステムデータ特性を有するデータであると指定されたライトデータを更新頻度が高いデータ用のブロックに書き込み、ホスト2からのシステムデータタグによってシステムデータ特性を有するデータであると指定されなかったライトデータを更新頻度が低いデータ用のブロックに書き込む。
なお、システムデータタグによってシステムデータ特性を有するデータであると指定されなかったライトデータが、更新頻度が低いデータ用のブロックに常に無条件に書き込まれる必要はない。例えば、システムデータ特性を有するデータであると指定されなかったライトデータであっても、このライトデータが閾値以下のサイズを有する小さいデータである場合には、ライト制御部23は、このライトデータを更新頻度が高いデータであると判定し、更新頻度が高いデータ用のブロックにこのライトデータを書き込んでもよい。
さらに、ライト制御部23は、更新頻度が高いデータ用のブロックへのデータ書き込みを、メモリセル当たりにmビットのデータを書き込む第1のプログラムモードによって実行し、更新頻度が低いデータ用のブロックへのデータ書き込みを、メモリセル当たりにnビットのデータを書き込む第2のプログラムモードによって実行してもよい。ここで、mはnよりも小さい整数である。例えば、m(m<n)は1以上の整数であってもよいし、nは2以上の整数であってもよい。
例えば、第1のプログラムモードはメモリセル当たりに1ビットのデータを書き込むシングルレベルセル(SLC)モードであってもよく、第2プログラムモードはメモリセル当たりに2ビットのデータを書き込むマルチレベルセル(MLC)モード、またはメモリセル当たりに3ビットのデータを書き込むトリプルレベルセル(TLC)モード、またはメモリセル当たりに4ビットのデータを書き込むクワッドレベルセル(QLC)モードであってもよい。
あるいは、第1のプログラムモードがMLCモードで、第2のプログラムモードがTLCモードまたはQLCモードであってもよい。
更新頻度が高いデータ用のブロックにおいては、同じ論理アドレスに対応する更新データが頻繁に書き込まれる。このため、更新頻度が高いデータ用のブロックは、更新頻度が低いデータ用のブロックに比べ、高い頻度で書き込み/消去の動作が行われる可能性がある。この場合、更新頻度が高いデータ用のブロックそれぞれのプログラム/イレーズサイクルの数は増加し易くなる。メモリセル当たりに書き込まれるビットの数が増えるほど、許容されるプログラム/イレーズサイクルの数は減少する。
したがって、ライト制御部23は、メモリセル当たりに書き込まれるビットの数が少ないプログラムモードを更新頻度が高いデータ用のブロックに対して適用する。
つまり、ライト制御部23は、ライトデータがシステムデータ特性を有するデータであるか否かを示す通知(システムデータタグ)をホスト2から受信し、ライトデータがシステムデータ特性を有するデータであるならば、更新頻度が高いデータ用のブロックにライトデータを第1のプログラムモード(例えばSLCモード)で書き込み、ライトデータがシステムデータ特性を有するデータでないならば、更新頻度が低いデータ用のブロックにライトデータを第2のプログラムモード(例えばTLCモード)で書き込む。
これにより、更新頻度が高いデータ用の各ブロックに書き込み可能なデータの総量は、更新頻度が低いデータ用の各ブロックに書き込み可能なデータの総量よりも減少するものの、更新頻度が高いデータ用の各ブロックの許容プログラム/イレーズサイクルの数を増やすことができ、これらブロックに書き込まれたデータの信頼性を改善することができる。
GC制御部24は、更新頻度が高いデータ用のブロックとして使用され且つ有効データを保持しているブロック群と、更新頻度が低いデータ用のブロックとして使用され且つ有効データを保持しているブロック群とから、有効データ量が少ない一つ以上のブロックをGCが施されるべきGCソースブロックとして選択する。そして、GC制御部24は、GCソースブロックとして選択された上述の一つ以上のブロック内の有効データを、一つ以上のGCディスティネーションブロックにコピーする。
NANDインタフェース13は、NAND型フラッシュメモリ5を制御するように構成されたNAND制御回路として機能する。NANDインタフェース13とNAND型フラッシュメモリ5との間を相互接続するインタフェースとしては、Toggle、またはOpen NAND Flash Interface(ONFI)が使用されてもよい。NANDインタフェース13は、複数のチャンネルを介して、NAND型フラッシュメモリ5内の複数のNAND型フラッシュメモリチップにそれぞれ接続されていてもよい。
DRAMインタフェース14は、DRAM6を制御するように構成されたDRAM制御回路である。DRAM6の記憶領域の一部は、ライトバッファ(WB)31として機能する。また、DRAM6の記憶領域の他の部分は、アドレス変換テーブル32、システム管理情報33等を格納するために利用される。システム管理情報33は、例えば、NAND型フラッシュメモリ5内のブロック毎に有効データ量を示す情報、等を含んでいてもよい。フラッシュストレージデバイス3がDRAM6を有さない構成である場合には、コントローラ4のSRAM内の記憶領域の一部がライトバッファ(WB)31として機能してもよく、またSRAM内の記憶領域の他の部分がアドレス変換テーブル32、システム管理情報33等を格納するために利用されてもよい。
次に、ホスト2の構成について説明する。
ホスト2は、ホストソフトウェアを実行するプロセッサ(CPU)を含む。このホストソフトウェアには、アプリケーションソフトウェアレイヤ41、オペレーティングシステム(OS)42、ファイルシステム43等が含まれていてもよい。
一般に知られているように、オペレーティングシステム(OS)42は、ホスト2全体を管理し、ホスト2内のハードウェアを制御し、アプリケーションがハードウェアおよびフラッシュストレージデバイス3を使用することを可能にするための制御を実行するように構成されたソフトウェアである。
ファイルシステム43は、ファイルの操作(作成、保存、更新、削除等)のための制御を行うために使用される。ファイルシステム43は、システムデータ管理部43Aを含む。
システムデータ管理部43Aは、システムデータタグを特定の値に設定することによって、ライトデータがシステムデータ特性を有することをフラッシュストレージデバイス3に通知する。
様々なアプリケーションソフトウェアがアプリケーションソフトウェアレイヤ41上で走ることができる。アプリケーションソフトウェアレイヤ41がデータのリードまたはライトのようなリクエストをフラッシュストレージデバイス3に送出することが必要な時、アプリケーションソフトウェアレイヤ41は、OS42にそのリクエストを送出する。OS42はそのリクエストをファイルシステム43に送出する。ファイルシステム43は、そのリクエストを、コマンド(リードコマンド、ライトコマンド等)にトランスレートする。ファイルシステム43は、コマンドを、フラッシュストレージデバイス3に送出する。
フラッシュストレージデバイス3に書き込むべきライトデータがシステムデータであるならば、ファイルシステム43のシステムデータ管理部43Aは、ライトデータがシステムデータ特性を有するデータであることを示す特定の値のシステムデータタグをフラッシュストレージデバイス3に送出する。
フラッシュストレージデバイス3に送出されるシステムデータタグは、ホスト2からフラッシュストレージデバイス3に送出されるライトコマンド内に含まれていてもよいし、ライトコマンドの直前にホスト2からフラッシュストレージデバイス3に送出される特定のコマンド内に含まれていてもよい。
フラッシュストレージデバイス3からのレスポンスが受信された際、ファイルシステム43は、そのレスポンスをOS42に送出する。OS42は、そのレスポンスをアプリケーションソフトウェアレイヤ41に送出する。
ホスト2から受信されるライトデータの更新頻度は、データ毎に個々に異なっている。コントローラ4は、このコントローラ4内部の独自の判定基準のみを使用して、個々のライトデータの更新頻度を判定することもできる。
しかし、もしコントローラ4が独自の判定基準のみを使用してライトデータの更新頻度を判定したならば、ライトデータの実際の更新頻度とコントローラ4内の判定基準との間のミスマッチが生じる場合がある。この場合、例えば、更新頻度が高いデータが、コントローラ4によって更新頻度が低いデータであると判定されてしまい、更新頻度が低いデータ用のブロックに書き込まれてしまう場合もある。
以下、図2〜図7を参照して、コントローラ4が独自の判定基準のみを使用して個々のデータの更新頻度を判定する場合の処理の例について説明する。
以下では、ホスト2から受信されるライトデータのサイズが閾値以下であるか否かに基づいて、このライトデータが、更新頻度が高いデータであるか否かを判定する場合を例示する。
図2のフローチャートは、ホスト2から受信されるライトコマンドによって指定されるデータサイズに基づいて、ホスト2から受信されるライトデータが書き込まれるべき書き込み先ブロックを決定する処理の手順を示す。以下では、閾値が64Kバイト(64KB)である場合を例示して説明する。
コントローラ4は、ライトコマンドによって指定されるデータサイズに基づき、ホスト2から受信されたライトデータのサイズが64KB以下であるか否かを判定する(ステップS11)。
ライトデータのサイズが64KB以下であるならば(ステップS11のYES)、コントローラ4は、このライトデータは更新頻度が高いデータであると判定し、更新頻度が高いデータ用のブロック(書き込み先ブロック)にこのライトデータを書き込む(ステップS12)。
一方、ライトデータのサイズが64KBを超えているならば(ステップS11のNO)、コントローラ4は、このライトデータは更新頻度が低いデータであると判定し、更新頻度が低いデータ用の別のブロック(別の書き込み先ブロック)にこのライトデータを書き込む(ステップS12)。
図3は、ライトデータのサイズに基づいて、更新頻度が高いデータ用のブロックまたは更新頻度が低いデータ用のブロックにライトデータを選択的に書き込む動作の例を示す。書き込み先ブロックBLK1、BLK11の各々における1マスは、32Kバイト(32KB)の記憶領域を表している。
ホスト2は、書き込むべきライトデータのサイズを示す情報を含むライトコマンドをコントローラ4に送出する。コントローラ4は、ホスト2から受信するライトコマンドによって指定されるライトデータのサイズに基づいて、このライトデータの更新頻度を判定する。例えば、コントローラ4は、64KB以下のサイズを有するライトデータを更新頻度が高いデータであると判定し、64KBを超えるサイズを有するライトデータを更新頻度が低いデータであると判定する。
そして、コントローラ4は、更新頻度が高いデータであると判定されたライトデータを、更新頻度が高いデータ用のブロック(ここでは、書き込み先ブロックBLK1)に書き込み、更新頻度が低いデータであると判定されたライトデータを、更新頻度が低いデータ用のブロック(ここでは、書き込み先ブロックBLK11)に書き込む。
NAND型フラッシュメモリ5においては、データが既に書き込まれているブロック内の領域に新たなデータを直接上書きすることができない。そのため、上述したように、コントローラ4は、既に書き込まれているデータを更新する場合には、そのブロック内または別ブロックの未書き込み領域に新たなデータを書き込み、そして以前のデータを無効データとして扱う、という動作を実行する。
したがって、更新頻度が高いデータ用のブロックにおいては、データ更新によって無効データの量が増える。
図4には、更新頻度の高いデータ用のブロックにフラグメンテーションが起こる例を示す。上述したように、書き込み先ブロックBLK1、BLK11の各々における1マスは、32KBの記憶領域を表している。
図4では、コントローラ4が、32KBのデータサイズを有するライトデータの書き込みを要求するライトコマンドをホスト2から受信した場合が想定されている。コントローラ4は、この32KBのデータサイズを有するライトデータを更新頻度が高いデータであると判定する。そして、コントローラ4、更新頻度が高いデータ用のブロック(ここでは、書き込み先ブロックBLK1)にこの32KBのデータサイズを有するライトデータを書き込む。このライトデータが、既に書き込まれているデータの更新データである場合、以前のデータ、つまりこのライトデータの論理アドレスと同じ論理アドレスを有する32KB分のデータは、無効データとなる。更新頻度の高いデータについては、そのデータの書き換えが頻繁に発生する。したがって、書き込み先ブロックBLK1においては、データ更新によって無効データの量が増え、フラグメンテーションが起こりやすくなる。
一方、更新頻度が低いデータ用のブロック(ここでは、書き込み先ブロックBLK11)に関しては、更新頻度が低いデータだけが書き込み先ブロックBLK11に書き込まれる限り、ブロックBLK1に比べて無効化されるデータの量は少ないので、ブロックBLK1に比べてフラグメンテーションは起こりにくい。
しかし、まれに、データサイズが大きいにも関わらず、更新頻度が高いデータがホスト2から受信され、更新頻度が低いデータ用のブロックに書き込まれる場合がある。
図5は、更新頻度が低いデータ用のブロックに更新頻度が高いデータが書き込まれる例を示す。
図5では、128KBのサイズを有し且つ更新頻度が高いライトデータがホスト2から受信された場合が想定されている。
この場合、コントローラ4は、このライトデータを更新頻度が低いデータであると判定し、更新頻度が低いデータ用のブロック(ここでは、書き込み先ブロックBLK11)に書き込む。
図6は、図5で書き込まれた128KBのデータサイズを有するデータの更新データが、更新頻度が低いデータ用のブロック(ここでは、書き込み先ブロックBLK11)に書き込まれることによって、フラグメンテーションが起こる例を示す。
図6では、コントローラが、128KBのデータサイズを有するライトデータの書き込みを要求するライトコマンドをホスト2から受信した場合が想定されている。コントローラ4は、この128KBのデータサイズを有するライトデータを更新頻度が低いデータであると判定する。そして、コントローラ4、更新頻度が低いデータ用のブロック(ここでは、書き込み先ブロックBLK11)にこの128KBのデータサイズを有するライトデータを書き込む。このライトデータは図5で書き込まれた128KBのデータサイズを有するデータの更新データであるので、つまりこのライトデータは図5で書き込まれたデータと同じ論理アドレスを有しているので、このライトデータが書き込み先ブロックBLK11に書き込まれることによって、図5で書き込まれた128KBのデータサイズを有するデータは無効データとなる。
このように、更新頻度が低いデータ用のブロックに更新頻度が高いデータが書き込まれると、更新頻度が低いデータ用のブロックに既に書き込まれている以前のデータが無効データとなり、更新頻度が低いデータ用のブロックにフラグメンテーションが起こる。このため、更新頻度が低いデータ用のブロックに更新頻度が高いデータが書き込まれると、更新頻度が低いデータ用のブロックに書き込むことが可能な有効データの量が減少する結果となる。加えて、ブロック内の有効データを新しいブロックにコピーする動作(例えばGC動作)が実行される頻度も増加されるので、フラッシュストレージデバイス3の性能低下、ライトアンプリフィケーションファクタの増大が引き起こされる。ライトアンプリフィケーションファクタ(WAF)は、以下のように定義される。
WAF=「フラッシュストレージデバイスにライトされたデータの総量」 / 「ホストからフラッシュストレージデバイスにライトされたデータの総量」
「フラッシュストレージデバイスにライトされたデータの総量」は、ホストからフラッシュストレージデバイスにライトされたデータの総量とGC等によって内部的にフラッシュストレージデバイスにライトされたデータの総量との和に相当する。
「フラッシュストレージデバイスにライトされたデータの総量」は、ホストからフラッシュストレージデバイスにライトされたデータの総量とGC等によって内部的にフラッシュストレージデバイスにライトされたデータの総量との和に相当する。
WAFの増加は、NAND型フラッシュメモリ5内のブロックそれぞれの書き換え回数(プログラム/イレーズサイクルの数)の増加を引き起こし、フラッシュストレージデバイス3の寿命低下の要因となる。
一般に、システムデータのサイズは比較的小さいが、最近では、例えば、多様な情報を含む大きなサイズを有するログ、または多様な情報を含む大きなサイズを有するメタデータといった、大きなサイズのシステムデータが使用されるケースもある。また、システムデータの多くは頻繁に更新されるケースが多い。
したがって、このような大きなサイズを有するシステムデータは、データサイズが大きく且つ更新頻度が高いデータの一種類である。
図7は、更新頻度が高いデータ用のブロックと更新頻度が低いデータ用のブロックとの双方に対して実行されるGC動作の例を示す。
図7の左部は、更新頻度が高いデータ用の幾つかのブロックに対して施されるGC動作を示している。
ここでは、更新頻度が高いデータ用のブロックとして使用されていたブロックBLK1、BLK2がGC動作が施されるべきブロック(GCソースブロック)として選択され、これらブロックBLK1、BLK2内の有効データが、GCディスティネーションブロックとして選択された新しいブロック(ここでは、ブロックBLK101)にコピーされる場合が例示されている。
図7の右部は、更新頻度が低いデータ用の幾つかのブロックに対して施されるGC動作を示している。
更新頻度が低いデータ用のブロックそれぞれに更新頻度が高いデータが書き込まれると、これらブロック内の有効データ量が減少してフラグメンテーションが起こる。このため、これらブロックもGC動作が施されるべきGCソースブロックとして選択される可能性がある。
図7の右部では、更新頻度が低いデータ用のブロックBLK11および更新頻度が低いデータ用のブロックBLK12がGCソースブロックとして選択され、これらブロックBLK11、BLK12内の有効データが、GCディスティネーションブロックとして選択された新しいブロック(ここでは、ブロックBLK201、ブロックBLK202)にコピーされる場合が例示されている。
図2〜図7に関する説明から理解されるように、もしコントローラ4が独自の判定基準のみを使用してライトデータの更新頻度を判定したならば、データサイズが大きいにも関わらず更新頻度が高いデータが、更新頻度が低いデータ用のブロックに書き込まれてしまう。この結果、更新頻度が低いデータ用のブロックにフラグメンテーションが起き、更新頻度が低いデータ用のブロックに書き込むことが可能な有効データの量が減少する。
また、更新頻度が高いデータは、更新頻度が低いデータ用のブロックに本来書き込まれるべきでないデータである。したがって、更新頻度が高いデータが更新頻度が低いデータ用のブロックに書き込まれたならば、このデータが更新頻度が高いデータ用のブロックに書き込まれた場合に比し、更新頻度が低いデータ用のブロックへのデータ書き込み量が増加される結果となる。これにより、更新頻度が低いデータ用の現在の書き込み先ブロックがより速く消費されてしまうことになる。
更新頻度が低いデータ用のブロックに書き込み可能なデータ量の減少、更新頻度が低いデータ用のブロックへのデータ書き込み量の増加はGCやウェアレベリングが実行される頻度を増加させ、フラッシュストレージデバイス3の性能低下を引き起こす要因となる。
第1実施形態では、コントローラ4は、ホスト2からのシステムデータタグによってシステムデータ特性を有するデータであると指定されたライトデータを、そのデータサイズとは無関係に、更新頻度が高いデータであると判定する。したがって、たとえ大きなデータサイズを有し且つ更新頻度が高いライトデータ(例えば大きなサイズを有するシステムデータ等)の書き込みがホスト2によって要求された場合であっても、コントローラ4は、このライトデータを更新頻度が高いデータ用のブロックに書き込むことができる。このため、更新頻度が低いデータ用のブロックに本来書き込まれるべきでないデータ(例えば大きなサイズを有するシステムデータ等)が更新頻度が低いデータ用のブロックに書き込まれることを防止することができる。よって、更新頻度が低いデータ用のブロックに書き込み可能なデータ量の減少、更新頻度が低いデータ用のブロックへのデータ書き込み量の増加を防ぐことができので、ストレージ容量の利用効率を改善でき、またフラッシュストレージデバイス3の性能低下を防ぐことができる。
次に、システムデータタグを実装するための構成について説明する。
第1実施形態のフラッシュストレージデバイス3は、ユニバーサルフラッシュストレージ(UFS)規格に準拠するストレージデバイスとして実現され得る。この場合、上述のシステムデータタグは、UFS規格で規定されたライトコマンドに含まれるグループナンバーフィールドによって表される。グループナンバーフィールドは、「グループナンバー」または「グループナンバー領域」と称されることもある。コントローラ4は、このグループナンバーフィールドの値をチェックすることによって、ホスト2からのライトデータが、システムデータ特性を有するデータであるか否か、つまり更新頻度が高いデータであるか否か、を判定する。
図8は、第1実施形態のフラッシュストレージデバイス3が準拠するUFS2.1規格で規定されたライトコマンド(例えばWRITE(10)コマンド)を示す。
フラッシュストレージデバイス3はUFS2.1規格に準拠したストレージデバイスと機能し得、UFS2.1規格で規定された様々なコマンドを処理することができる。
図8に示されるWRITE(10)コマンドは、フラッシュストレージデバイス3にデータの書き込みを要求するコマンドである。WRITE(10)コマンドは、オペレーションコード(OPERATION CODE)、論理ブロックアドレス(LOGICAL BLOCK ADDRESS)、転送長(TRANSFER LENGTH)に加え、グループナンバー(GROUP NUMBER)フィールドを含む。
グループナンバー(GROUP NUMBER)フィールドは、書き込むべきライトデータがシステムデータ特性を有する、またはコンテクストIDに関連付けられていることをターゲットデバイスに通知するために使用される。
なお、論理ブロックアドレス(LOGICAL BLOCK ADDRESS)はライトデータが書き込まれるべき最初の論理アドレスを示し、転送長(TRANSFER LENGTH)はライトデータのサイズ(長さ)を示す。
図9は、図8のライトコマンドに含まれるグループナンバーフィールドに設定されるシステムデータタグを示す。
グループナンバーフィールドのサイズは5ビットである。グループナンバーフィールドの値00000bはデフォルトの値であり、コンテクストIDまたはシステムデータ特性がライトデータに関連付けられていないことを示す。グループナンバーフィールドの値10000bは、ライトデータがシステムデータ特性を有することを示すシステムデータタグとして使用される。グループナンバーフィールドの値10001bから11111bはリザーブ値(定義されていない値)である。
図10のフローチャートは、特定の値を有するシステムデータタグがグループナンバーフィールドに設定されているか否かに基づいてフラッシュストレージデバイス3によって実行される書き込み処理の手順を示す。
この特定の値を有するシステムデータタグは、ライトデータがシステムデータ特性を有するデータであることを示す。
フラッシュストレージデバイス3のコントローラ4がホスト2からライトコマンドを受信した場合、コントローラ4は、このライトコマンドに含まれるシステムデータタグの値をチェックする。UFS規格においては、システムデータタグは、UFS規格で規定されたライトコマンドに含まれるグループナンバーフィールドによって表される。したがって、コントローラ4は、受信されたライトコマンド内のグループナンバーフィールドを参照し、特定の値(例えば10000b)を有するシステムデータタグがグループナンバーフィールドに設定されているか否かを判定する(ステップS21)。
特定の値(例えば10000b)を有するシステムデータタグがグループナンバーフィールドに設定されているならば、つまりシステムデータタグによってライトデータがシステムデータ特性を有するデータであると指定されたならば(ステップS21のYES)、コントローラ4は、このライトコマンドに対応するライトデータが更新頻度が高いデータであると判定する。そして、コントローラ4は、更新頻度が高いデータ用のブロックにライトデータを書き込む(ステップS22)。ステップS22では、コントローラ4は、更新頻度が高いデータ用のブロックにライトデータをSLCモードで書き込んでもよい。
特定の値(例えば10000b)を有するシステムデータタグがグループナンバーフィールドに設定されていないならば、つまりシステムデータタグによってライトデータがシステムデータ特性を有するデータであると指定されなかったならば(ステップS21のNO)、コントローラ4は、ライトコマンドによって指定されるデータサイズに基づいて、ライトデータのサイズが閾値(ここでは、64KB)以下であるか否かを判定する(ステップS23)。
ライトデータのサイズが64KB以下であるならば(ステップS23のYES)、コントローラ4は、このライトデータは更新頻度が高いデータであると判定し、更新頻度が高いデータ用のブロックにこのライトデータを書き込む(ステップS22)。上述したように、ステップS22では、コントローラ4は、更新頻度が高いデータ用のブロックにライトデータをSLCモードで書き込んでもよい。
一方、ライトデータのサイズが64KBを超えているならば(ステップS23のNO)、コントローラ4は、このライトデータは更新頻度が低いデータであると判定し、更新頻度が低いデータ用のブロックにこのライトデータを書き込む(ステップS24)。ステップS24では、コントローラ4は、更新頻度が低いデータ用のブロックにライトデータをTLCモードで書き込んでもよい。
このように、コントローラ4は、ホスト2からのシステムデータタグによってシステムデータ特性を有するデータであると指定されたライトデータを更新頻度が高いデータとして扱い、更新頻度が高いデータ用のブロックに書き込むことで、更新頻度が低いデータ用のブロックに書き込み可能なデータ量の減少、更新頻度が低いデータ用のブロックへのデータ書き込み量の増加を防ぐことができる。
なお、図10のフローチャートでは、システムデータタグによってライトデータがシステムデータ特性を有するデータであると指定されなかったならば、ライトコマンドによって指定されるデータサイズに基づいて、このライトデータを、更新頻度が低いデータ用のブロックまたは更新頻度が低いデータ用のブロックに振り分ける処理を実行する場合について説明したが、このデータサイズに基づく振り分ける処理は必ずしも実行しなくてもよい。この場合、コントローラ4は、システムデータタグによってシステムデータ特性を有するデータであると指定されなかったライトデータを、更新頻度が低いデータ用のブロックに書き込めばよい。
図11のフローチャートは、グループナンバーフィールドの最上位ビットの値に基づいてフラッシュストレージデバイス3によって実行される書き込み処理の手順を示す。
上述したように、グループナンバーフィールドのデフォルト値は00000bであり、グループナンバーフィールドの値10000bがシステムデータタグを示し、且つグループナンバーフィールドのリザーブ値10001b〜11111bは基本的には使用されないので、コントローラ4は、グループナンバーフィールドの最上位ビットのみをチェックすることによって、書き込むべきライトデータがシステムデータ特性を有するか否かを判定してもよい。
すなわち、コントローラ4がホスト2からライトコマンドを受信した場合、コントローラ4は、このライトコマンドに含まれるシステムデータタグの値をチェックする。この場合、コントローラ4は、受信されたライトコマンド内のグループナンバーフィールドの最上位ビットが1であるか否かを判定する(ステップS21’)。
最上位ビットが1であるならば、つまりシステムデータタグによってライトデータがシステムデータ特性を有するデータであると指定されたとみなすことができるならば(ステップS21’のYES)、コントローラ4は、このライトコマンドに対応するライトデータが更新頻度が高いデータであると判定し、図10で説明したステップS22の処理を実行する。
最上位ビットが1でないならば、つまりシステムデータタグによってライトデータがシステムデータ特性を有するデータであると指定されたとみなすことができないならば(ステップS21’のNO)、コントローラ4は、図10で説明したステップS23の処理を実行し、そしてライトデータのサイズに応じて図10で説明したステップS22またはステップS24の処理を実行する。
なお、図11のフローチャートでは、ライトデータがシステムデータ特性を有するデータであると指定されたとみなすことができなかったならば、ライトコマンドによって指定されるデータサイズに基づいて、このライトデータを、更新頻度が低いデータ用のブロックまたは更新頻度が低いデータ用のブロックに振り分ける処理を実行する場合について説明したが、このデータサイズに基づく振り分ける処理は必ずしも実行しなくてもよい。この場合、コントローラ4は、システムデータ特性を有するデータであると指定されたとみなすことができなかったライトデータを、更新頻度が低いデータ用のブロックに書き込めばよい。
図12のフローチャートは、グループナンバーフィールドの5ビットの値に基づいてフラッシュストレージデバイス3によって実行される書き込み処理の手順を示す。
コントローラ4がホスト2からライトコマンドを受信した場合、コントローラ4は、このライトコマンドに含まれるシステムデータタグの値をチェックする。この場合、コントローラ4は、受信されたライトコマンド内のグループナンバーフィールドの5ビットの値が10000bであるか否かを判定する(ステップS21”)。
グループナンバーフィールドの5ビットの値が10000bであるならば、つまりシステムデータタグによってライトデータがシステムデータ特性を有するデータであると指定されたとみなすことができるならば(ステップS21”のYES)、コントローラ4は、このライトコマンドに対応するライトデータが更新頻度が高いデータであると判定し、図10で説明したステップS22の処理を実行する。
グループナンバーフィールドの5ビットの値が10000bでないならば、つまりシステムデータタグによってライトデータがシステムデータ特性を有するデータであると指定されたとみなすことができないならば(ステップS21”のNO)、コントローラ4は、図10で説明したステップS23の処理を実行し、そしてライトデータのサイズに応じて図10で説明したステップS22またはステップS24の処理を実行する。
なお、図12のフローチャートでは、ライトデータがシステムデータ特性を有するデータであると指定されたとみなすことができなかったならば、ライトコマンドによって指定されるデータサイズに基づいて、このライトデータを、更新頻度が低いデータ用のブロックまたは更新頻度が低いデータ用のブロックに振り分ける処理を実行する場合について説明したが、このデータサイズに基づく振り分ける処理は必ずしも実行しなくてもよい。この場合、コントローラ4は、システムデータ特性を有するデータであると指定されたとみなすことができなかったライトデータを、更新頻度が低いデータ用のブロックに書き込めばよい。
図13は、更新頻度が高く且つデータサイズが大きいデータを更新頻度が高いデータ用のブロックに書き込む動作を示す。
ここでは、グループナンバーフィールドの最上位ビットに基いてデータの更新頻度を判定する場合を例示する。
128KBのサイズを有するシステムデータをホスト2がフラッシュストレージデバイス3に書き込むことを望む場合、ホスト2は、このデータがシステムデータ特性を有することをフラッシュストレージデバイス3に通知するために、グループナンバーフィールドの最上位ビットを“1”にする。コントローラ4は、グループナンバーフィールドの最上位ビットが“1”である場合、ホスト2からのライトデータは更新頻度の高いデータであると判定する。そして、コントローラ4は、更新頻度が高いデータ用のブロック(ここでは、書き込み先ブロックBLK1)にこのライトデータを書き込む。
図14は、図13で書き込まれたデータを更新する動作を示す。
ホスト2が、図13で書き込まれたデータの更新データ(例えば、128KBのサイズを有するシステムデータ)をフラッシュストレージデバイス3に書き込むことを望む場合、ホスト2は、グループナンバーフィールドの最上位ビットを“1”にする。コントローラ4は、グループナンバーフィールドの最上位ビットが“1”である場合、ホスト2からのライトデータ(更新データ)は更新頻度の高いデータであると判定する。そして、コントローラ4は、更新頻度が高いデータ用のブロック(ここでは、書き込み先ブロックBLK1)にこのライトデータを書き込む。
このライトデータは図13で書き込まれたデータの更新データであるので、図13で書き込まれたデータは無効データとなる。
図15は、更新頻度が高いデータ用のブロック群にフラグメンテーションが起こり且つ更新頻度が低いデータ用のブロックにフラグメンテーションが起こらなかったケースに対応するGC動作を示す。
第1実施形態では、ライトデータのサイズに関係なく、ホスト2によってシステムデータ特性を有することが指定されたライトデータは、更新頻度が高いデータ用のブロックに書き込まれる。したがって、たとえライトデータが大きなサイズを有する場合であっても、このライトデータがシステムデータ特性を有するならば、このライトデータは、更新頻度が高いデータ用のブロックに書き込まれる。したがって、更新頻度が低いデータ用のブロック(ここでは、ブロックBLK11)においては、データ更新に伴うデータの無効化によるフラグメンテーションが起こりにくくなる。よって、更新頻度が高いデータ用のブロック群(ここでは、ブロックBLK1、BLK2)はGCの対象となるものの、更新頻度が低いデータ用のブロック(ここでは、ブロックBLK11)はGCの対象となりにくくなる。
図16は、アクティブブロックプールとフリーブロックプールと2つの書き込み先ブロックとの関係を示す。
ブロックの状態は、有効データを格納しているアクティブブロックと、有効データを格納していないフリーブロックとに大別される。アクティブブロックである各ブロックは、アクティブブロックプール71と称されるリストによって管理される。一方、フリーブロックである各ブロックは、フリーブロックプール72と称されるリストによって管理される。
コントローラ4は、フリーブロックプール72から選択された一つのフリーブロックを更新頻度が高いデータ用の書き込み先ブロックBLK1として割り当て、フリーブロックプール72から選択された別の一つのフリーブロックを更新頻度が低いデータ用の書き込み先ブロックBLK11として割り当てる。この場合、コントローラ4は、まず、選択された各フリーブロックに対する消去動作を実行し、選択された各フリーブロックを、データの書き込みが可能な消去状態にする。
コントローラ4は、更新頻度が高いデータ用の書き込み先ブロックBLK1にデータを例えばSLCモードで書き込み、更新頻度が低いデータ用の書き込み先ブロックBLK11にデータを例えばTLCモードで書き込む。
更新頻度が高いデータ用の現在の書き込み先ブロックBLK1の全体がホスト2からのライトデータで満たされて書き込み先ブロックBLK1に未書き込み領域がなくなると、コントローラ4は、この書き込み先ブロックBLK1をアクティブブロックプール71によって管理する。そして、コントローラ4は、フリーブロックプール72から新たな一つのフリーブロックを選択し、この選択したフリーブロックを更新頻度が高いデータ用の新たな書き込み先ブロックとして割り当てる。
同様に、更新頻度が低いデータ用の現在の書き込み先ブロックBLK11の全体がホスト2からのライトデータで満たされて書き込み先ブロックBLK11に未書き込み領域がなくなると、コントローラ4は、更新頻度が低いデータ用の現在の書き込み先ブロックBLK11をアクティブブロックプール71によって管理する。そして、コントローラ4は、フリーブロックプール72から新たな一つのフリーブロックを選択し、この選択したフリーブロックを更新頻度が低いデータ用の新たな書き込み先ブロックとして割り当てる。
アクティブブロックプール71内の各ブロック内の少なくとも一部の記憶領域には有効データが保持されている。このアクティブブロックプール71には、第1のブロック群(ブロックグループ#1)と、第2のブロック群(ブロックグループ#2)とが存在する。第1のブロック群は更新頻度が高いデータ用の書き込み先ブロックとして使用されていたブロックの集合であり、第2のブロック群は更新頻度が低いデータ用の書き込み先ブロックとして使用されていたブロックの集合である。アクティブブロックプール71内のあるブロック内の全ての有効データが、データ更新、アンマップ/トリム/イレーズコマンド、GC等によって無効化されると、コントローラ4は、このブロックをフリーブロックプール72によって管理する。
図17のフローチャートは、GC動作の手順を示す。
コントローラ4は、例えばフリーブロックプール72内の残りフリーブロックの数が閾値以下である場合、GC動作を実行する。
GC動作では、コントローラ4は、アクティブブロックプール71内のブロック(アクティブブロック)から、GCが施されるべき幾つかのGCソースブロックを選択する。この場合、コントローラ4は、アクティブブロックプール71によって管理されているブロックの中から、有効データ量が少ない一つ以上のブロックをGCソースブロックとして選択する(ステップS31)。ステップS31では、コントローラ4は、最も有効データ量の少ない一つ以上のブロックをGCソースブロックとして選択してもよい。アクティブブロックプール71には第1のブロック群と第2のブロック群とが含まれているが、コントローラ4は、第1のブロック群/第2のブロック群を区別することなく、最も有効データ量の少ない一つ以上のブロックを探せばよい。
上述したように、第1実施形態では、更新頻度が高いデータ用の各ブロックに対するデータ書き込みはメモリセル当たりにmビットのデータを書き込むプログラムモード(例えばSLCモード)を用いて実行され、更新頻度が低いデータ用の各ブロックに対するデータ書き込みはメモリセル当たりにn(n>m)ビットのデータを書き込むプログラムモード(例えばTLC)を用いて実行される。
したがって、更新頻度が高いデータ用の各ブロックに書き込み可能なデータの総量は更新頻度が低いデータ用の各ブロックに書き込み可能なデータの総量よりも少ない。この結果、基本的には、更新頻度が高いデータ用の各ブロックの有効データ量も、更新頻度が低いデータ用の各ブロックより少なくなる。よって、更新頻度が高いデータ用のブロックが優先的にGCソースブロックとして選択されるので、更新頻度が低いデータ用のブロックを、よりGCの対象となりにくくすることができる。
そして、コントローラ4は、これら選択されたGCソースブロック内の有効データのみを、コピー先ブロックであるGCディスティネーションブロックにコピーする(ステップS32)。GC動作によって無効データのみとなったGCソースブロックはフリーブロックプール72によって管理される。
以上のように、本第1実施形態によれば、ホスト2からのシステムデータタグによってシステムデータ特性を有するデータであると指定されたライトデータは、更新頻度が高いデータ用のブロックに書き込まれる。また、ホスト2からのシステムデータタグによってシステムデータ特性を有するデータであると指定されなかったライトデータは、更新頻度が低いデータ用のブロックに書き込まれる。このように、ホスト2からのシステムデータタグによって指定されるシステムデータ特性を有するデータを更新頻度が高いデータであると認識することにより、更新頻度が高いデータと更新頻度が低いデータとを異なるブロックにそれぞれ書き込むことが可能となる。この結果、更新頻度が低いデータ用のブロックに本来書き込まれるべきでない高更新頻度のデータ(例えば、大きなサイズを有し且つ更新頻度が高いデータ等)が、更新頻度が低いデータ用のブロックに書き込まれてしまう、ということを防止することができる。よって、更新頻度が低いデータ用のブロックに書き込み可能なデータ量の減少、更新頻度が低いデータ用のブロックへのデータ書き込み量が増加を防ぐことができので、ストレージ容量の利用効率を改善でき、またフラッシュストレージデバイス3の性能低下を防ぐことができる。
また、UFS規格のライトコマンド内のグループナンバーフィールドの値をシステムタグとして使用できるので、UFS規格に準拠したシステムにおけるストレージ容量の利用効率を改善することができる。
また、第1実施形態では、ホスト2からのシステムデータタグによってシステムデータ特性を有するデータ(システムデータ)であると指定されたライトデータは、第1のプログラムモード(例えばSLCモード)でNAND型フラッシュメモリ5に書き込まれてもよく、またシステムデータ特性を有するデータであると指定されなかったライトデータは、第2のプログラムモード(例えばTLCモード)でNAND型フラッシュメモリ5に書き込まれてもよい。この構成は、例えば、システムデータ用の書き込み先ブロックに第1のプログラムモードを適用し、他のデータ用の書き込み先ブロックに第2のプログラムモードを適用することによって実現することができる。このような構成により、システムデータが書き込まれた各ブロックの許容プログラム/イレーズサイクルの数を増やすことができるので、システムデータの信頼性を高めることができる。
なお、WRITE(10)コマンドとは別に、システムデータ特性を有するライトデータを指定するシステムデータタグを通知するための新規コマンドを定義し、このコマンドを使用して、ライトデータがシステムデータ特性を有するデータであるか否かをホスト2からフラッシュストレージデバイス3に通知してもよい。
(第2実施形態)
第1実施形態では、UFS規格で指定されたライトコマンド内のグループナンバーフィールドをシステムデータタグとして使用する場合を説明したが、第2実施形態では、未定義のリザーブ領域がシステムデータタグとして使用される。
第1実施形態では、UFS規格で指定されたライトコマンド内のグループナンバーフィールドをシステムデータタグとして使用する場合を説明したが、第2実施形態では、未定義のリザーブ領域がシステムデータタグとして使用される。
第2実施形態に係るフラッシュストレージデバイス3のハードウェア構成は第1実施形態のフラッシュストレージデバイス3と同様であり、第2実施形態と第1実施形態とでは、システムデータタグ(高更新頻度/低更新頻度を通知するための更新頻度情報)の実装形態のみが異なる。以下、第1実施形態と異なる点のみを説明する。
図18は、システムデータタグとして使用されるリザーブ領域の例を示す。
図18に示されているように、UFS2.1規格で規定されたライトコマンド(例えばWRITE(10)コマンド)は、未定義のリザーブ(Reserved)領域を含む。例えば、ホスト2がシステムデータの書き込みを要求する場合、ホスト2は、例えば、リザーブ領域の最上位ビットを“1”にセットする。リザーブ領域の最上位ビットは、システムデータタグとして使用されうる。換言すれば、リザーブ領域の最上位ビットは、ライトデータがシステムデータであるか否かを指定する情報として使用される。
コントローラ4は、ライトコマンド内のこのリザーブ領域の最上位ビットが“1”である場合、このライトデータをシステムデータ特性を有するデータとして、つまり更新頻度が高いデータとして扱う。
図19のフローチャートは、リザーブ領域の値に基づいて実行される書き込み処理の手順を示す。
コントローラ4がホスト2からライトコマンドを受信した場合、コントローラ4は、このライトコマンドに含まれるリザーブ領域の値をチェックする。この場合、コントローラ4は、受信されたライトコマンド内のリザーブ領域の最上位ビットが1であるか否かを判定する(ステップS41)。
リザーブ領域の最上位ビットが1であるならば、つまりシステムデータタグによってライトデータがシステムデータ特性を有するデータであると指定されたならば(ステップS41のYES)、コントローラ4は、このライトコマンドに対応するライトデータが更新頻度が高いデータであると判定する。そして、コントローラ4は、更新頻度が高いデータ用のブロックにライトデータを書き込む(ステップS42)。ステップS42では、コントローラ4は、更新頻度が高いデータ用のブロックにライトデータをSLCモードで書き込んでもよい。
リザーブ領域の最上位ビットが1ではないならば、つまりシステムデータタグによってライトデータがシステムデータ特性を有するデータであると指定されなかったならば(ステップS41のNO)、コントローラ4は、ライトデータのサイズが閾値(ここでは、64KB)以下であるか否かを判定する(ステップS43)。
ライトデータのサイズが64KB以下であるならば(ステップS43のYES)、コントローラ4は、このライトデータは更新頻度が高いデータであると判定し、更新頻度が高いデータ用のブロックにこのライトデータを書き込む(ステップS42)。上述したように、ステップS42では、コントローラ4は、更新頻度が高いデータ用のブロックにライトデータをSLCモードで書き込んでもよい。
一方、ライトデータのサイズが64KBを超えているならば(ステップS43のNO)、コントローラ4は、このライトデータは更新頻度が低いデータであると判定し、更新頻度が低いデータ用のブロックにこのライトデータを書き込む(ステップS44)。ステップS44では、コントローラ4は、更新頻度が低いデータ用のブロックにライトデータをTLCモードで書き込んでもよい。
なお、図19のフローチャートでは、ライトデータがシステムデータ特性を有するデータであると指定されなかったならば、ライトコマンドによって指定されるデータサイズに基づいて、このライトデータを、更新頻度が低いデータ用のブロックまたは更新頻度が低いデータ用のブロックに振り分ける処理を実行する場合について説明したが、このデータサイズに基づく振り分ける処理は必ずしも実行しなくてもよい。この場合、コントローラ4は、システムデータ特性を有するデータであると指定されなかったライトデータを、更新頻度が低いデータ用のブロックに書き込めばよい。
この第2実施形態においても、第1実施形態と同様に、更新頻度が高いデータが更新頻度が低いデータ用のブロックに書き込まれてしまう確率を低減でき、ストレージ容量の利用効率を改善することができる。
また、第2実施形態においても、第1実施形態で説明したGC動作を実行することができる。
(第3実施形態)
第1実施形態では、UFS規格で指定されたライトコマンド内のグループナンバーフィールドをシステムデータタグとして使用する場合を説明したが、第3実施形態では、eMMC規格で規定されたセット・ブロック・カウント・コマンド(CMD23)内のタグ・リクエストがシステムデータタグとして使用される。
第1実施形態では、UFS規格で指定されたライトコマンド内のグループナンバーフィールドをシステムデータタグとして使用する場合を説明したが、第3実施形態では、eMMC規格で規定されたセット・ブロック・カウント・コマンド(CMD23)内のタグ・リクエストがシステムデータタグとして使用される。
第3実施形態に係るフラッシュストレージデバイス3のハードウェア構成は基本的には第1実施形態のフラッシュストレージデバイス3と同様であり、第3実施形態と第1実施形態とでは、第3実施形態に係るフラッシュストレージデバイス3がeMMC規格に準拠するストレージデバイスとして実現されており、CMD23内のタグ・リクエストがシステムデータタグとして使用される点が異なる。以下、第1実施形態と異なる点のみを説明する。
図20は、eMMC4.5規格で規定された拡張デバイス・スペシフィック・データ・レジスタ(Extended Device Specific Data register:Extended CSD)内のデータタグサポートフィールドを示す。
第3実施形態のフラッシュストレージデバイス3はeMMC4.5規格に準拠したストレージデバイスと機能し得、eMMC4.5規格で規定された様々なコマンドを処理することができる。
フラッシュストレージデバイス3は、図20に示されるExtended CSDを保持する。このExtended CSDには、ライトデータがシステムデータ特性を有することを指定する機能(システムデータタグメカニズム)を有効にするためのデータタグサポート(DATA_TAG_SUPPORT)フィールドを含む。ホスト2は、このデータタグサポート(DATA_TAG_SUPPORT)フィールドの値をチェックすることによって、システムデータタグメカニズムが有効であることを確認することができる。
図22は、eMMC規格で規定されたセット・ブロック・カウント・コマンド(CMD23)内のタグ・リクエストを示す。
CMD23は、例えば、ライトデータに関する情報をフラッシュストレージデバイス3に通知するために使用される。CMD23は、ライトコマンド(例えばCMD25)の直前にフラッシュストレージデバイス3に送出される。
CMD23は32ビットのサイズを有しており、その30ビット目のフィールド(Bit [29])がタグ・リクエストとして使用される。タグ・リクエストは、ライトデータがシステムデータ特性を有するデータであるか否かを示すシステムデータタグとして使用される。“1”のタグ・リクエストは、ライトデータがシステムデータ特性を有することを示す。
コントローラ4は、タグ・リクエスト(システムデータタグ)に基づいて、ホスト2からのライトデータが高い更新頻度を有するか否かを判定する。タグ・リクエスト(システムデータタグ)によってシステムデータ特性を有するデータであると指定されたライトデータに関しては、コントローラ4は、更新頻度が高いデータとして取り扱う。すなわち、コントローラ4は、タグ・リクエスト(システムデータタグ)によってシステムデータ特性を有するデータであると指定されたライトデータを更新頻度が高いデータであると判定し、更新頻度が高いデータを書き込むためのブロックにこのライトデータを書き込む。また、コントローラ4は、タグ・リクエスト(システムデータタグ)によってシステムデータ特性を有するデータであると指定されなかったライトデータを更新頻度が低いデータであると判定し、更新頻度が低いデータを書き込むための別のブロックにこのライトデータを書き込む。
図23のシーケンス図は、ホスト2とフラッシュストレージデバイス3とによって実行されるデータ書き込み処理の手順を示す。
フラッシュストレージデバイス3の電源がオンされた後、ホスト2は、フラッシュストレージデバイス3内のExtended CSDのデータタグサポート(DATA_TAG_SUPPORT)フィールドのBit[0](SYSTEM_DATA_TAG_SUPORT)をチェックして、システムデータタグメカニズムが有効であることを確認する。
ホスト2がシステムデータの書き込みを要求する場合、ホスト2は、タグ・リクエストが“1”に設定されたCMD23をフラッシュストレージデバイス3に送出し、そしてライトコマンド(例えばCMD25)をフラッシュストレージデバイス3に送出する。
フラッシュストレージデバイス3のコントローラ4がライトコマンド(例えばCMD25)を受信した後、コントローラ4は、CMD23のタグ・リクエストが“1”にセットされているか否かをチェックし、CMD23のタグ・リクエストが“1”にセットされているならば、ライトコマンドに応じて、ライトデータを更新頻度が高いデータ用のブロックに書き込む(ステップS52)。なお、CMD23のタグ・リクエストが“1”にセットされているか否かを判定する処理は、ライトコマンド(例えばCMD25)の受信前または受信後のどちらで実行してもよい。
図24のフローチャートは、CMD23内のタグ・リクエストの値に基づいて実行される書き込み処理の手順を示す。
コントローラ4はCMD23をホスト2から受信し(ステップS61)、そしてライトコマンド(例えばCMD25)をホスト2から受信する(ステップS62)。コントローラ4は、このライトコマンドの直前に受信したCMD23に含まれるタグ・リクエストの値をチェックする。この場合、コントローラ4は、タグ・リクエストの値が1であるか否かを判定する(ステップS63)。
タグ・リクエストの値が1であるならば、つまりタグ・リクエスト(システムデータタグ)によってライトデータがシステムデータ特性を有するデータであると指定されたならば(ステップS63のYES)、コントローラ4は、ライトデータが更新頻度が高いデータであると判定する。そして、コントローラ4は、更新頻度が高いデータ用のブロックにライトデータを書き込む(ステップS64)。ステップS64では、コントローラ4は、更新頻度が高いデータ用のブロックにライトデータをSLCモードで書き込んでもよい。
タグ・リクエストの値が1ではないならば、つまりタグ・リクエスト(システムデータタグ)によってライトデータがシステムデータ特性を有するデータであると指定されなかったならば(ステップS63のNO)、コントローラ4は、ライトデータのサイズが閾値(ここでは、64KB)以下であるか否かを判定する(ステップS65)。
ライトデータのサイズが64KB以下であるならば(ステップS65のYES)、コントローラ4は、このライトデータは更新頻度が高いデータであると判定し、更新頻度が高いデータ用のブロックにこのライトデータを書き込む(ステップS64)。上述したように、ステップS64では、コントローラ4は、更新頻度が高いデータ用のブロックにライトデータをSLCモードで書き込んでもよい。
一方、ライトデータのサイズが64KBを超えているならば(ステップS65のNO)、コントローラ4は、このライトデータは更新頻度が低いデータであると判定し、更新頻度が低いデータ用のブロックにこのライトデータを書き込む(ステップS66)。ステップS66では、コントローラ4は、更新頻度が低いデータ用のブロックにライトデータをTLCモードで書き込んでもよい。
なお、図24のフローチャートでは、タグ・リクエスト(システムデータタグ)によってライトデータがシステムデータ特性を有するデータであると指定されなかったならば、ライトコマンドによって指定されるデータサイズに基づいて、このライトデータを、更新頻度が低いデータ用のブロックまたは更新頻度が低いデータ用のブロックに振り分ける処理を実行する場合について説明したが、このデータサイズに基づく振り分ける処理は必ずしも実行しなくてもよい。この場合、コントローラ4は、タグ・リクエスト(システムデータタグ)によってシステムデータ特性を有するデータであると指定されなかったライトデータを、更新頻度が低いデータ用のブロックに書き込めばよい。
第3実施形態においても、第1実施形態と同様に、更新頻度が高いデータが更新頻度が低いデータ用のブロックに書き込まれてしまう確率を低減でき、ストレージ容量の利用効率を改善することができる。また、第3実施形態においては、eMMC規格のセット・ブロック・カウント・コマンド(CMD23)内のタグ・リクエストの値をシステムタグとして使用できるので、eMMC規格に準拠したシステムにおけるストレージ容量の利用効率を改善することができる。
また、第3実施形態においても、第1実施形態で説明したGC動作を実行することができる。
(第4実施形態)
第1、第2、第3実施形態では、コントローラ4が、ホスト2からのコマンド(ライトコマンド、またはCMD23)に含まれるシステムデータタグに基づいてライトデータがシステムデータであるか否かを判定する場合を説明したが、第4実施形態では、コントローラ4は、ホスト2とフラッシュストレージデバイス3との間を相互接続するインタフェースに追加された信号線の値に基づいてライトデータがシステムデータであるか否かを判定する。
第1、第2、第3実施形態では、コントローラ4が、ホスト2からのコマンド(ライトコマンド、またはCMD23)に含まれるシステムデータタグに基づいてライトデータがシステムデータであるか否かを判定する場合を説明したが、第4実施形態では、コントローラ4は、ホスト2とフラッシュストレージデバイス3との間を相互接続するインタフェースに追加された信号線の値に基づいてライトデータがシステムデータであるか否かを判定する。
図25は、フラッシュストレージデバイス3とホスト2との間を相互接続するインタフェース内に定義された信号線(通知信号線)を示す。
すなわち、このインタフェースにおいては、クロック、コマンド(CMD)、データを転送するための複数の信号線に加え、通知信号線61が追加されている。
ホスト2のデバイスインタフェース51は、ファイルシステム43のようなホストソフトウェアからの指示に基づき、通知信号線61をハイレベル(論理“1”)またはローレベル(論理“0”)に設定する回路を含む。
フラッシュストレージデバイス3のコントローラ4は、ホストインタフェース11を使用して通知信号線61の値(論理“1”または論理“0”)をチェックし、この通知信号線61の値に基づいてライトデータがシステムデータであるか否かを判定し、この判定結果に基づいて、更新頻度が高いデータ用のブロックまたは更新頻度が低いデータ用のブロックにライトデータを選択的に書き込む。
例えば、ホスト2は、システムデータを書き込むべき時は通知信号線61をハイレベル(論理“1”)に設定し、システムデータ以外のデータを書き込むべき時は通知信号線61をローレベル(論理“0”)に設定することで、ライトデータがシステムデータであるか否かをフラッシュストレージデバイス3に通知することができる。
図26のフローチャートは、通知信号線61の値に基づいて実行される書き込み処理の手順を示す。
コントローラ4がホスト2からライトコマンドを受信した時、コントローラ4は、通知信号線61がハイレベル(論理“1”)またはローレベル(論理“0”)のいずれであるかを判定する(ステップS71)。
通知信号線61がハイレベル(論理“1”)であるならば、コントローラ4は、ライトデータがシステムデータであると判定する。そして、コントローラ4は、更新頻度が高いデータ用のブロックにライトデータを書き込む(ステップS72)。ステップS72では、コントローラ4は、更新頻度が高いデータ用のブロックにライトデータをSLCモードで書き込んでもよい。
通知信号線61がローレベル(論理“0”)であるならば、コントローラ4は、ライトデータがシステムデータではないと判定する。そして、コントローラ4は、更新頻度が低いデータ用のブロックにライトデータを書き込む(ステップS73)。ステップS73では、コントローラ4は、更新頻度が低いデータ用のブロックにライトデータをTLCモードで書き込んでもよい。
第4実施形態においても、第1実施形態と同様に、更新頻度が高いデータが更新頻度が低いデータ用のブロックに書き込まれてしまう確率を低減でき、ストレージ容量の利用効率を改善することができる。また、第4実施形態においても、第1実施形態で説明したGC動作を実行することができる。
なお、通知信号線61がローレベル(論理“0”)である場合には、コントローラ4は、ライトデータのサイズに応じて、更新頻度が高いデータ用のブロックまたは更新頻度が低いデータ用のブロックにライトデータを選択的に書き込んでもよい。この場合、コントローラ4は、ライトデータのサイズが閾値(例えば64KB)以下であるか否かを判定し、ライトデータのサイズが閾値以下であれば、更新頻度が高いデータ用のブロックにライトデータを書き込み、ライトデータのサイズが閾値を超えるならば、更新頻度が低いデータ用のブロックにライトデータを書き込む。
また、第4実施形態では、この通知信号線61は、ライトデータがシステムデータであることをSSD3に通知する信号線として説明したが、この通知信号線61は、ライトデータの更新頻度をSSD3に通知する信号線として利用されてもよい。
フラッシュストレージデバイス3のコントローラ4は、ホストインタフェース11を使用して通知信号線61の値(論理“1”または論理“0”)をチェックし、この通知信号線61の値に基づいてライトデータが、更新頻度が高いデータであるか否かを判定し、この判定結果に基づいて、更新頻度が高いデータ用のブロックまたは更新頻度が低いデータ用のブロックにライトデータを選択的に書き込む。
例えば、ホスト2は、更新頻度が高いデータを書き込むべき時は通知信号線61をハイレベル(論理“1”)に設定し、更新頻度が低いデータを書き込むべき時は通知信号線61をローレベル(論理“0”)に設定することで、ライトデータが、更新頻度が高いデータであるか、更新頻度が低いデータであるかを、フラッシュストレージデバイス3に通知することができる。
コントローラ4がホスト2からライトコマンドを受信した時、コントローラ4は、通知信号線61がハイレベル(論理“1”)またはローレベル(論理“0”)のいずれであるかを判定する。通知信号線61がハイレベル(論理“1”)であるならば、コントローラ4は、ライトデータが、更新頻度が高いデータであると判定する。そして、コントローラ4は、更新頻度が高いデータ用のブロックにライトデータを書き込む。この場合、コントローラ4は、更新頻度が高いデータ用のブロックにライトデータをSLCモードで書き込んでもよい。
通知信号線61がローレベル(論理“0”)であるならば、コントローラ4は、ライトデータが、更新頻度が低いデータであると判定する。そして、コントローラ4は、更新頻度が低いデータ用のブロックにライトデータを書き込む。この場合、コントローラ4は、更新頻度が低いデータ用のブロックにライトデータをTLCモードで書き込んでもよい。
(変形例)
上述した第1〜4実施形態では、不揮発性メモリとしてNAND型フラッシュメモリを例示した。しかし、各実施形態の機能は、例えば、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
上述した第1〜4実施形態では、不揮発性メモリとしてNAND型フラッシュメモリを例示した。しかし、各実施形態の機能は、例えば、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
2…ホスト、3…フラッシュストレージデバイス、4…コントローラ4…NAND型フラッシュメモリ、21…システムデータタグチェック部、22…データサイズチェック部、23…ライト制御部、24…ガベージコレクション制御部。
Claims (11)
- ホストに接続可能なメモリシステムであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、
前記コントローラは、
書き込むべきライトデータがシステムデータ特性を有するか否かを示すシステムデータタグを、前記ホストから受信し、
前記受信されたシステムデータタグによって前記システムデータ特性を有するデータであると指定された第1のライトデータを、前記複数のブロックのうち、第1レベルの更新頻度を有する第1タイプのデータを書き込むための第1のブロックに書き込み、
前記受信されたシステムデータタグによって前記システムデータ特性を有するデータであると指定されなかった第2のライトデータを、前記複数のブロックのうち、前記第1タイプのデータよりも低い第2レベルの更新頻度を有する第2タイプのデータを書き込むための第2のブロックに書き込むように構成されている、メモリシステム。 - 前記コントローラは、さらに、
前記第2のライトデータのサイズが第1閾値以下であるか否かを判定し、
前記第2のライトデータのサイズが前記第1閾値よりも大きい場合、前記第2のライトデータを前記第2のブロックに書き込み、
前記第2のライトデータのサイズが前記第1閾値以下である場合、前記第2のライトデータを前記第1のブロックに書き込むように構成されている請求項1記載のメモリシステム。 - 前記メモリシステムは、ユニバーサルフラッシュストレージ(UFS)規格に準拠するストレージデバイスであり、
前記システムデータタグは、前記ユニバーサルフラッシュストレージ(UFS)規格で規定されたライトコマンドに含まれるグループナンバーフィールドによって表される請求項1記載のメモリシステム。 - 前記メモリシステムは、エンベデッド・マルチメディア・カード(eMMC)規格に準拠するストレージデバイスであり、
前記システムデータタグは、前記エンベデッド・マルチメディア・カード(eMMC)規格で規定されたセット・ブロック・カウント・コマンド内のタグ・リクエストによって表される請求項1記載のメモリシステム。 - 前記コントローラは、
前記第1のブロックへのデータ書き込みを、メモリセル当たりにmビットのデータを書き込む第1のプログラムモードによって実行し、
前記第2のブロックへのデータ書き込みを、メモリセル当たりにnビットのデータを書き込む第2のプログラムモードによって実行するように構成され、
前記mは前記nよりも小さい整数である請求項1記載のメモリシステム。 - 前記コントローラは、
前記第1のブロックとして使用され且つ有効データを各々が保持している複数のブロックを含む第1のブロック群と、前記第2のブロックとして使用され且つ有効データを各々が保持している複数のブロックを含む第2のブロック群とから、有効データ量が少ない一つ以上のブロックをガベージコレクションが施されるべきガベージコレクションソースブロックとして選択し、
前記ガベージコレクションソースブロックとして選択された前記一つ以上のブロック内の有効データを、一つ以上のガベージコレクションディスティネーションブロックにコピーするように構成されている請求項5記載のメモリシステム。 - ホストに接続可能なメモリシステムであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、
前記コントローラは、
書き込むべきライトデータがシステムデータ特性を有するか否かを示すシステムデータタグを、前記ホストから受信し、
前記ライトデータが、前記受信されたシステムデータタグによってシステムデータ特性を有するデータであると指定された場合、前記ライトデータを、前記複数のブロックのうち、第1レベルの更新頻度を有する第1タイプのデータを格納するための第1のブロックに書き込み、
前記ライトデータが、前記受信されたシステムデータタグによって前記システムデータ特性を有するデータであると指定されなかった場合、前記ライトデータのサイズが第1閾値以下であるか否かを判定し、
前記ライトデータのサイズが前記第1閾値以下である場合、前記ライトデータを前記第1のブロックに書き込み、
前記ライトデータのサイズが前記第1閾値よりも大きい場合、前記ライトデータを、前記複数のブロックのうち、前記第1タイプのデータよりも低い第2レベルの更新頻度を有する第2タイプのデータを書き込むための第2のブロックに書き込むように構成されている、メモリシステム。 - 前記メモリシステムは、ユニバーサルフラッシュストレージ(UFS)規格に準拠するストレージデバイスであり、
前記システムデータタグは、前記ユニバーサルフラッシュストレージ(UFS)規格で規定されたライトコマンドに含まれるグループナンバーフィールドの値によって表される請求項7記載のメモリシステム。 - 前記メモリシステムは、エンベデッド・マルチメディア・カード(eMMC)規格に準拠するストレージデバイスであり、
前記システムデータタグは、前記エンベデッド・マルチメディア・カード(eMMC)規格で規定されたセット・ブロック・カウント・コマンド内のタグ・リクエストの値によって表される請求項7記載のメモリシステム。 - ホストに接続可能なメモリシステムであって、
複数のメモリセルを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、
前記コントローラは、
書き込むべきライトデータがシステムデータ特性を有するか否かを示す通知を、前記ホストから受信し、
前記ライトデータが前記システムデータ特性を有するデータである場合、前記ライトデータを、メモリセル当たりにmビットのデータを書き込む第1のプログラムモードで前記不揮発性メモリに書き込み、
前記ライトデータが前記システムデータ特性を有するデータではない場合、前記ライトデータを、メモリセル当たりにnビットのデータを書き込む第2のプログラムモードで前記不揮発性メモリに書き込むように構成され、前記mは前記nよりも小さい整数である、メモリシステム。 - 前記コントローラは、
前記ライトデータが前記システムデータ特性を有するデータではない場合、前記ライトデータのサイズが第1閾値以下であるか否かを判定し、
前記ライトデータのサイズが前記第1閾値以下である場合、前記ライトデータを、前記第1のプログラムモードで前記不揮発性メモリに書き込み、
前記ライトデータのサイズが前記第1閾値よりも大きい場合、前記ライトデータを、前記第2のプログラムモードで前記不揮発性メモリに書き込む請求項10記載のメモリシステム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018032322A JP2019148913A (ja) | 2018-02-26 | 2018-02-26 | メモリシステム |
US16/165,876 US20190265910A1 (en) | 2018-02-26 | 2018-10-19 | Memory system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018032322A JP2019148913A (ja) | 2018-02-26 | 2018-02-26 | メモリシステム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2019148913A true JP2019148913A (ja) | 2019-09-05 |
Family
ID=67685871
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2018032322A Pending JP2019148913A (ja) | 2018-02-26 | 2018-02-26 | メモリシステム |
Country Status (2)
Country | Link |
---|---|
US (1) | US20190265910A1 (ja) |
JP (1) | JP2019148913A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022132481A1 (en) * | 2020-12-18 | 2022-06-23 | Micron Technology, Inc. | Object management in tiered memory systems |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10901903B2 (en) * | 2018-12-21 | 2021-01-26 | Micron Technology, Inc. | Flash memory persistent cache techniques |
KR20200125216A (ko) * | 2019-04-26 | 2020-11-04 | 에스케이하이닉스 주식회사 | 데이터 저장 장치, 이를 포함하는 전자 장치 및 데이터 저장 장치의 동작 방법 |
CN113448877A (zh) * | 2020-03-26 | 2021-09-28 | 伊姆西Ip控股有限责任公司 | 用于数据存储的方法、设备和计算机程序 |
-
2018
- 2018-02-26 JP JP2018032322A patent/JP2019148913A/ja active Pending
- 2018-10-19 US US16/165,876 patent/US20190265910A1/en not_active Abandoned
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022132481A1 (en) * | 2020-12-18 | 2022-06-23 | Micron Technology, Inc. | Object management in tiered memory systems |
Also Published As
Publication number | Publication date |
---|---|
US20190265910A1 (en) | 2019-08-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7346311B2 (ja) | メモリシステム | |
US11355197B2 (en) | Memory system with nonvolatile cache and control method thereof | |
CN109144888B (zh) | 存储器系统 | |
JP7366795B2 (ja) | メモリシステムおよび制御方法 | |
US20210248065A1 (en) | Memory system and method for controlling nonvolatile memory | |
CN109240938B (zh) | 存储系统以及控制非易失性存储器的控制方法 | |
CN110781096B (zh) | 用于通过预测需求时间来执行垃圾收集的设备和方法 | |
CN106874217B (zh) | 存储器系统及控制方法 | |
JP2018049522A (ja) | メモリシステム及び制御方法 | |
US11042305B2 (en) | Memory system and method for controlling nonvolatile memory | |
US11436136B2 (en) | Memory system including non-volatile buffer and control method thereof | |
JP7353934B2 (ja) | メモリシステムおよび制御方法 | |
CN114442914B (zh) | 存储器系统 | |
US20190265910A1 (en) | Memory system | |
JP2021033849A (ja) | メモリシステムおよび制御方法 | |
JP7381678B2 (ja) | メモリシステム | |
US20220244854A1 (en) | Memory system and method for controlling nonvolatile memory | |
US20230091792A1 (en) | Memory system and method of controlling nonvolatile memory | |
JP2023012773A (ja) | メモリシステムおよび制御方法 | |
JP7077151B2 (ja) | メモリシステム | |
US11853200B2 (en) | Memory system and controller to invalidate data corresponding to a logical address | |
KR20200014175A (ko) | 소요시간을 예측하여 가비지 컬렉션을 수행하는 방법 및 장치 | |
US11657000B2 (en) | Controller and memory system including the same | |
US20230297262A1 (en) | Memory system and control method | |
CN113094293B (zh) | 存储器系统及相关方法和计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A712 Effective date: 20180830 |