以下に添付図面を参照して、実施形態にかかるメモリシステムおよびホスト装置を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
(第1の実施形態)
図1は、第1の実施形態のメモリシステムが実装された、コンピュータシステムの構成例である。コンピュータシステムは、メモリシステム1およびホスト装置(以降、ホスト)2を備える。メモリシステム1は、ホスト2に通信路で接続されている。メモリシステム1は、ホスト2の外部記憶装置として機能する。メモリシステム1とホスト2とを接続する通信路の規格としては任意の規格が採用可能である。
ホスト2は、ファイルシステムドライバを内蔵するコンピュータである。コンピュータは、例えば、パーソナルコンピュータ、サーバ、ポータブルな情報機器、またはAV機器を含む。ホスト2においては、OS20および1以上のアプリケーション21が実行される。アプリケーション21は、ファイルシステムドライバを介してメモリシステム1に対するデータの入出力を実行する。
ファイルシステムドライバは、例えば、オペレーティングシステム(OS)20の一部の機能である。OS20は、例えば、実マシンのオペレーティングシステムまたはバーチャルマシンのためのオペレーティングシステムを含む。バーチャルマシンのためのオペレーティングシステムは、ハイパーバイザとして知られている。ファイルシステムドライバは、1以上のデータ構造を管理する。1以上のデータ構造の夫々は、ストリーム管理情報22に登録されている。ファイルシステムドライバは、ストリーム管理情報22を、ライト対象のデータにストリームIDを付与するために参照する。ライトIOは、例えばアプリケーション21からライト要求されたデータをメモリシステム1にライトするためにOS20が発行する、メモリシステム1に対する入出力処理である。アプリケーション21は、ライト対象のデータを生成した後、OS20にライト要求を送信する。OS20は、ライト要求の受信に応じて、ライト対象のデータをメモリシステム1にライトするためのライトIOを発行する。ライト対象のデータの生成元はアプリケーション21だけに限定されない。例えばOS20がライト対象のデータを生成してもよい。ライトIOは、ライト対象のデータおよびライトコマンドを含む。以降、ライトIOに含まれるライト対象のデータを、ライトデータと表記する。なお、アプリケーション21などからOS20にライト要求されたデータは、OS20によって複数のライトデータに分割され、当該複数のライトデータが夫々異なるライトIOによってメモリシステム1に送信されてもよい。
図2は、ライトIOの構成の一例を示す図である。ライトIOは、ライトコマンドおよびライトデータを含む。ライトコマンドは、ライトコマンドである旨を示すコマンド種別、ライトデータの位置を示す位置情報、ライトデータのサイズ、およびストリーム識別子(ストリームID)を含む。位置情報は、ホスト2がメモリシステム1にマッピングするアドレス空間内の番地で表記される。例えば、位置情報は、LBA(Logical Block Address)の形式で表記される。位置情報は、任意の形式で表現され得る。ホスト2がメモリシステム1に対してライトデータの位置指定に使用する位置情報を、論理アドレスと表記する。
ストリームIDは、ここでは一例として、予期されるデータの寿命に応じて選択される識別子である。データの寿命とは、メモリシステム1にライトされてから書き換えられるまでの時間である。書き換えは、ホスト2が、重複する論理アドレスを指定して複数回のライトIOを発行することを含む。また、書き換えは、論理アドレスと物理アドレスとの対応関係を解消する処理を含む。論理アドレスと物理アドレスとの対応関係を解消する処理は、例えばTRIMコマンドまたはUNMAPコマンドに応じて実行される。
前述のように、ストリームIDを含むライトデータと、ライトコマンドと、が対になってライトIOが構成される。この構成により、メモリシステム1が受信する各ライトデータはストリームIDが対応付けられている。なお、ライトデータにストリームIDが対応付けられていることを、ライトデータにストリームIDが付与されている、と表記することがある。また、ライトコマンドにストリームIDが記録されることを、ライトコマンド/ライトデータにストリームIDが付与される、と表記することがある。また、ライトコマンド/ライトデータにストリームIDを付与することを、ライトコマンド/ライトデータにストリームIDを割り当てる、またはライトコマンド/ライトデータにストリームIDを対応付ける、と表記することがある。
ストリーム管理情報22は、OS20がライトデータに付与すべきストリームIDを得るための情報である。ストリーム管理情報22の形式としては任意の形式が採用可能である。ストリーム管理情報22の形式としては、例えばテーブル形式が採用可能である。ストリーム管理情報22によれば、予期されるデータの寿命が同程度の2つのデータには、同じストリームIDが対応づけられる。また、ストリーム管理情報22によれば、予期されるデータの寿命が異なる2つのデータには、夫々異なるストリームIDが対応づけられる。同じストリームIDが対応付けられている1以上のデータを、ストリームと表記する。ストリームIDは、ストリームを識別するための識別子である。予期されるデータの寿命を判別するための情報として、データ構造の属性が用いられる。即ち、ストリーム管理情報22は、データ構造の属性とストリームとの対応関係が記録されている。ストリーム管理情報22の構成としては任意の構成が採用可能である。例えば、ストリーム管理情報22は、属性を検索キーとしてストリームIDが取得可能に構成された、テーブル形式の情報である。ストリームに対応付けられる属性としては、予期されるデータの寿命と相関を有する任意の種類の属性が採用可能である。なお、予期されるデータの寿命とは異なる基準で選択された属性が、ストリームに対応付けられる属性として採用されてもよい。
図3は、ストリーム管理情報22の一例を示す図である。この例によれば、アプリケーションID、バーチャルマシンID(VM ID)、またはスレッドIDがストリームに対応付けられている。アプリケーションIDは、アプリケーション21を識別するための識別子である。アプリケーション21がバーチャルマシンである場合には、VM IDがストリーム管理情報22を検索するための属性として採用される。VM IDは、バーチャルマシンを識別するための識別子である。スレッドIDは、ホスト2にて実行される処理の単位である。例えば、1つのアプリケーション21は、1以上のスレッドを生成する。図3のストリーム管理情報22によれば、例えばVM IDが「1234」であるバーチャルマシンがデータを出力するためにライトIOが生成された場合、当該ライトIOに含まれるライトコマンドには、ストリームID「01」が付与される。また、例えばVM IDが「2222」であるバーチャルマシンがデータを出力するためにライトIOが生成された場合、当該ライトIOに含まれるライトコマンドには、ストリームID「02」が付与される。このように、ストリーム管理情報22に記録される属性として、データの出力元を識別するための識別子が採用可能である。OS20は、ライトIOを発行する際、当該ライトIOに含まれるライトデータの出力元を特定し、特定した出力元の識別子を検索キーとしてストリーム管理情報22を検索する。なお、必ずしも全ての出力元の夫々が夫々異なるストリームIDに一対一に対応付けられていなくてもよい。一部の複数の出力元が同一のストリームIDに対応付けられてもよい。
図4は、ストリーム管理情報22の別の一例を示す図である。この例によれば、ライトデータを構成するファイルのタイプがストリームに対応付けられている。ファイルのタイプは、拡張子によって識別される。例えば図4のストリーム管理情報22によれば、拡張子「.sys」を有するファイルを構成するデータを出力するためのライトIOが生成された場合、当該ライトIOに含まれるライトコマンドには、ストリームID「00」が付与される。また、例えば拡張子「.doc」を有するファイルを構成するデータを出力するためのライトIOが生成された場合、当該ライトIOに含まれるライトコマンドには、ストリームID「02」が付与される。このように、ストリーム管理情報22に記録される属性として、ライトデータによって構成されるファイルのタイプが採用可能である。OS20は、ライトIOを発行する際、当該ライトIOに含まれるライトデータによって構成されるファイルの拡張子を特定し、特定した拡張子を検索キーとしてストリーム管理情報22を検索する。なお、全てのタイプの夫々が夫々異なるストリームIDと一対一に対応付けられていなくてもよい。一部の複数のタイプが同一のストリームIDに対応付けられていてもよい。
図5は、ストリーム管理情報22の別の一例を示す図である。この例によれば、アプリケーション21、スレッド、またはバーチャルマシン、を使用するユーザの名前(以降、ユーザネーム)がスレッドに対応付けられている。例えば図5のストリーム管理情報22によれば、ユーザネーム「Smith」のユーザがアプリケーション21またはスレッドを操作することによって当該アプリケーション21またはスレッドがデータを出力するためのライトIOが生成された場合、当該ライトIOに含まれるライトコマンドには、ストリームID「01」が付与される。また、例えばユーザネーム「Johnson」のユーザがアプリケーション21またはスレッドを操作することによって当該アプリケーション21またはスレッドがデータを出力するためのライトIOが生成された場合、当該ライトIOに含まれるライトコマンドには、ストリームID「02」が付与される。このように、ストリーム管理情報22に記録される属性として、ユーザネームが採用可能である。OS20は、ライトIOを発行する際、当該ライトIOに含まれるライトデータの出力元を操作するユーザのユーザネームを特定し、特定したユーザネームを検索キーとしてストリーム管理情報22を検索する。なお、全てのユーザネームの夫々が夫々異なるストリームIDと一対一に対応付けられていなくてもよい。一部の複数のユーザネームが同一のストリームIDに対応付けられていてもよい。
図6は、ストリーム管理情報22の別の一例を示す図である。この例によれば、ライトデータを構成するファイルの名前(以降、ファイルネーム)がストリームに対応付けられる。例えば図6のストリーム管理情報22によれば、例えばファイルネーム「abcde.doc」を有するファイルを構成するデータを出力するためのライトIOが生成された場合、当該ライトIOに含まれるライトコマンドには、ストリームID「02」が付与される。また、例えばファイルネーム「aiueo.sys」を有するファイルを構成するデータを出力するためのライトIOが生成された場合、当該ライトIOに含まれるライトコマンドには、ストリームID「01」が付与される。このように、ストリーム管理情報22に記録される属性として、ライトデータによって構成されるファイルの名前が採用可能である。OS20は、ライトIOを発行する際、当該ライトIOに含まれるライトデータによって構成されるファイルの名前を特定し、特定した名前を検索キーとしてストリーム管理情報22を検索する。なお、全てのファイルネームの夫々が夫々異なるストリームIDと一対一に対応付けられていなくてもよい。一部の複数のファイルネームが同一のストリームIDに対応付けられていてもよい。
なお、ストリームIDが付与されたライトコマンド/ライトデータを発行できる構成であれば、ホスト2の構成例は上記に限定されない。例えばストリームIDの付与はOS20以外の構成要素が実行してもよい。例えば、ユーザがストリームIDを決定し、決定したストリームIDをライトデータに付与してもよい。また、アプリケーション21がストリームIDを決定し、決定したストリームIDをライトデータに付与してもよい。
例えばホスト2は、演算装置および記憶装置を備える。演算装置は、プログラムに基づいて動作するサーキットである。ホスト2の記憶装置は、アプリケーション21の機能を実現するプログラムおよびOS20の機能を実現するプログラムが格納される。ホスト2の演算装置は、ホスト2の記憶装置に格納された各プログラムを実行することによってOS20の機能およびアプリケーション21の機能を実現する。
メモリシステム1は、コントローラ10、インタフェース(I/F)11、RAM(Random Access Memory)12、およびNANDメモリ13を備えている。
I/F11は、ホスト2と通信するためのインタフェース装置である。I/F11は、ホスト2からのライトIOを受信する。言い換えると、I/F11は、ストリームIDが付与されたライトデータを受信する。
コントローラ10は、I/F11が受信したライトIOを処理する。具体的には、コントローラ10は、ライトIOに含まれるライトデータの記憶領域への格納を制御する。ライトデータの格納先の記憶領域は、RAM12およびNANDメモリ13を含む。コントローラ10は、例えばプログラムに基づいて動作するサーキットである演算装置である。演算装置は、プログラムを実行することによってコントローラ10としての各種機能を実現する。コントローラ10が備える各種機能の構成については後述する。
RAM12は、一時的な記憶領域として機能するメモリである。一時的な記憶領域とは、短時間で消去されるデータまたは頻繁に使用されるデータが格納される記憶領域、キャッシュ、バッファ、または、プログラムが展開される記憶領域、を含む。一時的な記憶領域として機能するメモリの種類は、DRAM(Dynamic Random Access Memory)であってもよいしSRAM(Static Random Access Memory)であってもよい。一時的な記憶領域として機能するメモリの種類はRAMだけに限定されない。一時的な記憶領域として機能するメモリとしては、NANDメモリ13よりも高速アクセスが可能なメモリが採用可能である。一時的な記憶領域として機能するメモリとしては、揮発性または不揮発性のメモリが採用可能である。
NANDメモリ13は、より詳しくは、NAND型のフラッシュメモリである。NANDメモリ13は、メモリシステム1においてストレージとして機能するメモリである。即ち、NANDメモリ13は、ライトデータが格納される。ストレージとして機能するメモリの種類はNAND型のフラッシュメモリだけに限定されない。不揮発性のメモリであれば任意の種類のメモリがストレージとして機能するメモリとして採用可能である。
NANDメモリ13は、複数のブロックを備える。ブロックは、NANDメモリ13に格納されているデータに対するイレースの処理が可能な最小の単位領域である。即ち、1つのブロックに格納されているデータは、一括でイレースされる。なお、複数のブロックによってイレースの処理の最小の単位領域が構成されてもよい。各ブロックは、複数のページを備える。NANDメモリ13に対する、データのライトの処理およびデータのリードの処理は、ページ単位で実行可能である。
ここで、ブロックの状態遷移について説明する。図7は、各種ブロックの状態遷移の一例を示す図である。ハッチングされた矢印は、ブロックの状態遷移を示しており、実線の矢印は、データの移動を示している。ブロックの状態としては、少なくとも、インプットブロック、アクティブブロック、およびフリーブロックがある。1以上のアクティブブロックは、アクティブブロックプールを構成し、1以上のフリーブロックは、フリーブロックプールを構成する。
インプットブロックとは、ライトデータがライトされるブロックとして設定されたブロックである。即ち、インプットブロックは、空のページを備えており、当該空のページにライトデータがライトされることが予定されている。アクティブブロックは、ライトが終了したブロックのうちの、まだ再利用できないブロックである。ライトが終了したブロックのうちの、有効なユーザデータが格納されているブロックは、アクティブブロックとして管理される。再利用とは、インプットブロックに遷移させることをいう。フリーブロックは、再利用可能なブロックである。
例えば、インプットブロックに1ブロック分のデータがライトされた後、そのインプットブロックはアクティブブロックに遷移する。アクティブブロックに格納されているライトデータの状態は、有効な状態と無効な状態とのうちの何れかである。アクティブブロックに第1のライトデータが格納されている状態でホスト2から第1のライトデータと同一の論理アドレスを指定して第2のライトデータが送られてきた場合、コントローラ10は、インプットブロックの空のページに第2のライトデータを書き込み、アクティブブロックに格納されている第1のライトデータを無効なライトデータとして管理する。ライトデータが有効とは、そのライトデータが最新の状態であることをいう。同一の論理アドレスが指定された複数のライトデータがNANDメモリ13に格納される場合において、最新の状態とは、その複数のライトデータのうちのホスト2が最後に書き込んだライトデータの状態をいう。無効なライトデータとは、同一の論理アドレスが指定されてNANDメモリ13に格納された複数のライトデータのうちの、ホスト2が最後に書き込んだライトデータ以外のライトデータをいう。「空の」状態とは、ここでは、無効なデータおよび有効なデータの何れも記憶されていない状態をいう。空のページは、データが書き込み可能な空き領域である。
ユーザデータが有効であるか無効であるかは、後述の翻訳情報15によって判定可能である。例えば、有効なユーザデータは、翻訳情報15によって論理アドレスが対応付けられた位置に格納されたユーザデータである。無効なユーザデータは、翻訳情報15によって論理アドレスが対応付けられていない位置に格納されたユーザデータである。また、ユーザデータが有効であるか無効であるかは、ユーザデータ毎のフラグによって判定可能に管理されてもよい。ユーザデータが有効であるか無効であるかの管理方法としては、上記以外の任意の方法が採用可能である。
フリーブロックが枯渇すると、ガベージコレクションが実行される。ガベージコレクションは、一つのアクティブブロックから有効なライトデータを他のブロックの空きページに移動(コピー)し、その後、移動元のアクティブブロックに格納されている全ライトデータを無効なデータとして管理する、処理である。移動元のアクティブブロックは、ガベージコレクションの後、フリーブロックに遷移する。なお、移動先のブロックはインプットブロックであってもよいし、ガベージコレクションのための専用のブロックであってもよい。フリーブロックは、イレースが実行されることによって空の状態にされた後、インプットブロックに遷移する。
インプットブロックは複数用意される。そして、各インプットブロックには、ストリームが対応付けられている。即ち、ライトデータのライト先のインプットブロックは、ストリームに応じて選択される。
第1の実施形態によれば、複数のインプットブロックは、第1のインプットブロックと第2のインプットブロックとを含む。第1のインプットブロックは、1つのストリームのみに割り当てられたインプットブロックである。1つの第1のインプットブロックは、その第1のインプットブロックが割り当てられた1つのストリームに属するライトデータがライトされる。第2のインプットブロックは、第1のインプットブロックが割り当てられたストリームに属するライトデータ以外のライトデータがライトされるインプットブロックである。第1のインプットブロックが割り当てられていないストリームに属するライトデータは、第2のインプットブロックにライトされる。
以降、第1のインプットブロックが割り当てられているストリームを、第1ストリームと表記する。第2のインプットブロックが割り当てられているストリームを、第2ストリームと表記する。
図7の例によれば、ストリームIDが「a」であるストリームおよびストリームIDが「b」であるストリームは、第1ストリームに該当する。ストリームIDが「x」であるストリーム、ストリームIDが「y」であるストリーム、およびストリームIDが「z」であるストリームは、第2ストリームに該当する。
なお、第1のインプットブロックの数は、1であってもよいし複数であってもよい。第2のインプットブロックの数は、1であってもよいし複数であってもよい。NANDメモリ13に含まれるブロックの数は有限である。従って、例えば、第1のインプットブロックの数および第2のインプットブロックの数が固定される。第1のインプットブロックの数の上限値が固定されていてもよい。第2のインプットブロックの数の上限値が固定されていてもよい。第1のインプットブロックの数および第2のインプットブロックの数の合計が固定されていてもよい。
第1の実施形態によれば、コントローラ10は、ストリームに対するインプットブロックの割り当てを、ホスト2からのユーザデータの入力状況に応じて自動で実行する。言い換えると、コントローラ10は、ストリームとインプットブロックとの対応関係を動的に変更する。
コントローラ10は、NANDメモリ13にライトデータをライトする際には、NANDメモリ13に格納されている管理情報を参照する。また、コントローラ10は、状況に応じて管理情報を更新する。管理情報は、RAM12にキャッシュされてもよい。即ち、コントローラ10は、管理情報をRAM12にロードし、RAM12にロードされた管理情報を参照したり更新したりしてもよい。コントローラ10は、管理情報を更新した場合、RAM12上の管理情報のうちの少なくとも更新された部分を所定のタイミングでNANDメモリ13に格納する。
管理情報は、ストリーム対応情報14および翻訳情報15を少なくとも含む。ストリーム対応情報14は、ストリームとインプットブロックとを対応付ける情報である。翻訳情報15は、論理アドレスをNANDメモリ13上の物理的な位置に対応付ける情報である。
図8は、ストリーム対応情報14の一例を示す図である。ここでは、各ブロックは、ブロックIDによって識別される。この例によれば、ストリームIDが「00」であるストリームは、ブロックIDが「0001」であるインプットブロックに対応付けられている。また、例えばストリームIDが「01」であるストリームは、ブロックIDが「0022」であるインプットブロックに対応付けられている。また、例えばストリームIDが「02」であるストリームおよびストリームIDが「03」であるストリームは、ブロックIDが「0034」であるインプットブロックに対応付けられている。ブロックIDが「0001」であるインプットブロックおよびブロックIDが「0022」であるインプットブロックは、夫々第1のインプットブロックに該当する。即ち、ストリームIDが「00」であるストリームおよびストリームIDが「01」であるストリームは、夫々第1ストリームに該当する。ブロックIDが「0034」であるインプットブロックは、第2のインプットブロックに該当する。即ち、ストリームIDが「02」であるストリームおよびストリームIDが「03」であるストリームは、夫々第2ストリームに該当する。
また、図8の例によれば、ストリーム対応情報14は、ブロックフラグを備える。ブロックフラグは、第1のインプットブロックであるか第2のインプットブロックであるかを示す情報である。即ち、ブロックフラグは、第1のインプットブロックに設定されたインプットブロックを示す管理情報である。ここでは、「1」は第1のインプットブロックを示し、「0」は第2のインプットブロックを示す。
なお、ストリーム対応情報14は、第2のインプットブロックにかかるストリームとインプットブロックとの対応関係が省略されて構成されてもよい。その場合には、ストリーム対応情報14に記録されていないストリームは、第2ストリームであると判断可能である。さらに、例えば第2のインプットブロックはストリーム対応情報14とは別に管理され、第2ストリームに属するライトデータは、ストリーム対応情報14とは別に管理される第2のインプットブロックがライト先として特定される。
図9は、コントローラ10が備える機能の構成の一例を説明する図である。コントローラ10は、データ制御部101、アドレス制御部102、ブロック割り当て部(アロケータ)103、およびガベージコレクション部104を備えている。
データ制御部101は、ライトIOに含まれるライトデータをRAM12に格納したりNANDメモリ13に格納したりする。例えば、データ制御部101は、ライトデータをいったんRAM12に格納する。そして、データ制御部101は、RAM12に格納されたライトデータを、所定のタイミングでNANDメモリ13にライトする。データ制御部101は、ライトデータをNANDメモリ13にライトする際には、ストリーム対応情報14を参照することによって、ライト先のインプットブロックを選択する。データ制御部101は、ストリームIDとストリーム対応情報14に応じて、ライト先のインプットブロックを決定する。また、データ制御部101は、インプットブロックがアクティブブロックに遷移した場合に、フリーブロックから新たなインプットブロックを生成する。
ブロック割り当て部103は、ストリームに対するインプットブロックの割り当て、および、ストリームとインプットブロックとのインプットブロックの割り当ての変更、を実行する。第1の実施形態においては、ブロック割り当て部103は、新たなインプットブロックが生成され、当該インプットブロックが何れのストリームにも割り当てられていない状態で、インプットブロックが割り当てられていないストリームに属するライトIOをコントローラ10が受信した場合、当該インプットブロックが割り当てられていないストリームに、当該新しいインプットブロックを割り当てる。ブロック割り当て部103は、割り当てを実行する毎に割り当て結果をストリーム対応情報14に反映させる。
ガベージコレクション部104は、ガベージコレクションを実行する。ガベージコレクション部104は、各アクティブブロックに格納されているライトデータが属するストリームを考慮することなくガベージコレクションを実行してもよいし、同一のストリームに属する2つのライトデータは夫々異なるブロックに移動するようにガベージコレクションを実行してもよい。例えば、ガベージコレクション部104は、ライトデータ毎(またはアクティブブロック毎)にストリームIDを記憶し、移動元のブロックに格納されている各ライトデータを、そのライトデータが属するストリームに割り当てられたインプットブロックに移動する。
アドレス制御部102は、データ制御部101によるライトデータのNANDメモリ13へのライト、およびガベージコレクション部104によるライトデータのNANDメモリ13へのライト、に応じて、翻訳情報15を更新する。
なお、コントローラ10が備える構成要素(データ制御部101、アドレス制御部102、ブロック割り当て部103、およびガベージコレクション部104)のうちの一部または全部は、ハードウェアサーキット、または、ハードウェアサーキットと演算装置との組み合わせによって実現されてもよい。ハードウェアサーキットは、プログラムを要しないサーキットである。コントローラ10が備える構成要素のうちの複数を1の構成要素によって実現されてもよい。また、コントローラ10が備える構成要素のうちの1の構成要素を複数の構成要素によって実現されてもよい。また、データ制御部101、アドレス制御部102、ブロック割り当て部103、およびガベージコレクション部104のうちの一部または全部は、コントローラ10の外に具備されてもよい。
図10は、ライト時のOS20の動作を説明するフローチャートである。アプリケーション21(またはスレッドまたはVM)からライト要求を発行すると、OS20(より詳しくはOS20内のファイルシステムドライバ)は当該ライト要求を受信する(S101)。OS20は、ライトデータに割り当てるストリームIDを、ストリーム管理情報22を参照することによって決定する(S102)。ファイルシステムドライバは、ライトデータとライトコマンドとを含むライトIOを、メモリシステム1に発行し(S103)、ライト時のOS20の動作が終了する。なお、S103の処理によって発行されるライトIOに含まれるライトコマンドは、S102の処理によって決定されたストリームIDが記録されている。
図11は、ライトIOの処理にかかるメモリシステム1の動作の概略を説明するフローチャートである。コントローラ10は、ライトIOを受信すると(S201)、データ制御部101は、ライトIOに含まれるライトコマンドから、ストリームIDを読み出す(S202)。データ制御部101は、ストリームIDを用いてストリーム対応情報14を検索することによって、ライト先のインプットブロックを特定し(S203)、特定したインプットブロックに対し、ライトデータのライトを実行する(S204)。アドレス制御部102は、インプットブロックへのライトデータのライトに応じて、翻訳情報15を更新し(S205)、ライトIOの処理が終了する。
ライトIOの処理によってインプットブロックがいっぱいになった際には、コントローラ10は、インプットブロックの割り当ての変更を実行する。図12は、インプットブロックの割り当ての変更にかかる、第1の実施形態のメモリシステム1の動作を説明するフローチャートである。インプットブロックに空き領域が無くなった場合、データ制御部101は、空き領域が無くなった当該インプットブロックをアクティブブロックとして設定する(S301)。本図の説明において、S301の処理によってアクティブブロックに設定されるインプットブロックを、旧インプットブロックと表記する。
なお、インプットブロック、アクティブブロックおよびフリーブロックの管理方法としては任意の方法が採用可能である。例えば、インプットブロックとして設定されたブロックのブロックIDが記録されたインプットブロックリスト、アクティブブロックとして設定されたブロックのブロックIDが記録されたアクティブブロックリスト、およびフリーブロックとして設定されたブロックのブロックIDが記録されたフリーブロックリスト、が管理情報に含まれ、コントローラ10の各構成要素はインプットブロックリスト、アクティブブロックリストおよびフリーブロックリストを適宜更新する。ストリーム対応情報14は、インプットブロックリストとして機能しうる。ブロック毎に状態(インプットブロック/アクティブブロック/フリーブロック)を記述した状態情報が更新情報に含まれ、コントローラ10は状態情報を適宜更新するように構成されてもよい。各ブロックの所定位置に、ブロックの状態を示すフラグ情報が記録され、コントローラ10は適宜フラグ情報を更新するように構成されてもよい。
データ制御部101は、S301の処理の後、1つのフリーブロックを新たなインプットブロックとして設定する(S302)。より詳しくは、データ制御部101は、1つのフリーブロックを選択し、選択したフリーブロックに対してイレースを実行し、イレースが実行されたフリーブロックを新たなインプットブロックとして設定する。本図の説明において、S302の処理によって設定された新たなインプットブロックを、新インプットブロックと表記する。なお、S301の処理とS302の処理との順番は逆であってもよい。
ブロック割り当て部103は、旧インプットブロックが割り当てられていたストリームを特定する(S303)。本図の説明において、S303の処理によって特定されたストリームを、旧ストリームと表記する。さらに、ブロック割り当て部103は、旧インプットブロックが第2のインプットブロックに該当するか否かを判定する(S304)。ブロック割り当て部103は、ストリーム対応情報14を参照することによって、S303およびS304の処理を実行する。
旧インプットブロックが第2のインプットブロックに該当する場合(S304、Yes)、ブロック割り当て部103は、ストリーム対応情報14から、旧ストリームと旧インプットブロックとの対応関係を削除し(S305)、旧ストリームと新インプットブロックとの対応関係を登録する(S306)。S306の処理においては、ブロック割り当て部103は、新インプットブロックを、第2のインプットブロックとして記録する。S305およびS306の処理は、ストリーム対応情報14に記録された旧インプットブロックのブロックIDを新インプットブロックのブロックIDで上書きすることによっても実現できる。
旧インプットブロックが第2のインプットブロックに該当しない場合(S304、No)、即ち、旧インプットブロックが第1のインプットブロックに該当する場合、ブロック割り当て部103は、ライトIOの受信を監視し、旧インプットブロックの空き領域が無くなって以降において最初に受信するライトIOを検知する(S307)。ブロック割り当て部103は、検知されたライトIOに含まれるライトコマンドから、ストリームIDを読み出す(S308)。S308の処理によって読み出されたストリームIDが示すストリームを、新ストリームと表記する。
ブロック割り当て部103は、新ストリームと旧ストリームとが同じストリームであるか否かを判定する(S309)。新ストリームと旧ストリームとが同じストリームである場合(S309、Yes)、ブロック割り当て部103は、ストリーム対応情報14から、旧ストリームと旧インプットブロックとの対応関係を削除し(S310)、新ストリームと新インプットブロックとの対応関係を登録する(S311)。S311の処理においては、ブロック割り当て部103は、新インプットブロックを、第1のインプットブロックとして記録する。S310およびS311の処理は、ストリーム対応情報14に記録された旧インプットブロックのブロックIDを新インプットブロックのブロックIDで上書きすることによっても実現できる。
新ストリームと旧ストリームとが異なるストリームである場合(S309、No)、ブロック割り当て部103は、新ストリームは第1ストリームに該当するか否かを判定する(S312)。即ち、ブロック割り当て部103は、新ストリームには第1のインプットブロックが割り当てられているか否かを判定する。新ストリームは第1ストリームに該当する場合(S312、Yes)、即ち新ストリームは第1のインプットブロックが割り当てられている場合、ブロック割り当て部103は、旧ストリームと旧インプットブロックとの対応関係を削除し(S313)、旧ストリームと新インプットブロックとの対応関係を登録する(S314)。S313の処理においては、ブロック割り当て部103は、新インプットブロックを、第1のインプットブロックとして記録する。S313およびS314の処理は、ストリーム対応情報14に記録された旧インプットブロックのブロックIDを新インプットブロックのブロックIDで上書きすることによっても実現できる。
新ストリームは第1ストリームに該当しない場合(S312、No)、即ち新ストリームは第2のインプットブロックが割り当てられている場合、ブロック割り当て部103は、新ストリームと第2のインプットブロックとの対応関係を削除し(S315)、旧ストリームと旧インプットブロックとの対応関係を削除する(S316)。また、ブロック割り当て部103は、新ストリームと新インプットブロックとの対応関係を登録し(S317)、旧ストリームと第2のインプットブロックとの対応関係を登録する(S318)。S315およびS317の処理は、ストリーム対応情報14に記録された新ストリームのストリームIDを旧ストリームのストリームIDで上書きすることによっても実現できる。
S306、S311、S314、またはS318の処理の後、インプットブロックの割り当ての変更の処理が終了する。
なお、インプットブロックは、インプットブロックに空き領域が無くなったときにアクティブブロックに遷移せしめられる、として説明した。インプットブロックは、インプットブロックに空き領域が残っていてもアクティブブロックに遷移せしめられてもよい。また、インプットブロックは、空き領域に所定のデータでパディングされた後にアクティブブロックに遷移せしめられてもよい。即ち、インプットブロックは、任意のタイミングでアクティブブロックに遷移せしめられ得る。インプットブロックがアクティブブロックに遷移することは、当該インプットブロックに対するライトが終了することを意味する。
このように、第1の実施形態によれば、ブロック割り当て部103は、第1のインプットブロックへのライトデータのライトが終了した後、ブロックを新たな第1のインプットブロックに設定し、新たな第1のインプットブロックに旧ストリームと異なる1つの他のストリームを対応付ける(S315〜S318)。ブロック割り当て部103は、インプットブロックの新規設定に応じて、第1ストリームであった旧ストリームを第2ストリームに変更し、第2ストリームであった新ストリームを第1ストリームに変更する。これにより、メモリシステム1は、ホスト2からの、ストリームとインプットブロックとの対応関係を指定する指示を必要とすることなく、ストリームとインプットブロックとの対応関係を自動で変更することができる。したがって、メモリシステム1の利便性が向上する。
また、ブロック割り当て部103は、第2ストリームのうち第1のインプットブロックへのライトデータのライトが終了した後に最初に受信した第2ストリームを新たな第1のインプットブロックに割り当てる(S312、No、S315〜S318)。これにより、簡単な処理でストリームとインプットブロックとのインプットブロックの割り当ての変更を行うことが可能となる。
(第2の実施形態)
図13は、第2の実施形態のコントローラ10が備える機能の構成の一例を説明する図である。コントローラ10は、データ制御部101、アドレス制御部102、ブロック割り当て部103a、ガベージコレクション部104、および測定部105を備えている。データ制御部101、アドレス制御部102、およびガベージコレクション部104の機能は、第1の実施形態の同名の構成要素の機能と同じである。
測定部105は、ストリーム毎にライト量を測定する。ライト量として、例えば、ライトコマンドの入力回数、または、ライトデータの合計のサイズが採用可能である。別の例では、ライト量として、最近の1分間など、所定時間の期間における、ライトコマンドの入力回数またはライトデータの合計のサイズが採用可能である。別の例では、ライト量として、ライトコマンドの入力回数またはライトデータの合計のサイズ、の、入力が開始してからの積算値が採用可能である。また、ストリーム毎のライト量として、所定時間の期間の全ストリームのライト量に対する、各ストリームのライト量の割合が採用可能である。また、ストリーム毎のライト量として、全期間の全ストリームのライト量に対する、各ストリームのライト量の割合が、採用可能である。
ブロック割り当て部103aは、測定部105によるライト量の測定結果に基づいてインプットブロックの割り当ての変更を実行する。一例として、ブロック割り当て部103aは、第2ストリームのうちのライト量が最大のストリームを第1ストリームに変更し、第1ストリームのうちの一を第2ストリームに変更する。
図14は、インプットブロックの割り当ての変更にかかる、第2の実施形態のメモリシステム1の動作を説明するフローチャートである。インプットブロックに空き領域が無くなった場合、データ制御部101は、空き領域が無くなった当該インプットブロックをアクティブブロックとして設定する(S401)。本図の説明において、S401の処理によってアクティブブロックに設定されるインプットブロックを、旧インプットブロックと表記する。データ制御部101は、S401の処理の後、1つのフリーブロックを新たなインプットブロックとして設定する(S402)。本図の説明において、S402の処理によって設定された新たなインプットブロックを、新インプットブロックと表記する。
ブロック割り当て部103aは、旧インプットブロックが割り当てられていたストリームを特定する(S403)。本図の説明において、S403の処理によって特定されたストリームを、旧ストリームと表記する。さらに、ブロック割り当て部103aは、旧インプットブロックが第2のインプットブロックに該当するか否かを判定する(S404)。
旧インプットブロックが第2のインプットブロックに該当する場合(S404、Yes)、ブロック割り当て部103aは、旧ストリームと旧インプットブロックとの対応関係を削除し(S405)、旧ストリームと新インプットブロックとの対応関係を登録する(S406)。S406の処理においては、ブロック割り当て部103aは、新インプットブロックを、第2のインプットブロックとして記録する。S405およびS406の処理は、ストリーム対応情報14に記録された旧インプットブロックのブロックIDを新インプットブロックのブロックIDで上書きすることによっても実現できる。
旧インプットブロックが第2のインプットブロックに該当しない場合(S404、No)、即ち、旧インプットブロックが第1のインプットブロックに該当する場合、ブロック割り当て部103aは、測定部105による測定値を参照することによって、全ての第2ストリームのうちライト量が最大の第2ストリームを特定する(S407)。本図の説明において、S407の処理によって特定された第2ストリームを新ストリームと表記する。
ブロック割り当て部103aは、S315〜S318と同じ処理をS408〜S411において実行し、インプットブロックの割り当ての変更の処理が終了する。
このように、第2の実施形態においては、ブロック割り当て部103aは、第2ストリームのうちの一を選択し、選択されたストリームを新インプットブロックに割り当てる(S407〜S411)。これにより、メモリシステム1は、ホスト2からの、ストリームとインプットブロックとの対応関係を指定する指示を必要とすることなく、ストリームとインプットブロックとの対応関係を自動で変更することができる。したがって、メモリシステム1の利便性が向上する。
また、ブロック割り当て部103aは、第2ストリームのうちライト量が最大のストリームを選択する。これにより、ライト量が大きいストリームに第1のインプットブロックを効率的に割り当てることができるようになるので、ガベージコレクションの効率が向上する。
なお、ブロック割り当て部103aは、ライト量に応じた任意の方法で第2ストリームの選択または第1ストリームと第2ストリームとの交換を行うように構成されてもよい。例えば、ブロック割り当て部103aは、旧ストリームよりもライト量が大きい任意の第2ストリームを選択する。
また、ブロック割り当て部103aは、旧ストリームと、第2ストリームのうちのライト量が最大のストリームと、の間でライト量を比較し、比較の結果に基づいて第1ストリームと第2ストリームとの変更を実行する。具体的には、ブロック割り当て部103aは、旧ストリームのライト量が第2ストリームのうちのライト量が最大のストリームのライト量よりも小さい場合に、旧ストリームを第2ストリームに変更し、第2ストリームのうちのライト量が最大のストリームを第1ストリームに変更する。また、ブロック割り当て部103aは、旧ストリームのライト量が第2ストリームのうちのライト量が最大のストリームのライト量よりも大きい場合に、旧ストリームを第2ストリームに変更せず、第2ストリームのうちのライト量が最大のストリームを第1ストリームに変更しない。
また、インプットブロックがアクティブブロックに遷移せしめられる際に、インプットブロックの割り当ての変更が実行される、として説明した。インプットブロックからアクティブブロックへの遷移のタイミングは、ストリーム毎のライト量に基づいて決定されてもよい。例えば、ブロック割り当て部103aは、測定部105による測定結果をストリーム毎に監視し、第1ストリームに属するライトデータが所定時間以上、受信されなかった場合、データ制御部101は、その第1ストリームに割り当てられていたインプットブロックをアクティブブロックに設定する。これにより、図14に示す処理に従って、インプットブロックの割り当ての変更が実行される。
(第3の実施形態)
第1および第2の実施形態においては、インプットブロックへのライトが終了する際に、インプットブロックの割り当ての変更が実行される。インプットブロックの割り当ての変更の実行タイミングは、インプットブロックへのライトが終了するに応じたタイミングだけに限定されない。
第3の実施形態のメモリシステム1は、第2の実施形態のメモリシステム1との間で、ブロック割り当て部の機能が異なる。第3の実施形態のブロック割り当て部に符号103bを付すことによって第2の実施形態と区別する。
図15は、インプットブロックの割り当ての変更にかかる、第3の実施形態のメモリシステム1の動作を説明するフローチャートである。
まず、ブロック割り当て部103bは、割り当ての変更タイミングに至ったか否かを判定する(S501)。
割り当ての変更タイミングの設定としては、任意のタイミングが採用可能である。例えば、割り当ての変更タイミングの設定として、経過時間に基づくタイミングが採用可能である。例えば、ブロック割り当て部103bは、前回の変更タイミングからの経過時間が所定時間に達した場合に、変更タイミングに至ったと判定する。割り当ての変更タイミングのための経過時間がインプットブロック毎に測定されてもよい。
また、例えば、ブロック割り当て部103bは、測定部105によるストリーム毎のライト量を監視し、ストリーム毎のライト量がインプットブロックの割り当ての変更の条件を満たした場合に、変更タイミングに至ったと判定する。
割り当ての変更タイミングに至っていない場合(S501、No)、ブロック割り当て部103bは、S501の処理を再び実行する。割り当ての変更タイミングに至った場合(S501、Yes)、ブロック割り当て部103bは、ストリーム毎のライト量を取得する(S502)。そして、ブロック割り当て部103bは、ストリーム毎のライト量がインプットブロックの割り当ての変更の条件を満たしているか否かを判定する(S503)。
インプットブロックの割り当ての変更の条件としては、ストリーム毎のライト量に基づく条件であれば、任意の条件が採用可能である。インプットブロックの割り当ての変更の条件の例を下記に説明する。
(第1の条件)
第1の条件によれば、少なくとも1つの第1ストリームのライト量が、第2ストリームのうちのライト量が最大の第2ストリームのライト量より小さいことを以て、インプットブロックの割り当ての変更の条件が満たされている、と判定される。換言すると、何れの第1ストリームのライト量も、第2ストリームのうちのライト量が最大の第2ストリームのライト量より大きいことを以て、インプットブロックの割り当ての変更の条件がみたされていない、と判定される。
(第2の条件)
第2の条件によれば、少なくとも1つの第1ストリームのライト量が、所定のしきい値よりも小さいことを以て、インプットブロックの割り当ての変更の条件が満たされている、と判定される。換言すると、何れの第1ストリームのライト量も前記しきい値よりも大きいことを以て、インプットブロックの割り当ての変更の条件が満たされていない、と判定される。
(第3の条件)
第3の条件によれば、少なくとも1つの第2ストリームのライト量が、所定のしきい値よりも大きいことを以て、インプットブロックの割り当ての変更の条件が満たされている、と判定される。換言すると、何れの第2ストリームのライト量も前記しきい値よりも小さいことを以て、インプットブロックの割り当ての変更の条件が満たされていない、と判定される。
ストリーム毎のライト量がインプットブロックの割り当ての変更の条件を満たしていない場合(S503、No)、ブロック割り当て部103bは、S501の処理を再び実行する。ストリーム毎のライト量がインプットブロックの割り当ての変更の条件を満たしている場合(S503、Yes)、ブロック割り当て部103bは、1つの第1ストリームと1つの第2ストリームとを選択する(S504)。
各ストリームの選択の基準としては、ストリーム毎のライト量に基づくものであれば、任意の基準が採用可能である。
インプットブロックの割り当ての変更の条件として第1の条件が採用される場合には、例えば、ライト量が最大の第2ストリームが選択され、選択された第2ストリームよりもライト量が小さい第1ストリームが選択される。また、インプットブロックの割り当ての変更の条件として第1の条件が採用される場合には、ライト量が最小の第1ストリームが選択されてもよい。
また、インプットブロックの割り当ての変更の条件として第2の条件が採用される場合には、例えば、第2の条件において使用されるしきい値よりもライト量が小さい第1ストリームが選択され、任意の第2ストリームが選択される。インプットブロックの割り当ての変更の条件として第2の条件が採用される場合には、選択された第1ストリームよりもライト量が大きい任意の第2ストリームが選択されてもよいし、1以上の第2ストリームのうちのライト量が最大の第2ストリームが選択されてもよい。
また、インプットブロックの割り当ての変更の条件として第3の条件が採用される場合には、例えば、第3の条件において使用されるしきい値よりもライト量が大きい第2ストリームが選択され、任意の第1ストリームが選択される。インプットブロックの割り当ての変更の条件として第3の条件が採用される場合には、選択された第2ストリームよりもライト量が小さい任意の第1ストリームが選択されてもよいし、1以上の第1ストリームのうちのライト量が最小の第1ストリームが選択されてもよい。
また、インプットブロックの割り当ての変更の条件に関係なく、任意の第2ストリームが選択され、選択された第2ストリームよりもライト量が小さい第1ストリームが選択されてもよい。また、インプットブロックの割り当ての変更の条件に関係なく、任意の第1ストリームが選択され、選択された第1ストリームよりもライト量が大きい第2ストリームが選択されてもよい。
S504の処理の後、ブロック割り当て部103bは、ストリーム対応情報14を更新することによって、選択された第1ストリームを第2ストリームに変更し、選択された第2ストリームを第1ストリームに変更する(S505)。例えば、ブロック割り当て部103bは、選択された第1ストリームに選択された第2ストリームに割り当てられていた第2のインプットブロックを対応付け、選択された第2ストリームに選択された第1ストリームに割り当てられていた第1のインプットブロックを対応づける。
S505の処理の後、ブロック割り当て部103bは、S501の処理を再び実行する。なお、S505の処理の後、ブロック割り当て部103bは、S503の処理を再び実行してもよい。
なお、ブロック割り当て部103bは、S504の処理の後、選択された第1ストリームが割り当てられていた第1のインプットブロックをアクティブブロックに遷移せしめ、1つのフリーブロックを新しい第1のインプットブロックに設定した後、S505の処理を実行してもよい。また、例えば、ブロック割り当て部103bは、選択された第1ストリームが割り当てられていた第1のインプットブロックをアクティブブロックに遷移せしめる際、空き領域を所定のデータでパディングしてもよい。また、例えば、ブロック割り当て部103bは、選択された第1ストリームに新しい第1のインプットブロックを暫定的に対応付け、その後、当該新しい第1のインプットブロックへのライトが開始される前に、S505の処理を実行してもよい。
以上述べたように、第3の実施形態によれば、ブロック割り当て部103bは、任意に設定される条件が満たされた後、インプットブロックの割り当ての変更を実行する。また、ブロック割り当て部103bは、変更対象の第2ストリームを、ライト量に基づいて選択する。これにより、メモリシステム1は、インプットブロックが新規設定された場合でなくてもインプットブロックの割り当ての変更を実行することができる。したがって、メモリシステム1の利便性が向上する。
インプットブロックの割り当ての変更の条件としては、上述のように、経過時間に応じたタイミング、または、ライト量に応じたタイミング、が採用可能である。
(第4の実施形態)
第1〜第3の実施形態のメモリシステム1において、ブロック割り当て部は、新規のストリームに属するライトデータを受信する場合、新規のストリームに第2のインプットブロックを割り当ててもよい。新規のストリームとは、ストリーム対応情報14に対応関係が記録されていないストリームをいう。また、ブロック割り当て部は、1以上の第1ストリームのうちの任意の第1ストリームを第2ストリームに変更し、新規のストリームを第1ストリームに設定してもよい。ブロック割り当て部は、1以上の第1ストリームのうちライト量が最小の第1ストリームを第2ストリームへの変更対象の第1ストリームとして選択してもよい。OS20は、新規のストリームに属するライトデータを送信する場合に、新規のストリームをメモリシステム1に通知し、ブロック割り当て部は、通知の受信に応じて新規のストリームへのインプットブロックの割り当てを実施してもよい。
また、第2ストリームに属するライトデータを以降に受信しない場合、ブロック割り当て部は、その第2ストリームと第2のインプットブロックとの対応関係を削除してもよい。また、第1ストリームに属するライトデータを以降に受信しない場合、ブロック割り当て部は、その第1ストリームと第1のインプットブロックとの対応関係を削除し、任意の第2ストリームを第1ストリームに変更してもよい。ブロック割り当て部は、1以上の第2ストリームのうちライト量が最大の第2ストリームを第1ストリームへの変更対象の第2ストリームとして選択してもよい。OS20は、1つのストリームに属するライトデータの送信を以降に行わない場合に、以降にライトデータの送信を行わないストリームをメモリシステム1に通知し、ブロック割り当て部は、通知の受信に応じて割り当ての変更を実施してもよい。
(第5の実施形態)
第1〜第4の実施形態のメモリシステム1は、ストリームIDを含まないライトコマンドを備えるライトIOを受信可能に構成されてもよい。例えば、データ制御部101は、ストリームに属さないライトデータを第2のインプットブロックにライトする。または、第1のインプットブロックとも第2のインプットブロックとも異なる第3のインプットブロックが設定され、データ制御部101は、ストリームに属さないライトデータを第3のインプットブロックにライトする。
(第6の実施形態)
図16は、メモリシステム1の実装例を示す図である。メモリシステム1は、例えばサーバシステム1000に実装される。サーバシステム1000は、ディスクアレイ2000とラックマウントサーバ3000とを備える。ディスクアレイ2000とラックマウントサーバ3000とは通信インタフェース4000によって接続される。通信インタフェース4000の規格としては任意の規格が採用可能である。
ラックマウントサーバ3000は、サーバラックを備え、当該サーバラックに1以上のホスト2が装着される。また、ディスクアレイ2000は、サーバラックを備え、当該サーバラックに1以上のメモリシステム1が装着される。各ホスト2は、通信インタフェース4000を介してディスクアレイ2000を構成する各メモリシステム1にライトIOを送信することができる。
各メモリシステム1は、第1〜第6の実施形態の何れかが採用された構成を有している。これにより、各メモリシステム1は、ストリームとインプットブロックとの対応関係を自動で更新することができる。各ホスト2によるストリームとインプットブロックとの対応関係の指示を不要とすることができるので、各メモリシステム1の利便性が向上する。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。