(57)【特許請求の範囲】
【請求項１】
データを格納する複数の記憶デバイスと、
プロセッサ及び前記複数の記憶デバイスに格納されるデータが一時的に格納されるキャッシュメモリを備えるストレージコントローラと、
を有し、
前記キャッシュメモリは、記憶媒体として不揮発性半導体メモリを有し、且つ、前記不揮発性半導体メモリに接続されたキャッシュコントローラを有し、
前記不揮発性半導体メモリは、複数のブロックを有し、前記複数のブロックのそれぞれは、データの消去単位であり、且つ、複数のページを有し、前記複数のページのそれぞれは、データの書き込み及び読み出しの単位であり、
前記プロセッサは、前記キャッシュメモリに、データと、前記データが前記キャッシュメモリに格納される期間である格納期間に関連する情報を含む属性情報とを送信し、
前記キャッシュコントローラは、
前記プロセッサから、前記データと、前記属性情報とを受信し、
前記受信した属性情報と、前記複数のブロックに格納されているデータの属性情報とに基づいて、前記格納期間の長さが所定値以内のデータ同士が同じブロックに格納され、前記キャッシュメモリに格納される期間の長さが所定値以上異なるデータ同士が異なるブロックに格納されるように、前記受信したデータの格納先ブロックを選択し、
前記選択した格納先ブロック内のページに前記受信したデータを書き込み、
前記複数の記憶デバイスをＲＡＩＤとして制御し、前記複数の記憶デバイスのいずれかに記憶されている更新前のデータである旧データを前記旧データの更新後のデータである新データに更新する場合に冗長コードであるパリティを生成する処理において、
前記プロセッサは、前記旧データと前記旧データに関連付けられている旧パリティとを前記複数の記憶デバイスから読み出し、前記旧データと前記旧データを示す属性情報とを前記キャッシュメモリに送信し、且つ、前記旧パリティと前記旧パリティを示す属性情報とを前記キャッシュメモリに送信し、
前記キャッシュコントローラは、前記旧データを示す属性情報と前記旧パリティを示す属性情報とに基づいて、前記旧データ及び前記旧パリティの格納先ブロックとして、同じ格納先ブロックを選択する
ストレージシステム。
【請求項２】
前記プロセッサは、新パリティを前記キャッシュメモリに二重書きする必要がある場合は、パリティ更新後、前記新パリティのキャッシュメモリへの二重書きが完了したときに旧データ及び旧パリティを無効化する
請求項１に記載のストレージシステム。
【請求項３】
前記プロセッサは、前記新データと、前記新データを示す属性情報とをキャッシュメモリに送信し、
前記キャッシュコントローラは、前記旧データを示す属性情報と、前記旧パリティを示す属性情報と、前記新データを示す属性情報とに基づいて、前記新データの格納先ブロックとして、前記旧データ及び前記旧パリティの格納先ブロックと異なる格納先ブロックを選択する、
請求項１に記載のストレージシステム。
【請求項４】
前記属性情報は、前記属性情報が示すデータが、前記記憶デバイスに格納されているデータであるクリーンデータであるか、前記記憶デバイスに格納されていないデータであるダーティデータであるかを示す情報を含んでおり、
前記キャッシュコントローラは、前記属性情報に基づいて、前記クリーンデータであるデータと前記ダーティデータであるデータとが異なるブロックに格納されるように格納先ブロックを選択する、
請求項１に記載のストレージシステム。
【請求項５】
前記プロセッサは、前記記憶デバイスから読み出したデータを前記キャッシュメモリに格納する場合、前記読み出したデータの属性情報を、前記クリーンデータを意味する情報に更新する、
請求項４に記載のストレージシステム。
【請求項６】
前記キャッシュコントローラは、前記ブロックの各ページの属性を示すページ属性情報をさらに有し、
前記キャッシュコントローラは、前記プロセッサから受信した属性情報が前記クリーンデータを示している場合、前記受信した属性情報が示すデータの、前記格納先ブロックにおける格納先ページ、に対応したページ属性情報を、前記クリーンデータを意味する情報を含んだページ属性情報に更新し、
前記キャッシュコントローラは、
前記クリーンデータを意味する情報を含んだ前記ページ属性情報に対応し有効データを記憶しているページについて、前記有効データの無効化の可否を前記プロセッサに問い合わせ、前記プロセッサから無効化が可能である旨の応答を受けた場合、前記有効データを無効化する、
請求項５に記載のストレージシステム。
【請求項７】
キャッシュコントローラと記憶媒体として不揮発性半導体メモリとを有するキャッシュメモリのキャッシュコントロール方法であって、
前記不揮発性半導体メモリは、複数のブロックを有し、前記複数のブロックのそれぞれは、データの消去単位であり、且つ、複数のページを有し、前記複数のページのそれぞれは、データの書き込み及び読み出しの単位であり、
所定のプロセッサが、前記キャッシュメモリに、データと、前記データが前記キャッシュメモリに格納される期間である格納期間に関連する情報を含む属性情報とを送信し、
前記キャッシュコントローラが、
前記プロセッサから、前記データと、前記属性情報とを受信し、
前記受信した属性情報と、前記複数のブロックに格納されているデータの属性情報とに基づいて、前記格納期間の長さが所定値以内のデータ同士が同じブロックに格納され、前記キャッシュメモリに格納される期間の長さが所定値以上異なるデータ同士が異なるブロックに格納されるように、前記受信したデータを格納する格納先ブロックを選択し、
前記選択した格納先ブロック内のページに、前記受信したデータを書き込み、
複数の記憶デバイスをＲＡＩＤとして制御し、前記複数の記憶デバイスのいずれかに記憶されている更新前のデータである旧データを前記旧データの更新後のデータである新データに更新する場合に冗長コードであるパリティを生成する処理において、
前記プロセッサが、前記旧データと前記旧データに関連付けられている旧パリティとを前記複数の記憶デバイスから読み出し、前記旧データと前記旧データを示す属性情報とを前記キャッシュメモリに送信し、且つ、前記旧パリティと前記旧パリティを示す属性情報とを前記キャッシュメモリに送信し、
前記キャッシュコントローラが、前記旧データを示す属性情報と前記旧パリティを示す属性情報とに基づいて、前記旧データ及び前記旧パリティの格納先ブロックとして、同じ格納先ブロックを選択する
ことを特徴とするキャッシュコントロール方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム及びキャッシュコントロール方法の技術に関する。
【背景技術】
【０００２】
ストレージシステムは、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）によって構成された複数の記憶デバイスを管理及び制御する。このようなストレージシステムは、複数の記憶デバイスの記憶領域を、論理ボリュームとして、ホストコンピュータに提供することができる。
【０００３】
近年、記憶媒体としてＮＡＮＤ型フラッシュメモリを用いた記憶デバイス（以下、フラッシュストレージ）が普及している。例えば、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｅｖｉｃｅ）である。一般的に、フラッシュストレージは、論理ボリュームの基とされるデータの最終記憶領域である記憶デバイスとして使用される。また、最近では、フラッシュストレージの高速性を活かして、ストレージシステムのキャッシュメモリとしても使用されている。
【０００４】
ここで、ＮＡＮＤ型フラッシュメモリは、次のような特性を有する。ＮＡＮＤ型フラッシュメモリは、不揮発性半導体メモリであって、データ格納領域として複数のブロックから構成されており、各ブロックは複数のページから構成されている。ＮＡＮＤ型フラッシュメモリでは、ページ単位で、データが書き込み及び読み出しされる。しかし、ＮＡＮＤ型フラッシュメモリは、データを上書きすること（データを記憶しているページに新たにデータを書き込むこと）ができない。したがって、ＮＡＮＤ型フラッシュメモリにおける書き込み先のページは、予め消去されていなければならない。このため、格納済みのデータを更新する場合は、ＮＡＮＤ型フラッシュメモリは、別の消去済みのページ（以降、空きページ）に、更新データを有効なデータとして格納し、更新前のデータを無効なデータとして管理する。また、ＮＡＮＤ型フラッシュメモリは、複数のページから構成されているブロック単位でしかデータを消去できない。ＮＡＮＤ型フラッシュメモリは、その特性上、ブロック毎に消去できる回数に制限がある。この消去の回数の制限を超えると、そのブロックにはデータを格納することができなくなる。このため、フラッシュストレージには寿命がある。
【０００５】
上記の特性より、空きページが少なくなるとデータを書き込めなくなるため、無効なデータを消去して空きページを作成する必要があるが、ブロック単位でしかデータを消去することができない。このため、無効なデータを消去するためには、有効なデータを別のブロックにコピーしてから、ブロック内のデータを消去する必要がある。この処理はリクラメーションと呼ばれる。リクラメーションによるコピー処理が発生すると、その負荷によりリード／ライト性能が低下する。また、別のページへのデータの書き込みが発生し、コピー元ブロック内のデータの消去につながるため、フラッシュメモリの劣化の原因となる。
【０００６】
特許文献１には、ストレージコントローラが最終格納領域であるフラッシュストレージにデータを格納する際、そのデータの更新頻度に関する情報を通知し、フラッシュストレージが更新頻度の高いデータを消去回数の少ないブロックに格納することで消去回数を平準化し、フラッシュストレージの長寿命化を図る技術が開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】ＷＯ２０１２／１３７２４２
【発明の概要】
【発明が解決しようとする課題】
【０００８】
キャッシュメモリは、最終記憶領域よりも高速性が求められる。また、キャッシュメモリ上では、最終記憶領域よりも頻繁にデータの更新が発生する。このため、ＮＡＮＤ型フラッシュメモリのようなフラッシュストレージをキャッシュメモリとして用いるとフラッシュストレージは劣化しやすく、フラッシュストレージは短期間で寿命に到達してしまうおそれがある。よって、フラッシュストレージをキャッシュメモリとして用いる場合、リクラメーションなどの内部制御にともなうコピー処理による性能低下やフラッシュメモリの劣化を抑制する必要がある。
【０００９】
特許文献１には、更新頻度を通知することは開示されているが、キャッシュメモリの制御に関する情報を用いることは開示されていない。
【００１０】
キャッシュメモリは、データを一時的に格納するために用いられるため、格納されたデータはいずれ消去される。このため、フラッシュストレージを最終記憶領域として用いる場合にはない、キャッシュメモリ特有の制御情報が存在する。本発明の目的は、キャッシュメモリ特有の制御情報を用いて、フラッシュストレージをキャッシュメモリとして使用した場合の内部制御を効率化することである。
【課題を解決するための手段】
【００１１】
ストレージシステムは、データを格納する複数の記憶デバイスと、プロセッサ及び複数の記憶デバイスに格納されるデータが一時的に格納されるキャッシュメモリを有するストレージコントローラと、を有する。キャッシュメモリは、記憶媒体として不揮発性半導体メモリを有し、且つ、不揮発性半導体メモリに接続されたキャッシュコントローラを有する。不揮発性半導体メモリは、複数のブロックを有する。複数のブロックのそれぞれは、データの消去単位であり、且つ、複数のページを有する。複数のページのそれぞれは、データの書き込み及び読み出しの単位である。プロセッサは、キャッシュメモリに、データとそのデータがキャッシュメモリに存在する期間に関連する情報を含む属性情報とを送信する。キャッシュコントローラは、プロセッサからデータと属性情報とを受信し、その受信した属性情報と複数のブロックに格納されているデータの属性情報とに基づいて、その受信したデータを格納する格納先ブロックを選択し、選択した格納先ブロック内のページにその受信したデータを書き込む。
【発明の効果】
【００１２】
本発明によれば、キャッシュメモリ特有の制御情報を用いて、フラッシュストレージをキャッシュメモリとして使用した場合の内部制御を効率化することができる。
【図面の簡単な説明】
【００１３】
【図１】データの書き込み処理の概要を示す。
【図２】ストレージシステムの全体構成を示す。
【図３】キャッシュ用フラッシュストレージの内部構成を示す。
【図４】ディスクコントローラのメモリに格納されるプログラム及び情報の例を示す。
【図５】ディスクコントローラの有するキャッシュステータス情報の例を示す。
【図６】キャッシュ用フラッシュストレージのメモリに格納されるプログラム及び情報の例を示す。
【図７】キャッシュ用フラッシュストレージの有するキャッシュステータス情報の例を示す。
【図８】論理アドレスと物理アドレスとの対応関係の一例を示す。
【図９】キャッシュ用フラッシュストレージにおける書き込み処理のフローチャートの例を示す。
【図１０】キャッシュ用フラッシュストレージ１１６の書き込み処理時におけるページ情報の例を示す。
【図１１】或る時点におけるページ情報の例を示す。
【図１２】書き込み処理が発生した後の時点におけるページ情報の例を示す。
【図１３】有効データの退避処理を行った後の時点におけるページ情報の例を示す。
【図１４】全てが無効ページとなったブロックを消去した後のページ情報の例を示す。
【図１５】ＲＡＩＤ５によるデータの上書き更新処理の概要を示す。
【図１６】ディスクコントローラが、ホストから発行されたデータをキャッシュ用フラッシュストレージに書き込む処理のフローチャートの例を示す。
【図１７】パリティ生成処理のフローチャートの例を示す。
【図１８】キャッシュ用フラッシュストレージに格納された新データと新パリティをディスクに書き込む処理のフローチャートの例を示す。
【図１９】或る時点におけるページ情報の例を示す。
【図２０】パリティ生成処理の或る時点におけるページ情報の例を示す。
【図２１】或る時点におけるページ情報の例を示す。
【図２２】パリティ生成処理の或る時点におけるページ情報の例を示す。
【図２３】ページ毎の属性情報を有するページ情報の例を示す。
【図２４】ページ毎の属性情報を利用したデータ処理のフローチャートの例を示す。
【図２５】キャッシュ用フラッシュストレージがデータを格納する別の例を示す。
【発明を実施するための形態】
【００１４】
以下、フラッシュメモリを記憶媒体とする記憶デバイスをキャッシュメモリとして用いたストレージシステムの一実施形態について、図面を参照しながら説明する。
【００１５】
前述の通り、キャッシュメモリは、データを一時的に格納するために使用されるため、キャッシュメモリ上のデータはいずれ消去される。ここで、キャッシュメモリにデータが格納されている期間は、データの属性（種別や状態）によって予測可能である。また、キャッシュメモリにデータが格納されている期間には差があり得る。本実施例では、キャッシュメモリにおけるデータの属性に基づく格納期間の違いを利用して、キャッシュ用フラッシュストレージが、データを格納するブロックの選択を行う。例えば、キャッシュ用フラッシュストレージは、短期間で消去可能となる複数のデータを１つのブロックに格納することで、無効データを１つのブロックに集中させることができる。これにより、キャッシュ用フラッシュストレージは、リクラメーションによるコピー処理の発生を防ぐことができる。
【００１６】
図１は、本実施例の概要を示す。
図１において、ストレージシステム１０１は、ディスク１５１へのデータの書き込み／読み出しを制御するディスクコントローラ１０６を有する。ディスクコントローラ１０６は、ＣＰＵ１１８と、キャッシュ用フラッシュストレージ１１６を有する。キャッシュ用フラッシュストレージ１１６は、記憶媒体としてフラッシュメモリを有し、ディスクへの書き込みまたはディスクからの読み出しの際に、データを一時的に格納するキャッシュとして使用される。
【００１７】
例えば、ディスクコントローラ１０６は、ホストコンピュータ１０２から、データの書き込み要求を受けると、一旦キャッシュ用フラッシュストレージ１１６にデータを格納し、ホストコンピュータ１０２に対して完了応答を返す。これにより、ストレージシステム１０１のホストコンピュータ１０２に対する応答性能が向上する。
【００１８】
また、ディスクコントローラ１０６は、データの読み出し要求を受けると、ディスク１５１からデータを読み出し、キャッシュ用フラッシュストレージ１１６に格納し、ホストコンピュータ１０２にデータを送信する。次回、同じデータの読み出し要求を受けた場合、ディスクコントローラ１０６は、キャッシュ用フラッシュストレージ１１６からデータを読み出してホストコンピュータ１０２に応答する。これにより、ストレージシステム１０１の応答性能が向上する。
【００１９】
図１を用いて、データがキャッシュ用フラッシュストレージ１１６に格納される際の処理を説明する。なお、データＤ１、Ｄ２及びＤ３は、格納済みのデータを示す。データＤ４がキャッシュ用フラッシュストレージ１１６に転送される（Ｓ９０１）。この際、ＣＰＵ１１８は、キャッシュ用フラッシュストレージ１１６に対して、データＤ４の書き込み指示とともに、そのデータＤ４の属性情報を通知する（Ｓ９０２）。キャッシュ用フラッシュストレージ１１６のメモリコントローラ２００は、受信したデータＤ４の属性情報と、格納済みデータＤ１、Ｄ２及びＤ３の属性情報とに基づいて、データＤ４をどのブロック４２２に書き込むかを決定する（Ｓ９０３）。ここで、メモリコントローラ２００は、同じ属性のデータを格納しているブロックを選択する。メモリコントローラ２００は、データの属性が違っていたとしても、格納期間が同じ又は近い属性のデータを格納しているブロックを選択してもよい。そして、メモリコントローラ２００は、決定したブロック内のページ４２３にデータを書き込む（Ｓ９０４）。
【００２０】
ここで、データの属性情報とは、データの属性を示す情報であり、例えば、ストレージシステム１０１におけるデータの種別又は状態等を示す情報である。前述の通り、キャッシュメモリにおいて、そのデータがキャッシュ上に格納されている期間は、データの種別又は状態等によって異なり得る。例えば、比較的早期にキャッシュメモリから消去してもよいデータと、一定期間は消去せずにキャッシュメモリ上に保持すべきデータとがある。
【００２１】
例えば、データの種別として、２つのキャッシュメモリにデータを二重化して書き込む際の「マスターデータ」及び「ミラーデータ」がある。さらに、データの種別として、ＲＡＩＤ５やＲＡＩＤ６においてパリティを生成する際の「旧データ」、「旧パリティ」、「新データ」及び「新パリティ」がある。さらに、データの種別として、キャッシュされているデータがディスクにも存在するか否かの状態を示す「クリーンデータ」及び「ダーティデータ」がある。次に、これらのデータの種別毎の格納期間の違いについて説明する。
【００２２】
データの種別がマスターデータの場合、そのデータは、ディスクに書き込まれた後も、キャッシュメモリ上に保持される。データがキャッシュメモリ上に格納されていれば、ホストコンピュータ１０２からの要求に対しての応答性能を高めることができるからである。データの種別がミラーデータの場合、そのデータは、ディスクに書き込まれた後、破棄されてもよい。データを二重化するのは、データがディスクに書き込まれる前の障害に備えて冗長化しておくためであり、データがディスクに書き込まれた後は、ミラーデータが破棄されても問題ないためである。つまり、マスターデータは、ミラーデータと比較して、キャッシュメモリ上に保持される期間が長い。
【００２３】
新パリティの生成処理において、旧データ及び旧パリティは、新パリティを生成した後、不要となり、キャッシュメモリから破棄される。新パリティは、ディスクに書き込まれた後に、キャッシュメモリから破棄される。なぜなら、新パリティは、ストレージシステム１０１の内部における冗長化のために生成されるデータだからである。つまり、新パリティは、ホストコンピュータ１０２から直接読み出し要求を受けることがなく、直接読み出し要求を受ける可能性のある新データと比較して、ディスクへ書き込まれた後もキャッシュメモリ上に保持しておく必要性が小さいためである。なお、新パリティは、このパリティ情報を更新するような近傍へのデータ書き込みが発生した場合に、キャッシュメモリに保持されても良い。この場合、新パリティは、旧パリティとして使用されるため、新パリティをキャッシュメモリに保持しておくことで、ディスクからの読み込み処理を軽減することができるからである。
【００２４】
新データは、上述のマスターデータ又はミラーデータに該当するので、キャッシュメモリ上に格納されている期間が長い。したがって、旧データ及び旧パリティ、新パリティ、新データの順にキャッシュメモリ上に保持される期間が長くなる。
【００２５】
ダーティデータは、少なくともディスクに書き込まれるまでキャッシュメモリ上に保持されている必要がある。クリーンデータは、ディスクにも同じデータが存在するため、キャッシュメモリから破棄されても良い。
【００２６】
以上のように、データの属性（種別又は状態、若しくはこれらの組み合わせ）によって、そのデータが、将来的にキャッシュメモリに保持される期間が異なる。本実施例では、データの属性に基づく格納期間の違いを利用して、キャッシュ用フラッシュストレージ１１６が、データを格納するブロック４２２を決定する。しかし、キャッシュ用フラッシュストレージ１１６は、受信したデータそのものからそのデータの種別又は状態等を判断することはできない。ここで、ディスクコントローラ１０６のＣＰＵ１１８は、パリティ生成及びデータの二重書き等を制御するために、データの属性を管理している。しかし、ＣＰＵ１１８は、キャッシュ用フラッシュストレージ１１６の内部の物理的なブロック及びページを認識することができないため、データの書き込み先となるページを選択することができない。なぜなら、ＣＰＵ１１８は、キャッシュ用フラッシュストレージ１１６から提供される論理アドレスを指定してデータを転送するからである。
【００２７】
そこで、本実施例では、ディスクコントローラ１０６のＣＰＵ１１８と、キャッシュ用フラッシュストレージ１１６とが連携して処理を実行する。つまり、本実施例では、データの二重化及びパリティ生成を制御するＣＰＵ１１８が、データの属性情報をキャッシュ用フラッシュストレージ１１６に通知し、メモリコントローラ２００がデータの格納先を決定する。
【００２８】
メモリコントローラ２００は、すでに格納済みのデータが存在する場合、その格納済みのデータの属性に基づいて、新たなデータを格納すべきブロックを選択しても良い。メモリコントローラ２００は、空きブロックにデータを格納した際に、そのブロックに格納したデータの属性を設定してもよい。また、コントローラ２００は、予めブロック毎に格納すべきデータの属性を設定しておいてもよい。
【００２９】
キャッシュメモリにデータが保持されている期間は、例えば、データが書き込まれてから不要になるまでの期間（ＣＰＵ１１８が不要であると判断するまでの期間）、データが書き込まれてから削除されるまでの期間、又はデータが書き込まれてから特定の処理が完了するまでの期間であってもよい。
【００３０】
キャッシュ用フラッシュストレージ１１６は、メモリ２１１（図３参照）に、データの属性情報と属性毎の格納期間の関係を表す情報を保持してもよい。この場合、キャッシュ用フラッシュストレージ１１６は、受信したデータの属性情報から格納期間を求め、格納期間に基づいてデータの格納先を決定してもよい。
【００３１】
ＣＰＵ１１８がキャッシュ用フラッシュストレージ１１６に送信する属性情報には、データの種別又は状態等が含まれるが、格納期間が含まれてもよい。この場合、キャッシュ用フラッシュストレージ１１６は、属性情報に含まれる格納期間に基づいて、データをどのブロックに書き込むかを決定する。例えば、キャッシュ用フラッシュストレージ１１６は、格納期間の長さが比較的近い（例えば、格納期間の長さが所定の範囲内に含まれる）データが、同じブロックに格納されるように書き込み先のブロックを選択する。又は、キャッシュ用フラッシュストレージ１１６は、格納期間の長さの差が比較的大きい（例えば、格納期間所定値以上である）データが、異なるブロックに格納されるように書き込み先のブロックを選択する。
【００３２】
例えば、格納期間が「１」〜「１０」までの値を取り得るとし、「１」が最も短い格納期間を示し、「１０」が最も長い格納期間を示すとする。この場合、キャッシュ用フラッシュストレージ１１６は、格納期間の値毎に異なるブロックにデータを格納してもよい。例えば、キャッシュ用フラッシュストレージ１１６は、格納期間の比較的短い１〜５のデータを同じブロックに、格納期間の比較的長い６〜１０のデータを同じブロックに格納してもよい。この場合、図１において、データＤ１の格納期間が「１０」と長く、データＤ２とＤ３の格納期間が「１」と短く、データＤ４の格納期間が「１」〜「５」の何れかであるとすると、データＤ４はブロック＃１に格納される。
【００３３】
これにより、１つのブロック４２２の有する各ページに格納されたデータが、ＣＰＵ１１８によって、比較的同じようなタイミングで不要と判断される可能性が高くなる。必要なデータを一つも格納していないブロックは、リクラメーションにおいて、データを別のブロックに退避（コピー）させることなく、そのまま消去することができる。つまり、この場合、データを別のブロックに退避（コピー）する必要がなくなるので、この退避（コピー）処理によるキャッシュ用フラッシュストレージ１１６の性能低下が軽減される。また、各ブロック４２３に書き込むデータ量が減り、消去する回数も減るので、キャッシュ用フラッシュストレージ１１６の寿命を長くすることができる。
【００３４】
キャッシュ用フラッシュストレージ１１６に一旦記憶されたデータは、所定のタイミングで、ディスク１５１に格納される。このように、キャッシュデータをディスク１５１に格納することを「デステージ」と言うことがある。デステージが完了していないキャッシュデータを「ダーティデータ」、デステージが完了したキャッシュデータを「クリーンデータ」と言うことがある。デステージが完了していないダーティデータをデステージすることを、「クリーン化」と言うことがある。
【００３５】
また、何のデータも書き込まれていないページ、つまり消去済みのページを、「空きページ」と言うことがある。ページに書き込まれている有効な（参照可能な）データを「有効データ」と言い、この有効データを有するページを「有効ページ」と言うことがある。ページに書き込まれているものの無効な（参照不可能な）データを「無効データ」と言い、この無効データを有するページを「無効ページ」と言うことがある。なお、或る論理ページについて、有効データは、その或る論理ページに書き込まれた最新のデータであり、無効データは、その或る論理ページに有効データが書き込まれるよりも過去に書き込まれたデータである。例えば、有効データとして第１のデータが書き込まれている或る論理ページに第２のデータが書き込まれた場合、第２のデータが有効データであり、第１のデータが無効データとなる（以下「無効化」という）。以下では、本実施例の詳細を説明する。
【００３６】
図２は、ストレージシステムの全体構成を示す。
【００３７】
ストレージシステム１０１には、ホストコンピュータ１０２及び管理ホストコンピュータ１０３が接続されている。ホストコンピュータ１０２は、通信ポート（不図示）を有し、この通信ポートを介して、通信ネットワークのような接続経路１０４を経由して、ストレージシステム１０１と通信する。管理ホストコンピュータ１０３も、通信ポート（不図示）を有し、この通信ポートを介して、通信ネットワークのような接続経路１０５を経由して、ストレージシステム１０１と通信する。
【００３８】
ホストコンピュータ１０２は、ストレージシステム１０１から提供される論理ボリュームに対してデータを読み書きする装置（例えば、計算機又はサーバ）である。ホストコンピュータ１０２は、データのアクセス指示（書き込み指示又は読み出し指示）を、ストレージシステム１０１に送信する。アクセス指示には、アクセス先を表す情報、例えば、アクセス先の論理ボリュームのＩＤ（例えばＬＵＮ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ  Ｎｕｍｂｅｒ））とアクセス先の領域（アクセス先の論理ボリュームにおける領域）のアドレス（例えばＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）のような論理アドレス）とを含んだ情報が関連付けられている。なお、他のストレージシステムから、アクセス指示を受信する場合もある。管理ホストコンピュータ１０３は、ストレージシステムを管理する計算機である。
【００３９】
図２において、ホストコンピュータ１０２とストレージシステム１０１とは、直接接続されているが、他の接続の構成であっても良い。例えば、複数のホストコンピュータ１０２、管理ホストコンピュータ１０３及びストレージシステム１０１が、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）によって相互に接続されてもよい。ＳＡＮには、例えば、ＦＣ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）又はｉＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）等のプロトコルを使用することができる。また、接続経路１０４と接続経路１０５とは、同じ接続経路であっても良い。
【００４０】
ストレージシステム１０１は、内部にディスクコントローラ１０６、１０７を備える。ディスクコントローラ１０６とディスクコントローラ１０７は、双方向に通信可能な内部バス１４１で接続されている。１又は複数のディスク１５１は、接続経路１４２によって、ディスクコントローラ１０６、１０７と接続されている。
【００４１】
ディスク１５１は、データを最終的に記憶する装置である。ディスク１５１には、例えば、ＦＣ、ＳＡＳ又はＡＴＡ等の規格に基づいたＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、フラッシュＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｅｖｉｃｅ）等が使用される。本実施形態において、「ディスク」とは、ディスク型の記憶デバイス（例えばＨＤＤ）であっても非ディスク型の記憶デバイス（例えばＳＳＤ）であっても良い。
【００４２】
ディスクコントローラ１０６は、ディスク１５１へのデータの書き込み、読み出しを制御する。ディスクコントローラ１０６は、ホスト入出力制御部１１２、データ転送制御部１１３、ディスク入出力制御部１１４、メモリ１１７、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１８、管理ＩＦ１１９、キャッシュメモリ１１５、及びキャッシュ用フラッシュストレージ１１６を備える。これらの要素１１２〜１１９は、例えば、それぞれハードウェアであり、内部バス１３１〜１３６によって接続されている。ディスクコントローラ１０７は、ディスクコントローラ１０６と同様の構成であるので説明を省略する。
【００４３】
ＣＰＵ１１８は、メモリ１１７に格納されたコンピュータプログラムを実行し、ストレージシステム１０１の備える各種機能を実現する。キャッシュメモリ１１５及びキャッシュ用フラッシュストレージ１１６は、ディスク１５１から読み出したデータ及びディスク１５１に書き込むデータを、一時的に格納する。一時的とは、所定の期間経過後、又は所定の処理が完了した後にデータが削除されることを意味する。これにより、ホストコンピュータ１０２に対する応答性能を向上させることができる。キャッシュメモリ１１５は、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）であるが、他種の揮発性メモリ（又は不揮発性メモリ）でも良い。キャッシュ用フラッシュストレージ１１６は、例えば、記憶媒体としてＮＡＮＤ型フラッシュメモリを有する記憶デバイスである。しかし、記憶媒体は、追記型の不揮発性半導体メモリであればよく、例えばＭＲＡＭ（Ｍａｇｎｅｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ：磁気抵抗メモリ）、ＰＲＡＭ（Ｐｈａｓｅ  Ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ：相変化メモリ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔａｎｃｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ：抵抗変化メモリ）などであってもよい。
【００４４】
図２に示すように、ディスクコントローラは、二重化されてもよい（参照符号１０６、１０７）。例えば、ディスクコントローラ１０６に障害が発生した場合は、ディスクコントローラ１０７が代わりを務める。これにより、ストレージシステム１０１の耐障害性を高めている。本実施例では、ディスクコントローラ１０６を通常時に処理を実行する「マスター側」とする。ディスクコントローラ１０７を、マスター側ディスクコントローラの障害時に代わりを務める「ミラー側」とする。本実施例では、ディスクコントローラが二重化されているが、1つのディスクコントローラ内で各ハードウェアが二重化されていても良い。
【００４５】
ホストコンピュータ１０２からデータの書き込み指示を受けた場合、ディスクコントローラ１０６のＣＰＵ１１８は、そのデータを、ホスト入出力制御部１１２及びデータ転送制御部１１３を介して、キャッシュメモリ１１５又はキャッシュ用フラッシュストレージ１１６に一時的に格納する。このキャッシュメモリ１１５又はキャッシュ用フラッシュストレージ１１６に一時的に格納されたデータを、キャッシュデータということがある。そして、ディスクコントローラ１０６のＣＰＵ１１８は、そのデータを、データ転送制御部１１３を介してキャッシュメモリ１１５又はキャッシュ用フラッシュストレージ１１６から読み出し、ディスク入出力制御部１１４を介して、ディスク１５１に格納する。ここで、ディスクコントローラ１０６とディスクコントローラ１０７が二重化されている場合は、ディスクコントローラ１０６からディスクコントローラ１０７にデータが転送され、ディスクコントローラ１０７でも同様の処理が行われる。
【００４６】
ホストコンピュータ１０２からデータの読み出し指示を受けた場合、ディスクコントローラ１０６のＣＰＵ１１８は、ディスク１５１からデータを読み出して、一時的にキャッシュメモリ１１５又はキャッシュ用フラッシュストレージ１１６に格納する。このキャッシュメモリ１１５又はキャッシュ用フラッシュストレージ１１６に一時的に格納されたデータも、キャッシュデータという。そして、ディスクコントローラ１０６のＣＰＵ１１８は、そのデータを、キャッシュメモリ１１５又はキャッシュ用フラッシュストレージ１１６から読み出して、ホストコンピュータ１０２に転送する。
【００４７】
なお、図２によれば、ディスクコントローラ１０６の内部に、キャッシュ用フラッシュストレージ１１６が存在し、キャッシュ用フラッシュストレージ１１６に、コントローラ部（図２において、ディスクコントローラ１０６のうちのキャッシュ用フラッシュストレージ１１６以外の要素を含んだ部分）１２０が接続されている。しかし、構成は、図２に示す構成に限らず、他の構成であっても良い。例えば、キャッシュ用フラッシュストレージ１１６が所定のＩＦを備え、このＩＦを介してデータ転送制御部１１３に接続されてもよい。又は、キャッシュ用フラッシュストレージ１１６が所定のＩＦを備え、接続経路１４２に、ディスク１５１と同じように接続されてもよい。又は、キャッシュメモリ１１５は備えられず、キャッシュとして使用される記憶デバイスは、キャッシュ用フラッシュストレージ１１６のみであっても良い。又は、キャッシュメモリ１１５が、メモリ１１７と同じ物理メモリを使用する構成であっても良い。
【００４８】
図３は、キャッシュ用フラッシュストレージ１１６の内部構成を示す。
【００４９】
キャッシュ用フラッシュストレージ１１６は、１以上のフラッシュメモリチップ２０４と、１以上のフラッシュメモリチップ２０４に接続されたメモリコントローラ２００とを有する。メモリコントローラ２００は、例えば、上位入出力制御部２０１、データ転送制御部２０２、フラッシュ入出力制御部２０３、ＣＰＵ２１２、メモリ２１１及びバッファメモリ２１３を含む。メモリ２２１、ＣＰＵ２１２、バッファメモリ２１３、上位入出力制御部２０１、データ転送制御部２０２及びフラッシュ入出力制御部２０３は、双方向に通信可能な内部バス２２２で接続されている。フラッシュ入出力制御部２０３とフラッシュメモリチップ２０４、及びフラッシュメモリチップ２０４同士は、双方向に通信可能なフラッシュメモリバス２２３で接続されている。
【００５０】
上位入出力制御部２０１は、ディスクコントローラ１０６の内部バス１３４を通じて、データ転送制御部１１３に接続され、上位の装置であるディスクコントローラ１０６と、キャッシュ用フラッシュストレージ１１６との間のデータの入出力を制御する。
【００５１】
データ転送制御部２０２は、キャッシュ用フラッシュストレージ１１６の内部のデータ転送を制御する。つまり、データ転送制御部２０２は、ＣＰＵ２１２と、バッファメモリ２１３と、上位入出力制御部２０１と、フラッシュ入出力制御部２０３との間のデータのやり取りを制御する。
【００５２】
フラッシュ入出力制御部２０３は、フラッシュメモリバス２２３を通じて、フラッシュメモリチップ２０４に対するデータの入出力を制御する。
【００５３】
ＣＰＵ２１２は、内部バス２２２でデータ転送制御部２０２と接続され、メモリ２１１に格納されたプログラムに従って各種の演算処理を実行し、キャッシュ用フラッシュストレージ１１６全体を制御する。
【００５４】
バッファメモリ２１３は、上位入出力制御部２０１及びフラッシュ入出力制御部２０３とやり取りするデータを一時的に格納する。例えば、上位入出力制御部２０１から受け取ったデータが、一時的にバッファメモリ２１３に格納され、フラッシュ入出力制御部２０３に転送される。フラッシュメモリチップ２０４から取得したデータが、一時的にバッファメモリ２１３に格納されても良い。
【００５５】
図３に示す各構成部品は、キャッシュ用フラッシュストレージ１１６を構成する上で、必ずしも全てが必要というわけではない。例えば、キャッシュ用フラッシュストレージ１１６は、ＣＰＵ２１２等の各制御部が一体となったチップを用いて構成されても良い。又は、キャッシュ用フラッシュストレージ１１６は、一部のみが統合されたチップを用いて構成されても良い。又は、メモリ２１１とバッファメモリ２１３が、物理的に同一のメモリである構成であっても良い。
【００５６】
図４は、ディスクコントローラ１０６のメモリ１１７に格納されるプログラム及び情報の一例を示す。
【００５７】
メモリ１１７には、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）１９０１、ストレージ制御プログラム１９０２、データ転送制御プログラム１９０３、ホスト入出力制御プログラム１９０４、及びキャッシュ管理プログラム１９２１等が格納される。これらプログラムは、ＣＰＵ１１８において実行され得る。メモリ１１７には、キャッシュステータス情報１９２２及び構成情報１９１１等が格納される。これら情報は、ＣＰＵ１１８で実行されるプログラムに使用され得る。
【００５８】
ＯＳ１９０１は、ＣＰＵ１１８が各プログラムを実行する際のスケジューリング等の基本処理を行うプログラムである。
【００５９】
ストレージ制御プログラム１９０２は、ストレージシステム１０１の備える複数のディスク１５１をＲＡＩＤ制御する。ここで、ストレージ制御プログラム１９０２は、ＲＡＩＤ５または６などで制御する場合、パリティの生成を制御する。ディスクコントローラ１０６は、さらにパリティ生成回路を備え、その回路を用いてパリティを生成しても良い。又は、ディスクコントローラ１０６は、ＣＰＵ１１８でパリティ生成プログラムを実行してパリティを生成してもよい。ストレージ制御プログラム１９０２は、ディスク入出力制御部１１４を制御する。つまり、ストレージ制御プログラム１９０２は、ディスク１５１に対するデータの書き込み、読み出し及び消去等を行う。
【００６０】
データ転送制御プログラム１９０３は、データ転送制御部１１３を制御する。つまり、データ転送制御プログラム１９０３は、データ転送制御部１１３を制御して、ＣＰＵ１１８と、キャッシュメモリ１１５と、キャッシュ用フラッシュストレージ１１６と、ホスト入出力制御部１１２と、ディスク入出力制御部１１４との間のデータのやり取りを制御する。
【００６１】
ホスト入出力制御プログラム１９０４は、ホスト入出力制御部１１２を制御する。つまり、ホスト入出力制御プログラム１９０４は、ホストコンピュータ１０２とディスクコントローラ１０６との間のデータのやり取りを制御する。
【００６２】
キャッシュ管理プログラム１９２１は、キャッシュメモリ１１５及び／又はキャッシュ用フラッシュストレージ１１６に格納されたキャッシュデータを管理する。
【００６３】
キャッシュステータス情報１９２２は、キャッシュメモリ１１５及び／又はキャッシュ用フラッシュストレージ１１６に格納されたキャッシュデータのステータスに関する情報を有する。キャッシュステータス情報１９２２は、例えば、キャッシュ管理プログラム１９２１から使用される。キャッシュステータス情報１９２２の詳細については、後述する。
【００６４】
構成情報１９１１は、ストレージシステム１０１を構成する各部品及びストレージシステム１０１に格納される各データ等の情報を有する。構成情報１９１１は、例えば、ストレージ制御プログラム１９０２等に使用される。構成情報１９１１は、ＲＡＩＤグループを構成するディスクのＩＤ、ＲＡＩＤレベル、論理ボリュームのＩＤ、論理ボリュームを構成するディスク及び／又はＲＡＩＤグループのＩＤなどを含む。
【００６５】
図５は、ディスクコントローラ１０６の有するキャッシュステータス情報１９２２ａを示す。
【００６６】
キャッシュステータス情報１９２２ａは、例えば、項目として、ホスト側論理アドレス７０１と、キャッシュ側論理アドレス７０２と、セグメント属性７０３と、データ属性７０４とを有する。
【００６７】
ホスト側論理アドレス７０１は、ディスクコントローラ１０６がホストコンピュータ１０２に提供する論理アドレスである。つまり、ホストコンピュータ１０２が認識し、アクセスの際に指定する論理ボリューム上の論理アドレスである。ＣＰＵ１１８は、ホストコンピュータ１０２からホスト側論理アドレスを指定したデータの書き込み／読み出しの指示を受けると、キャッシュ側論理アドレス７０２を確保する。また、ＣＰＵ１１８は、データの種別又は状態に応じてデータ属性７０４を更新する。そして、ＣＰＵ１１８は、キャッシュ側論理アドレスを指定してキャッシュ用フラッシュストレージ１１６にデータを転送し、データ属性を通知する。データ属性は、データの書き込みを指示するコマンドに含まれてもよい。また、パリティの生成を行う場合は、ＣＰＵ１１８は、キャッシュ側論理アドレスを指定して、旧データ、旧パリティ及び新パリティをキャッシュ用フラッシュストレージ１１６に転送し、各データのデータ属性を通知する。
【００６８】
キャッシュ側論理アドレス７０２は、所定のサイズのセグメント単位に区切って管理される。本実施例では、セグメントのサイズは、フラッシュメモリのページのサイズと同じとする。セグメント属性７０３には、セグメントに対応するデータが有効又は無効であるかが記録される。ＣＰＵ１１８は、セグメント属性７０３が「有効」のデータは、キャッシュメモリ上に存在していると認識する。ＣＰＵ１１８は、セグメント属性７０３が「無効」のデータは、キャッシュメモリ上に存在していないと認識する。ＣＰＵ１１８は、データをキャッシュメモリ上から削除すると判断した場合、セグメント属性７０３を「無効」とし、データ属性７０４を「フリー」とする。そして、ＣＰＵ１１８は、キャッシュ用フラッシュストレージ１１６に対して、その論理アドレスのデータの属性が「フリー」である旨を通知する。キャッシュ用フラッシュストレージ１１６は、その通知を受けて、対象となるデータが「フリー」になったことを認識し、無効データとして管理する。
【００６９】
また、ＣＰＵ１１８は、キャッシュステータス情報１９２２ａを変更した場合、その変更を、キャッシュ用フラッシュストレージ１１６に通知しても良い。そして、キャッシュ用フラッシュストレージ１１６は、この通知を受けて、キャッシュステータス情報３１４ａを更新する。また、ＣＰＵ１１８は、キャッシュ用フラッシュストレージ１１６に、データ属性６０３ではなく最低限必要となる格納期間６０４を通知しても良い。
【００７０】
なお、格納期間６０４は、メモリコントローラ２００によって算出されてもよい。例えば、メモリコントローラ２００は、データの属性毎に各データをブロックに書き込んだ後、そのデータが無効となる（または、消去される）までの時間を計測し、その計測した時間に基づいて格納期間６０４の値を決定してもよい。
【００７１】
また、キャッシュ用フラッシュストレージ１１６が、自己の記憶するキャッシュステータス情報３１４ａに含まれるデータ属性６０３及び／又は格納期間６０４等を用いて、ディスクコントローラ１０６に対して、このキャッシュデータにおける推奨する処理を通知しても良い。この方法は、格納期間６０４が、当初の予想とは異なる場合等に有効である。例えば、図２１に示すページ情報３１６ｇの論理アドレス５０４が「２００」、「２０１」、「２１０」及び「２１１」の有効ページに格納されているキャッシュデータが、クリーンデータであり、このデータの参照頻度が低く、破棄（無効化）した場合の影響が小さいとする。この場合、キャッシュ用フラッシュストレージ１１６は、これらのキャッシュデータが無効化された方が自己のリソースの消費が小さくなるため、ディスクコントローラ１０６に対してこれらのデータを破棄（無効化）することを推奨しても良い。
【００７２】
また、ディスクコントローラ１０６で管理されるキャッシュ用フラッシュストレージ１１６の論理的な容量と、キャッシュ用フラッシュストレージ１１６が実際に有する物理的な容量とが異なる場合において、ディスクコントローラ１０６側で不要となった論理アドレスをキャッシュ用フラッシュストレージ１１６に通知しても良い。これにより、キャッシュ用フラッシュストレージ１１６は、その不要と通知された論理アドレスに対応する領域を開放することができ、実効使用容量を低減することができる。 
【００７３】
また、論理アドレス６０１（又はキャッシュ側論理アドレス７０２）を、ページ属性６０２（又はセグメント属性７０３）の「有効」と「無効」とで、異なるアドレス体系としても良い。つまり、論理アドレス６０１（又はキャッシュ側論理アドレス７０２）の値が何れのアドレス体系に属するかによって、そのページ属性（又はセグメント属性）が「有効」であるか「無効」であるかを判定できるようにしても良い。この方法は、キャッシュ用フラッシュストレージ１１６がディスクコントローラ１０６に対して仮想的な論理空間を提供する場合に有効である。
【００７４】
図６は、キャッシュ用フラッシュストレージ１１６のメモリ２１１に格納されるプログラム及び情報の一例を示す。
【００７５】
メモリ２１１には、ＯＳ３０１、フラッシュストレージ制御プログラム３０２、データ転送制御プログラム３０３、上位入出力制御プログラム３０４、論理物理アドレス変換プログラム３１１、及びキャッシュステータス管理プログラム３１３等が格納される。これらプログラムは、ＣＰＵ２１２において実行され得る。メモリ２１１には、キャッシュステータス情報３１４、論理物理アドレス変換情報３１２及びページ情報３１６等が格納される。これら情報は、ＣＰＵ２１２で実行されるプログラムに使用され得る。
【００７６】
ＯＳ３０１は、ＣＰＵ２１２が各プログラムを実行する際のスケジューリング等の基本処理を行う。
【００７７】
データ転送制御プログラム３０３は、データ転送制御部２０２を制御する。つまり、データ転送制御プログラム３０３は、ＣＰＵ２１２と、上位入出力制御部２０１と、バッファメモリ２１３との間のデータのやり取りを制御する。
【００７８】
上位入出力制御プログラム３０４は、上位入出力制御部２０１を制御する。つまり、上位入出力制御プログラム３０４は、上位の装置であるディスクコントローラ１０６のデータ転送制御部１１３との間のデータのやり取りを制御する。
【００７９】
フラッシュストレージ制御プログラム３０２は、キャッシュ用フラッシュストレージ１１６全体を制御する。例えば、フラッシュストレージ制御プログラム３０２は、上位の装置に提供する論理ボリュームを管理する。例えば、フラッシュストレージ制御プログラム３０２は、バッファメモリ２１３を管理する。例えば、フラッシュストレージ制御プログラム３０２は、フラッシュ入出力制御部２０３を制御して、フラッシュメモリチップ２０４に対してデータの書き込み、読み出し及び消去等を行う。
【００８０】
キャッシュステータス情報３１４は、キャッシュ用フラッシュストレージ１１６に格納されたキャッシュデータが、上位の装置（本実施形態では、キャッシュ用フラッシュストレージ１１６の外部のＣＰＵ１１８）においてどのようなステータスであるかを示す情報を有する。キャッシュステータス情報３１４の詳細については、後述する。
【００８１】
キャッシュステータス管理プログラム３１３は、キャッシュ用フラッシュストレージ１１６の外部から受信した属性情報に基づいてキャッシュステータス情報３１４を更新する。
【００８２】
論理物理アドレス変換情報３１２は、論理アドレスと物理アドレスの対応関係を示す情報を有する。つまり、論理物理アドレス変換情報３１２は、キャッシュ用フラッシュストレージ１１６が上位の装置に提供する論理アドレスと、キャッシュ用フラッシュストレージ１１６が内部で管理するフラッシュメモリの物理アドレスとの対応関係を有する。
【００８３】
論理物理アドレス変換プログラム３１１は、論理物理アドレス変換情報３１２を使用して、論理アドレスと物理アドレスとを変換する。つまり、論理物理アドレス変換プログラム３１１は、上位の装置から、論理アドレスを含む入出力要求を受けると、論理物理アドレス変換情報３１２を使用して、フラッシュメモリチップ２０４の物理アドレスに変換する。これにより、入出力要求に対応するデータが格納された物理記憶領域を特定することができる。
【００８４】
図７は、キャッシュ用フラッシュストレージ１１６の有するキャッシュステータス情報３１４ａを示す。
【００８５】
キャッシュステータス情報３１４ａは、例えば、項目として、論理アドレス６０１と、ページ属性６０２と、データ属性６０３と、格納期間６０４とを有する。
【００８６】
論理アドレス６０１は、キャッシュ用フラッシュストレージ１１６における論理アドレスを示す。
【００８７】
ページ属性６０２は、論理アドレス６０１の示す論理アドレスに対応するページの属性を示す。ページ属性６０２に格納される情報は、ページ情報３１６に示すページ属性５０３と同様である。
【００８８】
データ属性６０３は、論理アドレス６０１の示す論理アドレスに対応するページに格納されているデータの属性を示す。データ属性６０３には、例えば、当該データがマスター側又はミラー側の何れであるかを示す情報が含まれて良い。また、データ属性６０３には、例えば、当該データが新データ、旧データ、新パリティ又は旧パリティの何れであるかを示す情報が含まれて良い。また、データ属性６０３には、当該データがダーティデータ、クリーンデータ又はフリーデータ（つまり、無効化されたデータ）の何れであるかを示す情報が含まれて良い。
【００８９】
データ属性６０３は、メモリコントローラ２００の外部のＣＰＵ１１８から通知される。そして、メモリコントローラ２００が、データ属性６０３を更新する。メモリコントローラ２００は、データを書き込む際、このデータ属性６０３を参照して、データの格納先となるブロックを選択する。
【００９０】
格納期間６０４は、データ属性６０３に対応する予測格納期間を示す。例えば、格納期間６０４の値が大きい程、キャッシュ上に格納されていると予測される期間が長く、格納期間６０４の値が小さい程、キャッシュ上に格納されていると予測される期間が短いとする。格納期間６０４は、上位装置のＣＰＵ１１８から通知されたデータ属性６０３に基づいて、更新される。若しくは、格納期間６０４は、上位装置のディスクコントローラ１０６からの通知に直接的に含まれていても良い。
【００９１】
格納期間６０４は、データの種別又は状態間で、相対的に異なるように設定される。例えば、コントローラ１２０又はキャッシュ用フラッシュストレージ１１６は、データ属性が新データの場合、データ属性が旧データの場合よりも長い格納期間を設定する。例えば、コントローラ１２０又はキャッシュ用フラッシュストレージ１１６は、データ属性が新パリティの場合、データ属性が旧パリティの場合よりも長い格納期間を設定する。例えば、コントローラ１２０又はキャッシュ用フラッシュストレージ１１６は、データ属性がダーティデータの場合、データ属性がクリーンデータの場合よりも長い格納期間を設定する。例えば、ＣＰＵ１１８は、ホストコンピュータ１０２からのリード要求に応じて、ディスク１５１から読み出したデータをキャッシュ用フラッシュストレージ１１６に格納するケースにおいて、当該データの属性情報をクリーンデータとする。
【００９２】
図８は、論理アドレスと物理アドレスとの対応関係の一例を示す模式図である。
【００９３】
論理アドレス層４０１は、一連の論理ブロックアドレス（ＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ））から構成される。論理ブロックアドレスは、キャッシュ用フラッシュストレージ１１６が上位の装置（本実施形態ではディスクコントローラ１０６（１０７）のＣＰＵ１１８）に提供する論理空間における位置を示す。キャッシュ用フラッシュストレージ１１６の内部では、論理アドレス空間が、複数の論理ページ４１１に分割して管理されている。本実施例では、論理ページ４１１のサイズは、フラッシュメモリチップ２０４の読み出し及び書き込みの単位であるページのサイズと同じとする。そして、１つの論理ページ４１１は、８個の論理ブロックアドレスから構成されるとする。
【００９４】
論理物理アドレス変換プログラム３１１は、論理物理アドレス変換情報３１２を用いて、論理アドレス層４０１の領域と、物理アドレス層４０２の領域とを結びつける。
【００９５】
キャッシュ用フラッシュストレージ１１６において、物理アドレス層４０２は、複数のフラッシュメモリチップ２０４を有する。フラッシュメモリチップ２０４は、複数のブロック４２２を有する。ブロック４２２は、複数のページ４２３を有する。フラッシュメモリにおいて、データの読み出し及び書き込みは、ページ４２３の単位でしか行うことができない。また、フラッシュメモリにおいては、データの消去は、ブロック４２２の単位しか行うことができない。
【００９６】
ＣＰＵ１１８は、論理ブロックアドレスを指定して、キャッシュ用フラッシュストレージ１１６にデータの書き込み／読み出しの指示を行う。つまり、キャッシュ用フラッシュストレージ１１６の外部からは、物理アドレス層を認識することはできない。
【００９７】
論理物理アドレス変換情報３１２において、例えば、１つの論理ページ４１１が、１つのページ４２３に割り当てられる。例えば、ＬＢＡ０ｘ００〜０ｘ０７の論理ページ４１１が、フラッシュメモリチップ＃０のブロック＃０のページ＃０に割り当てられる。この場合、キャッシュ用フラッシュストレージ１１６にとっての上位の装置であるディスクコントローラ１０６から、ＬＢＡ０ｘ００〜０ｘ０７に対して読み出し要求が発行された場合、キャッシュ用フラッシュストレージ１１６は、このＬＢＡ０ｘ００〜０ｘ０７の論理ページ４１１に割り当てられているフラッシュメモリチップ＃０のブロック＃０のページ＃０を特定し、このページ＃０からデータを読み出して結果を返す。
【００９８】
なお、論理ページ４１１のサイズとページ４２３のサイズは、同一でなくても良い。つまり、論理ページ４１１のサイズが、ページ４２３のサイズよりも小さい場合、論理上の空間よりも小さい範囲毎に、ページ４２３の格納位置が決定されても良い。例えば、図８において、論理ページ４１１のサイズがページ４２３のサイズの半分であった場合は、ＬＢＡ０ｘ００〜０ｘ０３とＬＢＡ０ｘ０４〜０ｘ０７の各々が、別々のページ４２３に格納されても良い。
【００９９】
反対に、論理ページ４１１のサイズが、ページ４２３のサイズよりも大きい場合は、ページ４２３の配置に或る程度の制限を設けても良い。例えば、ＬＢＡ０ｘ００〜０ｘ０Ｆを、２個のページ４２３に格納する場合は、同一のブロック４２２の連続した２個のページ４２３を選択しても良い。つまり、１つの論理ページ４１１に複数のページ４２３を割り当てる場合、これに割り当てる複数のページ４２３は、所定の規則に基づいて自動的に選択されても良い。この場合、管理すべきページ４２３の数が減少するので、キャッシュ用フラッシュストレージ１１６において管理すべき情報量を低減することができる。
【０１００】
次に図９〜図１４を用いて、キャッシュ用フラッシュストレージ１１６の内部の処理を説明する。
【０１０１】
図９は、キャッシュ用フラッシュストレージ１１６における書き込み処理のフローチャートを示す。図１０は、キャッシュ用フラッシュストレージ１１６の書き込み処理時におけるページ情報の例を示す。以下、図９及び図１０を参照しながら、当該処理を説明する。
【０１０２】
メモリコントローラ２００が、ＣＰＵ１１８からデータ（キャッシュデータと呼ぶ）の書き込み指示を受けると、キャッシュデータの書き込み処理が開始される（Ｓ１０１）。書き込み指示（書き込みコマンド）には、キャッシュデータの属性情報が含まれる。
【０１０３】
フラッシュストレージ制御プログラム３０２は、受信したキャッシュデータの属性情報に基づき、そのキャッシュデータと同じ属性のデータが格納されたブロックが存在するか否かを判定する（Ｓ１０２）。フラッシュストレージ制御プログラム３０２は、ブロックに格納されたデータが同じ属性でなかったとしても、格納期間が同じ又は所定の範囲内であるデータを格納したブロックが存在するか否かを判定しても良い。これは、データが不要になるまでの期間が同じ又は近いデータを同じブロックにまとめることで、リクラメーションの際に、一括して消去することができるからである。フラッシュストレージ制御プログラム３０２は、各ブロックにデータ属性が設定されている場合、そのブロックの属性に基づいてキャッシュデータを格納するブロックを選択してもよい。例えば、フラッシュストレージ制御プログラム３０２は、図１０のページ情報３１６ｈを参照し、受信したキャッシュデータと同じ属性のデータを格納したブロックが存在するか否かを判定する。例えば、受信したキャッシュデータの属性が「マスター」、「新データ」及び「ダーティ」であったとすると、フラッシュストレージ制御プログラム３０２は、同じ属性のデータを格納したブロックとしてブロック番号５０１「１０」が存在すると判定する。
【０１０４】
ステップＳ１０２の判定において、該当するブロックが存在する場合（Ｓ１０２：ＹＥＳ）、フラッシュストレージ制御プログラム３０２は、当該ブロックにデータを格納するために十分な空きページが存在するか否かを判定する（Ｓ１０３）。ここで、フラッシュストレージ制御プログラム３０２は、キャッシュデータと同じ属性のデータが格納されたブロックが複数存在する場合、その複数のブロックの空きページの合計がキャッシュデータを格納するために十分であるか否かを判定してもよい。フラッシュストレージ制御プログラム３０２は、同じ属性のデータを集約できる場合、複数のブロックに分けて格納してもよい。例えば、フラッシュストレージ制御プログラム３０２は、２ページ以上のキャッシュデータを書き込む場合、別々のフラッシュメモリチップ２０４から同じ属性のデータが格納されたブロックを選択し、各フラッシュメモリチップ２０４に並列してキャッシュデータを転送し、各ブロックにキャッシュデータを書き込んでもよい。
【０１０５】
ステップＳ１０３の判定において、ブロックに空きページが十分に存在する場合（Ｓ１０３：ＹＥＳ）、フラッシュストレージ制御プログラム３０２は、その空きページにキャッシュデータを書き込む（Ｓ１０４）。つまり、フラッシュストレージ制御プログラム３０２は、図１０のページ情報３１６ｈにおいて、ブロック番号５０１が「１０」のブロック内ページ番号５０２が「１」に対応するページに、キャッシュデータを書き込む。
【０１０６】
そして、フラッシュストレージ制御プログラム３０２は、書き込まれたキャッシュデータに対応する論理アドレスが、キャッシュデータの書き込まれたページに対応する物理アドレスを参照するように、論理物理アドレス変換情報３１２を更新し（Ｓ１０５）、当該処理を終了する（Ｓ１２０）。
【０１０７】
ステップＳ１０２又はＳ１０３の判定において、該当するブロックが存在しない場合（Ｓ１０２：ＮＯ、Ｓ１０３：ＮＯ）、フラッシュストレージ制御プログラム３０２は、空きブロックにデータを格納するのに十分な空きページが存在するか否かを判定する（Ｓ１０６）。つまり、フラッシュストレージ制御プログラム３０２は、異なるデータ属性（または格納期間）のデータが１つのブロックに混在しないように、キャッシュデータを空きブロックへ書き込む。キャッシュデータのサイズがブロック１つ分より大きい場合、フラッシュストレージ制御プログラム３０２は、複数の空きブロックにキャッシュデータを格納する。つまり、フラッシュストレージ制御プログラム３０２は、キャッシュデータを格納するのに十分な容量の空きページが確保できればよい。
【０１０８】
空きページが十分に存在する場合（Ｓ１０６：ＹＥＳ）、フラッシュストレージ制御プログラム３０２は、その１つ以上の空きページにキャッシュデータを書き込む（Ｓ１０７）。ここで、受信したキャッシュデータの属性が、「マスター」、「旧データ」及び「クリーン」、又は、「マスター」、「旧パリティ」及び「クリーン」の場合、図１０のページ情報３１６ｈに同じブロック属性５０５を有するブロックが存在しない。この場合、ブロック番号５０１が「２２」の空きブロックへ旧データ又は旧パリティを書き込む。そして、フラッシュストレージ制御プログラム３０２は、ブロック番号５０１が「２２」のブロック属性５０５に、格納したキャッシュデータの属性である「マスター」、「旧データ」及び「クリーン」を設定する。
【０１０９】
そして、フラッシュストレージ制御プログラム３０２は、書き込まれたキャッシュデータに対応する論理アドレスが、新しいページに対応する物理アドレスを参照するように、論理物理アドレス変換情報３１２を更新し（Ｓ１０５）、当該処理を終了する（Ｓ１２０）。
【０１１０】
ステップＳ１０６において、空きページが十分に存在しない場合（Ｓ１０６：ＮＯ）、フラッシュストレージ制御プログラム３０２は、データを消去するブロック４２２を選択する（Ｓ１０８）。フラッシュストレージ制御プログラム３０２は、有効ページが少ないブロックを消去対象のブロックとして選択しても良い。これは、有効ページが少ない方が、コピーするデータ量が少なく、作成できる空きページの数も多くなるためである。フラッシュストレージ制御プログラム３０２は、最後にデータが書き込まれてからの経過時間が長いブロックなどの条件で消去対象のブロックを選択してもよい。そして、フラッシュストレージ制御プログラム３０２は、消去対象として選択されたブロック４２２に含まれる有効データを、空きページを有する別のブロックへ退避する（Ｓ１０９）。
【０１１１】
ここで、フラッシュストレージ制御プログラム３０２は、消去対象ブロックに格納されたデータの属性に基づいて、退避先のブロックを選択しても良い。例えば、フラッシュストレージ制御プログラム３０２は、消去対象のブロックに格納されたデータの属性が、格納期間が長いことを示す場合、このデータを消去回数の多いブロックに退避させてもよい。これにより、次にこのデータが消去されるまでの期間が長くなり、このブロックの消去回数の増加を抑制できる。
【０１１２】
また、フラッシュメモリは、データを格納してから時間が経過するほど、データ中のエラービットが増加する。このため、フラッシュメモリでは、エラー訂正が可能な間にデータを読み出してエラー訂正を実行し、別のブロックにデータを格納するというリフレッシュ処理が実行される。このリフレッシュ処理において、格納期間の長い属性を有するデータが、消去回数の多いブロックに格納されるようにしてもよい。リフレッシュ処理は、定期的に実行されてもよいし、データを読み出した際のエラービット数が閾値を超えた場合に実行されてもよい。
【０１１３】
有効データとは、この時点において、論理ページに割り当てられている物理ページが有するデータである。有効データは、消去してはならないので、上記のように、空きページを有する別のブロックへ退避する必要がある。有効データの退避とは、有効データを別のブロックの空きページへコピーし、論理物理アドレス変換情報３１２の割り当て関係を更新する処理である。有効データを退避した場合、コピー元の有効データは不要となるので、無効データになる。つまり、この有効データを記憶していた有効ページは、無効ページとなる。有効データの退避が完了すると、消去対象のブロックは、無効ページ及び空きページのみとなるので、消去することができる。
【０１１４】
ステップＳ１０９で、有効データの退避が完了した後、フラッシュストレージ制御プログラム３０２は、消去対象のブロックのデータを消去する（Ｓ１１０）。この消去によって、このブロック内のすべてのページが、空きページとして使用可能となる。つまり、この消去によって、書き込み用の空きページが増加する。そこで、フラッシュストレージ制御プログラム３０２は、ステップＳ１０２に戻り、再度判定する（Ｓ１０２）。
【０１１５】
図９では、フラッシュストレージ制御プログラム３０２は、書き込み処理の一部として空きページを生成している（Ｓ１０８〜Ｓ１１０）。しかし、フラッシュストレージ制御プログラム３０２は、この空きページの生成を、書き込み処理とは別に非同期に実行しても良い。これにより、キャッシュ用フラッシュストレージ１１６の書き込み性能が高められる。次に、図９に示した書き込み処理のフローに伴って遷移するページ情報について説明する。
【０１１６】
図１１は、或る時点におけるページ情報３１６ａの例を示す。ページ情報３１６ａは、各ページに関する様々な情報を有する。例えば、ページ情報３１６ａは、項目として、ブロック番号５０１と、ブロック内ページ番号５０２と、ページ属性５０３と、論理アドレス５０４とを有する。
【０１１７】
ブロック番号５０１は、ブロックを識別するための番号である。ブロック内ページ番号５０２は、ブロック内のページを識別するための番号である。
【０１１８】
ページ属性５０３は、そのページの属性を示す。つまり、ページ属性５０３の「有効」は、当該ページに有効データが記憶されていること、言い換えると、当該ページが有効ページであることを示す。ページ属性５０３の「無効」は、当該ページに無効データが記憶されていること、言い換えると、当該ページが無効ページであることを示す。ページ属性の「空き」は、当該ページに何のデータも記憶されていないこと、言い換えると、データの書き込みが可能な空きページであることを示す。論理アドレス５０４は、当該ページに割り当てられている論理アドレスを示す。
【０１１９】
例えば、図１１に示すページ情報３１６ａは、ブロック番号５０１が「１０」におけるブロック内ページ番号５０２が「０」、「１」、「２」の示すページには、「有効」なデータが記憶されており（行５２０ａ、５２０ｂ、５２０ｃ参照）、ブロック内ページ番号５０２が「３」のページは、「空き」ページであることを示している（行５２０ｄ参照）。また、ページ情報３１６ａは、ブロック番号５０１が「２２」における全てのページが、「空き」ページであることを示している（行５２０ｅ、５２０ｆ、５２０ｇ、５２０ｈ参照）。
【０１２０】
図１２は、図１１に示した時点から書き込み処理が発生した後の時点におけるページ情報３１６ｂの例を示す。つまり、ページ情報３１６ｂは、ページ情報３１６ａに対して、図９に示すステップＳ１０４を実行した後の状態を示している。
【０１２１】
ページ情報３１６ｂは、論理アドレス５０４が「１０１」のデータは、ブロック番号５０１が「１０」のブロック内ページ番号５０２が「１」のページに記憶されていることを示す。ここで、論理アドレス５０４が「１０１」のデータが上書き更新されたとする。
【０１２２】
このデータを、ブロック内ページ番号５０２が「１」のページに直接上書きすることはできないので、フラッシュストレージ制御プログラム３０２は、この論理アドレス５０４の「１０１」に上書き更新されたデータを、空きページに格納する。例えば、フラッシュストレージ制御プログラム３０２は、この論理アドレス５０４の「１０１」に上書き更新されたデータを、ページ属性５０３が「空き」である、ブロック番号５０１が「１０」でブロック内ページ番号５０２が「３」のページに格納し、この論理アドレス５０４を「１０１」に更新する（行５２１ｄ参照）。このとき、フラッシュストレージ制御プログラム３０２は、ブロック番号５０１が「１０」でブロック内ページ番号５０２が「３」のページ属性５０３を「有効」に更新する（行５２１ｄ参照）。
【０１２３】
この更新が完了すると、更新前の論理アドレス５０４の「１０１」に対応するページ（つまり、行５２１ｂのページ）に格納されていたデータは、不要となる。そこで、フラッシュストレージ制御プログラム３０２は、このブロック番号５０１が「１０」でブロック内ページ番号５０２が「１」に対応するページ属性５０３を「無効」に変更する。
【０１２４】
図１３は、図１２に示した時点から有効データの退避処理を行った後の時点におけるページ情報３１６ｃを示す。つまり、ページ情報３１６ｃは、ページ情報３１６ｂに対して、図９に示すステップＳ１１２を実行した後の状態を示している。
【０１２５】
ページ情報３１６ｃは、フラッシュストレージ制御プログラム３０２が、図１２に示すページ情報３１６ｂのブロック番号５０１が「１０」に含まれるブロック内ページ番号５０２が「０」、「２」、「３」の有効データを、ブロック番号５０１が「２２」のブロック内ページ番号５０２が「０」、「１」、「２」のページにコピーし（行５２２ｅ、５２２ｆ、５２２ｇ参照）、元の有効データを記憶していたページのページ属性５０３を全て「無効」に更新した状態を示す（行５２２ａ、５２２ｃ、５２２ｄ参照）。
【０１２６】
図１４は、図１３に示した時点から全てが無効ページとなったブロックを消去した後のページ情報３１６ｄを示す。
【０１２７】
ページ情報３１６ｄは、ブロック番号５０１が「１０」の全てのページ属性５０３が「空き」となっている。つまり、ページ情報３１６ｄは、図１３に示したページ情報３１６ｃに対して、図９に示すステップＳ１１０を実行した後の状態を示している。
【０１２８】
ここで、ページ情報３１６ａと３１６ｄを比較すると、データを格納するブロックは異なるものの、ページ属性とページの数は一致している。すなわち、図１１〜図１４に示した処理によって、データの退避及び消去を含む書き込み処理のフローが完了したこととなる。図１１〜図１４の処理フローにおいて、上位の装置から発行された書き込み要求は、ページ１つ分（つまり、論理アドレス５０４が「１０１」のページに対する上書き更新）である。しかし、フラッシュメモリチップ２０４に対して発行された書き込み処理は、有効ページのコピーを含めると、図１２に示すブロック番号５０１が「１０」でブロック内ページ番号５０２が「３」（行５２１ｄ参照）、及び図１３に示すブロック番号５０１が「２２」でブロック内ページ番号５０２が「０」、「１」並びに「２」のページ４つ分である。
【０１２９】
つまり、ステップＳ１０８において、ブロック番号５０１が「１０」のブロックが消去の対象に選択された場合、フラッシュストレージ制御プログラム３０２は、そのブロックに存在する有効ページのデータを、別のブロック４２２に内部コピーしなければならない。内部コピーは、フラッシュメモリチップ２０４に対するデータの書き込み及び読み出しが実行されるため、フラッシュメモリチップ２０４及びフラッシュメモリバス２２３のリソースを消費する。これは、キャッシュ用フラッシュストレージ１１６の性能低下、及び書き込み及び消去の回数の増大を招く。よって、ステップＳ１０８において選択されるブロック４２２は、できるだけ有効ページの少ない、可能であれば有効ページの存在しないブロック４２２が選択されることが望ましい。
【０１３０】
次に図１５〜図１８を用いて、ストレージシステムにおけるデータ書き込み処理を説明する。
【０１３１】
図１５は、ＲＡＩＤ５制御によるデータの上書き更新の処理の概要を示す模式図である。
【０１３２】
図１５において、旧データＤａ１及びＤａ２とその旧パリティＤａＰが、それぞれ、ディスク＃１、＃２、＃３に記憶されている。ここで、ディスクコントローラ１０６が、旧データＤａ１を新データＤｂ１に上書き更新する旨の要求を受けたとする（Ｓ３１）。
【０１３３】
ディスクコントローラ１０６のＣＰＵ１１８は、必要に応じて新データＤｂ１をディスクコントローラ１０７に転送し、二重書きする（Ｓ４１）。そして、ディスクコントローラ１０６は、旧データＤａ１と、旧パリティＤａＰを、それぞれディスク＃１、＃３から読み出して、キャッシュ用フラッシュストレージ１１６に格納する（Ｓ３２）。この際、ＣＰＵ１１８は、キャッシュ用フラッシュストレージ１１６に、データ毎のデータ属性情報を通知する。
【０１３４】
キャッシュ用フラッシュストレージ１１６は、旧データＤａ１及び旧パリティＤａＰと、それぞれのデータ属性情報とを受信すると、各データの格納先となるブロックを選択する。ブロック＃０に格納済みのデータＤｘｘの属性が旧データまたは旧パリティであるとすると、キャッシュ用フラッシュストレージ１１６は、旧データＤａ１及び旧パリティＤａＰを、ブロック＃０に書き込む。ここで、旧データＤａ１と旧パリティＤａＰは、新パリティの生成後に不要となるため、キャッシュ用フラッシュストレージ１１６は、これらのデータを同じブロックに格納する。
【０１３５】
そして、ＣＰＵ１１８は、旧データＤａ１及び旧パリティＤａＰを、キャッシュ用フラッシュストレージ１１６から読み出して（Ｓ３３）、それらと新データＤｂ１から、新パリティＤｂＰを生成する（Ｓ３４）。ＣＰＵ１１８は、必要に応じて、新パリティＤｂＰを、ディスクコントローラ１０７に転送し、二重書きする（Ｓ４２）。
【０１３６】
そして、ＣＰＵ１１８は、新データＤｂ１及び新パリティＤｂＰを、キャッシュ用フラッシュストレージ１１６に格納する（Ｓ３５）。この際、ＣＰＵ１１８は、キャッシュ用フラッシュストレージ１１６にデータ毎のデータ属性を通知する。
【０１３７】
キャッシュ用フラッシュストレージ１１６は、新データＤｂ１及び新データであることを示す属性情報を受信すると、新データＤｂ１の格納先となるブロックを選択する。同じ属性のブロックがない場合、キャッシュ用フラッシュストレージ１１６は、空きブロック＃１に新データＤｂ１を書き込む。新データＤｂ１は、以降も参照される可能性があるため、ブロック＃０とは別のブロックに格納される。また、キャッシュ用フラッシュストレージ１１６は、新パリティＤｂＰ及び新パリティであることを示す属性情報を受信すると、新パリティＤｂＰを格納するブロックを選択する。新パリティＤｂＰは、ディスクに格納された後は参照される可能性が低いため、新データＤｂ１とは別のブロックに格納される。ここでは、新パリティＤｂＰは、空きブロック＃２に格納されるとする。
【０１３８】
そして、ディスクコントローラ１０６は、キャッシュ用フラッシュストレージ１１６から新データＤｂ１と新パリティＤｂＰを読み出し、それぞれ、ディスク＃１とディスク＃３に上書き保存する（Ｓ３６）。
【０１３９】
このように、不要となるタイミングが同じようなデータを同じブロックに書き込んでおくことで、データを退避（コピー）させることなく、そのブロックを消去することができる。次に、図１５の各処理について、フローチャートを用いて詳細に説明する。
【０１４０】
図１６は、ディスクコントローラ１０６のＣＰＵ１１８が、ホストコンピュータ１０２から発行されたデータをキャッシュ用フラッシュストレージ１１６に書き込む処理のフローチャートである。図１６は、図１５の新データＤｂ１の二重書き処理も含む。
【０１４１】
ストレージ制御プログラム１９０２は、キャッシュ書き込み処理を開始し（Ｓ２０１）、キャッシュの二重書きが必要か否かを判定する（Ｓ２０２）。つまり、ストレージシステム１０１が、キャッシュデータを二重に記憶する設定であるか否かを判定する。なお、キャッシュデータの二重書きの要／不要の判断は、予め設定されている場合に限らない。例えば、片方のディスクコントローラに障害が発生している場合は二重書きを不要と判断し、両方のディスクコントローラが正常に稼働している場合は二重書きが必要と判断しても良い。
【０１４２】
キャッシュの二重書きが不要と判断した場合（Ｓ２０２：ＮＯ）、ストレージ制御プログラム１９０２は、キャッシュ用フラッシュストレージ１１６に、ホストコンピュータ１０２から発行された書き込み用のデータを格納すると共に「マスター」、「ダーティ」及び「新データ」の属性情報を通知する（Ｓ２０３）。ＲＡＩＤ５制御が行われている場合、ストレージ制御プログラム１９０２は、新パリティの生成後にキャッシュ用フラッシュストレージ１１６にデータを格納しても良い。そして、当該処理を終了する（Ｓ２０５）。なお、データは、キャッシュメモリ１１５に格納されても良いが、本実施例では、キャッシュ用フラッシュストレージ１１６に格納される。
【０１４３】
ステップＳ２０２において、キャッシュの二重書きが必要と判定した場合（Ｓ２０２：ＹＥＳ）、ディスクコントローラ１０６のストレージ制御プログラム１９０２は、ホストコンピュータ１０２から発行された書き込み用のデータをディスクコントローラ１０７に転送する。さらに、ディスクコントローラ１０６のストレージ制御プログラム１９０２は、キャッシュ用フラッシュストレージ１１６に、データを格納すると共に「マスター」、「ダーティ」及び「新データ」の属性情報を通知する。また、データを受信したディスクコントローラ１０７のストレージ制御プログラム１９０２は、ディスクコントローラ１０７のキャッシュ用フラッシュストレージに、データを格納すると共に「ミラー」、「ダーティ」及び「新データ」の属性情報を通知する。そして、当該処理を終了する（Ｓ２０５）。
【０１４４】
図１７は、パリティデータを生成する処理のフローチャートの例を示す。図１７に示すパリティ生成処理は、ＲＡＩＤ５に基づくパリティデータを生成する場合の処理の例である。しかし、図１７に示すパリティ生成処理は、他のアルゴリズムに基づくパリティデータを生成する場合の処理であっても良い。
【０１４５】
ディスクコントローラ１０６のストレージ制御プログラム１９０２は、パリティ生成処理を開始し（Ｓ３０１）、ディスクから旧データと旧パリティを読み出し、キャッシュ用フラッシュストレージ１１６に格納する（Ｓ３０２）。ストレージ制御プログラム１９０２は、キャッシュ用フラッシュストレージ１１６に、旧データを格納すると共に「マスター」、「クリーン」及び「旧データ」の属性情報を通知する。また、ストレージ制御プログラム１９０２は、キャッシュ用フラッシュストレージ１１６に、旧パリティを格納すると共に「マスター」、「クリーン」及び「旧パリティ」の属性情報を通知する。
【０１４６】
ストレージ制御プログラム１９０２は、この後に生成するパリティを、キャッシュとして二重書きが必要か否かを判定する（Ｓ３０３）。つまり、ストレージシステム１０１が、キャッシュデータを二重に記憶する設定であるか否かを判定する。
【０１４７】
キャッシュの二重書きが不要と判断した場合（Ｓ３０３：ＮＯ）、ストレージ制御プログラム１９０２は、ホストコンピュータ１０２から発行された書き込み用の新データ、旧データ及び旧パリティから、新パリティを生成する。そして、ストレージ制御プログラム１９０２は、キャッシュ用フラッシュストレージ１１６に、新パリティを格納すると共に「マスター」、「ダーティ」及び「新パリティ」の属性情報を通知する（Ｓ３０４）。そして、ステップＳ３０６に進む。
【０１４８】
ステップＳ３０３において、キャッシュの二重書きが必要と判定した場合（Ｓ３０３：ＹＥＳ）、ディスクコントローラ１０６のストレージ制御プログラム１９０２は、ホストコンピュータ１０２から発行された書き込み用の新データ、旧データ及び旧パリティから、新パリティを生成する。そして、ディスクコントローラ１０６のストレージ制御プログラム１９０２は、ミラー側のディスクコントローラ１０７に転送する。さらに、ディスクコントローラ１０６のストレージ制御プログラム１９０２は、ディスクコントローラ１０６のキャッシュ用フラッシュストレージ１１６に、新パリティを格納すると共に「マスター」、「ダーティ」及び「新パリティ」の属性情報を通知する。ディスクコントローラ１０７のストレージ制御プログラム１９０２は、ディスクコントローラ１０７のキャッシュ用フラッシュストレージに、新パリティを格納すると共に「ミラー」、「ダーティ」及び「新パリティ」の属性情報を通知する（Ｓ３０５）。そして、ステップＳ３０６に進む。
【０１４９】
そして、ストレージ制御プログラム１９０２は、キャッシュ用フラッシュストレージに格納された旧データ及び旧パリティを無効化し、無効化したことをキャッシュ用フラッシュストレージ１１６へ通知する（Ｓ３０６）。通知を受領したキャッシュ用フラッシュストレージ１１６は、旧データ及び旧パリティのページ属性情報５０３を無効へ更新し（Ｓ３０７）、当該処理を終了する（Ｓ３０８）。新パリティがキャッシュ用フラッシュストレージ１１６に格納された後は、旧データ及び旧パリティは不要となるからである。
【０１５０】
図１８は、キャッシュ用フラッシュストレージ１１６に格納された新データと新パリティをディスクに書き込む処理のフローチャートである。
【０１５１】
ストレージ制御プログラム１９０２は、ディスク書き込み処理が開始されると（Ｓ４０１）、一旦キャッシュ用フラッシュストレージ１１６に格納した新データと新パリティを読み出して、ディスク１５１に格納する（Ｓ４０２）。
【０１５２】
そして、ストレージ制御プログラム１９０２は、ステップＳ２０２及び／又はステップＳ３０３において、キャッシュの二重書きがされていたか否かを判断する（Ｓ４０３）。
【０１５３】
キャッシュの二重書きがされていた場合（Ｓ４０３：ＹＥＳ）、ストレージ制御プログラム１９０２は、ミラー側のディスクコントローラ１０７の備えるキャッシュ用フラッシュストレージ（不図示）の新データと新パリティを無効化し、キャッシュ用フラッシュストレージ１１６へ無効化を通知する（Ｓ４０４）。無効化通知を受領したフラッシュストレージ１１６は、ミラー側の新データと新パリティのページ属性情報５０３を無効に更新し（Ｓ４０５）、ステップＳ４０６に進む。一般的にダーティデータは、障害等によって消失しないように二重書きされるが、ダーティデータがクリーン化された（つまり、クリーンデータとなった）場合は、ミラー側のデータは不要となる。このため、ＣＰＵ１１８は、二重書きされたキャッシュデータの内の一方のデータを無効化するようキャッシュ用フラッシュストレージにコマンドを発行する。つまり、マスター側のＣＰＵ１１８は、ミラー側のＣＰＵ１１８に対して、キャッシュ用フラッシュストレージに格納された方のデータを無効化するよう指示する。
【０１５４】
ステップＳ４０３において、二重書きがされていない場合（Ｓ４０３：ＮＯ）、又は、ステップＳ４０５の処理の終了後、ストレージ制御プログラム１９０２は、マスター側のディスクコントローラ１０６の備えるキャッシュ用フラッシュストレージ１１６に格納された新データと新パリティをクリーン化し、更新された属性情報をキャッシュ用フラッシュストレージ１１６に通知し（Ｓ４０６）、当該処理を終了する（Ｓ４０７）。属性情報の変更を受領したキャッシュ用フラッシュストレージ１１６の動作については後述する。
【０１５５】
上述に示したように、キャッシュ用フラッシュストレージ１１６に格納されたデータは、様々なタイミングで無効化される。例えば、二重書きが有効な場合、ミラー側のキャッシュ用フラッシュストレージには、ステップＳ２０４のタイミングでデータが書き込まれ、ステップＳ４０４のタイミングで無効化される。マスター側のキャッシュ用フラッシュストレージ１１６には、同じくステップＳ２０４のタイミングでデータが書き込まれ、ステップＳ４０５のタイミングでクリーン化される。しかし、このマスター側のキャッシュ用フラッシュストレージ１１６に書き込まれたデータは、無効化はされずに、その後もキャッシュ上に存在し続ける。これは、新データは、ホストコンピュータからアクセスされる可能性があるためである。
【０１５６】
また、クリーン化後の状態において、新データと新パリティとでは、参照頻度及び更新頻度等が異なるため、無効化されるタイミングも異なり得る。旧データと旧パリティは、ステップＳ３０２で書き込まれ、ステップＳ３０６で無効化される。
【０１５７】
このように、キャッシュ用フラッシュストレージ１１６上に格納されるデータは、そのデータ属性（種別、状態）によって、データの格納期間が異なる。このため、キャッシュ用フラッシュストレージ１１６は、データ属性に応じて、データを格納するブロックを選択することで、リクラメーション処理におけるデータコピー量を低減できる。これにより、内部でのデータコピーによる性能低下と、ライトデータ量の増加によるフラッシュメモリの短寿命化を抑制することができる。
【０１５８】
図１９は、或る時点におけるページ情報３１６ｅを示す。図１９に示すページ情報３１６ｅにおいて、論理アドレス５０４が「１００」、「１１０」、「３００」及び「３１０」のページに、ステップＳ３０５に示す新データが格納されているとする。
【０１５９】
同じく、論理アドレス５０４が「２００」、「２０１」、「２１０」及び「２１１」のページに、旧データが格納されている。これら新データ及び旧データは全て、ブロック番号５０１が「１０」の１つのブロックに格納されているとする。
【０１６０】
図２０は、図１９の時点から時間が進み、パリティ生成処理のステップＳ３０６が完了した時点におけるページ情報３１６ｆを示す。
【０１６１】
ステップＳ３０６において旧データが無効化されると、論理アドレス５０４が「２００」、「２０１」、「２１０」及び「２１１」の各々に割り当てられていたブロック内ページ番号５０２が「１」、「２」、「５」及び「６」のページが無効化される。ここで、ページ情報３１６ｆにおけるブロック番号５０１が「１０」のブロックが、ステップＳ１１１において空きページの作成の対象に選択された場合、ページ属性５０３が「有効」であるブロック内ページ番号５０２が「０」、「３」、「４」及び「７」のページに記憶されているデータを、別のブロックにコピー（退避）する必要がある。つまり、ブロックを消去する際、ページ属性５０３が「有効」なページが存在する場合は、それらのページのデータをコピー（退避）する処理が発生してしまう。
【０１６２】
図２１は、図１９と対比する図面であり、或る時点におけるページ情報３１６ｇを示す。このページ情報３１６ｇは、図１９に示すページ情報３１６ｅと同様のデータを記憶する。図２１は、図１９とは異なり、ブロック属性５０５を備える。ブロック属性５０５は、空きブロックにデータが書き込まれた際に、そのデータの属性が設定されてもよいし、予め設定されていてもよい。
【０１６３】
ブロック番号５０１が「１０」の１つのブロックに、論理アドレス５０４が「１００」、「１１０」、「３００」及び「３１０」が対応付けられており、これら論理アドレス５０４の示すページに新データが格納されているとする。つまり、このブロックに格納されているデータの属性は、「マスター」、「新データ」及び「ダーティ」であるとする。そして、ブロック番号５０１が「２２」の１つのブロックに、論理アドレス５０４が「２００」、「２０１」、「２１０」及び「２１１」が対応付けられており、これら論理アドレス５０４の示すページに旧データが格納されているとする。つまり、このブロックに格納されているデータの属性は、「マスター」、「旧データ」及び「クリーン」であるとする。ブロック番号「２２」のブロックには、旧パリティが含まれていてもよい。このように、新データと旧データとが、異なるブロックに格納されているとする。
【０１６４】
図２２は、図２０と対比する図面であり、図２１に示す時点から時間が進み、パリティ生成処理のステップ３０６が完了した時点におけるページ情報３１６ｈを示す。
【０１６５】
図２２は、図２０に示すページ情報３１６ｆと同様のデータを記憶している。しかし、図２１に示したページ情報３１６ｇの時点で、新データと旧データとを異なるブロックに格納したため、ブロック番号５０１が「１０」のブロックのページは全て「有効」となり、ブロック番号５０１が「２２」のブロックのページは全て「無効」となる。
【０１６６】
このため、ステップＳ１１１で、空きページを作成するブロックとしてブロック番号５０１が「２２」のブロックが選択されたとすると、データを退避（コピー）することなく、選択されたブロックを消去し、空きページを生成することができる。これによって、ブロックの消去回数を抑制することができる。また、データのコピーにともなうＣＰＵリソースの使用を抑制できるので、書き込み／読み出し処理の性能が向上する。また、フラッシュメモリチップ２０４に接続されているフラッシュメモリバス２２３等のリソースの消費を抑制することができる。
【０１６７】
図１９〜図２２に基づく説明では、新データと旧データとを別々のブロックに格納したが、別の条件に基づいて、どのデータをどのブロックに格納するかを判断しても良い。例えば、格納期間の大きく異なるデータ同士を、別のブロックに格納するようにしても良い。つまり、格納期間の比較的近いデータ同士を、出来るだけ同一のブロックにまとめるようにしても良い。これにより、データを退避するための内部コピーのデータ量を低減することができる。
【０１６８】
図２３は、図２１の状態から、時間が進んだ状態のページ情報３１６ｉを示す。図２３は、図２１及び図２２と同様のデータを記憶しているが、さらにページ属性詳細５０６を備える。ページ属性詳細５０６には、ブロック属性５０５で規定されている情報から、なんらかの処理によってページ単位で属性が更新された場合の情報を格納する。例えば、ステップＳ４０６では、新データと新パリティをクリーン化し、このデータの属性情報をキャッシュ用フラッシュストレージ１１６へ通知した。この通知を受領した場合、時間によるページ単位の属性情報の変化が発生するため、ブロック属性５０５のみでは表せない。そこで、ページ属性詳細５０６に、この変化に係る情報を格納し、属性情報の更新を行う。図２３は、ブロック番号５０１が「１０」のブロック内ページ番号５０２が「０」のページが、クリーン化された例を示している。
【０１６９】
クリーン化されたか否かという情報は、キャッシュ用フラッシュストレージ１１６にとって重要である。ダーティデータは、キャッシュ用フラッシュストレージ１１６にとって破棄が不可能なデータである。しかし、クリーンデータは、最終記憶媒体であるディスク１５１へ格納されていることが保証されているデータであるため、破棄してもデータロスト等の重大な障害とはならない。
【０１７０】
図２４は、ページ毎の属性情報を利用したデータの処理のフローチャートの例を示す。この処理は、ステップＳ１０９に示した有効データ退避処理の内容となる。通常の有効データ退避処理では、ページ属性情報５０３が有効であるページを別のブロックにコピーすることで、破棄が不可能なデータを保持する。
【０１７１】
キャッシュ用フラッシュストレージ１１６は、処理を開始すると（Ｓ５０１）、まず、対象となる有効データ（以下「対象有効データ」という）を選択する（Ｓ５０２）。次に、キャッシュ用フラッシュストレージ１１６は、ステップＳ５０２で選択した対象有効データがクリーンデータであるか否かを、ページ属性詳細５０６の情報に基づいて判断する（Ｓ５０３）。
【０１７２】
対象有効データがクリーンデータである場合（Ｓ５０３：ＹＥＳ）、キャッシュ用フラッシュストレージ１１６は、このデータを破棄してもよいか否かを、ディスクコントローラ１０６へ問い合わせる（Ｓ５０４）。ディスクコントローラ１０６は、対象となっているデータがキャッシュ用フラッシュストレージ１１６に存在し続けることのメリット等を考慮して破棄の可否を判断し、その結果をキャッシュ用フラッシュストレージ１１６に通知する（Ｓ５０５）。
【０１７３】
キャッシュ用フラッシュストレージ１１６は、破棄が可能との通知を受けた場合（Ｓ５０５：ＹＥＳ）、対象有効データを無効化する（Ｓ５０６）。無効化された対象有効データのページ属性５０３は無効となるため、以降、この対象有効データは、有効データではなくなり、退避処理の対象から外れる。
【０１７４】
キャッシュ用フラッシュストレージ１１６は、ステップＳ５０５において破棄が不可能との通知を受けた場合（Ｓ５０５：ＮＯ）、又はステップＳ５０３において対象有効データがクリーンデータで無かった場合（Ｓ５０３：ＮＯ）、対象有効データを別ブロックへコピーする（Ｓ５０７）。
【０１７５】
キャッシュ用フラッシュストレージ１１６は、ステップＳ５０６又はステップＳ５０７の処理が終了すると、さらに処理を継続すべき有効データが残っているかどうかの判断を行い（Ｓ５０８）、残っている場合は（Ｓ５０８：ＹＥＳ）、ステップＳ５０３へ戻る。キャッシュ用フラッシュストレージ１１６は、全ての有効データの処理を完了したと判断した場合（Ｓ５０８：ＮＯ）、当該処理を終了する（Ｓ５０９）。
【０１７６】
図２４の処理は、キャッシュ用フラッシュストレージ１１６が、有効データのコピー（退避）処理を実行する頻度を低減させることを目的としている。以下にその理由を述べる。
【０１７７】
有効データのコピー処理は、キャッシュ用フラッシュストレージ１１６の内部リソースを使用するので、出来るだけ避けたい。しかし、有効データのコピー処理は、キャッシュ用フラッシュストレージ１１６の内部の処理なので、ディスクコントローラ１０６から認知できない。したがって、ディスクコントローラ１０６は、キャッシュ用フラッシュストレージ１１６の内部で非効率なコピーが高頻度で発生していたとしても、それを認知することができないので、それを回避することは困難である。
【０１７８】
また、ディスクコントローラ１０６がクリーンデータとして保持するデータは、必ずしも必要性の高い（例えば、リードの頻度が極めて高い）データであるとは限らない。したがって、このようなクリーンデータを、キャッシュ用フラッシュストレージ１１６の内部処理の効率化のために破棄することは、効果的である可能性がある。
【０１７９】
そこで、図２４の処理では、キャッシュ用フラッシュストレージ１１６が、ディスクコントローラ１０６に対して、有効データの破棄の可否を問い合わせている。これにより、キャッシュ用フラッシュストレージ１１６の内部処理の効率化を図っている。
【０１８０】
なお、図２４では、ステップＳ５０４及びＳ５０５において、キャッシュ用フラッシュストレージ１１６は、ディスクコントローラ１０６に対して、対象有効データの破棄が可能であるか否かを問い合わせたが、必ずしも問い合わせる必要は無い。この場合は、図２４のステップＳ５０４の処理とステップＳ５０５の判定がＮＯの処理とが無くなり、ステップＳ５０３においてＹＥＳと判定されると、そのままステップＳ５０６に進み、対象有効データを無効化する。ただし、この場合は、ディスクコントローラ１０６のキャッシュステータス情報１９２２と、キャッシュ用フラッシュストレージ１１６のキャッシュステータス情報３１４との間に差異が発生する可能性がある。したがって、ディスクコントローラ１０６がキャッシュ用フラッシュストレージ１１６に存在すると認識しているデータの読み出し処理を行おうとした場合、該当データが存在しないというエラーが発生する可能性がある。この場合、ディスクコントローラ１０６は、ディスク１５１からデータを読み直すことで対処可能である。
【０１８１】
図２５は、キャッシュ用フラッシュストレージ１１６が、データを格納する場合の他の例である。つまり、図２５は、キャッシュ用フラッシュストレージ１１６において、図１５に示すようにＲＡＩＤ５に基づくデータ更新が発生した場合に、旧データＤａ１、旧パリティＤａＰ、新データＤｂ１及び新パリティＤｂＰが、バッファメモリ２１３に格納されている状態を示す。
【０１８２】
例えば、旧データＤａ１及び旧パリティＤａＰは、新パリティＤｂＰの生成後に不要となる。つまり、旧データＤａ１及び旧パリティＤａＰの格納期間は、比較的短い。したがって、フラッシュストレージ制御プログラム３０２は、状況に応じて、旧データＤａ１及び旧パリティＤａＰを、フラッシュメモリに格納せずに、バッファメモリ２１３上で保持してもよい。揮発メモリであるバッファ上にのみデータが存在する状態で、電源障害が発生すると、データが消滅する可能性がある。このため、データ属性が「クリーン」のデータ（旧データ及び旧パリティ）は、フラッシュメモリに格納せずにバッファ上で処理し、データ属性が「ダーティ」のデータ（新データ及び新パリティ）は、フラッシュメモリに格納してもよい。または、新パリティは、消滅しても、新データ、旧データ及び旧パリティから生成することができるため、新パリティは、デステージされるまでフラッシュメモリに格納せずに、バッファ上で保持しても良い。
【０１８３】
これにより、フラッシュメモリへの書き込み及び消去の回数を削減することができる。また、フラッシュメモリチップ２０４に接続されているフラッシュメモリバス２２３等のリソースの消費を抑制することができる。
【０１８４】
また、新データＤｂ１及び新パリティＤｂＰも、ディスク１５１に格納後（デステージ後）、直ぐに破棄される可能性が高い場合は、ディスクコントローラ１０６のＣＰＵ１１８がその情報をキャッシュ用フラッシュストレージ１１６に通知してもよい。この場合、メモリコントローラ２００は、新データＤｂ１及び新パリティＤｂＰをフラッシュメモリチップ２０４に格納せず、バッファメモリ２１３上で保持してもよい。
【０１８５】
以上の説明は、キャッシュ用フラッシュストレージ１１６がストレージシステム１０１に備えられる例である。しかし、キャッシュ用フラッシュストレージ１１６は、サーバなどの計算機に備えられてもよい。この場合、サーバのＯＳ又はドライバが、キャッシュ用フラッシュストレージ１１６にデータを送信する際に、データの属性情報を通知しても良い。
【０１８６】
なお、以上の説明では、「ａａａテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「ａａａテーブル」を「ａａａ情報」と呼ぶことができる。
【０１８７】
また、以上の説明において、要素（例えば、ページ）の識別情報は番号であるが、番号に代えて又は加えて他種の情報（例えばアルファベット等の文字或いは符号等）を用いて要素が識別されても良い。
【０１８８】
また、以上の説明では、「プログラム」を主語として処理を説明した場合、プログラムは、コントローラに含まれるプロセッサ（例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インタフェース装置（例えば通信ポート）を用いながら行うため、処理の主語がプロセッサとされてもよい。プログラムを主語として説明された処理は、コントローラが行う処理としても良い。また、コントローラは、プロセッサそれ自体であっても良いし、プロセッサに代えて又は加えて、プロセッサが行う処理の一部又は全部を行うハードウェア回路を含んでも良い。コンピュータプログラムは、プログラムソースから記憶制御装置にインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ、又は、計算機が読み取り可能な記憶メディアであっても良い。
【０１８９】
上述した本発明の実施形態は、本発明の説明のための例示であり、本発明の範囲をそれらの実施形態にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。
【符号の説明】
【０１９０】
１０１…ストレージシステム  １０６…ディスクコントローラ  １１６…キャッシュ用フラッシュストレージ
【図１】
0006017065.tif 000002
【図２】
0006017065.tif 000003
【図３】
0006017065.tif 000004
【図４】
0006017065.tif 000005
【図５】
0006017065.tif 000006
【図６】
0006017065.tif 000007
【図７】
0006017065.tif 000008
【図８】
0006017065.tif 000009
【図９】
0006017065.tif 000010
【図１０】
0006017065.tif 000011
【図１１】
0006017065.tif 000012
【図１２】
0006017065.tif 000013
【図１３】
0006017065.tif 000014
【図１４】
0006017065.tif 000015
【図１５】
0006017065.tif 000016
【図１６】
0006017065.tif 000017
【図１７】
0006017065.tif 000018
【図１８】
0006017065.tif 000019
【図１９】
0006017065.tif 000020
【図２０】
0006017065.tif 000021
【図２１】
0006017065.tif 000022
【図２２】
0006017065.tif 000023
【図２３】
0006017065.tif 000024
【図２４】
0006017065.tif 000025
【図２５】
0006017065.tif 000026