(57)【要約】【課題】利用効率の良いブロック割り当てを行い、不揮発性メモリの長寿命化を実現する。【解決手段】第１ストリームIDに対応付けられたデータである第１データに関する情報である第２情報を収集し、収集された第２情報に基づいて、第１ストリームIDと、前記第１データがライトされるブロックである第１ブロックとの対応関係を無効にする。【選択図】図１
2018160189.tif 000002
【特許請求の範囲】
【請求項１】
複数のブロックを有する不揮発性メモリと、
前記不揮発性メモリを制御し、
第１ストリームIDと、前記第１ストリームIDに対応付けられたデータである第１データがライトされるブロックである第１ブロックとの対応関係を第１情報に記録し、
前記第１データに関する情報である第２情報を収集し、収集された第２情報に基づいて、前記第１情報における前記第１ストリームIDと前記第１ブロックとの前記対応関係を無効にするメモリコントローラと
を備えるメモリシステム。
【請求項２】
前記メモリコントローラは、前記収集された第２情報をホストに提供する、
請求項１に記載のメモリシステム。
【請求項３】
前記メモリコントローラは、第１ストリームIDおよび第１データが指定された第１コマンドをホストから受信したときに、前記第２情報を収集する
請求項１に記載のメモリシステム。
【請求項４】
前記第２情報は、前記第１データのデータサイズを含み、
前記メモリコントローラは、前記第１データのデータサイズと所定の設定値との差が第１の閾値より小さい場合、前記対応関係を無効にする
請求項１または２に記載のメモリシステム。
【請求項５】
前記第２情報は、前記第１ブロックのサイズに対する、前記第１データのうちの無効化されたデータのサイズの割合であり、
前記メモリコントローラは、前記割合が第２の閾値より大きい場合、前記対応関係を無効にする
請求項１または２に記載のメモリシステム。
【請求項６】
前記第２情報は、前記第１データについてのコンパクション回数であり、
前記メモリコントローラは、前記コンパクション回数が第３の閾値より多い場合、前記対応関係を無効にする
請求項１または２に記載のメモリシステム。
【請求項７】
前記第２情報は、前記第１ストリームIDに対応付けられた各データについてのアクセス頻度情報であり、
前記アクセス頻度情報が、前記第１ストリームIDに対応付けられた第１コマンドと、前記第１ストリームIDに対応付けられた第２コマンドとで異なる場合、前記メモリコントローラは、前記対応関係を無効にする
請求項１または２に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、不揮発性メモリを備えるメモリシステムに関する。
【背景技術】
【０００２】
マルチストリーム制御では、ホストは、ライフタイムが同じデータに同一のストリームIDを割り当てる。前記ホストに外部メモリとして接続されるデバイスは、ストリームIDが同じデータを同じブロックに書き込み、ストリームIDが異なるデータを別のブロックに書き込む。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２０１６／０３１３９４３号明細書
【特許文献２】特開２０１６−１７０５８３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一つの実施形態は、利用効率の良いブロック割り当てを行い、不揮発性メモリの長寿命化を実現するメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
一つの実施形態によれば、メモリシステムは、複数のブロックを有する不揮発性メモリと、前記不揮発性メモリを制御するメモリコントローラとを備える。前記メモリコントローラは、情報記録部と、制御部とを備える。前記情報記録部は、第１ストリームIDと第１ブロックとの対応関係が記録される。前記第１ブロックは、第１データがライトされるブロックである。前記第１データは、前記第１ストリームIDに対応付けられたデータである。前記制御部は、前記第１データに関する情報である第１情報を収集し、収集された第１情報に基づいて、前記情報記録部における前記第１ストリームIDと前記第１ブロックとの前記対応関係を無効にする。
【図面の簡単な説明】
【０００６】
【図１】図１は、メモリシステムの構成例を示すブロック図である。
【図２】図２は、マルチストリームにおけるライト動作を概念的に示す図である。
【図３】図３は、ライフタイムが異なるデータに対し同じストリームIDが指定されている状態を示す図である。
【図４】図４は、データ転送サイズが基本データ管理サイズに対して小さい状態を示す図である。
【図５】図５は、ストリーム管理情報のデータ構造を示す図である。
【図６】図６は、ストリーム履歴情報のデータ構造を示す図である。
【図７】図７は、ライト要求を受信したときの制御部の動作手順を示すフローチャートである。
【図８】図８は、ストリームリード要求を受信したときの制御部の動作手順を示すフローチャートである。
【図９】図９は、コンパクションを実行するときの制御部の動作手順を示すフローチャートである。
【図１０】図１０は、データ無効化命令を実行するときの制御部の動作手順を示すフローチャートである。
【図１１】図１１は、メモリシステムの第２の実施形態の動作手順を示すフローチャートである。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施の形態にかかるメモリシステムを詳細に説明する。なお、これらの実施の形態により本発明が限定されるものではない。
【０００８】
（第１の実施形態）
図１は第１の実施形態のメモリシステム１００の構成例を示すブロック図である。メモリシステム１００は、ホスト装置(以下、ホストと略す)１と通信線５で接続され、ホスト１の外部記憶装置として機能する。ホスト１は、例えば、パーソナルコンピュータなどの情報処理装置、携帯電話、撮像装置であってもよいし、タブレットコンピュータやスマートフォンなどの携帯端末であってもよいし、ゲーム機器であってもよいし、カーナビゲーションシステムなどの車載端末であってもよい。
【０００９】
ホスト１は、ＣＰＵとメモリを備える。ＣＰＵは、メモリにロードされる様々なプログラムを実行するように構成されたプロセッサである。様々なプログラムにはオペレーティングシステムやアプリケーションプログラムが含まれる。ホスト１のオペレーティングシステムは、ファイルの生成、保存、更新、削除等を管理する。アプリケーションプログラムは、オペレーティングシステムを介してメモリシステム１００とデータのやり取りを行うように構成されている。
【００１０】
メモリシステム１００は、不揮発性メモリとしてのＮＡＮＤ型フラッシュメモリ（以下、ＮＡＮＤと略す）１０と、メモリコントローラ２０とを備える。不揮発性メモリとしては、ＮＡＮＤ型フラッシュメモリに限らず、３次元構造フラッシュメモリ、ＲｅＲＡＭ（Resistance Random Access Memory）、ＦｅＲＡＭ（Ferroelectric Random Access Memory）、クロスポイント型メモリ、相変化型メモリ(Phase Change Memory; PCM)、磁気抵抗メモリ(Magnetoresistive Random Access Memory; MRAM)などであってもよい。
【００１１】
ＮＡＮＤ１０は、複数のブロック#B1,#B2,…,#Bn を有する。ブロックは、データ消去の単位である。各ブロックは、複数のメモリセルを有する。各メモリセルは多値記憶が可能である。各ブロック#B1,#B2,…,#Bnは、複数のページを含む。データのリードおよびライトは、ページ単位で実行される。ページへのデータ書き込みは、１消去サイクル当たり１回のみ可能である。
【００１２】
ＮＡＮＤ１０には、ホスト１から送信されるユーザデータと、メモリシステム１００の管理情報と、ファームウェアなどがストアされる。前記ファームウェアは、メモリコントローラ２０の制御部３０の機能の少なくとも一部を実現するＣＰＵ（図示せず）を動作させる。前記ファームウェアは、図示しないＲＯＭにストアされてもよい。前記管理情報は、論理物理変換情報（Ｌ２Ｐ情報）などを含む。
【００１３】
メモリコントローラ２０は、ホストインタフェース（ホストIF）２１と、メモリインタフェース（メモリIF）２２と、制御部３０と、ＲＡＭ４０と、これら構成要素を接続するバス６とを備える。本実施形態は、ＲＡＭ４０をメモリコントローラ２０の内部に設けているが、ＲＡＭ４０をメモリコントローラ２０の外部に設けてもよい。
【００１４】
ホストIF２１は、ホスト１からライト要求およびリード要求を受信する。前記ライト要求は、ライトコマンド、ライトアドレス、ライトデータを含む。前記リード要求は、リードコマンド、リードアドレスを含む。ホストIF２１は、受信されたライト要求またはリード要求を制御部３０に転送する。また、ホストIF２１は、ＮＡＮＤ１０から読み出されたユーザデータ、制御部３０の応答などをホスト１へ送信する。
【００１５】
ＲＡＭ４０は、ＮＡＮＤ１０よりも高速アクセスが可能な揮発性の半導体メモリである。ＲＡＭ４０としては、ＳＲＡＭ（Static Random Access Memory）やＤＲＡＭ(Dynamic Random Access Memory)が用いられる。ＮＡＮＤ１０にストアされている前記管理情報がＲＡＭ４０にロードされる。ＲＡＭ４０は、前記管理情報として、Ｌ２Ｐ情報４１と、ストリーム管理情報４２と、ストリーム履歴情報４３をストアする。前記Ｌ２Ｐ情報４１、ストリーム管理情報４２およびストリーム履歴情報４３は、ＮＡＮＤ１０でバックアップされる。
【００１６】
制御部３０は、メモリシステム１００の各構成要素を統括的に制御する。制御部３０は、データ管理部３１、ライト制御部３２、リード制御部３３を有する。制御部３０は、ＲＡＭ４０にロードされたファームウェアを実行する１または複数のＣＰＵ（プロセッサ）および周辺回路によってその機能が実現される。データ管理部３１は、ファームウェアを実行するＣＰＵおよび／またはハードウェアによってその機能が実現される。ライト制御部３２は、ファームウェアを実行するＣＰＵおよび／またはハードウェアによってその機能が実現される。リード制御部３３は、ファームウェアを実行するＣＰＵおよび／またはハードウェアによってその機能が実現される。
【００１７】
データ管理部３１は、ＲＡＭ４０にロードされる前記管理情報の一つであるＬ２Ｐ情報４１を使ってユーザデータを管理する。前記Ｌ２Ｐ情報４１は、ホスト１で使用される論理アドレスと、ＮＡＮＤ１０の物理アドレスとを対応付けるマッピングが登録されている。論理アドレスとしては、例えばＬＢＡ（Logical Block Addressing）が用いられる。物理アドレスは、データが記憶されているＮＡＮＤ１０上の記憶位置を示している。ホスト１からライト要求を受信した場合、データ管理部３１は、Ｌ２Ｐ情報４１を使って論理アドレスとしてのライトアドレスを物理アドレスへ変換し、ライトデータを書き込むＮＡＮＤ１０上の実アドレスを決定する。ホスト１からリード要求を受信した場合、データ管理部３１は、論理アドレスとしてのリードアドレスを物理アドレスへ変換し、データをリードするＮＡＮＤ１０上の実アドレスを決定する。
【００１８】
データ管理部３１は、前記管理情報の一つであるブロック管理情報(図示せず)を使用してＮＡＮＤ１０に含まれるブロックの管理を実行する。ブロック管理情報では、例えば以下のブロック管理情報を管理する。
・ブロック単位の消去回数（erase count）
・ブロックがアクティブブロックかフリーブロックかを区別する情報
・バッドブロックのブロックアドレス
【００１９】
アクティブブロックは、有効（valid）データが記録されている。フリーブロックは、有効データが記録されていない。フリーブロックは、データを消去した後、消去済みブロックとして再利用可能である。有効データとは論理アドレスと対応付けられているデータであり、無効データとは論理アドレスが対応付けられていないデータである。消去済みブロックは、データが書き込まれると、アクティブブロックとなる。バッドブロックは、様々な要因で正常に動作せず、使用不可となっている。
【００２０】
データ管理部３１は、コンパクション（ガベージコレクション）を実行する。メモリシステム１００において、データの消去単位（ブロック）と、データの読み書き単位が異なる場合、ＮＡＮＤ１０の書き換えが進むと、無効なデータによって、ブロックは断片化(fragmented)される。このような断片化されたブロックが増えると、使用可能なブロックが少なくなる。そこで、例えば、ＮＡＮＤ１０のフリーブロックが所定の閾値より少なくなった場合、コンパクションを実行し、フリーブロックを増加させる。コンパクションでは、有効なデータおよび無効なデータが含まれているブロックから前記有効データが集められて、別のブロックに書き直される。
【００２１】
データ管理部３１は、データ無効化処理を実行する。ホスト１からデータ無効化要求を受信すると、データ管理部３１は、データ無効化処理を実行する。データ無効化要求は、データ無効化コマンドおよび無効化する論理アドレスを含む。データ無効化要求は、例えば、ＳＣＳＩ(Small Computer System Interface)規格におけるＵＮＭＡＰコマンド、ＡＴＡ(Advanced Technology Attachment)規格におけるＴＲＩＭコマンドに対応する。データ管理部３１は、ホスト１からデータ無効化要求を受信すると、Ｌ２Ｐ情報４１にアクセスし、データ無効化コマンドで指定された論理アドレスと物理アドレスとの対応付けを無効化する。
【００２２】
ライト制御部３２は、ホスト１から受信したライト要求に従い、ＮＡＮＤ１０にデータを書き込むための処理を実行する。ライト制御部３２は、ホスト１からライト要求を受信した場合、ライトデータを書込むべきＮＡＮＤ１０上の物理アドレスをデータ管理部３１から取得し、取得された物理アドレスとライトデータをメモリIF２２に出力する。
【００２３】
リード制御部３３は、ホスト１から受信したリード要求に従い、ＮＡＮＤ１０からデータを読み出すための制御を行う。リード制御部３３は、リードデータの論理アドレスに対応するＮＡＮＤ１０上の物理アドレスをデータ管理部３１から取得し、取得された物理アドレスをメモリIF２２に出力する。
【００２４】
メモリIF２２は、ライト制御部３２から入力されたライトデータおよび物理アドレスをＮＡＮＤ１０に出力することによって、ＮＡＮＤ１０へライトデータを書き込む。メモリIF２２は、リード制御部３３から入力された物理アドレスをＮＡＮＤ１０に出力することによって、ＮＡＮＤ１０からライトデータをリードする。メモリIF２２は、ＥＣＣ（Error Correcting Code; ECC）回路を備えてもよい。ＥＣＣ回路は、ライト制御部３２から転送されたデータに対して、誤り訂正の符号化処理を実施しパリティを生成する。ＥＣＣ回路は、データおよびパリティを含む符号語をＮＡＮＤ１０へ出力する。ＥＣＣ回路は、ＮＡＮＤ１０からリードされた符号語を用いて誤り訂正の復号化処理を実行し、復号されたデータをリード制御部３３に転送する。
【００２５】
ホスト１のオペレーティングシステムはマルチストリームのライト動作をサポートしている。マルチストリームにおいては、ホスト１は、同じファイルに含まれるデータのような、同じライフタイムを持つデータを同じストリームIDを持つストリームに対応付ける。オペレーティングシステムがアプリケーションプログラムからストリームＩＤが指定されたストリームライト要求を受信した時、オペレーティングシステムは、ストリームライト要求によって指定されるストリームＩＤを含むライト要求を生成し、メモリシステム１００へ送信する。あるいは、アプリケーションプログラムがストリームＩＤを指定した要求の発行をオペレーティングシステムへ要求するのでは無く、ホスト１のオペレーティングシステム自体が、所定のルール（ポリシー）に基づいて、ストリームＩＤを指定する処理を行っても良い。
【００２６】
前記コンパクションの実行頻度を少なくするために、本メモリシステム１００は、通常のライト動作に加え、マルチストリームのライト動作をサポートしている。通常ライト動作では、所定のブロック選択ルールに従って、ライトデータの書き込み先をストリームライト用に割り当てられていない任意のブロックから選択し、選択されたブロックにライトデータをライトする。メモリシステム１００は、第１のストリームIDに対応付けられたデータを、第１のストリームIDに対応付けた１または複数のブロックにライトする。また、第２のストリームIDに対応付けられたデータを、第２のストリームIDに対応付けた１または複数のブロックにライトする。ホスト１がデータを削除する際、同じストリームIDに対応付けられた全データが一斉に無効化する可能性が高いため、マルチストリームのライト動作をサポートすることで、メモリシステム１００は、コンパクションの実行回数を減らすことができ、性能劣化や寿命短縮を改善できる。
【００２７】
図２は、マルチストリームによるライト動作を概念的に示す図である。ストリームID1を伴うデータ（LBA1によって指定されるデータ、LBA2によって指定されるデータ、LBA3によって指定されるデータ、LBA4によって指定されるデータ、LBA5によって指定されるデータ）は、ID1のストリーム用に割り当てられた消去済みのブロック#B1にライトされる。ストリームID2を伴うデータ（LBA102によって指定されるデータ、LBA103によって指定されるデータ、LBA200によって指定されるデータ、LBA104によって指定されるデータ、LBA201によって指定されるデータ）は、ID2のストリーム用に割り当てられた消去済みのブロック#B2にライトされる。
【００２８】
ホスト１がストリームIDを割り当てるポリシーは、各々のアプリケーションが任意に決めている。このため、ストリームIDの割り当てが適切でない、あるいはデータサイズが小さい、マルチストリームのライト要求が発生する可能性がある。この場合、ＮＡＮＤ１０のブロックの利用効率が低下し、WAF(Write Amplification Factor)が増加し、ＮＡＮＤ１０の寿命低下、性能低下の原因となる。
【００２９】
図３は、ライフタイムが異なるデータに対し同じストリームIDが指定されている状態を示している。H1,H2,H3,H4,H5は、更新が頻繁に発生するホットデータを示している。W1,W2は、更新頻度が低いウォームデータを示している。C1,C2,C3,C4,C5は、更新が殆ど無いコールドデータを示している。ID＝1のストリームには、W1,H1,C1,C2,C3,H2が対応付けられており、これらのデータが同一のブロック#B4にストアされている。ID=2のストリームには、C4,C5,W2,H3,H4,H5が対応付けられており、これらのデータが同一のブロック#B5にストアされている。この場合は、各ストリームIDの合計データサイズとブロックサイズが一致している。図３の場合は、書き込みが進むに従ってホットデータH1,H2,H3,H4,H5およびウォームデータW1,W2が無効なデータとなる可能性が高く、ブロックの断片化が進行し、結果的にコンパクションが発生する。
【００３０】
図４は、データサイズがＳＧＳ（Stream Granularity Size）に対して小さい状態を示している。マルチストリームでは、メモリシステム１００は、ホスト１に対し、ＳＧＳを通知している。メモリシステム１００側は、１つのストリームIDの合計データサイズがＳＧＳの整数倍となることを希望している。ＳＧＳは、例えば、１または複数のブロックサイズに設定される。ID＝1のストリームには、W1,W2,W3,W4が対応付けられており、これらのデータが同一のブロック#B6にストアされている。ID＝2のストリームには、H1が対応付けられており、このデータが同一のブロック#B7にストアされている。ID＝3のストリームには、C1,C2,C3が対応付けられており、これらのデータが同一のブロック#B8にストアされている。この場合は、ブロックサイズが、ＳＧＳに一致しているとする。このケースでは、ホスト１から送付されるライトデータのデータサイズが、ＳＧＳに対して小さ過ぎるため、ブロックに破線で示す無駄な空き領域が発生している。
【００３１】
そこで、本実施形態では、メモリシステム１００は、ストリームIDの割り当てが適切に管理されたWriteアクセスか否を判断するためのストリーム履歴情報４３をストリームID毎に収集する。適切に管理されていないと判断されたストリームIDに関しては、マルチストリームではない通常のライト要求のデータ管理に制御を移行する。すなわち、適切に管理されていないと判断されたストリームIDに関しては、ストリームIDとブロックIDとの対応付けを無効化し、この後通常のライト処理で行われるのと同様のブロック管理を実行する。したがって、本実施形態では、ＮＡＮＤ１０のブロックの利用効率が向上し、メモリシステム１００の長寿命化を実現する。
【００３２】
図５は、データ管理部３１によって管理されるストリーム管理情報４２のデータ構造を示す図である。ストリーム管理情報４２には、ストリームIDと、同じストリームIDが付加されたデータがライトされる１または複数のブロックIDとの対応関係を示すストリーム管理情報が格納される。図５では、ID1のストリームに対応付けられたデータのライトのためにブロック#B5,#B6が使用され、ID2のストリームに対応付けられたデータのライトのためにブロック#B7が使用された例が示されている。
【００３３】
図６は、データ管理部３１によって管理されるストリーム履歴情報４３のデータ構造を示す図である。図６では、ストリームID毎にストリーム履歴情報４３が管理されている。この実施形態では、ストリーム履歴情報４３として、以下の４つの情報をストリームID毎に収集する。
(a)データサイズ
(b)無効化されたクラスタ数の総計
(c)コンパクションの実行回数
(d)ストリームライトコマンド内で設定されるアクセス頻度情報(Access Frequency）
【００３４】
上記４つの情報の詳細を説明する前に、オープンストリームコマンドおよびクローズストリームコマンドについて説明する。オープンストリームコマンドはストリームのオープンを要求するコマンドである。データ管理部３１は、オープンストリームコマンドをホスト１から受信すると、現在オープンされているストリームIDと異なる新たなストリームIDを、新たにオープンされたストリームのために割り当てる。データ管理部３１は、新たにオープンされたストリームのためにデータをライトするブロックを割り当てる。そして、データ管理部３１は、この新たにオープンされたストリームIDを含む応答をホスト１に送信する。ホスト１は、受信されたストリームIDを使ってストリームライト要求を実行する。
【００３５】
クローズストリームコマンドは、オープンされているストリームのクローズを要求するコマンドである。クローズストリームコマンドは、クローズされるストリームのストリームIDを示すパラメータを含む。データ管理部３１は、クローズストリームコマンドをホスト１から受信すると、クローズストリームコマンドによって指定されたストリームIDとこのストリームIDに対応するブロックとの対応付けを、ストリーム管理情報４２において無効化する。そして、データ管理部３１は、コマンド完了通知を含む応答をホスト１に送信する。
【００３６】
まず、図６のデータサイズ４３ａに関して説明する。ストリームライトコマンドには、コマンドが指定するライトデータのサイズを示すNumber of Logical Blocks(NLB)が含まれている。同じストリームIDが付加された複数のライトコマンドに含まれるNLBを順次加算することによって、ライトデータの合計サイズをストリームID毎に計算する。ストリームライトコマンドが受信される度に、ストリームID毎のデータサイズが加算更新される。例えば、マルチストリーム対応のブロックへのリード発生時に、ライトデータの合計サイズが取得され、この合計サイズがＳＧＳに対応する閾値と比較される。ＳＧＳは、ストリームID別の基本データ管理サイズである。メモリシステム１００では、ＳＧＳとして、例えば１又は複数のブロックサイズを設定する。図６の物理リソースサイズ情報４３ｂは、各ストリームIDのために確保される１または複数のブロックの合計サイズを示している。物理リソースサイズ情報４３ｂは、１または複数のＳＧＳに対応する。各ストリームのデータサイズ４３ａとＳＧＳとの差ΔＳを求め、この差ΔＳが所定の閾値より大きいストリームについては、適切なデータ割り当てが行われていないと判断し、マルチストリーム管理を解消し、これ以降、通常のデータ管理を実行する。すなわち、ストリーム管理情報４２のストリームIDとブロックIDとの対応付けを無効化し、この後、通常のライト処理で行われるのと同様のブロック管理を実行する。このような制御によって、図４に示したように、データサイズがＳＧＳに対して小さ過ぎる場合は、適切なデータ割り当てが行われていないと判断される。
【００３７】
つぎに、ブロック内の無効化クラスタ数４３ｃに関して説明する。クラスタとは、ＮＡＮＤ１０の論理空間と物理空間とのアドレッシング単位である。例えば、Ｌ２Ｐ情報４１は、クラスタ単位にアドレッシングがマッピングされている。クラスタは、例えば、ＮＡＮＤ１０のページを複数に分割した管理単位である。ホスト１からのデータ無効化要求により、あるいはデータの更新（同じLBAに対するデータの書き込み）によりクラスタの無効化が発生すると、無効化されたクラスタ数がストリームID毎に計数される。この無効化されたクラスタ数に対応するサイズの物理リソースサイズ情報４３ｂに対する割合が所定の閾値を越えたストリームに関しては、適切なデータ割り当てが行われていないと判断し、これ以降、通常のデータ管理を実行する。
【００３８】
つぎに、コンパクション実行回数４３ｄに関して説明する。コンパクション対象のブロックに、マルチストリーム管理されるブロック（以下、ストリーム管理ブロックという）が含まれる場合、コンパクション回数をストリームID毎に計算する。例えば、ストリームID1で管理されるブロックＡ内のデータがコンパクションによってブロックＢに移動されたとすると、ストリームID1のコンパクション回数を１回とする。つぎに、ブロックＢ内のデータがコンパクションによってブロックにさらに移動されたとすると、ストリームID1のコンパクション回数を２回とする。コンパクション回数が所定の閾値を越えたストリームに関しては、適切なデータ割り当てが行われていないと判断し、これ以降、通常のデータ管理を実行する。
【００３９】
つぎに、アクセス頻度情報（AF値）４３ｅについて説明する。ホスト１が送信する各ストリームライトコマンドは、このライトコマンドによって指定されるLBAの属性を示すDataset Managementを含み、Dataset ManagementはAF情報を含んでいる。AF情報は、ライトコマンドによって指定されるLBAのアクセス頻度を示している。例えば、４ビットのAF値が0001である場合、アクセス頻度が普通であることを表している。AF値が0010の場合、リードおよびライト共にアクセスが少ないことを表している。AF値が0011の場合、ライトはアクセスが少なく、リードアクセスが頻繁であることを表している。AF値が0101の場合、リードおよびライト共にアクセスが頻繁であることを表している。AF値が0110の場合、１度だけライトがあることを表している。このように、AF値は、ライフタイムと同様の概念を表している。同じストリームIDを持つライトコマンド間でAF値が異なる場合は、適切なデータ割り当てが行われていないと判断する。前回のストリームライトコマンドのAF値と今回のストリームライトコマンドのAF値が異なる場合、図６のAF判定フラグ４３ｆが１にセットされる。
【００４０】
図６のクローズフラグ(クローズFG)４３ｇは、当該ストリームIDがクローズされているか否を示している。クローズフラグが１のとき、当該ストリームIDがクローズされており、クローズフラグが０のとき、当該ストリームIDがオープンされている。
【００４１】
図７は、ライト要求を受信したときのデータ管理部３１の動作手順を示すフローチャートである。データ管理部３１は、ホスト１からのライト要求をホストIF２１を介して受信すると(S100)、このライト要求がストリームライトコマンドであるか通常のライトコマンドであるかを判定する(S110)。ライト要求がストリームライトコマンドでなく通常のライトコマンドである場合(S110 No)、データ管理部３１は通常のライト処理を実行する(S120)。通常ライト動作では、前述したように、所定のブロック選択ルールに従って、ライトデータの書き込み先をストリームライト用に割り当てられていない任意のブロックから選択し、選択されたブロックにライトデータをライトする。このライト処理に伴い、データ管理部３１はＬ２Ｐ情報４１を更新する。
【００４２】
ライト要求がストリームライトコマンドである場合(S110 Yes)、データ管理部３１は、ストリーム管理情報４２に基づき、ライトコマンドに付加されたストリームIDが新規のIDか否かを判定する(S130,S140)。新規のIDである場合(S140 Yes)、データ管理部３１は、ストリーム管理情報４２に新規のストリームIDを登録する(S150)。さらに、データ管理部３１は、この新規のストリームIDのデータをライトするブロックを決定し、決定されたブロックのブロックIDをストリーム管理情報４２に登録する。さらに、データ管理部３１は、決定されたブロックIDを含む書き込みアドレスを決定し、決定された書き込みアドレスおよびストリームライトコマンドによって指定されたデータを、ＲＡＭ４０およびメモリIF２２を介してＮＡＮＤ１０に入力する。これにより、ストリームライトコマンドによって指定されたデータがＮＡＮＤ１０にライトされる。このライト処理に伴い、データ管理部３１はＬ２Ｐ情報４１を更新する。
【００４３】
一方、データ管理部３１は、このライト処理に伴い、ストリーム履歴情報４３に所要の情報を登録する(S160)。具体的には、データ管理部３１は、ストリーム履歴情報４３に、新規ストリームIDに対応するエントリを作成する。データ管理部３１は、ストリームライトコマンドに含まれるNLBを取得し、取得されたNLBを新規エントリのデータサイズ４３ａの欄に記録する。また、データ管理部３１は、新規ストリームIDのために確保した１又は複数のブロックのサイズを物理リソースサイズ情報４３ｂの欄に登録する。さらに、データ管理部３１は、ストリームライトコマンドに含まれるAF値を取得し、取得されたAF値を新規エントリのAF値４３ｅの欄に記録する。
【００４４】
ステップS140の判定において、ストリームライトコマンドに付加されたストリームIDが新規のIDでない場合(S140 No)、データ管理部３１は、このストリームIDがオープン中のIDであるかあるいはクローズされているIDであるかをストリーム履歴情報４３のクローズフラグ４３ｇに基づいて判定する(S170)。ストリームライトコマンドで指定されたストリームIDがクローズされているIDである場合(S170 Yes)、データ管理部３１は、クローズされたストリームIDに対し、新たなストリームライト要求が発生したと判断し、クローズされたストリームIDのクローズフラグを１から０に変更することで、クローズされたストリームIDを再オープンする。また、データ管理部３１は、ストリーム管理情報４２に再オープンしたストリームIDを登録する。さらに、データ管理部３１は、この再オープンしたストリームIDのデータをライトするブロックを決定し、決定されたブロックのブロックIDをストリーム管理情報４２に登録する。さらに、データ管理部３１は、決定されたブロックIDを含む書き込みアドレスを決定し、決定された書き込みアドレスおよびストリームライトコマンドによって指定されたデータをメモリIF２２を介してＮＡＮＤ１０に入力する。これにより、ストリームライトコマンドによって指定されたデータがＮＡＮＤ１０にライトされる。このライト処理に伴い、データ管理部３１はＬ２Ｐ情報４１を更新する。
【００４５】
さらに、データ管理部３１は、再オープンしたストリームIDのエントリに記録されていた情報をクリアし、今回のストリームライトコマンドに対応する所要の情報を記録する(S210)。具体的には、データ管理部３１は、ストリームライトコマンドに含まれるNLBを取得し、取得されたNLBをデータサイズ４３ａの欄に記録する。また、データ管理部３１は、再オープンしたストリームIDのために確保した１又は複数のブロックのサイズを物理リソースサイズ情報４３ｂの欄に登録する。さらに、データ管理部３１は、ストリームライトコマンドに含まれるAF値を取得し、取得されたAF値をAF値４３ｅの欄に記録する。なお、再オープンしたストリームIDのエントリに記録されていた情報をクリアせずに、履歴として残しておくようにしてもよい。
【００４６】
ステップS170の判定において、ストリームライトコマンドに付加されたストリームIDがオープン中のストリームIDであると判定された場合(S170 No)、データ管理部３１は、このストリームIDのデータをライトするブロックのブロックIDをストリーム管理情報４２から取得する。データ管理部３１は、取得されたブロックIDを含む書き込みアドレスを決定し、決定された書き込みアドレスおよびストリームライトコマンドによって指定されたデータをメモリIF２２を介してＮＡＮＤ１０に入力する。これにより、ストリームライトコマンドによって指定されたデータがＮＡＮＤ１０にライトされる。このライト処理に伴い、データ管理部３１はＬ２Ｐ情報４１を更新する。
【００４７】
一方、データ管理部３１は、このライト処理に伴い、ストリーム履歴情報４３の所要の情報を更新する(S180)。具体的には、データ管理部３１は、ストリームライトコマンドに含まれるNLBを取得し、取得されたNLBを、ストリームライトコマンドに付加されたストリームIDのデータサイズ４３ａの欄に記録されているデータサイズに加算し、この加算結果でデータサイズを更新する。また、今回のライト処理によって、当該ストリームストリームIDのデータを書き込むブロックを増加する必要がある場合、データ管理部３１は、データをライトする新たなブロックを決定し、決定されたブロックのブロックIDをストリーム管理情報４２に追加登録する。さらに、この追加登録に対応して、ストリーム履歴情報４３の物理リソースサイズ情報４３ｂを更新する。
【００４８】
さらに、データ管理部３１は、今回のストリームライトコマンドによって、データの更新が発生する場合、すなわち、データが書き込まれているLBAと同じLBAに対するデータの書き込みが発生する場合、このデータ更新によって無効化されたクラスタ数を計数し、計数された無効化クラスタ数を無効化クラスタ数４３ｃの欄に記録する。さらに、データ管理部３１は、ストリームライトコマンドに含まれるAF値を取得し、取得されたAF値と、ストリーム履歴情報４３に記録されているAF値とを比較する。この比較が一致の場合、AF判定フラグ４３ｆを０にし、不一致の場合、AF判定フラグ４３ｆを１にする。AF判定フラグ４３ｆが１の場合(S190 Yes)、データ管理部３１は、このストリームIDは適切なデータ割り当てが行われていないと判断し、このストリームIDに関しては、通常のライト要求のデータ管理に制御を移行する(S200)。すなわち、適切なデータ割り当てが行われていないと判断されたストリームIDに関しては、ストリーム管理情報４２のストリームIDとブロックIDとの対応付けを無効化し、この後通常のライト処理で行われるのと同様のブロック管理を実行する。AF判定フラグ４３ｆが０の場合(S190 No)、データ管理部３１は、手順を終了する。
【００４９】
図８は、ストリーム履歴情報４３で管理されるデータサイズ４３ａに基づき、各ストリームのデータ割り当てを判定するための処理手順を示すフローチャートである。データ管理部３１は、リード要求が発生した場合、Ｌ２Ｐ情報４１およびストリーム管理情報４２に基づいてこのリード要求はストリーム管理されるブロックへの要求か否かを判定する(S300)。データ管理部３１は、リード要求によって指定された論理アドレスに対応付けられた物理アドレスをＬ２Ｐ情報４１から取得し、取得された物理アドレスを含むブロックIDがストリーム管理情報４２に登録されているか否かを判定する。データ管理部３１は、ストリーム管理情報４２にブロックIDが登録されている場合、ストリーム管理されるブロックであると判定する。ステップS300の判定がYesである場合、データ管理部３１は、リード要求が発生したブロックのストリームIDをストリーム管理情報４２から取得し、取得されたストリームIDのエントリに記録されているデータサイズ４３ａをストリーム履歴情報４３から取得する。データ管理部３１は、取得されたデータサイズとＳＧＳとの差ΔＳを求める(S310)。データ管理部３１は、差ΔＳを閾値と比較し(S320)、前記差ΔＳが閾値より大きい場合は(S320 Yes)、このストリームIDは適切なデータ割り当てが行われていないと判断し、このストリームIDに関しては、通常のライト要求のデータ管理に制御を移行する(S330)。すなわち、適切なデータ割り当てが行われていないと判断されたストリームIDに関しては、ストリーム管理情報４２のストリームIDとブロックIDとの対応付けを無効化し、この後通常のライト処理で行われるのと同様のブロック管理を実行する。前記差ΔＳが閾値より小さいストリームに関しては(S320 No)、ストリーム管理が続行される。このような制御によって、図４に示した、無駄な空き領域の発生を解消することが可能となる。
【００５０】
図９は、コンパクションが実行されるときのデータ管理部３１の動作手順を示すフローチャートである。データ管理部３１は、コンパクションを実行する(S400)。コンパクションの実行後、データ管理部３１は、今回のコンパクションの対象ブロックにストリーム管理ブロックが含まれているか否かを判断し、ストリーム管理ブロックが含まれている場合、コンパクション対象のブロックのストリームIDをストリーム管理情報４２から取得する。データ管理部３１は、取得したストリームIDのコンパクション回数を計数し、計数されたコンパクション回数を、このストリームIDのコンパクション回数４３ｄの欄に記録されているコンパクション回数に加算し、この加算結果でコンパクション回数を更新する(S410)。
【００５１】
つぎに、データ管理部３１は、更新されたコンパクション回数を所定の閾値と比較する(S420)。コンパクション回数が閾値を越えた場合(S420 Yes)、データ管理部３１は、このストリームIDは適切なデータ割り当てが行われていないと判断し、このストリームIDに関しては、通常のライト要求のデータ管理に制御を移行する(S440)。コンパクション回数が閾値を越えない場合は(S420 No)、ストリーム管理が続行される。
【００５２】
さらに、データ管理部３１は、今回のコンパクション対象のブロックのストリームIDの無効化クラスタ数４３ｃおよび物理リソースサイズ情報４３ｂを取得する。データ管理部３１は、無効化されたクラスタ数に基づき無効化されたクラスタサイズを計算し、計算された無効化クラスタサイズの物理リソースサイズ情報４３ｂに対する割合を計算し、この割合値を所定の閾値と比較する(S430)。前記割合値が閾値を越えた場合(S430 Yes)、データ管理部３１は、このストリームIDは適切なデータ割り当てが行われていないと判断し、このストリームIDに関しては、通常のライト要求のデータ管理に制御を移行する(S440)。前記割合値が前記閾値を越えない場合は(S430 No)、ストリーム管理が続行される。
【００５３】
図１０は、ＵＮＭＡＰなどのデータ無効化処理が実行されるときのデータ管理部３１の動作手順を示すフローチャートである。データ管理部３１は、ホスト１からのデータ無効化要求を受信すると、データ無効化処理を実行する(S500)。このデータ無効化処理によって、データ無効化コマンドで指定された論理アドレスと物理アドレスとの対応付けがＬ２Ｐ情報４１において無効化される。データ管理部３１は、Ｌ２Ｐ情報４１およびストリーム管理情報４２に基づいて、データ無効化対象のデータがストリーム管理されているか否かを判定する。データ無効化対象のデータがストリーム管理されている場合、データ管理部３１は、データ無効化対象のデータがストアされているブロックのストリームIDをストリーム管理情報４２から取得し、さらに、ステップS500でのデータ無効化処理によって無効化されたクラスタ数をストリームID毎に計数する。
【００５４】
データ管理部３１は、前記計数された各ストリームIDの無効化クラスタ数を、各ストリームIDの無効化クラスタ数４３ｃの欄に記録されている無効化クラスタ数に加算し、加算結果によって各ストリームIDの無効化クラスタ数を更新する(S510)。この更新後、データ管理部３１は、ストリーム履歴情報４３に登録されている全てのストリームIDについての無効化クラスタ数および物理リソースサイズ情報４３ｂを取得する。データ管理部３１は、無効化クラスタ数に基づき無効化されたクラスタサイズをストリームID毎に計算する。データ管理部３１は、物理リソースサイズに対する無効化クラスタサイズの割合をストリームID毎に計算し、計算された割合値を所定の閾値と比較する(S520)。データ管理部３１は、前記割合値が前記閾値を越えたストリームに関しては(S520 Yes)、適切なデータ割り当てが行われていないと判断し、このストリームIDに関しては、通常のライト要求のデータ管理に制御を移行する(S530)。前記割合値が前記閾値を越えない場合は(S520 No)、ストリーム管理が続行される。
【００５５】
このように第１の実施形態では、データ割り当てが適切に管理されたWriteアクセスか否を判断するためのストリーム履歴情報４３をストリームID毎に収集し、適切に管理されていないと判断されたストリームIDに関しては、通常のライト要求のデータ管理に制御を移行する。したがって、本実施形態では、ＮＡＮＤ１０のブロックの利用効率が向上し、メモリシステムの長寿命化を実現する。
【００５６】
なお、上記では、ストリーム管理ブロックにストアされたデータのリード要求が発生したときに、対応するストリームIDのデータサイズが適正であるか否かを判定したが、他の任意のタイミングでデータサイズが適正であるか否かを判定してもよい。例えば、ホスト１からの要求に応答して各ストリームIDのデータサイズが適正であるか否かを判定してもよい。また、上記では、コンパクション実行時、またはデータ無効化命令の実行時に、無効化クラスタ数が適正であるか否かを判定したが、データの無効化が発生する度に、無効化クラスタ数が適正であるか否かを判定してもよい。また、上記では、ストリームライトコマンドを受信する度に、AF値が一致するか否を判定し、前回のライトコマンドのAF値との不一致が一回でも発生した場合、AF値の設定が適正でないと判定したが、Ｘ個のライトコマンド中でＹ個以上のAF値の不一致が発生した場合に、AF値の設定が適正でないと判定してもよい。Ｘは３以上であり、Ｙ≦Ｘである。また、ホスト１からの要求に応じて、無効化クラスタ数、コンパクション回数、あるいはAF値が適正であるか否かを判定しても良い。
【００５７】
なお、ＮＡＮＤ１０のユーザデータエリアの記憶容量が所定の閾値を下回った場合、データ割り当てが適正と判断されるストリームIDに関しても、マルチストリーム管理を中止し、通常のデータ管理に切り換えるようにしてもよい。ユーザデータエリアは、ＮＡＮＤ１０の全記憶エリアのうちで、ホスト１から受信したライトデータが書き込まれるエリアである。また、AF値が0100,あるいは0100は、ライトが頻繁に発生するデータを意味している。このため、ＮＡＮＤ１０の容量に余裕がなくなってＮＡＮＤ１０の記憶容量が所定の閾値を下回った場合で、AF値が0100,あるいは0100であるストリームライトコマンドを受信したときは、マルチストリーム管理を中止し、通常のデータ管理に切り換えるようにしてもよい。
【００５８】
（第２の実施形態）
第２の実施形態では、メモリシステム１００は、収集したストリーム履歴情報４３をホスト１に提供する。第２の実施形態のメモリシステム１００の構成は、図１に示したメモリシステム１００と同様であり、重複する説明は省略する。図１１は、データ管理部３１がストリーム履歴情報４３をホスト１に提供する動作手順を示すフローチャートである。ホスト１は、適宜のタイミングでメモリシステム１００にストリーム履歴の送信を要求する(S600)。この要求を受信すると(S600 Yes)、データ管理部３１は、ストリーム履歴情報４３に管理される情報のうちクローズFG４３ｇを除く情報（データサイズ４３ａ、物理リソースサイズ情報４３ｂ、無効化クラスタ数４３ｃ、コンパクション回数４３ｄ、AF値４３ｅ、およびAF判定フラグ４３ｆ）をストリームID毎に収集し、収集されたストリーム履歴情報４３をホスト１へ送信する(S610)。
【００５９】
ホスト１は、メモリシステム１００からストリームID毎のストリーム履歴情報４３を受信すると、例えば、適正なデータ割り当てが行われていないストリームIDを特定し、特定されたストリームIDに対応するアプリケーションを特定し、特定したアプリケーションのマルチストリーム管理を修正する。例えば、ホスト１は、特定されたアプリケーションに対してストリームIDの割り当てを行わないようにする。
【００６０】
このように第２の実施形態では、ストリーム履歴をホスト１へ送信するので、ホスト１は、適正なデータ割り当てが行われていないストリームIDを発行したアプリケーションを特定することができる。したがって、ホスト１では、非効率なストリームアクセスを抑制することができ、メモリシステム１００のメモリ使用効率を向上させ、メモリの長寿命化が可能になる。
【００６１】
なお、ホスト１からの要求をトリガにするのではなく、メモリシステム１００が自主的にホスト１にストリーム履歴情報４３を送信するようにしてもよい。また、ストリームIDを指定した要求をホスト１からメモリシステム１００へ送信し、指定されたストリームIDに対するストリーム履歴情報４３をメモリシステム１００が送信するようにしてもよい。
【００６２】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６３】
１  ホスト装置、１０  ＮＡＮＤ型フラッシュメモリ（ＮＡＮＤ）、２０  メモリコントローラ、２１  ホストIF、２２  メモリIF、３０  制御部、３１  データ管理部、３２  ライト制御部、３３  リード制御部、４０  ＲＡＭ、４１  Ｌ２Ｐ情報、４２  ストリーム管理情報、４３  ストリーム履歴情報。
【図１】
2018160189.tif 000003
【図２】
2018160189.tif 000004
【図３】
2018160189.tif 000005
【図４】
2018160189.tif 000006
【図５】
2018160189.tif 000007
【図６】
2018160189.tif 000008
【図７】
2018160189.tif 000009
【図８】
2018160189.tif 000010
【図９】
2018160189.tif 000011
【図１０】
2018160189.tif 000012
【図１１】
2018160189.tif 000013