(57)【要約】【課題】メモリシステムの利便性を向上させること。【解決手段】メモリシステムは、不揮発性のメモリと、インタフェースと、コントローラサーキットと、アロケータと、を備える。前記メモリは、複数の単位領域を備える。前記インタフェースは、ストリーム識別子が付与されたライトデータを受信する。前記コントローラサーキットは、前記インタフェースが受信したライトデータのうち一のストリーム識別子が付与されたライトデータを第１の単位領域にライトする。前記第１の単位領域は、前記複数の単位領域のうちの前記一のストリーム識別子が対応付けられた単位領域である。前記アロケータは、前記第１の単位領域へのライトデータのライトが終了した後、他の単位領域を新たな第１の単位領域に設定し、前記新たな第１の単位領域に前記一のストリーム識別子と異なる１つの他のストリーム識別子を対応付ける。【選択図】図１２
2018200718.tif 000002
【特許請求の範囲】
【請求項１】
ストリーム識別子が付与されたライトデータを受信する第１ステップと、
前記受信したライトデータのうち一のストリーム識別子が付与されたライトデータを不揮発性のメモリが備えるそれぞれはデータのイレース処理の単位である複数の単位領域のうちの前記一のストリーム識別子が対応付けられた単位領域である第１の単位領域にライトする第２ステップと、
前記第１の単位領域へのライトデータのライトが終了した後、他の単位領域を新たな第１の単位領域に設定する第３ステップと、
前記新たな第１の単位領域に前記一のストリーム識別子と異なる１つの他のストリーム識別子を対応付ける第４ステップと、
を備えることを特徴とするメモリシステムの制御方法。
【請求項２】
前記受信したライトデータのうち前記第１の単位領域に対応付けられていないストリーム識別子が付与されたライトデータを前記複数の単位領域のうちの前記第１の単位領域と異なる第２の単位領域にライトする第５ステップと、
前記第２の単位領域がライト先であるライトデータのストリーム識別子のうちから前記他のストリーム識別子を選択する第６ステップと、
をさらに備える請求項１に記載のメモリシステムの制御方法。
【請求項３】
前記第６ステップは、前記第２の単位領域がライト先であるライトデータのストリーム識別子のうちから前記他のストリーム識別子をライト量に基づいて選択するステップである、
請求項２に記載のメモリシステムの制御方法。
【請求項４】
前記第６ステップは、前記第２の単位領域がライト先であるライトデータのストリーム識別子のうちライト量が最大のストリーム識別子を前記他のストリーム識別子として選択するステップである、
請求項３に記載のメモリシステムの制御方法。
【請求項５】
前記第６ステップは、前記第２の単位領域がライト先であるライトデータのストリーム識別子のうち、前記一のストリーム識別子にかかるライト量よりもライト量が大きいストリーム識別子を前記他のストリーム識別子として選択するステップである、
請求項３に記載のメモリシステムの制御方法。
【請求項６】
前記受信したライトデータのうち前記第１の単位領域に対応付けられていないストリーム識別子が付与されたライトデータを前記複数の単位領域のうちの前記第１の単位領域と異なる第２の単位領域にライトするステップと、
前記第２の単位領域がライト先であるライトデータのストリーム識別子のうち、前記第１の単位領域へのライトデータのライトが終了した後に最初に受信したライトデータのストリーム識別子を前記他のストリーム識別子として選択するステップと、
をさらに備える請求項１に記載のメモリシステムの制御方法。
【請求項７】
前記第１の単位領域は１つのストリーム識別子のみが対応付けられる単位領域である、
請求項１に記載のメモリシステムの制御方法。
【請求項８】
ストリーム識別子が付与されたライトデータを受信する第１ステップと、
前記受信したライトデータのうち一のストリーム識別子が付与されたライトデータを不揮発性のメモリが備えるそれぞれはデータのイレース処理の単位である複数の単位領域のうちの前記一のストリーム識別子が対応付けられた単位領域である第１の単位領域にライトする第２ステップと、
前記一のストリーム識別子と異なる１つの他のストリーム識別子をライト量に基づいて選択する第３ステップと、
前記第１の単位領域に対応するストリーム識別子を、前記一のストリーム識別子から前記他のストリーム識別子に変更する第４ステップと、
を備えることを特徴とするメモリシステムの制御方法。
【請求項９】
前記受信したライトデータのうち前記第１の単位領域に対応付けられていないストリーム識別子が付与されたライトデータを前記複数の単位領域のうちの前記第１の単位領域と異なる第２の単位領域にライトする第５ステップと、
前記第２の単位領域がライト先であるライトデータのストリーム識別子のうちから前記他のストリーム識別子を選択する第６ステップと、
をさらに備える請求項８に記載のメモリシステムの制御方法。
【請求項１０】
前記第６ステップは、前記第２の単位領域がライト先であるライトデータのストリーム識別子のうちライト量が最大のストリーム識別子を前記他のストリーム識別子として選択するステップである、
請求項９に記載のメモリシステムの制御方法。
【請求項１１】
前記第６ステップは、前記第２の単位領域がライト先であるライトデータのストリーム識別子のうち、前記一のストリーム識別子にかかるライト量よりもライト量が大きいストリーム識別子を前記他のストリーム識別子として選択するステップである、
請求項９に記載のメモリシステムの制御方法。
【請求項１２】
前記第１の単位領域は１つのストリーム識別子のみが対応付けられる単位領域である、
請求項８に記載のメモリシステムの制御方法。
【請求項１３】
前記第４ステップは、経過時間に応じたタイミングで前記第１の単位領域に対応するストリーム識別子の変更を実行するステップである、
請求項８に記載のメモリシステムの制御方法。
【請求項１４】
前記第４ステップは、ライト量が所定の条件を満たした場合に前記第１の単位領域に対応するストリーム識別子の変更を実行するステップである、
請求項８に記載のメモリシステムの制御方法。
【請求項１５】
ストリーム識別子が付与されたライトデータを受信するステップと、
前記受信したライトデータのうち一のストリーム識別子が付与されたライトデータを不揮発性のメモリが備えるそれぞれはデータのイレース処理の単位である複数の単位領域のうちの前記一のストリーム識別子のみが対応付けられた単位領域である第１の単位領域にライトするステップと、
前記受信したライトデータのうちの他の２以上のストリーム識別子が付与されたライトデータを前記複数の単位領域のうちの当該他の２以上のストリーム識別子が対応付けられた単位領域である第２の単位領域にライトするステップと、
前記一のストリーム識別子が付与されたライトデータの受信が終了した場合、前記第１の単位領域に前記他の２以上のストリーム識別子のうちの１つのみを対応付けるステップと、
を備えることを特徴とするメモリシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、メモリシステムの制御方法に関する。
【背景技術】
【０００２】
従来、複数のブロックを備えるメモリを搭載するメモリシステムがある。ブロックは、メモリに対する消去の最小単位である。メモリシステムの機能としてマルチストリーム機能が提案されている。マルチストリーム機能を備えるメモリシステムは、ストリーム識別子（以下、ストリームＩＤ）を含むライトコマンドを受け付けると、当該ライトコマンドによって書き込み要求されたデータ（以下、ライトデータ）をストリームＩＤに応じたブロックに書き込む。ストリームＩＤは、予期されるライトデータの寿命に応じて選択される識別子である。即ち、想定される寿命が異なる２つのライトデータには、夫々異なるストリームＩＤが割り当てられる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−１９１１７４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一つの実施形態は、メモリシステムの利便性を向上させることを目的とする。
【課題を解決するための手段】
【０００５】
一つの実施形態によれば、メモリシステムの制御方法は、第１ステップと、第２ステップと、第３ステップと、第４ステップと、を備える。前記第１ステップは、ストリーム識別子が付与されたライトデータを受信するステップである。前記第２ステップは、前記受信したライトデータのうち一のストリーム識別子が付与されたライトデータを不揮発性のメモリが備えるそれぞれはデータのイレース処理の単位である複数の単位領域のうちの前記一のストリーム識別子が対応付けられた単位領域である第１の単位領域にライトするステップである。前記第３ステップは、前記第１の単位領域へのライトデータのライトが終了した後、他の単位領域を新たな第１の単位領域に設定するステップである。前記第４ステップは、前記新たな第１の単位領域に前記一のストリーム識別子と異なる１つの他のストリーム識別子を対応付けるステップである。
【図面の簡単な説明】
【０００６】
【図１】図１は、第１の実施形態のメモリシステムが実装された、コンピュータシステムの構成例である。
【図２】図２は、ライトＩＯの構成の一例を示す図である。
【図３】図３は、ストリーム管理情報の一例を示す図である。
【図４】図４は、ストリーム管理情報の別の一例を示す図である。
【図５】図５は、ストリーム管理情報の別の一例を示す図である。
【図６】図６は、ストリーム管理情報の別の一例を示す図である。
【図７】図７は、各種ブロックの状態遷移の一例を示す図である。
【図８】図８は、ストリーム対応情報の一例を示す図である。
【図９】図９は、コントローラが備える機能の構成の一例を説明する図である。
【図１０】図１０は、ライト時のＯＳの動作を説明するフローチャートである。
【図１１】図１１は、ライトＩＯの処理にかかるメモリシステムの動作の概略を説明するフローチャートである。
【図１２】図１２は、インプットブロックの割り当ての変更にかかる、第１の実施形態のメモリシステムの動作を説明するフローチャートである。
【図１３】図１３は、第２の実施形態のコントローラが備える機能の構成の一例を説明する図である。
【図１４】図１４は、インプットブロックの割り当ての変更にかかる、第２の実施形態のメモリシステムの動作を説明するフローチャートである。
【図１５】図１５は、インプットブロックの割り当ての変更にかかる、第３の実施形態のメモリシステムの動作を説明するフローチャートである。
【図１６】図１６は、メモリシステムの実装例を示す図である。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態にかかるメモリシステムおよびホスト装置を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【０００８】
（第１の実施形態）
図１は、第１の実施形態のメモリシステムが実装された、コンピュータシステムの構成例である。コンピュータシステムは、メモリシステム１およびホスト装置（以降、ホスト）２を備える。メモリシステム１は、ホスト２に通信路で接続されている。メモリシステム１は、ホスト２の外部記憶装置として機能する。メモリシステム１とホスト２とを接続する通信路の規格としては任意の規格が採用可能である。
【０００９】
ホスト２は、ファイルシステムドライバを内蔵するコンピュータである。コンピュータは、例えば、パーソナルコンピュータ、サーバ、ポータブルな情報機器、またはＡＶ機器を含む。ホスト２においては、ＯＳ２０および１以上のアプリケーション２１が実行される。アプリケーション２１は、ファイルシステムドライバを介してメモリシステム１に対するデータの入出力を実行する。
【００１０】
ファイルシステムドライバは、例えば、オペレーティングシステム（ＯＳ）２０の一部の機能である。ＯＳ２０は、例えば、実マシンのオペレーティングシステムまたはバーチャルマシンのためのオペレーティングシステムを含む。バーチャルマシンのためのオペレーティングシステムは、ハイパーバイザとして知られている。ファイルシステムドライバは、１以上のデータ構造を管理する。１以上のデータ構造の夫々は、ストリーム管理情報２２に登録されている。ファイルシステムドライバは、ストリーム管理情報２２を、ライト対象のデータにストリームＩＤを付与するために参照する。ライトＩＯは、例えばアプリケーション２１からライト要求されたデータをメモリシステム１にライトするためにＯＳ２０が発行する、メモリシステム１に対する入出力処理である。アプリケーション２１は、ライト対象のデータを生成した後、ＯＳ２０にライト要求を送信する。ＯＳ２０は、ライト要求の受信に応じて、ライト対象のデータをメモリシステム１にライトするためのライトＩＯを発行する。ライト対象のデータの生成元はアプリケーション２１だけに限定されない。例えばＯＳ２０がライト対象のデータを生成してもよい。ライトＩＯは、ライト対象のデータおよびライトコマンドを含む。以降、ライトＩＯに含まれるライト対象のデータを、ライトデータと表記する。なお、アプリケーション２１などからＯＳ２０にライト要求されたデータは、ＯＳ２０によって複数のライトデータに分割され、当該複数のライトデータが夫々異なるライトＩＯによってメモリシステム１に送信されてもよい。
【００１１】
図２は、ライトＩＯの構成の一例を示す図である。ライトＩＯは、ライトコマンドおよびライトデータを含む。ライトコマンドは、ライトコマンドである旨を示すコマンド種別、ライトデータの位置を示す位置情報、ライトデータのサイズ、およびストリーム識別子（ストリームＩＤ）を含む。位置情報は、ホスト２がメモリシステム１にマッピングするアドレス空間内の番地で表記される。例えば、位置情報は、ＬＢＡ（Logical  Block  Address）の形式で表記される。位置情報は、任意の形式で表現され得る。ホスト２がメモリシステム１に対してライトデータの位置指定に使用する位置情報を、論理アドレスと表記する。
【００１２】
ストリームＩＤは、ここでは一例として、予期されるデータの寿命に応じて選択される識別子である。データの寿命とは、メモリシステム１にライトされてから書き換えられるまでの時間である。書き換えは、ホスト２が、重複する論理アドレスを指定して複数回のライトＩＯを発行することを含む。また、書き換えは、論理アドレスと物理アドレスとの対応関係を解消する処理を含む。論理アドレスと物理アドレスとの対応関係を解消する処理は、例えばTRIMコマンドまたはUNMAPコマンドに応じて実行される。
【００１３】
前述のように、ストリームＩＤを含むライトデータと、ライトコマンドと、が対になってライトＩＯが構成される。この構成により、メモリシステム１が受信する各ライトデータはストリームＩＤが対応付けられている。なお、ライトデータにストリームＩＤが対応付けられていることを、ライトデータにストリームＩＤが付与されている、と表記することがある。また、ライトコマンドにストリームＩＤが記録されることを、ライトコマンド／ライトデータにストリームＩＤが付与される、と表記することがある。また、ライトコマンド／ライトデータにストリームＩＤを付与することを、ライトコマンド／ライトデータにストリームＩＤを割り当てる、またはライトコマンド／ライトデータにストリームＩＤを対応付ける、と表記することがある。
【００１４】
ストリーム管理情報２２は、ＯＳ２０がライトデータに付与すべきストリームＩＤを得るための情報である。ストリーム管理情報２２の形式としては任意の形式が採用可能である。ストリーム管理情報２２の形式としては、例えばテーブル形式が採用可能である。ストリーム管理情報２２によれば、予期されるデータの寿命が同程度の２つのデータには、同じストリームＩＤが対応づけられる。また、ストリーム管理情報２２によれば、予期されるデータの寿命が異なる２つのデータには、夫々異なるストリームＩＤが対応づけられる。同じストリームＩＤが対応付けられている１以上のデータを、ストリームと表記する。ストリームＩＤは、ストリームを識別するための識別子である。予期されるデータの寿命を判別するための情報として、データ構造の属性が用いられる。即ち、ストリーム管理情報２２は、データ構造の属性とストリームとの対応関係が記録されている。ストリーム管理情報２２の構成としては任意の構成が採用可能である。例えば、ストリーム管理情報２２は、属性を検索キーとしてストリームＩＤが取得可能に構成された、テーブル形式の情報である。ストリームに対応付けられる属性としては、予期されるデータの寿命と相関を有する任意の種類の属性が採用可能である。なお、予期されるデータの寿命とは異なる基準で選択された属性が、ストリームに対応付けられる属性として採用されてもよい。
【００１５】
図３は、ストリーム管理情報２２の一例を示す図である。この例によれば、アプリケーションＩＤ、バーチャルマシンＩＤ（ＶＭ  ＩＤ）、またはスレッドＩＤがストリームに対応付けられている。アプリケーションＩＤは、アプリケーション２１を識別するための識別子である。アプリケーション２１がバーチャルマシンである場合には、ＶＭ  ＩＤがストリーム管理情報２２を検索するための属性として採用される。ＶＭ  ＩＤは、バーチャルマシンを識別するための識別子である。スレッドＩＤは、ホスト２にて実行される処理の単位である。例えば、１つのアプリケーション２１は、１以上のスレッドを生成する。図３のストリーム管理情報２２によれば、例えばＶＭ  ＩＤが「１２３４」であるバーチャルマシンがデータを出力するためにライトＩＯが生成された場合、当該ライトＩＯに含まれるライトコマンドには、ストリームＩＤ「０１」が付与される。また、例えばＶＭ  ＩＤが「２２２２」であるバーチャルマシンがデータを出力するためにライトＩＯが生成された場合、当該ライトＩＯに含まれるライトコマンドには、ストリームＩＤ「０２」が付与される。このように、ストリーム管理情報２２に記録される属性として、データの出力元を識別するための識別子が採用可能である。ＯＳ２０は、ライトＩＯを発行する際、当該ライトＩＯに含まれるライトデータの出力元を特定し、特定した出力元の識別子を検索キーとしてストリーム管理情報２２を検索する。なお、必ずしも全ての出力元の夫々が夫々異なるストリームＩＤに一対一に対応付けられていなくてもよい。一部の複数の出力元が同一のストリームＩＤに対応付けられてもよい。
【００１６】
図４は、ストリーム管理情報２２の別の一例を示す図である。この例によれば、ライトデータを構成するファイルのタイプがストリームに対応付けられている。ファイルのタイプは、拡張子によって識別される。例えば図４のストリーム管理情報２２によれば、拡張子「.sys」を有するファイルを構成するデータを出力するためのライトＩＯが生成された場合、当該ライトＩＯに含まれるライトコマンドには、ストリームＩＤ「００」が付与される。また、例えば拡張子「.doc」を有するファイルを構成するデータを出力するためのライトＩＯが生成された場合、当該ライトＩＯに含まれるライトコマンドには、ストリームＩＤ「０２」が付与される。このように、ストリーム管理情報２２に記録される属性として、ライトデータによって構成されるファイルのタイプが採用可能である。ＯＳ２０は、ライトＩＯを発行する際、当該ライトＩＯに含まれるライトデータによって構成されるファイルの拡張子を特定し、特定した拡張子を検索キーとしてストリーム管理情報２２を検索する。なお、全てのタイプの夫々が夫々異なるストリームＩＤと一対一に対応付けられていなくてもよい。一部の複数のタイプが同一のストリームＩＤに対応付けられていてもよい。
【００１７】
図５は、ストリーム管理情報２２の別の一例を示す図である。この例によれば、アプリケーション２１、スレッド、またはバーチャルマシン、を使用するユーザの名前（以降、ユーザネーム）がスレッドに対応付けられている。例えば図５のストリーム管理情報２２によれば、ユーザネーム「Smith」のユーザがアプリケーション２１またはスレッドを操作することによって当該アプリケーション２１またはスレッドがデータを出力するためのライトＩＯが生成された場合、当該ライトＩＯに含まれるライトコマンドには、ストリームＩＤ「０１」が付与される。また、例えばユーザネーム「Johnson」のユーザがアプリケーション２１またはスレッドを操作することによって当該アプリケーション２１またはスレッドがデータを出力するためのライトＩＯが生成された場合、当該ライトＩＯに含まれるライトコマンドには、ストリームＩＤ「０２」が付与される。このように、ストリーム管理情報２２に記録される属性として、ユーザネームが採用可能である。ＯＳ２０は、ライトＩＯを発行する際、当該ライトＩＯに含まれるライトデータの出力元を操作するユーザのユーザネームを特定し、特定したユーザネームを検索キーとしてストリーム管理情報２２を検索する。なお、全てのユーザネームの夫々が夫々異なるストリームＩＤと一対一に対応付けられていなくてもよい。一部の複数のユーザネームが同一のストリームＩＤに対応付けられていてもよい。
【００１８】
図６は、ストリーム管理情報２２の別の一例を示す図である。この例によれば、ライトデータを構成するファイルの名前（以降、ファイルネーム）がストリームに対応付けられる。例えば図６のストリーム管理情報２２によれば、例えばファイルネーム「abcde.doc」を有するファイルを構成するデータを出力するためのライトＩＯが生成された場合、当該ライトＩＯに含まれるライトコマンドには、ストリームＩＤ「０２」が付与される。また、例えばファイルネーム「aiueo.sys」を有するファイルを構成するデータを出力するためのライトＩＯが生成された場合、当該ライトＩＯに含まれるライトコマンドには、ストリームＩＤ「０１」が付与される。このように、ストリーム管理情報２２に記録される属性として、ライトデータによって構成されるファイルの名前が採用可能である。ＯＳ２０は、ライトＩＯを発行する際、当該ライトＩＯに含まれるライトデータによって構成されるファイルの名前を特定し、特定した名前を検索キーとしてストリーム管理情報２２を検索する。なお、全てのファイルネームの夫々が夫々異なるストリームＩＤと一対一に対応付けられていなくてもよい。一部の複数のファイルネームが同一のストリームＩＤに対応付けられていてもよい。
【００１９】
なお、ストリームＩＤが付与されたライトコマンド／ライトデータを発行できる構成であれば、ホスト２の構成例は上記に限定されない。例えばストリームＩＤの付与はＯＳ２０以外の構成要素が実行してもよい。例えば、ユーザがストリームＩＤを決定し、決定したストリームＩＤをライトデータに付与してもよい。また、アプリケーション２１がストリームＩＤを決定し、決定したストリームＩＤをライトデータに付与してもよい。
【００２０】
例えばホスト２は、演算装置および記憶装置を備える。演算装置は、プログラムに基づいて動作するサーキットである。ホスト２の記憶装置は、アプリケーション２１の機能を実現するプログラムおよびＯＳ２０の機能を実現するプログラムが格納される。ホスト２の演算装置は、ホスト２の記憶装置に格納された各プログラムを実行することによってＯＳ２０の機能およびアプリケーション２１の機能を実現する。
【００２１】
メモリシステム１は、コントローラ１０、インタフェース（Ｉ／Ｆ）１１、ＲＡＭ（Random  Access  Memory）１２、およびＮＡＮＤメモリ１３を備えている。
【００２２】
Ｉ／Ｆ１１は、ホスト２と通信するためのインタフェース装置である。Ｉ／Ｆ１１は、ホスト２からのライトＩＯを受信する。言い換えると、Ｉ／Ｆ１１は、ストリームＩＤが付与されたライトデータを受信する。
【００２３】
コントローラ１０は、Ｉ／Ｆ１１が受信したライトＩＯを処理する。具体的には、コントローラ１０は、ライトＩＯに含まれるライトデータの記憶領域への格納を制御する。ライトデータの格納先の記憶領域は、ＲＡＭ１２およびＮＡＮＤメモリ１３を含む。コントローラ１０は、例えばプログラムに基づいて動作するサーキットである演算装置である。演算装置は、プログラムを実行することによってコントローラ１０としての各種機能を実現する。コントローラ１０が備える各種機能の構成については後述する。
【００２４】
ＲＡＭ１２は、一時的な記憶領域として機能するメモリである。一時的な記憶領域とは、短時間で消去されるデータまたは頻繁に使用されるデータが格納される記憶領域、キャッシュ、バッファ、または、プログラムが展開される記憶領域、を含む。一時的な記憶領域として機能するメモリの種類は、ＤＲＡＭ（Dynamic  Random  Access  Memory）であってもよいしＳＲＡＭ（Static  Random  Access  Memory）であってもよい。一時的な記憶領域として機能するメモリの種類はＲＡＭだけに限定されない。一時的な記憶領域として機能するメモリとしては、ＮＡＮＤメモリ１３よりも高速アクセスが可能なメモリが採用可能である。一時的な記憶領域として機能するメモリとしては、揮発性または不揮発性のメモリが採用可能である。
【００２５】
ＮＡＮＤメモリ１３は、より詳しくは、ＮＡＮＤ型のフラッシュメモリである。ＮＡＮＤメモリ１３は、メモリシステム１においてストレージとして機能するメモリである。即ち、ＮＡＮＤメモリ１３は、ライトデータが格納される。ストレージとして機能するメモリの種類はＮＡＮＤ型のフラッシュメモリだけに限定されない。不揮発性のメモリであれば任意の種類のメモリがストレージとして機能するメモリとして採用可能である。
【００２６】
ＮＡＮＤメモリ１３は、複数のブロックを備える。ブロックは、ＮＡＮＤメモリ１３に格納されているデータに対するイレースの処理が可能な最小の単位領域である。即ち、１つのブロックに格納されているデータは、一括でイレースされる。なお、複数のブロックによってイレースの処理の最小の単位領域が構成されてもよい。各ブロックは、複数のページを備える。ＮＡＮＤメモリ１３に対する、データのライトの処理およびデータのリードの処理は、ページ単位で実行可能である。
【００２７】
ここで、ブロックの状態遷移について説明する。図７は、各種ブロックの状態遷移の一例を示す図である。ハッチングされた矢印は、ブロックの状態遷移を示しており、実線の矢印は、データの移動を示している。ブロックの状態としては、少なくとも、インプットブロック、アクティブブロック、およびフリーブロックがある。１以上のアクティブブロックは、アクティブブロックプールを構成し、１以上のフリーブロックは、フリーブロックプールを構成する。
【００２８】
インプットブロックとは、ライトデータがライトされるブロックとして設定されたブロックである。即ち、インプットブロックは、空のページを備えており、当該空のページにライトデータがライトされることが予定されている。アクティブブロックは、ライトが終了したブロックのうちの、まだ再利用できないブロックである。ライトが終了したブロックのうちの、有効なユーザデータが格納されているブロックは、アクティブブロックとして管理される。再利用とは、インプットブロックに遷移させることをいう。フリーブロックは、再利用可能なブロックである。
【００２９】
例えば、インプットブロックに１ブロック分のデータがライトされた後、そのインプットブロックはアクティブブロックに遷移する。アクティブブロックに格納されているライトデータの状態は、有効な状態と無効な状態とのうちの何れかである。アクティブブロックに第１のライトデータが格納されている状態でホスト２から第１のライトデータと同一の論理アドレスを指定して第２のライトデータが送られてきた場合、コントローラ１０は、インプットブロックの空のページに第２のライトデータを書き込み、アクティブブロックに格納されている第１のライトデータを無効なライトデータとして管理する。ライトデータが有効とは、そのライトデータが最新の状態であることをいう。同一の論理アドレスが指定された複数のライトデータがＮＡＮＤメモリ１３に格納される場合において、最新の状態とは、その複数のライトデータのうちのホスト２が最後に書き込んだライトデータの状態をいう。無効なライトデータとは、同一の論理アドレスが指定されてＮＡＮＤメモリ１３に格納された複数のライトデータのうちの、ホスト２が最後に書き込んだライトデータ以外のライトデータをいう。「空の」状態とは、ここでは、無効なデータおよび有効なデータの何れも記憶されていない状態をいう。空のページは、データが書き込み可能な空き領域である。
【００３０】
ユーザデータが有効であるか無効であるかは、後述の翻訳情報１５によって判定可能である。例えば、有効なユーザデータは、翻訳情報１５によって論理アドレスが対応付けられた位置に格納されたユーザデータである。無効なユーザデータは、翻訳情報１５によって論理アドレスが対応付けられていない位置に格納されたユーザデータである。また、ユーザデータが有効であるか無効であるかは、ユーザデータ毎のフラグによって判定可能に管理されてもよい。ユーザデータが有効であるか無効であるかの管理方法としては、上記以外の任意の方法が採用可能である。
【００３１】
フリーブロックが枯渇すると、ガベージコレクションが実行される。ガベージコレクションは、一つのアクティブブロックから有効なライトデータを他のブロックの空きページに移動（コピー）し、その後、移動元のアクティブブロックに格納されている全ライトデータを無効なデータとして管理する、処理である。移動元のアクティブブロックは、ガベージコレクションの後、フリーブロックに遷移する。なお、移動先のブロックはインプットブロックであってもよいし、ガベージコレクションのための専用のブロックであってもよい。フリーブロックは、イレースが実行されることによって空の状態にされた後、インプットブロックに遷移する。
【００３２】
インプットブロックは複数用意される。そして、各インプットブロックには、ストリームが対応付けられている。即ち、ライトデータのライト先のインプットブロックは、ストリームに応じて選択される。
【００３３】
第１の実施形態によれば、複数のインプットブロックは、第１のインプットブロックと第２のインプットブロックとを含む。第１のインプットブロックは、１つのストリームのみに割り当てられたインプットブロックである。１つの第１のインプットブロックは、その第１のインプットブロックが割り当てられた１つのストリームに属するライトデータがライトされる。第２のインプットブロックは、第１のインプットブロックが割り当てられたストリームに属するライトデータ以外のライトデータがライトされるインプットブロックである。第１のインプットブロックが割り当てられていないストリームに属するライトデータは、第２のインプットブロックにライトされる。
【００３４】
以降、第１のインプットブロックが割り当てられているストリームを、第１ストリームと表記する。第２のインプットブロックが割り当てられているストリームを、第２ストリームと表記する。
【００３５】
図７の例によれば、ストリームＩＤが「ａ」であるストリームおよびストリームＩＤが「ｂ」であるストリームは、第１ストリームに該当する。ストリームＩＤが「ｘ」であるストリーム、ストリームＩＤが「ｙ」であるストリーム、およびストリームＩＤが「ｚ」であるストリームは、第２ストリームに該当する。
【００３６】
なお、第１のインプットブロックの数は、１であってもよいし複数であってもよい。第２のインプットブロックの数は、１であってもよいし複数であってもよい。ＮＡＮＤメモリ１３に含まれるブロックの数は有限である。従って、例えば、第１のインプットブロックの数および第２のインプットブロックの数が固定される。第１のインプットブロックの数の上限値が固定されていてもよい。第２のインプットブロックの数の上限値が固定されていてもよい。第１のインプットブロックの数および第２のインプットブロックの数の合計が固定されていてもよい。
【００３７】
第１の実施形態によれば、コントローラ１０は、ストリームに対するインプットブロックの割り当てを、ホスト２からのユーザデータの入力状況に応じて自動で実行する。言い換えると、コントローラ１０は、ストリームとインプットブロックとの対応関係を動的に変更する。
【００３８】
コントローラ１０は、ＮＡＮＤメモリ１３にライトデータをライトする際には、ＮＡＮＤメモリ１３に格納されている管理情報を参照する。また、コントローラ１０は、状況に応じて管理情報を更新する。管理情報は、ＲＡＭ１２にキャッシュされてもよい。即ち、コントローラ１０は、管理情報をＲＡＭ１２にロードし、ＲＡＭ１２にロードされた管理情報を参照したり更新したりしてもよい。コントローラ１０は、管理情報を更新した場合、ＲＡＭ１２上の管理情報のうちの少なくとも更新された部分を所定のタイミングでＮＡＮＤメモリ１３に格納する。
【００３９】
管理情報は、ストリーム対応情報１４および翻訳情報１５を少なくとも含む。ストリーム対応情報１４は、ストリームとインプットブロックとを対応付ける情報である。翻訳情報１５は、論理アドレスをＮＡＮＤメモリ１３上の物理的な位置に対応付ける情報である。
【００４０】
図８は、ストリーム対応情報１４の一例を示す図である。ここでは、各ブロックは、ブロックＩＤによって識別される。この例によれば、ストリームＩＤが「００」であるストリームは、ブロックＩＤが「０００１」であるインプットブロックに対応付けられている。また、例えばストリームＩＤが「０１」であるストリームは、ブロックＩＤが「００２２」であるインプットブロックに対応付けられている。また、例えばストリームＩＤが「０２」であるストリームおよびストリームＩＤが「０３」であるストリームは、ブロックＩＤが「００３４」であるインプットブロックに対応付けられている。ブロックＩＤが「０００１」であるインプットブロックおよびブロックＩＤが「００２２」であるインプットブロックは、夫々第１のインプットブロックに該当する。即ち、ストリームＩＤが「００」であるストリームおよびストリームＩＤが「０１」であるストリームは、夫々第１ストリームに該当する。ブロックＩＤが「００３４」であるインプットブロックは、第２のインプットブロックに該当する。即ち、ストリームＩＤが「０２」であるストリームおよびストリームＩＤが「０３」であるストリームは、夫々第２ストリームに該当する。
【００４１】
また、図８の例によれば、ストリーム対応情報１４は、ブロックフラグを備える。ブロックフラグは、第１のインプットブロックであるか第２のインプットブロックであるかを示す情報である。即ち、ブロックフラグは、第１のインプットブロックに設定されたインプットブロックを示す管理情報である。ここでは、「１」は第１のインプットブロックを示し、「０」は第２のインプットブロックを示す。
【００４２】
なお、ストリーム対応情報１４は、第２のインプットブロックにかかるストリームとインプットブロックとの対応関係が省略されて構成されてもよい。その場合には、ストリーム対応情報１４に記録されていないストリームは、第２ストリームであると判断可能である。さらに、例えば第２のインプットブロックはストリーム対応情報１４とは別に管理され、第２ストリームに属するライトデータは、ストリーム対応情報１４とは別に管理される第２のインプットブロックがライト先として特定される。
【００４３】
図９は、コントローラ１０が備える機能の構成の一例を説明する図である。コントローラ１０は、データ制御部１０１、アドレス制御部１０２、ブロック割り当て部（アロケータ）１０３、およびガベージコレクション部１０４を備えている。
【００４４】
データ制御部１０１は、ライトＩＯに含まれるライトデータをＲＡＭ１２に格納したりＮＡＮＤメモリ１３に格納したりする。例えば、データ制御部１０１は、ライトデータをいったんＲＡＭ１２に格納する。そして、データ制御部１０１は、ＲＡＭ１２に格納されたライトデータを、所定のタイミングでＮＡＮＤメモリ１３にライトする。データ制御部１０１は、ライトデータをＮＡＮＤメモリ１３にライトする際には、ストリーム対応情報１４を参照することによって、ライト先のインプットブロックを選択する。データ制御部１０１は、ストリームＩＤとストリーム対応情報１４に応じて、ライト先のインプットブロックを決定する。また、データ制御部１０１は、インプットブロックがアクティブブロックに遷移した場合に、フリーブロックから新たなインプットブロックを生成する。
【００４５】
ブロック割り当て部１０３は、ストリームに対するインプットブロックの割り当て、および、ストリームとインプットブロックとのインプットブロックの割り当ての変更、を実行する。第１の実施形態においては、ブロック割り当て部１０３は、新たなインプットブロックが生成され、当該インプットブロックが何れのストリームにも割り当てられていない状態で、インプットブロックが割り当てられていないストリームに属するライトＩＯをコントローラ１０が受信した場合、当該インプットブロックが割り当てられていないストリームに、当該新しいインプットブロックを割り当てる。ブロック割り当て部１０３は、割り当てを実行する毎に割り当て結果をストリーム対応情報１４に反映させる。
【００４６】
ガベージコレクション部１０４は、ガベージコレクションを実行する。ガベージコレクション部１０４は、各アクティブブロックに格納されているライトデータが属するストリームを考慮することなくガベージコレクションを実行してもよいし、同一のストリームに属する２つのライトデータは夫々異なるブロックに移動するようにガベージコレクションを実行してもよい。例えば、ガベージコレクション部１０４は、ライトデータ毎（またはアクティブブロック毎）にストリームＩＤを記憶し、移動元のブロックに格納されている各ライトデータを、そのライトデータが属するストリームに割り当てられたインプットブロックに移動する。
【００４７】
アドレス制御部１０２は、データ制御部１０１によるライトデータのＮＡＮＤメモリ１３へのライト、およびガベージコレクション部１０４によるライトデータのＮＡＮＤメモリ１３へのライト、に応じて、翻訳情報１５を更新する。
【００４８】
なお、コントローラ１０が備える構成要素（データ制御部１０１、アドレス制御部１０２、ブロック割り当て部１０３、およびガベージコレクション部１０４）のうちの一部または全部は、ハードウェアサーキット、または、ハードウェアサーキットと演算装置との組み合わせによって実現されてもよい。ハードウェアサーキットは、プログラムを要しないサーキットである。コントローラ１０が備える構成要素のうちの複数を１の構成要素によって実現されてもよい。また、コントローラ１０が備える構成要素のうちの１の構成要素を複数の構成要素によって実現されてもよい。また、データ制御部１０１、アドレス制御部１０２、ブロック割り当て部１０３、およびガベージコレクション部１０４のうちの一部または全部は、コントローラ１０の外に具備されてもよい。
【００４９】
図１０は、ライト時のＯＳ２０の動作を説明するフローチャートである。アプリケーション２１（またはスレッドまたはＶＭ）からライト要求を発行すると、ＯＳ２０（より詳しくはＯＳ２０内のファイルシステムドライバ）は当該ライト要求を受信する（Ｓ１０１）。ＯＳ２０は、ライトデータに割り当てるストリームＩＤを、ストリーム管理情報２２を参照することによって決定する（Ｓ１０２）。ファイルシステムドライバは、ライトデータとライトコマンドとを含むライトＩＯを、メモリシステム１に発行し（Ｓ１０３）、ライト時のＯＳ２０の動作が終了する。なお、Ｓ１０３の処理によって発行されるライトＩＯに含まれるライトコマンドは、Ｓ１０２の処理によって決定されたストリームＩＤが記録されている。
【００５０】
図１１は、ライトＩＯの処理にかかるメモリシステム１の動作の概略を説明するフローチャートである。コントローラ１０は、ライトＩＯを受信すると（Ｓ２０１）、データ制御部１０１は、ライトＩＯに含まれるライトコマンドから、ストリームＩＤを読み出す（Ｓ２０２）。データ制御部１０１は、ストリームＩＤを用いてストリーム対応情報１４を検索することによって、ライト先のインプットブロックを特定し（Ｓ２０３）、特定したインプットブロックに対し、ライトデータのライトを実行する（Ｓ２０４）。アドレス制御部１０２は、インプットブロックへのライトデータのライトに応じて、翻訳情報１５を更新し（Ｓ２０５）、ライトＩＯの処理が終了する。
【００５１】
ライトＩＯの処理によってインプットブロックがいっぱいになった際には、コントローラ１０は、インプットブロックの割り当ての変更を実行する。図１２は、インプットブロックの割り当ての変更にかかる、第１の実施形態のメモリシステム１の動作を説明するフローチャートである。インプットブロックに空き領域が無くなった場合、データ制御部１０１は、空き領域が無くなった当該インプットブロックをアクティブブロックとして設定する（Ｓ３０１）。本図の説明において、Ｓ３０１の処理によってアクティブブロックに設定されるインプットブロックを、旧インプットブロックと表記する。
【００５２】
なお、インプットブロック、アクティブブロックおよびフリーブロックの管理方法としては任意の方法が採用可能である。例えば、インプットブロックとして設定されたブロックのブロックＩＤが記録されたインプットブロックリスト、アクティブブロックとして設定されたブロックのブロックＩＤが記録されたアクティブブロックリスト、およびフリーブロックとして設定されたブロックのブロックＩＤが記録されたフリーブロックリスト、が管理情報に含まれ、コントローラ１０の各構成要素はインプットブロックリスト、アクティブブロックリストおよびフリーブロックリストを適宜更新する。ストリーム対応情報１４は、インプットブロックリストとして機能しうる。ブロック毎に状態（インプットブロック／アクティブブロック／フリーブロック）を記述した状態情報が更新情報に含まれ、コントローラ１０は状態情報を適宜更新するように構成されてもよい。各ブロックの所定位置に、ブロックの状態を示すフラグ情報が記録され、コントローラ１０は適宜フラグ情報を更新するように構成されてもよい。
【００５３】
データ制御部１０１は、Ｓ３０１の処理の後、１つのフリーブロックを新たなインプットブロックとして設定する（Ｓ３０２）。より詳しくは、データ制御部１０１は、１つのフリーブロックを選択し、選択したフリーブロックに対してイレースを実行し、イレースが実行されたフリーブロックを新たなインプットブロックとして設定する。本図の説明において、Ｓ３０２の処理によって設定された新たなインプットブロックを、新インプットブロックと表記する。なお、Ｓ３０１の処理とＳ３０２の処理との順番は逆であってもよい。
【００５４】
ブロック割り当て部１０３は、旧インプットブロックが割り当てられていたストリームを特定する（Ｓ３０３）。本図の説明において、Ｓ３０３の処理によって特定されたストリームを、旧ストリームと表記する。さらに、ブロック割り当て部１０３は、旧インプットブロックが第２のインプットブロックに該当するか否かを判定する（Ｓ３０４）。ブロック割り当て部１０３は、ストリーム対応情報１４を参照することによって、Ｓ３０３およびＳ３０４の処理を実行する。
【００５５】
旧インプットブロックが第２のインプットブロックに該当する場合（Ｓ３０４、Ｙｅｓ）、ブロック割り当て部１０３は、ストリーム対応情報１４から、旧ストリームと旧インプットブロックとの対応関係を削除し（Ｓ３０５）、旧ストリームと新インプットブロックとの対応関係を登録する（Ｓ３０６）。Ｓ３０６の処理においては、ブロック割り当て部１０３は、新インプットブロックを、第２のインプットブロックとして記録する。Ｓ３０５およびＳ３０６の処理は、ストリーム対応情報１４に記録された旧インプットブロックのブロックＩＤを新インプットブロックのブロックＩＤで上書きすることによっても実現できる。
【００５６】
旧インプットブロックが第２のインプットブロックに該当しない場合（Ｓ３０４、Ｎｏ）、即ち、旧インプットブロックが第１のインプットブロックに該当する場合、ブロック割り当て部１０３は、ライトＩＯの受信を監視し、旧インプットブロックの空き領域が無くなって以降において最初に受信するライトＩＯを検知する（Ｓ３０７）。ブロック割り当て部１０３は、検知されたライトＩＯに含まれるライトコマンドから、ストリームＩＤを読み出す（Ｓ３０８）。Ｓ３０８の処理によって読み出されたストリームＩＤが示すストリームを、新ストリームと表記する。
【００５７】
ブロック割り当て部１０３は、新ストリームと旧ストリームとが同じストリームであるか否かを判定する（Ｓ３０９）。新ストリームと旧ストリームとが同じストリームである場合（Ｓ３０９、Ｙｅｓ）、ブロック割り当て部１０３は、ストリーム対応情報１４から、旧ストリームと旧インプットブロックとの対応関係を削除し（Ｓ３１０）、新ストリームと新インプットブロックとの対応関係を登録する（Ｓ３１１）。Ｓ３１１の処理においては、ブロック割り当て部１０３は、新インプットブロックを、第１のインプットブロックとして記録する。Ｓ３１０およびＳ３１１の処理は、ストリーム対応情報１４に記録された旧インプットブロックのブロックＩＤを新インプットブロックのブロックＩＤで上書きすることによっても実現できる。
【００５８】
新ストリームと旧ストリームとが異なるストリームである場合（Ｓ３０９、Ｎｏ）、ブロック割り当て部１０３は、新ストリームは第１ストリームに該当するか否かを判定する（Ｓ３１２）。即ち、ブロック割り当て部１０３は、新ストリームには第１のインプットブロックが割り当てられているか否かを判定する。新ストリームは第１ストリームに該当する場合（Ｓ３１２、Ｙｅｓ）、即ち新ストリームは第１のインプットブロックが割り当てられている場合、ブロック割り当て部１０３は、旧ストリームと旧インプットブロックとの対応関係を削除し（Ｓ３１３）、旧ストリームと新インプットブロックとの対応関係を登録する（Ｓ３１４）。Ｓ３１３の処理においては、ブロック割り当て部１０３は、新インプットブロックを、第１のインプットブロックとして記録する。Ｓ３１３およびＳ３１４の処理は、ストリーム対応情報１４に記録された旧インプットブロックのブロックＩＤを新インプットブロックのブロックＩＤで上書きすることによっても実現できる。
【００５９】
新ストリームは第１ストリームに該当しない場合（Ｓ３１２、Ｎｏ）、即ち新ストリームは第２のインプットブロックが割り当てられている場合、ブロック割り当て部１０３は、新ストリームと第２のインプットブロックとの対応関係を削除し（Ｓ３１５）、旧ストリームと旧インプットブロックとの対応関係を削除する（Ｓ３１６）。また、ブロック割り当て部１０３は、新ストリームと新インプットブロックとの対応関係を登録し（Ｓ３１７）、旧ストリームと第２のインプットブロックとの対応関係を登録する（Ｓ３１８）。Ｓ３１５およびＳ３１７の処理は、ストリーム対応情報１４に記録された新ストリームのストリームＩＤを旧ストリームのストリームＩＤで上書きすることによっても実現できる。
【００６０】
Ｓ３０６、Ｓ３１１、Ｓ３１４、またはＳ３１８の処理の後、インプットブロックの割り当ての変更の処理が終了する。
【００６１】
なお、インプットブロックは、インプットブロックに空き領域が無くなったときにアクティブブロックに遷移せしめられる、として説明した。インプットブロックは、インプットブロックに空き領域が残っていてもアクティブブロックに遷移せしめられてもよい。また、インプットブロックは、空き領域に所定のデータでパディングされた後にアクティブブロックに遷移せしめられてもよい。即ち、インプットブロックは、任意のタイミングでアクティブブロックに遷移せしめられ得る。インプットブロックがアクティブブロックに遷移することは、当該インプットブロックに対するライトが終了することを意味する。
【００６２】
このように、第１の実施形態によれば、ブロック割り当て部１０３は、第１のインプットブロックへのライトデータのライトが終了した後、ブロックを新たな第１のインプットブロックに設定し、新たな第１のインプットブロックに旧ストリームと異なる１つの他のストリームを対応付ける（Ｓ３１５〜Ｓ３１８）。ブロック割り当て部１０３は、インプットブロックの新規設定に応じて、第１ストリームであった旧ストリームを第２ストリームに変更し、第２ストリームであった新ストリームを第１ストリームに変更する。これにより、メモリシステム１は、ホスト２からの、ストリームとインプットブロックとの対応関係を指定する指示を必要とすることなく、ストリームとインプットブロックとの対応関係を自動で変更することができる。したがって、メモリシステム１の利便性が向上する。
【００６３】
また、ブロック割り当て部１０３は、第２ストリームのうち第１のインプットブロックへのライトデータのライトが終了した後に最初に受信した第２ストリームを新たな第１のインプットブロックに割り当てる（Ｓ３１２、Ｎｏ、Ｓ３１５〜Ｓ３１８）。これにより、簡単な処理でストリームとインプットブロックとのインプットブロックの割り当ての変更を行うことが可能となる。
【００６４】
（第２の実施形態）
図１３は、第２の実施形態のコントローラ１０が備える機能の構成の一例を説明する図である。コントローラ１０は、データ制御部１０１、アドレス制御部１０２、ブロック割り当て部１０３ａ、ガベージコレクション部１０４、および測定部１０５を備えている。データ制御部１０１、アドレス制御部１０２、およびガベージコレクション部１０４の機能は、第１の実施形態の同名の構成要素の機能と同じである。
【００６５】
測定部１０５は、ストリーム毎にライト量を測定する。ライト量として、例えば、ライトコマンドの入力回数、または、ライトデータの合計のサイズが採用可能である。別の例では、ライト量として、最近の１分間など、所定時間の期間における、ライトコマンドの入力回数またはライトデータの合計のサイズが採用可能である。別の例では、ライト量として、ライトコマンドの入力回数またはライトデータの合計のサイズ、の、入力が開始してからの積算値が採用可能である。また、ストリーム毎のライト量として、所定時間の期間の全ストリームのライト量に対する、各ストリームのライト量の割合が採用可能である。また、ストリーム毎のライト量として、全期間の全ストリームのライト量に対する、各ストリームのライト量の割合が、採用可能である。
【００６６】
ブロック割り当て部１０３ａは、測定部１０５によるライト量の測定結果に基づいてインプットブロックの割り当ての変更を実行する。一例として、ブロック割り当て部１０３ａは、第２ストリームのうちのライト量が最大のストリームを第１ストリームに変更し、第１ストリームのうちの一を第２ストリームに変更する。
【００６７】
図１４は、インプットブロックの割り当ての変更にかかる、第２の実施形態のメモリシステム１の動作を説明するフローチャートである。インプットブロックに空き領域が無くなった場合、データ制御部１０１は、空き領域が無くなった当該インプットブロックをアクティブブロックとして設定する（Ｓ４０１）。本図の説明において、Ｓ４０１の処理によってアクティブブロックに設定されるインプットブロックを、旧インプットブロックと表記する。データ制御部１０１は、Ｓ４０１の処理の後、１つのフリーブロックを新たなインプットブロックとして設定する（Ｓ４０２）。本図の説明において、Ｓ４０２の処理によって設定された新たなインプットブロックを、新インプットブロックと表記する。
【００６８】
ブロック割り当て部１０３ａは、旧インプットブロックが割り当てられていたストリームを特定する（Ｓ４０３）。本図の説明において、Ｓ４０３の処理によって特定されたストリームを、旧ストリームと表記する。さらに、ブロック割り当て部１０３ａは、旧インプットブロックが第２のインプットブロックに該当するか否かを判定する（Ｓ４０４）。
【００６９】
旧インプットブロックが第２のインプットブロックに該当する場合（Ｓ４０４、Ｙｅｓ）、ブロック割り当て部１０３ａは、旧ストリームと旧インプットブロックとの対応関係を削除し（Ｓ４０５）、旧ストリームと新インプットブロックとの対応関係を登録する（Ｓ４０６）。Ｓ４０６の処理においては、ブロック割り当て部１０３ａは、新インプットブロックを、第２のインプットブロックとして記録する。Ｓ４０５およびＳ４０６の処理は、ストリーム対応情報１４に記録された旧インプットブロックのブロックＩＤを新インプットブロックのブロックＩＤで上書きすることによっても実現できる。
【００７０】
旧インプットブロックが第２のインプットブロックに該当しない場合（Ｓ４０４、Ｎｏ）、即ち、旧インプットブロックが第１のインプットブロックに該当する場合、ブロック割り当て部１０３ａは、測定部１０５による測定値を参照することによって、全ての第２ストリームのうちライト量が最大の第２ストリームを特定する（Ｓ４０７）。本図の説明において、Ｓ４０７の処理によって特定された第２ストリームを新ストリームと表記する。
【００７１】
ブロック割り当て部１０３ａは、Ｓ３１５〜Ｓ３１８と同じ処理をＳ４０８〜Ｓ４１１において実行し、インプットブロックの割り当ての変更の処理が終了する。
【００７２】
このように、第２の実施形態においては、ブロック割り当て部１０３ａは、第２ストリームのうちの一を選択し、選択されたストリームを新インプットブロックに割り当てる（Ｓ４０７〜Ｓ４１１）。これにより、メモリシステム１は、ホスト２からの、ストリームとインプットブロックとの対応関係を指定する指示を必要とすることなく、ストリームとインプットブロックとの対応関係を自動で変更することができる。したがって、メモリシステム１の利便性が向上する。
【００７３】
また、ブロック割り当て部１０３ａは、第２ストリームのうちライト量が最大のストリームを選択する。これにより、ライト量が大きいストリームに第１のインプットブロックを効率的に割り当てることができるようになるので、ガベージコレクションの効率が向上する。
【００７４】
なお、ブロック割り当て部１０３ａは、ライト量に応じた任意の方法で第２ストリームの選択または第１ストリームと第２ストリームとの交換を行うように構成されてもよい。例えば、ブロック割り当て部１０３ａは、旧ストリームよりもライト量が大きい任意の第２ストリームを選択する。
【００７５】
また、ブロック割り当て部１０３ａは、旧ストリームと、第２ストリームのうちのライト量が最大のストリームと、の間でライト量を比較し、比較の結果に基づいて第１ストリームと第２ストリームとの変更を実行する。具体的には、ブロック割り当て部１０３ａは、旧ストリームのライト量が第２ストリームのうちのライト量が最大のストリームのライト量よりも小さい場合に、旧ストリームを第２ストリームに変更し、第２ストリームのうちのライト量が最大のストリームを第１ストリームに変更する。また、ブロック割り当て部１０３ａは、旧ストリームのライト量が第２ストリームのうちのライト量が最大のストリームのライト量よりも大きい場合に、旧ストリームを第２ストリームに変更せず、第２ストリームのうちのライト量が最大のストリームを第１ストリームに変更しない。
【００７６】
また、インプットブロックがアクティブブロックに遷移せしめられる際に、インプットブロックの割り当ての変更が実行される、として説明した。インプットブロックからアクティブブロックへの遷移のタイミングは、ストリーム毎のライト量に基づいて決定されてもよい。例えば、ブロック割り当て部１０３ａは、測定部１０５による測定結果をストリーム毎に監視し、第１ストリームに属するライトデータが所定時間以上、受信されなかった場合、データ制御部１０１は、その第１ストリームに割り当てられていたインプットブロックをアクティブブロックに設定する。これにより、図１４に示す処理に従って、インプットブロックの割り当ての変更が実行される。
【００７７】
（第３の実施形態）
第１および第２の実施形態においては、インプットブロックへのライトが終了する際に、インプットブロックの割り当ての変更が実行される。インプットブロックの割り当ての変更の実行タイミングは、インプットブロックへのライトが終了するに応じたタイミングだけに限定されない。
【００７８】
第３の実施形態のメモリシステム１は、第２の実施形態のメモリシステム１との間で、ブロック割り当て部の機能が異なる。第３の実施形態のブロック割り当て部に符号１０３ｂを付すことによって第２の実施形態と区別する。
【００７９】
図１５は、インプットブロックの割り当ての変更にかかる、第３の実施形態のメモリシステム１の動作を説明するフローチャートである。
【００８０】
まず、ブロック割り当て部１０３ｂは、割り当ての変更タイミングに至ったか否かを判定する（Ｓ５０１）。
【００８１】
割り当ての変更タイミングの設定としては、任意のタイミングが採用可能である。例えば、割り当ての変更タイミングの設定として、経過時間に基づくタイミングが採用可能である。例えば、ブロック割り当て部１０３ｂは、前回の変更タイミングからの経過時間が所定時間に達した場合に、変更タイミングに至ったと判定する。割り当ての変更タイミングのための経過時間がインプットブロック毎に測定されてもよい。
【００８２】
また、例えば、ブロック割り当て部１０３ｂは、測定部１０５によるストリーム毎のライト量を監視し、ストリーム毎のライト量がインプットブロックの割り当ての変更の条件を満たした場合に、変更タイミングに至ったと判定する。
【００８３】
割り当ての変更タイミングに至っていない場合（Ｓ５０１、Ｎｏ）、ブロック割り当て部１０３ｂは、Ｓ５０１の処理を再び実行する。割り当ての変更タイミングに至った場合（Ｓ５０１、Ｙｅｓ）、ブロック割り当て部１０３ｂは、ストリーム毎のライト量を取得する（Ｓ５０２）。そして、ブロック割り当て部１０３ｂは、ストリーム毎のライト量がインプットブロックの割り当ての変更の条件を満たしているか否かを判定する（Ｓ５０３）。
【００８４】
インプットブロックの割り当ての変更の条件としては、ストリーム毎のライト量に基づく条件であれば、任意の条件が採用可能である。インプットブロックの割り当ての変更の条件の例を下記に説明する。
【００８５】
（第１の条件）
第１の条件によれば、少なくとも１つの第１ストリームのライト量が、第２ストリームのうちのライト量が最大の第２ストリームのライト量より小さいことを以て、インプットブロックの割り当ての変更の条件が満たされている、と判定される。換言すると、何れの第１ストリームのライト量も、第２ストリームのうちのライト量が最大の第２ストリームのライト量より大きいことを以て、インプットブロックの割り当ての変更の条件がみたされていない、と判定される。
【００８６】
（第２の条件）
第２の条件によれば、少なくとも１つの第１ストリームのライト量が、所定のしきい値よりも小さいことを以て、インプットブロックの割り当ての変更の条件が満たされている、と判定される。換言すると、何れの第１ストリームのライト量も前記しきい値よりも大きいことを以て、インプットブロックの割り当ての変更の条件が満たされていない、と判定される。
【００８７】
（第３の条件）
第３の条件によれば、少なくとも１つの第２ストリームのライト量が、所定のしきい値よりも大きいことを以て、インプットブロックの割り当ての変更の条件が満たされている、と判定される。換言すると、何れの第２ストリームのライト量も前記しきい値よりも小さいことを以て、インプットブロックの割り当ての変更の条件が満たされていない、と判定される。
【００８８】
ストリーム毎のライト量がインプットブロックの割り当ての変更の条件を満たしていない場合（Ｓ５０３、Ｎｏ）、ブロック割り当て部１０３ｂは、Ｓ５０１の処理を再び実行する。ストリーム毎のライト量がインプットブロックの割り当ての変更の条件を満たしている場合（Ｓ５０３、Ｙｅｓ）、ブロック割り当て部１０３ｂは、１つの第１ストリームと１つの第２ストリームとを選択する（Ｓ５０４）。
【００８９】
各ストリームの選択の基準としては、ストリーム毎のライト量に基づくものであれば、任意の基準が採用可能である。
【００９０】
インプットブロックの割り当ての変更の条件として第１の条件が採用される場合には、例えば、ライト量が最大の第２ストリームが選択され、選択された第２ストリームよりもライト量が小さい第１ストリームが選択される。また、インプットブロックの割り当ての変更の条件として第１の条件が採用される場合には、ライト量が最小の第１ストリームが選択されてもよい。
【００９１】
また、インプットブロックの割り当ての変更の条件として第２の条件が採用される場合には、例えば、第２の条件において使用されるしきい値よりもライト量が小さい第１ストリームが選択され、任意の第２ストリームが選択される。インプットブロックの割り当ての変更の条件として第２の条件が採用される場合には、選択された第１ストリームよりもライト量が大きい任意の第２ストリームが選択されてもよいし、１以上の第２ストリームのうちのライト量が最大の第２ストリームが選択されてもよい。
【００９２】
また、インプットブロックの割り当ての変更の条件として第３の条件が採用される場合には、例えば、第３の条件において使用されるしきい値よりもライト量が大きい第２ストリームが選択され、任意の第１ストリームが選択される。インプットブロックの割り当ての変更の条件として第３の条件が採用される場合には、選択された第２ストリームよりもライト量が小さい任意の第１ストリームが選択されてもよいし、１以上の第１ストリームのうちのライト量が最小の第１ストリームが選択されてもよい。
【００９３】
また、インプットブロックの割り当ての変更の条件に関係なく、任意の第２ストリームが選択され、選択された第２ストリームよりもライト量が小さい第１ストリームが選択されてもよい。また、インプットブロックの割り当ての変更の条件に関係なく、任意の第１ストリームが選択され、選択された第１ストリームよりもライト量が大きい第２ストリームが選択されてもよい。
【００９４】
Ｓ５０４の処理の後、ブロック割り当て部１０３ｂは、ストリーム対応情報１４を更新することによって、選択された第１ストリームを第２ストリームに変更し、選択された第２ストリームを第１ストリームに変更する（Ｓ５０５）。例えば、ブロック割り当て部１０３ｂは、選択された第１ストリームに選択された第２ストリームに割り当てられていた第２のインプットブロックを対応付け、選択された第２ストリームに選択された第１ストリームに割り当てられていた第１のインプットブロックを対応づける。
【００９５】
Ｓ５０５の処理の後、ブロック割り当て部１０３ｂは、Ｓ５０１の処理を再び実行する。なお、Ｓ５０５の処理の後、ブロック割り当て部１０３ｂは、Ｓ５０３の処理を再び実行してもよい。
【００９６】
なお、ブロック割り当て部１０３ｂは、Ｓ５０４の処理の後、選択された第１ストリームが割り当てられていた第１のインプットブロックをアクティブブロックに遷移せしめ、１つのフリーブロックを新しい第１のインプットブロックに設定した後、Ｓ５０５の処理を実行してもよい。また、例えば、ブロック割り当て部１０３ｂは、選択された第１ストリームが割り当てられていた第１のインプットブロックをアクティブブロックに遷移せしめる際、空き領域を所定のデータでパディングしてもよい。また、例えば、ブロック割り当て部１０３ｂは、選択された第１ストリームに新しい第１のインプットブロックを暫定的に対応付け、その後、当該新しい第１のインプットブロックへのライトが開始される前に、Ｓ５０５の処理を実行してもよい。
【００９７】
以上述べたように、第３の実施形態によれば、ブロック割り当て部１０３ｂは、任意に設定される条件が満たされた後、インプットブロックの割り当ての変更を実行する。また、ブロック割り当て部１０３ｂは、変更対象の第２ストリームを、ライト量に基づいて選択する。これにより、メモリシステム１は、インプットブロックが新規設定された場合でなくてもインプットブロックの割り当ての変更を実行することができる。したがって、メモリシステム１の利便性が向上する。
【００９８】
インプットブロックの割り当ての変更の条件としては、上述のように、経過時間に応じたタイミング、または、ライト量に応じたタイミング、が採用可能である。
【００９９】
（第４の実施形態）
第１〜第３の実施形態のメモリシステム１において、ブロック割り当て部は、新規のストリームに属するライトデータを受信する場合、新規のストリームに第２のインプットブロックを割り当ててもよい。新規のストリームとは、ストリーム対応情報１４に対応関係が記録されていないストリームをいう。また、ブロック割り当て部は、１以上の第１ストリームのうちの任意の第１ストリームを第２ストリームに変更し、新規のストリームを第１ストリームに設定してもよい。ブロック割り当て部は、１以上の第１ストリームのうちライト量が最小の第１ストリームを第２ストリームへの変更対象の第１ストリームとして選択してもよい。ＯＳ２０は、新規のストリームに属するライトデータを送信する場合に、新規のストリームをメモリシステム１に通知し、ブロック割り当て部は、通知の受信に応じて新規のストリームへのインプットブロックの割り当てを実施してもよい。
【０１００】
また、第２ストリームに属するライトデータを以降に受信しない場合、ブロック割り当て部は、その第２ストリームと第２のインプットブロックとの対応関係を削除してもよい。また、第１ストリームに属するライトデータを以降に受信しない場合、ブロック割り当て部は、その第１ストリームと第１のインプットブロックとの対応関係を削除し、任意の第２ストリームを第１ストリームに変更してもよい。ブロック割り当て部は、１以上の第２ストリームのうちライト量が最大の第２ストリームを第１ストリームへの変更対象の第２ストリームとして選択してもよい。ＯＳ２０は、１つのストリームに属するライトデータの送信を以降に行わない場合に、以降にライトデータの送信を行わないストリームをメモリシステム１に通知し、ブロック割り当て部は、通知の受信に応じて割り当ての変更を実施してもよい。
【０１０１】
（第５の実施形態）
第１〜第４の実施形態のメモリシステム１は、ストリームＩＤを含まないライトコマンドを備えるライトＩＯを受信可能に構成されてもよい。例えば、データ制御部１０１は、ストリームに属さないライトデータを第２のインプットブロックにライトする。または、第１のインプットブロックとも第２のインプットブロックとも異なる第３のインプットブロックが設定され、データ制御部１０１は、ストリームに属さないライトデータを第３のインプットブロックにライトする。
【０１０２】
（第６の実施形態）
図１６は、メモリシステム１の実装例を示す図である。メモリシステム１は、例えばサーバシステム１０００に実装される。サーバシステム１０００は、ディスクアレイ２０００とラックマウントサーバ３０００とを備える。ディスクアレイ２０００とラックマウントサーバ３０００とは通信インタフェース４０００によって接続される。通信インタフェース４０００の規格としては任意の規格が採用可能である。
【０１０３】
ラックマウントサーバ３０００は、サーバラックを備え、当該サーバラックに１以上のホスト２が装着される。また、ディスクアレイ２０００は、サーバラックを備え、当該サーバラックに１以上のメモリシステム１が装着される。各ホスト２は、通信インタフェース４０００を介してディスクアレイ２０００を構成する各メモリシステム１にライトＩＯを送信することができる。
【０１０４】
各メモリシステム１は、第１〜第６の実施形態の何れかが採用された構成を有している。これにより、各メモリシステム１は、ストリームとインプットブロックとの対応関係を自動で更新することができる。各ホスト２によるストリームとインプットブロックとの対応関係の指示を不要とすることができるので、各メモリシステム１の利便性が向上する。
【０１０５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１０６】
１  メモリシステム、２  ホスト、１０  コントローラ、１１  Ｉ／Ｆ、１２  ＲＡＭ、１３  ＮＡＮＤメモリ、１４  ストリーム対応情報、１５  翻訳情報、２０  ＯＳ、２１  アプリケーション、２２  ストリーム管理情報、１０１  データ制御部、１０２  アドレス制御部、１０３，１０３ａ，１０３ｂ  ブロック割り当て部、１０４  ガベージコレクション部、１０５  測定部、１０００  サーバシステム、２０００  ディスクアレイ、３０００  ラックマウントサーバ、４０００  通信インタフェース。
【図１】
2018200718.tif 000003
【図２】
2018200718.tif 000004
【図３】
2018200718.tif 000005
【図４】
2018200718.tif 000006
【図５】
2018200718.tif 000007
【図６】
2018200718.tif 000008
【図７】
2018200718.tif 000009
【図８】
2018200718.tif 000010
【図９】
2018200718.tif 000011
【図１０】
2018200718.tif 000012
【図１１】
2018200718.tif 000013
【図１２】
2018200718.tif 000014
【図１３】
2018200718.tif 000015
【図１４】
2018200718.tif 000016
【図１５】
2018200718.tif 000017
【図１６】
2018200718.tif 000018