(57)【要約】【課題】  ホストからのアクセスへの影響を軽減しながら、コールドブロック内の余剰容量を回収できる電子機器を実現する。【解決手段】  実施形態によれば、電子機器は、複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続されたコントローラとを具備する。前記コントローラは、前記不揮発性メモリに格納されているコールドデータに対応する第１論理アドレス範囲と、前記コールドデータを含むコールドブロックをデータを書き込み可能なブロックにするための処理量とを示す情報をホストに送信可能であり、前記ホストから受信可能である前記第１論理アドレス範囲を指定したリードコマンドに応じて、前記不揮発性メモリから前記コールドデータを読み出して前記ホストに送信可能であり、前記ホストから、前記第１論理アドレス範囲を指定したライトコマンドに応じて受信可能である前記コールドデータを、前記不揮発性メモリに書き込む。【選択図】図５
2019169101.tif 000002
【特許請求の範囲】
【請求項１】
インタフェースを介してホストと接続可能な電子機器であって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続されたコントローラとを具備し、
前記コントローラは、前記電子機器が前記ホストと接続された場合に、
前記不揮発性メモリに格納されているコールドデータに対応する第１論理アドレス範囲と、前記コールドデータを含むコールドブロックをデータを書き込み可能なブロックにするための処理量とを示す情報を前記ホストに送信可能であり、
前記ホストから受信可能である前記第１論理アドレス範囲を指定したリードコマンドに応じて、前記不揮発性メモリから前記コールドデータを読み出して前記ホストに送信可能であり、
前記ホストから、前記第１論理アドレス範囲を指定したライトコマンドに応じて受信可能である前記コールドデータを、前記不揮発性メモリに書き込むように構成される電子機器。
【請求項２】
前記コントローラは、
前記不揮発性メモリ内の第１物理記憶領域に前記コールドデータが格納されている場合に、前記ホストから受信可能である問合せに応じて、前記第１物理記憶領域に対応する前記第１論理アドレス範囲を示す情報を前記ホストに送信可能であり、
前記ホストから受信可能である前記第１論理アドレス範囲を指定したリードコマンドに応じて、前記不揮発性メモリから前記コールドデータを読み出して前記ホストに送信可能であり、
前記ホストから、前記第１論理アドレス範囲を指定したライトコマンドに応じて受信可能である前記コールドデータを、前記不揮発性メモリ内の第２物理記憶領域に書き込むように構成される請求項１記載の電子機器。
【請求項３】
前記第１論理アドレス範囲は、前記第１論理アドレス範囲の先頭の論理アドレスと、前記第１論理アドレス範囲に含まれる論理ブロックの数とによって示される請求項１記載の電子機器。
【請求項４】
前記第１論理アドレス範囲に対するアクセス頻度は閾値未満である請求項１記載の電子機器。
【請求項５】
前記コールドブロックは、イレーズ回数が閾値未満であるブロック、またはブロックがイレーズされた順序を示す番号が特定の番号よりも小さいブロックであり、
前記コールドデータは、前記コールドブロック内の有効データである請求項１記載の電子機器。
【請求項６】
前記コントローラは、さらに、前記電子機器が前記ホストと接続された場合に、
前記ホストから受信可能である問い合わせに応じて、前記不揮発性メモリ内の一つ以上のコールドブロックを、データを書き込み可能な一つ以上のブロックにするための処理量を示す情報を前記ホストに送信可能であり、
前記ホストから受信可能である要求に応じて、前記一つ以上のコールドブロックを、データを書き込み可能な一つ以上のブロックにするための処理を実行するように構成される請求項１記載の電子機器。
【請求項７】
前記コントローラは、さらに、前記電子機器が前記ホストと接続された場合に、
前記不揮発性メモリ内の一つ以上のコールドブロックに含まれる無効データ量が閾値を超えた場合、前記無効データ量が前記閾値を超えたことを示す情報、または前記一つ以上のコールドブロックを、データを書き込み可能な一つ以上のブロックにする処理が必要であることを示す情報を前記ホストに送信可能である請求項１記載の電子機器。
【請求項８】
前記ライトコマンドは、書き込まれるデータがコールドデータであることを示す情報を含む請求項１記載の電子機器。
【請求項９】
前記コントローラは、さらに、前記電子機器が前記ホストと接続された場合に、
前記ホストから受信可能である、前記第１論理アドレス範囲と当該第１論理アドレス範囲に先行または後続する論理アドレスとを含む第２論理アドレス範囲を指定したリードコマンドに応じて、前記不揮発性メモリから第２データを読み出して前記ホストに送信可能であり、
前記ホストから、前記第２論理アドレス範囲を指定したライトコマンドに応じて受信可能である前記第２データを、前記不揮発性メモリに書き込むように構成される請求項１記載の電子機器。
【請求項１０】
前記コントローラは、さらに、前記電子機器が前記ホストと接続された場合に、
前記不揮発性メモリに格納されているデータリテンションのために移動すべき第３データに対応する第３論理アドレス範囲と、前記第３データを含むブロックをデータを書き込み可能なブロックにするための処理量とを示す情報を前記ホストに送信可能であり、
前記ホストから受信可能である前記第３論理アドレス範囲を指定したリードコマンドに応じて、前記不揮発性メモリから前記第３データを読み出して前記ホストに送信可能であり、
前記ホストから、前記第３論理アドレス範囲を指定したライトコマンドに応じて受信可能である前記第３データを、前記不揮発性メモリに書き込むように構成される請求項１記載の電子機器。
【請求項１１】
前記コントローラは、さらに、前記電子機器が前記ホストと接続された場合に、
前記不揮発性メモリから前記コールドデータを読み出し、
前記第１論理アドレス範囲を指定した、前記読み出されたコールドデータを書き込むためのライトコマンドを第２電子機器に発行し、
前記ライトコマンドに応じて前記コールドデータが前記第２電子機器内の第２不揮発性メモリに書き込まれた場合、前記不揮発性メモリに格納されている前記コールドデータを無効化し、
前記第１論理アドレス範囲に対応する前記コールドデータが前記第２電子機器に格納されていることを、前記ホストに通知可能であるように構成される請求項１記載の電子機器。
【請求項１２】
メモリと、
前記メモリに格納されたプログラムを実行するように構成されたプロセッサとを具備し、
前記プロセッサは、
複数のブロックを含む不揮発性メモリを備えるストレージデバイスから、前記不揮発性メモリに格納されているコールドデータに対応する第１論理アドレス範囲と、前記コールドデータを含むコールドブロックをデータを書き込み可能なブロックにするための処理量とを示す情報を受信し、
前記第１論理アドレス範囲を指定したリードコマンドを前記ストレージデバイスに発行し、前記ストレージデバイスから前記コールドデータを受信し、
前記第１論理アドレス範囲を指定した、前記受信したコールドデータを書き込むためのライトコマンドを、前記ストレージデバイスに発行するように構成される電子機器。
【請求項１３】
前記プロセッサは、
前記処理量と、前記ストレージデバイスに対するアクセス頻度と、前記電子機器のリソースがビジー状態である時間と、前記プロセッサによって実行中であるプロセスの量の少なくともいずれかに基づいて、前記コールドブロックを、データを書き込み可能なブロックにするための処理を実行すべきタイミングであるか否かを判定し、
前記コールドブロックを、データを書き込み可能なブロックにするための処理を実行すべきタイミングであると判定された場合に、
前記第１論理アドレス範囲を指定したリードコマンドを前記ストレージデバイスに発行し、前記ストレージデバイスから前記コールドデータを受信し、
前記第１論理アドレス範囲を指定した、前記受信したコールドデータを書き込むためのライトコマンドを前記ストレージデバイスに発行するように構成される請求項１２記載の電子機器。
【請求項１４】
前記第１論理アドレス範囲は、前記第１論理アドレス範囲の先頭の論理アドレスと、前記第１論理アドレス範囲に含まれる論理ブロックの数とによって示される請求項１２記載の電子機器。
【請求項１５】
ストレージデバイスとホストとを含むコンピュータシステムであって、
前記ストレージデバイスは、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続されたコントローラとを具備し、
前記ホストは、
メモリと、
前記メモリに格納されたプログラムを実行するように構成されたプロセッサとを具備し、
前記コントローラは、
前記不揮発性メモリに格納されているコールドデータに対応する第１論理アドレス範囲と、前記コールドデータを含むコールドブロックをデータを書き込み可能なブロックにするための処理量とを示す情報を前記ホストに送信し、
前記ホストから受信される前記第１論理アドレス範囲を指定したリードコマンドに応じて、前記不揮発性メモリから前記コールドデータを読み出して前記ホストに送信し、
前記ホストから、前記第１論理アドレス範囲を指定したライトコマンドに応じて受信される前記コールドデータを、前記不揮発性メモリに書き込むように構成され、
前記プロセッサは、
前記情報を受信し、
前記第１論理アドレス範囲を指定したリードコマンドを前記ストレージデバイスに発行し、前記ストレージデバイスから前記コールドデータを受信し、
前記第１論理アドレス範囲を指定した、前記受信したコールドデータを書き込むためのライトコマンドを前記ストレージデバイスに発行するように構成されるコンピュータシステム。
【請求項１６】
前記プロセッサは、
前記処理量と、前記ストレージデバイスに対するアクセス頻度と、前記ホストのリソースがビジー状態である時間と、前記プロセッサによって実行中であるプロセスの量の少なくともいずれかに基づいて、前記コールドブロックを、データを書き込み可能なブロックにするための処理を実行すべきタイミングであるか否かを判定し、
前記コールドブロックを、データを書き込み可能なブロックにするための処理を実行すべきタイミングであると判定された場合に、
前記第１論理アドレス範囲を指定したリードコマンドを前記ストレージデバイスに発行し、前記ストレージデバイスから前記コールドデータを受信し、
前記第１論理アドレス範囲を指定した、前記受信したコールドデータを書き込むためのライトコマンドを前記ストレージデバイスに発行するように構成される請求項１５記載のコンピュータシステム。
【請求項１７】
前記第１論理アドレス範囲は、前記第１論理アドレス範囲の先頭の論理アドレスと、前記第１論理アドレス範囲に含まれる論理ブロックの数とによって示される請求項１５記載のコンピュータシステム。
【請求項１８】
複数のブロックを含む不揮発性メモリを備える電子機器の制御方法であって、
前記不揮発性メモリに格納されているコールドデータに対応する論理アドレス範囲を示す情報と、前記コールドデータを含むコールドブロックをデータを書き込み可能なブロックにするための処理量を示す情報とをホストに送信し、
前記ホストから受信される前記論理アドレス範囲を指定したリードコマンドに応じて、前記不揮発性メモリから前記コールドデータを読み出して前記ホストに送信し、
前記ホストから、前記論理アドレス範囲を指定したライトコマンドに応じて受信される前記コールドデータを、前記不揮発性メモリに書き込む制御方法。
【請求項１９】
複数のブロックを含む不揮発性メモリを備えるストレージデバイスから、前記不揮発性メモリに格納されているコールドデータに対応する論理アドレス範囲を示す情報と、前記コールドデータを含むコールドブロックをデータを書き込み可能なブロックにするための処理量を示す情報とを受信し、
前記論理アドレス範囲を指定したリードコマンドを前記ストレージデバイスに発行し、
前記ストレージデバイスから前記コールドデータを受信し、
前記論理アドレス範囲を指定した、前記受信したコールドデータを書き込むためのライトコマンドを前記ストレージデバイスに発行する制御方法。
【請求項２０】
複数のブロックを含む不揮発性メモリを備えるストレージデバイスと、ホストとを含むコンピュータシステムの制御方法であって、
前記不揮発性メモリに格納されているコールドデータに対応する論理アドレス範囲と、前記コールドデータを含むコールドブロックをデータを書き込み可能なブロックにするための処理量とを示す情報を前記ストレージデバイスから前記ホストに送信し、
前記論理アドレス範囲を指定したリードコマンドを前記ホストから前記ストレージデバイスに送信し、
前記リードコマンドに応じて前記不揮発性メモリから読み出された前記コールドデータを前記ホストに送信し、
前記論理アドレス範囲を指定したライトコマンドを前記ホストから前記ストレージデバイスに送信し、
前記ライトコマンドに応じて受信される前記コールドデータを、前記不揮発性メモリに書き込む、制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを備える電子機器、コンピュータシステム、およびその制御方法に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるストレージが広く普及している。
【０００３】
このようなストレージの一つとして、ＮＡＮＤ型フラッシュメモリを備えるソリッドステートドライブ（ＳＳＤ）が知られている。ＳＳＤは、様々なコンピューティングデバイスのメインストレージとして使用されている。
【０００４】
ＳＳＤでは、ガベージコレクション（ＧＣ）動作により、ガベージコレクションソースブロック（ＧＣソースブロック）内の有効データがガベージコレクションデスティネーションブロック（ＧＣデスティネーションブロック）に移動され、フリーブロックが生成される。各フリーブロックは、イレーズ処理を経ることで新たな書き込み先ブロックとして使用することができる。
【０００５】
ＧＣソースブロックには、例えば、有効データ量が少ないブロックが選択される。このようなＧＣソースブロックの選択により、より多くのフリーブロックを効率的に生成することができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許出願公開第２０１８／００３２２７５号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００７】
一方、有効データ量が多いブロックはＧＣソースブロックとして選択されにくいので、このブロック内の無効データの領域に相当する余剰容量（オーバープロビジョニング：ＯＰ）は、データの書き込みに利用できないままとなる。そして、有効データ量が多いブロックが多数存在する場合には、このような無効データの領域が大量に存在することになる。
【０００８】
本発明が解決しようとする課題は、ホストからのアクセスへの影響を軽減しながら、コールドブロック内の余剰容量を回収できる電子機器、コンピュータシステム、および制御方法を提供することである。
【課題を解決するための手段】
【０００９】
実施形態によれば、電子機器は、インタフェースを介してホストと接続可能な電子機器であって、複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続されたコントローラとを具備する。前記コントローラは、前記電子機器が前記ホストと接続された場合に、前記不揮発性メモリに格納されているコールドデータに対応する第１論理アドレス範囲と、前記コールドデータを含むコールドブロックをデータを書き込み可能なブロックにするための処理量とを示す情報を前記ホストに送信可能であり、前記ホストから受信可能である前記第１論理アドレス範囲を指定したリードコマンドに応じて、前記不揮発性メモリから前記コールドデータを読み出して前記ホストに送信可能であり、前記ホストから、前記第１論理アドレス範囲を指定したライトコマンドに応じて受信可能である前記コールドデータを、前記不揮発性メモリに書き込む。
【図面の簡単な説明】
【００１０】
【図１】第１実施形態に係るコンピュータシステムの構成例を示すブロック図。
【図２】第１実施形態のコンピュータシステムによって回収されるコールドブロック内の余剰容量（ＯＰ）を説明するための図。
【図３】通常のガベージコレクション（ＧＣ）と書き込み時期を考慮したＧＣとを説明するための図。
【図４】通常のＧＣが行われる場合に消費されるＮＡＮＤアクセスのバンド幅と、コールドブロックをＧＣソースブロックとするＧＣがさらに行われる場合に消費されるＮＡＮＤアクセスのバンド幅とを説明するための図。
【図５】第１実施形態に係るコンピュータシステムにおける、コールドブロック内のＯＰを回収するための動作の例を説明するための図。
【図６】第１実施形態に係るコンピュータシステムにおける、コールドブロック内のＯＰを回収するための構成の例を示すブロック図。
【図７】第１実施形態に係るコンピュータシステムで用いられるブロック管理情報の一構成例を示す図。
【図８】第１実施形態に係るコンピュータシステムで用いられるコールドブロック情報の一構成例を示す図。
【図９】第１実施形態に係るコンピュータシステムにおいて、コールドブロック内のＯＰの回収を要求するために用いられるコマンドのフォーマットの例を示す図。
【図１０】第１実施形態に係るコンピュータシステム内のソリッドステートドライブ（ＳＳＤ）によって実行されるコールドブロック管理処理の手順の例を示すフローチャート。
【図１１】図１０のＳＳＤによって実行されるＯＰ回収制御処理の手順の例を示すフローチャート。
【図１２】第１実施形態に係るコンピュータシステム内のホストによって実行されるコールドブロック制御処理の手順の例を示すフローチャート。
【図１３】第２実施形態に係るコンピュータシステム内のＳＳＤによって実行されるコールドブロック管理処理の手順の例を示すフローチャート。
【図１４】第２実施形態に係るコンピュータシステム内のホストによって実行されるコールドブロック制御処理の手順の例を示すフローチャート。
【図１５】第３実施形態に係るコンピュータシステムにおける、コールドブロック内のＯＰを回収するための動作の例を説明するための図。
【図１６】第３実施形態に係るコンピュータシステムで用いられるコールドデータのリストのフォーマットの例を示す図。
【図１７】第３実施形態に係るコンピュータシステムにおいて、ホストからＳＳＤに発行されるライトコマンドに含まれるアクセス頻度属性のフォーマットの例を示す図。
【図１８】第３実施形態に係るコンピュータシステム内のＳＳＤによって実行されるコールドブロック管理処理の手順の例を示すフローチャート。
【図１９】第３実施形態に係るコンピュータシステム内のホストによって実行されるコールドブロック制御処理の手順の例を示すフローチャート。
【図２０】第４実施形態に係るコンピュータシステムによってコールドブロック内のＯＰが回収される場合に、コールドデータのＬＢＡ範囲の周辺のＬＢＡのデータも移動される例を説明するための図。
【図２１】第４実施形態に係るコンピュータシステムで用いられるコールドデータのリストに示されるＬＢＡ範囲に、周辺のＬＢＡ（ＬＢＡ範囲）も含める例を示す図。
【図２２】第４実施形態に係るコンピュータシステム内のホストによって実行されるコールドブロック制御処理の手順の例を示すフローチャート。
【図２３】第５実施形態に係るコンピュータシステムにおける、コールドブロック内のＯＰを回収するための動作の例を説明するための図。
【図２４】第５実施形態に係るコンピュータシステムで用いられる管理テーブルの一構成例を示す図。
【図２５】第５実施形態に係るコンピュータシステム内のホストによって実行されるコールドブロック制御処理の手順の例を示すフローチャート。
【図２６】第６実施形態に係るコンピュータシステムにおける、コールドブロック内のＯＰを回収するための動作の例を説明するための図。
【図２７】第７実施形態に係るコンピュータシステムにおける、コールドブロック内のＯＰを回収するための動作の例を説明するための図。
【図２８】第７実施形態に係るコンピュータシステム内のＳＳＤによって実行されるＯＰ回収制御処理の手順の例を示すフローチャート。
【図２９】第７実施形態に係るコンピュータシステム内のホストによって実行されるコールドブロック制御処理の手順の例を示すフローチャート。
【図３０】ホストの構成例を示すブロック図。
【発明を実施するための形態】
【００１１】
以下、実施の形態について図面を参照して説明する。
（第１実施形態）  
まず、図１を参照して、実施形態に係るコンピュータシステム１の構成を説明する。
【００１２】
コンピュータシステム１は、ホスト（ホストデバイス）２と、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスとを含む。
【００１３】
ホスト２は、半導体ストレージデバイスにアクセスする情報処理装置（コンピューティングデバイス）である。ホスト２は、大量且つ多様なデータを半導体ストレージデバイスに保存するサーバ（ストレージサーバ）であってもよいし、パーソナルコンピュータであってもよい。半導体ストレージデバイスは、例えば、ＮＡＮＤ型フラッシュメモリを備えたソリッドステートドライブ（ＳＳＤ）３として実現されている。
【００１４】
ＳＳＤ３は、ホスト２として機能する情報処理装置のメインストレージとして使用され得る。ＳＳＤ３は、この情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。ＳＳＤ３は、例えば、ダイレクト・アタッチド・ストレージ（ＤＡＳ）としてホスト２に接続されている。
【００１５】
ホスト２とＳＳＤ３とを相互接続するためのインタフェースとしては、ＳＣＳＩ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、ＡＴＡ、Ｓｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）（登録商標）、Ｅｔｈｅｒｎｅｔ（登録商標）、Ｆｉｂｒｅ  ｃｈａｎｎｅｌ、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）等が使用され得る。
【００１６】
ＳＳＤ３は、コントローラ４およびＮＡＮＤ型フラッシュメモリ５を備える。コントローラ４は、Ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ（ＳｏＣ）のような回路によって実現され得る。ＳＳＤ３は、揮発性メモリであるランダムアクセスメモリ、例えば、ＤＲＡＭ６を備えていてもよい。あるいは、ＳＲＡＭのようなランダムアクセスメモリがコントローラ４に内蔵されていてもよい。
【００１７】
ＤＲＡＭ６等のランダムアクセスメモリには、例えば、ＮＡＮＤ型フラッシュメモリ５から読み出されたデータを一時的に格納するためのバッファ領域であるリードバッファ（ＲＢ）３１と、ＮＡＮＤ型フラッシュメモリ５に書き込まれるデータを一時的に格納するためのバッファ領域であるライトバッファ（ＷＢ）３２およびＧＣバッファ３３と、アドレス変換テーブル（論理物理アドレス変換テーブル）として機能するルックアップテーブル（ＬＵＴ）３４のキャッシュ領域とが設けられている。さらに、ＤＲＡＭ６等のランダムアクセスメモリには、処理中に用いられる各種の情報（例えば、ブロック管理情報３５、コールドブロック情報３６等）の格納領域が設けられてもよい。なお、ＤＲＡＭ６は、コントローラ４の内部に設けられていてもよい。ＬＵＴ３４は、論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間のマッピングを管理する。
【００１８】
ＮＡＮＤ型フラッシュメモリ５は、複数のＮＡＮＤ型フラッシュメモリチップ（複数のＮＡＮＤ型フラッシュメモリダイ）を含んでいてもよい。各チップは、メモリセル当たりに複数ビットを格納可能に構成されたフラッシュメモリとして実現されている。
【００１９】
コントローラ４は、Ｔｏｇｇｌｅ  ＤＤＲ、Ｏｐｅｎ  ＮＡＮＤ  Ｆｌａｓｈ  Ｉｎｔｅｒｆａｃｅ（ＯＮＦＩ）のようなＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５に電気的に接続されている。ＮＡＮＤインタフェース１３は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたＮＡＮＤ制御回路として機能する。ＮＡＮＤインタフェース１３は、複数のチャンネルを介して、ＮＡＮＤ型フラッシュメモリ５内の複数のチップにそれぞれ接続されていてもよい。
【００２０】
コントローラ４は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリコントローラとして機能する。
【００２１】
コントローラ４は、ＮＡＮＤ型フラッシュメモリ５のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層（ＦＴＬ）として機能してもよい。このＦＴＬによって実行されるデータ管理には、（１）論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、（２）ページ単位のリード／ライトとブロック単位の消去動作とを隠蔽するための処理、等が含まれる。論理アドレスは、ＳＳＤ３をアドレス指定するためにホスト２によって使用されるアドレスである。この論理アドレスとしては、例えば、論理ブロックアドレス（ＬＢＡ）が使用される。
【００２２】
論理ブロックアドレス（ＬＢＡ）それぞれと物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル（論理物理アドレス変換テーブル）として機能するルックアップテーブル（ＬＵＴ）３４を用いて実行される。コントローラ４は、ＬＵＴ３４を使用して、ＬＢＡそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。あるＬＢＡに対応する物理アドレスは、このＬＢＡのデータがライトされたＮＡＮＤ型フラッシュメモリ５内の物理記憶位置を示す。ＬＵＴ３４は、ＳＳＤ３の電源オン時にＮＡＮＤ型フラッシュメモリ５からＤＲＡＭ６にロードされてもよい。
【００２３】
１つのページへのデータ書き込みは、１つのＰ／Ｅサイクル当たり１回のみ可能である。このため、コントローラ４は、あるＬＢＡに対応する更新データを、このＬＢＡに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ４は、ＬＵＴ３４を更新してこのＬＢＡをこの別の物理記憶位置に関連付けると共に、以前のデータを無効化する。以下では、ＬＵＴ３４から参照されているデータ（すなわち論理アドレスと紐付けられているデータ）を有効データと称する。また、どの論理アドレスとも紐付けられていないデータを無効データと称する。有効データは、後にホスト２からリードされる可能性があるデータである。無効データは、もはやホスト２からリードされる可能性が無いデータである。
【００２４】
ブロック管理には、バッドブロックの管理、ウェアレベリング、ガベージコレクション（ＧＣ）、等が含まれる。
【００２５】
上述したように、ＮＡＮＤ型フラッシュメモリ５では、データのライト／リードがページ単位で行われ、イレーズがブロック単位で行われる。ブロックのイレーズには長い時間を要するが、ＮＡＮＤ型フラッシュメモリ５内の各ブロックは、イレーズが行われるまで、同じ物理記憶位置にデータを上書きすることができないという特性を有する。
【００２６】
そのため、ＳＳＤ３は、ホスト２から受信した書き込みデータを、ＮＡＮＤ型フラッシュメモリ５上の新たな物理記憶位置に追記する書き込み方式により動作する。このような追記を進めた場合、データの書き込み先ブロックが枯渇するので、フリーブロックを生成するためのＧＣが行われる。
【００２７】
ＧＣでは、既に書き込み済みのブロック（アクティブブロック）からＧＣソースブロックを選択し、ＧＣソースブロックから有効データを集め、それを新しいブロック（ＧＣデスティネーションブロック）に書き込み、有効データが元々格納されていたブロックをフリーブロックとする。フリーブロックは、イレーズ処理を経ることにより、新たな書き込み先ブロックとして利用することができる。ＧＣソースブロックには、有効データ数が少ないブロックが選択されることが多い。これは、フリーブロックの生成効率が良いためである。
【００２８】
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４等を含んでもよい。これらホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４は、バス１０を介して相互接続されていてもよい。
【００２９】
ホストインタフェース１１は、ホスト２から様々なコマンド、例えば、Ｉ／Ｏコマンド、各種制御コマンド、等を受信する回路として機能する。Ｉ／Ｏコマンドには、ライトコマンド、リードコマンド、アンマップコマンド（トリムコマンド）、フォーマットコマンド、フラッシュコマンド等が含まれ得る。フォーマットコマンドは、メモリシステム（ＳＳＤ３）全体をアンマップするためのコマンドである。フラッシュコマンドは、メモリシステム内にキャッシュされている（バッファされている）ダーティデータ（ユーザデータおよび関連する管理データ）をＮＡＮＤ型フラッシュメモリ５に書き込むことですべてクリーンな状態にするためのコマンドである。
【００３０】
ＤＲＡＭインタフェース１４は、ＤＲＡＭ６のアクセスを制御するように構成されたＤＲＡＭコントローラとして機能する。ＤＲＡＭ６の記憶領域は、リードバッファ（ＲＢ）３１、ライトバッファ（ＷＢ）３２、ＧＣバッファ３３、ＬＵＴ３４、ブロック管理情報３５、コールドブロック情報３６等を格納するために利用される。
【００３１】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、およびＤＲＡＭインタフェース１４を制御するように構成されたプロセッサである。ＣＰＵ１２は、図示しないＲＯＭ等に格納されている制御プログラム（ファームウェア）を実行することによって様々な処理を行う。このＣＰＵ１２は、上述のＦＴＬの処理に加え、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行することができる。ＣＰＵ１２の動作は、ＣＰＵ１２によって実行される上述のファームウェアによって制御される。なお、ＦＴＬ処理およびコマンド処理の一部または全部は、コントローラ４内の専用ハードウェアによって実行されてもよい。
【００３２】
また、コンピュータシステム１は、ＳＳＤ３のコールドブロック内の余剰容量（オーバープロビジョニング：ＯＰ）を回収するための機能を有する。コールドブロックは、当該ブロック内のデータの大半がコールドデータによって構成されるブロックである。コールドデータは、アクセス頻度が低いＬＢＡ範囲のデータを指す。コールドブロックには、基本的に有効なデータが多数含まれるが、無効となったデータも含まれる。無効となったデータは、コールドブロック内のＯＰとなる。
【００３３】
本実施形態では、ＳＳＤ３がコールドデータおよびコールドブロックに関する情報を管理し、インタフェースを介してＳＳＤ３からホスト２にこの情報を通知することにより、ＳＳＤ３とホスト２とが協調してコールドデータを扱う方式を実現する。これにより、ＳＳＤ３は、ホスト２と協調して、コールドブロック内のＯＰを回収することができる。
【００３４】
図２を参照して、コンピュータシステム１によって回収されるコールドブロック内のＯＰについて説明する。
【００３５】
ＮＡＮＤ型フラッシュメモリ５の全体の物理容量（実装容量）２０は、表記容量（キャパシティ：ＣＡＰ）２１１と余剰容量（ＯＰ）２１２とから構成される。余剰容量２１２は、物理容量２０と表記容量２１１との差である。表記容量２１１に対する余剰容量２１２の比率は余裕率と称される。一般に、余裕率が高い方が、ＮＡＮＤ型フラッシュメモリ５全体での有効データ量が少なくなることから、ＧＣにおけるフリーブロックの生成効率が上がり、ライト・アンプリフィケーション・ファクタ（ＷＡＦ）が低下する。そのため、ＯＰの確保は重要である。
【００３６】
ユーザのワークロードには、アクセス範囲に局所性が無い場合と、アクセス範囲に局所性が有る場合とが想定される。アクセス範囲に局所性が無いワークロードは、例えば、時系列的に近接するアクセス（複数のコマンド）において、アクセス対象の論理アドレスが広い論理アドレス空間に亘っており、狭い論理アドレス空間内におさまっていないアクセスパターンに相当する。また、アクセス範囲に局所性が有るワークロードは、例えば、時系列的に近接するアクセスにおいて、アクセス対象の論理アドレスが狭い論理アドレス空間内におさまっているアクセスパターンに相当する。
【００３７】
ユーザのワークロードによるアクセス範囲に局所性が無い場合、表記容量２１１と余剰容量２１２とはいずれも実質的に有効な容量となる。
【００３８】
一方、ユーザのワークロードによるアクセス範囲に局所性が有る場合、ＮＡＮＤ型フラッシュメモリ５内にコールドブロック２２が増加し、またそれらコールドブロック２２内で無効データが占めている記憶領域、すなわち、余剰容量（ＯＰ）２２４が増加することがある。
【００３９】
コールドブロック２２は、例えば、有効データであるコールドデータ２２３と、余剰容量２２４に対応する無効データとを含む。対応する論理アドレスへのアクセス頻度が低いＳＳＤ３内のデータ（例えば、アクセス頻度が第１閾値未満である論理アドレスのデータ）をコールドデータ２２３と称する。また、ブロック内のデータの大半がコールドデータで構成されているブロックをコールドブロック２２と称する。例えば、コールドデータのデータ量が第２閾値を超えているブロックや、ブロック内の全データに対するコールドデータの割合が特定の割合を超えているブロックが、コールドブロック２２である。
【００４０】
コールドブロック２２はデータの新たな書き込みに使用されないので、このコールドブロック２２を除いた、有効データであるホットデータ２２１が格納されている容量と余剰容量（ＯＰ）２２２とが実質的に有効な容量となる。ホットデータ２２１は、対応する論理アドレスへのアクセス頻度が高いＳＳＤ３内のデータ（例えば、アクセス頻度が第１閾値以上であるデータ）である。
【００４１】
このようなコールドブロック２２内の余剰容量（ＯＰ）２２４を回収するためには、例えば、コールドブロック２２をＧＣソースブロックとするＧＣ動作を行うことが考えられる。このＧＣ動作により、コールドブロック２２内に含まれていた余剰容量２２４が回収されるので、回収された余剰容量２２４を加えた余剰容量２２５と、ホットデータが格納されている容量２２１とを実質的に有効な容量として利用することができる。
【００４２】
図３を参照して、通常のＧＣ動作とコールドブロックをＧＣソースブロックとするＧＣ動作とについて説明する。ここでは、書き込み時期が新しいものから順にブロック２５１，２５２，２５３，２５４がある場合について例示する。各ブロックは、有効データで構成される有効クラスタ２５Ａと、無効データで構成される無効クラスタ２５Ｂの少なくとも一方で構成される。
【００４３】
図３（Ａ）は、通常のＧＣ動作におけるＧＣソースブロックを示す。通常のＧＣ動作では、有効データ量が少ないブロック２５１，２５２がＧＣソースブロックとして選択される。各ブロックの有効データ量は、例えば、有効クラスタの数、ブロック内のクラスタの総数に対する有効クラスタの数の割合、有効クラスタに相当するバイトのような単位で表され得る。
【００４４】
通常のＧＣ動作では、有効データ量が多いブロック２５３，２５４は、ＧＣソースブロックとして選択されないまま残る。つまり、アクセス頻度が低いコールドデータを含むコールドブロック２５３，２５４は、少量の無効データ（無効クラスタ）を含んでいたとしても、ＧＣ対象とならないまま残る。そのため、ブロック２５３，２５４に含まれる無効データ分の容量（ＯＰ）は、通常のＧＣ動作では回収することができない。
【００４５】
図３（Ｂ）は、書き込み時期を考慮したＧＣ動作におけるＧＣソースブロックを示す。書き込み時期を考慮したＧＣ動作では、有効データ量が少ないブロック２５１，２５２だけでなく、書き込み時期が古いブロック２５４（例えば、特定の日時よりも前に書き込まれた有効データを含むブロック）もＧＣソースブロックとして選択される。つまり、書き込み時期が古いブロック２５４は、有効データ量（有効クラスタ）が多い場合にもＧＣソースブロックとして選択される。したがって、書き込み時期を考慮したＧＣ動作では、書き込み時期が古く、有効データ量が多いコールドブロック２５４に含まれる無効データ分の容量（ＯＰ）も回収することができる。
【００４６】
しかし、有効データ量が多いコールドブロック２５４をＧＣソースブロックとしたＧＣ動作では、コールドブロック２５４内の多数の有効データをＧＣデスティネーションブロックにコピー（移動）するので、ＮＡＮＤ型フラッシュメモリ５に対するアクセスのバンド幅が大量に消費される。
【００４７】
図４を参照して、ＮＡＮＤ型フラッシュメモリ５に対するアクセスのバンド幅について説明する。ＮＡＮＤ型フラッシュメモリ５には複数のメモリチップＭＣ０〜ＭＣ３が含まれる。コントローラ４は、複数のチャネルを介して、複数のメモリチップＭＣ０〜ＭＣ３にそれぞれアクセスする。各メモリチップＭＣ０〜ＭＣ３へのアクセスのためのバンド幅は限られており、その限られたバンド幅が全て消費されているならば、メモリチップＭＣ０〜ＭＣ３にアクセスすることはできない。そのため、バンド幅に空きができるまでメモリチップＭＣ０〜ＭＣ３へのアクセスを待つことによるレイテンシが発生することがある。
【００４８】
図４（Ａ）は、ホスト２によって発行されたライトコマンドに応じた動作（ホストライト動作）と、通常のＧＣ動作とが行われる場合を示す。ホストライト動作では、ホストＩ／Ｆ１１とＦＴＬ１２０とを介して、ライトコマンドに応じて受信されるユーザデータをメモリチップＭＣ０〜ＭＣ３に書き込むために、メモリチップＭＣ０〜ＭＣ３へのアクセスのバンド幅が消費される。また、ＦＴＬ１２０内のＧＣ制御部１２６による通常のＧＣ動作に応じて、ＧＣソースブロックからＧＣデスティネーションブロック２６１にデータを移動するために、メモリチップＭＣ０〜ＭＣ３へのアクセスのバンド幅が消費される。したがって、図４（Ａ）に示す例では、ホストライト動作と通常のＧＣ動作とによって、メモリチップＭＣ０〜ＭＣ３へのアクセスのバンド幅が消費される。
【００４９】
次いで、図４（Ｂ）は、ホストライト動作および通常のＧＣ動作に加えて、コールドブロックをＧＣソースブロックとするコールドブロックＧＣ動作がさらに行われる場合を示す。この場合、ＦＴＬ１２０内のコールドブロックＧＣ制御部１２７によるコールドブロックＧＣ動作に応じて、コールドブロックであるＧＣソースブロックから、コールドブロックのＧＣデスティネーションブロック２６２にデータを移動するために、メモリチップＭＣ０〜ＭＣ３へのアクセスのバンド幅がさらに消費される。したがって、図４（Ｂ）に示す例では、ホストライト動作と通常のＧＣ動作とコールドブロックのＧＣ動作とによって、メモリチップＭＣ０〜ＭＣ３へのアクセスのバンド幅が消費される。
【００５０】
コールドブロックには、大量の有効データが格納されているので、その有効データをＧＣデスティネーションブロック２６２にコピーするために、メモリチップＭＣ０〜ＭＣ３へのアクセスのバンド幅が大量に消費される。ホスト２がＳＳＤ３にアクセス要求を送出したときに、ＳＳＤ３内のコールドブロックＧＣ動作によってメモリチップＭＣ０〜ＭＣ３に対するアクセスのバンド幅が消費されているならば、ホスト２側からはアクセスに対するレイテンシの発生と解釈されることになる。レイテンシの変動は、ＳＳＤ３の品質を評価する重要な要素であり、コールドブロック内のＯＰを回収するための動作に起因するものであったとしても、許容することは難しい。
【００５１】
また、ＮＡＮＤ型フラッシュメモリ５に対するアクセスのバンド幅に影響を与えない速度で、例えば、非常に長い時間をかけて、コールドブロック内のＯＰを回収するＧＣ動作を行うことも考えられる。しかし、ＧＣ動作に長い時間をかけることは、コールドブロック内のＯＰの回収が完了するまでの時間を長引かせることになり望ましくない。
【００５２】
さらに、コールドブロック内のＯＰを回収せずに放置するという判断も考えられるが、局所性を有するアクセスパターンでは、コールドブロックが大量に発生する可能性もある。したがって、各々に含まれるＯＰが少量であったとしても、大量のコールドブロック内のＯＰを回収せずに放置することは望ましくない。
【００５３】
このようなことから、ホスト２からのアクセスへの影響を軽減しながら、コールドブロック内のＯＰを回収できる新たな機能の実現が必要とされる。本実施形態では、この機能を実現するために、ホスト２とＳＳＤ３とが協調して動作する。
【００５４】
以下では、上記機能に関する構成についてより具体的に説明する。
【００５５】
図１に戻り、ＳＳＤ３に設けられるコントローラ４内のＣＰＵ１２は、コールドブロック制御インタフェース（Ｉ／Ｆ）部１２１、ブロック管理部１２２、コールドブロック制御部１２３、リード制御部１２４、ライト制御部１２５、ＧＣ制御部１２６、およびコールドブロックＧＣ制御部１２７として機能することができる。
【００５６】
コールドブロック制御Ｉ／Ｆ部１２１は、ＳＳＤ３内のコールドブロックの制御のためにホスト２と通信するインタフェース機能を有する。
【００５７】
ブロック管理部１２２は、ＳＳＤ３内のブロック毎に、イレーズ回数（プログラム／イレーズサイクル数）、イレーズ順序番号、有効データ数（有効データ量）等を含むブロック管理情報３５を管理する。ブロック管理部１２２は、例えば、各ブロックに対する書き込み動作、トリム（アンマップ）動作、イレーズ動作等を監視し、このような動作が行われる毎に、ブロック管理情報３５を更新する。
【００５８】
コールドブロック制御部１２３は、ブロック管理情報３５を用いて、ＮＡＮＤ型フラッシュメモリ５内の複数のブロックＢ０〜Ｂｍ−１から、コールドブロックを選択する。そして、コールドブロック制御部１２３は、例えば、ホスト２による問い合わせに応じて、選択されたコールドブロックに関するコールドブロック情報３６を生成する。コールドブロック情報３６は、コールドブロックから回収可能なＯＰ量、コールドブロックをデータを書き込み可能なブロック（フリーブロック）にするための処理時間または処理量、等を含む。
【００５９】
リード制御部１２４は、リードコマンドに指定された論理アドレス（ＬＢＡ）に対応するＬＵＴ３４のエントリに基づいて、ＬＢＡに対応する物理アドレスを求め、ＮＡＮＤ型フラッシュメモリ５からリードコマンドに応じたデータを読み出す。
【００６０】
ライト制御部１２５は、ライトコマンドに応じてホスト２から受信されたユーザデータを、ＤＲＡＭ６上のライトバッファ３２に蓄積する。ライト制御部１２５は、ユーザデータを蓄積するためのライトバッファ３２の領域を予め確保しておき、確保できない間は、ホスト２からライトコマンドを受け付けないようにする。
【００６１】
そして、ライト制御部１２５は、ライトバッファ３２内にＮＡＮＤ型フラッシュメモリ５の書き込み単位分のユーザデータが蓄積されたならば、ＮＡＮＤ型フラッシュメモリ５のチップ（チップのデータラッチ）にその書き込み単位分のユーザデータを転送する。ライト制御部１２５は、ライトバッファ３２内の、転送されたユーザデータが蓄積されていた領域を解放する。
【００６２】
次いで、ライト制御部１２５は、ＮＡＮＤ型フラッシュメモリ５のチップにプログラムを指示する。すなわち、ライト制御部１２５は、ＮＡＮＤ型フラッシュメモリ５のチップにプログラムコマンドを送ることにより、当該チップに対して、転送されたユーザデータを書き込み先ブロックにプログラムさせる。チップ内のメモリセルアレイは複数のブロックを含んでいる。ブロックは、有効データを格納していて、新たにデータを書き込むことができないブロック（アクティブブロック）と、有効データを格納しておらず、イレーズ処理を経ることで新たなデータの書き込みに利用可能なブロック（フリーブロック）とに大別される。１つ以上のフリーブロックから、１個が選択され、イレーズ処理を経ることで、書き込み先ブロックとして割り当てられる。書き込み先ブロックは、有効データを格納し得る。
【００６３】
ＧＣ制御部１２６も、ＧＣバッファ３３を用いて、上述したようなライト制御部１２５による書き込み動作と同様にして、ＮＡＮＤ型フラッシュメモリ５への書き込みを行うことができる。ＧＣ制御部１２６は、有効データを格納しているアクティブブロック群からＧＣソースブロックを選択し、このＧＣソースブロック内の有効データを、フリーブロック群から書き込み先ブロックとして確保されたＧＣデスティネーションブロックに書き込む。
【００６４】
また、コールドブロックＧＣ制御部１２７も、ＧＣ制御部１２６と同様に、ＮＡＮＤ型フラッシュメモリ５への書き込みを行うことができる。コールドブロックＧＣ制御部１２７は、コールドブロックをＧＣソースブロックとして、このＧＣソースブロック内の有効データを、フリーブロック群から書き込み先ブロックとして確保されたＧＣデスティネーションブロックに書き込む。ＧＣ制御部１２７は、ＧＣバッファ３３とは別のバッファを用いて、ＧＣ動作を行ってもよい。
【００６５】
次に、ホスト２の構成について説明する。ホスト２は、ＤＡＳとして接続されているＳＳＤ３にアクセスするための機能を有する。また、ホスト２は、ネットワーク（クラウド）上のストレージにアクセスするための機能を有していてもよい。
【００６６】
ホスト２は、様々なプログラムを実行する情報処理装置である。情報処理装置によって実行されるプログラムには、アプリケーションレイヤ４１、オペレーティングシステム（ＯＳ）４２、ファイルシステム４３等が含まれる。
【００６７】
一般に知られているように、オペレーティングシステム（ＯＳ）４２は、ホスト２全体を管理し、ホスト２内のハードウェアを制御し、アプリケーションがハードウェアおよびＳＳＤ３を使用することを可能にするための制御を実行するように構成されたソフトウェアである。
【００６８】
ファイルシステム４３は、ファイルの操作（作成、保存、更新、削除等）のための制御を行うために使用される。例えば、ＺＦＳ、Ｂｔｒｆｓ、ＸＦＳ、ｅｘｔ４、ＮＴＦＳなどがファイルシステム４３として使用されてもよい。あるいは、ファイルオブジェクトシステム（例えば、Ｃｅｐｈ  Ｏｂｊｅｃｔ  Ｓｔｏｒａｇｅ  Ｄａｅｍｏｎ）、Ｋｅｙ  Ｖａｌｕｅ  Ｓｔｏｒｅ  Ｓｙｓｔｅｍ（例えば、Ｒｏｃｋｓ  ＤＢ）がファイルシステム４３として使用されてもよい。
【００６９】
様々なアプリケーションソフトウェアスレッドがアプリケーションレイヤ４１上で走る。アプリケーションソフトウェアスレッドの例としては、クライアントソフトウェア、データベースソフトウェア、仮想マシン等がある。
【００７０】
アプリケーションレイヤ４１がリードコマンドまたはライトコマンドのようなリクエストをＳＳＤ３に送出することが必要な時、アプリケーションレイヤ４１は、ＯＳ４２にそのリクエストを送出する。ＯＳ４２はそのリクエストをファイルシステム４３に送出する。ファイルシステム４３は、そのリクエストを、コマンド（リードコマンド、ライトコマンド等）にトランスレートする。ファイルシステム４３は、コマンドを、ＳＳＤ３に送出する。ＳＳＤ３からのレスポンスが受信された際、ファイルシステム４３は、そのレスポンスをＯＳ４２に送出する。ＯＳ４２は、そのレスポンスをアプリケーションレイヤ４１に送出する。
【００７１】
ファイルシステム４３は、コールドブロック制御Ｉ／Ｆ部４３１を含む。コールドブロック制御Ｉ／Ｆ部４３１は、ＳＳＤ３内のコールドブロックの制御のためにＳＳＤ３と通信するインタフェース機能を有する。コールドブロック制御Ｉ／Ｆ部４３１は、例えば、ＳＳＤ３にコールドブロックに関する情報を問い合わせる。また、コールドブロック制御Ｉ／Ｆ部４３１は、コールドブロックに関する情報を用いて、コールドブロック内のＯＰの回収を行うべきタイミングである場合に、コールドブロック内のＯＰの回収をＳＳＤ３に要求する。
【００７２】
また、ファイルシステム４３は、コールドデータ管理部４３２をさらに含んでいてもよい。コールドデータ管理部４３２は、あるＬＢＡ範囲のデータが、いずれのＳＳＤに格納されているかを管理する。
【００７３】
図５は、コンピュータシステム１におけるコールドブロック内のＯＰを回収するための動作の例を示す。ここでは、ＳＳＤ３は、ＤＡＳとして、１対１でホスト２に接続されている。
【００７４】
まず、ホスト２は、ＳＳＤ３にコールドブロック情報３６を問い合わせる。ＳＳＤ３は、この問い合わせに応じて、コールドブロック情報３６をホスト２に送信する。コールドブロック情報３６は、ＳＳＤ３のＮＡＮＤ型フラッシュメモリ５内のコールドブロックに関する情報を含む。より具体的には、コールドブロック情報３６は、コールドブロックから回収可能なＯＰ量、コールドブロックからＯＰを回収する動作（コールドブロックＧＣ動作）のみが行われた場合の推定される処理時間または処理量、等を含む。
【００７５】
ホスト２は、コールドブロック情報３６を用いて、ＳＳＤ３にコールドブロックＧＣの実行を要求するか否かを判定する。ホスト２は、例えば、ホスト２がアイドル状態である場合のように、コールドブロックＧＣが実行されたとしても、ホスト２からＳＳＤ３へのアクセスに対する影響が小さい場合に、ＳＳＤ３にコールドブロックＧＣの実行を要求する。ＳＳＤ３は、ホスト２による要求に応じて、ＮＡＮＤ型フラッシュメモリ５に対するコールドブロックＧＣの実行を開始する。
【００７６】
また、図６は、コールドブロック内のＯＰを回収するためのコンピュータシステム１内の構成を示す。ホスト２は、コールドブロック制御Ｉ／Ｆ部４３１を備えている。ＳＳＤ３は、コールドブロック制御Ｉ／Ｆ部１２１を備え、ＦＴＬ１２０にブロック管理部１２２、コールドブロック制御部１２３、およびコールドブロックＧＣ制御部１２７を備えている。以下では、各部によるコールドブロック内のＯＰを回収するための手順について説明する。
【００７７】
（１）ＳＳＤ３のブロック管理部１２２は、当該ＳＳＤ３内のブロック毎に、イレーズ回数（プログラム／イレーズサイクル数）、イレーズ順序番号、有効データ数（有効データ量）等のブロック管理情報３５を管理する。
【００７８】
図７は、ブロック管理部１２２によって生成および更新されるブロック管理情報３５の一構成例を示す。ブロック管理情報３５は、ＮＡＮＤ型フラッシュメモリ５内の複数のブロックＢ０〜Ｂｍ−１に対応する複数のレコードを含む。各レコードは、例えば、ブロック番号、イレーズ回数、イレーズ順序番号、および有効データ量を含む。
【００７９】
あるブロックに対応するレコードにおいて、「ブロック番号」は、そのブロックに割り当てられたブロック番号を示す。なお、ブロック番号の代わりに、そのブロックを識別するための任意の情報が用いられてもよい。
【００８０】
「イレーズ回数」は、そのブロックがイレーズされた回数（例えば、そのブロックにこれまでに施されたイレーズ処理の回数）を示す。したがって、そのブロックにイレーズ処理が施されたことに応じて、当該ブロックに対応するイレーズ回数が１だけ増加する。
【００８１】
「イレーズ順序番号」は、例えば、ある時点（例えば、ＳＳＤ３の使用開始時点）から、ＮＡＮＤ型フラッシュメモリ５内のいずれかのブロックにイレーズ処理が施される毎にカウントアップされる番号であり、そのイレーズ処理が施されたブロックに対応するレコードの「イレーズ処理番号」として設定される。
【００８２】
「有効データ量」は、対応するブロックに含まれる有効データの量を示す。各ブロックの有効データ量は、クラスタの数によって表現されてもよいし、パーセンテージによって表現されてよいし、あるいはバイトのような単位で表現されてもよい。
【００８３】
（２）ＳＳＤ３のコールドブロック制御部１２３は、ブロック管理情報３５を用いて、ＮＡＮＤ型フラッシュメモリ５内の複数のブロックＢ０〜Ｂｍ−１から、コールドブロックを選択し、コールドブロックのリストを生成する。生成されたリストには、例えば、コールドブロックとして選択された一つ以上のブロックに対応する一つ以上のブロック番号が含まれる。コールドブロックは、例えば、書き換え時期が古いブロックである。コールドブロック制御部１２３は、例えば、書き換えの日時が特定の日時よりも前であるブロックをコールドブロックであると判定する。
【００８４】
なお、コールドブロック制御部１２３は、ブロック毎のイレーズ順序番号を用いて、あるブロックがコールドブロックであるか否かを判定してもよい。上述したように、イレーズ順序番号は、例えば、ある時点（例えば、ＳＳＤ３の使用開始時点）から、ＮＡＮＤ型フラッシュメモリ５内のいずれかのブロックにイレーズ処理が施される毎にカウントアップされる番号である。イレーズ順序番号は、そのイレーズされたブロックに関連付けられる。コールドブロック制御部１２３は、イレーズ順序番号が特定の番号よりも小さいブロックをコールドブロックであると判定してもよい。また、コールドブロック制御部１２３は、最新のイレーズ順序番号（イレーズ順序番号の最大値）と注目するブロックのイレーズ順序番号とを比較して、その差が第３閾値を超えた場合に、当該ブロックをコールドブロックであると判定してもよい。
【００８５】
あるいは、コールドブロック制御部１２３は、イレーズ回数が第４閾値未満であるブロックをコールドブロックであると判定してもよい。イレーズ回数が少ないブロックが、ＧＣソースブロックとして選択されずに残っているということは、アクセス頻度が低いコールドデータを大量に含むコールドブロックであると云えるためである。
【００８６】
（３）ホスト２のコールドブロック制御Ｉ／Ｆ部４３１は、ＳＳＤ３にコールドブロック情報３６を問い合わせる。
【００８７】
（４）ＳＳＤ３のコールドブロック制御部１２３は、コールドブロック制御Ｉ／Ｆ部１２１を介して、ホスト２によるコールドブロック情報３６の問い合わせを受け付ける。コールドブロック制御部１２３は、この問い合わせに応じて、生成されているコールドブロックのリストに基づきコールドブロック情報３６を生成する。コールドブロック情報３６は、例えば、ＳＳＤ３でコールドブロック内のＯＰを回収するための処理のみが実行される場合（ホスト２から新たなＩ／Ｏコマンドが発行されない場合等）に、コールドブロック内の有効データ量から推定される、その開始から完了までの処理時間または処理量と、この処理の完了によって利用可能になるＯＰ量（すなわち、回収されるコールドブロック内のＯＰ量）とを含む。コールドブロック制御部１２３は、コールドブロック制御Ｉ／Ｆ部１２１を介して、ホスト２にコールドブロック情報３６を送信する。
【００８８】
図８は、コールドブロック制御部１２３によって生成されるコールドブロック情報３６の一構成例を示す。コールドブロック情報３６は、コールドブロックであると判別された一つ以上のブロックに対応する一つ以上のレコードを含む。各レコードは、例えば、ブロック番号、処理時間（または処理量）、およびＯＰ回収量を含む。
【００８９】
あるコールドブロックに対応するレコードにおいて、「ブロック番号」は、そのブロックに割り当てられたブロック番号を示す。「処理時間」は、そのブロックをＧＣソースブロックとするＧＣ動作に要すると推定される処理時間（または処理量）を示す。「ＯＰ回収量」は、そのブロックをＧＣソースブロックとするＧＣ動作によって回収される記憶容量を示す。
【００９０】
なお、「ブロック番号」の値のみが設定されたレコードを含むコールドブロック情報３６を、手順（２）のコールドブロックのリストとして用いてもよい。
【００９１】
（５）ホスト２のコールドブロック制御Ｉ／Ｆ部４３１は、ＳＳＤ３からコールドブロック情報３６を受信し、このコールドブロック情報３６を用いて、コールドブロック内のＯＰの回収を行うべきタイミングであるか否かを判定する。コールドブロック制御Ｉ／Ｆ部４３１は、コールドブロックをＧＣソースブロックとするＧＣ動作に要すると推定される処理量と、ＳＳＤ３に対するアクセス頻度と、ホスト２のリソースがビジー状態である時間と、ホスト２のプロセッサによって実行中であるプロセスの量の少なくともいずれかに基づいて、コールドブロック内のＯＰの回収を行うべきタイミングであるか否かを判定する。
【００９２】
より具体的には、コールドブロック制御Ｉ／Ｆ部４３１は、ホスト２上で同時に動作しているプロセス数や、各種のリソースがビジー状態である時間等の指標に基づいて、ＳＳＤ３へのアクセス頻度が低いとき、コールドブロック内のＯＰの回収を行うべきタイミングであると判定する。コールドブロック制御Ｉ／Ｆ部４３１は、例えば、プロセス数が第４閾値未満である場合、リソースがビジー状態である時間が第５閾値未満である場合等に、コールドブロック内のＯＰの回収を行うべきタイミングであると判定する。第４閾値および第５閾値は、例えば、コールドブロック情報３６を用いて、ＳＳＤ３でコールドブロック内のＯＰを回収するための処理のみが行われる場合の処理時間が長いほど、小さく設定されてもよい。また、第４閾値または第５閾値は、コールドブロック情報３６を用いて、ＳＳＤ３でコールドブロック内のＯＰを回収するための処理の完了によって利用可能になるＯＰ量が多いほど、大きく設定されてもよい。
【００９３】
（６）コールドブロック制御Ｉ／Ｆ部４３１は、コールドブロック内のＯＰの回収を行うべきタイミングであると判定された場合、コールドブロック内のＯＰを回収するリクエストをＳＳＤ３に発行する。
【００９４】
このリクエストを実現する方法の一例として、例えば、ＮＶＭｅ規格のデバイス・セルフ・テスト（Ｄｅｖｉｃｅ  ｓｅｌｆ−ｔｅｓｔ）を利用する方法がある。デバイス・セルフ・テストのコマンドは、ＮＶＭｅ  Ａｄｍｉｎコマンドに分類され、主に、デバイス自体のテストのために用いられる。デバイス・セルフ・テストの処理は、バックグラウンドで実行されることが要求される。そのため、別のコマンドを処理する必要がある場合、ＳＳＤ３のコントローラ４は、一旦、デバイス・セルフ・テストの処理を中断し、その別のコマンドを処理する。その別のコマンドの処理が完了した後、コントローラ４は、デバイス・セルフ・テストの処理を再開する。
【００９５】
図９は、デバイス・セルフ・テストに用いられるコマンドのフォーマットを示す。図９に示すように、コマンド内の［０３：００］ビットに対応するフィールドには、当該コマンドによって起きるアクションを特定するセルフテストコード（ＳＴＣ）が設定される。このフィールドに“１ｈ”または“２ｈ”が設定されたコマンドに応じて、関連付けられたセルフテストオペレーションが開始される。また、このフィールドに“Ｆｈ”が設定されたコマンドに応じて、実行中のデバイス・セルフ・テストが中断（ａｂｏｒｔ）される。
【００９６】
（７）ＳＳＤ３のコールドブロックＧＣ制御部１２７は、ホスト２からコールドブロック内のＯＰを回収するリクエストを受信したことに応じて、コールドブロック内のＯＰを回収する動作を行う。つまり、ＳＳＤ３では、通常の動作（ホストライト、ＧＣ等）に加えて、コールドブロック内のＯＰを回収する動作が行われる。
【００９７】
コールドブロックＧＣ制御部１２７は、例えば、手順（２）で生成されたリストに示される各コールドブロックをＧＣソースブロックとするＧＣ動作を行うことにより、コールドブロック内のＯＰを回収する。より具体的には、コールドブロックＧＣ制御部１２７は、ＧＣソースブロックであるコールドブロック内の有効データ（コールドデータ）を読み出し（ＧＣリード）、ＧＣバッファ３３に蓄積する。そして、ＧＣバッファ３３に書き込み単位分（ページ分）のデータが蓄積されたならば、そのデータをコールドブロックのＧＣデスティネーションブロックに書き込む（ＧＣライト）。
【００９８】
（８）コールドブロックＧＣ制御部１２７は、リストに示される全てのコールドブロック内のＯＰが回収された場合（すなわち、全てのコールドブロックをＧＣソースブロックとしたＧＣ処理が完了した場合）、その完了をホスト２に通知する。
【００９９】
なお、上記の手順（７）において、ホスト２のコールドブロック制御Ｉ／Ｆ部４３１は、ホスト２上のプロセス数やリソースの状況に応じて、コールドブロック内のＯＰを回収する処理を中断するリクエストをＳＳＤ３に発行することもできる。例えば、ＮＶＭｅのデバイス・セルフ・テストのコマンドが用いられる場合、コールドブロック制御Ｉ／Ｆ部４３１は、デバイス・セルフ・テストの中断（ａｂｏｒｔ）を指示するための値が設定されたコマンドを発行することにより、コールドブロック内のＯＰを回収する処理の中断をＳＳＤ３に要求する。
【０１００】
ＳＳＤ３のコールドブロックＧＣ制御部１２７は、このようなコマンドによる要求に応じて、コールドブロック内のＯＰを回収する動作を中断する。これにより、ＳＳＤ３は通常の動作（ホストライト、ＧＣ等）に移行する。そして、コールドブロック制御部１２３は、中断に応じて、手順（２）で生成されたコールドブロックのリストを更新する。コールドブロック内のＯＰを回収する動作を再開する場合には、例えば、ホスト２のコールドブロック制御Ｉ／Ｆ部４３１がコールドブロック情報３６をＳＳＤ３に問い合わせる手順（３）から開始される。
【０１０１】
また、ＯＰを回収する対象となるブロックは、データリテンション（信頼性）のために移動すべきデータを含むブロックであってもよい。その場合、例えば、データリテンション対策で実施される巡回（パトロール）における、リード時の誤り訂正における誤りビット数等に基づき、リテンションエラーが発生する可能性が高いデータを含むブロックが特定される。上述したコールドブロックに対する動作を、この特定されたブロックに対する動作に置き換えることにより、当該ブロック内のＯＰを回収することができる。
【０１０２】
図１０のフローチャートは、ＳＳＤ３のコントローラ４によって実行されるコールドブロック管理処理の手順の例を示す。
【０１０３】
コントローラ４はブロック管理情報３５を生成（更新）する（ステップＳ１１）。ブロック管理情報３５には、図７に示したようなブロック毎のレコードが含まれている。コントローラ４は、ホスト２から受信したコマンドに応じた動作やガベージコレクション動作に応じて、イレーズ動作が発生した場合や各ブロックの有効データ量が変動した場合に、ブロック管理情報３５を更新する。
【０１０４】
次いで、コントローラ４は、コールドブロックをリストアップするタイミングであるか否かを判定する（ステップＳ１２）。コントローラ４は、例えば、一定時間毎に、コールドブロックをリストアップするタイミングであると判定する。
【０１０５】
コールドブロックをリストアップするタイミングである場合（ステップＳ１２のＹＥＳ）、コントローラ４は、コールドブロックのリストを生成（更新）する（ステップＳ１３）。コントローラ４は、ブロック管理情報３５を用いて、コールドブロックであると推定されるブロックを検出することにより、コールドブロックのリストを生成（更新）する。
【０１０６】
コールドブロックをリストアップするタイミングでない場合（ステップＳ１２のＮＯ）、ステップＳ１３をスキップする。
【０１０７】
そして、コントローラ４は、ホスト２からコールドブロック情報３６の問合せがあったか否かを判定する（ステップＳ１４）。コールドブロック情報３６の問合せがない場合（ステップＳ１４のＮＯ）、ステップＳ１１に戻り、ブロック管理情報３５の更新が続行される。
【０１０８】
一方、コールドブロック情報３６の問合せがあった場合（ステップＳ１４のＹＥＳ）、コントローラ４は、ブロック管理情報３５とコールドブロックのリストとを用いて、コールドブロック情報３６を生成する（ステップＳ１５）。そして、コントローラ４は、生成されたコールドブロック情報３６をホスト２に送信する（ステップＳ１６）。
【０１０９】
図１１のフローチャートは、ＳＳＤ３のコントローラ４によって実行されるＯＰ回収制御処理の手順の例を示す。
【０１１０】
コントローラ４は、ホスト２からコールドブロック内のＯＰの回収が指示されたか否かを判定する（ステップＳ２１）。コールドブロック内のＯＰの回収が指示されていない場合（ステップＳ２１のＮＯ）、ステップＳ２１に戻る。
【０１１１】
コールドブロック内のＯＰの回収が指示された場合（ステップＳ２１のＹＥＳ）、コントローラ４は、コールドブロック内のＯＰ回収処理、すなわち、コールドブロックをＧＣソースブロックとするＧＣ処理を実行する（ステップＳ２２）。
【０１１２】
そして、このコールドブロック内のＯＰ回収処理が完了したならば、コントローラ４は、ホスト２に回収完了と通知する（ステップＳ２３）。
【０１１３】
また、図１２のフローチャートは、ホスト２によって実行されるコールドブロック制御処理の手順の例を示す。
【０１１４】
ホスト２は、ＳＳＤ３にコールドブロック情報３６を問い合わせるタイミングであるか否かを判定する（ステップＳ３１）。ホスト２は、例えば、一定時間毎に、コールドブロック情報３６を問い合わせるタイミングであると判定する。コールドブロック情報３６を問い合わせるタイミングでない場合（ステップＳ３１のＮＯ）、ステップＳ３１に戻る。
【０１１５】
コールドブロック情報３６を問い合わせるタイミングである場合（ステップＳ３１のＹＥＳ）、ホスト２は、ＳＳＤ３にコールドブロック情報３６を問い合わせる（ステップＳ３２）。そして、ホスト２は、この問合せに応じて、ＳＳＤ３によって送信されたコールドブロック情報３６を受信する（ステップＳ３３）。
【０１１６】
次いで、ホスト２は、コールドブロック内のＯＰの回収指示タイミングであるか否かを判定する（ステップＳ３４）。ホスト２は、例えば、ホスト２上で同時に動作しているプロセス数が少ない等の指標に基づいて、ＳＳＤ３へのアクセスの頻度が低いタイミングを、コールドブロック内のＯＰの回収指示タイミングとして検出する。コールドブロック内のＯＰの回収指示タイミングでないと判定された場合（ステップＳ３４のＮＯ）、ステップＳ３１に戻る。
【０１１７】
一方、コールドブロック内のＯＰの回収指示タイミングであると判定された場合（ステップＳ３４のＹＥＳ）、コントローラ４は、ＳＳＤ３にコールドブロック内のＯＰ回収のリクエストを発行する（ステップＳ３５）。
【０１１８】
そして、ホスト２は、ＳＳＤ３から、ＯＰ回収の完了通知を受信したか否かを判定する（ステップＳ３６）。完了通知を受信していない場合（ステップＳ３６のＮＯ）、ステップＳ３６に戻る。一方、完了通知を受信した場合（ステップＳ３６のＹＥＳ）、処理を終了する。
【０１１９】
以上のように、ホスト２は、ＳＳＤ３から受信したコールドブロック情報３６を用いて、ホスト２からのアクセスへの影響が少ないタイミングで、ＳＳＤ３に対してコールドブロック内のＯＰの回収を指示する。これにより、ホスト２からのアクセスへの影響を軽減しながら、ＳＳＤ３において、コールドブロック内のＯＰを回収することができる。
【０１２０】
（第２実施形態）
第１実施形態では、ＳＳＤ３は、ホスト２からの問い合わせに応じて、コールドブロック内のＯＰを回収するために要する処理時間または処理量や、コールドブロックから回収可能なＯＰ量等を含むコールドブロック情報３６をホスト２に送信している。これに対して、第２実施形態では、ホスト２による問い合わせの有無に関わらず、特定の条件を満たした場合に、ＳＳＤ３が、コールドブロック内のＯＰを回収すべきであるとの情報をホスト２に通知する。
【０１２１】
第２実施形態に係るコンピュータシステム１の構成は第１実施形態のコンピュータシステム１と同様であり、第２実施形態と第１実施形態とでは、ＳＳＤ３のコールドブロック制御部１２３によって実行される処理の手順のみが異なる。以下、第１実施形態と異なる点のみを説明する。
【０１２２】
コールドブロック制御部１２３は、ブロック管理情報３５を用いて、ＮＡＮＤ型フラッシュメモリ５内の複数のブロックＢ０〜Ｂｍ−１から、コールドブロックを選択し、コールドブロックのリストを生成する。そして、コールドブロック制御部１２３は、このコールドブロックのリストに基づきコールドブロック情報３６を生成する。図８を参照して上述した通り、コールドブロック情報３６は、例えば、ＳＳＤ３でコールドブロック内のＯＰを回収するための回収処理のみが実行される場合（ホスト２から新たなＩ／Ｏコマンドが発行されない場合等）に、コールドブロック内の有効データ量から推定される、その開始から完了までの処理時間または処理量と、この回収処理の完了によって利用可能になるＯＰ量（すなわち、回収されるコールドブロック内のＯＰ量）を含む。
【０１２３】
コールドブロック制御部１２３は、コールドブロック情報３６を用いて、コールドブロック内のＯＰを回収すべきであるか否かを判定する。コールドブロック制御部１２３は、例えば、コールドブロック内のＯＰ量が第６閾値を超えた場合に、コールドブロック内のＯＰを回収すべきであると判定する。コールドブロック制御部１２３は、コールドブロック内のＯＰを回収すべきであると判定した場合、コールドブロック内のＯＰを回収すべきであるとの情報（すなわち、コールドブロックを、データを書き込み可能な一つ以上のブロックにする処理が必要であるとの情報）をホスト２に通知する。また、コールドブロック制御部１２３は、コールドブロック内のＯＰ量（無効データ量）が第６閾値を超えたことをホスト２に通知してもよい。また、コールドブロック制御部１２３は、このような通知と共に、コールドブロック情報３６をホスト２に送信してもよい。
【０１２４】
ホスト２のコールドブロック制御Ｉ／Ｆ部４３１は、この通知に応じて、コールドブロック内のＯＰの回収を行うべきタイミングであるか否かを判定する。コールドブロック制御Ｉ／Ｆ部４３１は、ホスト２上で同時に動作しているプロセス数や、各種のリソースがビジー状態である時間等の指標に基づいて、ＳＳＤ３へのアクセス頻度が低いとき、コールドブロック内のＯＰの回収を行うべきタイミングであると判定する。そして、コールドブロック制御Ｉ／Ｆ部４３１は、コールドブロック内のＯＰの回収を行うべきタイミングであると判定された場合、コールドブロック内のＯＰを回収するリクエストをＳＳＤ３に発行する。
【０１２５】
コールドブロック内のＯＰを回収するための処理については、第１実施形態において上述した通りである。
【０１２６】
以上の構成により、ＳＳＤ３において、コールドブロック内のＯＰを回収すべきであるか否かを判断することができる。ホスト２は、ＳＳＤ３に対してコールドブロックに関する問い合わせを行うことなく、ＳＳＤ３からコールドブロック内のＯＰを回収すべきであるとの情報が通知されたことに応じて、ホスト２上のプロセスやリソースの状況に基づきコールドブロック内のＯＰの回収を行うべきタイミングであるか否かを判断することができる。
【０１２７】
図１３のフローチャートは、ＳＳＤ３のコントローラ４によって実行されるコールドブロック管理処理の手順の例を示す。
【０１２８】
まず、コントローラ４はブロック管理情報３５を生成（更新）する（ステップＳ４１）。次いで、コントローラ４は、コールドブロックをリストアップするタイミングであるか否かを判定する（ステップＳ４２）。コントローラ４は、例えば、一定時間毎に、コールドブロックをリストアップするタイミングであると判定する。
【０１２９】
コールドブロックをリストアップするタイミングでない場合（ステップＳ４２のＮＯ）、ステップＳ４１に戻り、ブロック管理情報３５の更新が続行される。
【０１３０】
一方、コールドブロックをリストアップするタイミングである場合（ステップＳ４２のＹＥＳ）、コントローラ４は、コールドブロックのリストを生成（更新）する（ステップＳ１３）。コントローラ４は、ブロック管理情報３５を用いて、コールドブロックであると推定されるブロックを検出することにより、コールドブロックのリストを生成（更新）する。そして、コントローラ４は、ブロック管理情報３５とコールドブロックのリストとを用いて、コールドブロック情報３６を生成する（ステップＳ４４）。
【０１３１】
次いで、コントローラ４は、コールドブロック内のＯＰを回収する必要があるか否かを判定する（ステップＳ４５）。コントローラ４は、例えば、コールドブロック内のＯＰ量が閾値を超えているか否かに基づいて、コールドブロック内のＯＰ量が閾値を超えている場合に、コールドブロック内のＯＰを回収する必要があると判定する。コールドブロック内のＯＰを回収する必要がないと判定された場合（ステップＳ４５のＮＯ）、ブロックＢ４１に戻る。
【０１３２】
一方、コールドブロック内のＯＰを回収する必要があると判定された場合（ステップＳ４５のＹＥＳ）、コントローラ４は、ホスト２に対して、コールドブロック内のＯＰを回収する必要がある旨を通知する（ステップＳ４５）。コントローラ４は、この通知と共に、コールドブロック情報３６をホスト２に送信してもよい。
【０１３３】
また、図１４のフローチャートは、ホスト２によって実行されるコールドブロック制御処理の手順の例を示す。
【０１３４】
ホスト２は、ＳＳＤ３から、コールドブロック内のＯＰを回収する必要がある旨の通知を受信したか否かを判定する（ステップＳ５１）。コールドブロック内のＯＰを回収する必要がある旨の通知を受信していない場合（ステップＳ５１のＮＯ）、ステップＳ５１に戻る。
【０１３５】
コールドブロック内のＯＰを回収する必要がある旨の通知を受信した場合（ステップＳ５１のＹＥＳ）、ホスト２は、ステップＳ５２からステップＳ５４までの手順を行う。このステップＳ５２からステップＳ５４までの手順は、図１２のフローチャートを参照して上述したステップＳ３４からステップＳ３６までの手順と同様である。
【０１３６】
このように、ホスト２ではなく、ＳＳＤ３においてコールドブロック内のＯＰを回収する必要があるか否かを判断し、ＳＳＤ３からホスト２に、コールドブロック内のＯＰを回収する必要がある旨を通知することもできる。
【０１３７】
（第３実施形態）
第１実施形態では、ＳＳＤ３は、コールドブロック内のＯＰを回収するために要する処理時間または処理量や、コールドブロックから回収可能なＯＰ量等を含むコールドブロック情報３６をホスト２に送信し、また第２実施形態では、ＳＳＤ３は、コールドブロック内のＯＰを回収すべきであるとの情報をホスト２に通知している。これに対して、第３実施形態では、ＳＳＤ３は、コールドデータの論理アドレス範囲を示すリストをホスト２に送信する。
【０１３８】
第３実施形態に係るコンピュータシステム１の構成は第１および第２実施形態のコンピュータシステム１と同様であり、第３実施形態と第１および第２実施形態とでは、ＳＳＤ３のコールドブロック制御部１２３とホスト２のコールドブロック制御Ｉ／Ｆ部４３１とによって実行される処理の手順のみが異なる。以下、第１および第２実施形態と異なる点のみを説明する。
【０１３９】
図１５は、本実施形態のコンピュータシステム１におけるコールドブロック内のＯＰを回収するための動作の例を示す。ここでは、ＳＳＤ３は、ダイレクト・アタッチド・ストレージ（ＤＡＳ）として、１対１でホスト２に接続されている。
【０１４０】
まず、ホスト２は、ＳＳＤ３にコールドブロック情報３６を問い合わせる。ＳＳＤ３（コントローラ４）は、この問い合わせに応じて、コールドブロック情報３６を生成し、ホスト２に送信する。コールドブロック情報３６は、ＳＳＤ３のＮＡＮＤ型フラッシュメモリ５内のコールドデータに対応する論理アドレスの範囲（ＬＢＡ範囲）のリストを含む。コールドデータは、コールドブロック内の有効データであり、対応するＬＢＡ範囲へのアクセス頻度が低いデータである。
【０１４１】
図１５に示すように、コールドブロック情報３６は、コールドデータのＬＢＡ範囲をそれぞれ示す一つ以上のエントリを含む。ＬＢＡ範囲は、例えば、開始ＬＢＡとその長さ（例えば、論理ブロック数）とで表される。また、ＬＢＡ範囲は、開始ＬＢＡと終了ＬＢＡとで表されてもよい。なお、コールドブロック情報３６には、コールドブロックから回収可能なＯＰ量、コールドブロックをデータを書き込み可能なブロックにするための（すなわち、コールドブロックからＯＰを回収するための）推定されるＳＳＤ３の処理時間または処理量、等がさらに含まれていてもよい。
【０１４２】
コールドブロック情報３６に含まれる、コールドデータに対応するＬＢＡ範囲のリストは、例えば、ＮＶＭｅ規格のデータセット・マネジメント・コマンドに従ったフォーマットで作成され得る。このフォーマットでは、図１６に示すように、例えば、最大で２５６個のＬＢＡ範囲（Ｒａｎｇｅ  ０からＲａｎｇｅ  ２５５）を示すことができ、各ＬＢＡ範囲について、開始ＬＢＡと論理ブロック長とコンテキスト属性とが含まれる。
【０１４３】
「開始ＬＢＡ」は、ＬＢＡ範囲の先頭のＬＢＡを示す。「論理ブロック長」は、そのＬＢＡ範囲に含まれる論理ブロックの数（ＮＬＢ）を示す。「コンテキスト属性」は、そのＬＢＡ範囲に関連する各種の属性を示す。このフォーマットにおいて、各ＬＢＡ範囲に対応する情報のサイズは１６バイトである。したがって、２５６個のＬＢＡ範囲を示すコールドブロック情報３６を、４キロバイト（ＫｉＢ）でホスト２に送信することができる。
【０１４４】
ホスト２は、ＳＳＤ３から受信したコールドブロック情報３６を用いて、コールドデータのＬＢＡ範囲を指定したリードコマンドをＳＳＤ３に発行する。ＳＳＤ３は、リードコマンドに応じて、ＮＡＮＤ型フラッシュメモリ５から、指定されたＬＢＡ範囲のコールドデータを読み出し、ホスト２に送信する。以上により、ホスト２は、ＳＳＤ３からコールドデータを読み出すことができる。
【０１４５】
そして、ホスト２は、そのＬＢＡ範囲を指定した、読み出されたコールドデータを書き込むためのライトコマンドをＳＳＤ３に発行する。なお、このライトコマンドには、書き込まれるデータがコールドデータであることを示す情報が含まれていてもよい。
【０１４６】
書き込まれるデータがコールドデータであることを示す情報としては、例えば、上述したＮＶＭｅのデータセット・マネジメント・コマンドの「コンテキスト属性」に設定される属性の一つであるアクセス頻度を用いることができる。図１７は、コンテキスト属性の［０３：００］ビットに対応するアクセス頻度のフィールドに設定され得る値を示す。図１７に示す例では、対応するＬＢＡ範囲への低頻度のライトを示す値である“００１０ｂ”または“００１１ｂ”が、書き込まれるデータがコールドデータであることを示す情報として用いられる。
【０１４７】
ＳＳＤ３は、ライトコマンドに応じて、ＮＡＮＤ型フラッシュメモリ５にそのコールドデータを書き込む。ＳＳＤ３は、コールドデータを、コールドデータがこれまで書き込まれていた第１物理記憶領域とは別の第２物理記憶領域（ホストライトの書き込み先ブロック）に書き込む。ＳＳＤ３は、ライトコマンドに含まれる、書き込まれるデータがコールドデータであることを示す情報に応じて、コールドデータの書き込みに適したブロック（例えば、プログラム／イレーズサイクル数が多いブロック）を書き込み先ブロックとして選択してもよい。以上により、ホスト２は、ＳＳＤ３にコールドデータを新たに書き込むことができる。
【０１４８】
このようなコールドデータの読み出しおよび書き込みにより、コールドデータを、コールドブロックから、ホストライトのための書き込み先ブロックに移動することができる。ＳＳＤ３は、ライトコマンドに指定されたＬＢＡ範囲が、そのコールドデータが新たに書き込まれた第２物理記憶領域にマッピングされるようにＬＵＴ３４を更新する。したがって、コールドデータがそれまで書き込まれていたコールドブロック内の第１物理記憶領域は、いずれのＬＢＡにもマッピングされていない、無効データが格納される領域となる。
【０１４９】
ホスト２は、コールドブロック情報３６に示されるＬＢＡ範囲毎に、上記の動作を行う。このような動作により、ＳＳＤ３において、コールドブロック内の全てのコールドデータ（有効データ）が、ホストライトのための書き込み先ブロックに移動されたならば、そのコールドブロックは、有効データを格納しておらず、イレーズ処理を経ることで新たなデータの書き込みに利用可能なフリーブロックとなる。したがって、コールドブロック内のＯＰを回収することができる。
【０１５０】
なお、ＯＰを回収する動作の対象となるブロックは、データリテンション（信頼性）のために移動すべきデータを含むブロックであってもよい。その場合、例えば、データリテンション対策で実施される巡回における、リード時の誤り訂正における誤りビット数等に基づき、リテンションエラーが発生する可能性が高いデータが特定される。上述したコールドデータに対応するＬＢＡ範囲のリストを含むコールドブロック情報３６を、この特定されたデータに対応するＬＢＡ範囲のリストを含む情報に置き換えることにより、リテンションエラーが発生する可能性が高いデータを含むブロック内のＯＰを回収することができる。
【０１５１】
図１８のフローチャートは、ＳＳＤ３のコントローラ４によって実行されるコールドブロック管理処理の手順の例を示す。ステップＳ６１からステップＳ６４までの手順は、図１０のフローチャートを参照して上述したステップＳ１１からステップＳ１４までの手順と同様である。
【０１５２】
ホスト２からコールドブロック情報３６の問合せがあった場合（ステップＳ６４のＹＥＳ）、コントローラ４は、コールドデータを示すリストを含むコールドブロック情報３６を生成する（ステップＳ６５）。コールドデータを示すリストは、例えば、図１６に示したフォーマットに基づくリストであり、コールドデータが格納されているＬＢＡ領域の先頭のＬＢＡ（開始ＬＢＡ）とその長さ（論理ブロックの数：ＮＬＢ）とを含む。コントローラ４は、生成されたコールドデータを示すリストを含むコールドブロック情報３６をホスト２に送信する（ステップＳ６６）。
【０１５３】
また、図１９のフローチャートは、ホスト２によって実行されるコールドブロック制御処理の手順の例を示す。
【０１５４】
ホスト２は、ＳＳＤ３にコールドブロック情報３６を問い合わせるタイミングであるか否かを判定する（ステップＳ７１）。ホスト２は、例えば、一定時間毎に、コールドブロック情報３６を問い合わせるタイミングであると判定する。コールドブロック情報３６を問い合わせるタイミングでない場合（ステップＳ７１のＮＯ）、ステップＳ７１に戻る。
【０１５５】
コールドブロック情報３６を問い合わせるタイミングである場合（ステップＳ７１のＹＥＳ）、ホスト２は、ＳＳＤ３にコールドブロック情報３６を問い合わせる（ステップＳ７２）。そして、ホスト２は、この問合せに応じてＳＳＤ３によって送信された、コールドデータを示すリストを含むコールドブロック情報３６を受信する（ステップＳ７３）。コールドデータを示すリストには、コールドデータに対応する一つ以上のＬＢＡ範囲に対応する一つ以上のエントリが含まれる。
【０１５６】
次いで、ホスト２は、コールドブロック内のＯＰの回収タイミングであるか否かを判定する（ステップＳ７４）。ホスト２は、例えば、ホスト２上で同時に動作しているプロセス数が少ない等の指標に基づいて、ＳＳＤ３へのアクセス頻度が低いタイミングを、コールドブロック内のＯＰの回収タイミングとして検出する。コールドブロック内のＯＰの回収タイミングでないと判定された場合（ステップＳ７４のＮＯ）、ステップＳ７１に戻る。
【０１５７】
一方、コールドブロック内のＯＰの回収タイミングであると判定された場合（ステップＳ７４のＹＥＳ）、ホスト２は、コールドデータを示すリスト内のあるエントリに基づいて、コールドデータに対応するＬＢＡ範囲を指定したリードコマンドをＳＳＤ３に発行する（ステップＳ７５）。ＳＳＤ３では、このリードコマンドに応じて、指定されたＬＢＡ範囲のコールドデータが読み出され、ホスト２に送信される。
【０１５８】
次いで、ホスト２は、このＬＢＡ範囲を指定し、読み出されたコールドデータを書き込むためのライトコマンドをＳＳＤ３に発行する（ステップＳ７６）。ＳＳＤ３では、このライトコマンドに応じて、コールドデータが格納されていた第１物理記憶領域ではなく、別の第２物理記憶領域にコールドデータが書き込まれる。そして、ＳＳＤ３では、ＬＵＴ３４が更新され、このＬＢＡ範囲が第２物理記憶領域に関連付けられると共に、これまで格納されていた第１物理記憶領域のデータが無効化される。したがって、第２物理記憶領域に格納されているデータは有効データであり、第１物理記憶領域に格納されているデータは無効データとなる。
【０１５９】
そして、ホスト２は、コールドデータを示すリストに、移動すべきコールドデータを示す別のエントリが含まれているか否かを判定する（ステップＳ７７）。リストに別のエントリが含まれている場合（ステップＳ７７のＹＥＳ）、ステップＳ７５に戻り、その別のエントリに基づく処理が続行される。
【０１６０】
リストに別のエントリが含まれていない場合（ステップＳ７７のＮＯ）、すなわち、リスト内の全てのエントリに基づく処理が完了した場合、コールドブロック制御処理を終了する。
【０１６１】
以上のように、ＳＳＤ３は、コールドデータのＬＢＡ範囲を示すリストを含むコールドブロック情報３６をホスト２に送信する。そして、ホスト２は、リストに示されるＬＢＡ範囲のコールドデータを読み出すためのリードコマンドと、当該ＬＢＡ範囲に読み出されたコールドデータを書き込むためのライトコマンドとを発行する。これらコマンドに応じて、リストに示される論理アドレス範囲のコールドデータが、コールドブロックから新たな書き込み先ブロックに移動されることにより、コールドブロック内のＯＰが回収される。ホスト２は、コマンドを発行するタイミングを制御できるので、ホスト２のリソースや、ホスト２からＳＳＤ３へのアクセスに対する影響が低いタイミングで、ＳＳＤ３に、コールドブロック内のＯＰを回収するための動作を行わせることができる。
【０１６２】
（第４実施形態）
第３実施形態では、ＳＳＤ３は、コールドデータの論理アドレス範囲を示すリストを含むコールドブロック情報３６をホスト２に送信し、ホスト２によって発行されるコマンドに応じて、リストに示される論理アドレス範囲のコールドデータが、コールドブロックから新たな書き込み先ブロックに移動されることにより、コールドブロック内のＯＰを回収する。これに対して、第４実施形態では、リストに示される論理アドレス範囲のコールドデータだけでなく、その周辺の論理アドレスのデータも、新たな書き込み先ブロックに移動する。
【０１６３】
第４実施形態に係るコンピュータシステム１の構成は第１乃至第３実施形態のコンピュータシステム１と同様であり、第４実施形態と第１乃至第３実施形態とでは、ホスト２のコールドブロック制御Ｉ／Ｆ部４３１によって実行される処理の手順のみが異なる。以下、第１乃至第３実施形態と異なる点のみを説明する。
【０１６４】
図２０は、コールドブロック内のＯＰを回収する際に、コールドデータのＬＢＡ範囲の周辺のＬＢＡのデータも、新たな書き込み先ブロックに移動される例を示す。ここでは、コールドブロック５１（コールドブロックＡ）内のコールドデータ（有効データ）に対応するＬＢＡ範囲のリストを含むコールドブロック情報３６が、ＳＳＤ３からホスト２に送信される場合を想定する。
【０１６５】
コールドブロック５１には、有効データ５１１と無効データ５１２，５１３，５１４とが含まれている。これら無効データ５１２，５１３，５１４は、有効データ５１１と同時期に書き込まれたデータが、対応するＬＢＡへの上書きが要求されたことに応じて、別のブロック５２，５３，５４（ブロックＢ，Ｃ，Ｄ）に新たなデータが書き込まれたことにより、無効化されたものである。
【０１６６】
無効データ５１２の物理記憶位置にマッピングされていたＬＢＡは、このＬＢＡへの上書きの要求に応じてブロック５２に新たに書き込まれたデータ５２１の物理記憶位置にマッピングされている。無効データ５１３の物理記憶位置にマッピングされていたＬＢＡは、このＬＢＡへの上書きの要求に応じてブロック５３に新たに書き込まれたデータ５３１の物理記憶位置にマッピングされている。また、無効データ５１４の物理記憶位置にマッピングされていたＬＢＡは、このＬＢＡへの上書きの要求に応じてブロック５４に新たに書き込まれたデータ５４１の物理記憶位置にマッピングされている。
【０１６７】
これらデータ５２１，５３１，５４１は、コールドブロック５１への書き込み時には有効データ５１１と同時期に書き込まれたが、一部の上書き（書き換え）によって、別のブロック５２，５３，５４に書き込まれ、断片化されたデータであると云える。したがって、コールドブロック５１内の有効データ５１１と、ブロック５２，５３，５４内に断片化されたデータ５２１，５３１，５４１とは、元々は同時期に書き込まれた一連のデータであるので、これらデータ５１１，５２１，５３１，５４１をまとめて一つのブロックに書き込むことにより、アクセス性能の向上が期待できる。
【０１６８】
そのため、コールドブロック５１のＯＰを回収する処理を行う際に、コールドブロック５１内の有効データ５１１を新たな書き込み先ブロック５５（コールドブロックＸ）に移動すると共に、データ５２１，５３１，５４１もこの書き込み先ブロック５５に移動する。これらデータ５１１，５２１，５３１，５４１は、対応するＬＢＡに従った順序で、書き込み先ブロック内に書き込まれてもよい。この移動に応じて、データ５１１，５２１，５３１，５４１に対応するＬＢＡ範囲に、これらデータ５１１，５２１，５３１，５４１が書き込まれたブロック５５の物理記憶位置がマッピングされるようにＬＵＴ３４が更新されると共に、ブロック５１，５２，５３，５４に書き込まれていた以前のデータ５１１，５２１，５３１，５４１が無効化される。これにより、コールドブロック５１は、有効データを格納しておらず、イレーズ処理を経ることで新たなデータの書き込みに利用可能なフリーブロックとなる。
【０１６９】
なお、第１実施形態および第２実施形態において、コールドブロックＧＣを行う際に、上記と同様にして周辺のＬＢＡのデータも、ＧＣデスティネーションブロックに移動するようにしてもよい。
【０１７０】
以下に、上記の処理を実現するための構成の一例について説明する。
【０１７１】
ホスト２のコールドブロック制御Ｉ／Ｆ部４３１は、コールドブロック５１内のコールドデータ（有効データ）を示すＬＢＡ範囲のリストを用いて、図２１に示すように、コールドデータを示すＬＢＡ範囲に、元来コールドデータであると推定されるデータに対応する周辺のＬＢＡ（またはＬＢＡ範囲）を加えたリストを生成する。周辺のＬＢＡは、例えば、リストに示されるＬＢＡ範囲に先行するＬＢＡや、当該ＬＢＡ範囲に後続するＬＢＡである。
【０１７２】
例えば、コールドブロック制御Ｉ／Ｆ部４３１は、開始ＬＢＡが“０”であり、ＮＬＢが“１０”である第１ＬＢＡ範囲のエントリと、開始ＬＢＡが“１１”であり、ＮＬＢが“９”である第２ＬＢＡ範囲のエントリとを用いて、その周辺のＬＢＡである“１０”を検出する。そして、コールドブロック制御Ｉ／Ｆ部４３１は、ＬＢＡが“１０”であるデータが、元来コールドデータであるか否かを判定する。コールドブロック制御Ｉ／Ｆ部４３１は、ＬＢＡが“１０”であるデータが、例えば、第１ＬＢＡ範囲のデータと第２ＬＢＡ範囲のデータとが書き込まれているコールドブロックに、第１ＬＢＡ範囲のデータおよび第２ＬＢＡ範囲のデータと同時期に書き込まれていたデータの更新（上書き）データである場合や、そのコールドブロックに、第１ＬＢＡ範囲のデータおよび第２ＬＢＡ範囲のデータと同プロセスで書き込まれていたデータの更新データである場合に、ＬＢＡが“１０”であるデータが元来コールドデータであると判定する。
【０１７３】
コールドブロック制御Ｉ／Ｆ部４３１は、ＬＢＡが“１０”であるデータが元来コールドデータであると判定された場合、リストに示されるコールドデータのＬＢＡ範囲にＬＢＡ“１０”がさらに含まれるように、当該リストを変更する。コールドブロック制御Ｉ／Ｆ部４３１は、例えば、図２１に示すように、第１ＬＢＡ範囲および第２ＬＢＡ範囲のエントリを、第１ＬＢＡ範囲と第２ＬＢＡ範囲とＬＢＡ“１０”とを含む、開始ＬＢＡが“０”であり、ＮＬＢが“２０”であるエントリに変更する。
【０１７４】
このように変更されたリストを用いることにより、コールドブロック内のＯＰを回収する際に、そのコールドブロック内のコールドデータだけでなく、元来コールドデータである周辺のＬＢＡのデータも、新たな書き込み先ブロックに移動されるので、ＯＰの確保だけでなく、アクセス性能も向上させることができる。
【０１７５】
図２２のフローチャートは、ホスト２によって実行されるコールドブロック制御処理の手順の例を示す。ステップＳ８１からステップＳ８４までの手順は、図１９のフローチャートを参照して上述したステップＳ７１からステップＳ７４までの手順と同様である。
【０１７６】
コールドブロック内のＯＰ回収のタイミングであると判定された場合（ステップＳ８４のＹＥＳ）、ホスト２は、受信したコールドデータを示すリストを用いて、コールドデータが格納されていると推定される周辺のＬＢＡ（ＬＢＡ範囲）をさらに含むリストを作成する（ステップＳ８５）。したがって、作成されたリストには、例えば、コールドデータに対応するＬＢＡ範囲と、コールドデータと推定されるデータのＬＢＡ（ＬＢＡ範囲）とを示す一つ以上のエントリが含まれている。
【０１７７】
ホスト２は、作成されたリスト内のあるエントリに基づいて、コールドデータと、コールドデータであると推定されるデータの少なくとも一方に対応するＬＢＡ範囲を指定したリードコマンドをＳＳＤ３に発行する（ステップＳ８６）。ＳＳＤ３では、このリードコマンドに応じて、指定されたＬＢＡ範囲のデータが読み出され、ホスト２に送信される。
【０１７８】
ホスト２は、このＬＢＡ範囲を指定した、読み出されたデータを書き込むためのライトコマンドをＳＳＤ３に発行する（ステップＳ８７）。ＳＳＤ３では、このライトコマンドに応じて、そのデータが格納されていた第１物理記憶領域ではなく、別の第２物理記憶領域にデータが書き込まれる。そして、ＳＳＤ３では、ＬＵＴ３４が更新され、このＬＢＡ範囲が第２物理記憶領域に関連付けられると共に、これまで格納されていた第１物理記憶領域のデータが無効化される。したがって、第２物理記憶領域に格納されているデータは有効データであり、第１物理記憶領域に格納されているデータは無効データとなる。
【０１７９】
そして、ホスト２は、ステップＳ８５で作成されたリストに、移動すべきデータを示す別のエントリが含まれているか否かを判定する（ステップＳ８８）。リストに別のエントリが含まれている場合（ステップＳ８８のＹＥＳ）、ステップＳ８６に戻り、その別のエントリに基づく処理が続行される。
【０１８０】
リストに別のエントリが含まれていない場合（ステップＳ８８のＮＯ）、すなわち、リスト内の全てのエントリに基づく処理が完了した場合、コールドブロック制御処理を終了する。
【０１８１】
（第５実施形態）
第１乃至第４実施形態では、ＳＳＤ３において、コールドブロック内のコールドデータを別のブロックに移動することにより、コールドブロック内のＯＰを回収している。これに対して、第５実施形態では、ＳＳＤ３のコールドブロック内のコールドデータを、別のストレージに移動することにより、コールドブロック内のＯＰを回収する。
【０１８２】
第５実施形態に係るコンピュータシステムの構成は、第１乃至第４実施形態と同様のコンピュータシステム１に別のストレージをさらに設けたものであり、ホスト２のコールドブロック制御Ｉ／Ｆ部４３１とコールドデータ管理部４３２とによって実行される処理の手順のみが異なる。以下、第１乃至第４実施形態と異なる点のみを説明する。
【０１８３】
図２３は、ホスト２と第１ＳＳＤ３に加えて、第２ＳＳＤ７をさらに備えるコンピュータシステム１Ａにおける、コールドブロック内のＯＰを回収するための動作の例を示す。第１ＳＳＤ３は、ホットデータを格納するためのホットストレージであり、コールドブロック内のＯＰを回収する対象となるストレージである。また、第２ＳＳＤ７は、コールドデータを格納するためのコールドストレージである。なお、コールドストレージとして、第２ＳＳＤ７の代わりにＨＤＤが用いられてもよい。第１ＳＳＤ３と第２ＳＳＤ７とはそれぞれ、ＤＡＳとしてホスト２に接続されている。
【０１８４】
ホスト２は、第１ＳＳＤ３にコールドブロック情報３６を問い合わせる。第１ＳＳＤ３は、この問合せに応じて、コールドブロック情報３６をホスト２に送信する。コールドブロック情報３６は、第１ＳＳＤ３のＮＡＮＤ型フラッシュメモリ５内のコールドデータに対応する論理ブロックアドレスの範囲（ＬＢＡ範囲）のリストを含む。このコールドブロック情報３６については、図１５および図１６を参照して上述した通りである。
【０１８５】
ホスト２は、コールドブロック情報３６を用いて、コールドデータのＬＢＡ範囲を指定したリードコマンドを第１ＳＳＤ３に発行する。第１ＳＳＤ３は、リードコマンドに応じて、ＮＡＮＤ型フラッシュメモリ５から指定されたＬＢＡ範囲のコールドデータを読み出し、ホスト２に送信する。以上により、ホスト２は、第１ＳＳＤ３からコールドデータを読み出すことができる。
【０１８６】
そして、ホスト２は、そのＬＢＡ範囲を指定した、読み出されたコールドデータを書き込むためのライトコマンドを第２ＳＳＤ７に発行する。なお、このライトコマンドには、図１７に示したような、書き込まれるデータがコールドデータであることを示す情報が含まれていてもよい。
【０１８７】
第２ＳＳＤ７は、ライトコマンドに応じて、第２ＳＳＤ７内のＮＡＮＤ型フラッシュメモリにそのコールドデータを書き込む。第２ＳＳＤ７は、ライトコマンドに含まれる、書き込まれるデータがコールドデータであることを示す情報に応じて、コールドデータの書き込みに適したブロック（例えば、プログラム／イレーズサイクル数が多いブロック）を書き込み先ブロックとして選択してもよい。また、第２ＳＳＤ７では、ライトコマンドで指定されたＬＢＡ範囲が、コールドデータが書き込まれた物理記憶領域にマッピングされるように、第２ＳＳＤ７内のＬＵＴが更新される。以上により、ホスト２は、第２ＳＳＤ７にコールドデータを書き込むことができる。
【０１８８】
このようなコールドデータの読み出しおよび書き込みにより、コールドデータを、第１ＳＳＤ３内のコールドブロックから、第２ＳＳＤ７内のホストライトのための書き込み先ブロックに移動することができる。ホスト２は、移動されたデータのＬＢＡ範囲を指定したトリムコマンドを第１ＳＳＤ３に発行する。第１ＳＳＤ３は、トリムコマンドに指定されたＬＢＡ範囲が、いずれの物理記憶領域にもマッピングされないアンマップ状態になるように、ＬＵＴ３４を更新する。したがって、コールドデータがそれまで書き込まれていたコールドブロック内の物理記憶領域は、いずれのＬＢＡにもマッピングされていない、無効データが格納される領域となる。
【０１８９】
また、ホスト２のコールドデータ管理部４３２は、あるＬＢＡ範囲のデータが、いずれのＳＳＤ３，７に格納されているかを管理する。例えば、あるＬＢＡ範囲のデータが、第１ＳＳＤ３から第２ＳＳＤ７に移動された場合、そのＬＢＡ範囲のデータが第２ＳＳＤ７に格納されていることを管理する。この管理には、例えば、ＬＢＡ範囲−ストレージ管理テーブル４１２Ａが用いられる。
【０１９０】
図２４は、ＬＢＡ範囲−ストレージ管理テーブル４１２Ａの一構成例を示す。ＬＢＡ範囲−ストレージ管理テーブル４１２Ａは、一つ以上のＬＢＡ範囲に対応する一つ以上のレコードを含む。各レコードは、例えば、開始ＬＢＡ、長さ（論理ブロックの数）、およびストレージＩＤを含む。
【０１９１】
あるＬＢＡ範囲に対応するレコードにおいて、「開始ＬＢＡ」は、そのＬＢＡ範囲の先頭のＬＢＡを示す。「長さ」は、そのＬＢＡ範囲に含まれる論理ブロックの数（ＮＬＢ）を示す。「ストレージＩＤ」は、そのＬＢＡ範囲に対応するデータが格納されているストレージの識別情報を示す。例えば、図２３に示すコンピュータシステム１の構成であれば、「ストレージＩＤ」には、第１ＳＳＤ３に付与された識別情報（ここでは“０００１”）、または第２ＳＳＤ７に付与された識別情報（ここでは“０００２”）のいずれかが設定される。
【０１９２】
コールドデータ管理部４３２は、図２４に示すように、例えば、開始ＬＢＡが“５００”であり、ＮＬＢが“８０”であるＬＢＡ範囲のデータが、第１ＳＳＤ３（ストレージＩＤ“０００１”）から第２ＳＳＤ７（ストレージＩＤ“０００２”）に移動された場合、開始ＬＢＡが“５００”であり、ＮＬＢが“８０”であるＬＢＡ範囲に対応するレコードに設定されるストレージＩＤを“０００１”から“０００２”に変更する。
【０１９３】
コールドデータ管理部４３２は、あるＬＢＡ範囲へのアクセスが要求された場合、ＬＢＡ範囲−ストレージ管理テーブル４１２Ａを用いて、そのＬＢＡ範囲に関連付けられたストレージＩＤのストレージにアクセスされるように（例えば、そのストレージに対してコマンドが発行されるように）制御する。コールドデータ管理部４３２は、例えば、図２４の更新されたＬＢＡ範囲−ストレージ管理テーブル４１２Ａを用いて、開始ＬＢＡが“５００”であり、ＮＬＢが“８０”であるＬＢＡ範囲へのアクセスが要求された場合には、第２ＳＳＤ７にアクセスされるように制御する。
【０１９４】
ホスト２では、例えば、コールドブロック情報３６に示されるＬＢＡ範囲毎に、上述したような、コールドデータを第１ＳＳＤ３から第２ＳＳＤ７に移動するための動作が行われる。このような動作により、第１ＳＳＤ３内のコールドブロックに含まれる全てのコールドデータ（有効データ）が、第２ＳＳＤ７内のホストライトのための書き込み先ブロックに移動されたならば、そのコールドブロックは、有効データを格納しておらず、イレーズ処理を経ることで新たなデータの書き込みに利用可能なフリーブロックとなる。したがって、コールドブロック内のＯＰを回収することができる。
【０１９５】
図２５のフローチャートは、ホスト２によって実行されるコールドブロック制御処理の手順の例を示す。
【０１９６】
ホスト２は、第１ＳＳＤ３にコールドブロック情報３６を問い合わせるタイミングであるか否かを判定する（ステップＳ９１）。ホスト２は、例えば、一定時間毎に、第１ＳＳＤ３にコールドブロック情報３６を問い合わせるタイミングであると判定する。コールドブロック情報３６を問い合わせるタイミングでない場合（ステップＳ９１のＮＯ）、ステップＳ９１に戻る。
【０１９７】
コールドブロック情報３６を問い合わせるタイミングである場合（ステップＳ９１のＹＥＳ）、ホスト２は、第１ＳＳＤ３にコールドブロック情報３６を問い合わせる（ステップＳ９２）。そして、ホスト２は、第１ＳＳＤ３によって送信された、コールドデータを示すリストを含むコールドブロック情報３６を受信する（ステップＳ９３）。コールドデータを示すリストには、コールドデータに対応する一つ以上のＬＢＡ範囲に対応する一つ以上のエントリが含まれる。
【０１９８】
次いで、ホスト２は、第１ＳＳＤ３のコールドブロック内のＯＰの回収タイミングであるか否かを判定する（ステップＳ９４）。ホスト２は、例えば、ホスト２上で同時に動作しているプロセス数が少ない等の指標に基づいて、第１ＳＳＤ３へのアクセスの頻度が低いタイミングを、コールドブロック内のＯＰの回収タイミングとして検出する。コールドブロック内のＯＰの回収タイミングでないと判定された場合（ステップＳ９４のＮＯ）、ステップＳ９１に戻る。
【０１９９】
一方、コールドブロック内のＯＰの回収タイミングであると判定された場合（ステップＳ９４のＹＥＳ）、ホスト２は、コールドデータを示すリスト内のあるエントリに基づいて、コールドデータに対応するＬＢＡ範囲を指定したリードコマンドを第１ＳＳＤ３に発行する（ステップＳ９５）。第１ＳＳＤ３では、このリードコマンドに応じて、指定されたＬＢＡ範囲のコールドデータが読み出され、ホスト２に送信される。
【０２００】
次いで、ホスト２は、このＬＢＡ範囲を指定した、読み出されたコールドデータを書き込むためのライトコマンドを第２ＳＳＤ７に発行する（ステップＳ９６）。第２ＳＳＤ７では、このライトコマンドに応じて、ある物理記憶位置にコールドデータを書き込む。そして、第２ＳＳＤ７では、ＬＵＴが更新され、このＬＢＡ範囲が当該物理記憶位置に関連付けられる。
【０２０１】
第２ＳＳＤ７における書き込みが完了したならば、ホスト２は、このＬＢＡ範囲を指定したトリムコマンドを第１ＳＳＤ３に発行する（ステップＳ９７）。第１ＳＳＤ３では、指定されたＬＢＡ範囲に対応する物理記憶領域、すなわち、コールドデータが書き込まれていた物理記憶領域のデータが無効化されると共に、ＬＵＴ３４が更新され、指定されたＬＢＡ範囲がいずれの物理記憶領域にもマッピングされないアンマップ状態にされる。
【０２０２】
次いで、ホスト２は、このＬＢＡ範囲に対応するデータが第２ＳＳＤ７に格納されていることを示すように、ＬＢＡ範囲−ストレージ管理テーブル４１２Ａ内の、当該ＬＢＡ範囲に対応するレコードを更新する（ステップＳ９８）。これにより、ホスト２は、ＬＢＡ範囲−ストレージ管理テーブル４１２Ａを用いて、このＬＢＡ範囲のデータにアクセスする場合に、第２ＳＳＤ７にコマンドを発行すべきであると判断することができる。
【０２０３】
そして、ホスト２は、コールドデータを示すリストに、移動すべきコールドデータを示す別のエントリが含まれているか否かを判定する（ステップＳ９９）。リストに別のエントリが含まれている場合（ステップＳ９９のＹＥＳ）、ステップＳ９５に戻り、その別のエントリに基づく処理が続行される。
【０２０４】
リストに別のエントリが含まれていない場合（ステップＳ９９のＮＯ）、すなわち、リスト内の全てのエントリに基づく処理が完了した場合、コールドブロック制御処理を終了する。
【０２０５】
以上の構成により、第２ＳＳＤ７（コールドストレージ）がさらに設けられる場合、第１ＳＳＤ３（ホットストレージ）のコールドブロック内のコールドデータがその第２ＳＳＤ７に移動される。これにより、ホストライトに対する、第１ＳＳＤ３のＮＡＮＤアクセスのバンド幅を消費することなく、コールドブロック内のＯＰを回収できると共に、コールドデータとホットデータとを別々のＳＳＤ３，７に分離することができる。
【０２０６】
（第６実施形態）
第５実施形態では、第１ＳＳＤ３のコールドブロック内のコールドデータを、ホスト２にＤＡＳとして接続された第２ＳＳＤ７に書き込んでいる。これに対して、第６実施形態では、第１ＳＳＤ３のコールドブロック内のコールドデータを、ネットワークを介してホスト２に接続された別のストレージに書き込む。
【０２０７】
第６実施形態に係るコンピュータシステムの構成は、第５実施形態のコンピュータシステム１Ａ内の第２ＳＳＤ７をＤＡＳとしてではなく、ネットワークを介してホスト２に接続したものであり、第６実施形態と第１乃至第５実施形態とでは、ホスト２のコールドブロック制御Ｉ／Ｆ部４３１によって実行される処理の手順のみが異なる。以下、第１乃至第５実施形態と異なる点のみを説明する。
【０２０８】
図２６は、ホスト２と第１ＳＳＤ３に加えて、第２ＳＳＤ７をさらに備えるコンピュータシステム１Ｂにおける、コールドブロック内のＯＰを回収するための動作の例を示す。第１ＳＳＤ３は、ホットデータを格納するためのホットストレージであり、コールドブロック内のＯＰを回収する対象となるストレージである。また、第２ＳＳＤ７は、コールドデータを格納するためのコールドストレージである。なお、コールドストレージとして、第２ＳＳＤ７の代わりにＨＤＤが用いられてもよいし、コールドストレージが複数であってもよい。第１ＳＳＤ３はＤＡＳとしてホスト２に接続されている。また、第２ＳＳＤ７は、ＮＡＳやクラウドストレージのような、ネットワーク８を介してホスト２に接続されるストレージである。
【０２０９】
ホスト２は、第１ＳＳＤ３にコールドブロック情報３６を問い合わせる。第１ＳＳＤ３は、この問合せに応じて、コールドブロック情報３６をホスト２に送信する。コールドブロック情報３６は、第１ＳＳＤ３のＮＡＮＤ型フラッシュメモリ５内のコールドデータに対応する論理アドレスの範囲（ＬＢＡ範囲）のリストを含む。このコールドブロック情報３６については、図１５および図１６を参照して上述した通りである。
【０２１０】
ホスト２は、コールドブロック情報３６を用いて、コールドデータのＬＢＡ範囲を指定したリードコマンドを第１ＳＳＤ３に発行する。第１ＳＳＤ３は、リードコマンドに応じて、ＮＡＮＤ型フラッシュメモリ５から、指定されたＬＢＡ範囲のコールドデータを読み出し、ホスト２に送信する。以上により、ホスト２は、第１ＳＳＤ３からコールドデータを読み出すことができる。
【０２１１】
そして、ホスト２は、そのＬＢＡ範囲を指定した、読み出されたコールドデータを書き込むためのライトコマンドを、ネットワーク８を介して第２ＳＳＤ７に発行する。なお、このライトコマンドには、図１７に示したように、書き込まれるデータがコールドデータであることを示す情報が含まれていてもよい。
【０２１２】
第２ＳＳＤ７は、ライトコマンドに応じて、第２ＳＳＤ７内のＮＡＮＤ型フラッシュメモリにそのコールドデータを書き込む。第２ＳＳＤ７は、ライトコマンドに含まれる、書き込まれるデータがコールドデータであることを示す情報に応じて、コールドデータの書き込みに適したブロック（例えば、プログラム／イレーズサイクル数が多いブロック）を書き込み先ブロックとして選択してもよい。また、第２ＳＳＤ７では、ライトコマンドで指定されたＬＢＡ範囲が、コールドデータが書き込まれた物理記憶領域にマッピングされるように、第２ＳＳＤ７内のＬＵＴが更新される。以上により、ホスト２は、第２ＳＳＤ７にコールドデータを書き込むことができる。
【０２１３】
このようなコールドデータの読み出しおよび書き込みにより、コールドデータを、第１ＳＳＤ３内のコールドブロックから、第２ＳＳＤ７内のホストライトのための書き込み先ブロックに移動することができる。ホスト２は、移動されたデータのＬＢＡ範囲を指定したトリムコマンドを第１ＳＳＤ３に発行する。第１ＳＳＤ３は、トリムコマンドに指定されたＬＢＡ範囲が、いずれの物理記憶領域にもマッピングされないアンマップ状態になるように、ＬＵＴ３４を更新する。したがって、コールドデータがそれまで書き込まれていたコールドブロック内の物理記憶領域は、いずれのＬＢＡにもマッピングされていない、無効データが格納される領域となる。
【０２１４】
また、ホスト２のコールドデータ管理部４３２は、あるＬＢＡ範囲のデータが、いずれのＳＳＤ３，７に格納されているかを管理する。例えば、あるＬＢＡ範囲のデータが、第１ＳＳＤ３から第２ＳＳＤ７に移動された場合、そのＬＢＡ範囲のデータがネットワーク８を介して接続された第２ＳＳＤ７に格納されていることを管理する。
【０２１５】
この管理には、例えば、ＬＢＡ範囲−ストレージ管理テーブル４１２Ａが用いられる。ＬＢＡ範囲−ストレージ管理テーブル４１２Ａについては、図２４を参照して上述した通りである。なお、あるＬＢＡ範囲のデータがネットワーク８を介して接続されている第２ＳＳＤ７に格納された場合、ＬＢＡ範囲−ストレージ管理テーブル４１２Ａにおいて、「ストレージＩＤ」の代わりに、ネットワーク上の位置が管理されてもよい。
【０２１６】
コールドデータ管理部４３２は、あるＬＢＡ範囲へのアクセスが要求された場合、ＬＢＡ範囲−ストレージ管理テーブル４１２Ａを用いて、そのＬＢＡ範囲に関連付けられたネットワーク上の位置のストレージにアクセスされるように（例えば、そのストレージに対してコマンドが発行されるように）制御する。
【０２１７】
以上の構成により、ネットワーク８を介して第２ＳＳＤ７（コールドストレージ）が設けられる場合にも、第１ＳＳＤ３（ホットストレージ）のコールドブロック内のコールドデータがその第２ＳＳＤ７に移動される。これにより、ホストライトに対する、第１ＳＳＤ３のＮＡＮＤアクセスのバンド幅を消費することなく、コールドブロック内のＯＰを回収できると共に、コールドデータとホットデータとを別々のＳＳＤ３，７に分離することができる。
【０２１８】
（第７実施形態）
第１および第２実施形態では、ホスト２がＳＳＤ３にコールドブロック内のＯＰの回収（コールドブロックＧＣの実行）を要求している。また、第３乃至第６実施形態では、ホスト２によるＳＳＤ３からのコールドデータの読み出しおよび書き込みによって、コールドブロック内のＯＰが回収されている。第７実施形態では、第１および第２実施形態と同様に、ホスト２による要求に応じてコールドブロック内のＯＰの回収を開始するが、ＳＳＤ３による別のＳＳＤ７へのコールドデータの書き込みによって、コールドブロック内のＯＰが回収される。
【０２１９】
第７実施形態に係るコンピュータシステムの構成は、第６実施形態のコンピュータシステム１Ｂにおいて、ネットワーク８を介して、ホスト２とＳＳＤ７とが接続されるだけでなく、ＳＳＤ３とＳＳＤ７も接続され、第７実施形態と第１乃至第６実施形態とでは、ＳＳＤ３のコールドブロック制御部１２３によって実行される処理の手順のみが異なる。以下、第１乃至第６実施形態と異なる点のみを説明する。
【０２２０】
図２７は、ホスト２と第１ＳＳＤ３に加えて、第２ＳＳＤ７をさらに備えるコンピュータシステム１Ｂにおける、コールドブロック内のＯＰを回収するための動作の例を示す。第１ＳＳＤ３は、ホットデータを格納するためのホットストレージであり、コールドブロックのＯＰを回収する対象となるストレージである。また、第２ＳＳＤ７は、コールドデータを格納するためのコールドストレージである。なお、コールドストレージとして、第２ＳＳＤ７の代わりにＨＤＤが用いられてもよいし、コールドストレージが複数であってもよい。第１ＳＳＤ３はＤＡＳとしてホスト２に接続されている。また、第２ＳＳＤ７は、ＮＡＳやクラウドストレージのような、ネットワーク８を介してホスト２に接続されるストレージである。さらに、第１ＳＳＤ３と第２ＳＳＤ７とは、ネットワーク８を介して接続されている。
【０２２１】
ホスト２は、第１ＳＳＤ３にコールドブロック情報３６を問い合わせる。第１ＳＳＤ３は、この問合せに応じて、コールドブロック情報３６をホスト２に送信する。コールドブロック情報３６は、例えば、コールドブロックから回収可能なＯＰ量、コールドブロックからＯＰを回収する動作のみが行われた場合の推定される処理時間または処理量、等を含む。
【０２２２】
ホスト２は、コールドブロック情報３６を用いて、第１ＳＳＤ３にコールドブロック内のＯＰの回収を指示するか否かを判定する。ホスト２は、例えば、ホスト２がアイドル状態である場合のように、コールドブロック内のＯＰを回収する動作が実行されたとしても、ホスト２からのアクセスへの影響が小さい場合に、第１ＳＳＤ３にコールドブロック内のＯＰの回収を指示する。第１ＳＳＤ３は、ホスト２による指示に応じて、コールドブロック内のＯＰを回収するための処理の実行を開始する。
【０２２３】
第１ＳＳＤ３（リード制御部１２４）は、コールドブロックのリストに示されるコールドブロックから、コールドデータ（有効データ）を読み出す。コールドブロックのリストは、例えば、コールドブロック情報３６に含まれている。ここでは、読み出されたコールドデータが、第１ＬＢＡ範囲に対応するデータであることを想定する。
【０２２４】
第１ＳＳＤ３は、第１ＬＢＡ範囲を指定した、読み出されたコールドデータを書き込むためのライトコマンドを第２ＳＳＤ７に発行する。なお、このライトコマンドには、図１７に示したように、書き込まれるデータがコールドデータであることを示す情報が含まれていてもよい。
【０２２５】
第２ＳＳＤ７は、ライトコマンドに応じて、第２ＳＳＤ７内のＮＡＮＤ型フラッシュメモリにそのコールドデータを書き込む。第２ＳＳＤ７は、ライトコマンドに含まれる、書き込まれるデータがコールドデータであることを示す情報に応じて、コールドデータの書き込みに適したブロック（例えば、プログラム／イレーズサイクル数が多いブロック）を書き込み先ブロックとして選択してもよい。また、第２ＳＳＤ７では、ライトコマンドで指定されたＬＢＡ範囲が、コールドデータが書き込まれた物理記憶領域にマッピングされるように、第２ＳＳＤ７内のＬＵＴが更新される。以上により、第１ＳＳＤ３は、第２ＳＳＤ７にコールドデータを書き込むことができる。
【０２２６】
このようなコールドデータの読み出しおよび書き込みにより、コールドデータを、第１ＳＳＤ３内のコールドブロックから、第２ＳＳＤ７内の書き込み先ブロックに移動することができる。第１ＳＳＤ３は、第２ＳＳＤ７に移動されたコールドデータの第１ＬＢＡ範囲が、第１ＳＳＤ３内のいずれの物理記憶領域にもマッピングされないアンマップ状態になるように、ＬＵＴ３４を更新する。したがって、コールドデータがそれまで書き込まれていたコールドブロック内の物理記憶領域は、いずれのＬＢＡにもマッピングされていない、無効データが格納される領域となる。
【０２２７】
そして、第１ＳＳＤ３は、第１ＬＢＡ範囲のデータが第１ＳＳＤ３から第２ＳＳＤ７に移動されたことを、ホスト２に通知する。
【０２２８】
ホスト２のコールドデータ管理部４３２は、第１ＳＳＤ３からの通知に基づき、第１ＬＢＡ範囲のデータが第２ＳＳＤ７に格納されていることを管理する。この管理には、例えば、ＬＢＡ範囲−ストレージ管理テーブル４１２Ａが用いられる。ＬＢＡ範囲−ストレージ管理テーブル４１２Ａについては、図２４を参照して上述した通りである。なお、あるＬＢＡ範囲のデータがネットワーク８を介して接続されている第２ＳＳＤ７に格納された場合、ＬＢＡ範囲−ストレージ管理テーブル４１２Ａにおいて、「ストレージＩＤ」の代わりに、ネットワーク上の位置が管理されてもよい。
【０２２９】
コールドデータ管理部４３２は、あるＬＢＡ範囲へのアクセスが要求された場合、ＬＢＡ範囲−ストレージ管理テーブル４１２Ａを用いて、そのＬＢＡ範囲に関連付けられたネットワーク上の位置のストレージにアクセスされるように（例えば、そのストレージに対してコマンドが発行されるように）制御する。
【０２３０】
以上の構成により、第１ＳＳＤ３は、ホスト２によるコールドブロック内のＯＰの回収指示に応じて、第１ＳＳＤ３（ホットストレージ）のコールドブロック内のコールドデータを第２ＳＳＤ７（コールドストレージ）に移動する。これにより、ホストライトに対する、第１ＳＳＤ３のＮＡＮＤアクセスのバンド幅を消費することなく、コールドブロック内のＯＰを回収できると共に、コールドデータとホットデータとを別々のＳＳＤ３，７に分離することができる。
【０２３１】
図２８のフローチャートは、第１ＳＳＤ３のコントローラ４によって実行されるＯＰ回収制御処理の手順の例を示す。
【０２３２】
コントローラ４は、ホスト２からコールドブロック内のＯＰの回収が指示されたか否かを判定する（ステップＳ２０１）。コールドブロック内のＯＰの回収が指示されていない場合（ステップＳ２０１のＮＯ）、ステップＳ２０１に戻る。
【０２３３】
コールドブロック内のＯＰの回収が指示された場合（ステップＳ２０１のＹＥＳ）、コントローラ４は、コールドブロックのリストに示される、あるコールドブロック内のコールドデータ（有効データ）を読み出す（ステップＳ２０２）。そして、コントローラ４は、読み出されたコールドデータが格納されていた物理記憶領域に対応するＬＢＡ範囲に、その読み出されたコールドデータを書き込むためのライトコマンドを、ネットワーク８を介して第２ＳＳＤ７に発行する（ステップＳ２０３）。第２ＳＳＤ７では、このライトコマンドに応じて、ある物理記憶領域にコールドデータを書き込む。そして、第２ＳＳＤ７では、ＬＵＴが更新され、このＬＢＡ範囲が当該物理記憶領域に関連付けられる。
【０２３４】
第２ＳＳＤ７における書き込みが完了したならば、コントローラ４は、ＬＵＴ３４を更新し、このＬＢＡ範囲をいずれの物理記憶領域にもマッピングされないアンマップ状態にして、当該ＬＢＡ範囲に対応する物理記憶領域、すなわち、コールドデータが書き込まれていた物理記憶領域のデータを無効化する（ステップＳ２０４）。そして、コントローラ４は、このＬＢＡ範囲のコールドデータが第２ＳＳＤ７に移動されたことをホスト２に通知する（ステップＳ２０５）。
【０２３５】
次いで、コントローラ４は、移動すべき別のコールドデータがあるか否かを判定する（ステップＳ２０６）。コントローラ４は、例えば、コールドブロックにまだ移動されていないコールドデータがある場合や、処理されていない別のコールドブロックがある場合に、移動すべき別のコールドデータがあると判定する。移動すべき別のコールドデータがある場合（ステップＳ２０６のＹＥＳ）、ステップＳ２０２に戻り、その別のコールドデータを第２ＳＳＤ７に移動するための処理が続行される。
【０２３６】
移動すべき別のコールドデータがない場合（ステップＳ２０６のＮＯ）、すなわち、全てのコールドデータが第２ＳＳＤ７に移動された場合、コントローラ４は、コールドブロック内のＯＰの回収完了をホスト２に通知する（ステップＳ２０７）。
【０２３７】
また、図２９のフローチャートは、ホスト２によって実行されるコールドブロック制御処理の手順の例を示す。
【０２３８】
ホスト２は、第１ＳＳＤ３にコールドブロック情報３６を問い合わせるタイミングであるか否かを判定する（ステップＳ３０１）。ホスト２は、例えば、一定時間毎に、第１ＳＳＤ３にコールドブロック情報３６を問い合わせるタイミングであると判定する。コールドブロック情報３６を問い合わせるタイミングでない場合（ステップＳ３０１のＮＯ）、ステップＳ３０１に戻る。
【０２３９】
コールドブロック情報３６を問い合わせるタイミングである場合（ステップＳ３０１のＹＥＳ）、ホスト２は、第１ＳＳＤ３にコールドブロック情報３６を問い合わせる（ステップＳ３０２）。そして、ホスト２は、第１ＳＳＤ３によって送信されたコールドブロック情報３６を受信する（ステップＳ３０３）。
【０２４０】
次いで、ホスト２は、第１ＳＳＤ３に対するコールドブロック内のＯＰの回収指示タイミングであるか否かを判定する（ステップＳ３０４）。ホスト２は、例えば、ホスト２上で同時に動作しているプロセス数が少ない等の指標に基づいて、第１ＳＳＤ３へのアクセスの頻度が低いタイミングを、コールドブロック内のＯＰの回収指示タイミングとして検出する。コールドブロック内のＯＰの回収指示タイミングでないと判定された場合（ステップＳ３０４のＮＯ）、ステップＳ３０１に戻る。
【０２４１】
一方、コールドブロック内のＯＰの回収指示タイミングであると判定された場合（ステップＳ３０４のＹＥＳ）、ホスト２は、第１ＳＳＤ３にコールドブロック内のＯＰ回収のリクエストを発行する（ステップＳ３０５）。
【０２４２】
そして、ホスト２は、第１ＳＳＤ３から、コールドデータが移動されたことを示す通知を受信したか否かを判定する（ステップＳ３０６）。この通知には、移動されたコールドデータに対応するＬＢＡ範囲を示す情報が含まれる。コールドデータが移動されたことを示す通知を受信していない場合（ステップＳ３０６のＮＯ）、ステップＳ３０６に戻る。
【０２４３】
コールドデータが移動されたことを示す通知を受信した場合（ステップＳ３０６のＹＥＳ）、その通知に示されるＬＢＡ範囲に対応するデータが第２ＳＳＤ７に格納されていることを示すように、ＬＢＡ範囲−ストレージ管理テーブル４１２Ａ内の、このＬＢＡ範囲に対応するレコードを更新する（ステップＳ３０７）。これにより、ホスト２は、ＬＢＡ範囲−ストレージ管理テーブル４１２Ａを用いて、あるＬＢＡ範囲のデータにアクセスする場合に、いずれのストレージにコマンドを発行すべきであるかを決定することができる。
【０２４４】
そして、ホスト２は、ＯＰ回収の完了通知を受信したか否かを判定する（ステップＳ３０８）。完了通知を受信していない場合（ステップＳ３０８のＮＯ）、ステップＳ３０６に戻る。一方、完了通知を受信した場合（ステップＳ３０８のＹＥＳ）、処理を終了する。
【０２４５】
以上の構成により、ネットワーク８を介して第２ＳＳＤ７（コールドストレージ）が設けられる場合に、ホスト２による要求に応じた第１ＳＳＤ３（ホットストレージ）の動作によって、第１ＳＳＤ３のコールドブロック内のコールドデータがその第２ＳＳＤ７に移動される。これにより、第１ＳＳＤ３のＮＡＮＤアクセスのバンド幅を消費することなく、コールドブロック内のＯＰを回収できると共に、コールドデータとホットデータとを別々のＳＳＤ３，７に分離することができる。
【０２４６】
図３０は、第１乃至第７実施形態のいずれかにおいてホスト２として機能する情報処理装置（コンピューティングデバイス）のハードウェア構成例を示す。
【０２４７】
この情報処理装置は、サーバ（例えば、ストレージサーバ）のようなコンピューティングデバイスとして実現される。この情報処理装置は、プロセッサ（ＣＰＵ）１０１、メインメモリ１０２、ＢＩＯＳ−ＲＯＭ１０３、ネットワークコントローラ１０５、周辺インタフェースコントローラ１０６、コントローラ１０７、およびエンベデッドコントローラ（ＥＣ）１０８等を含む。
【０２４８】
プロセッサ１０１は、この情報処理装置の各コンポーネントの動作を制御するように構成されたＣＰＵである。このプロセッサ１０１は、複数のＳＳＤ３のいずれか１つからメインメモリ１０２にロードされる様々なプログラムを実行する。メインメモリ１０２は、ＤＲＡＭのようなランダムアクセスメモリから構成される。プロセッサ１０１によって実行されるプログラムは、上述のアプリケーションレイヤ４１、ＯＳ４２、ファイルシステム４３を含む。
【０２４９】
また、プロセッサ１０１は、不揮発性メモリであるＢＩＯＳ−ＲＯＭ１０３に格納された基本入出力システム（ＢＩＯＳ）も実行する。ＢＩＯＳはハードウェア制御のためのシステムプログラムである。
【０２５０】
ネットワークコントローラ１０５は、有線ＬＡＮコントローラ、無線ＬＡＮコントローラのような通信デバイスである。ネットワークコントローラ１０５を用いた有線通信または無線通信により、例えば、ＳＳＤ７のようなストレージデバイスとの間でデータを送受信することもできる。
【０２５１】
周辺インタフェースコントローラ１０６は、ＵＳＢデバイスのような周辺デバイスとの通信を実行するように構成されている。
【０２５２】
コントローラ１０７は、複数のコネクタ１０７Ａにそれぞれ接続されるデバイスとの通信を実行するように構成されている。複数のＳＳＤ３が複数のコネクタ１０７Ａにそれぞれ接続されてもよい。コントローラ１０７は、ＳＡＳ  ｅｘｐａｎｄｅｒ、ＰＣＩｅ  Ｓｗｉｔｃｈ、ＰＣＩｅ  ｅｘｐａｎｄｅｒ、フラッシュアレイコントローラ、またはＲＡＩＤコントローラ等である。
【０２５３】
ＥＣ１０８は、情報処理装置の電力管理を実行するように構成されたシステムコントローラとして機能する。ＥＣ１０８は、ユーザによる電源スイッチの操作に応じて情報処理装置をパワーオンおよびパワーオフする。ＥＣ１０８はワンチップマイクロコントローラのような処理回路として実現されている。ＥＣ１０８は、キーボードなどの入力デバイスを制御するキーボードコントローラを内蔵していてもよい。
【０２５４】
以上説明したように、第１乃至第７実施形態によれば、ホストからのアクセスへの影響を軽減しながら、コールドブロック内の余剰容量（ＯＰ）を回収することができる。例えば、ＳＳＤ３のコントローラ４は、ＮＡＮＤ型フラッシュメモリ５に格納されているコールドデータに対応する第１論理アドレス範囲と、コールドデータを含むコールドブロックをデータを書き込み可能なブロックにするための処理量とを示すコールドブロック情報３６をホスト２に送信する。ホスト２のプロセッサ１０１は、このコールドブロック情報３６を受信し、第１論理アドレス範囲を指定したリードコマンドをＳＳＤ３に発行する。コントローラ４は、このリードコマンドに応じて、ＮＡＮＤ型フラッシュメモリ５からコールドデータを読み出してホスト２に送信する。プロセッサ１０１は、コールドデータを受信し、第１論理アドレス範囲を指定した、受信したコールドデータを書き込むためのライトコマンドをＳＳＤ３に発行する。コントローラ４は、このライトコマンドに応じて受信されるコールドデータを、ＮＡＮＤ型フラッシュメモリ５に書き込む。
【０２５５】
このようなコンピュータシステム１において、ホスト２は、リードコマンドおよびライトコマンドが発行されるタイミングを制御できるので、ホスト２にとって予期しないタイミングでホストライトに対するＮＡＮＤアクセスのバンド幅が消費されることなく、ＳＳＤ３に格納されているコールドブロック内のＯＰを回収することができる。ホスト２は、ＳＳＤ３に格納されているコールドデータの状況を把握することができ、その用途に応じて適切な管理を行うことができる。
【０２５６】
また、第１乃至第７実施形態に記載された様々な機能の各々は、回路（処理回路）によって実現されてもよい。処理回路の例には、中央処理装置（ＣＰＵ）のような、プログラムされたプロセッサが含まれる。このプロセッサは、メモリに格納されたコンピュータプログラム（命令群）を実行することによって、記載された機能それぞれを実行する。このプロセッサは、電気回路を含むマイクロプロセッサであってもよい。処理回路の例には、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、マイクロコントローラ、コントローラ、他の電気回路部品も含まれる。これら実施形態に記載されたＣＰＵ以外の他のコンポーネントの各々もまた処理回路によって実現されてもよい。
【０２５７】
また、第１乃至第７実施形態の各種処理はコンピュータプログラムによって実現することができるので、このコンピュータプログラムを格納したコンピュータ読み取り可能な記憶媒体を通じてこのコンピュータプログラムをコンピュータにインストールして実行するだけで、これら実施形態と同様の効果を容易に実現することができる。
【０２５８】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２５９】
１…コンピュータシステム、２…ホスト、３…ＳＳＤ、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、６…ＤＲＡＭ、１０…バス、１１…ホストＩ／Ｆ、１２…ＣＰＵ、１３…ＮＡＮＤ  Ｉ／Ｆ、１４…ＤＲＡＭ  Ｉ／Ｆ、１２１…コールドブロック制御Ｉ／Ｆ部、１２２…ブロック管理部、１２３…コールドブロック制御部、１２４…リード制御部、１２５…ライト制御部、１２６…ＧＣ制御部、１２７…コールドブロックＧＣ制御部、３１…リードバッファ、３２…ライトバッファ、３３…ＧＣバッファ、３４…ＬＵＴ、３５…ブロック管理情報、３６…コールドブロック情報、４３１…コールドブロック制御Ｉ／Ｆ部、４３２…コールドデータ管理部。
【図１】
2019169101.tif 000003
【図２】
2019169101.tif 000004
【図３】
2019169101.tif 000005
【図４】
2019169101.tif 000006
【図５】
2019169101.tif 000007
【図６】
2019169101.tif 000008
【図７】
2019169101.tif 000009
【図８】
2019169101.tif 000010
【図９】
2019169101.tif 000011
【図１０】
2019169101.tif 000012
【図１１】
2019169101.tif 000013
【図１２】
2019169101.tif 000014
【図１３】
2019169101.tif 000015
【図１４】
2019169101.tif 000016
【図１５】
2019169101.tif 000017
【図１６】
2019169101.tif 000018
【図１７】
2019169101.tif 000019
【図１８】
2019169101.tif 000020
【図１９】
2019169101.tif 000021
【図２０】
2019169101.tif 000022
【図２１】
2019169101.tif 000023
【図２２】
2019169101.tif 000024
【図２３】
2019169101.tif 000025
【図２４】
2019169101.tif 000026
【図２５】
2019169101.tif 000027
【図２６】
2019169101.tif 000028
【図２７】
2019169101.tif 000029
【図２８】
2019169101.tif 000030
【図２９】
2019169101.tif 000031
【図３０】
2019169101.tif 000032