(57)【特許請求の範囲】
【請求項１】
それぞれがデータを格納する複数のブロックを複数のＦｌａｓｈメモリチップと、前記複数のＦｌａｓｈメモリチップに対するデータの書き込みおよび前記複数のＦｌａｓｈメモリチップからのデータの読み取りを制御するプロセッサと、前記複数のブロックのそれぞれについて内部制御が実行中か否かを管理するブロック管理情報を格納するメモリと、を有するＦｌａｓｈコントローラと、を備えるＦｌａｓｈボックスと、
前記Ｆｌａｓｈボックスの前記Ｆｌａｓｈコントローラに対してアクセス要求コマンドを送信するストレージコントローラと、
を備え、
前記ストレージコントローラは、
前記Ｆｌａｓｈコントローラに対して前記アクセス要求コマンドを送信する前に、前記Ｆｌａｓｈコントローラに対して問い合わせ要求コマンドを送信し、
前記Ｆｌａｓｈコントローラのプロセッサは、前記問い合わせ要求コマンドを受信すると、前記問い合わせ要求コマンドの対象となる対象ブロックを特定し、前記ブロック管理情報を参照して前記Ｆｌａｓｈボックス内部における前記複数のＦｌａｓｈメモリチップのうちの前記対象ブロックに対する内部制御を実行中か否かを判断し、前記内部制御を実行していない場合は前記ストレージコントローラに対してデータ転送許可応答を送信し、
前記ストレージコントローラは、前記データ転送許可応答を受信した後に、前記アクセス要求コマンドを前記Ｆｌａｓｈコントローラに対して送信する
ことを特徴とするストレージ装置。
【請求項２】
前記ストレージコントローラは、
前記アクセス要求コマンドに対する応答として前記データ転送許可応答を前記Ｆｌａｓｈコントローラから受け取らなかった場合は他の処理を実行し、その後に、前記問い合わせ要求コマンドを前記Ｆｌａｓｈコントローラに対して改めて送信し、
前記Ｆｌａｓｈメモリチップに対して所定サイズ以上のデータを書き込む要求またはシーケンシャルライトを実行する要求を発行する前に、前記Ｆｌａｓｈメモリチップにデータを書き込むことができる容量を確保するためのガベージコレクションを実行するよう前記Ｆｌａｓｈコントローラに要求し、
前記Ｆｌａｓｈメモリチップ上の記憶領域に割り当てた論理ユニットを削除する際に、前記論理ユニットに対応する前記Ｆｌａｓｈメモリチップ上の記憶領域を解放するよう前記Ｆｌａｓｈコントローラに通知し、
前記Ｆｌａｓｈメモリチップ上の記憶領域に仮想的な記憶領域であるセグメントを割り当て、
前記セグメントを移動または削除する際に、前記セグメントが移動または削除された前記Ｆｌａｓｈメモリチップ上の記憶領域を解放するよう前記Ｆｌａｓｈコントローラに通知し、
前記Ｆｌａｓｈメモリチップに対する書込頻度を前記Ｆｌａｓｈボックス間で平準化し、
前記Ｆｌａｓｈメモリチップに対する書込頻度が前記Ｆｌａｓｈボックス間で平準化されるように前記セグメントを割り当て、
前記Ｆｌａｓｈコントローラは、
前記Ｆｌａｓｈメモリチップにデータを書き込むことができる容量を確保するためのガベージコレクションを実行し、
前記ガベージコレクションを実行している間に前記ストレージコントローラから前記問い合わせ要求コマンドを受信した場合は、前記ストレージコントローラに対して前記データ転送許可応答を送信せず、
前記ストレージコントローラより、前記ガベージコレクションを実行する要求を受け取ると、前記Ｆｌａｓｈメモリチップに対して前記ガベージコレクションを開始し、
前記Ｆｌａｓｈメモリチップに対して所定サイズ以上のデータを書き込む要求またはシーケンシャルライトを実行する要求を前記ストレージコントローラから受け取ると、前記所定サイズ以上のデータを前記Ｆｌａｓｈメモリチップに書き込む処理を開始する前に前記ガベージコレクションを開始し、
前記ストレージコントローラより、前記論理ユニットに対応する前記Ｆｌａｓｈメモリチップ上の記憶領域を解放すべき旨の通知を受け取ると、前記論理ユニットに対応する前記Ｆｌａｓｈメモリチップ上の記憶領域を解放し、
前記ストレージコントローラより、前記セグメントが移動または削除された後の前記Ｆｌａｓｈメモリチップ上の記憶領域を解放すべき旨の通知を受け取ると、前記セグメントが移動または削除された前記Ｆｌａｓｈメモリチップ上の記憶領域を解放し、
前記Ｆｌａｓｈメモリチップに対する書込頻度を前記ストレージコントローラに通知する
ことを特徴とする請求項１記載のストレージ装置。
【請求項３】
前記ストレージコントローラは、
前記アクセス要求コマンドに対する応答として前記データ転送許可応答を前記Ｆｌａｓｈコントローラから受け取らなかった場合は他の処理を実行する
ことを特徴とする請求項１記載のストレージ装置。
【請求項４】
前記ストレージコントローラは、
前記他の処理を実行した後、前記問い合わせ要求コマンドを前記Ｆｌａｓｈコントローラに対して改めて送信する
ことを特徴とする請求項３記載のストレージ装置。
【請求項５】
前記Ｆｌａｓｈコントローラは、
前記Ｆｌａｓｈメモリチップにデータを書き込むことができる容量を確保するためのガベージコレクションを実行し、
前記ガベージコレクションを実行している間に前記ストレージコントローラから前記問い合わせ要求コマンドを受信した場合は、前記ストレージコントローラに対して前記データ転送許可応答を送信しない
ことを特徴とする請求項１記載のストレージ装置。
【請求項６】
前記ストレージコントローラは、
前記Ｆｌａｓｈメモリチップに対して所定サイズ以上のデータを書き込む要求またはシーケンシャルライトを実行する要求を発行する前に、前記ガベージコレクションを実行するよう前記Ｆｌａｓｈコントローラに要求し、
前記Ｆｌａｓｈコントローラは、
前記ストレージコントローラよりその要求を受け取ると、前記Ｆｌａｓｈメモリチップに対して前記ガベージコレクションを開始する
ことを特徴とする請求項５記載のストレージ装置。
【請求項７】
前記Ｆｌａｓｈコントローラは、
前記Ｆｌａｓｈメモリチップに対して所定サイズ以上のデータを書き込む要求またはシーケンシャルライトを実行する要求を前記ストレージコントローラから受け取ったとき、
前記所定サイズ以上のデータを前記Ｆｌａｓｈメモリチップに書き込む処理を開始する前に前記ガベージコレクションを開始する
ことを特徴とする請求項５記載のストレージ装置。
【請求項８】
前記ストレージコントローラは、
前記Ｆｌａｓｈメモリチップ上の記憶領域に割り当てた論理ユニットを削除する際に、前記論理ユニットに対応する前記Ｆｌａｓｈメモリチップ上の記憶領域を解放するよう前記Ｆｌａｓｈコントローラに通知し、
前記Ｆｌａｓｈコントローラは、
前記ストレージコントローラより前記通知を受け取ると、前記論理ユニットに対応する前記Ｆｌａｓｈメモリチップ上の記憶領域を解放する
ことを特徴とする請求項１記載のストレージ装置。
【請求項９】
前記ストレージコントローラは、
前記Ｆｌａｓｈメモリチップ上の記憶領域に仮想的な記憶領域であるセグメントを割り当て、
前記セグメントを移動または削除する際に、前記セグメントが移動または削除された前記Ｆｌａｓｈメモリチップ上の記憶領域を解放するよう前記Ｆｌａｓｈコントローラに通知し、
前記Ｆｌａｓｈコントローラは、
前記ストレージコントローラより前記通知を受け取ると、前記セグメントが移動または削除された前記Ｆｌａｓｈメモリチップ上の記憶領域を解放する
ことを特徴とする請求項１記載のストレージ装置。
【請求項１０】
前記Ｆｌａｓｈコントローラは、
前記Ｆｌａｓｈメモリチップに対する書込頻度を前記ストレージコントローラに通知し、
前記ストレージコントローラは、
前記Ｆｌａｓｈメモリチップに対する書込頻度を前記Ｆｌａｓｈボックス間で平準化する
ことを特徴とする請求項１記載のストレージ装置。
【請求項１１】
前記Ｆｌａｓｈコントローラは、
前記Ｆｌａｓｈメモリチップに対する書込頻度を前記ストレージコントローラに通知し、
前記ストレージコントローラは、
前記Ｆｌａｓｈメモリチップ上の記憶領域に仮想的な記憶領域であるセグメントを割り当て、
前記Ｆｌａｓｈメモリチップに対する書込頻度が前記Ｆｌａｓｈボックス間で平準化されるように前記セグメントを割り当てる
ことを特徴とする請求項１記載のストレージ装置。
【請求項１２】
前記Ｆｌａｓｈコントローラは、前記複数のＦｌａｓｈメモリチップが有する物理記憶領域に論理記憶領域を対応付けて前記ストレージコントローラに提供し、
前記ストレージコントローラは、前記Ｆｌａｓｈコントローラに対して、前記論理記憶領域におけるアドレスを指定して前記アクセス要求コマンドおよび前記問い合わせ要求コマンドを送信する
ことを特徴とする請求項１記載のストレージ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置に関するものである。
【背景技術】
【０００２】
ストレージ装置は、データを格納するディスクとディスクを制御するコントローラとを有し、ストレージ装置に接続されたホストや計算機に大容量のデータ格納空間を提供することを目的とした、記憶装置である。
【０００３】
ストレージ装置は、複数のディスクをＲＡＩＤ（Redundant Array of Independent（or Inexpensive）Disks）構成で使用することにより、Ｉ／Ｏ処理を高速化したり、ディスクの故障に対する高い耐障害性を発揮したりすることができる。
【０００４】
下記特許文献１には、ＨＤＤ（Hard Disk Drive）を記録メディアとして搭載したストレージ装置が記載されている。
【０００５】
一方近年では、新しい記録メディアとして、Ｆｌａｓｈメモリが注目されている。Ｆｌａｓｈメモリの特徴は、ＨＤＤよりも高速に読み書きが可能である点である。たとえば、ＨＤＤでは読み出し、書込みの所要時間はともに数ｍｓオーダーであるのに対し、ＮＡＮＤＦｌａｓｈメモリの性能データ例として、読み出し時間が２５μｓ、書込み時間は３００μｓというものがある。
【０００６】
また、ＦｌａｓｈメモリはＨＤＤとは異なり、一度データを書き込んだ物理領域は、データの書き換えができないという特徴も有している。データの書き換えを行うためには、「Ｂｌｏｃｋ」と呼ばれる単位で一度データを消去する必要があるが、Ｆｌａｓｈメモリには、情報を保持するセルの物理的な理由により、書込み回数の制限がある。さらに、消去時間には１ｍｓ程度を要するというデータがある。
【０００７】
上記制限への対処として、上位装置に示すアドレスとセル位置との対応関係を保持しておき、Ｂｌｏｃｋ内の格納データを更新する際は、データの書込みがなされていない空きＰａｇｅに更新対象データを格納して元の格納データを無効化する制御方法が、Ｆｌａｓｈメモリでは一般的に用いられている。しかし、データ更新を繰り返すにつれ、空きＰａｇｅは減少を続けるため、空きＰａｇｅの不足を解消する技術として、ガベージコレクション（以下、ＧＣ）という技術が公開されている。また、ＧＣの他に、各セルに書き込まれる回数を均等化する、ウエアレベリング（以下、ＷＬ）という技術もある。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００５−１８２１０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上述のように、Ｆｌａｓｈメモリは読み出しは非常に高速であるものの、書込みおよび消去は低速なデバイスであるといえる。また制御面では、ＧＣやＷＬ等、従来のＨＤＤには存在しない制御が必要である。
【００１０】
例えば、データ書込み（以下、ライト）時に、更新データを格納するための空きＰａｇｅが十分に存在しない場合には、一度ＧＣを実施して空きＰａｇｅを確保し、その後、確保した空きＰａｇｅにデータを格納する。この場合、ライト処理が完了するのに要する時間は、ＧＣ処理時間＋実際のデータライト時間となる。特に、Ｆｌａｓｈメモリでは、データ書き込みおよび消去に要する時間が長いため、場合によっては、処理完了までに数ｍｓを要してしまい、性能がＨＤＤと同等かそれ以下にまで低下する可能性がある。
【００１１】
図１は、Ｆｌａｓｈメモリに関する上記課題を説明する図である。ストレージシステムを制御するストレージコントローラが、フラッシュメモリを制御するＦｌａｓｈコントローラに対してライト要求処理を行ったときに、フラッシュメモリ内でＧＣ＋ライト（図１中では、Ｐｒｏｇｒａｍとして表記）動作を実行すると、ストレージコントローラはライト完了まで長時間待たされることとなる。この間、ストレージコントローラは、データを一時的に格納するためのキャッシュメモリなど、デバイスのリソースを消費し続けることとなり、これが性能低下の原因となり得る。
【００１２】
本発明は、上記のような課題を解決するためになされたものであり、Ｆｌａｓｈメモリを記録メディアとして採用したストレージ装置において、Ｆｌａｓｈメモリに対するアクセス性能を向上させることを目的とする。
【課題を解決するための手段】
【００１３】
本発明に係るストレージ装置において、ストレージコントローラは、Ｆｌａｓｈメモリにアクセスする前に、Ｆｌａｓｈメモリにアクセスすることができるか否かをＦｌａｓｈコントローラに問い合わせる。
【発明の効果】
【００１４】
本発明に係るストレージ装置によれば、Ｆｌａｓｈメモリに対するアクセス可否を事前に問い合わせることにより、アクセス不可時の待ち時間を低減することができる。これにより、Ｆｌａｓｈメモリに対する実質的なアクセス性能を向上させることができる。
【図面の簡単な説明】
【００１５】
【図１】Ｆｌａｓｈメモリに関する上記課題を説明する図である。
【図２】実施の形態１に係るストレージシステム１００００の構成を示す図である。
【図３】メモリ１４０の構成図である。
【図４】ＬＵのアドレス空間を管理するための、ＬＵ管理テーブル１４２２の構成図である。
【図５】メモリ管理テーブルの１４２３の構成図である。
【図６】転送リスト１４２４の構成図である。
【図７】転送終了リスト１４２５の構成図である。
【図８】Ｆｌａｓｈ  Ｂｏｘ２１０の構成図である。
【図９】Ｆｌａｓｈメモリチップ２３１の構成図である。
【図１０】アドレス割当ての説明図である。
【図１１】メモリ２２４の構成図である。
【図１２】アドレス管理テーブル２２４２２の構成図である。
【図１３】Ｂｌｏｃｋ管理テーブル２２４２３の構成図である。
【図１４】ストレージ装置１０の基本Ｉ／Ｏシーケンスを説明するフローチャートである。
【図１５】ストレージコントローラ１００が実行するＩ／Ｏ処理プログラムの動作フロー図である。
【図１６】図１５のステップＳ１５０の詳細フローチャートである。
【図１７】ストレージコントローラ１００とＦｌａｓｈコントローラ２２０の間でやり取りされる、要求コマンド１０００と応答コマンド２０００の構成図である。
【図１８】ステップＳ１５３の詳細を示すフローチャートである。
【図１９】ステップＳ１５３３の詳細フローチャートである。
【図２０】実施形態１においてストレージコントローラ１００がＦｌａｓｈメモリチップ２３１にアクセスする際の概略シーケンスを示す図である。
【図２１】実施の形態２においてストレージコントローラ１００が実行するＩ／Ｏ処理プログラムの動作フロー図である。
【図２２】ステップＳ２４０の詳細フローである。
【図２３】実施形態２においてストレージコントローラ１００がＦｌａｓｈメモリチップ２３１にアクセスする際の概略シーケンスを示す図である。
【図２４】ストレージコントローラ１００からＦｌａｓｈコントローラ２２０に対して、Ｂｌｏｃｋ２３２を解放するよう要求する処理のフローチャートである。
【図２５】実施形態４におけるメモリ１４０の構成図である。
【図２６】セグメント管理テーブル１４２６の構成図である。
【図２７】ＬＵ管理テーブル１４２７の構成図である。
【図２８】統計情報管理テーブル１４２８の構成図である。
【図２９】ストレージコントローラ１００がＦｌａｓｈ  Ｂｏｘ２１０間の負荷を均一化する処理のフローチャートである。
【発明を実施するための形態】
【００１６】
＜実施の形態１＞
図２は、本発明の実施の形態１に係るストレージシステム１００００の構成を示す図である。ストレージシステム１００００は、ストレージ装置１０、ホスト計算機４０を備える。ホスト計算機４０は、ストレージ装置１０を利用する上位装置、例えばアプリケーションサーバである。
【００１７】
ストレージ装置１０は、ストレージコントローラ１００、Ｆｌａｓｈ  Ｂｏｘ部２００を備える。ストレージコントローラ１００は、ストレージ装置１０の動作を制御する。Ｆｌａｓｈ  Ｂｏｘ部２００は、データを格納するＦｌａｓｈメモリを有する。
【００１８】
ストレージ装置１０には、ストレージコントローラ１００のＩ／Ｆ  Ｃｈｉｐ１１０を介して、ホスト計算機４０が接続されている。ストレージ装置１０とホスト計算機４０を接続するためのインタフェースには、例えば、ＳＡＮ（Storage Area Network）２０が用いられる。ＳＡＮ２０として、例えば、ファイバチャネル、ＳＣＳＩ（Small Computer System Interface）、ｉＳＣＳＩ（internet Small Computer System Interface）、ＵＳＢ（Universal Serial Bus）、ＩＥＥＥ１３９４バス、ＳＡＳ（Serial Attached SCSI）等を用いることが可能である。ストレージ装置１０に接続されるホスト計算機４０は、複数台でもよい。また、ＳＡＮ２０に代えて、他種のインタフェースを採用することもできる。
【００１９】
ホスト計算機４０には、ストレージ装置１０に対して制御コマンドなどを発行する制御ソフトウェアがインストールされている。ストレージ装置１０のストレージコントローラ１００は、その制御コマンドなどを受け取り、自己が備える制御ソフトウェアを実行することにより、ストレージ装置１０の動作を制御する。ストレージ装置１０とホスト計算機４０は、例えばＬＡＮ（Local Area Network）３０を経由して通信するため、ストレージコントローラ１００は、ストレージ装置１０がＬＡＮ３０と接続するためのインタフェースであるＮＩＣ（Network Interface Card）１２０を備えている。ストレージ装置１０の管理、制御あるいは保守を行う計算機として、ホスト計算機４０とは別の計算機を使用することもできる。また、ＬＡＮ３０に代えて他種の通信ネットワークを利用することもできる。
【００２０】
さらにストレージコントローラ１００は、ＡＳＩＣｓ（Application Specific Integrated Circuits）１５０、ＣＰＵ（Central Processing Unit）１３０、メモリ１４０、Ｉ／Ｆ  Ｃｈｉｐ１６０を備える。ＡＳＩＣｓ１５０は、ＲＡＩＤを構築した際にパリティ演算等を行う。ＣＰＵ１３０は、ストレージ装置１０全体を制御する。メモリ１４０は、ＣＰＵ１３０がストレージ装置１０を制御するために必要なコンピュータプログラムやデータを記憶する。Ｉ／Ｆ  Ｃｈｉｐ１６０は、ストレージコントローラ１００とＦｌａｓｈ  Ｂｏｘ部２００を接続する。
【００２１】
ＡＳＩＣｓ１５０は、ＤＭＡ（Direct Memory Access）転送部１５１を有している。ＤＭＡ転送部１５１は、メモリ１４０内に格納される転送リストにしたがってデータ転送を実施する。なお、Ｉ／Ｆ  Ｃｈｉｐ１１０や１６０等、ＡＳＩＣｓ１５０以外のデバイスがＤＭＡ転送部１５１を有していてもよい。
【００２２】
Ｉ／Ｆ  Ｃｈｉｐ１１０、ＮＩＣ１２０、ＣＰＵ１３０、Ｉ／Ｆ  Ｃｈｉｐ１６０は、例えばＰＣＩ（Peripheral Component Interconnect）のような専用の接続バス１７０でＡＳＩＣｓ１５０に接続されている。メモリ１４０は、例えばＤＤＲ３（Double Data Rate3）のような専用の接続バス１９０でＡＳＩＣｓ１５０と接続されている。
【００２３】
ストレージコントローラ１００は、後述するＦｌａｓｈコントローラ２２０を介して、Ｆｌａｓｈメモリチップ２３１にアクセスする。以下では記載の便宜上、ストレージコントローラ１００がＦｌａｓｈメモリチップ２３１にアクセスする旨に言及するが、Ｆｌａｓｈメモリチップ２３１に実際に直接アクセスするのはＦｌａｓｈコントローラ２２０であることを付言しておく。
【００２４】
Ｆｌａｓｈ  Ｂｏｘ部２００は、複数のＦｌａｓｈ  Ｂｏｘ２１０を備える。Ｆｌａｓｈ  Ｂｏｘ部２００とストレージコントローラ１００は、Ｉ／Ｆ  Ｃｈｉｐ１６０と、ファイバチャネルやＳＡＳ等の専用バス１８０を介して接続されている。またＦｌａｓｈ  Ｂｏｘ２１０の内部には、複数のＦｌａｓｈメモリチップ２３１が搭載されている。図示はしていないが、複数のＦｌａｓｈメモリチップ２３１によってＲＡＩＤグループが構成されている。
【００２５】
図３は、メモリ１４０の構成図である。メモリ１４０は、データキャッシュ領域１４１、システム領域１４２を有する。データキャッシュ領域１４１は、ユーザデータを一時的に格納するために使用される領域である。システム領域１４２は、ストレージ装置１０を制御するためのプログラムや各種テーブルが格納されている。
【００２６】
データキャッシュ領域１４１は、任意のサイズを持つ複数のキャッシュセグメントに分割され、キャッシュセグメント単位でユーザデータ１４１１を格納する。ユーザデータ１４１１は、例えばホスト計算機４０とストレージ装置１０の間で読み書きするデータである。
【００２７】
システム領域１４２は、プログラム群１４２１、ＬＵ管理テーブル１４２２、メモリ管理テーブル１４２３、転送リスト１４２４、転送終了リスト１４２５を格納する。プログラム群１４２１は、ＣＰＵ１３０が実行する各種プログラムである。ＬＵ管理テーブル１４２２は、Ｆｌａｓｈメモリ２３１のＲＡＩＤグループ内に作成されたＬＵ（Logical Unit）のアドレス空間を管理する。ＬＵは、ストレージ装置１０の記憶領域をストレージ装置１０の外部に対して提供する単位である。メモリ管理テーブル１４２３は、データキャッシュ領域１４１のキャッシュセグメントを管理する。転送リスト１４２４は、ＣＰＵ１３０がＡＳＩＣｓ１５０に対しＤＭＡ転送を指示するために使用される。転送終了リスト１４２５は、ＡＳＩＣｓ１５０がＣＰＵ１３０に対しＤＭＡ転送終了を通知するために使用される。
【００２８】
図４は、ＬＵのアドレス空間を管理するための、ＬＵ管理テーブル１４２２の構成図である。ＬＵ管理テーブル１４２２は、ＬＵＮ（Logical Unit Number）１４２２１、Ｆｌａｓｈ  Ｂｏｘ  Ｎｏ１４２２２、ＳＴＡＲＴ  ＬＢＡ１４２２３、ＬＡＳＴ  ＬＢＡ１４２２４を有する。
【００２９】
ＬＵＮ１４２２１は、作成されたＬＵの識別子であり、それぞれのＬＵにユニークな数字が割り当てられている。Ｆｌａｓｈ  Ｂｏｘ  Ｎｏ１４２２２は、ＬＵが作成されているＦｌａｓｈ  Ｂｏｘ２１０の番号を示している。ＳＴＡＲＴ  ＬＢＡ１４２２３およびＬＡＳＴ  ＬＢＡ１４２２４は、ＬＵのアドレス空間がＦｌａｓｈ  Ｂｏｘ２１０内のどの位置に対応するかを示すものであり、開始アドレスと終了アドレスをそれぞれＬＢＡ（Logical Block Address）で示している。
【００３０】
図５は、メモリ管理テーブルの１４２３の構成図である。メモリ管理テーブルの１４２３は、キャッシュセグメントＮｏ１４２３１、ＬＵＮ１４２３２、ＬＢＡ１４２３３、ＬＥＮＧＴＨ１４２３４を有する。
【００３１】
キャッシュセグメントＮｏ１４２３１は、データキャッシュ領域１４１のキャッシュセグメントの識別子であり、それぞれユニークな数字が割り当てられている。ＬＵＮ１４２３２、ＬＢＡ１４２３３、ＬＥＮＧＴＨ１４２３４は、キャッシュセグメントに格納されているユーザデータを管理するための情報である。ＬＵＮ１４２３２は、当該データが格納されているＬＵの識別番号を示す。ＬＢＡ１４２３３は、当該データの先頭アドレスを示す。ＬＥＮＧＴＨ１４２３４は、当該データのデータ長を示す。
【００３２】
図６は、転送リスト１４２４の構成図である。転送リスト１４２４は、リストＮｏ１４２４１、転送元１４２４２、転送先１４２４３、キャッシュセグメントＮｏ１４２４４、ＬＥＮＧＴＨ１４２４５、ＬＵＮ１４２４６、ＬＢＡ１４２４７を有する。
【００３３】
リストＮｏ１４２４１は、各転送リストの識別子であり、ユニークな数字が割り当てられている。転送元１４２４２および転送先１４２４３は、データ転送方向を管理するためのパラメータである。例えば、転送元が「Ｍｅｍ」、転送先が「ＦＥ（Ｆｒｏｎｔ  Ｅｎｄ）」となっている場合は、メモリ１４０からＩ／Ｆ  Ｃｈｉｐ１１０の方向に向かってデータ転送を行うことを示している。また、転送元が「Ｍｅｍ」、転送先が「ＢＥ（Ｂａｃｋ  Ｅｎｄ）」となっている場合は、メモリ１４０からＩ／Ｆ  Ｃｈｉｐ１６０の方向に向かってデータ転送を行うことを示している。キャッシュセグメントＮｏ１４２４４およびＬＥＮＧＴＨ１４２４５は、ＤＭＡ転送する対象であるデータが格納される（もしくは、格納されている）キャッシュセグメントの位置と、転送対象データのサイズをそれぞれ示す。ＬＵＮ１４２４６とＬＢＡ１４２４７は、転送対象データが属するＬＵの識別番号と先頭アドレスをそれぞれ示している。
【００３４】
図７は、転送終了リスト１４２５の構成図である。転送終了リスト１４２５は、転送リストＮｏ１４２５１を有する。転送リストＮｏ１４２５１は、転送が終了したリストＮｏ１４２４１の値を格納する。転送終了リスト１４２５を参照することで、どの転送要求が終了しているのかを確認することができる。
【００３５】
図８は、Ｆｌａｓｈ  Ｂｏｘ２１０の構成図である。Ｆｌａｓｈ  Ｂｏｘ２１０は、Ｆｌａｓｈコントローラ２２０、ｍｅｍｏｒｙ  ａｒｒａｙ２３０を備える。Ｆｌａｓｈコントローラ２２０は、Ｆｌａｓｈ  Ｂｏｘ２１０全体を制御する。ｍｅｍｏｒｙ  ａｒｒａｙ２３０は、複数のＦｌａｓｈメモリチップ２３１より構成される。
【００３６】
Ｆｌａｓｈコントローラ２２０は、Ｉ／Ｆ  Ｃｈｉｐ２２１、ＣＰＵ２２２、ＡＳＩＣｓ２２３、メモリ２２４を備える。
【００３７】
Ｉ／Ｆ  Ｃｈｉｐ２２１は、Ｆｌａｓｈコントローラ２２０とストレージコントローラ１００とを接続するために用いられる。Ｉ／Ｆ  Ｃｈｉｐ２２１とストレージコントローラ１００は、前述の接続バス１８０を介して接続されている。ＣＰＵ２２２は、Ｆｌａｓｈ  Ｂｏｘ２１０全体を制御する。メモリ２２４は、ＣＰＵ２２２がＦｌａｓｈ  Ｂｏｘ２１０を制御するために必要なコンピュータプログラムやデータを記憶する。ＡＳＩＣｓ２２３は、ＧＣやＷＬなどＦｌａｓｈ  Ｍｅｍｏｒｙ  Ｃｈｉｐ２３１を制御するための機能を提供する。
【００３８】
ＡＳＩＣｓ２２３は、ＤＭＡ転送部２２３１、Ｍｅｍｏｒｙコントローラ（Ｍｅｍ  ＣＴＬ）２２３２を備える。Ｍｅｍｏｒｙコントローラ２２３２は、Ｆｌａｓｈメモリチップ２３１に対するリード、ライト、消去等の基本的な動作を管理する。これらの機能部は、ＡＳＩＣｓ２２３以外のデバイスが有していてもよい。また、メモリコントローラ２２３２が単体で存在してもよい。
【００３９】
ＡＳＩＣｓ２２３は、ＰＣＩ等の専用バス２２５でＣＰＵ２２２およびＩ／Ｆ  Ｃｈｉｐ２２１と接続されている。またＡＳＩＣｓ２２３は、ＤＤＲ３等の専用バス２２６でメモリ２２４と接続されている。さらにＡＳＩＣｓ２２３は、Ｍｅｍｏｒｙコントローラ２２３２を介して、専用バス２２７でＦｌａｓｈメモリチップ２３１と接続されている。
【００４０】
図９は、Ｆｌａｓｈメモリチップ２３１の構成図である。Ｆｌａｓｈメモリチップ２３１は、複数のＢｌｏｃｋ２３２から構成されている。このＢｌｏｃｋ２３２がメモリの消去単位となる。Ｂｌｏｃｋ２３２は、Ｆｌａｓｈメモリチップ２３１の最小の読み書き単位であるＰａｇｅ２３３が複数集まって構成されている。
【００４１】
図１０は、アドレス割当ての説明図である。Ｂｌｏｃｋ２３２は、通常Ｂｌｏｃｋ２３６と代替Ｂｌｏｃｋ２３７とに属性が分類される。通常Ｂｌｏｃｋ２３２は、ストレージコントローラ１００にＬＵ空間として認識されるＢｌｏｃｋである。代替Ｂｌｏｃｋ２３７は、ＧＣやＷＬが実行される際のデータ移行先、または通常Ｂｌｏｃｋ故障時の交換対象として使用される。これらの属性は各Ｂｌｏｃｋ２３２に固定のものではなく、各Ｂｌｏｃｋ２３２の使用状況に応じて随時変更される。
【００４２】
さらに、通常Ｂｌｏｃｋ２３６内のＰａｇｅ２３３は、ベース領域２３４と、更新領域２３５とに分類される。ベース領域２３４は、上位装置に実際のアドレス空間として提供される領域であり、更新領域２３５はＰａｇｅ更新が発生した際に更新対象データを格納するための領域である。ゆえに、厳密にはベース領域２３４に属するＰａｇｅ２３３の合計の物理アドレス空間が、論理的なアドレス空間としてストレージコントローラ１００に対して提供される。
【００４３】
ストレージコントローラ１００から見た論理アドレス空間は一意であるが、特定の論理アドレス空間を提供する物理Ｂｌｏｃｋは、随時変更される。ゆえに、ストレージコントローラ１００がＬＢＡとして認識する論理アドレスは常に一様である。本実施形態１では、ベース領域２３４と更新領域２３５とが同一のＢｌｏｃｋ内に存在する例を示したが、それぞれの領域をＢｌｏｃｋ単位で構成してもよい。
【００４４】
図１１は、メモリ２２４の構成図である。メモリ２２４は、データキャッシュ領域２２４１、システム領域２２４２を有する。データキャッシュ領域２２４１は、ユーザデータを一時的に格納するために使用される領域である。システム領域２２４２は、Ｆｌａｓｈ  Ｂｏｘ２１０を制御するためのプログラムや各種テーブルを格納する。
【００４５】
データキャッシュ領域２２４１は、任意のサイズを持つ複数のキャッシュセグメントに分割され、キャッシュセグメント単位でユーザデータ２２４１１を格納する。
【００４６】
システム領域２２４２は、プログラム群２２４２１、アドレス管理テーブル２２４２２、Ｂｌｏｃｋ管理テーブル２２４２３、転送リスト２２４２４を格納する。プログラム群２２４２１は、ＣＰＵ２２２が実行する各種プログラムである。アドレス管理テーブル２２４２２は、論理アドレスと物理アドレスの対応を管理する。Ｂｌｏｃｋ管理テーブル２２４２３は、Ｂｌｏｃｋ２３２の状態を管理する。転送リスト２２４２４は、ＡＳＩＣｓ２２３がＤＭＡ転送を行う際に使用する。
【００４７】
図１２は、アドレス管理テーブル２２４２２の構成図である。アドレス管理テーブル２２４２２は、ＳＴＡＲＴ  ＬＢＡ２２４２２１、Ｃｈｉｐ  Ｎｏ２２４２２２、Ｂｌｏｃｋ  Ｎｏ２２４２２３、Ｐａｇｅ  Ｎｏ２２４２２４を有する。
【００４８】
ＳＴＡＲＴ  ＬＢＡ２２４２２１は、ストレージコントローラ１００が認識するＬＢＡのオフセット値である。本数値は、Ｆｌａｓｈメモリチップ２３１の最小のリード／ライト単位である、Ｐａｇｅ２３３のサイズにより決定される。例えば、各Ｐａｇｅ２３３が２０ｈのアドレス空間を持つ場合は、ＳＴＡＲＴ  ＬＢＡ２２４２２１は、２０ｈ刻みの数値となる。Ｃｈｉｐ  Ｎｏ２２４２２２、Ｂｌｏｃｋ  Ｎｏ２２４２２３およびＰａｇｅ  Ｎｏ２２４２２４は、論理アドレスに対応するＰａｇｅ２３３を特定するための情報である。
【００４９】
図１３は、Ｂｌｏｃｋ管理テーブル２２４２３の構成図である。Ｂｌｏｃｋ管理テーブル２２４２３は、Ｃｈｉｐ  Ｎｏ２２４２３１、Ｂｌｏｃｋ  Ｎｏ２２４２３２、属性２２４２３３、ステータス２２４２３４、有効Ｐａｇｅ残数２２４２３５、消去回数２２４２３６を有する。
【００５０】
Ｃｈｉｐ  Ｎｏ２２４２３１は、Ｂｌｏｃｋ２３２が所属するＦｌａｓｈメモリチップ２３１の番号を示す。Ｂｌｏｃｋ  Ｎｏ２２４２３２は、Ｆｌａｓｈメモリチップ２３１内のＢｌｏｃｋ番号を示す。各Ｂｌｏｃｋ２３２は、Ｃｈｉｐ  Ｎｏ２２４２３１とＢｌｏｃｋ  Ｎｏ２２４２３２によって識別される。属性２２４２３３は、図１０で説明したＢｌｏｃｋ２３２の属性を示すものであり、「通常」もしくは「代替」がセットされる。ステータス２２４２３４は、各Ｂｌｏｃｋ２３２の動作状況を表している。例えば、当該Ｂｌｏｃｋに対してＷＬが実行されているときは「ＷＬ」、ＧＣが実行されているときは「ＧＣ」、読み書き可能である場合は「通常」、その他のステータスについては「ｎ／ａ」がセットされる。有効Ｐａｇｅ残数２２４２３５は、更新領域２３５として割り当てられているＰａｇｅ２３３が当該Ｂｌｏｃｋ２３２内にあと何Ｐａｇｅ分残っているかを表す。ただし、当該Ｂｌｏｃｋが代替属性である場合や、ＷＬ／ＧＣのようにＰａｇｅ解放処理を実施しているような場合には、「ｎ／ａ」が設定される。消去回数２２４２３６は、当該Ｂｌｏｃｋ２３２の消去回数を表し、主に、当該Ｂｌｏｃｋ２３２が書き換え上限に達しているか否かを管理するための情報として使用される。
【００５１】
図１４は、ストレージ装置１０の基本Ｉ／Ｏシーケンスを説明するフローチャートである。以下、図１４の各ステップについて説明する。
【００５２】
（図１４：ステップＳ１０）
ストレージ装置１０は、ホスト計算機４０から、データライト要求またはデータリード要求（Ｉ／Ｏ要求）を受信する。ストレージコントローラ１００は、本フローチャートを開始する。
【００５３】
（図１４：ステップＳ２０）
ストレージコントローラ１００は、ステップＳ１０で受信した要求がリード（ＲＤ）要求であるか、ライト（ＷＲ）要求であるかを判断する。リード要求である場合はステップＳ３０へ進み、ライト要求である場合はステップＳ５０へ進む。
【００５４】
（図１４：ステップＳ３０）
ストレージコントローラ１００は、リード要求を受けたデータをＦｌａｓｈ  Ｂｏｘ２１０からメモリ１４０に転送するステージング処理を実行する。本ステップの詳細は、後述の図１５〜図１６で改めて説明する。
【００５５】
（図１４：ステップＳ４０）
ストレージコントローラ１００は、ステップＳ３０でＦｌａｓｈ  Ｂｏｘ２１０からメモリ１４０に転送したデータを、ホスト計算機４０に送信する。本ステップにより、ホスト計算機４０から依頼されたリード要求処理は終了する。
【００５６】
（図１４：ステップＳ５０）
ストレージコントローラ１００は、ホスト計算機４０に対し、ライト要求の対象であるデータを転送するよう依頼する。ストレージコントローラ１００はそのデータを受信し、メモリ１４０に格納する。
【００５７】
（図１４：ステップＳ６０）
ストレージコントローラ１００は、ホスト計算機４０に対して、転送が正常終了した旨の応答を送信する。
【００５８】
（図１４：ステップＳ７０）
ストレージコントローラ１００は、メモリ１４０に保持しているデータをＦｌａｓｈ  Ｂｏｘ２１０に格納するデステージ処理を行う。本図では、ライト要求が発生するたびにデステージ処理を実行しているが、デステージ処理は任意のタイミングで実行してもよい。この場合、ステップＳ５０〜Ｓ６０を複数回実行した後に、デステージ処理をまとめて実行することになる。これにより、１回のデステージ処理でライト対象データをＦｌａｓｈ  Ｂｏｘ２１０に対してまとめて転送することができ、処理の効率化が期待できる。
【００５９】
図１５は、ストレージコントローラ１００が実行するＩ／Ｏ処理プログラムの動作フロー図である。本フロー図は、図１４で説明したリード処理およびライト処理を実行するためのシーケンスを説明する。以下、図１５の各ステップについて説明する。なお説明の便宜上、はじめにリード処理についてまとめて説明し、次にライト処理について説明する。
【００６０】
＜実施の形態１：図１５：リード処理＞
（図１５：ステップＳ１００）
ストレージコントローラ１００は、ホスト計算機４０からＩ／Ｏ要求が到着しているか否かを判断する。Ｉ／Ｏ要求が到着していればステップＳ１１０へ進み、到着していなければステップＳ１４０へ進む。
【００６１】
（図１５：ステップＳ１１０）
ストレージコントローラ１００は、ホスト計算機４０が発行したコマンドを解析し、要求種別がＲＤかＷＲかを判断する。要求種別がＲＤである場合はステップＳ１２０へ進み、ＷＲである場合はステップＳ１３０へ進む。ここでは要求種別がＲＤであったものと過程して以下のステップを説明する。
【００６２】
（図１５：ステップＳ１２０）
ストレージコントローラ１００は、ステージング処理（Ｆｌａｓｈメモリチップ２３１に格納されているデータを読み出す処理）を実行するため、データ転送要求（ＢＥ転送要求（１））を作成する。具体的には、メモリ管理テーブル１４２３を参照し、Ｆｌａｓｈメモリチップ２３１から読み出したデータを格納すべきキャッシュセグメントを確保する。次に、転送リスト１４２４を作成する。この場合、転送元１４２４２には「ＢＥ」、転送先１４２４３には「Ｍｅｍ」が設定され、キャッシュセグメントＮｏ１４２４４には、確保したキャッシュセグメントの番号等が設定される。ストレージコントローラ１００は、再度ステップＳ１００に戻り、別のＩ／Ｏ要求が到着していないかを判断する。ここでは別のＩ／Ｏ要求は到着していないものと仮定し、ステップＳ１４０へ進む。
【００６３】
（図１５：ステップＳ１４０）
ストレージコントローラ１００は、転送リスト１４２４の有無を確認することにより、データ転送要求の有無を判断する。転送リスト１４２４が作成されている場合は、転送要求ありと判断してステップＳ１５０へ進み、転送リスト１４２４が作成されていなければステップＳ１６０へ進む。
【００６４】
（図１５：ステップＳ１５０）
ストレージコントローラ１００は、転送リスト１４２４の記述にしたがって、データ転送処理を実行する。本ステップの詳細は、後述の図１６で説明する。
【００６５】
（図１５：ステップＳ１６０）
ストレージコントローラ１００は、転送終了リスト１４２５の有無を確認することにより、ステップＳ１５０で実行したデータ転送のうち終了しているものが有るか否かを確認する。終了したデータ転送がある場合はステップＳ１８０へ進み、ない場合はステップＳ１７０へ進む。
【００６６】
（図１５：ステップＳ１７０）
ストレージコントローラ１００は、動作を継続する場合はステップＳ１００へ戻って同様の処理を繰り返し、動作を終了する場合は本フローを終了する。
【００６７】
（図１５：ステップＳ１８０）
ストレージコントローラ１００は、終了したデータ転送処理のリストＮｏ１４２５１をキーにして転送リスト１４２４を参照し、転送元１４２４２および転送先１４２４３の値を取得する。転送元１４２４２が「ＢＥ」で転送先１４２４３が「Ｍｅｍ」である場合はステップＳ１９０へ進み、転送元１４２４２が「Ｍｅｍ」で転送先１４２４３が「ＦＥ」である場合はステップＳ２２０へ進む。
【００６８】
（図１５：ステップＳ１８０：補足）
転送元１４２４２が「ＢＥ」で転送先１４２４３が「Ｍｅｍ」である場合は、Ｆｌａｓｈ  Ｂｏｘ２１０からメモリ１４０にデータを読み出す処理が完了したことが分かる。この場合はさらにメモリ１４０からホスト計算機４０へデータを転送する必要があるので、ステップＳ１９０でそのためのデータ転送要求を作成する必要がある。転送元１４２４２が「Ｍｅｍ」で転送先１４２４３が「ＦＥ」である場合は、メモリ１４０からホスト計算機４０へデータを転送する処理、すなわちリード処理が完了したことが分かる。
【００６９】
（図１５：ステップＳ１９０）
ストレージコントローラ１００は、ステップＳ１５０でＦｌａｓｈ  Ｂｏｘ２１０からメモリ１４０に読み出したデータをホスト計算機４０へ転送するためのデータ転送要求（ＦＥ転送要求（３））を、転送リスト１４２４として作成する。転送リスト１４２４の転送元１４２４２には「Ｍｅｍ」、転送先１４２４３には「ＦＥ」が設定される。ストレージコントローラ１００は、再度ステップＳ１６０に戻り、終了したデータ転送があるか否かを確認する。
【００７０】
（図１５：ステップＳ２２０）
ストレージコントローラ１００は、データをホスト計算機４０へ転送する処理が完了したものと判断する。
【００７１】
＜実施の形態１：図１５：ライト処理＞
（図１５：ステップＳ１００〜Ｓ１１０）
ストレージコントローラ１００は、リード処理で説明したステップＳ１００〜Ｓ１１０と同様の処理を実行する。ここでは要求種別がＷＲであったものと過程して以下のステップを説明する。
【００７２】
（図１５：ステップＳ１３０）
ストレージコントローラ１００は、データ受信処理（ホスト計算機４０から書き込み対象データを受信する処理）を実行するため、データ転送要求（ＦＥ転送要求（２））を作成する。具体的には、メモリ管理テーブル１４２３を参照し、ホスト計算機４０から受信したデータを格納すべきキャッシュセグメントを確保する。次に、転送リスト１４２４を作成する。この場合、転送元１４２４２には「ＦＥ」、転送先１４２４３には「Ｍｅｍ」が設定され、キャッシュセグメントＮｏ１４２４４には、確保したキャッシュセグメントの番号等が設定される。ストレージコントローラ１００は、再度ステップＳ１００に戻り、別のＩ／Ｏ要求が到着していないかを判断する。ここでは別のＩ／Ｏ要求は到着していないものと仮定し、ステップＳ１４０へ進む。
【００７３】
（図１５：ステップＳ１４０〜Ｓ１７０）
これらのステップは、リード処理における各ステップと同様である。
【００７４】
（図１５：ステップＳ１８０）
ストレージコントローラ１００は、終了したデータ転送処理のリストＮｏ１４２５１をキーにして転送リスト１４２４を参照し、転送元１４２４２および転送先１４２４３の値を取得する。転送元１４２４２が「ＦＥ」で転送先１４２４３が「Ｍｅｍ」である場合はステップＳ２００へ進み、転送元１４２４２が「Ｍｅｍ」で転送先１４２４３が「ＢＥ」である場合はステップＳ２３０へ進む。
【００７５】
（図１５：ステップＳ２００）
ストレージコントローラ１００は、データ書込みが正常終了した旨をホスト計算機４０に通知する。実際にデータ書込みを実行するのは以後のステップであるが、ホスト計算機４０に対して応答を早く返すため、データを受信し終えた時点でホスト計算機４０に応答を返すこととした。
【００７６】
（図１５：ステップＳ２１０）
ストレージコントローラ１００は、ステップＳ１５０でホスト計算機４０から受信しメモリ１４０に格納したデータをＦｌａｓｈ  Ｂｏｘ２１０へ転送するためのデータ転送要求（ＢＥ転送要求（４））を、転送リスト１４２４として作成する。転送リスト１４２４の転送元１４２４２には「Ｍｅｍ」、転送先１４２４３には「ＢＥ」が設定される。ストレージコントローラ１００は、再度ステップＳ１６０に戻り、終了したデータ転送があるか否かを確認する。
【００７７】
（図１５：ステップＳ２３０）
ストレージコントローラ１００は、データをＦｌａｓｈ  Ｂｏｘ２１０へ転送する処理が完了したものと判断する。
【００７８】
図１６は、図１５のステップＳ１５０の詳細フローチャートである。以下、図１６の各ステップについて説明する。
【００７９】
（図１６：ステップＳ１５１）
ＣＰＵ１３０は、転送リスト１４２４を参照し、リストＮｏ１４２４１の最も若い番号のものを処理対象コマンドとして決定する。
【００８０】
（図１６：ステップＳ１５２）
ＣＰＵ１３０は、ステップＳ１５１で処理対象として定めたコマンドがＦｌａｓｈ  Ｂｏｘ２１０に対するＩ／Ｏであるか否かを、転送先１４２４３を参照することにより判断する。具体的には、転送先１４２４３「ＢＥ」が設定されているものが、Ｆｌａｓｈ  Ｂｏｘ２１０に対するＩ／Ｏ要求であると判断する。Ｆｌａｓｈ  Ｂｏｘ２１０に対するＩ／Ｏ要求であればステップＳ１５３へ進み、Ｆｌａｓｈ  Ｂｏｘ２１０に対するＩ／Ｏ要求でなければステップＳ１５５へ進む。
【００８１】
（図１６：ステップＳ１５２：補足）
Ｆｌａｓｈ  Ｂｏｘ２１０に対するＩ／Ｏ要求ではない場合とは、例えばホスト計算機４０に対するデータ転送要求のことである。
【００８２】
（図１６：ステップＳ１５３）
ＣＰＵ１３０は、Ｆｌａｓｈ  Ｂｏｘ２１０に対しデータ転送の可否を問い合わせる。本ステップの詳細は、後述の図１７〜図１９で改めて説明する。
【００８３】
（図１６：ステップＳ１５４）
ＣＰＵ１３０は、Ｆｌａｓｈ  Ｂｏｘ２１０からの回答にしたがって、データ転送可否を判断する。データ転送可能であればステップＳ１５５へ進み、データ転送不可であればステップＳ１５６へ進む。
【００８４】
（図１６：ステップＳ１５５）
ＣＰＵ１３０は、ＡＳＩＣｓ１５０に転送リスト１４２４を渡す。ＡＳＩＣｓ１５０はＤＭＡ転送部１５１の機能を用いて、転送リスト１４２４に記載されているデータ転送を実行する。
【００８５】
（図１６：ステップＳ１５６）
ＣＰＵ１３０は、ステップＳ１５４でデータ転送不可と判断した場合、Ｆｌａｓｈ  Ｂｏｘ２１０が即座にライト処理を実行することができないものと判断する。ＣＰＵ１３０は、データ転送を開始することなく、所定時間待機する。ＣＰＵ１３０は、本ステップでデータ転送を行わなかったデータについては、本フローを再度実行するときに改めて転送を試みる。
【００８６】
（図１６：ステップＳ１５７）
ＣＰＵ１３０は、転送リスト１４２４を参照し、実行していない転送要求が存在するか否かを判断する。実行していない転送要求がある場合はステップＳ１５１へ戻り、同様の処理を繰り返す。実行していない転送要求がない場合は、本フローを終了する。
【００８７】
図１７は、ステップＳ１５３において、ストレージコントローラ１００とＦｌａｓｈコントローラ２２０の間でやり取りされる、要求コマンド１０００と応答コマンド２０００の構成図である。以下、各コマンドの構成について説明する。
【００８８】
要求コマンド１０００は、ストレージコントローラ１００からＦｌａｓｈコントローラ２２０に送付されるコマンドであり、コマンドＮｏ１００１、要求内容１００２を有する。要求内容１００２の種類によっては、さらに付随的な情報が追加される。ここでは、Ｆｌａｓｈメモリチップ２３１に対してデータ書込みをすることができるか否かを、ストレージコントローラ１００からＦｌａｓｈコントローラ２２０に問い合わせる例を説明する。この場合、要求コマンド１０００は、さらに先頭アドレス１００３、ライト要求サイズ１００４を有する。
【００８９】
コマンドＮｏ１００１には、ＡＳＩＣｓ１５０が現在処理している転送リスト１４２４のリストＮｏ１４２４１の値が設定される。要求内容１００２には、当該要求コマンド１０００がデータ転送可否を問合せるコマンドである旨を示す値が設定される。先頭アドレス１００３には、ＬＢＡ１４２４７の数値が設定される。ライト要求サイズ１００４には、ＬＥＮＧＴＨ１４２４５の数値が設定される。
【００９０】
応答コマンド２０００は、Ｆｌａｓｈコントローラ２２０からストレージコントローラ１００に送付されるコマンドであり、要求コマンド１０００に対する応答内容が含まれている。応答コマンド２０００は、コマンドＮｏ２００１、応答内容２００２を有する。
【００９１】
コマンドＮｏ２００１には、対応する要求コマンド１０００に設定されたコマンドＮｏ１００１の数値が設定される。応答内容２００２には、当該応答コマンド２０００の応答内容を示す値が設定される。例えば要求コマンド１０００が、データ転送可否を問合せるコマンドである場合、データ転送の可否を示す値が設定される。
【００９２】
コマンドの形態は、図１７に示す例に限定されるものではない。また、Ｆｌａｓｈコントローラ２２０がストレージコントローラ１００に対して要求コマンド１０００を送付し、ストレージコントローラ１００がＦｌａｓｈコントローラ２２０に対して応答コマンド２０００を送付するようにしてもよい。
【００９３】
図１８は、ステップＳ１５３の詳細を示すフローチャートである。以下、図１８の各ステップについて説明する。
【００９４】
（図１８：ステップＳ１５３０）
ストレージコントローラ１００は、要求コマンド１０００を作成する。要求コマンド１０００の各項目には、図１７で説明した通り、ＡＳＩＣｓ１５０が現在処理している転送リスト１４２４の内容がそれぞれ設定される。
【００９５】
（図１８：ステップＳ１５３１）
ストレージコントローラ１００は、作成した要求コマンド１０００をＦｌａｓｈコントローラ２２０に対して送付する。
【００９６】
（図１８：ステップＳ１５３２）
Ｆｌａｓｈコントローラ２２０は、要求コマンド１０００を受信する。
【００９７】
（図１８：ステップＳ１５３３）
Ｆｌａｓｈコントローラ２２０は、要求コマンド１０００の内容を確認する。本ステップの詳細は、後述の図１９で改めて説明する。
【００９８】
（図１８：ステップＳ１５３４）
Ｆｌａｓｈコントローラ２２０は、ステップＳ１５３３の結果に基づき応答コマンド２０００を作成し、ストレージコントローラ１００に送付する。
【００９９】
（図１８：ステップＳ１５３５）
ストレージコントローラ１００は、応答コマンド２０００を受信し、その内容を確認した後、本フローを終了する。
【０１００】
図１９は、ステップＳ１５３３の詳細フローチャートである。以下、図１９の各ステップについて説明する。
【０１０１】
（図１９：ステップＳ１５３３０）
Ｆｌａｓｈコントローラ２２０は、アドレス管理テーブル２２４２２を参照し、要求コマンド１０００で指定されたデータが格納されているＣｈｉｐ  Ｎｏ２２４２２２およびＢｌｏｃｋ  Ｎｏ２２４２２３を探索する。
【０１０２】
（図１９：ステップＳ１５３３１）
Ｆｌａｓｈコントローラ２２０は、Ｂｌｏｃｋ管理テーブル２２４２３のステータス情報２２４２３４を参照し、当該Ｂｌｏｃｋ２３２が現在ＧＣ実行中であるか否かを判断する。ＧＣ実行中であればステップＳ１５３３６へ進み、ＧＣ実行中でなければステップＳ１５３３２へ進む。
【０１０３】
（図１９：ステップＳ１５３３２）
Ｆｌａｓｈコントローラ２２０は、Ｂｌｏｃｋ管理テーブル２２４２３のステータス情報２２４２３４を参照し、当該Ｂｌｏｃｋが現在ＷＬ実行中であるか否かを判断する。ＷＬ実行中であればステップＳ１５３３６へ進み、ＷＬ実行中でなければステップＳ１５３３３へ進む。
【０１０４】
（図１９：ステップＳ１５３３３）
Ｆｌａｓｈコントローラ２２０は、データ転送要求を受領したＢｌｏｃｋにおいて、ＧＣが発生するか否かを判断する。具体的には、要求コマンド１０００に含まれるライト要求サイズ１００４から、データを格納するために更新領域のＰａｇｅ２３３がどれだけ必要であるかを判断する。必要となるＰａｇｅ２３３の数が不足していればＧＣが発生すると判断し、足りていればＧＣは発生しないと判断する。ＧＣが発生すると判断する場合はステップＳ１５３３５へ進み、ＧＣが発生しないと判断する場合はステップＳ１５３３４へ進む。
【０１０５】
（図１９：ステップＳ１５３３３：補足）
本ステップにおける判断方法として、例えば、ライト要求サイズをＰａｇｅ２３３のサイズで除算して、必要Ｐａｇｅ数を算出する方法がある。この場合、Ｆｌａｓｈコントローラ２２０は、商が当該Ｂｌｏｃｋの有効Ｐａｇｅ残数２２４２３５よりも大きい場合はＧＣが発生すると判断し、その商が当該Ｂｌｏｃｋの有効Ｐａｇｅ残数２２４２３５以下の場合は、ＧＣは発生しないと判断する。
【０１０６】
（図１９：ステップＳ１５３３４）
Ｆｌａｓｈコントローラ２２０は、データ転送可能と判定し、本フローを終了する。
【０１０７】
（図１９：ステップＳ１５３３５）
Ｆｌａｓｈコントローラ２２０は、当該Ｂｌｏｃｋに対してＧＣを開始する。
【０１０８】
（図１９：ステップＳ１５３３６）
Ｆｌａｓｈコントローラ２２０は、データ転送不可と判定し、本フローを終了する。
【０１０９】
図２０は、本実施形態１においてストレージコントローラ１００がＦｌａｓｈメモリチップ２３１にアクセスする際の概略シーケンスを示す図である。以下、図２０の各ステップについて説明する。
【０１１０】
（図２０：ステップＳ３１００）
Ｆｌａｓｈコントローラ２２０は、Ｆｌａｓｈメモリチップ２３１に対してＧＣを実行しているものとする。
【０１１１】
（図２０：ステップＳ３１０１〜Ｓ３１０２）
ストレージコントローラ１００は、Ｆｌａｓｈメモリチップ２３１にデータを書き込むことができるか否かをＦｌａｓｈコントローラ２２０に対して問い合わせる処理を開始する。ストレージコントローラ１００は、Ｆｌａｓｈメモリチップ２３１にデータを書込むことができるか否かを問い合わせる要求コマンド１０００を、Ｆｌａｓｈコントローラ２２０に送信する。
【０１１２】
（図２０：ステップＳ３１０３〜Ｓ３１０４）
Ｆｌａｓｈコントローラ２２０は、本ステップの時点ではＦｌａｓｈメモリチップ２３１に対してＧＣを実行している。したがって、Ｆｌａｓｈメモリチップ２３１にデータを書込むことができない旨を示す応答コマンド２０００を、ストレージコントローラ１００に送信する。
【０１１３】
（図２０：ステップＳ３１０５）
ストレージコントローラ１００は、Ｆｌａｓｈメモリチップ２３１にデータを書き込む処理を待機し、別の処理を実行する。このときの待機時間は、固定的に定めておいてもよいし、都度定めてもよい。
【０１１４】
（図２０：ステップＳ３１０６）
Ｆｌａｓｈコントローラ２２０は、ＧＣが完了した後は、Ｆｌａｓｈメモリチップ２３１に対するデータ書込み要求を受け付けることができる状態になる。
【０１１５】
（図２０：ステップＳ３１０７〜Ｓ３１０８）
ストレージコントローラ１００は、ステップＳ３１０５で待機していたデータ書込み処理を再開し、ステップＳ３１０１〜Ｓ３１０２と同様の処理を実行する。
【０１１６】
（図２０：ステップＳ３１０９〜Ｓ３１１０）
Ｆｌａｓｈコントローラ２２０は、ステップＳ３１０３〜Ｓ３１０４と同様に、ストレージコントローラ１００に対して応答コマンド２０００を送信する。ここではＧＣが完了しているので、Ｆｌａｓｈメモリチップ２３１にデータを書込むことができる旨を示す応答コマンド２０００を送信することになる。
【０１１７】
（図２０：ステップＳ３１１１〜Ｓ３１１２）
ストレージコントローラ１００は、Ｆｌａｓｈメモリチップ２３１にデータを書き込む処理を開始する。ストレージコントローラ１００は、Ｆｌａｓｈメモリチップ２３１にデータを書込む要求コマンド１０００を、Ｆｌａｓｈコントローラ２２０に送信する。
【０１１８】
（図２０：ステップＳ３１１３〜Ｓ３１１６）
Ｆｌａｓｈコントローラ２２０は、Ｆｌａｓｈメモリチップ２３１に対してデータ書込みを実行する。データ書込みが完了すると、ストレージコントローラ１００に対して、その旨を通知する応答コマンド２０００を送信する。ストレージコントローラ１００は、その応答コマンド２０００を受信すると、データ書込み処理を終了する。
【０１１９】
図２０のシーケンスによれば、ストレージコントローラ１００とＦｌａｓｈコントローラ２２０が連携することにより、ストレージコントローラ１００がデステージに要する時間を最小化することができる。具体的には、ストレージコントローラ１００がデステージに要する時間が、Ｆｌａｓｈメモリチップ２３１に実際にデータが書き込まれる時間とほぼ等しくなっている。これにより、ストレージコントローラ１００が別の処理を実行することができる時間（ステップＳ３１０５）が増加するため、ストレージシステム１００００全体の性能を向上させることができる。
【０１２０】
以上のように、本実施の形態１によれば、ストレージコントローラ１００は、Ｆｌａｓｈメモリチップ２３１に対してデータを書き込む前に、要求コマンド１０００によってＦｌａｓｈコントローラ２２０に対してデータ書込み可否を問い合わせる。これによりストレージコントローラ１００は、Ｆｌａｓｈメモリチップ２３１にデータを書き込むことができるようになってから実際にデータ書込みを開始することができるので、実質的なデータ書込み時間を短く抑えることができる。
【０１２１】
また、本実施の形態１によれば、ストレージコントローラ１００は、Ｆｌａｓｈメモリチップ２３１にデータを書き込むことができない旨の応答コマンド２０００を受け取った場合は、他の処理を開始する。これにより、Ｆｌａｓｈメモリチップ２３１にデータを書き込むことができない時間を無駄にすることなく処理を継続することができるので、ストレージ装置１０のパフォーマンスを向上させることができる。
【０１２２】
また、本実施の形態１によれば、ストレージコントローラ１００は、Ｆｌａｓｈメモリチップ２３１にデータを書き込むことができない旨の応答コマンド２０００を受け取り、他の処理が完了した後、Ｆｌａｓｈコントローラ２２０に対してデータ書込み可否を改めて問い合わせる。これによりストレージコントローラ１００は、ある時点でＦｌａｓｈメモリチップ２３１にデータを書き込むことができない場合でも、データ書込みを中止してしまうことなく、確実にデータ書込みを完了することができる。
【０１２３】
また、本実施の形態１において、ストレージコントローラ１００は、Ｆｌａｓｈメモリチップ２３１にデータを書き込むことができるか否かをＦｌａｓｈコントローラ２２０に対して問い合わせることを説明したが、データを読み取ることができるか否かを同様に問い合わせるようにしてもよい。これによりストレージコントローラ１００は、ＧＣ実行中はデータ読取要求を発行せずに別の処理を実行し、ＧＣが終了した時点で改めてデータ読取を行うことができる。
【０１２４】
本実施の形態１において、Ｆｌａｓｈコントローラ２２０は、ストレージコントローラ１００からアクセス要求を受けた時点以外でも、必要に応じて任意のタイミングでＧＣを実行してもよい。以下の実施形態においても同様である。
【０１２５】
本実施の形態１において、Ｆｌａｓｈコントローラ２２０からストレージコントローラ１００に対し、Ｆｌａｓｈメモリチップ２３１にアクセスすることができない旨の応答コマンド２０００を送信する際に、待機すべき時間を応答コマンド２０００内に含めることもできる。ストレージコントローラ１００は、応答コマンド２０００に記述されている待機時間だけ待機した後、改めてデータ書込みを試みる。この待機時間は、Ｆｌａｓｈコントローラ２２０がＧＣを実行するのに要する時間に依拠する。そこで、各デバイスの性能等に応じて、適切な待機時間の値をメモリ２２４等の記憶装置に格納しておき、Ｆｌａｓｈコントローラ２２０はその値を読み込んでストレージコントローラ１００に通知すればよい。その他、Ｆｌａｓｈコントローラ２２０が実行するプログラム内に待機時間の値を埋め込んでおくこともできる。
【０１２６】
＜実施の形態２＞
本発明の実施の形態２では、ストレージコントローラ１００がＦｌａｓｈコントローラ２２０に対してデータ書込み要求を発行する前に、あらかじめＧＣを実行しておく動作例を説明する。その他の構成は実施の形態１で説明したものと同様である。
【０１２７】
図２１は、本実施の形態２においてストレージコントローラ１００が実行するＩ／Ｏ処理プログラムの動作フロー図である。本フローでは、図１５で説明したフローに加えて、ステップＳ１３０の後に新たにステップＳ２４０が追加されている点が異なる。その他のステップは図１５の各ステップと同様である。
【０１２８】
図２２は、ステップＳ２４０の詳細フローである。以下、図２２の各ステップについて説明する。
【０１２９】
（図２２：ステップＳ２４１）
ストレージコントローラ１００は、現在処理しているＩ／Ｏ要求がシーケンシャルライト要求であるか否かを判断する。シーケンシャルライト要求であればステップＳ２４２へ進み、シーケンシャルライト要求でなければ本フローを終了する。
【０１３０】
（図２２：ステップＳ２４１：補足その１）
本ステップでシーケンシャルライトであるか否かを判断しているのは、一般にシーケンシャルライトはサイズの大きいデータを書き込む際に実行される書込みコマンドだからである。
【０１３１】
（図２２：ステップＳ２４１：補足その２）
シーケンシャルライトであるか否かを判定する方法としては、例えば書き込もうとしているデータのアドレスが連続しているか否かによって判定する方法がある。具体的には、ストレージコントローラ１００は、ホスト計算機４０から受信したＩ／Ｏ要求の直前のアドレス（ＬＢＡ）におけるデータがメモリ１４０上に存在するかを、メモリ管理テーブル１４２３を用いて確認する。そのデータがメモリ１４０上に存在する場合、当該Ｉ／Ｏ要求をシーケンシャルライト要求であると判断する。
【０１３２】
（図２２：ステップＳ２４２）
ストレージコントローラ１００は、ＧＣを実行するよう指示する要求コマンド１０００を作成し、Ｆｌａｓｈコントローラ２２０に対して送信する。
【０１３３】
図２３は、本実施形態２においてストレージコントローラ１００がＦｌａｓｈメモリチップ２３１にアクセスする際の概略シーケンスを示す図である。以下、図２３の各ステップについて説明する。
【０１３４】
（図２３：ステップＳ３２０１〜Ｓ３２０５）
ストレージコントローラ１００は、ホスト計算機４０よりシーケンシャルライト要求を受け取ったものと仮定する。ストレージコントローラ１００は、ＧＣ実行を開始する要求コマンド１０００を、Ｆｌａｓｈコントローラ２２０に送信する。ストレージコントローラ１００は、Ｆｌａｓｈメモリチップ２３１にデータを書き込む処理を待機し、別の処理を実行する。
【０１３５】
（図２３：ステップＳ３２０６〜Ｓ３２０８）
Ｆｌａｓｈコントローラ２２０は、Ｆｌａｓｈメモリチップ２３１に対してＧＣを実行する。Ｆｌａｓｈコントローラ２２０は、ＧＣが完了した後は、Ｆｌａｓｈメモリチップ２３１に対するデータ書込み要求を受け付けることができる状態になる。
【０１３６】
（図２３：ステップＳ３２０９〜Ｓ３２１８）
これらのステップは、図２０のステップＳ３１０７〜Ｓ３１１６と同様である。
【０１３７】
図２３のシーケンスによれば、ストレージコントローラ１００は、Ｆｌａｓｈコントローラ２２０に対してデステージ処理を開始する前に、ＧＣを開始するよう要求しておく。これにより、実際にデータ書込みを開始する前に、Ｆｌａｓｈメモリチップ２３１内に十分な空きＰａｇｅを作成することができる。したがって、その後にシーケンシャルライト要求によってサイズが大きいデータをデステージする処理が発生した場合にも、Ｆｌａｓｈコントローラ２２０はＦｌａｓｈメモリチップ２３１に対してＧＣを実行することなく、即座にデータを格納することができる。
【０１３８】
本実施の形態２において、ストレージコントローラ１００は、ホスト計算機４０よりシーケンシャルライト要求を受け取ったときは、サイズの大きいデータを書き込む処理が発生するものと判断するものとした。書き込むデータのサイズが大きいことを他の手段によって知ることができる場合には、必ずしもシーケンシャルライト要求であるか否かによってＧＣを実行する要否を判断しなくともよい。例えば、ホスト計算機４０からデータ書込み要求を受けたとき、そのデータのサイズも併せて通知された場合には、そのサイズによってＧＣ要否を判断することもできる。
【０１３９】
また、本実施の形態２において、ストレージコントローラ１００は、Ｆｌａｓｈコントローラ２２０に対してＧＣをあらかじめ実行しておくよう指示する要求コマンド１０００を発行することとした。これに対し、ストレージコントローラ１００はデータ書込み要求をＦｌａｓｈコントローラ２２０にそのまま発行し、ＧＣ要否をＦｌａｓｈコントローラ２２０が判断することも考えられる。この場合Ｆｌａｓｈコントローラ２２０は、ＧＣを実行するためデータ書込みを行うことができない旨の応答コマンド２０００をストレージコントローラ１００に対して送信し、ＧＣを開始する。以後の動作は本実施形態２と同様である。
【０１４０】
＜実施の形態３＞
実施の形態２では、ストレージコントローラ１００がＦｌａｓｈメモリチップ２３１に対してデータを書き込む前に、あらかじめＧＣを実行しておくことを説明した。ＧＣを行うためには、Ｆｌａｓｈメモリチップ２３１内にあるデータをいったん代替Ｂｌｏｃｋ２３７に退避させなければならないため、空いている代替Ｂｌｏｃｋ２３７が存在している必要がある。
【０１４１】
しかし、例えばすべての代替Ｂｌｏｃｋ２３７が他のＢｌｏｃｋ２３２のＷＬやＧＣなどに使われていると、代替Ｂｌｏｃｋ２３７が不足し、新たにＧＣやＷＬを実行することができない。この場合、実施の形態２で説明したようにサイズの大きいデータを書き込む前にあらかじめＧＣを実行しようとしても、他のＢｌｏｃｋ２３２に対するＷＬやＧＣが完了して代替Ｂｌｏｃｋ２３７が新たに生成されない限り、当該Ｂｌｏｃｋに対してＧＣを実行することはできない。
【０１４２】
そこで本発明の実施の形態３では、例えばＬＵが削除されたタイミングなど、それまで使用されていたＦｌａｓｈメモリチップ２３１上の領域が未使用となった時点で、その未使用となった領域を解放するようにストレージコントローラ１００からＦｌａｓｈコントローラ２２０に対して通知する。これにより、Ｆｌａｓｈメモリチップ２３１内の代替Ｂｌｏｃｋ２３７の数を確保することを図る。
【０１４３】
従来のストレージ装置において、ストレージコントローラは、ＬＵを削除するときに論理アドレス空間であるＬＵを解放するが、ＨＤＤに対してフォーマット処理等の物理領域を開放する処理は実行していない。すなわち、ＬＵを削除することによって見かけ上は記憶領域が解放されたように見えるが、実際には物理領域内にデータが存在し続けていることとなる。
【０１４４】
Ｆｌａｓｈメモリチップ２３１を用いたストレージ装置においては、一度データを書き込んだＰａｇｅ２３３に対してデータを改めて書き込むためには、Ｐａｇｅ２３３に書き込まれているデータを物理的に削除する必要がある。そのため、ストレージコントローラ１００がＬＵを削除するのみでは記憶領域は実際には解放されておらず、次第に代替Ｂｌｏｃｋ２３７が不足して上記不具合が発生する可能性がある。本実施形態３では、この不具合を解消することを図る。
【０１４５】
図２４は、ストレージコントローラ１００がＬＵを削除した後に、ストレージコントローラ１００からＦｌａｓｈコントローラ２２０に対して、Ｂｌｏｃｋ２３２を解放するよう要求する処理のフローチャートである。以下、図２４の各ステップについて説明する。
【０１４６】
（図２４：ステップＳ３００）
ストレージコントローラ１００は、ＬＵを削除する処理を実行した後、またはＬＵを削除する処理の過程で、本処理フローを実行する。
【０１４７】
（図２４：ステップＳ３０１）
ストレージコントローラ１００は、削除したＬＵに割り当てられていたＢｌｏｃｋ２３２を解放するよう要求する要求コマンド１０００を、Ｆｌａｓｈコントローラ２２０に対して発行する。要求コマンド１０００の各パラメータには、解放対象とする領域の開始ＬＢＡと終了ＬＢＡなどを設定する。この解放範囲は、ＬＵ管理テーブル１４２２上で、削除対象としたＬＵのＳＴＡＲＴ  ＬＢＡ１４２２３およびＬＡＳＴ  ＬＢＡ１４２２４を参照することにより特定できる。
【０１４８】
（図２４：ステップＳ３０２）
Ｆｌａｓｈコントローラ２２０は、要求コマンド１０００を受信する。
【０１４９】
（図２４：ステップＳ３０３）
Ｆｌａｓｈコントローラ２２０は、要求コマンド１０００の内容にしたがって、指示されたＢｌｏｃｋ２３２を解放する。具体的には、Ｆｌａｓｈコントローラ２２０は、アドレス管理テーブル２２４２２を用いて解放すべきＢｌｏｃｋ２３２を特定し、当該Ｂｌｏｃｋ２３２に対して消去コマンドを発行する。併せて、Ｂｌｏｃｋ管理テーブル２２４２３の当該Ｂｌｏｃｋの属性２２４２３３を「代替」に変更する。
【０１５０】
（図２４：ステップＳ３０４）
Ｆｌａｓｈコントローラ２２０は、Ｂｌｏｃｋ２３２を解放する処理が完了した旨を通知するための応答コマンド２０００を作成し、ストレージコントローラ１００に対して送付する。
【０１５１】
（図２４：ステップＳ３０５）
ストレージコントローラ１００は、Ｆｌａｓｈコントローラ２２０から応答コマンド２０００を受信し、本処理フローを終了する。
【０１５２】
以上のように、本実施の形態３によれば、ストレージコントローラ１００がＬＵを削除した時点で、Ｆｌａｓｈメモリチップ２３１上の記憶領域を解放する処理が実行される。これにより、Ｆｌａｓｈコントローラ２２０がＧＣを実行しようとしたときに代替Ｂｌｏｃｋ２３７が不足してＧＣを実行できない状況に陥る可能性を低減することができる。特に実施の形態２で説明したように、サイズの大きいデータを書き込む前にあらかじめＧＣを実行する動作条件の下では、ＧＣを実行する頻度が高まるため、本実施形態３で説明した手法の効果が有効に発揮される。
【０１５３】
＜実施の形態４＞
本発明の実施の形態４では、ストレージ装置１０が容量仮想化技術を採用した場合において、代替Ｂｌｏｃｋ２３７の数を確保する手法について説明する。代替Ｂｌｏｃｋ２３７を確保することが必要となる理由は、実施形態３で説明したものと同様である。
【０１５４】
容量仮想化技術とは、ストレージ装置１０が持っている物理的な容量を超える仮想的な容量をホスト計算機４０に対して提示しておき、その容量が実際に必要になった時点で初めて記憶容量を追加する技術である。容量仮想化技術を採用したストレージ装置の１例は例えば特開２００７−６６２５９号公報に開示されている。
【０１５５】
本実施形態４において、記憶容量を仮想化したストレージ装置１０上でデータが書き込まれた際に割り当てられる記憶領域を、本発明では「セグメント」と呼ぶ。特開２００７−６６２５９号公報では、容量仮想化技術を適用したストレージ装置の性能を向上させる手段として、セグメント（同文献においても同様にセグメントと呼んでいる）を記憶装置間で移動させる技術が開示されている。
【０１５６】
セグメントを記憶装置間で移動させた場合、移動元のセグメントのデータは物理的には解放されない。そのため、実施形態３と同様に、移動元のセグメントを構成しているＢｌｏｃｋ２３２を解放することにより、Ｆｌａｓｈメモリチップ２３１内の代替Ｂｌｏｃｋ２３７の数を増加させることができる。
【０１５７】
図２５は、本実施形態４におけるメモリ１４０の構成図である。実施形態１の図３で説明した構成と比較して、ＬＵ管理テーブル１４２２に代えて、新たにセグメント管理テーブル１４２６、ＬＵ管理テーブル１４２７、統計情報管理テーブル１４２８を有する点が異なる。メモリ１４０以外の構成は実施の形態１〜３と同様である。
【０１５８】
セグメント管理テーブル１４２６は、セグメントの構成を管理する。ＬＵ管理テーブル１４２７は、ＬＵの構成を管理する。統計情報管理テーブル１４２８は、セグメントに対して発行されたコマンド数などの統計情報を記録する。
【０１５９】
図２６は、セグメント管理テーブル１４２６の構成図である。セグメント管理テーブル１４２６は、セグメントＮｏ１４２６１、Ｆｌａｓｈ  Ｂｏｘ  Ｎｏ１４２６２、ＳＴＡＲＴ  ＬＢＡ１４２６３、ＬＡＳＴ  ＬＢＡ１４２６４を有する。
【０１６０】
セグメントＮｏ１４２６１は、作成されたセグメントの識別子である。Ｆｌａｓｈ  Ｂｏｘ  Ｎｏ１４２６２は、セグメントが作成されているＦｌａｓｈ  Ｂｏｘ２１０の識別番号である。ＳＴＡＲＴ  ＬＢＡ１４２６３およびＬＡＳＴ  ＬＢＡ１４２６４は、セグメントのアドレス空間がＦｌａｓｈ  Ｂｏｘ２１０内のどの位置に対応するかを示すものであり、開始アドレスと終了アドレスをそれぞれＬＢＡで示している。
【０１６１】
図２７は、ＬＵ管理テーブル１４２７の構成図である。ＬＵ管理テーブル１４２７は、作成されたＬＵの数と等しい数だけ存在する。ＬＵ管理テーブル１４２７は、ＬＵＮ１４２７１、ＬＵサイズ１４２７２、セグメントＮｏ１４２７３を有する。
【０１６２】
ＬＵＮ１４２７１は、ＬＵの識別子である。ＬＵサイズ１４２７２はＬＵのサイズを例えばＧＢ（ＧｉｇａＢｙｔｅ）などの単位で示している。セグメントＮｏ１４２７３は、当該ＬＵに割り当てられているセグメントの識別番号を示しており、ＬＵサイズに対応する数だけ存在する。
【０１６３】
容量仮想化技術では、実際にデータが格納された時に初めて物理的な記憶領域である仮想論理ユニットを割り当てる。そのため、セグメントＮｏ１４２７３には、セグメントを割り当てていない領域については未割当を示す「ｎ／ａ」が設定され、セグメントを割り当て済みの領域については該当するセグメントの識別番号が設定されている。
【０１６４】
図２８は、統計情報管理テーブル１４２８の構成図である。統計情報管理テーブル１４２８は、セグメントＮｏ１４２８１、ライトコマンド数１４２８２、リードコマンド数１４２８３を有する。
【０１６５】
セグメントＮｏ１４２８１は、セグメントの識別子である。ライトコマンド数１４２８２およびリードコマンド数１４２８３は、当該セグメントに対してホスト計算機４０から発行されたライトＩ／Ｏ要求とリード要求Ｉ／Ｏの数をそれぞれ示している。
【０１６６】
ストレージコントローラ１００は、セグメントを移動またはＬＵを削除した後に、Ｆｌａｓｈコントローラ２２０に対して、そのセグメントに対応するＢｌｏｃｋ２３２を解放するよう要求する。このステップは図２４と同様であるが、解放対象とするＢｌｏｃｋ２３２を特定する手法が異なる。
【０１６７】
セグメントを移動する場合、ストレージコントローラ１００は、移動元のセグメントＮｏ１４２６１をキーにして、セグメント管理テーブル１４２６から当該セグメントのＳＴＡＲＴ  ＬＢＡ１４２６３およびＬＡＳＴ  ＬＢＡ１４２６４を特定する。
【０１６８】
ＬＵを削除する場合、ストレージコントローラ１００は、まずＬＵＮ１４２７１をキーにしてＬＵ管理テーブル１４２７を参照し、削除したＬＵを構成するセグメントＮｏ１４２７３を特定する。次にストレージコントローラ１００は、そのセグメントＮｏをキーにしてセグメント管理テーブル１４２６を参照し、当該セグメントのＳＴＡＲＴ  ＬＢＡ１４２６３およびＬＡＳＴ  ＬＢＡ１４２６４を特定する。
【０１６９】
以上のように、本実施の形態４によれば、ストレージコントローラ１００がセグメントを移動またはＬＵを削除した時点で、Ｆｌａｓｈメモリチップ２３１上の記憶領域を解放する処理が実行される。これにより、ストレージ装置１０が容量仮想化技術を採用した場合においても、実施形態３と同様の効果を発揮することができる。
【０１７０】
なお、本実施形態４において、ストレージコントローラ１００がセグメントを削除した場合でも、同様にＦｌａｓｈメモリチップ２３１上の記憶領域を解放するようにしてもよい。
【０１７１】
＜実施の形態５＞
本発明の実施の形態５では、複数のＦｌａｓｈ  Ｂｏｘ２１０間でライトＩ／Ｏ頻度、データ消去回数などを均一化する手法を説明する。本実施形態５では、実施形態４で説明した容量仮想化技術を採用した構成を前提とするが、同様の手法を実施形態１〜３で説明した構成の下で用いることもできる。
【０１７２】
特定のＦｌａｓｈ  Ｂｏｘ２１０のみライトＩ／Ｏの頻度が高い場合、そのＦｌａｓｈ  Ｂｏｘ２１０ではＧＣやＷＬの実行頻度が高くなるため、Ｆｌａｓｈメモリチップ２３１に対する消去回数が増加する。Ｆｌａｓｈメモリチップ２３１は有限の消去回数を有するデバイスであるため、特定のＢｌｏｃｋ２３２の消去回数が限界値を超え故障すると、代替Ｂｌｏｃｋ２３７が故障したＢｌｏｃｋ２３２に代わる。したがって、ライトＩ／Ｏ頻度が高いＦｌａｓｈ  Ｂｏｘ２１０では、Ｆｌａｓｈ  Ｂｏｘ２１０内の代替Ｂｌｏｃｋ２３７が減少しやすくなり、結果として代替Ｂｌｏｃｋ２３７が不足することによるライト処理性能の低下を招く可能性がある。
【０１７３】
そこで本実施形態５では、ストレージコントローラ１００が、各Ｆｌａｓｈ  Ｂｏｘ２１０のライトＩ／Ｏ頻度や消去回数などの統計情報をもとに、Ｆｌａｓｈ  Ｂｏｘ２１０間でセグメントを移動させる。これにより、複数のＦｌａｓｈ  Ｂｏｘ２１０間でライトＩ／Ｏ頻度や消去回数などを均一化し、システム性能の最大化およびＦｌａｓｈ  Ｂｏｘ２１０の長寿命化を図る。
【０１７４】
そのため本実施形態５では、ストレージコントローラ１００とＦｌａｓｈコントローラ２２０の間で、Ｆｌａｓｈ  Ｂｏｘ２１０毎のデータ消去回数などの統計情報をやり取りする。
【０１７５】
図２９は、ストレージコントローラ１００がＦｌａｓｈ  Ｂｏｘ２１０間の負荷を均一化する処理のフローチャートである。以下、図２９の各ステップについて説明する。
【０１７６】
（図２９：ステップＳ４００）
ストレージコントローラ１００は、Ｆｌａｓｈコントローラ２２０に対して、Ｆｌａｓｈ  Ｂｏｘ２１０の統計情報を送付するよう要求するための要求コマンド１０００を作成し、Ｆｌａｓｈコントローラ２２０に対して送信する。
【０１７７】
（図２９：ステップＳ４０１）
Ｆｌａｓｈコントローラ２２０は、要求コマンド１０００を受信する。
【０１７８】
（図２９：ステップＳ４０２）
Ｆｌａｓｈコントローラ２２０は、要求コマンド１０００の内容にしたがって、Ｆｌａｓｈ  Ｂｏｘ２１０の統計情報を取得する。具体的には、まずＢｌｏｃｋ管理テーブル２２４２３を参照し、各Ｂｌｏｃｋ２３２の状態を取得する。次に、全Ｂｌｏｃｋ２３２の消去回数の合計値などの統計情報を、統計情報管理テーブル１４２８から取得する。
【０１７９】
（図２９：ステップＳ４０３）
Ｆｌａｓｈコントローラ２２０は、要求コマンド１０００の要求内容に応じた応答コマンド２０００を作成し、ストレージコントローラ１００に送付する。
【０１８０】
（図２９：ステップＳ４０３：補足）
本ステップにおいて、Ｆｌａｓｈコントローラ２２０がストレージコントローラ１００に対して通知する統計情報としては、通常Ｂｌｏｃｋ２３６と代替Ｂｌｏｃｋ２３７の割り当て数、ＧＣやＷＬを実行しているＢｌｏｃｋ２３２の数、有効Ｐａｇｅ残数や、データ消去回数などが考えられる。Ｆｌａｓｈコントローラ２２０は、ストレージコントローラ１００からの要求に応じて、Ｆｌａｓｈ  Ｂｏｘ２１０の各種統計情報を通知することができるものとする。
【０１８１】
（図２９：ステップＳ４０４）
ストレージコントローラ１００は、Ｆｌａｓｈコントローラ２２０から応答コマンド２０００を受信する。
【０１８２】
（図２９：ステップＳ４０５）
ストレージコントローラ１００は、入れ替え対象となるセグメントを決定する。例えば、Ｆｌａｓｈコントローラ２２０から取得したＦｌａｓｈ  Ｂｏｘ２１０のデータ消去回数と、統計情報管理テーブル１４２８のライトコマンド数１４２８２の値とを比較し、データ消去回数が最も少ないＦｌａｓｈ  Ｂｏｘ２１０にライトコマンド数が最も多いセグメントを配置するよう決定する。
【０１８３】
（図２９：ステップＳ４０６）
ストレージコントローラ１００は、ステップＳ４０５の結果にしたがって、セグメントを入れ替える。これにより、セグメントに対するアクセスが均一になり、Ｆｌａｓｈ  Ｂｏｘ２１０間のＩ／Ｏ処理を平準化することができる。
【０１８４】
以上のように、本実施の形態５によれば、ストレージコントローラ１００は、Ｆｌａｓｈ  Ｂｏｘ２１０の統計情報をＦｌａｓｈコントローラ２２０から取得し、これに基づき各Ｆｌａｓｈ  Ｂｏｘ２１０間の負荷を平準化することができる。これにより、Ｆｌａｓｈメモリチップ２３１内部におけるデータ書込み回数またはデータ削除回数を平準化するのみならず、Ｆｌａｓｈ  Ｂｏｘ２１０間でもデータ書込み回数またはデータ削除回数を平準化することができる。
【符号の説明】
【０１８５】
１０：ストレージ装置、１００：ストレージコントローラ、１１０：Ｉ／Ｆ  Ｃｈｉｐ、１２０：ＮＩＣ、１３０：ＣＰＵ、１４０：メモリ、１４１：データキャッシュ領域、１４１１：ユーザデータ、１４２：システム領域、１４２１：プログラム群、１４２２：ＬＵ管理テーブル、１４２２１：ＬＵＮ、１４２２２：Ｆｌａｓｈ  Ｂｏｘ  Ｎｏ、１４２２３：ＳＴＡＲＴ  ＬＢＡ、１４２２４：ＬＡＳＴ  ＬＢＡ、１４２３：メモリ管理テーブル、１４２３１：キャッシュセグメントＮｏ、１４２３２：ＬＵＮ、１４２３３：ＬＢＡ、１４２３４：ＬＥＮＧＴＨ、１４２４：転送リスト、１４２４１：リストＮｏ、１４２４２：転送元、１４２４３：転送先、１４２４４：キャッシュセグメントＮｏ、１４２４５：ＬＥＮＧＴＨ、１４２４６：ＬＵＮ、１４２４７：ＬＢＡ、１４２５：転送終了リスト、１４２５１：転送リストＮｏ、１４２６：セグメント管理テーブル、１４２６１：セグメントＮｏ、１４２６２：Ｆｌａｓｈ  Ｂｏｘ  Ｎｏ、１４２６３：ＳＴＡＲＴ  ＬＢＡ、１４２６４：ＬＡＳＴ  ＬＢＡ、１４２７：ＬＵ管理テーブル、１４２７１：ＬＵＮ、１４２７２：ＬＵサイズ、１４２７３：セグメントＮｏ、１４２８：統計情報管理テーブル、１４２８１：セグメントＮｏ、１４２８２：ライトコマンド数、１４２８３：リードコマンド数、１５０：ＡＳＩＣｓ、１５１：ＤＭＡ転送部、１６０：Ｉ／Ｆ  Ｃｈｉｐ、１７０：接続バス、１８０：専用バス、１９０：接続バス、２００：Ｆｌａｓｈ  Ｂｏｘ部、２１０：Ｆｌａｓｈ  Ｂｏｘ、２２０：Ｆｌａｓｈコントローラ、２２１：Ｉ／Ｆ  Ｃｈｉｐ、２２２：ＣＰＵ、２２３：ＡＳＩＣｓ、２２３１：ＤＭＡ転送部、２２３２：Ｍｅｍｏｒｙコントローラ、２２４：メモリ、２２４１：データキャッシュ領域、２２４１１：ユーザデータ、２２４２：システム領域、２２４２１：プログラム群、２２４２２：アドレス管理テーブル、２２４２２１：ＳＴＡＲＴ  ＬＢＡ、２２４２２２：Ｃｈｉｐ  Ｎｏ、２２４２２３：Ｂｌｏｃｋ  Ｎｏ、２２４２２４：Ｐａｇｅ  Ｎｏ、２２４２３：Ｂｌｏｃｋ管理テーブル、２２４２３１：Ｃｈｉｐ  Ｎｏ、２２４２３２：Ｂｌｏｃｋ  Ｎｏ、２２４２３３：属性、２２４２３４：ステータス、２２４２３５：有効Ｐａｇｅ残数、２２４２３６：消去回数、２２４２４：転送リスト、２２５：専用バス、２２６：専用バス、２２７：専用バス、２３０：ｍｅｍｏｒｙ  ａｒｒａｙ、２３１：Ｆｌａｓｈメモリチップ、２３２：Ｂｌｏｃｋ、２３３：Ｐａｇｅ、２３４：ベース領域、２３５：更新領域、２３６：通常Ｂｌｏｃｋ、２３７：代替Ｂｌｏｃｋ、２０：ＳＡＮ、３０：ＬＡＮ、４０：ホスト計算機、１０００：要求コマンド、１００１：コマンドＮｏ、１００２：要求内容、１００３：先頭アドレス、１００４：ライト要求サイズ、２０００：応答コマンド、１００００：ストレージシステム。
【図１】
0005646633.tif 000002
【図２】
0005646633.tif 000003
【図３】
0005646633.tif 000004
【図４】
0005646633.tif 000005
【図５】
0005646633.tif 000006
【図６】
0005646633.tif 000007
【図７】
0005646633.tif 000008
【図８】
0005646633.tif 000009
【図９】
0005646633.tif 000010
【図１０】
0005646633.tif 000011
【図１１】
0005646633.tif 000012
【図１２】
0005646633.tif 000013
【図１３】
0005646633.tif 000014
【図１４】
0005646633.tif 000015
【図１５】
0005646633.tif 000016
【図１６】
0005646633.tif 000017
【図１７】
0005646633.tif 000018
【図１８】
0005646633.tif 000019
【図１９】
0005646633.tif 000020
【図２０】
0005646633.tif 000021
【図２１】
0005646633.tif 000022
【図２２】
0005646633.tif 000023
【図２３】
0005646633.tif 000024
【図２４】
0005646633.tif 000025
【図２５】
0005646633.tif 000026
【図２６】
0005646633.tif 000027
【図２７】
0005646633.tif 000028
【図２８】
0005646633.tif 000029
【図２９】
0005646633.tif 000030