(57)【要約】【課題】ホストに有用な情報を提供することができるメモリシステムを実現する。【解決手段】実施形態によれば、メモリシステムは、複数の消去ブロックを含む不揮発性メモリと、コントローラとを具備する。前記コントローラは、第１ストリームに関連付けられたデータがライトされ前記第１ストリームに関連付けられていないデータがライトされない消去ブロックが、前記不揮発性メモリのガベージコレクション動作に使用されたか否かを示す第１情報を、ホストに提供するように構成されている。【選択図】図１
2016170583.tif 000002
【特許請求の範囲】
【請求項１】
複数の消去ブロックを含む不揮発性メモリと、
第１ストリームに関連付けられたデータがライトされ前記第１ストリームに関連付けられていないデータがライトされない消去ブロックが、前記不揮発性メモリのガベージコレクション動作に使用されたか否かを示す第１情報を、ホストに提供するように構成されたコントローラとを具備するメモリシステム。
【請求項２】
前記コントローラは、
前記第１ストリームのＩＤを伴うデータを、前記第１ストリーム用に割り当てられた消去ブロックにライトし、第２ストリームのＩＤを伴うデータを、前記第２ストリーム用に割り当てられた別の消去ブロックにライトし、
前記ガベージコレクション動作に使用された消去ブロックが割り当てられたストリームのＩＤを示す情報を、前記第１情報として前記ホストに提供するように構成されている請求項１記載のメモリシステム。
【請求項３】
前記コントローラは、前記ホストからの前記第１情報のリード要求に応答して、前記第１情報を前記ホストに提供するように構成されている請求項１記載のメモリシステム。
【請求項４】
前記コントローラは、
前記第１ストリームのＩＤと前記第１ストリームに関連付けられたデータがライトされた１以上の消去ブロックとの対応関係を示すストリーム情報を記録し、
前記ガベージコレクション動作に使用された消去ブロックに関する情報と前記ストリーム情報とを使用して、前記ガベージコレクション動作に使用された消去ブロックが割り当てられたストリームのＩＤに関する情報を収集するように構成されている請求項１記載のメモリシステム。
【請求項５】
複数の消去ブロックを含む不揮発性メモリと、
前記不揮発性メモリのガベージコレクション動作を実行するガベージコレクション制御部と、
第１ストリームのＩＤを伴うデータを、前記第１ストリーム用に割り当てられた消去ブロックにライトし、第２ストリームのＩＤを伴うデータを、前記第２ストリーム用に割り当てられた別の消去ブロックにライトするライト制御部と、
前記ガベージコレクション動作に使用された消去ブロックが割り当てられたストリームのＩＤを示す第１情報を、ホストに提供する情報提供部とを具備するメモリシステム。
【請求項６】
前記ホストによって指定されたアンマップ対象の論理ブロックアドレス範囲に対応するデータを無効化する無効化処理部をさらに具備する請求項５記載のメモリシステム。
【請求項７】
前記情報提供部は、前記ホストからの前記第１情報のリード要求に応答して、前記第１情報を前記ホストに提供する請求項５記載のメモリシステム。
【請求項８】
前記第１ストリームのＩＤと前記第１ストリームのＩＤを伴うデータがライトされた１以上の消去ブロックとの対応関係と、前記第２ストリームのＩＤと前記第２ストリームのＩＤ伴うデータがライトされた１以上の消去ブロックとの対応関係とを示すストリーム情報を記録するストリーム情報管理部をさらに具備し、
前記情報提供部は、前記ガベージコレクション動作に使用された消去ブロックに関する情報と前記ストリーム情報とを使用して、前記ガベージコレクション動作に使用された消去ブロックが割り当てられたストリームのＩＤに関する情報を収集する請求項５記載のメモリシステム。
【請求項９】
メモリシステムとホストとを含む情報処理システムであって、
前記メモリシステムは、
複数の消去ブロックを含む不揮発性メモリと、
第１ストリームに関連付けられたデータがライトされ前記第１ストリームに関連付けられていないデータがライトされない消去ブロックが、前記不揮発性メモリのガベージコレクション動作に使用されたか否かを示す第１情報を、ホストに提供するように構成されたコントローラとを具備し、
前記ホストは、
前記第１ストリームに関連付けられたデータを同じ消去ブロックにライトすることを要求するライトコマンドであって、前記第１ストリームのＩＤを含むライトコマンドを、前記メモリシステムに送出し、前記ライトコマンドの送出を制御するためのポリシーを、前記メモリシステムからの前記第１情報に基づいて調整するように構成されたプロセッサを具備する、情報処理システム。
【請求項１０】
前記プロセッサは、前記第１情報が、前記第１ストリームに関連付けられたデータがライトされた前記消去ブロックが前記ガベージコレクション動作に使用されたことを示す場合、前記ライトコマンドの送出が抑制されるように前記ポリシーを調整するように構成されている請求項９記載の情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
【０００３】
このようなメモリシステムの一つとして、ＮＡＮＤフラッシュ技術をベースとするソリッドステートドライブ（ＳＳＤ）が知られている。ＳＳＤは、その低電力消費、高性能という特徴により、様々なコンピュータのメインストレージとして使用されている。
【０００４】
最近では、ホストからの制御によってＳＳＤの性能改善を図る試みがされ始めている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２０１３−５１４５５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、ＳＳＤの性能を改善できるようにするためには、性能改善のための有用な情報をホストに提供するための新たな機能の実現が要求される。
【０００７】
本発明の一つの実施形態は、ホストに有用な情報を提供することができるメモリシステムおよび情報処理システムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
実施形態によれば、メモリシステムは、複数の消去ブロックを含む不揮発性メモリと、コントローラとを具備する。前記コントローラは、第１ストリームに関連付けられたデータがライトされ前記第１ストリームに関連付けられていないデータがライトされない消去ブロックが、前記不揮発性メモリのガベージコレクション動作に使用されたか否かを示す第１情報を、ホストに提供するように構成されている。
【図面の簡単な説明】
【０００９】
【図１】実施形態に係るメモリシステムの構成例を示すブロック図。
【図２】同実施形態のメモリシステムによって実行されるガベージコレクション動作を説明するための図。
【図３】同実施形態のメモリシステムにおいて使用されるストリームのＩＤの数と確保される消去ブロックの数との関係を示す図。
【図４】同実施形態のメモリシステムによって実行されるライト動作を説明するための図。
【図５】特定のストリーム用に割り当てられた消去ブロック内の全データが無効化される過程を示す図。
【図６】特定のストリーム用に割り当てられた消去ブロック内のデータの一部が無効化された状態を示す図。
【図７】同実施形態のホストのストリーム管理部によって管理されるストリーム管理情報のデータ構造例を示す図。
【図８】同実施形態のメモリシステムによって管理されるストリーム管理情報のデータ構造例を示す図。
【図９】同実施形態のメモリシステムによって管理されるストリーム管理情報の別のデータ構造例を示す図。
【図１０】同実施形態のメモリシステムによって実行されるライトコマンド処理の手順を示すフローチャート。
【図１１】同実施形態のメモリシステムによって実行されるアンマップコマンド処理の手順を示すフローチャート。
【図１２】同実施形態のメモリシステムによって実行されるガベージコレクション動作の手順を示すフローチャート。
【図１３】同実施形態のメモリシステムとホストとによって実行されるストリームライト動作制御に関する一連の処理の手順を示すフローチャート。
【図１４】同実施形態のホストによって実行されるライトコマンド変換処理の手順を示すフローチャート。
【図１５】同実施形態のメモリシステムとホストとによって実行されるストリームライト動作制御に関する一連の処理の別の手順を示すフローチャート。
【図１６】同実施形態のホストのストリーム管理部によって管理されるストリーム管理情報の別のデータ構造例を示す図。
【図１７】同実施形態のメモリシステムのハードウェア構成例を示すブロック図。
【図１８】同実施形態のホストのハードウェア構成例を示すブロック図。
【図１９】同実施形態のメモリシステムを含むストレージシステムの構成例を示すブロック図。
【発明を実施するための形態】
【００１０】
以下、図面を参照して、実施形態を説明する。  
まず、図１を参照して、一実施形態に係るメモリシステムを含む情報処理システム１の構成を説明する。
【００１１】
このメモリシステムは、不揮発性メモリにデータをライトし、不揮発性メモリからデータをリードするように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、ＮＡＮＤフラッシュ技術をベースとするソリッドステートドライブ（ＳＳＤ）３として実現されている。
【００１２】
情報処理システム１は、ホスト２と、ＳＳＤ３とを含む。ホスト２は、パーソナルコンピュータ、サーバのような情報処理装置である。
【００１３】
ＳＳＤ３は、ホスト２として機能する情報処理装置のメインストレージとして使用され得る。ＳＳＤ３は、情報処理装置に内蔵されてもよいし、情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【００１４】
ホスト２とＳＳＤ３とを相互接続するためのインタフェースとしては、ＳＣＳＩ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、ＡＴＡ、Ｓｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）等が使用し得る。以下では、限定されないが、ホスト２とＳＳＤ３とが、ＳＡＳを介して相互接続されるケースを主として想定する。
【００１５】
ＳＳＤ３は、コントローラ４、ＮＡＮＤメモリ５、およびＤＲＡＭ６を備える。ＮＡＮＤメモリ５は、限定されないが、複数のＮＡＮＤフラッシュメモリチップによって編成されていてもよい。
【００１６】
ＮＡＮＤメモリ５は、多数の消去ブロックＢ０〜Ｂｍ−１を含む。消去ブロックＢ０〜Ｂｍ−１は、消去単位として機能する。消去ブロックは単に「ブロック」と称されることもある。
【００１７】
消去ブロックＢ０〜Ｂｍ−１は多数のページ（物理ページ）によって組成されている。つまり、消去ブロックＢ０〜Ｂｍ−１の各々は、多数のページＰ０〜Ｐｎ−１を含む。ＮＡＮＤメモリ５においては、データのリードおよびライトはページ単位で実行される。
【００１８】
コントローラ４は、ＮＡＮＤメモリ５に電気的に結合されている。コントローラ４は、ＮＡＮＤメモリ５のデータ管理とＮＡＮＤメモリ５のブロック管理とを実行するように構成されたフラッシュトランスレーション層（ＦＴＬ）として機能し得る。
【００１９】
データ管理には、（１）論理ブロックアドレス（ＬＢＡ）空間とＮＡＮＤメモリ５上の物理記憶位置との間の対応関係の管理、（２）ページ単位のリード／ライトとブロック単位の消去動作とを隠蔽するための処理、等が含まれる。
【００２０】
ページへのデータ書き込みは、１消去サイクル当たり１回のみ可能である。
【００２１】
このため、コントローラ４は、同じＬＢＡへのライト（上書き）を、ＮＡＮＤメモリ５上の別のページにマッピングする。つまり、コントローラ４は、この別のページにデータをライトする。そして、コントローラ４は、このＬＢＡをこの別のページに関連付ける。このＬＢＡが関連付けられていた元のページ、つまり古いデータは、無効化される。
【００２２】
ブロック管理には、不良ブロックの管理と、ウェアレベリングと、ガベージコレクション等が含まれる。ウェアレベリングは、消去ブロックの書き換え回数を平準化するための動作である。
【００２３】
ガベージコレクションは、フリースペースを作り出すための動作である。このガベージコレクション動作は、ＮＡＮＤメモリ５内のフリーブロックの個数を増やすため、有効データと無効データの混在する複数の消去ブロックを使用して、有効データの集約を行う。ガベージコレクション動作においては、有効データと無効データとが混在する消去ブロック群から有効データがリードされる。そして、リードされた有効データは、ある消去ブロック（フリーフロック）にライトされる。このコピー（データ移動）の結果、有効データが特定の幾つかの消去ブロック（フリーフロック）に集められる。有効データがフリーフロックにコピーされることによって空となった消去ブロック群は、その消去後に、フリーブロックとして再利用することが可能となる。
【００２４】
しかし、このガベージコレクション動作はＳＳＤ３をビジー状態にする要因となり得、さらに、データ移動によって内部的なデータライト回数の増加を引き起こす要因にもなり得る。
【００２５】
このガベージコレクションが実行される頻度を抑制できるようにするために、コントローラ４は、通常ライト動作に加え、ストリームライト動作をサポートしている。
【００２６】
ストリームライト動作は、ホスト２によって指定された同じＩＤを伴うデータ（つまり、同じ予期されるライフタイムを有するデータ）を、同じ消去ブロックにライトする動作である。一方、通常ライト動作は、どのストリームのＩＤも伴わないデータを、ストリームライト用に割り当てられていない任意の消去ブロック内の次の利用可能ページにライトする動作である。
【００２７】
ホスト２は、同じ予期されるライフタイムを有するデータを同じストリームに割り当てる。データのライフタイムは、データが生成される時点からこのデータが削除または更新される時点までの期間を意味する。同じ予期されるライフタイムを有するデータは、その削除または更新によってほぼ同時に無効化されることが可能なデータグループを意味する。例えば、単一のファイルに関連付けられたデータは、同じ予期されるライフタイムを有するデータとして扱われてもよい。
【００２８】
コントローラ４は、特定のストリームに関連付けられたデータを同じ消去ブロックにライトする。特定のストリームに関連付けられたデータは、特定のストリームのＩＤを伴うデータである。特定のストリームのＩＤは、ストリームライト動作を要求するライトコマンド内に含まれる。
【００２９】
特定のストリームに関連付けられたデータがライトされた消去ブロックには、この特定のストリームに関連付けられていないデータはライトされない。つまり、コントローラ４は、異なるストリームに対応する異なるデータグループを、異なる消去ブロックにそれぞれライトする。
【００３０】
このストリームライト動作により、消去ブロック内の全データが、アンマップまたは上書きによって、一斉に無効化される可能性を高めることができる。なぜなら、同じライフタイムを有するデータは、ホスト２によって一斉に削除または更新される可能性が高いからである。
【００３１】
全データが無効化された消去ブロックに関しては、コピー（データ移動）無しで、その消去ブロックを消去することのみによってフリーブロックにすることができる。結果として、ストリームライト動作は、フリーブロックの個数を増やすためのガベージコレクション動作の頻度を抑えることができる。
【００３２】
ストリームのＩＤの発行に関するルール（ＩＤ発行ポリシー）の内容は、個々のアプリケーションに依存している場合がある。
【００３３】
例えば、同じストリームに関連付けるべきデータを決定するために、異なる種類のデータ（例えば、システムデータと、ユーザデータなど）を異なるストリームのＩＤに割り当てるというルールが用いられてもよい。
【００３４】
あるいは、ある種類のデータ（例えばシステムデータ）のライトには通常ライト要求を使用し、別の種類のデータ（例えばユーザデータ）のライトにはストリームライト要求を使用するというルールが用いられてもよい。
【００３５】
しかし、アプリケーションプログラムが決めたルールは必ずしも適切なルールであるとは限らず、不適当なルールが使用される場合もあり得る。
【００３６】
適切なルールとは、一斉に無効化することが可能なデータだけを同じストリームに割り当てることが可能なルールを意味する。
【００３７】
一方、不適当なルールとは、一斉に無効化することが可能なデータだけを同じストリームに割り当てることができないルールを意味する。
【００３８】
例えば、実際には異なるライフタイムを有する２種類のユーザデータを扱うアプリケーションプログラムに関しては、単にシステムデータとユーザデータとを異なるストリームのＩＤに割り当てるというルールは、不適当なルールであると云える。なぜなら、実際には異なるライフタイムを有する２種類のユーザデータが同じストリームに関連付けられてしまう可能性があるためである。
【００３９】
アプリケーションプログラムが決めたルールが適切なルールであったならば、ストリームライト動作によって同じ消去ブロックにライトされたデータが、一斉に無効化される確率は高くなる。この場合、ガベージコレクション無しで、つまり消去のみによってこの消去ブロックをフリーブロックにすることができる。
【００４０】
一方、アプリケーションプログラムが決めたルールが不適当なルールであったならば、上述したように、実際には異なるライフタイムを有するデータが同じストリームに割り当てられてしまう。この場合、同じ消去ブロックにライトされた全データは一斉に無効化されないので、一部の有効データがこの消去ブロックに残る可能性がある。結果として、この消去ブロックはガベージコレクションの対象となり得る。
【００４１】
したがって、もし不適当なルールによって、一斉に無効化されないデータが同じストリームに関連付けられたならば、ガベージコレクションを抑える効果が得られなくなる。
【００４２】
異なるストリームのデータを異なる消去ブロックに書き込むため、コントローラ４は、オープンされたストリームのＩＤ数分の消去ブロック（書き込み先消去ブロック）を確保しておく必要がある。
【００４３】
ＩＤ１とＩＤ２の２つのストリームが使用される場合を想定する。この場合、コントローラ４は、ＩＤ１とＩＤ２の２つのストリームに対応する２つの消去ブロックを確保しておく必要がある。コントローラ４は、ＩＤ１のストリームに関連付けられたデータを、ＩＤ１のストリーム用に割り当てられた消去ブロックにライトする。ＩＤ１のストリーム用に割り当てられた消去ブロックには、ＩＤ１のストリームに関連付けられていないデータはライトされない。また、コントローラ４は、ＩＤ２のストリームに関連付けられたデータを、ＩＤ２のストリーム用に割り当てられた消去ブロックにライトする。ＩＤ２のストリーム用に割り当てられた消去ブロックには、ＩＤ２のストリームに関連付けられていないデータはライトされない。
【００４４】
このように、使用されるストリーム毎に専用の消去ブロックが割り当てられる。
【００４５】
このため、もし実際には異なるライフタイムを有するデータが関連付けられたストリームが使用されると、ガベージコレクションを抑える効果が見込めないだけでなく、ＳＳＤ３内のフリーエリアが圧迫されるため、ガベージコレクションの頻度が増加し、ＳＳＤ３の性能や寿命の劣化を招く危険性がある。
【００４６】
そこで、本実施形態では、コントローラ４は、ストリームライト動作が有効に働いたか否かを表す情報（フィードバック情報）をホスト２に提供する機能を有している。
【００４７】
コントローラ４は、同じストリームに関連付けられたデータがライトされた消去ブロックがガベージコレクション動作の対象になった場合に、このストリームに関するストリームライト動作は有効でないと判定してもよい。
【００４８】
つまり、コントローラ４は、ホスト２からのストリームに関連付けられたデータがライトされ、且つこのストリームに関連付けられていないデータがライトされない消去ブロックが、ＮＡＮＤメモリ５のガベージコレクション動作に使用されたか否かを示す情報を、上述のフィードバック情報として、ホスト２に提供する。
【００４９】
フィードバック情報は、ガベージコレクション動作に使用された全ての消去ブロックを示す情報ではなく、ストリームライト動作のために割り当てられた消去ブロックがガベージコレクション動作に使用されたか否かに関する情報である。
【００５０】
フィードバック情報は、ＳＳＤ３内の記憶領域に保存されても良い。この場合、コントローラ４は、ホスト２からのフィードバック情報のリード要求に応答して、フィードバック情報をホスト２に提供（転送）してもよい。
【００５１】
例えば、コントローラ４は、有効に働かなかったストリームのＩＤと有効に働いたストリームのＩＤの双方をフィードバック情報としてホスト２に提供してもよい。有効に働いたストリームのＩＤとは、その全てのデータが一斉に無効化された消去ブロックが割り当てられたストリームのＩＤを意味する。
【００５２】
あるいは、コントローラ４は、有効に働かなかったストリームのＩＤ（つまり、ガベージコレクション動作に使用された消去ブロックが割り当てられたストリームのＩＤ）だけを示す情報をフィードバック情報として、ホスト２に提供してもよい。これにより、フィードバック情報のデータ量を削減できるので、効率よくホスト２に有用な情報を通知することができる。
【００５３】
ホスト２は、特定のストリームに関連付けられたデータを同じ消去ブロックにライトすることを要求するライトコマンドをＳＳＤ３に送出する。このライトコマンドは、この特定のストリームのＩＤを含む。ホスト２がＳＳＤ３からフィードバック情報を受信した時、ホスト２は、この特定のストリームのＩＤを含むライトコマンドの送出を制御するためのポリシーを、フィードバック情報に基づいて自動的に調整する。例えば、フィードバック情報が、この特定のストリームのデータがライトされた消去ブロックがガベージコレクション動作に使用されたことを示すならば、ホスト２は、この特定のストリームのＩＤを含むライトコマンドの送出が抑制されるように、ライトコマンドの送出を制御するためのポリシーを調整する。
【００５４】
例えば、ホスト２は、有効に機能しなかったストリームのＩＤの発行を要求したアプリケーションプログラムを特定し、このアプリケーションプログラムによる以降のストリームライト動作の使用を禁止するというポリシー調整処理を実行しても良い。
【００５５】
この場合、ホスト２は、特定されたアプリケーションプログラムからの以降のストリームライト動作の要求を、通常ライト動作の要求に置き換える制御を行ってもよい。
【００５６】
あるいは、アプリケーションプログラムがストリームのＩＤの発行を要求するのでは無く、ホスト２のオペレーティングシステム４１自体が、ルール（ポリシー）に基づいて、ストリームのＩＤを発行する処理を行っても良い。この場合、ホスト２のオペレーティングシステム４１は、一定時間内に生成されるファイル個数が閾値（閾個数）以上である場合には、それらのファイルに関連付けられるデータのライトのために（同じＩＤの）ストリームライトを使用し、一定時間内に生成されるファイル個数が閾個数未満である場合には、それらのファイルに関連付けられるデータのライトのために通常ライトを使用する、というルール（ポリシー）を採用してもよい。このルールは、ファイルの生成や削除にも時間的な局所性があると考えられるため、一斉に生成されたファイル群はやはり一斉に削除される可能性も高い、という考え方に基づくものである。
【００５７】
ＳＳＤ３からのフィードバック情報が、ストリームライト動作が有効に働いていないことを示す場合、ホスト２は、ストリームライト動作のためのライトコマンドの送出を許可するための条件をより厳しくする、つまり上述の閾値を上げる、というポリシー調整処理を実行しても良い。
【００５８】
次に、コントローラ４の構成について説明する。
【００５９】
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４、ＳＲＡＭ１５等を含む。これらＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４、ＳＲＡＭ１５は、バス１０を介して相互接続される。
【００６０】
ホストインタフェース１１は、ホスト２からコマンド（ライトコマンド、リードコマンド、アンマップ（ＵＮＭＡＰ）コマンド等）を受信する。ライトコマンドは、ＳＳＤ３に対し、このライトコマンドによって指定されたデータ（論理ブロック）をライトするように要求する。ライトコマンドは、先頭の論理ブロックのＬＢＡと、転送長（論理ブロックの数）とを含む。
【００６１】
ライトコマンドの種類には、ストリームライト動作を要求するライトコマンドと、通常ライト動作を要求するライトコマンドとがある。ストリームライト動作を要求するライトコマンドは、限定されないが、例えば、ＷＲＩＴＥ（３２）コマンドであってもよい。
【００６２】
ＷＲＩＴＥ（３２）コマンドは、ライトデータを指定するための上述のＬＢＡおよび転送長に加え、ストリームのＩＤを含む。このストリームのＩＤは、ＷＲＩＴＥ（３２）コマンド内のＬＢＡおよび転送長によって指定されるデータが関連付けられているストリームを示す。つまり、ＳＳＤ３は、ＷＲＩＴＥ（３２）コマンド内のＬＢＡおよび転送長によって指定されるデータを、ＷＲＩＴＥ（３２）コマンド内のストリームのＩＤを伴うデータとして取り扱う。
【００６３】
通常ライト動作を要求するライトコマンドは、限定されないが、ＷＲＩＴＥ（３２）コマンド以外の他のライトコマンド、例えば、ＷＲＩＴＥ（１６）コマンド、ＷＲＩＴＥ（１２）コマンド、等であってもよい。通常ライト動作を要求するライトコマンドは、どのストリームのＩＤも含まない。
【００６４】
アンマップコマンドは、ＳＳＤ３に対し、アンマップ対象の論理ブロックアドレス範囲を通知するためのコマンドである。ＡＴＡやＳＡＴＡにおいては、アンマップコマンドの代わりに、Ｔｒｉｍコマンドが、アンマップ対象の論理ブロックアドレス範囲をＳＳＤ３に通知するためのコマンドとして使用される。
【００６５】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４、ＳＲＡＭ１５を制御するように構成されたプロセッサである。ＣＰＵ１２は、上述のＦＴＬレイヤの処理に加え、ホスト２からのコマンドを処理するためのコマンド処理等を実行する。さらに、ＣＰＵ１２は、上述のフィードバック情報を収集し、このフィードバック情報をホスト２に提供するストリーム情報収集処理を実行する。
【００６６】
これらＦＴＬレイヤ処理、コマンド処理、およびストリーム情報収集処理は、ＣＰＵ１２によって実行されるファームウェアによって制御されてもよい。このファームウェアは、ＣＰＵ１２を、ライト動作制御部２１、ストリーム管理部２２、アンマップ制御部２３、ガベージコレクション制御部２４、およびストリーム情報収集部２５として機能させる。
【００６７】
ライト動作制御部２１は、ホスト２からのライトコマンドに応答して、上述の通常ライト動作またはストリームライト動作を選択的に実行する。
【００６８】
いま、ホスト２からの要求によってＩＤ１のストリームとＩＤ２のストリームとがオープンされている場合を想定する。ストリームライト動作においては、ライト動作制御部２１は、ＩＤ１を伴うデータ（ＩＤ１のストリームに関連付けられたデータ）を、ＩＤ１のストリーム用に割り当てられた消去ブロックにライトし、ＩＤ２を伴うデータ（ＩＤ２のストリームに関連付けられたデータ）を、ＩＤ２のストリーム用に割り当てられた別の消去ブロックにライトする。
【００６９】
通常ライト動作においては、ライト動作制御部２１は、ＩＤを伴わないデータを、どのストリーム用にも割り当てられてない消去ブロックにライトする。
【００７０】
ストリーム管理部２２は、オープンされている幾つかのストリームのＩＤと、それらストリームのＩＤを伴うデータがライトされた幾つかの消去ブロックとの対応関係を示すストリーム管理情報を、ＤＲＡＭ６内のストリーム管理テーブル３３に記録する。
【００７１】
アンマップ制御部２３は、ホスト２によって指定されたアンマップ対象の論理ブロックアドレス範囲に対応するデータを無効化する。ＤＲＡＭ３に格納されているルックアップテーブル３２は、ＬＢＡ空間とＮＡＮＤメモリ５上の物理記憶位置との対応関係を示すアドレスマッピング情報を格納する。このアドレスマッピング情報は、さらに、ＬＢＡそれぞれの有効／無効を示すフラグを含む。アンマップ制御部２３は、ホスト２によって指定されたアンマップ対象の論理ブロックアドレス範囲に属する各ＬＢＡに対応するフラグを、無効を示す値にセットする。これにより、ホスト２によって指定されたアンマップ対象の論理ブロックアドレス範囲に対応するデータを無効化することができる。
【００７２】
ガベージコレクション制御部２４は、ＮＡＮＤメモリ５のガベージコレクション動作を実行する。すなわち、ガベージコレクション制御部２４は、ＮＡＮＤメモリ５内のフリーブロックの個数を増やすため、有効データと無効データの混在する複数の消去ブロックを使用して、有効データを１以上の特定の消去ブロックに集約する。ガベージコレクション動作は、ＮＡＮＤメモリ５のフリーブロックの個数が閾値以下に低下した時に実行される。ガベージコレクション動作は、フリーブロックの個数がある個数以上に増えるまで継続されてもよい。また、ガベージコレクション動作は、ホスト２によってガベージコレクション動作の実行が明示的に要求された時も実行されてもよい。
【００７３】
ストリーム情報収集部２５は、ガベージコレクション動作に使用された消去ブロックに関する情報と、ストリーム管理テーブル３３のストリーム情報とを使用して、ガベージコレクション動作に使用された消去ブロックが割り当てられたストリームのＩＤに関する情報を収集する。
【００７４】
ストリームライト動作によってデータがライトされた消去ブロックとは、あるＩＤのストリーム用に割り当てられた消去ブロックを意味する。より詳しくは、この消去ブロックは、あるストリームに関連付けられたデータがライトされ、且つこのストリームに関連付けられていないデータがライトされない消去ブロックである。
【００７５】
ストリーム情報収集部２５は、収集された情報を、フィードバック情報３４としてホスト２に提供する。この場合、ストリーム情報収集部２５は、フィードバック情報３４を所定の記憶領域、例えばＤＲＡＭ６に格納してもよい。そして、ストリーム情報収集部２５は、ホスト２からのフィードバック情報３４のリード要求に応答して、フィードバック情報３４をホスト２に提供（転送）してもよい。
【００７６】
ＮＡＮＤインタフェース１３は、ＣＰＵ１２の制御の下、ＮＡＮＤメモリ５を制御するように構成されたＮＡＮＤコントローラである。
【００７７】
ＤＲＡＭインタフェース１４は、ＣＰＵ１２の制御の下、ＤＲＡＭ６を制御するように構成されたＤＲＡＭコントローラである。
【００７８】
ＤＲＡＭ６の記憶領域の一部は、ガベージコレクション（ＧＣ）動作中に移動されるデータを一時的に格納するためのＧＣバッファ３１として利用されてもよい。また、ＤＲＡＭ６の記憶領域は、上述のルックアップテーブル３２、ストリーム管理テーブル３３、およびフィードバック情報の格納のために用いられてもよい。
【００７９】
ＳＲＡＭ１５は、ＮＡＮＤメモリ５にライトすべきデータを一時的に格納するためのライトバッファ、およびＮＡＮＤメモリ５からリードされたデータを一時的に格納するためのリードバッファ等として利用されてもよい。
【００８０】
次に、ホスト２の構成について説明する。
【００８１】
ホスト２は、様々なプログラムを実行する情報処理装置である。ホスト２のオペレーティングシステム（ＯＳ）４１は、ファイルの生成、保存、更新、削除等を管理する。このＯＳ４１はストリームライト動作をサポートしている。ＯＳ４１がアプリケーションプログラムＡＰＬ０またはＡＰＬ１からストリーム書き込み要求を受信した時、ＯＳ４１は、ストリーム書き込み要求によって指定されるストリームのＩＤを含むＷＲＩＴＥ（３２）コマンドを生成する。そして、ＯＳ４１は、ＷＲＩＴＥ（３２）コマンドをＳＳＤ３に送出する。
【００８２】
ホスト２は、さらに、ストリームライト動作を管理するための機能モジュールとして、ストリーム管理部４２およびポリシー調整部４３を含む。
【００８３】
ストリーム管理部４２は、ストリームライト動作を要求したアプリケーションプログラム（つまりストリーム書き込み要求を発行したアプリケーションプログラム）と、ＯＳ４１からＳＳＤ３に発行されたストリームのＩＤとの対応関係を示すストリーム管理情報を生成する。
【００８４】
ポリシー調整部４３は、特定のストリームに関連付けられたデータを同じ消去ブロックにライトすることを要求するライトコマンドの送出を制御するためのポリシーを、ＳＳＤ３からのフィードバック情報３４に基づいて、調整するための処理を実行する。例えば、ある特定のアプリケーションプログラムが発行するストリームのＩＤ用に割り当てられた消去ブロックがガベージコレクションに使用されたならば、ポリシー調整部４３は、この特定のアプリケーションからの以降の、このＩＤを含むストリームライトの要求を、通常のライト動作の要求に置き換える処理を実行してもよい。あるいは、ポリシー調整部４３は、この特定のアプリケーションから以降の全てのストリームライトの要求を、通常のライト動作の要求に置き換える処理を実行してもよい。これにより、有効に機能しないＷＲＩＴＥ（３２）コマンドがＳＳＤ３に送出されることを抑制することができる。
【００８５】
あるいは、例えば、ＯＳ４１が「一定時間に生成される第１閾個数以上のファイル群に対応するデータのライトは全てストリームライト動作を使用する」というポリシーを現在採用している場合には、ストリーム管理部４２は、現在採用されているポリシーのＩＤと、ＯＳ４１からＳＳＤ３に発行されたストリームのＩＤとの対応関係を示すストリーム管理情報を生成してもよい。ＯＳ４１が、ＳＳＤ３からのフィードバック情報３４に基づいてストリームライト動作が上手く機能していないと判断した場合、ポリシー調整部４３は、採用すべきポリシーを、第１閾個数よりも大きい第２閾個数を有する別のポリシーに変更してもよい。
【００８６】
このように、本実施形態では、ＳＳＤ３がフィードバック情報３４をホスト２に提供することにより、効果の見込めないＷＲＩＴＥ（３２）コマンドの送出をホスト２に抑制させることができる。
【００８７】
ストリーム管理部４２およびポリシー調整部４３の機能はＯＳ４１内に組み込まれていても良い。
【００８８】
図２は、ＳＳＤ３のガベージコレクション制御部２４によって実行されるガベージコレクション動作を示す。
【００８９】
図２では、５つの消去ブロックがガベージコレクション動作の対象に選択された場合が例示されている。図１のガベージコレクション制御部２４は、有効データ（つまり有効ページ）と無効データ（つまり無効ページ）が混在する消去ブロックからガベージコレクション動作の対象とすべき幾つかの消去ブロックを選択する。ガベージコレクション制御部２４は、例えば、ルックアップテーブル３２を参照することによって、消去ブロックの容量に対する有効データの量の割合が少ない消去ブロックを優先的にガベージコレクション動作の対象として選択してもよい。ガベージコレクション制御部２４は、ガベージコレクション動作の対象である各消去ブロックから有効データのみをリードする。リードされたデータはＧＣバッファ３１に一時格納されてもよい。
【００９０】
図２の例では、上述の５つの消去ブロックの他に２つのフリーブロックが存在する。ガベージコレクション制御部２４は、５つの消去ブロック内の全ての有効データを、この２つのフリーブロックにコピーする。これにより、全ての有効データが２つのフリーブロックに集められる。これら２つのフリーブロックは有効データで満たされる。
【００９１】
この後、ガベージコレクション制御部２４は、有効データが残っていない５つの消去ブロックを消去してこれら５つの消去ブロックをフリーブロックにする。
【００９２】
ガベージコレクションの実行後は、有効データで満たされた２つの消去ブロックと、５つのフリーブロックとが存在する。
【００９３】
図３は、ＳＳＤ３において使用されるストリームのＩＤの個数と確保される消去ブロックの個数との関係を示す。
【００９４】
図３では、消去ブロックＢ０は、通常ライト動作のための現在の書き込み先ブロックである。消去ブロックＢ１は、ＩＤ１のストリームのために割り当てられている。消去ブロックＢ１は、ＩＤ１のストリームの書き込み先ブロックとして利用される。ＩＤ１を伴うデータは、消去ブロックＢ１にライトされる。消去ブロックＢ１がＩＤ１を伴うデータで満たされて消去ブロックＢ１に未使用のページが無くなると、ＩＤ１のストリームのためにさらに別の消去ブロックが割り当てられる。そして、ＩＤ１を伴う次のデータは、ＩＤ１ストリームのために新たに割り当てられた別の消去ブロックにライトされる。
【００９５】
消去ブロックＢ２は、ＩＤ２のストリームのために割り当てられている。消去ブロックＢ２は、ＩＤ２のストリームの書き込み先ブロックとして利用される。ＩＤ２を伴うデータは、消去ブロックＢ２にライトされる。消去ブロックＢ２がＩＤ２を伴うデータで満たされて消去ブロックＢ２に未使用のページが無くなると、ＩＤ２のストリームのためにさらに別の消去ブロックが割り当てられる。そして、ＩＤ２を伴う次のデータは、ＩＤ２のストリームのために新たに割り当てられた別の消去ブロックにライトされる。
【００９６】
このように、ＳＳＤ３においては、特定のストリームに関連付けられたデータは、この特定のストリーム用に割り当てられた１以上の消去ブロックにライトされる。
【００９７】
図４は、ライト動作制御部２１によって実行されるライト動作（通常ライト動作およびストリームライト動作）を示す。
【００９８】
どのストリームのＩＤにも関連付けられていないデータ（ＬＢＡ１１によって指定されるデータ、ＬＢＡ１２によって指定されるデータ）は、通常ライト動作のための現在の書き込み先ブロックである消去ブロックＢ０にライトされる。
【００９９】
ＩＤ１を伴うデータ（ＬＢＡ１によって指定されるデータ、ＬＢＡ２によって指定されるデータ、ＬＢＡ３によって指定されるデータ、ＬＢＡ４によって指定されるデータ、ＬＢＡ５によって指定されるデータ）は、ＩＤ１のストリーム用に割り当てられた消去ブロックＢ１にライトされる。
【０１００】
ＩＤ２を伴うデータ（ＬＢＡ１０２によって指定されるデータ、ＬＢＡ１０３によって指定されるデータ、ＬＢＡ２００によって指定されるデータ、ＬＢＡ１０４によって指定されるデータ、ＬＢＡ２０１によって指定されるデータ）は、ＩＤ２のストリーム用に割り当てられた消去ブロックＢ２にライトされる。
【０１０１】
図５は、特定のストリーム用に割り当てられた消去ブロック内の全データが無効化される過程を示す。
【０１０２】
理想的には、特定のストリームに関連付けられた消去ブロック内の全データは、アンマップまたは上書きによって、一斉に無効化されることが期待される。例えば、ホスト２は、この消去ブロック内の全データに対応するＬＢＡ範囲を指定するアンマップコマンドをＳＳＤ３に送出する。これにより、この消去ブロック内の全データは、アンマップコマンドの処理によって一斉に無効化される。あるいは、ホスト２は、この消去ブロック内のＬＢＡ群と同じＬＢＡ群へのライト（上書き）を一斉に要求するかもしれない。この場合も、この消去ブロック内の全データは、一斉に無効化される。
【０１０３】
しかし、上述したように、実際には、異なるライフタイムを有するデータが同じストリームに関連付けられてしまう可能性がある。この場合、消去ブロックにライトされた全データが一斉に無効化されることはなく、一部の有効データがこの消去ブロックに残る可能性がある。この消去ブロック内の有効データの量が低下すると、この消去ブロックはガベージコレクション動作の対象となる可能性がある。この場合、この消去ブロック内の有効データは異なるブロックに移動される可能性もある。
【０１０４】
図６は、特定のストリーム用に割り当てられた消去ブロック内のデータの一部が無効化された状態を示す。
【０１０５】
図６において、消去ブロックＢ１には、ストリームのＩＤ２を伴うデータ（ＬＢＡ１０２によって指定されるデータ、ＬＢＡ１０３によって指定されるデータ、ＬＢＡ２００によって指定されるデータ、ＬＢＡ１０４によって指定されるデータ、ＬＢＡ２０１によって指定されるデータ）が既にライトされている。
【０１０６】
もし、ＬＢＡ２００〜２０１によって指定されるデータとＬＢＡ１０２〜１０４によって指定されるデータとが異なるライフタイムを有するならば、ＬＢＡ１０２〜１０４のＬＢＡ範囲を指定するアンマップコマンドだけがホスト２によって発行され、ＬＢＡ２００〜２０１のＬＢＡ範囲を指定するアンマップコマンドがホスト２によって発行されない可能性がある。
【０１０７】
この場合、消去ブロックＢ１は有効データと無効データが混在するブロックとなるので、消去ブロックＢ１はガベージコレクション動作に使用される可能性がある。
【０１０８】
図７は、ホスト２のストリーム管理部４２によって管理されるストリーム管理情報のデータ構造例を示す。
【０１０９】
ストリーム管理テーブル４４には、アプリケーションプログラム名（またはアプリケーションプログラムのＩＤ）と、発行されたストリームのＩＤとの対応関係を示すストリーム管理情報が格納される。
【０１１０】
図７では、アプリケーションプログラムＡＰＬ０からの要求によってＩＤ１を含むＷＲＩＴＥ（３２）コマンドが発行され、またアプリケーションプログラムＡＰＬ１からの要求によってＩＤ２を含むＷＲＩＴＥ（３２）コマンドと、ＩＤ３を含むＷＲＩＴＥ（３２）コマンドと、ＩＤ４を含むＷＲＩＴＥ（３２）コマンドとが発行された場合が想定されている。
【０１１１】
ホスト２が、ガベージコレクション動作に使用された消去ブロックそれぞれが割り当てられたストリームのＩＤのリストを含むフィードバック情報３４をＳＳＤ３から受信した場合、ホスト２は、ストリーム管理テーブル４４を参照することにより、有効に機能しなかったＩＤを発行したアプリケーションプログラムを特定する。
【０１１２】
例えば、有効に機能しなかったＩＤ、つまりガベージコレクション動作に使用された消去ブロック群が割り当てられたストリームのＩＤが、ＩＤ２と、ＩＤ３であった場合には、ホスト２は、アプリケーションプログラムＡＰＬ１が使用した３つのＩＤの内の２つのＩＤが有効に機能しなかったと判定することができる。この場合、ホスト２は、アプリケーションプログラムＡＰＬ１が要求したストリームのＩＤの個数に対する有効に機能しなかったストリームのＩＤの個数の割合が低いので、以降、アプリケーションプログラムＡＰＬ１がストリームライト動作を使用することを禁止してもよい。あるいは、ホスト２は、ＡＰＬ１がＩＤ２のストリームライト動作とＩＤ３のストリームライト動作を使用することだけを禁止して、ＡＰＬ１がＩＤ４のストリームライト動作を使用することは禁止しなくても良い。
【０１１３】
図８は、ＳＳＤ３によって管理されるストリーム管理情報のデータ構造例を示す。
【０１１４】
ストリーム管理テーブル３３には、ストリームのＩＤと、ストリームのＩＤを伴うデータがライトされた消去ブロックとの対応関係を示すストリーム管理情報が格納される。
【０１１５】
図８では、ＩＤ１のストリームに関連付けられたデータのライトのために消去ブロックＢ１、Ｂ３、Ｂ４が使用され、ＩＤ２のストリームに関連付けられたデータのライトのために消去ブロックＢ２が使用された場合が想定されている。
【０１１６】
もし消去ブロックＢ２がガベージコレクション制御部２４によるガベージコレクション動作に使用されたならば、ストリーム情報収集部２５は、ストリーム管理テーブル３３に基づいて、ガベージコレクション動作に使用された消去ブロックＢ２がＩＤ２のストリームのために割り当てられていることを認識することができる。
【０１１７】
図９は、ＳＳＤ３によって管理されるストリーム管理情報の別のデータ構造例を示す。
【０１１８】
ストリーム管理テーブル３３には、ストリームのＩＤと、このストリームのＩＤを発行したアプリケーションプログラムのＩＤと、このストリームのＩＤを伴うデータがライトされた消去ブロックとの対応関係を示すストリーム管理情報が格納される。ストリームのオープンに伴って、アプリケーションのＩＤは、ホスト２からＳＳＤ３に別途送られる。あるストリームのＩＤを発行したアプリケーションプログラムのＩＤは、ホスト２からの上述のＷＲＩＴＥ（３２）コマンドに含まれていても良い。
【０１１９】
もし消去ブロックＢ２がガベージコレクション制御部２４によるガベージコレクション動作に使用されたならば、ストリーム情報収集部２５は、ストリーム管理テーブル３３に基づいて、ガベージコレクション動作に使用された消去ブロックＢ２が割り当てられたストリームのＩＤがＩＤ２であること、さらに、このＩＤ２を発行したアプリケーションプログラムがＡＰＬ１であることを認識できる。ストリーム情報収集部２５は、ガベージコレクション動作に使用された消去ブロックが割り当てられていたストリームのＩＤのリストと、これらストリームのＩＤに対応するアプリケーションプログラムのＩＤのリストとを含むフィードバック情報３４をホスト２に提供しても良い。これにより、たとえホスト２が、あるアプリケーションによって過去に使用されたストリームのＩＤを別のアプリケーションプログラムが再利用することを許容するように設計されている場合であっても、ホスト２は、フィードバック情報３４に基づき、有効に機能しなかったＩＤを発行したアプリケーションプログラムを正しく特定することができる。
【０１２０】
なお、ＳＳＤ３側でＷＲＩＴＥ（３２）コマンドの内容からハッシュ値を生成して、このハッシュ値をアプリケーションプログラムのＩＤの代わりに使用してもよい。この場合、ストリーム管理テーブル３３には、ストリームのＩＤと、このストリームのＩＤのオープンを要求したＷＲＩＴＥ（３２）コマンドのハッシュ値と、このストリームのＩＤを伴うデータがライトされた消去ブロックとの対応関係を示すストリーム管理情報が格納される。ストリーム情報収集部２５は、ガベージコレクション動作に使用された消去ブロックが割り当てられたストリームのＩＤのリストと、これらストリームのＩＤに対応するハッシュ値のリストとを含むフィードバック情報３４をホスト２に提供しても良い。ホスト２も、オープンされたストリームのＩＤと、このストリームのＩＤのオープンを要求したＷＲＩＴＥ（３２）コマンドのハッシュ値との対応関係をホスト２側のストリーム管理テーブル４４に記録しても良い。これにより、ホスト２は、有効に機能しなかったＩＤを発行したアプリケーションプログラムを特定することができる。
【０１２１】
図１０のフローチャートは、ＳＳＤ３によって実行されるライトコマンド処理の手順を示す。
【０１２２】
ＳＳＤ３のコントローラ４は、ホスト２からライトコマンドを受信する（ステップＳ１１）。コントローラ４は、この受信したライトコマンドが、ストリームのＩＤを含むライトコマンドであるか否か、つまりこの受信したライトコマンドによって指定されるデータがストリームのＩＤを伴うデータであるか否かを判定する（ステップＳ１２）。
【０１２３】
受信したライトコマンドが、ストリームのＩＤを含むライトコマンドであるならば（ステップＳ１２のＹＥＳ）、コントローラ４は、ストリームライト動作を実行する（ステップＳ１３）。ステップＳ１３では、コントローラ４は、受信したライトコマンド内のＬＢＡおよび転送長によって指定されるデータをホスト２のデータアウトバッファから転送する。そして、コントローラ４は、このデータを、このストリーム用に割り当てられた消去ブロック内の次の利用可能ページにライトする。さらに、コントローラ４は、ルックアップテーブル３２を更新して、ライトコマンドによって指定されるＬＢＡ範囲に対応するデータの物理記憶位置をルックアップテーブル３２に記録する。
【０１２４】
受信したライトコマンドが、どのストリームのＩＤも含まないライトコマンドであるならば（ステップＳ１２のＮＯ）、コントローラ４は、通常ライト動作を実行する（ステップＳ１４）。ステップＳ１４では、コントローラ４は、受信したライトコマンド内のＬＢＡおよび転送長によって指定されるデータをホスト２のデータアウトバッファから転送する。そして、コントローラ４は、このデータを、通常ライト動作に現在使用されている消去ブロック内の次の利用可能ページにライトする。さらに、コントローラ４は、ルックアップテーブル３２を更新して、ライトコマンドによって指定されるＬＢＡ範囲に対応するデータの物理記憶位置をルックアップテーブル３２に記録する。
【０１２５】
図１１のフローチャートは、ＳＳＤ３によって実行されるアンマップコマンド処理の手順を示す。
【０１２６】
ＳＳＤ３のコントローラ４は、ホスト２からアンマップコマンドを受信する（ステップＳ２１）。コントローラ４は、この受信したアンマップコマンドによって指定されるアンマップ対象の１以上のＬＢＡに対応するデータを無効化する（ステップＳ２２）。ステップＳ２２では、コントローラ４は、ルックアップテーブル３２を更新して、ホスト２によって指定されたアンマップ対象の各ＬＢＡに対応するフラグを無効を示す値にセットする。
【０１２７】
図１２のフローチャートは、ＳＳＤ３によって実行されるガベージコレクション動作の手順を示す。
【０１２８】
ＳＳＤ３のコントローラ４は、残りフリーブロックの個数が閾値以下に低下したことが判定された場合（ステップＳ３１のＹＥＳ）、あるいはホスト２からガベージコレクション要求（ＧＣ要求）が受信された場合（ステップＳ３２のＹＥＳ）、ガベージコレクション動作を開始する。
【０１２９】
コントローラ４は、ガベージコレクションの対象とすべき消去ブロック群を選択し、これら消去ブロック群を使用して有効データを幾つかの消去ブロックに集約する（ステップＳ３３）。そして、コントローラ４は、有効データが他の消去ブロックにコピーされることによって無効データのみで満たされた消去ブロックを消去する（ステップＳ３４）。
【０１３０】
図１３のフローチャートは、ＳＳＤ３とホスト２とによって実行されるストリームライト動作制御に関する一連の処理の手順を示す。
【０１３１】
アプリケーションプログラムは、ストリーム書き込み要求、つまりストリームのＩＤを含むライト要求を、ＯＳ４１に発行する（ステップＳ４１）。ＯＳ４１は、このライト要求によって指定されたストリームのＩＤを含むライトコマンド（ＷＲＩＴＥ（３２）コマンド）をＳＳＤ３に発行（送出）する。ホスト２のストリーム管理部４２は、このアプリケーションプログラムと、発行されストリームのＩＤとの対応関係を示すストリーム管理情報を、ホスト２のストリーム管理テーブル４４に記録する（ステップＳ４３）。
【０１３２】
ＳＳＤ３のコントローラ４は、ホスト２からライトコマンドを受信する（ステップＳ５１）。コントローラ４は、受信されたライトコマンドがストリームのＩＤを含むライトコマンドであるか否かを判定する（ステップＳ５２）。
【０１３３】
受信されたライトコマンドがストリームのＩＤを含まないライトコマンドであるならば（ステップＳ５２のＮＯ）、コントローラ４は、通常ライト動作を実行する（ステップＳ５３）。
【０１３４】
一方、受信されたライトコマンドがストリームのＩＤを含むライトコマンドであるならば（ステップＳ５２のＹＥＳ）、コントローラ４は、ストリームライト動作を実行する（ステップＳ５４）。さらに、コントローラ４は、ストリームのＩＤと、データがライトされた消去ブロックとの対応関係を示すストリーム管理情報を、ＳＳＤ３のストリーム管理テーブル３３に記録する（ステップＳ５５）。
【０１３５】
コントローラ４は、必要な時にガベージコレクション動作を実行する。ガベージコレクション動作が実行されたならば（ステップＳ５６のＹＥＳ）、コントローラ４は、ＳＳＤ３のストリーム管理テーブル３３を参照することによって、ガベージコレクション動作に使用された消去ブロックそれぞれが割り当てられているストリームのＩＤに関する情報を収集する（ステップＳ５７）。コントローラ４は、収集された情報をフィードバック情報３４としてホスト２に提供する（ステップＳ５８）。フィードバック情報３４は、上述したように、ガベージコレクション動作に使用された消去ブロックそれぞれが割り当てられているストリームのＩＤのリストから構成されていてもよい。
【０１３６】
ステップＳ５８では、コントローラ４はフィードバック情報３４をホスト２にすぐに転送してもよいが、代わりに、フィードバック情報３４をＳＳＤ３のＤＲＡＭ６に格納し、ホスト２からのフィードバック情報３４の要求が受信された時にフィードバック情報３４をホスト２に転送してもよい。
【０１３７】
ホスト２は、ＳＳＤ３からフィードバック情報３４を受信する（ステップＳ４４）。ホスト２は、フィードバック情報３４とホスト２のストリーム管理テーブル４４とに基づいて、有効に機能しなかったストリームのＩＤとこのストリームのＩＤを発行したアプリケーションプログラムとを特定する（ステップＳ４５）。そして、ホスト２は、この特定されたストリームのＩＤを含むＷＲＩＴＥ（３２）コマンドの送出を制御するためのポリシーを調整する（ステップＳ４６）。
【０１３８】
ステップＳ４６では、ホスト２は、採用すべきポリシーを、全てのアプリケーションプログラムから要求を無条件に受け入れるという現在のポリシーから、特定されたアプリケーションプログラムによる以降のストリームライト動作の使用を禁止するというポリシーに変更しても良い。この場合、特定されたアプリケーションプログラムからの以降のストリームライト動作の要求は、通常ライト動作を要求するライトコマンドに変換される。
【０１３９】
図１４のフローチャートは、ホスト２のＯＳ４１によって実行されるライトコマンド変換処理の手順を示す。
【０１４０】
ＯＳ４１は、アプリケーションプログラムからストリーム書き込み要求、つまりストリームのＩＤを含むライト要求を、受信する（ステップＳ６１）。ＯＳ４１は、受信されたライト要求（ストリーム書き込み要求）が、上述の特定されたアプリケーションプログラムからのライト要求（ストリーム書き込み要求）であるか否かを判定する（ステップＳ６２）。
【０１４１】
受信されたライト要求（ストリーム書き込み要求）が、上述の特定されたアプリケーションプログラムからのライト要求（ストリーム書き込み要求）であるならば（ステップＳ６２のＹＥＳ）、ＯＳ４１は、このライト要求（ストリーム書き込み要求）を、ストリームのＩＤを含まない通常のライトコマンドに変換する（ステップＳ６３）。そして、ＯＳ４１は、この通常ライトコマンドをＳＳＤ３に発行する（ステップＳ６４）。
【０１４２】
一方、受信されたライト要求（ストリーム書き込み要求）が、上述の特定されたアプリケーションプログラムからのライト要求（ストリーム書き込み要求）ではないならば（ステップＳ６２のＮＯ）、ＯＳ４１は、受信されたライト要求（ストリーム書き込み要求）に含まれるストリームのＩＤを含むライトコマンド（ＷＲＩＴＥ（３２）コマンド）をＳＳＤ３に発行（送出）する（ステップＳ６５）。
【０１４３】
図１５のフローチャートは、ＳＳＤ３とホスト２とによって実行されるストリームライト動作制御に関する別の一連の処理の別の手順を示す。
【０１４４】
ここでは、ＯＳ４１が、ＯＳ４１自体が保持するポリシーを使用して、ストリームのＩＤを発行する処理を行っている場合を想定する。
【０１４５】
ＯＳ４１は、アプリケーションプログラムからファイル生成要求を受信する（ステップＳ７１）。ＯＳ４１は、一定時間内に生成されるファイルの個数が現在のポリシーによって指定される閾個数以上であるか否かを判定する（ステップＳ７２）。
【０１４６】
生成されるファイルのサイズが、一定時間内に生成されるファイルの個数が、現在のポリシーによって指定される閾個数以上でないならば（ステップＳ７２のＮＯ）、ＯＳ４１は、ストリームのＩＤを含まないライトコマンドをＳＳＤ３に発行して、ＳＳＤ３に通常ライト動作を要求する（ステップＳ７３）。
【０１４７】
一方、一定時間内に生成される生成されるファイルの個数が、現在のポリシーによって指定される閾個数以上であるならば（ステップＳ７２のＹＥＳ）、ＯＳ４１は、ストリームのＩＤを含むライトコマンドをＳＳＤ３に発行して、ＳＳＤ３にストリームライト動作を要求する（ステップＳ７４）。ホスト２のストリーム管理部４２は、現在のポリシーと、発行されストリームのＩＤとの対応関係を示すストリーム管理情報をホスト２のストリーム管理テーブル４４に記録する（ステップＳ７５）。例えば、現在のポリシーがポリシー＃１で、且つこのポリシー＃１の制御の下にＩＤ１とＩＤ２の２つのストリームのＩＤが発行されたならば、ストリーム管理テーブル４４には、図１６に示すようなストリーム管理情報が記録される。
【０１４８】
ＳＳＤ３のコントローラ４は、ホスト２からライトコマンドを受信する（ステップＳ８１）。コントローラ４は、受信されたライトコマンドがストリームのＩＤを含むライトコマンドであるか否かを判定する（ステップＳ８２）。
【０１４９】
受信されたライトコマンドがストリームのＩＤを含まないライトコマンドであるならば（ステップＳ８２のＮＯ）、コントローラ４は、通常ライト動作を実行する（ステップＳ８３）。
【０１５０】
一方、受信されたライトコマンドがストリームのＩＤを含むライトコマンドであるならば（ステップＳ８２のＹＥＳ）、コントローラ４は、ストリームライト動作を実行する（ステップＳ８４）。さらに、コントローラ４は、ストリームのＩＤと、データがライトされた消去ブロックとの対応関係を示すストリーム管理情報を、ＳＳＤ３のストリーム管理テーブル３３に記録する（ステップＳ８５）。
【０１５１】
コントローラ４は、必要な時にガベージコレクション動作を実行する。ガベージコレクション動作が実行されたならば（ステップＳ８６のＹＥＳ）、コントローラ４は、ＳＳＤ３のストリーム管理テーブル３３を参照することによって、ガベージコレクション動作に使用された消去ブロックそれぞれが割り当てられているストリームのＩＤに関する情報を収集する（ステップＳ８７）。コントローラ４は、収集された情報をフィードバック情報３４としてホスト２に提供する（ステップＳ８８）。フィードバック情報３４は、上述したように、ガベージコレクション動作に使用された消去ブロックそれぞれが割り当てられているストリームのＩＤのリストから構成されていてもよい。
【０１５２】
ステップＳ８８では、コントローラ４はフィードバック情報３４をホスト２にすぐに転送してもよいが、代わりに、フィードバック情報３４をＳＳＤ３のＤＲＡＭ６に格納し、ホスト２からのフィードバック情報３４の要求が受信された時にフィードバック情報３４をホスト２に転送してもよい。
【０１５３】
ホスト２は、ＳＳＤ３からフィードバック情報３４を受信する（ステップＳ７６）。ホスト２は、フィードバック情報３４とホスト２のストリーム管理テーブル４４とに基づいて、有効に機能しなかったストリームのＩＤとこのストリームのＩＤの発行に使用されたポリシーとを特定する（ステップＳ７７）。そして、ホスト２は、現在使用中のポリシーを、特定されたポリシー内に保持されている閾値よりも大きい閾値を含む別のポリシーに変更する（ステップＳ７８）。
【０１５４】
図１７は、ＳＳＤ３のハードウェア構成例を示す。
【０１５５】
ＳＳＤ３のコントローラ４は、メインバス５１、メッセージ通信路５２、ホストインタフェース５３、暗号化／復号化部（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ  （ＡＥＳ））５４、ハードウェアエンジン５５および５６、４つのＣＰＵ５７、ＮＡＮＤコントローラ（ＮＡＮＤＣ）５８、ＤＲＡＭコントローラ（ＤＲＡＭＣ）５９、ＳＲＡＭコントローラ（ＳＲＡＭＣ）６０、ＳＲＡＭ６１、ＳＲＡＭコントローラ（ＳＲＡＭＣ）６２、ＳＲＡＭ６３等を含む。
【０１５６】
メインバス５１は図１のバス１０に対応する。メッセージ通信路５２は、４つのＣＰＵ５７とＮＡＮＤコントローラ（ＮＡＮＤＣ）５８との間のメッセージ通信に使用される。ホストインタフェース５３は、図１のホストインタフェース１１に対応する。暗号化／復号化部（ＡＥＳ）５４は、データライト動作において、ホストインタフェースコントローラ５３からのライトデータ（平文）を暗号化する。暗号化／復号化部（ＡＥＳ）５４は、データリード動作において、ＮＡＮＤメモリ５からリードされる暗号化されたデータを復号する。なお、この暗号化／復号化部５４を介さずに、ライトデータ及びリードデータを転送することも必要に応じて可能である。
【０１５７】
ハードウェアエンジン５５、５６は、高負荷の処理を実行するためのハードウェア回路である。
【０１５８】
４つのＣＰＵ５７は図１のＣＰＵ１２の処理を並列実行する。各ＣＰＵ５７はＤＭＡコントローラ（ＤＭＡＣ）５７Ａを備えている。ＮＡＮＤコントローラ（ＮＡＮＤＣ）５８は、図１のＮＡＮＤインタフェース１３に対応する。ＮＡＮＤコントローラ（ＮＡＮＤＣ）５８は、ＣＰＵ５７を介さないデータ転送を実現するためのハードウェア連携機能を有していても良い。
【０１５９】
ＤＲＡＭコントローラ（ＤＲＡＭＣ）５９は、図１のＤＲＡＭインタフェース１４に対応する。ＳＲＡＭ６１、６２は、図１のＳＲＡＭ１５に対応する。ＳＲＡＭ６１の記憶領域はライトバッファおよびリードバッファとして利用される。ライトバッファは、ＮＡＮＤメモリ５に適した所定のデータサイズのライトデータが蓄積されるまでライトデータを一時的に格納する。リードバッファは、ＮＡＮＤメモリ５からリードされたデータを一時的に格納する。ＳＲＡＭ６２の記憶領域は、４つのＣＰＵ５７間の通信等に使用される。
【０１６０】
図１８は、ホスト２として機能する情報処理装置１００のハードウェア構成例を示す。
【０１６１】
情報処理装置１００は、デスクトップパーソナルコンピュータ、ノートブックパーソナルコンピュータ、またはサーバコンピュータとして実現される。情報処理装置１００は、プロセッサ（ＣＰＵ）１０１、メインメモリ１０２、ＢＩＯＳ−ＲＯＭ１０３、グラフィクスプロセッシングユニット（ＧＰＵ）１０４、ネットワークコントローラ１０５、周辺インタフェースコントローラ１０６、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）コントローラ１０７、エンベデッドコントローラ（ＥＣ）１０８、入力デバイス１０９等を含む。
【０１６２】
プロセッサ１０１は、情報処理装置１００の各コンポーネントの動作を制御するように構成されたＣＰＵである。このプロセッサ１０１は、メインメモリ１１３にロードされた様々なプログラムを実行する。メインメモリ１１３は、ＤＲＡＭのような揮発性メモリから構成される。プロセッサ１０１によって実行されるプログラムは、上述のＯＳ４１および各種アプリケーションプログラムを含む。ＯＳ４１は、図１で説明したストリーム管理部４２およびポリシー調整部４３の機能を実行する。
【０１６３】
また、プロセッサ１０１は、不揮発性メモリであるＢＩＯＳ−ＲＯＭ１０３に格納された基本入出力システム（ＢＩＯＳ）も実行する。ＢＩＯＳはハードウェア制御のためのシステムプログラムである。
【０１６４】
ＧＰＵ１０４は、本情報処理装置１００のディスプレイモニタとして使用されるディスプレイ２００を制御するように構成された表示コントローラである。ディスプレイ２００は、情報処理装置１００の筐体に取り付けられた内部ディスプレイであってもよいし、情報処理装置１００の筐体にケーブルを介して接続される外部ディスプレイであってもよい。ＧＰＵ１０４は、メインメモリ１０２の一部の記憶領域または専用のメモリをビデオメモリとして使用し、このビデオメモリに格納された表示データからディスプレイ２００に供給すべき表示信号を生成する。
【０１６５】
ネットワークコントローラ１０５は、有線ＬＡＮコントローラ、無線ＬＡＮコントローラのような通信デバイスである。周辺インタフェースコントローラ１０６は、ＵＳＢデバイスのような周辺デバイスとの通信を実行するように構成されている。
【０１６６】
ＳＡＳコントローラ１０７は、ＳＡＳコネクタ１０７Ａに接続されるデバイスとの通信を実行するように構成されている。本実施形態では、ＳＳＤ３がＳＡＳコネクタ１０７Ａに接続される。ＳＳＤ３は、情報処理装置１００のメインストレージとして機能する。
【０１６７】
ＥＣ１０８は、情報処理装置１００の電力管理を実行するように構成されたシステムコントローラとして機能する。ＥＣ１０８は、ユーザによる電源スイッチの操作に応じて情報処理装置１００をパワーオンおよびパワーオフする。ＥＣ１０８はワンチップマイクロコントローラのような処理回路として実現されている。ＥＣ１０８は、キーボード（ＫＢ）１３などの入力デバイスを制御するキーボードコントローラを内蔵していてもよい。
【０１６８】
この情報処理装置１００においては、ＯＳ４１の制御の下、プロセッサ１０１は、以下の処理を実行する。
【０１６９】
プロセッサ１０１は、同じ予期されるライフタイムを有するデータを特定のストリームに割り当てる。そして、プロセッサ１０１は、特定のストリームに関連付けられたデータを同じ消去ブロックにライトすることを要求するライトコマンド（ＷＲＩＴＥ（３２）コマンド）をＳＳＤ３に送出する。このＷＲＩＴＥ（３２）コマンドは、特定のストリームのＩＤを含む。このＷＲＩＴＥ（３２）コマンドは、ＳＡＳコントローラ１０７を介してＳＳＤ３に送出される。ＳＳＤ３は、このＷＲＩＴＥ（３２）コマンドを処理することによって、上述のストリームライト動作を実行する。
【０１７０】
プロセッサ１０１は、ＳＳＤ３から上述のフィードバック情報を受信する。フィードバック情報は、特定のストリームに関連付けられたデータがライトされた消去ブロックがガベージコレクションに使用されたか否かを示す情報を含む。プロセッサ１０１は、フィードバック情報から、上述の特定のストリームが有効に機能しているかどうかを確認することができる。特定のストリームに関連付けられたデータがライトされた消去ブロックがガベージコレクションに使用されたことは、特定のストリームが有効に機能していないことを意味する。
【０１７１】
プロセッサ１０１は、ＳＳＤ３からのフィードバック情報に基づき、特定のストリームのＩＤを含むライトコマンド（ＷＲＩＴＥ（３２）コマンド）の送出を制御するためのポリシーを自動的に調整する。例えば、上述の特定のストリームが有効に機能していない場合には、プロセッサ１０１は、特定のストリームのＩＤを含むライトコマンド（ＷＲＩＴＥ（３２）コマンド）の送出が抑制されるようにポリシーを調整する。
【０１７２】
このように、この情報処理装置１００によれば、ガベージコレクションの頻度を下げる効果の見込めないＷＲＩＴＥ（３２）コマンドの送出を抑制することによって、ＳＳＤ３のフリースペースの無駄な消費を削減でき、ＳＳＤ３の寿命を延ばすことができる。
【０１７３】
図１９は、ＳＳＤ３を利用して構成されたストレージシステム３００の構成例を示す。
【０１７４】
ストレージシステム３００は、多数のＳＳＤ３Ｂを備える。これらＳＳＤ３Ｂの各々は、上述のＳＳＤ３と同等の機能を有している。
【０１７５】
ストレージシステム３００はエンタープライズ用ＳＳＤ（ｅＳＳＤ）であり、データセンター内のサーバコンピュータ２Ｂのストレージとして使用可能である。
【０１７６】
各ＳＳＤ３Ｂは比較的小型のモジュールとして実現されている。各ＳＳＤ３Ｂの外形寸法の一例は、２０ｍｍ×３０ｍｍ程度である。サーバコンピュータ２Ｂの筐体は、複数のコネクタ（スロット）３０を備える。各コネクタ３０は、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）コネクタであってもよい。このＳＡＳコネクタは、６ＧｂｐｓのＤｕａｌ  Ｐｏｒｔによって、コンピュータ２Ｂと各ＳＳＤ３Ｂとの間の高速通信を可能にする。あるいは、各コネクタ３０は、ＰＣＩｅ（ＰＣＩ  Ｅｘｐｒｅｓｓ）又はＮＶＭｅ（ＮＶＭ  Ｅｘｐｒｅｓｓ）であってもよい。
【０１７７】
多数のＳＳＤ３Ｂは、コンピュータ２Ｂのコネクタ３０にそれぞれ装着され、略鉛直方向に起立した姿勢でコンピュータ２Ｂの筐体の一面上に配置される。このような構成によれば、多数のＳＳＤ３Ｂをコンパクトに纏めて実装可能であり、ストレージシステム３００の小型化を図ることができる。
【０１７８】
なお、個々のＳＳＤ３Ｂは、ポータブルコンピュータ、タブレットといった電子機器の半導体記憶媒体としても適用可能である。
【０１７９】
次に、図１のストリーム情報収集部２５の実装例について説明する。
【０１８０】
本実施形態では、ストリーム情報収集部２５は、ストリームライト動作によってデータがライトされた消去ブロックがガベージコレクションの対象になったか否かに関する情報を収集する。ストリームライト動作によってデータがライトされた消去ブロックがガベージコレクションの対象になったということは、この消去ブロックにライトされたデータの実際のライフタイム間にある一定以上の差があったことを意味する。したがって、ストリームライト動作によってデータがライトされた消去ブロックがガベージコレクションの対象になったか否かに関する情報は、ライトされたデータの実際のライフタイムのばらつきに関する情報であるといえる。
【０１８１】
ストリームライト動作によってデータがライトされた消去ブロックがガベージコレクションの対象になったか否かに関する情報に加えて、あるいは、この情報の代わりに、ストリーム情報収集部２５は、以下の情報を、収集してもよい。
【０１８２】
ストリーム情報収集部２５は、ストリームライト動作によってデータがライトされた消去ブロックの全データが、アンマップまたは上書きにより無効化されるまでの時間を測定し、この時間に関する情報を収集しても良い。例えば、ストリーム情報収集部２５は、特定のストリームに関連付けられたデータ内の一部が最初に無効化された時点から、このデータ内の最後の部分が無効化される時点までの実時間を測定しても良い。この実時間は、ストリームに関連付けられたデータの実際のライフタイムのばらつきの程度を示す。ストリーム情報収集部２５は、この実時間をホスト２に提供する。ホスト２は、この実時間に基づいて、ストリームに関連付けられたデータの実際のライフタイムのばらつきの程度を確認できるので、適切なポリシー調整を行うことができる。
【０１８３】
ストリーム情報収集部２５は、ストリームライト動作によってデータがライトされた消去ブロックの全データが無効化されるまでに発行された、当該ストリームに関するアンマップまたは上書きの回数を測定し、この回数に関する情報を収集しても良い。この回数も、ストリームに関連付けられたデータの実際のライフタイムのばらつきのを表す指標として利用できる。ストリーム情報収集部２５は、この回数をホスト２に提供する。ホスト２は、この回数に基づいて、ストリームに関連付けられたデータの実際のライフタイムのばらつきの程度を確認できるので、適切なポリシー調整を行うことができる。
【０１８４】
以上説明したように、本実施形態によれば、ＳＳＤ３内のコントローラ４は、ストリームに関連付けられたデータがライトされ、このストリームに関連付けられていないデータがライトされない消去ブロックが、ガベージコレクション動作に使用されたか否かを示すフィードバック情報を、ホスト２に提供する。よって、有効に機能しないストリームライト要求の発行の抑制または削減のために有用な情報をホスト２に対して提供できる。この結果、ガベージコレクションの頻度を下げる効果の無いストリームライト動作に起因するＳＳＤ３の性能や寿命の劣化を抑制できる。
【０１８５】
なお、本実施形態では、不揮発性メモリとしてＮＡＮＤメモリを例示した。しかし、本実施形態の機能は、消去単位にライトされたデータが一斉に無効化されたならばこの消去単位に対するガベージコレクションなしで容易にフリースペースを作り出すことが可能な物理構造を有する様々な不揮発性メモリに適用可能である。例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような不揮発性メモリが上述の物理構造を有する場合には、本実施形態の機能は、これら不揮発性メモリにも適用できる。
【０１８６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１８７】
２…ホスト、３…ＳＳＤ、４…コントローラ、５…ＮＡＮＤメモリ、２１…ライト動作制御部、２２…ストリーム管理部、２３…アンマップ制御部、２４…ガベージコレクション制御部２４、２５…ストリーム情報収集部、４３…ポリシー調整部。
【図１】
2016170583.tif 000003
【図２】
2016170583.tif 000004
【図３】
2016170583.tif 000005
【図４】
2016170583.tif 000006
【図５】
2016170583.tif 000007
【図６】
2016170583.tif 000008
【図７】
2016170583.tif 000009
【図８】
2016170583.tif 000010
【図９】
2016170583.tif 000011
【図１０】
2016170583.tif 000012
【図１１】
2016170583.tif 000013
【図１２】
2016170583.tif 000014
【図１３】
2016170583.tif 000015
【図１４】
2016170583.tif 000016
【図１５】
2016170583.tif 000017
【図１６】
2016170583.tif 000018
【図１７】
2016170583.tif 000019
【図１８】
2016170583.tif 000020
【図１９】
2016170583.tif 000021