(57)【要約】【課題】揮発性のキャッシュメモリのバックアップに必要なバッテリーの容量を削減する。ストレージシステムに備えた不揮発性メモリの劣化を抑える。【解決手段】ストレージシステムに、揮発性のキャッシュメモリの他に、給電の有無に関わらずデータを記憶し続けることが可能なタイプのメモリである不揮発性メモリを備える。上位装置からのアクセスコマンドに従うデータの一時格納先は、揮発性キャッシュメモリとする。一次電源から揮発性キャッシュメモリへの給電が無くなった場合に、バッテリーからの給電により、揮発性キャッシュメモリに記憶されているデータを不揮発性メモリにコピーする。【選択図】図１９
2008108026.tif 000002
【特許請求の範囲】
【請求項１】
上位装置からアクセスコマンドを受信するストレージシステムであって、
複数の記憶装置と、
揮発性のキャッシュメモリと、
給電の有無に関わらずデータを記憶し続けることが可能なタイプのメモリである不揮発性メモリと、
前記アクセスコマンドがライトコマンドの場合、該ライトコマンドに従うデータを前記揮発性キャッシュメモリに一時記憶させ、該記憶させたデータを前記揮発性キャッシュメモリから読み出して前記複数の記憶装置の少なくとも一つに格納し、前記アクセスコマンドがリードコマンドの場合、該リードコマンドに従うデータを前記複数の記憶装置の少なくとも一つから読み出して前記揮発性キャッシュメモリに一時記憶させ、該記憶させたデータを前記揮発性キャッシュメモリから読み出して前記上位装置に送信するアクセス制御部と、
二次電源であるバッテリーと、
一次電源から揮発性キャッシュメモリへの給電が無くなった場合に、前記バッテリーからの給電により、前記揮発性キャッシュメモリに記憶されているデータを前記不揮発性メモリにコピーするキャッシュデータコピー部と
を備えるストレージシステム。
【請求項２】
前記キャッシュデータコピー部は、一次電源から前記揮発性キャッシュメモリへの給電がある場合にも、前記揮発性キャッシュメモリに記憶されているデータを前記不揮発性メモリにコピーし、その場合、前記不揮発性メモリに対する更新の回数をカウントし、該更新回数が所定の閾値を超えたか否かを判断し、超えたと判断した場合には、以後、一次電源から前記揮発性キャッシュメモリへの給電がある間は、前記揮発性キャッシュメモリに記憶されているデータを前記不揮発性メモリにコピーせず、前記一次電源から前記揮発性キャッシュメモリへの給電が無くなった場合に、前記バッテリーからの給電により、前記揮発性キャッシュメモリに記憶されているデータを前記不揮発性メモリにコピーする、
請求項１記載のストレージシステム。
【請求項３】
前記キャッシュデータコピー部は、前記不揮発性メモリが含む複数の不揮発サブ領域別に、前記更新回数をカウントし、前記不揮発性メモリのうちの或る不揮発サブ領域について、前記更新回数が前記所定の閾値を超えたと判断された場合には、該或る不揮発サブ領域を、前記一次電源から前記揮発性キャッシュメモリへの給電が無くなった場合のデータコピー先である障害時退避先とする、
請求項２記載のストレージシステム。
【請求項４】
前記不揮発性メモリは、ＮＡＮＤ型フラッシュメモリであり、
前記不揮発サブ領域は、ブロックであり、
前記ブロックは、前記ＮＡＮＤ型フラッシュメモリに対する書込みの単位領域であるセグメントを複数個で構成される領域であり、
前記更新回数は、消去回数である、
請求項３記載のストレージシステム。
【請求項５】
前記キャッシュデータコピー部は、前記障害時退避先とされたサブ領域に関する情報を、前記上位装置及び／又はそれとは別種の装置に通知する、
請求項３記載のストレージシステム。
【請求項６】
前記キャッシュデータコピー部は、前記一次電源から前記揮発性キャッシュメモリへの給電が無くなった場合、前記バッテリーからの給電により、前記揮発性キャッシュメモリに含まれる複数の揮発サブ領域のうちの、ダーティのデータが格納されている揮発サブ領域を特定し、該特定した揮発サブ領域内のデータを、前記不揮発性メモリにコピーする、
請求項１記載のストレージシステム。
【請求項７】
前記キャッシュデータコピー部は、前記一次電源から前記揮発性キャッシュメモリへの給電がある場合、前記揮発性キャッシュメモリに含まれる複数の揮発サブ領域のうちの、ＬＲＵの揮発サブ領域を特定し、特定した揮発サブ領域内のデータを、前記不揮発性メモリにコピーする、
請求項１記載のストレージシステム。
【請求項８】
前記不揮発性メモリは、ＮＡＮＤ型フラッシュメモリであり、
前記キャッシュデータコピー部は、前記ＮＡＮＤ型フラッシュメモリに含まれる複数のブロックのどれがＬＲＵであるかを管理し、前記複数のブロックのうちの或るブロックを構成する複数のセグメントの少なくとも一つがアクセスされれば、該或るブロックをＬＲＵとはせず、ＬＲＵのブロックからデータを消去することで、該ブロックを構成する複数のセグメントをデータのコピー先とすることを可能にする、
請求項１記載のストレージシステム。
【請求項９】
前記アクセス制御部は、前記アクセスコマンドがライトコマンドの場合、前記揮発性キャッシュメモリに含まれる複数の揮発サブ領域のうちの、該ライトコマンドに従う書込み先に対応した揮発サブ領域が見つからないが、前記不揮発性メモリに含まれる複数の不揮発サブ領域のうちの、該書込み先に対応した不揮発サブ領域が見つかれば、該見つかった不揮発サブ領域に記憶されているデータを該不揮発サブ領域から揮発サブ領域にコピーし、該揮発サブ領域に、該ライトコマンドに従うデータを書く、
請求項１記載のストレージシステム。
【請求項１０】
前記アクセス制御部は、前記アクセスコマンドがリードコマンドの場合、前記揮発性キャッシュメモリに含まれる複数の揮発サブ領域のうちの、該リードコマンドに従う読出し元に対応した揮発サブ領域が見つからないが、前記不揮発性メモリに含まれる複数の不揮発サブ領域のうちの、該読出し元に対応した不揮発サブ領域が見つかれば、該見つかった不揮発サブ領域からデータを読出して前記上位装置に送信する、
請求項１記載のストレージシステム。
【請求項１１】
前記キャッシュデータコピー部は、前記一次電源から前記揮発性キャッシュメモリへの給電がある場合、前記揮発性キャッシュメモリに含まれる複数の揮発サブ領域のうちの、クリーンのデータが格納されている揮発サブ領域を特定し、特定した揮発サブ領域内のデータを、前記不揮発性メモリにコピーする、
請求項１記載のストレージシステム。
【請求項１２】
前記キャッシュデータコピー部は、前記クリーンのデータのうち、シーケンシャルでアクセスされるデータを、前記不揮発性メモリにはコピーせず、ランダムでアクセスされるデータを、前記不揮発性メモリにコピーする、
請求項１１記載のストレージシステム。
【請求項１３】
前記キャッシュデータコピー部は、以下の（１）又は（２）の場合に、
（１）前記不揮発性メモリに含まれる複数の不揮発サブ領域のうち、ＭＲＵ（Most Recently Used）の不揮発サブ領域であってクリーンのデータを記憶する不揮発サブ領域に該データが記憶された時刻と、前記揮発性キャッシュメモリに含まれる複数の揮発サブ領域のうち、ＬＲＵの揮発サブ領域であってクリーンのデータを記憶する揮発サブ領域に該データが記憶された時刻とに、差がある場合、
（２）前記不揮発性メモリに含まれる複数の不揮発サブ領域のうち、ＬＲＵの不揮発サブ領域であってクリーンのデータを記憶する不揮発サブ領域に該データが記憶された時刻と、前記揮発性キャッシュメモリに含まれる複数の揮発サブ領域のうち、ＬＲＵの揮発サブ領域であってクリーンのデータを記憶する揮発サブ領域に該データが記憶された時刻との差が、所定値よりも大きい場合、
前記揮発性キャッシュメモリから前記不揮発性メモリへのデータコピーを行う、
請求項１１記載のストレージシステム。
【請求項１４】
前記キャッシュデータコピー部は、定期的に、前記揮発性キャッシュメモリから前記不揮発性メモリへのデータコピーを行う処理を行い、該データコピーを行う都度に、前記不揮発性メモリに対する更新の頻度をカウントし、該更新頻度が所定の閾値を超えていれば、該処理を終了し、該更新頻度が所定の閾値未満であれば、該処理を再び実行する、
請求項１記載のストレージシステム。
【請求項１５】
前記上位装置から前記複数の記憶装置へのアクセス系統が多重化されており、
各アクセス系統には、前記揮発性キャッシュメモリと前記アクセス制御部とが含まれ、
各アクセス制御部は、自分が属するアクセス系統における揮発性キャッシュメモリに加えて、各他のアクセス系統に属する各揮発性キャッシュメモリに、前記受信したアクセスコマンドに従うデータを一時格納し、
前記一次電源から前記各揮発性キャッシュメモリへの給電が無くなった場合に、前記キャッシュデータコピー部が、前記バッテリーからの給電により、前記各揮発性キャッシュメモリ上のデータを前記不揮発性メモリにコピーする、
請求項１記載のストレージシステム。
【請求項１６】
多重化されているアクセス系統のうちの或るアクセス系統では、前記一次電源からの揮発性キャッシュメモリへの給電が無くなった或いは該揮発性キャッシュメモリに障害が生じたが、他のアクセス系統では、前記一次電源からの揮発性キャッシュメモリへの給電がある場合、該或るアクセス系統におけるアクセス制御部は、前記受信したアクセスコマンドに従うデータを、前記複数の記憶装置の少なくとも一つに書く、或いは、前記複数の記憶装置の少なくとも一つから読み出したデータを、前記揮発性キャッシュメモリに一時格納することなく前記上位装置に送信する、
請求項１５記載のストレージシステム。
【請求項１７】
前記揮発性キャッシュメモリのどの揮発サブ領域にどこをアクセス先とするデータが格納されているかを表すキャッシュ制御情報があり、前記アクセス制御部が、前記アクセスコマンドの処理において、該キャッシュ制御情報を更新し、
前記キャッシュデータコピー部が、前記一次電源から前記揮発性キャッシュメモリへの給電が無くなった場合、前記揮発性キャッシュメモリ上のデータに加えて、前記キャッシュ制御情報を、前記不揮発性メモリにコピーし、前記一次電源から前記揮発性キャッシュメモリへの給電が復旧した場合には、前記不揮発性メモリから前記コピーしたデータ及びキャッシュ制御情報を読出し、該コピーしたデータを前記揮発性キャッシュメモリにリストアする、
請求項１記載のストレージシステム。
【請求項１８】
前記キャッシュデータコピー部は、
前記一次電源から前記揮発性キャッシュメモリへの給電がある場合、前記揮発性キャッシュメモリに含まれる複数の揮発サブ領域のうちの、クリーンのデータを記憶し且つＬＲＵである揮発サブ領域を特定し、特定した揮発サブ領域からクリーンのデータを前記不揮発性メモリにコピーし、
前記一次電源から前記揮発性キャッシュメモリへの給電が無い場合、前記バッテリーからの給電により、前記複数の揮発サブ領域のうちの、ダーティのデータを記憶している揮発サブ領域を特定し、特定した揮発サブ領域からダーティのデータを前記不揮発性メモリにコピーする、
請求項１記載のストレージシステム。
【請求項１９】
前記キャッシュデータコピー部は、前記一次電源から前記揮発性キャッシュメモリへの給電がある場合、前記不揮発性メモリに対する更新の回数をカウントし、該更新回数が所定の閾値を超えたか否かを判断し、超えたと判断した場合には、以後、一次電源から前記揮発性キャッシュメモリへの給電がある間は、前記揮発性キャッシュメモリに記憶されているクリーンのデータを前記不揮発性メモリにコピーせず、前記一次電源から前記揮発性キャッシュメモリへの給電が無くなった場合に、前記バッテリーからの給電により、前記揮発性キャッシュメモリに記憶されているダーティのデータを前記不揮発性メモリにコピーする、
請求項１８記載のストレージシステム。
【請求項２０】
上位装置からアクセスコマンドを受信し該アクセスコマンドに従ってデータの入出力を行うストレージシステムに搭載されるコントローラであって、
前記上位装置に接続される通信インタフェース装置である第一Ｉ／Ｆと、
複数の記憶装置に接続される通信インタフェース装置である第二Ｉ／Ｆと、
揮発性のキャッシュメモリと、
給電の有無に関わらずデータを記憶し続けることが可能なタイプのメモリである不揮発性メモリと、
前記第一Ｉ／Ｆで受信したアクセスコマンドがライトコマンドの場合、該ライトコマンドに従うデータを前記揮発性キャッシュメモリに一時記憶させ、該記憶させたデータを前記揮発性キャッシュメモリから読み出して、前記第二Ｉ／Ｆを通じて前記複数の記憶装置の少なくとも一つに格納し、前記受信したアクセスコマンドがリードコマンドの場合、該リードコマンドに従うデータを、前記第二Ｉ／Ｆを通じて前記複数の記憶装置の少なくとも一つから読み出し、該読み出したデータを前記揮発性キャッシュメモリに一時記憶させ、該記憶させたデータを前記揮発性キャッシュメモリから読み出して前記上位装置に送信するアクセス制御部と、
前記揮発性キャッシュメモリに記憶されているデータを前記不揮発性メモリにコピーするキャッシュデータコピー部と
を備え、
前記キャッシュデータコピー部が、一次電源から前記揮発性キャッシュメモリへの給電が無くなった場合に、二次電源であるバッテリーからの給電により、前記揮発性キャッシュメモリに記憶されているデータを前記不揮発性メモリにコピーする、
コントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムに関する。
【背景技術】
【０００２】
ストレージシステムには、一般に、キャッシュメモリが備えられている。キャッシュメモリは、上位装置から受信したライトコマンドに従ってストレージシステム内の複数の記憶装置のうちの少なくとも一つに書込まれるデータ、或いは、リードコマンドに従って複数の記憶装置のうちの少なくとも一つから読み出されたデータを、一時的に記憶するのに利用される。
【０００３】
ストレージシステムの電源に障害が生じた等の理由により、キャッシュメモリへの給電が無くなる場合がある。この場合、キャッシュメモリが揮発性メモリである場合、キャッシュメモリに記憶されているデータが失われてしまう。
【０００４】
例えば、文献１（米国特許５５８６２９１号）及び文献２（特開平６−２２２９８８号公報）のそれぞれには、揮発性のキャッシュメモリの他に、不揮発性のメモリを備え、不揮発性メモリにデータを保持することの開示がある。また、文献３（米国特許６５３９４５６号）及び文献４（米国公開特許２００４／６４６４７号）のそれぞれには、不揮発性メモリをキャッシュメモリとして利用することの開示がある。
【０００５】
【特許文献１】米国特許５５８６２９１号
【特許文献２】特開平６−２２２９８８号公報
【特許文献３】米国特許６５３９４５６号
【特許文献４】米国公開特許２００４／６４６４７号
【発明の開示】
【発明が解決しようとする課題】
【０００６】
文献１及び文献２のそれぞれに開示の不揮発性メモリは、不揮発性とは言っても、バッテリーからの給電を受けることによりデータを保持することができるメモリである。そのため、いずれの文献の開示の技術でも、例えば、ストレージシステムに電源障害が生じても不揮発性メモリにデータを保持し続けさせるためには、バッテリーが必要である。
【０００７】
また、文献２では、冗長化構成において、一方の系に障害が生じると、他系の電源で、不揮発性メモリに記憶されているデータを、テープ或いはディスクドライブ装置のような直接アクセス記憶装置にコピーすることが開示されている。そのデータコピー中に、他系の電源に障害が発生すると、データが消滅してしまうおそれがある。このため、バッテリーからの給電により不揮発性メモリから直接アクセス記憶装置にデータをコピーすることが考えられる。しかし、直接アクセス記憶装置はアクセス速度が遅いため、長時間給電し続けることが可能な大容量のバッテリーが必要になってしまう。
【０００８】
そこで、文献３及び文献４に開示の技術を、ストレージシステムに適用することが考えられる。すなわち、ストレージシステムのキャッシュメモリを、揮発性のメモリではなく、バッテリーからの給電が無くてもデータを記憶し続けることが可能なタイプの不揮発性メモリにする方法が考えられる。
【０００９】
しかし、そのタイプの不揮発性メモリは、一般に、更新回数（消去回数）に応じて劣化していく。パーソナルコンピュータのような小規模な装置で、不揮発性メモリをキャッシュメモリとして使用しても、不揮発性メモリに対する更新による寿命の劣化はあまり問題とならないかもしれない。しかし、ストレージシステムのような大規模な装置では、キャッシュメモリへの更新が上記のような小規模な装置に比して頻発するので、更新回数に応じた寿命の劣化が問題になると考えられる。
【００１０】
従って、本発明の目的は、揮発性のキャッシュメモリのバックアップに必要なバッテリーの容量を削減することにある。
【００１１】
本発明の別の目的は、ストレージシステムに備えた不揮発性メモリの劣化を抑えることにある。
【００１２】
本発明の更なる目的は、後の記載から明らかになるであろう。
【課題を解決するための手段】
【００１３】
ストレージシステムに、揮発性のキャッシュメモリの他に、給電の有無に関わらずデータを記憶し続けることが可能なタイプのメモリである不揮発性メモリを備える。揮発性キャッシュメモリを主に使用し、不揮発性メモリを補助的に使用する。
【００１４】
具体的には、ストレージシステムのアクセス制御部は、ストレージシステムが上位装置から受信したアクセスコマンドを処理する場合、該アクセスコマンドに従うデータを一時記憶させるメモリとして、揮発性キャッシュメモリの方を使用する。すなわち、アクセス制御部は、アクセスコマンドがライトコマンドの場合、該ライトコマンドに従うデータを揮発性キャッシュメモリに一時記憶させ、該記憶させたデータを前記揮発性キャッシュメモリから読み出し、複数の記憶装置の少なくとも一つに格納する。アクセスコマンドがリードコマンドの場合、アクセス制御部は、該リードコマンドに従うデータを複数の記憶装置の少なくとも一つから読み出して揮発性キャッシュメモリに一時記憶させ、該記憶させたデータを、揮発性キャッシュメモリから読み出して上位装置に送信する。
【００１５】
そして、ストレージシステムには、二次電源であるバッテリーと、キャッシュデータコピー部とを備える。キャッシュデータコピー部は、一次電源から揮発性キャッシュメモリへの給電が無くなった場合に、バッテリーからの給電により、揮発性キャッシュメモリに記憶されているデータを不揮発性メモリにコピーする。
【００１６】
ここで言う“コピー”とは、第一の記憶域にあるデータと同じデータを第二の記憶域に書くことであり、第一の記憶域にあるデータがそのまま残されるか削除されるかは関係無い。
【００１７】
上位装置は、ストレージシステムの上位にある装置であり、例えば、ホスト計算機、他のストレージシステムとすることができる。
【００１８】
ストレージシステムに、複数の記憶装置に接続されるコントローラ部を備え、該コントローラ部に、アクセス制御部、キャッシュデータコピー部及び揮発性キャッシュメモリを搭載することができる。コントローラ部は、一又は複数の回路基盤で構成することができる。コントローラ部には、例えば、上位装置と接続される通信インタフェース装置である第一Ｉ／Ｆや、複数の記憶装置に接続される通信インタフェース装置である第二Ｉ／Ｆとを備えることができる。第一Ｉ／Ｆ及び第二Ｉ／Ｆの少なくとも一方は、例えば、通信ポートであり、専用線或いは通信ネットワークを介して、相手に接続される。
【００１９】
不揮発性メモリとしては、例えば、フラッシュメモリ（具体的には、例えば、ＮＡＮＤ型フラッシュメモリ）、ＭＲＡＭ（Magnetoresistive Random Access Memory）、ＰＲＡＭ（Parameter
Random Access Memory）など、種々の不揮発性メモリを採用することができる。不揮発性メモリは、コントローラ部に備えても良いし、コントローラ部と接続される記憶装置部に備えても良い。記憶装置部には、前述した複数の記憶装置が備えられる。
【００２０】
アクセス制御部及びキャッシュデータコピー部は、ハードウェア、コンピュータプログラム又はそれらの組み合わせ（例えば一部をコンピュータプログラムにより実現し残りをハードウェアで実現すること）により構築することができる。コンピュータプログラムは、マイクロプロセッサに読み込まれて実行される。また、コンピュータプログラムがマイクロプロセッサに読み込まれて行われる情報処理の際、適宜に、メモリ等のハードウェア資源上に存在する記憶域が使用されてもよい。また、コンピュータプログラムは、ＣＤ−ＲＯＭ等の記録媒体から計算機にインストールされてもよいし、通信ネットワークを介して計算機にダウンロードされてもよい。
【発明の効果】
【００２１】
本発明によれば、揮発性のキャッシュメモリのバックアップに必要なバッテリーの容量を削減することができる。また、本発明によれば、ストレージシステムに備えた不揮発性メモリの劣化を抑えることができる。
【発明を実施するための最良の形態】
【００２２】
以下、本発明の幾つかの実施形態を説明する。
【００２３】
＜実施形態１＞。
【００２４】
図１９は、本発明の第一実施形態に係る計算機システムの概要、並びに、ホスト計算機からリードコマンドが発行された場合に実行される処理の流れの概要を示す。
【００２５】
ストレージシステム１０１は、コントローラ部３０１と、記憶装置部３５１と、バッテリー３１５とを備える。
【００２６】
記憶装置部３５１は、複数の記憶装置３５３を含む。複数の記憶装置３５３は、全てが同じ種類の記憶装置であっても良いし、異なる種類の記憶装置が混在しても良い。記憶装置３５３としては、例えば、ディスク型記憶装置（例えば、ハードディスクドライブ（ＨＤＤ）、ＤＶＤ（Digital Versatile Disk）ドライブ）、テープ型記憶装置（例えば、磁気テープドライブ）、或いは、フラッシュメモリデバイスとすることができる。複数の記憶装置３５３の記憶空間を基に一又は複数の論理ボリュームを提供することができる。複数の記憶装置３５３のうちの二以上の記憶装置３５３で、ＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）グループを構成することができ、該ＲＡＩＤグループの記憶空間を基に論理ボリュームが提供されてもよい。複数の論理ボリュームの各々には、ボリューム識別子、例えば、ＬＵＮ（Logical Unit Number）が対応付けられている。
【００２７】
コントローラ部３０１は、フロントエンドＩ／Ｆ（以下、ＦＥ
Ｉ／Ｆ）３０７と、バックエンドＩ／Ｆ（以下、ＢＥ Ｉ／Ｆ）３１７と、キャッシュメモリ（以下、ＣＭ）３１１と、不揮発性メモリ（以下、ＮＭ）３１３と、スイッチ（以下、ＳＷ）３０９と、マイクロプロセッサ（以下、ＭＰ）３０３とを備える。
【００２８】
ＦＥ Ｉ／Ｆ３０７は、ホスト計算機（以下、ホスト）２００と通信可能に接続される通信インタフェース装置であり、例えば、通信ポートである。ＢＥ
Ｉ／Ｆ３１７は、複数の記憶装置３５３と通信可能に接続される通信インタフェース装置であり、例えば、通信ポートである。
【００２９】
ＣＭ３１１は、揮発性のメモリ、例えばＤＲＡＭ（Dynamic Random Access Memory）である。ＣＭ３１１には、例えば、複数のサブ領域（以下、ＣＭサブ領域）が含まれる。一方、ＮＭ３１３は、例えば、ＦＭ（Flash Memory）であり、複数のサブ領域（以下、ＮＭサブ領域）が含まれる。
【００３０】
ＣＭ３１１には、ランダム領域３７５、シーケンシャル領域３７３及びキャッシュ制御領域３７７を用意することができる。ランダム領域３７５とは、少なくとも一つのＣＭサブ領域で構成される記憶域であり、ランダムアクセスにより記憶装置３５３に書込まれる或いは記憶装置３５３から読み出されたデータ（以下、ランダムアクセスデータ）が記憶される。シーケンシャル領域３７３とは、少なくとも一つのＣＭサブ領域で構成される記憶域であり、シーケンシャルアクセスにより記憶装置３５３に書込まれる或いは記憶装置３５３から読み出されたデータ（以下、シーケンシャルアクセスデータ）が記憶される。キャッシュ制御領域３７７とは、少なくとも一つのＣＭサブ領域で構成された記憶域、或いは、前述した複数のＣＭサブ領域とは別に用意された所定の記憶域であり、キャッシュ制御情報が記憶される。キャッシュ制御情報とは、ＣＭ３１１やＮＭ３１３に対するデータ格納を制御するための情報であり、例えば、各アクセス先情報毎に、サブ領域アドレス情報（どこのサブ領域に対応しているか）、サブ領域種別（例えば、ＣＭサブ領域であるか、ＮＭサブ領域であるか）、サブ領域属性（例えば、クリーン、ダーティ、或いは、フリー）、及び、ＬＲＵ（Least Recently Used）からの距離、を含む。前述したアクセス先情報は、ホスト２００からのアクセスコマンドで指定されている第一種のアクセス先情報（例えば、ＬＵＮ（Logical Unit Number）とＬＢＡ（Logical Brock
Address）との組み合わせ）であっても良いし、該アクセスコマンドで指定されているアクセス先情報を変換することにより取得される第二種のアクセス先情報（例えば、記憶装置３５３の識別子とＬＢＡとの組み合わせ）であっても良い。サブ領域属性“クリーン”とは、記憶装置３５３に格納済みのデータ（クリーンのデータ）を記憶しているサブ領域であることを意味する。サブ領域属性“ダーティ”とは、記憶装置３５３に未だ格納されていないデータ（ダーティのデータ）を記憶しているサブ領域であることを意味する。サブ領域属性“フリー”とは、データの格納先の候補となるサブ領域であることを意味する。すなわち、本実施形態では、ＣＭ３１１にデータを格納する場合にも、ＮＭ３１３にデータを格納する場合でも、ＭＰ３０３により、複数のサブ領域の中から、サブ領域属性が“フリー”であるサブ領域が選択されてデータが一時格納され、その格納されたデータの種類により、そのサブ領域のサブ領域属性が、“フリー”から“クリーン”或いは“ダーティ”に変更される。また、本実施形態では、ＭＰ３０３により、サブ領域属性が“クリーン”である複数のサブ領域から、フリー化しても良いサブ領域が選択され、選択されたサブ領域のサブ領域属性が、“クリーン”から“フリー”に変更される。また、前述した「ＬＲＵからの距離」とは、例えば、ＬＲＵポインタに対し、サブ領域に対応したエントリをカスケードに接続し、ＬＲＵポイントから何番目のエントリであるかにより、特定することができる。ＬＲＵの距離が最短であれば、ＬＲＵであることを意味し、ＬＲＵからの距離が最長であれば、ＭＲＵ（Most Recently Used）であることを意味する。
【００３１】
ＮＭ３１３には、ＮＭキャッシュ領域３９１と、キャッシュ制御退避領域３９３とを用意することができる。ＮＭキャッシュ領域３９１とは、少なくとも一つのＮＭサブ領域で構成され、ＣＭ３１１に記憶されているデータ（前述したキャッシュ制御情報とは異なる）のコピー先とされる記憶域である。キャッシュ制御退避領域３９３とは、少なくとも一つのＮＭサブ領域で構成された記憶域、或いは、前述した複数のＮＭサブ領域とは別に用意された所定の記憶域であり、キャッシュ制御情報の退避先（コピー先）とされる記憶域である。
【００３２】
ＳＷ３０９には、ＦＥ Ｉ／Ｆ３０７、ＣＭ３１１、ＮＭ３１３、ＭＰ３０３及びＢＥ
Ｉ／Ｆ３１７が接続されている。ＳＷ３０９は、自分に接続されている複数の要素のうちのどの要素とどの要素とを接続するかの切り替えを行う。ＳＷ３０９は、例えば、ＬＳＩ（Large Scale Integration）で実現することができる。ＳＷ３０９に代えて、バスなど他種の接続機構が採用されても良い。
【００３３】
ＭＰ３０３は、所定のコンピュータプログラムを実行することにより、ホスト２００からＦＥ
Ｉ／Ｆ３０７で受信したリードコマンドやライトコマンドを処理することができる。
【００３４】
以下、リードコマンドを受信した場合に実行される処理の流れの概要を、この図１９を参照しながら説明する。図１９では、点線矢印が、ＣＭヒットした場合のデータの流れを示し、実線矢印が、ＮＭヒットした場合のデータの流れを示し、一点鎖線矢印が、ＣＭ３１１からＮＭへのデータコピーを示す。
【００３５】
ＭＰ３０３は、リードコマンドからアクセス先情報を特定し、該アクセス先情報を用いてキャッシュ制御情報を参照することで、該アクセス先情報に対応したＣＭサブ領域を探す。そのＣＭサブ領域が見つかった場合（ＣＭヒットした場合）、ＭＰ３０３は、見つかったＣＭサブ領域からデータを読み出してホスト２００に送信する。ＭＰ３０３は、そのＣＭサブ領域が見つからなかった場合（ＣＭミスの場合）には、該アクセス先情報を用いてキャッシュ制御情報を参照することで、該アクセス先情報に対応したＮＭサブ領域を探す。ＮＭサブ領域が見つかった場合（ＮＭヒットした場合）、ＭＰ３０３は、見つかったＮＭサブ領域からデータを読み出してホスト２００に送信する。ＣＭサブ領域もＮＭサブ領域も見つからなかった場合（ＣＭミス且つＮＭミスの場合）、ＭＰ３０３は、該アクセス先情報に対応する、複数の記憶装置３５３における場所から、データを読出し、読み出したデータを、“フリー”のＣＭサブ領域に一時格納する。ＭＰ３０３は、そのＣＭサブ領域のサブ領域属性を“クリーン”にし、格納したデータを、該ＣＭサブ領域から読み出してホスト２００に送信する。
【００３６】
また、ＭＰ３０３は、上記のリードコマンドに従う読み出しがシーケンシャルアクセスかランダムアクセスかを判断する。ＭＰ３０３は、シーケンシャルアクセスと判断したならば、データの一時格納先の上記ＣＭサブ領域を、シーケンシャル領域３７３に属させ、ランダムアクセスと判断したならば、そのＣＭサブ領域を、ランダム領域３７５に属させる。
【００３７】
また、ＭＰ３０３は、所定のコンピュータプログラムを適宜に実行することにより、ＣＭ３１１上のデータを、ＮＭ３１３にコピーすることができる。具体的には、例えば、ＭＰ３０３は、キャッシュ制御情報を参照することにより、ランダム領域３７５に属しサブ領域属性が“クリーン”でＬＲＵであるＣＭサブ領域と、サブ領域属性が“フリー”のＮＭサブ領域とを特定する（無ければ、例えば、サブ領域属性が“クリーン”のＮＭサブ領域を“フリー”にする）。ＭＰ３０３は、特定したＣＭサブ領域内のクリーンのデータを、特定したＮＭサブ領域にコピーする。このデータコピーは、ＭＰ３０３によって実行されても良いし、ＤＭＡ（Direct Memory Access）により実行されても良い。
【００３８】
次に、ＦＥ Ｉ／Ｆ３０７でライトコマンドを受信した場合に実行される処理の流れの概要を、図２０を参照しながら説明する。図２０では、点線矢印が、ＣＭヒットした場合のデータの流れを示し、実線矢印が、ＮＭヒットした場合のデータの流れを示し、一点鎖線矢印が、ＣＭ３１１が過負荷の場合のデータの流れを示す。
【００３９】
ＭＰ３０３は、ライトコマンドからアクセス先情報を特定し、該アクセス先情報を用いてキャッシュ制御情報を参照することで、該アクセス先情報に対応したＣＭサブ領域を探す。そのＣＭサブ領域が見つかった場合（ＣＭヒットした場合）、ＭＰ３０３は、見つかったＣＭサブ領域に、ライトコマンドに従うデータを格納する。ＭＰ３０３は、そのＣＭサブ領域が見つからなかった場合（ＣＭミスの場合）には、該アクセス先情報を用いてキャッシュ制御情報を参照することで、該アクセス先情報に対応したＮＭサブ領域を探す。ＮＭサブ領域が見つかった場合（ＮＭヒットした場合）、ＭＰ３０３は、キャッシュ制御情報を参照することにより、サブ領域属性が“フリー”のＣＭサブ領域を特定し、見つかったＮＭサブ領域から、特定されたＣＭサブ領域にデータをコピーする。そして、ＭＰ３０３は、そのＣＭサブ領域に、該ライトコマンドに従うデータを格納する。
【００４０】
また、ＭＰ３０３は、上記のライトコマンドに従う書込みがシーケンシャルアクセスかランダムアクセスかを判断する。ＭＰ３０３は、シーケンシャルアクセスと判断したならば、データの一時格納先の上記ＣＭサブ領域を、シーケンシャル領域３７３に属させ、ランダムアクセスと判断したならば、そのＣＭサブ領域を、ランダム領域３７５に属させる。
【００４１】
ＭＰ３０３は、原則として、ランダム領域３７５に属し且つサブ領域属性が“クリーン”のＣＭサブ領域内のデータを、ＮＭ３９１のＮＭキャッシュ領域３９１にコピーするが、例外として、ＣＭ３１１が過負荷の場合には、ランダム領域３７５に属しサブ領域属性が“ダーティ”のＣＭサブ領域内のデータを、ＮＭ３９１のＮＭキャッシュ領域３９１にコピーする。ＣＭ３１１が過負荷の場合とは、例えば、サブ領域属性が“クリーン”或いは“フリー”のＣＭサブ領域が無くサブ領域属性が“ダーティ”のＣＭサブ領域しか存在しない場合である。このような場合には、例えば、ＭＰ３０３は、キャッシュ制御情報を参照することにより、ランダム領域３７５に属しサブ領域属性が“ダーティ”でありＬＲＵのＣＭサブ領域と、サブ領域属性が“フリー”のＮＭサブ領域とを特定する（無ければ、“クリーン”のＮＭサブ領域を“フリー”にする）。ＭＰ３０３は、特定したＣＭサブ領域内のダーティのデータを、特定したＮＭサブ領域にコピーする。このデータコピーは、ＭＰ３０３によって実行されても良いし、ＤＭＡ（Direct Memory Access）により実行されても良い。ＭＰ３０３は、ＮＭ３１３のダーティのデータを、記憶装置３５３にコピーすることができる。以下、ＣＭ３１１或いはＮＭ３１３に記憶されているデータを記憶装置３５３に格納することを、本実施形態の説明において、「デステージ」と呼ぶ。
【００４２】
次に、コントローラ部３０１に一次電源２０１からの給電が無くなりバッテリー３１５からの給電でしか動作できなくなってしまった場合に実行される処理の流れの概要を、図２１を参照しながら説明する。
【００４３】
この場合、ＣＭ３１１上のデータが、ＮＭキャッシュ領域３９１に退避される。また、キャッシュ制御領域３７７上のキャッシュ制御情報が、キャッシュ制御退避領域３９３に退避される。これらの退避は、ＭＰ３０３により実行されても良いし、ＤＭＡにより行われても良い。
【００４４】
なお、データの退避では、クリーンのデータの退避は不要である。なぜなら、ＣＭ３１１上のクリーンのデータが消失しても、記憶装置３５３で保持されているからである。
【００４５】
そこで、一次電源２０１からの給電が無くなった場合、ＭＰ３０３が、バッテリー３１５からの給電により、以下のように動作することができる。具体的には、例えば、ＭＰ３０３が、キャッシュ制御情報を参照することにより、サブ領域属性“ダーティ”のＣＭサブ領域を特定し、特定したＣＭサブ領域内のダーティのデータを、ＮＭキャッシュ領域３９１に退避する。ダーティのデータであれば、ランダムアクセスのデータであるかシーケンシャルアクセスのデータであるかに関わらず、退避される。また、キャッシュ制御情報については、キャッシュ制御情報の全てが、ＭＰ３０３によりキャッシュ制御退避領域３９３に退避されても良いし、ＭＰ３０３により、サブ領域属性“ダーティ”のＣＭサブ領域及びＮＭサブ領域を管理する部分が選択され、選択された部分が、キャッシュ制御退避領域３９３に退避されても良い。
【００４６】
以下、この第一実施形態について詳細に説明する。
【００４７】
図１は、本発明の第一実施形態に係る計算機システムの構成例を示す。
【００４８】
この計算機システムでは、１台以上のストレージシステム１０１、１台以上のホスト計算機２００、及びＳＡＮ（Storage Area Network）管理計算機（以下、便宜上、「管理サーバ」と呼ぶ）４００がある。
【００４９】
ストレージシステム１０１及びホスト２００は、１個以上のＳＡＮポート８８を有する。各ＳＡＮポート８８が、ＳＡＮ３００（具体的には、例えば、ＳＡＮ３００の構成要素であるＳＡＮスイッチ）に接続される。ストレージシステム１０１及びホスト２００は、例えば、ＦＣＰ(Fibre Channel Protocol)と呼ばれるプロトコルを用いて、コマンドやデータの送受信を行うことができる。
【００５０】
また、ＬＡＮ（Local Area Network）５００に、ストレージシステム１０１、ホスト２００及び管理サーバ４００が接続される。管理サーバ４００は、ＬＡＮ５００を介して、ホスト２００やストレージシステム１０１０と通信することができる。
【００５１】
なお、本実施の形態では、ストレージシステム１０１及びホスト２００間で用いるＳＡＮのインタフェース及びプロトコルの種類を特に限定しない。例えば、インタフェース及びプロトコルの組合せとして、イーサネット（登録商標）(Ethernet（登録商標）)とｉＳＣＳＩ(Internet Small Computer
System Interface)など他の組み合わせを用いても良い。また、ストレージシステム１０１及び管理サーバ４００間をＬＡＮで接続することとしたがこれも例示に過ぎず、別のインタフェースを用いても良い。
【００５２】
ホスト２００は、データベースなど何らかのアプリケーションを実行し、それらの処理に必要となるデータの入出力をストレージシステム１０１に対して行うコンピュータである。
【００５３】
ストレージシステム１０１は、ホスト２００に１個以上の論理記憶領域（以下、論理ボリューム又はＬＶＯＬともいう）６１を提供するシステムである。ホスト２００がストレージシステム１０１へＳＣＳＩコマンドを送信すると、ストレージシステム１０１は、当該コマンドに従い、ホスト２００との間でデータ転送を行う。ホスト２００から転送されたデータは、前述した複数の記憶装置３５３のうちの少なくとも一つに格納される。具体的には、例えば、その転送されたデータは、各論理ボリューム６１に対応付けられた物理記憶領域である、４つの記憶装置（例えばハードディスクドライブ）３５３により構成されたパリティグループ（以下、ＰＧともいう）に格納される。パリティグループは、ＲＡＩＤグループ、或いはアレイグループと呼ばれることもある。
【００５４】
なお、論理ボリューム６１は、種々の論理ボリュームのいずれであってもよい。具体的には、例えば、論理ボリューム６１は、パリティグループから固定的に物理記憶領域が割り当てられた論理ボリュームであっても良いし、パリティグループから動的に記憶領域が割り当てられる仮想的な論理ボリューム（以下、自動容量拡張ボリューム）であっても良いし、ホスト２００からのコマンドによる制御指示や自動容量拡張ボリュームのモード変更指示等を格納する論理ボリュームであっても良いし、図示しない他のストレージシステム内の論理ボリュームが対応付けられた論理ボリューム（以下、外部接続ボリューム）であっても良い。自動容量拡張に関しては、例えば、特開２００３−１５９１５号公報（ＵＳ特許番号６７２５３２８号、ＵＳ特許番号６８３６８１９号、ＵＳ出願番号１０／９９１４２１号）に開示の技術を援用することができる。外部接続に関しては、例えば、特開２００５−１０７６４５号公報（ＵＳ出願番号１０／７６９８０５号、ＵＳ出願番号１１／４７１５５６号）に開示の技術を援用することができる。
【００５５】
ホスト２００は、例えば、ＦＣＰを用いる場合、ストレージシステム１０１のＳＡＮポート８８を指定するためのポートアドレスと、ＬＵＮ(Logical Unit Number)番号とをコマンドヘッダに付加してストレージシステム１０１へ発行することで、論理ボリューム６１を指定することができる。コマンドには、他に、例えば、読み出しや書き込みといったコマンド種別を示すコマンドコード、論理ボリューム６１内での転送開始位置を示すアドレスや転送長といった情報が含まれる。
【００５６】
ストレージシステム１０１は、ＳＣＳＩコマンドを受信した場合、例えば、該ＳＣＳＩコマンドに設定されている情報に基づき、ＳＡＮポート８８及びＬＵＮから論理ボリューム６１を特定し、データ転送を行う。本実施形態では、必ずしも各ＳＡＮポート８８に論理ボリューム６１を１個以上設定する必要は無く、初期設定時において論理ボリューム６１を設定しない未使用のＳＡＮポート８８を１個以上用意するようにしても良い。図１では、Ｓ１ｄ，Ｓ１ｖのＳＡＮポート８８が未使用であることを示している。
【００５７】
なお、ＳＡＮの信頼性を高めるため、図示するように、ストレージシステム１０１及びホスト２００間を、複数のＳＡＮポート８８及びＳＡＮ３００で接続し、複数のＳＡＮポート８８とＬＵＮとの組み合わせを同一の論理ボリューム６１へ対応付けることで、ホスト２００から論理ボリューム６１へのアクセス経路が冗長化されてもよい。
【００５８】
ホスト２００は、冗長化した論理ボリューム６１へのアクセス経路（例えば、ポートアドレスとＬＵＮの組み合わせ）を仮想化するため、記憶領域をホストボリューム７１（以下、ＨＶＯＬともいう）という単位で管理することができる。ホスト２００は、アプリケーションがホストボリューム７１へアクセスすると、対応する論理ボリューム６１へのＳＣＳＩコマンドをストレージシステム１０１に送信することができる。
【００５９】
図２は、ストレージシステム１０１の構成例を示す。
【００６０】
ストレージシステム１０１は、コントローラ部３０１と記憶装置部３５１とに大別することができる。また、ストレージシステム１０１には、このストレージシステム１０１の保守或いは管理を行うためのサービスプロセッサ（ＳＶＰ）３６３を備えることができる。サービスプロセッサ３６３は、例えば、計算機（具体的には、例えば、ノート型のパーソナルコンピュータ）であり、各ＭＰ３０３Ａ及び３０３Ｂの構成情報を設定したり、管理サーバ４００と通信するためのプロセッサに対して情報を設定したりするなど、種々の処理を実行することができる。
【００６１】
コントローラ部３０１は、二重化されたクラスタで構成されている（二重化に限らない多重化であっても良い）。一方のクラスタに障害が生じた場合には、他方のクラスタで縮退運転することができる。両クラスタのハードウェア構成は、実質的に同じにすることができる。そのため、以下、一方のクラスタ（図２では、クラスタ＃１と示すクラスタ）を例に採り説明する。
【００６２】
一方のクラスタには、ホストＩ／Ｆ３０７Ａ、ＭＰ３０３Ａ、ＤＭＡコントローラ３０４Ａ、ＣＭ３１１Ａ、ＮＭ３１３Ａ、ディスクＩ／Ｆ３１７Ａ、相互結合網３１６Ａ及び電源部３１４Ａが備えられる。ホストＩ／Ｆ３０７Ａ、３０７Ｂ、ディスクＩ／Ｆ３１７Ａ、３１７Ｂは、例えば、相互結合網のコネクティビティが許す範囲内で、必要なポート数に応じて増設及び／又は減設が可能であっても良い。また、ＭＰ３０３Ａ、３０３Ｂ、ＣＭ３１１Ａ、３１１Ｂ、ＮＭ３１３Ａ、３１３Ｂ、及び、ＤＭＡコントローラ３０４Ａ、３０４Ｂのうちの少なくとも一つの部位が、必要とされる性能に応じて増設及び／又は減設が可能であっても良い。
【００６３】
ホストＩ／Ｆ３０７Ａは、例えば前述したＦＥ Ｉ／Ｆ３０７に相当し、ディスクＩ／Ｆ３１７Ａは、例えば前述したＢＥ Ｉ／Ｆ３１７に相当する。ＤＭＡコントローラ３０４Ａは、ＣＭ３１１ＡとＮＭ３１３Ａとの間のデータ転送を行う。
【００６４】
相互結合網３１６Ａは、例えば前述したＳＷ３０９に相当する。相互結合網３１６Ａは、バスなどの他種の接続部であっても良い。相互結合網３１６Ａには、一方のクラスタにおけるホストＩ／Ｆ３０７Ａ、ＭＰ３０３Ａ、ＤＭＡコントローラ３０４Ａ、ＣＭ３１１Ａ、ＮＭ３１３Ａ及びディスクＩ／Ｆ３１７Ａの他に、他方のクラスタにおけるホストＩ／Ｆ３０７Ｂ、ＭＰ３０３Ｂ、ＤＭＡコントローラ３０４Ｂ、ＣＭ３１１Ｂ、ＮＭ３１３Ｂ、ディスクＩ／Ｆ３１７Ｂも接続されている。このため、例えば、ＭＰ３０１Ａは、一方の相互結合網３１６Ａを介して一方のＣＭ３１１ＡやＮＭ３１３Ａにアクセスすることもできるし、他方の相互結合網３１６Ｂを介して他方のＣＭ３１１ＢやＮＭ３１３Ｂにアクセスすることもできる。また、両方のディスクＩ／Ｆ３１７Ａ及び３１７Ｂには、各記憶装置３５３が接続されており、故に、どちらのディスクＩ／Ｆ３１７Ａ又は３１７Ｂを経由しても、どの記憶装置３５３にもアクセスできるようになっている。すなわち、このストレージシステム１０１では、各部位や、記憶装置３５３へのアクセス経路が、信頼性を高めるため二重化構成になっている。
【００６５】
電源部３１４Ａは、一方のクラスタにおける各部位に給電する。電源部３１４Ａは、例えば、商用電源からの電力を各部位に供給する電源回路と、電源回路に障害が生じた場合に所定部位（例えば、ＭＰ３０３Ａ、ＣＭ３１１Ａ）に給電するバッテリーとを含む。バッテリーは、例えば停電などの一次電源障害が生じた場合に、二次電源として、例えばＣＭ３１１Ａに給電することにより、ＣＭ３１１Ａからのデータの消失を防ぐことができる。なお、図２において、コントローラ部３０１の中央に引かれた点線は、電源境界を意味する。すなわち、一方のＭＰ３０３Ａは、一方のＣＭ３１１Ａ及びＮＭ３１３Ａや他方のＣＭ３１１Ｂ及びＮＭ３１３Ｂにアクセスできるが、一方の電源部３１４Ａからの給電は、一方のクラスタにおける各部位に対して行われ、他方のクラスタにおける各部位には行われないことを意味する。
【００６６】
記憶装置部３５１には、前述したように、複数の記憶装置３５３が含まれ、各記憶装置３５３は、両方のディスクＩ／Ｆ３１７Ａ及び３１７Ｂと通信可能に接続されている。また、記憶装置部３５１には、各記憶装置３５３に給電する電源部３５７Ａ及び３５７Ｂがある。電源部３５７Ａ及び３５７Ｂは、二重化構成になっており、一方の電源部３５７Ａに障害あった場合には、他方の電源部３５７Ｂから各記憶装置３５３に給電することができる。
【００６７】
このストレージシステム１０１では、例えば、以下のようになっている。
【００６８】
記憶装置部３５１の電源部３５７Ａ、３５７Ｂは、例えば故障に備えて二重化（或いは三重化以上の多重化）されているが、各電源部には、バッテリーが含まれなくて良い。
【００６９】
ＮＭ３１３Ａ、３１３Ｂは、前述したように、バッテリー等からの給電がなくてもデータを保持し続けることが可能なタイプのメモリである。一次電源障害が無い場合（例えば正常時の場合）は、ＣＭ３１１Ａ、３１１Ｂと同様にキャッシュとして使用することが可能である。一方のＣＭ３１１Ａに障害が生じた場合（例えば、ＣＭ３１１Ａそれ自体が壊れた或いは一方で一次電源障害が生じた場合）、ＮＭ３１３Ａは、一次電源障害時のダーティデータの退避先として使用することができる。
【００７０】
ＮＭ３１３Ａ、３１３Ｂは、寿命がある。具体的には、例えば、ＮＭの更新回数が或る閾値（例えば、ＮＭのメーカが規定する保証回数）を超えた場合、ＮＭのデータが失われる可能性がある。ＮＭ３１３Ａ、３１３Ｂのアクセス速度は、ＣＭ３１１Ａ、３１１Ｂより低速だが、記憶装置３５３よりは高速である。ＮＭ３１３Ａ、３１３Ｂのアクセス速度において、書込み速度に比して読出し速度の方が高速なものもある。
【００７１】
また、ＣＭ３１１ＡからＮＭ３１１Ａ（及び／又はＮＭ３１１Ｂ）へのデータコピーや、ＮＭ３１１Ａ（及び／又はＮＭ３１１Ｂ）からＣＭ３１１Ｂへのデータコピーは、ＭＰ３０３Ａ（及び／又はＭＰ３０３Ｂ）が行っても良いが、ＤＭＡコントローラ３０４Ａ（及び／又はＤＭＡ３０４Ｂ）により行うことができる。
【００７２】
また、ＮＭ３１３Ａ及び３１３Ｂは、相互結合網３１６Ａ及び３１６Ｂに接続されているが、それに限らない。例えば、ディスクＩ／Ｆ３１７Ａ、３１７Ｂと通信するためのインタフェースを持つＮＭデバイス（例えばフラッシュメモリデバイス）を記憶装置部３５１に搭載され、ディスクＩ／Ｆ３１７Ａ、３１７Ｂを通じてＭＰ３０３Ａ、３０３Ｂと通信されても良い。その場合は電源部３５７Ａ、３５７Ｂもバッテリーを持つ必要がある。
【００７３】
図３は、コントローラ部３０１の論理的な構成例を示す。この図３には、一方のクラスタでの構成を代表的に示している。
【００７４】
ＭＰ３０３Ａでは、コントローラ部３０１上の記憶域から読み出されたコンピュータプログラムが実行される。また、ＭＰ３０３Ａは、該記憶域から構成情報４５２を取得することができる。コンピュータプログラムとしては、例えば、コマンド処理プログラム４５１、ＲＡＩＤ制御プログラム４５３、キャッシュ制御プログラム４５４、ＳＶＰ通信プログラム４５５、初期化プログラム４５６、障害処理プログラム４５７、データ退避プログラム４５８及びＮＭリプレースプログラム４５９がある。以下、各プログラム及び構成情報４５２について説明する。その際、コンピュータプログラムが主語になる場合は、実際にはそのコンピュータプログラムを実行するＭＰによって処理が行われるものとする。
【００７５】
コマンド処理プログラム４５１は、ホストＩ／Ｆ３０７Ａが受信するＳＣＳＩコマンドを処理する。
【００７６】
構成情報４５２は、ホスト２００に見せている論理ボリューム６１と、パリティグループとの対応関係を表す情報である。構成情報４５２には、例えば、ＬＵ構成テーブルと、ＬＶＯＬ構成テーブルとを含む。各テーブルについては後述する。
【００７７】
ＲＡＩＤ制御プログラム４５３は、パリティグループからＣＭ３１１Ａへのステージング（記憶装置３５３からＣＭ３１１Ａへのデータ読出し）や、ＣＭ３１１Ａ或いはＮＭ３１３Ａのダーティのデータをパリティグループへデステージする。
【００７８】
キャッシュ制御プログラム４５４は、キャッシュ制御情報４６１を操作し、ＣＭセグメント（ＣＭ３１１Ａのサブ領域）の状態を制御する処理を実行する。このプログラム４５４は、例えば、コマンド処理プログラム４５１やＲＡＩＤ制御プログラム４５３から呼び出される。
【００７９】
ＳＶＰ通信プログラム４５５は、ＳＶＰ３６３と通信する。このプログラム４５５は、例えば、ＳＶＰ３６３から入力された構成情報４５２を設定する処理を行う。ＳＶＰ３６３は、スタンドアロンで動作可能（例えば、ディスプレイ装置や入力装置（例えばキーボード）を装備した装置）であっても良いし、管理サーバ４００からの指示に従って構成情報４５２を入力可能であっても良い。ＳＶＰ通信プログラム４５５は、障害処理プログラム４５７によって検出された障害を表す情報（障害情報）などをＳＶＰ３６３に通知することができる。ＳＶＰ３６３は、その通知された障害情報を、管理サーバ４００に通知することができる。
【００８０】
初期化処理プログラム４５６は、所定の初期化処理、例えば、後述する各種キューの初期化を行う。
【００８１】
障害処理プログラム４５７は、定期的、又は、他のコンピュータプログラムでエラーが発生した契機で、呼び出される。障害処理プログラム４５７は、各部位をチェックすることで、障害発生を検出し、適した障害処理を実施する。このプログラム４５７は、例えば、一次電源障害を検出した場合、データ退避プログラム４５８を呼び出すことができる。
【００８２】
データ退避プログラム４５８は、一次電源障害が生じた場合に（例えば障害処理プログラム４５７から呼び出された場合に）、ＣＭ３１１Ａ上のダーティのデータをＮＭ３１３Ａに退避する。
【００８３】
ＮＭリプレースプログラム４５９は、ＣＭ３１１ＡからＮＭ３１３Ａへのデータコピーのための処理を行う。
【００８４】
ＣＭ３１１Ａには、前述したように、キャッシュ制御情報４６１が格納されるキャッシュ制御領域３７７がある。また、ＣＭ３１１Ａには、複数のＣＭセグメント４６２がある。
【００８５】
キャッシュ制御情報４６１は、キャッシュ制御処理を行うための情報である。例えば、この情報４６１には、スロット制御ブロック、キャッシュディレクトリ、クリーンキュー、ダーティキュー、フリーキューが含まれる。
【００８６】
ＣＭセグメント４６２とは、前述したＣＭサブ領域の一種である。言い換えれば、ＣＭ３１１Ａを固定長のセグメントに分割して管理することができる。ＣＭセグメントサイズは、任意のサイズでもよい（例えば４ｋＢ（キロバイト）とする）。
【００８７】
ＮＭ３１３Ａには、前述したように、キャッシュ制御退避領域３９３がある。また、ＮＭ３１３Ａには、複数のＮＭセグメント４６３がある。ＮＭセグメント４６３とは、前述したＮＭサブ領域の一種である。言い換えれば、ＮＭ３１３Ａを固定長のセグメントに分割して管理することができる。ＮＭセグメント４６３には、ＣＭセグメント４６２に格納されるデータを格納することができる。そのため、ＮＭセグメントサイズをＣＭセグメントサイズと同じにすることができる。なお、それに代えて、例えば、ＮＭセグメントには、データの他に、所定種類の制御情報が格納されても良い。この場合、ＮＭセグメントサイズを、ＣＭセグメントサイズに、格納される制御情報のサイズを加算した値とすることができる（それとは異なる値であっても良い）。
【００８８】
図４Ａは、ＬＵ構成テーブルの構成例を示す。以下、識別子を「ＩＤ」と略記する
ＬＵ構成テーブル４５２−１は、各ＳＡＮポートのＬＵＮに対応するＬＶＯＬ ＩＤを決めるためのテーブルである。具体的には、例えば、ＬＵ構成テーブル４５２では、ホストＩ／Ｆ３０７Ａ、３０７Ｂにおける各ＳＡＮポート８８毎に、ポートＩＤ、ＬＵＮ（論理ユニット番号）、ＬＶＯＬ ＩＤが対応付けられる。ここで、ＬＵとは、ホスト２００から認識される論理ボリュームを意味し、それに対しＬＶＯＬとは、ストレージシステム１０１内で認識される論理ボリュームを意味する。例えば、ＬＵとＬＶＯＬが１対１で対応することもあれば、複数のＬＶＯＬで一つのＬＵとされる場合もある。
【００８９】
このテーブル４５２−１が複数個あっても良い。この場合、ホスト２００によって同一ＬＵＮが別のＬＶＯＬ ＩＤにマッピングされても良い。
【００９０】
図４Ｂは、ＬＶＯＬ構成テーブルの構成例を示す。
【００９１】
ＬＶＯＬ構成テーブル４５２−２は、ＬＶＯＬの実体（データ格納先）を決めるためのテーブルである。具体的には、例えば、ＬＶＯＬ構成テーブル４５２−２では、各ＬＶＯＬ毎に、ＬＶＯＬ ＩＤ、ＰＧ ＩＤ、及び先頭スロット番号が対応付けられる。この他に、他種の情報要素、例えばＬＶＯＬの容量が書かれても良い。ＰＧ ＩＤとは、パリティグループのＩＤである。
【００９２】
パリティグループは、スロットという容量単位で、ＬＶＯＬに割当てることが可能である。そのため、ＬＶＯＬの容量は、例えば、スロットの数で表されても良い。スロットサイズは、４ｋＢ（キロバイト）とすることができるが、それに限らず、他のサイズが採用されても良い。
【００９３】
図５は、キャッシュ制御情報４６１の構成例を示す。
【００９４】
具体的には、図５Ａは、キャッシュディレクトリ管理構造の一例を示す。
【００９５】
図５Ａに示すキャッシュディレクトリ管理構造は、ＰＧ ＩＤとスロット番号との組み合わせ（以下、ＰＧ ＩＤ／スロット番号）からディレクトリエントリ５５３を探すためのデータ構造である。
【００９６】
ハッシュテーブル５５１がある。ハッシュテーブル５５１には、複数のディレクトリエントリポインタが含まれる。このテーブル５５１に記録されるディレクトリエントリポインタは、ディレクトリエントリ５５３を特定する情報であり、例えばＣＭ上でのアドレス値などである。ハッシュテーブル５５１の各ディレクトリエントリポインタは、ＰＧ ＩＤ／スロット番号のハッシュ値が互いに等しいディレクトリエントリ５５３からなる単方向リストの先頭を指し示す。ＰＧ ＩＤ／スロット番号は、他の方式で圧縮されても良い。
【００９７】
この実施形態では、ホスト２００からのＳＣＳＩコマンドで指定されているアドレス情報（例えばＬＵＮとＬＢＡとの組み合わせ）を用いて、構成情報４５２を参照することにより、ＬＶＯＬ ＩＤが特定され、該特定されたＬＶＯＬ ＩＤとＬＢＡとから、ＰＧ ＩＤ／スロット番号を特定することできる。そして、ＰＧ ＩＤ／スロット番号をハッシュ化することにより、ディレクトリエントリポイントが求まり、ディレクトリエントリポインタから、ディレクトリエントリ５５３を特定することができる。
【００９８】
ディレクトリエントリ５５３は、ＣＭセグメント４６２またはＮＭセグメント４６３に対応した情報である。ディレクトリエントリ５５３には、複数種類の情報要素が記述される。例えば、ディレクトリエントリポインタ、双方向キューポインタ、ＰＧ ＩＤ／スロット番号、セグメント種別、セグメントアドレス、スロット属性、ダーティビットマップ及び時刻を含めることができる。双方向キューポインタとは、ＬＲＵ管理構造において、どの他のディレクトリエントリ５５３と論理的に繋がるかを表す値であり、双方向に対応するため２つのポインタを有する。この双方向キューポインタから、このディレクトリエントリ５５３に論理的に繋がっている２つの他のディレクトリエントリ５５３のうち、どちらがＬＲＵ側に近い方でどちらがＭＲＵ側に近い方であるかを特定することができる。セグメント種別とは、例えば、ＣＭセグメントであるかＮＭセグメントであるかを表す。セグメントアドレスとは、セグメントの場所を表す。スロット属性とは、スロットに対応したセグメントの属性（ダーティ、クリーン、フリー）を表す。ダーティビットマップは、例えば、スロットに対応したセグメントを複数の領域に分割した場合に各領域に対応したビットの集合である。ダーティのデータが存在する領域に対応したビットは、有効（例えば１）とされ、そうでない領域に対応したビットは、無効（例えば０）とされる。ディレクトリエントリ５５３に記録される時刻は、後述するキュー遷移時の時刻を表す。
【００９９】
本実施形態では、説明を分かり易くするため、スロットサイズとＣＭセグメントサイズとを同じとする。しかし、それに限らず、例えば、もし、スロットサイズが、ＣＭセグメントサイズのＮ倍（Ｎは２以上の整数）であれば、ディレクトリエントリ５５３にＰＧ
ＩＤ／スロット番号に加えてスロット内で何番目のセグメントであるかを記録し、ヒットミス判定でＰＧ ＩＤ／スロット番号とそのセグメント番号が一致した場合にヒットと判断してもよい。
【０１００】
また、前述したダーティビットマップは、例えば、ホスト２００からライトコマンドでの書込み単位サイズがセグメントサイズと一致しない場合に有用である。具体的には、例えば、セグメントサイズが、書込み単位サイズのＭ倍（Ｍは２以上の整数）の場合には、一つのセグメントにつきＭ個のビットの集合でダーティビットマップを構成することができる。ＳＣＳＩでは、例えば、ホスト２００からのアクセス（Ｉ／Ｏ）最小単位は、５１２バイトのため、セグメントサイズが４ｋｂであれば、4kB/512B＝８bitあれば良い。
【０１０１】
図５Ｂは、ＬＲＵ管理構造の一例を示す。
【０１０２】
この図５Ｂは、ＣＭランダムクリーンのＬＲＵの管理構造を示す。ＬＲＵ管理は、キューで行うことができる。すなわち、ＣＭ３１１Ａに存在し、ランダムデータ（ランダムアクセスされるデータ）且つクリーンのデータのＬＲＵを管理するための構造である。ＣＭランダムクリーンキューのＬＲＵポインタ５５７に繋がっているディレクトリエントリ５５３から特定されるＣＭセグメント内のデータが、ＬＲＵ、すなわち、ＣＭ３１１Ａに存在するランダムデータ且つクリーンのデータのうち、最も過去に使われたデータであることを示す。逆に、ＣＭランダムクリーンキューのＭＲＵポインタ５５５に繋がっているディレクトリエントリ５５３から特定されるＣＭセグメント内のデータが、ＭＲＵ、すなわち、最近使われたデータであることを示す。新たにＣＭ３１１Ａのデータが使用される（アクセスされる）都度に、その使用に対応したディレクトリエントリ５５３が、ＭＲＵポインタ５５５と、それに繋がっているディレクトリエントリ５５３との間に挿入される。
【０１０３】
この図５Ｂは、ＣＭランダムクリーンのＬＲＵ管理のための構造であるが、これと同様の構造で、ＣＭシーケンシャルクリーン（ＣＭ３１１Ａに存在しシーケンシャルデータ且つクリーンのデータ）、ＣＭランダムダーティ（ＣＭ３１１Ａに存在しランダムデータ且つダーティのデータ）、ＣＭシーケンシャルダーティ（ＣＭ３１１Ａに存在しシーケンシャルデータ且つダーティのデータ）、ＮＭクリーン（ＮＭ３１３Ａに存在するクリーンのデータ）、ＮＭダーティ（ＮＭ３１３Ａに存在するダーティのデータ）のそれぞれのＬＲＵ管理も行うことができる。なお、ＮＭダーティのＬＲＵ管理構造は、障害が生じた場合（例えば、ＣＭ３１１Ａが過負荷の場合、或いは、一次電源障害が生じてダーティのデータがＣＭ３１１ＡからＮＭ３１３Ａに退避された場合）に用いられる。
【０１０４】
図５Ｃは、フリー管理構造を示す。
【０１０５】
この図５Ｃは、ＣＭフリー（スロット属性“フリー”に属するディレクトリエントリ）の管理のための構造を示す。この管理は、キューで行うことができる。ＣＭフリーの管理では、スロット属性“フリー”に属するディレクトリエントリ（すなわち、“フリー”のＣＭセグメント）が管理できれば良く、ＬＲＵの管理は不要なので、双方向キューポインタに含まれる２つのポインタのうち片方しか使用しない（もう片方のポインタとしては、例えば、無効を意味する値が設定される）。ＣＭフリーキューポインタ５５９から、ＣＭフリーの一以上のディレクトリエントリ５５３が連結される。この連結構造の末尾のディレクトリエントリ５５３には、末尾を意味する値（例えばＮＵＬＬ）が関連付けられる。
【０１０６】
ＮＭフリーについても、同様のフリー管理構造を適用することができる。
【０１０７】
なお、以上のキャッシュ制御情報４６１において、例えば、初期状態では、全てのディレクトリエントリ５５３は、ＣＭセグメント４６２に対応するものはＣＭフリー、ＮＭセグメント４６３に対応するものはＮＭフリーキューに入れられる。具体的には、例えば、初期化プログラム４５６により、初期化処理の一つとして、各ディレクトリエントリ５５３に、セグメント種別とセグメントアドレスを設定し、セグメント種別に対応するフリーキューへ登録する処理が実行される。
【０１０８】
以下、この第一実施形態で行われる幾つかの処理の流れを説明する。
【０１０９】
図６は、ホストＩ／Ｆでリードコマンドを受信した場合に実行される処理の流れの一例を示す。なお、図では、ステップを「Ｓ」と略記している。
【０１１０】
ステップ１０１では、コマンド処理プログラム４５１が、リードコマンドで指定されているアクセス先情報（例えばＬＵＮ及びＬＢＡ）から、ＰＧ
ＩＤ／スロット番号を算出する。
【０１１１】
ステップ１０２では、コマンド処理プログラム４５１が、キャッシュヒット／ミスの判定を行う。具体的には、例えば、コマンド処理プログラム４５１は、算出されたＰＧ
ＩＤ／スロット番号に対応したディレクトリエントリ５５３の有無の判定を行う。この判定では、例えば、コマンド処理プログラム４５１は、ＣＭに関するキューを先に参照し、ＣＭミスとなった場合に、ＮＭに関するキューを参照する。ＣＭを主に使用するためである。これにより、この判定（ステップ１０２）を短時間で終えることが期待できる。
【０１１２】
ステップ１０２の判定で、対応したディレクトリエントリ５５３が有り、そのディレクトリエントリ５５３のセグメント種別がＣＭの場合、ＣＭヒットとなるため、ステップ１０３でＹとなり、ステップ１０８に進む。対応したディレクトリエントリ５５３が有り、そのディレクトリエントリ５５３のセグメント種別が、ＮＭの場合、ＣＭミス且つＮＭヒットとなるため、ステップ１０３でＮ、ステップ１０４でＹとなり、ステップ１０８に進む。対応したディレクトリエントリ５５３が無い場合、ＣＭミス且つＮＭミスのため、ステップ１０３でＮ、ステップ１０４でＮとなり、ステップ１０５にすすむ。
【０１１３】
ステップ１０５では、コマンド処理プログラム４５１によりキャッシュ制御プログラム４５４が呼び出される。そして、キャッシュ制御プログラム４５４により、ＣＭセグメント割り当て処理が実行される。この処理については、後に図９を参照して説明する。
【０１１４】
ステップ１０６では、コマンド処理プログラム４５１によりＲＡＩＤ制御プログラム４５３が呼び出される。そして、ＲＡＩＤ制御プログラム４５３は、ステップ１０１で算出されたＰＧ ＩＤ及びスロット番号から特定される場所（パリティグループにおける場所）から、ステップ１０５で割当てられたＣＭセグメントへの、ステージングを行う。
【０１１５】
ステップ１０７では、ＲＡＩＤ制御プログラム４５３によりキャッシュ制御プログラム４５４が呼びされる。キャッシュ制御プログラム４５４により、クリーン属性設定が行われる。具体的には、例えば、キャッシュ制御プログラム４５４が、ステージング先のＣＭセグメントに対応したディレクトリエントリ５５３に、スロット属性“クリーン”を設定する。
【０１１６】
ステップ１０８では、コマンド処理プログラム４５１が、対応するディレクトリエントリ５５３に記録されているセグメントアドレスから、ＣＭセグメント４６２或いはＮＭセグメント４６３を特定する。そして、コマンド処理プログラム４５１は、特定したＣＭセグメント４６２或いはＮＭセグメント４６３から、リードコマンドの送信元のホスト２００へ、データを転送する。ＮＭセグメント４６３からは、ＣＭ３１１Ａを介すことなく、直接ホスト２００へデータが転送されても良いし、ＣＭ３１１Ａを介して（例えばＣＭセグメントを割り当て一旦そこにＮＭセグメントからデータをコピーした上で）、ホスト２００へデータが転送されても良い。ＣＭ３１１Ａを介するケースとしては、例えば、ＮＭ３１３Ａが、相互結合網３１６Ａに接続されておらず、記憶装置部３５１に備えられているケースが考えられる。
【０１１７】
ステップ１０９では、コマンド処理プログラム４５１が、レスポンス（例えば読出し完了）を送信する。
【０１１８】
ステップ１１０では、コマンド処理プログラム４５１が、シーケンシャル学習を実行する。すなわち、コマンド処理プログラム４５１が、転送したデータが、シーケンシャルアクセスで読み出されたか否かを判別する。
【０１１９】
ステップ１１１では、コマンド処理プログラム４５１によりキャッシュ制御プログラム４５４が呼び出される。キャッシュ制御プログラム４５４が、キュー遷移を実行する。具体的には、例えば、上記対応するディレクトリエントリ５５３のセグメント種別がＣＭであるかＮＭであるかと、ステップ１１０での学習結果がシーケンシャルであるか否かとに応じて、キャッシュ制御プログラム４５４が、上記対応するディレクトリエントリ５５３を、現在のＬＲＵ管理構造から外し、ＣＭランダムクリーンキューＭＲＵポインタ、ＣＭシーケンシャルクリーンキューＭＲＵポインタ、或いはＮＭクリーンキューＭＲＵポインタに繋げる（例えば直接繋げる）。
【０１２０】
以上のように、この処理では、ＣＭミス且つＮＭミスとなった場合、ステージング先として、ＣＭセグメントが割当てられる。このため、ＮＭセグメントの更新回数の増加を防ぐことができ、以って、ＮＭの劣化を抑えることができる。
【０１２１】
図７は、ホストＩ／Ｆでライトコマンドを受信した場合に実行される処理の流れの一例を示す。なお、以下の説明では、図６を参照した説明と重複する部分については、説明を省略或いは簡略する。
【０１２２】
ステップ１２１では、コマンド処理プログラム４５１が、ライトコマンドで指定されているアクセス先情報から、ＰＧ
ＩＤ／スロット番号を算出する。
【０１２３】
ステップ１２２では、ステップ１０２と同様に、コマンド処理プログラム４５１が、キャッシュヒット／ミスの判定を行う。このステップ１２２の判定で、ＣＭヒットの場合、ステップ１２３でＹとなり、ステップ１３１に進む。ＣＭミスの場合、ＣＭ３１１Ａにダーティのデータが過多であること（例えば、スロット属性“ダーティ”のディレクトリエントリの数が所定値に達していること）が、ＣＭランダムに属するキューを構成するディレクトリエントリの数から検出された場合、ステップ１２３でＮ、ステップ１２４でＹのため、ステップ１２５にすすみ、一定時間待つ。ＣＭミスで、ＣＭ３１１Ａにダーティのデータが過多ではなく、ＮＭヒットの場合、ステップ１２３でＮ、ステップ１２４でＮ、ステップ１２６でＹのため、ステップ１２８にすすむ。ＣＭミスで、ＣＭ３１１Ａにダーティのデータが過多ではなく、ＮＭミスの場合、ステップ１２３でＮ、ステップ１２４でＮ、ステップ１２６でＮのため、ステップ１２７にすすむ。
【０１２４】
ステップ１２７、ステップ１２８では、ステップ１０５と同様に、ＣＭセグメント割り当て処理が実行される。この際、単一故障によるダーティデータ喪失を防ぐため、両方のＣＭにおいてセグメントを割り当てる。
【０１２５】
ステップ１２９では、コマンド処理プログラム４５１によりキャッシュ制御プログラム４５４が呼び出される。キャッシュ制御プログラム４５４が、ＮＭヒットしたＮＭセグメントから、ステップ１２８で割当てられたＣＭセグメントに、データをコピーする。
【０１２６】
ステップ１３０では、キャッシュ制御プログラム４５４により、コピー元のＮＭセグメントを“フリー”とするために、ＮＭセグメントフリー化処理が行われる。この処理については、後に、図２２を参照して説明する。
【０１２７】
ステップ１３１では、コマンド処理プログラム４５１が、ステップ１２７で割当てられたＣＭセグメント、或いは、ステップ１２９のコピー先のＣＭセグメントに、ホスト２００からのライトコマンドに従うデータを転送する。つまり、ＣＭセグメントにデータが書込まれる。
【０１２８】
ステップ１３２では、コマンド処理プログラム４５１によりキャッシュ制御プログラム４５４が呼びされる。キャッシュ制御プログラム４５４により、ダーティ属性設定及びダーティビット設定が行われる。具体的には、例えば、キャッシュ制御プログラム４５４が、データ転送先のＣＭセグメントに対応したディレクトリエントリ５５３に、スロット属性“ダーティ”を設定し、且つ、そのディレクトリエントリ５５３におけるダーティビットマップにおいて、そのＣＭセグメントに対応するビットを有効にする。なお、この段階で、ダーティとするのは、ＣＭセグメントに書かれたデータが、未だ記憶装置３５３にデステージされていないためである。
【０１２９】
ステップ１３３では、コマンド処理プログラム４５１が、レスポンス（例えば書込み完了）を送信する。
【０１３０】
ステップ１３４では、コマンド処理プログラム４５１が、シーケンシャル学習を実行する。
【０１３１】
ステップ１３５では、コマンド処理プログラム４５１によりキャッシュ制御プログラム４５４が呼び出される。キャッシュ制御プログラム４５４が、キュー遷移を実行する。具体的には、例えば、ステップ１３４での学習結果がシーケンシャルであるか否かに応じて、キャッシュ制御プログラム４５４が、上記対応するディレクトリエントリ５５３を、現在のＬＲＵ管理構造から外し、ＣＭランダムダーティキューＭＲＵポインタ、或いはＣＭシーケンシャルダーティキューＭＲＵポインタに繋げる（例えば直接繋げる）。
【０１３２】
以上のように、この処理では、ＣＭミス且つＮＭミスとなった場合、データ転送先として、ＣＭセグメントが割当てられる。このため、ＮＭセグメントの更新回数の増加を防ぐことができ、以って、ＮＭの劣化を抑えることができる。
【０１３３】
また、以上の処理では、ＮＭヒットとなった場合に、ＮＭヒットしたＮＭセグメント上にデータを更新（上書き）するのではなく、そのＮＭセグメントからＣＭセグメントにデータをコピーし、コピー先のＣＭセグメント上で、データを更新する。これにより、ＮＭセグメントの更新回数が増えることを抑えることができる。また、ＮＭ３１３Ａの種類が、読出し速度に比して書込み速度が遅い場合（例えばＮＭ３１３Ａがフラッシュメモリの場合）、ライトコマンドの処理に要する時間が長くなってしまうことを抑えることができる。また、ＮＭ３１３Ａの空き容量の消費を抑えることができる。
【０１３４】
なお、ＣＭ３１１Ａ上のダーティのデータは、定期的に或いは不定期的に、ＲＡＩＤ制御プログラム４５３により、デステージされる。その場合、ＲＡＩＤ制御プログラム４５３は、ＬＲＵのダーティデータから優先的にデステージすることができる。
【０１３５】
また、上記の図７の処理において、例えば、図２４に例示するように、ステップ１２４でＹの場合、キャッシュ制御プログラム４５４は、性能優先かＮＭ保護優先かを判断しても良い（ステップ１４１）。性能優先とは、ライトコマンドの処理速度を速めることをＮＭ保護に比して優先であることを意味する。一方、ＮＭ保護優先とは、ライトコマンドの処理速度を速めることに比してＮＭ保護を優先とすることを意味する。性能優先であるかＮＭ保護優先であるかは、ライトコマンドを送信するホスト２００から指定しても良いし、ＳＶＰ３６３から予め各ＭＰ３０３Ａ、３０３Ｂに対して設定されても良い。キャッシュ制御プログラム４５４は、ＮＭ保護優先であれば、図７のステップ１２５にすすむことができる。一方、性能優先であれば、はじめにＮＭダーティ量がＣＭからＮＭへダーティ退避不可能となるほど多くないかどうかチェックする（ステップ３５０）。ＮＭダーティ量が過多で無いならばＮＭセグメント確保処理を実行し、ＮＭセグメントを割当てる。そして、キャッシュ制御プログラム４５４は、ＣＭ３１１Ａ上のダーティのデータをＮＭ３１３Ａにコピーする（ステップ１４２）。その際、ＬＲＵのダーティのデータから優先的にコピーすることができる。そして、キャッシュ制御プログラム４５４は、コピー元のＣＭセグメントを“フリー”とするためのＣＭセグメントフリー化処理を行い（ステップ１４３）、図７のステップ１２７にすすむことができる。以上のように、ＣＭ３１１Ａにダーティのデータが過多の場合には、例外的な処理として、ダーティのデータをＣＭ３１１ＡからＮＭ３１３Ａにコピーすることで、ＣＭに空きを作り、その作られた空きに、新たにデータを格納することができる。また、そのような処理を行うか、或いは、一定時間待つかを、性能優先かＮＭ保護優先かに応じて選択して行うことができる。なお、ＣＭ３１１ＡからＮＭ３１３Ａにダーティのデータをコピーした場合には、キャッシュ制御情報４６１中に、キャッシュ制御プログラム４５４により、ＮＭダーティのＬＲＵ管理のためのキューが作成される。
【０１３６】
また、図６において、ステップ１０３と１０４との間に、図７でのステップ１２４と同様のダーティ過多判断が行われても良い。ＣＭ３１１Ａに、クリーンやフリーのＣＭセグメントが無くダーティのＣＭセグメントが満杯の場合もあり得るためである。この場合にも、図７と同様に、単に一定時間待っても良いし、或いは、図２４を参照して説明した処理が適用されても良い。
【０１３７】
図８は、ＮＭリプレース処理の流れの一例を示す。
【０１３８】
この図８に示すＮＭリプレース処理は、例えば、ＮＭリプレースプログラム４５９によって定期的に開始される。このＮＭリプレース処理は、例えば、ＮＭクリーンＭＲＵ時刻（ＮＭクリーンでＭＲＵのディレクトリエントリ５５３に記録されている時刻）とＣＭクリーンＬＲＵ時刻（ＣＭクリーンでＬＲＵのディレクトリエントリ５５３に記録されている時刻）との差をなるべく無くすことと、ＮＭクリーンＬＲＵ時刻（ＮＭクリーンでＬＲＵのディレクトリエントリ５５３に記録されている時刻）とＣＭクリーンＬＲＵ時刻との差が大きすぎないようにすることとを目的として実行される処理である。なお、ＣＭについてもＮＭについてもクリーンとしているのは、原則として、ＣＭからＮＭにコピーされるのはクリーンのデータのためである。
【０１３９】
ステップ１５１では、ＮＭリプレースプログラム４５９は、ＮＭクリーンＭＲＵ時刻と、ＣＭクリーンＬＲＵ時刻とを比較し、それらの時刻の差の有無（乖離有りか無しか）を判断する。乖離有りの場合（すなわち、NMクリーンMRUがCMクリーンLRUより古い場合）、ステップ１５２でＹとなり、ステップ１５５に進む。一方、乖離無しの場合、ステップ１５２でＮとなり、ステップ１５３に進む。
【０１４０】
ステップ１５３では、ＮＭリプレースプログラム４５９は、ＮＭクリーンＬＲＵ時刻と、ＣＭクリーンＬＲＵ時刻とを比較し、それらの時刻の差が大（乖離大）か否かを判断する。乖離大としては、例えば、その差が所定の値を越えた場合、或いは、予め設定されている容量比（例えば、ＣＭクリーンセグメント群の容量を１とした場合のＮＭクリーンセグメント群の容量）を基にした所定の条件に合致する場合がある。その条件としては、例えば、“NMクリーンLRU時刻が、CMクリーンLRU時刻×（容量比＋１）より古い”という条件とすることができる。乖離大の場合、ステップ１５４でＹなので、ステップ１５５に進み、乖離大ではない場合、ステップ１５４でＮなので、今回のＮＭリプレース処理が終了となる。なお、前述した容量比は、例えば２である。すなわち、例えば、ＣＭクリーンセグメント群の容量を１とした場合、ＮＭクリーンセグメント群の容量は２である。
【０１４１】
ステップ１５５では、ＮＭリプレースプログラム４５９は、ＣＭランダムクリーンＬＲＵセグメント（ランダム且つクリーンのデータを格納しＬＲＵであるＣＭセグメント）を選択する。これは、ＣＭランダムクリーンキューＬＲＵポインタ５５７に繋がっているディレクトリエントリ５５３を参照することにより、実行することができる。
【０１４２】
ステップ１５６では、ＮＭリプレースプログラム４５９は、ＮＭ３１３Ａについて、キャッシュヒット／ミス判定を行う。具体的には、選択されたＣＭランダムクリーンＬＲＵセグメント内のデータを有するＮＭセグメントがあるか否かの判定が行われる。より具体的には、例えば、ＣＭランダムクリーンＬＲＵセグメントに対応したディレクトリエントリ５５３中のＰＧ
ＩＤ／スロット番号と同じＰＧ ＩＤ／スロット番号を有する、ＮＭクリーンのディレクトリエントリ５５３があるか否かが判定される。そのようなディレクトリエントリ５５３がある場合（ステップ１５７でＹ）、ステップ１５８に進み、そのようなディレクトリエントリ５５３が無い場合（ステップ１５７でＮ）、ステップ１５９に進む。
【０１４３】
ステップ１５８では、ＮＭリプレースプログラム４５９がキャッシュ制御プログラム４５４を呼び出す。キャッシュ制御プログラム４５４は、ステップ１５５で選択されたＣＭランダムクリーンＬＲＵセグメントを“フリー”にするためのＣＭセグメントフリー化処理を実行する。
【０１４４】
ステップ１５９では、ＮＭリプレースプログラム４５９がキャッシュ制御プログラム４５４を呼び出す。キャッシュ制御プログラム４５４は、ステップ１５５で選択されたＣＭランダムクリーンＬＲＵセグメント上のデータのコピー先とするＮＭセグメントを確保するためのＮＭセグメント確保処理を実行する。
【０１４５】
ステップ１６０では、ＮＭリプレースプログラム４５９が、例えばＤＭＡコントローラ３０４Ａを操作して、ＤＭＡにより、ＣＭランダムクリーンＬＲＵセグメントから、確保されたＮＭセグメントへのデータコピーを行わせる。
【０１４６】
ステップ１６１では、ＮＭリプレースプログラム４５９によりキャッシュ制御プログラム４５４が呼びされる。キャッシュ制御プログラム４５４により、クリーン属性設定が行われる。具体的には、例えば、キャッシュ制御プログラム４５４が、コピー先のＮＭセグメントに対応したディレクトリエントリ５５３に、スロット属性“クリーン”を設定する。
【０１４７】
ステップ１６２では、キャッシュ制御プログラム４５４が、キュー遷移を実行する。具体的には、例えば、ステップ１６１でスロット属性“クリーン”が設定されたディレクトリエントリ５５３を、現在のＬＲＵ管理構造から外し、ＮＭクリーンキューＭＲＵポインタに繋げる（例えば直接繋げる）。
【０１４８】
ステップ１６３では、キャッシュ制御プログラム４５４が、ＣＭランダムクリーンＬＲＵセグメントを“フリー”にするためのＣＭセグメントフリー化処理を実行する。
【０１４９】
ステップ１６４では、ＮＭリプレースプログラム４５９が、ＮＭ３１３Ａの更新頻度が過剰かを判断する。具体的には、例えば、ＭＰ３０３Ａが所定のコンピュータプログラム（以下、ＮＭ更新カウントプログラム）を実行することにより、ＮＭ３１３Ａにデータを更新する都度に、更新回数をカウントし、単位時間（例えば１分）毎に、カウント値をリセットすることで、単位時間毎の更新回数、つまり更新頻度を算出することができる。カウント値である更新回数は、ＮＭリプレース処理に限らず、他種の処理でＮＭ３１３Ａが更新される場合にも更新される。更新回数は、ＮＭセグメント単位、スロット単位、或いは一ＮＭ単位など、種々の単位で算出することができる。
【０１５０】
ＮＭリプレースプログラム４５９は、ステップ１６０でのデータコピーにより、更新頻度が所定の閾値を超えた場合には（ステップ１６４でＹ）、今回のＮＭリプレース処理を終了し、超えていない場合には（ステップ１６４でＮ）、再度ステップ１５１を実行する。
【０１５１】
以上のＮＭリプレース処理によれば、（１）ＣＭクリーンＬＲＵをＮＭ３１３Ａへ退避する、（２）但しシーケンシャル属性のクリーンは退避しない、及び（３）退避頻度を制御する、ことが実行される。このため、ＮＭ３１３Ａの更新頻度を抑えることができる。
【０１５２】
図９は、セグメント割当て処理の流れの一例を示す。以下、ＣＭセグメントの割り当て処理として、説明をする。
【０１５３】
ステップ１７１では、キャッシュ制御プログラム４５４は、ＣＭフリーキューに、ディレクトリエントリがあるかどうかを判断する。有れば、ステップ１７２に進み、無ければ、ステップ１７３に進む。
【０１５４】
ステップ１７２では、キャッシュ制御プログラム４５４は、ＣＭフリーキューからディレクトリエントリ５５３（例えば、ＣＭフリーキューポインタに繋がっているディレクトリエントリ５５３）をデキューする（つまりフリーキューから外す）。そして、ステップ１７７に進む。
【０１５５】
ステップ１７３では、キャッシュ制御プログラム４５４は、ＣＭシーケンシャルクリーンキューに、ディレクトリエントリがあるかどうかを判断する。有れば、ステップ１７４に進み、無ければ、ステップ１７５に進む。
【０１５６】
ステップ１７４では、キャッシュ制御プログラム４５４は、ＣＭシーケンシャルクリーンキューから、ＬＲＵポインタに繋がっているディレクトリエントリ５５３をデキューする。そして、ステップ１７６に進む。
【０１５７】
ステップ１７５では、キャッシュ制御プログラム４５４は、ＣＭランダムクリーンキューから、ＬＲＵポインタに繋がっているディレクトリエントリ５５３をデキューする。そして、ステップ１７６に進む。
【０１５８】
ステップ１７６では、キャッシュ制御プログラム４５４は、ディレクトリ接続解除を行う。具体的には、キャッシュ制御プログラム４５４は、ハッシュテーブル５５１と、デキューされたディレクトリエントリ５５３との関連付けを解除する。
【０１５９】
ステップ１７７では、キャッシュ制御プログラム４５４は、ディレクトリ接続を行う。具体的には、キャッシュ制御プログラム４５４は、今回の格納先となるＰＧ
ＩＤ及びスロット番号をディレクトリエントリ５５３に記録し、ＰＧ ＩＤ及びスロット番号のハッシュ値に対応したハッシュテーブル５５１のディレクトリエントリポインタへディレクトリエントリ５５３を接続することで、ハッシュテーブル５５１と、そのディレクトリエントリ５５３とを関連付ける。
【０１６０】
以上のセグメント割り当て処理は、ＮＭセグメントについても実質的に同様である。相違点としては、ＮＭセグメントについては、シーケンシャルかランダムかで区別されていないため、ステップ１７１でＮの場合、ＮＭクリーンキューからディレクトリエントリをデキューして、ステップ１７６に進むことになる。
【０１６１】
図２２は、セグメントフリー化処理の流れの一例を示す。
【０１６２】
このセグメントフリー化処理は、ＣＭセグメント及びＮＭセグメントのいずれのフリー化処理でも実行される。
【０１６３】
ステップ１８１では、キャッシュ制御プログラム４５４は、フリー化対象のセグメントに対応したディレクトリエントリ５５３を、接続中キュー（そのディレクトリエントリ５５３が構成要素となっているキュー）からデキューする。
【０１６４】
ステップ１８２では、キャッシュ制御プログラム４５４は、デキューしたディレクトリエントリ５５３についてディレクトリ接続解除を行う。
【０１６５】
ステップ１８３では、キャッシュ制御プログラム４５４は、デキューしたディレクトリエントリ５５３を、フリーキューへエンキューする（例えば、フリーキューのキューポインタに、そのディレクトリエントリ５５３を繋げる（例えば直接繋げる）。
【０１６６】
図１０は、障害が発生した場合に実行される処理の流れの一例を示す。
【０１６７】
この処理は、例えば、定期的に実行される。
【０１６８】
ステップ１９１では、障害処理プログラム４５７が、各部位をチェックすることで、障害状況をチェックする。そのチェックの結果、片側障害と判断された場合、具体的には、例えば、いずれかのクラスタのＣＭ３１１が壊れたと判断された場合、或いは、いずれかのクラスタにおいて電源部３１４の電源回路からのＣＭ３１１への給電が無くなったと判断された場合（図１２参照）、ステップ１９２でＹとなり、ステップ１９３に進む。また、そのチェックの結果、両電源障害発生と判断された場合、具体的には、例えば、天災などで２系統とも給電が電源部３１４Ａ、３１４Ｂのバッテリーからの給電になったと判断された場合、ステップ１９２でＮ、及びステップ１９４でＹとなり、ステップ１９６に進む。片側障害及び両電源障害発生のいずれでも無い場合、ＣＭ３１１Ａ、３１１Ｂ上のデータ退避は不要のため、障害無しと判断される（ステップ１９５）。
【０１６９】
ステップ１９３では、障害処理プログラム４５７が、Ｉ／Ｏ処理モードをライトスルーモードに変更する。具体的には、例えば、コマンド処理プログラム４５１が、そのプログラム４５１にＩ／Ｏ処理モードとしてライトスルーモードと通常モードとのいずれかを選択的に設定することができるように構成されている。ライトスルーモードとは、ＣＭ３１１にダーティのデータを一時格納することなく記憶装置３５３にデータを転送するモードであり、通常モードとは、ＣＭ３１１に該ダーティのデータを一時格納し該一時格納したデータをＣＭ３１１から記憶装置３５３に転送するモードである。受信したアクセスコマンドがライトコマンドの場合、通常モードであれば、ＣＭ３１１にデータを一時格納した場合に、ホスト２００に対してレスポンス（例えば書込み完了）を送信することができ、一方、ライトスルーモードでは、記憶装置３５３に書込んだ場合にレスポンスを送信することができる。そのため、ライトスルーモードに比して通常モードの方が、ホスト２００に対してはライトコマンドを高速に処理することができるため、本実施形態では、原則として、通常モードになっている。しかし、上記のように、片側障害の場合には、例外的に、通常モードからライトスルーモードに変更される。ライトスルーモードへ変更後はＣＭ３１１にダーティセグメントは生成されなくなるため、ＣＭ３１１中のダーティデータは一定時間経過すると全てデステージされる。なお、例えば、バッテリーからの給電でライトスルーモードが実行される場合、全ダーティデータをデステージ後であればＣＭ３１１への給電は不要のため、ＣＭ３１１への給電のためのスイッチを切っておくことで、バッテリーからの給電による動作をより長時間行えることが期待できる。
【０１７０】
ステップ１９６からステップ２０１の動作は、両電源障害発生の場合に各クラスタで行われるが、その動作、例えば、ＣＭ３１１からＮＭ３１３へのダーティデータ退避並びにキャッシュ制御情報４６１の退避は（図１３参照）、各電源部３１４Ａ、３１４Ｂのバッテリーからの給電により行われる。以下、一方のクラスタでの動作を例に採り説明する。
【０１７１】
ステップ１９６では、コマンド処理プログラム４５１が、Ｉ／Ｏ処理停止を実行する。具体的には、例えば、コマンド処理プログラム４５１が、アクセスコマンドの受け付けをホスト２００に対して不可（例えばアクセスコマンドを受けたらエラーを返す）にする。
【０１７２】
ステップ１９７では、コマンド処理プログラム４５１がキャッシュ制御プログラム４５４を呼び出す。キャッシュ制御プログラム４５４が、キャッシュ制御退避領域３９３以外の領域に属する全てのダーティでないＮＭセグメントを“フリー”にする。
【０１７３】
ステップ１９８では、キャッシュ制御プログラム４５４が、ＣＭランダムダーティキュー及びＣＭシーケンシャルダーティキューに属するＣＭセグメント内のダーティのデータを、ステップ１９７でフリー化されたＮＭセグメントに退避（コピー）する。
【０１７４】
ステップ１９９では、キャッシュ制御プログラム４５４が、ＣＭ３１１上のキャッシュ制御情報４６１を、キャッシュ制御退避領域３９３に退避（コピー）する。その際、キャッシュ制御情報４６１のうち、ディレクトリエントリ５５３は退避するが、ハッシュテーブル５５１は退避しない。復旧の際には、各ディレクトリエントリ５５３からディレクトリエントリポインタを取得してハッシュテーブル５５１を構築することができるからである。また、退避するディレクトリエントリ５５３であるが、スロット属性が“ダーティ”のディレクトリエントリ５５３のみを選択して退避することもできる。それ以外のディレクトリエントリ５５３は無くても良いためである。
【０１７５】
ステップ２００では、キャッシュ制御プログラム４５４が、キャッシュ制御退避領域３９３に、退避完了（確実に退避ができたことを意味する情報）を記録する。
【０１７６】
ステップ２０１では、ＭＰ３０３により、バッテリーからの給電がオフにされる（例えばバッテリーからの給電をオン／オフするためのスイッチがターンオフされる）。
【０１７７】
以上が、障害が発生した場合に実行される処理の流れの一例を示す。なお、図１２及び図１３には、記憶装置部３５１に、記憶装置３５３の一種として、フラッシュメモリ３５４が搭載されている例を示している。この場合には、データ及び／又はディレクトリエントリの退避先として、ＮＭ３１３に加えて又は代えて、記憶装置部３５１内のフラッシュメモリ３５４が採用されても良い。フラッシュメモリ３５４に代えて又は加えて、他種のＮＭが搭載されても良い。
【０１７８】
図１１は、障害復旧時に行われる処理の流れの一例を示す。
【０１７９】
片側障害からの復旧は、例えば、故障部位（例えば、電源部３１４の電源回路）の交換により行うことができる。この場合、片方のクラスタで故障部位の交換が済んだことを、ＳＶＰ３６３からＭＰ３０３への入力により、或いは、交換が済んだ場合のＭＰ３０３に対する電気的な信号入力により、障害処理プログラム４５７で検出することができる。片側障害からの復旧が検出された場合（ステップ２５１でＮ）、障害処理プログラム４５７により、Ｉ／Ｏ処理モードがライトスルーモードから通常モードに戻される（ステップ２５６）。
【０１８０】
一方、両電源障害からの復旧は、例えば、停電から復旧する、或いは、両方のクラスタの故障部位の交換により行うことができる。この場合にも、片方のクラスタと同様に、障害処理プログラム４５７が、両電源障害からの復旧を検出することができる。両電源障害からの復旧が検出された場合（ステップ２５１でＹ）、各クラスタにおいて、障害処理プログラム４５７からキャッシュ制御プログラム４５４が呼び出される。キャッシュ制御プログラム４５４により、ＮＭ３１３のキャッシュ制御退避領域３９３に、退避完了が記録されているかどうかがチェックされる（ステップ２５２）。その結果、両方のクラスタで、退避完了がある場合には（ステップ２５２でＹ）、ステップ２５３に進み、片方のクラスタで退避完了が無い場合には（ステップ２５２でＮ）、ステップ２５４に進む。なお、片方のクラスタで退避完了が無い場合としては、例えば、退避中に片方のクラスタでＮＭ３１３に障害が発生した場合が考えられる。
【０１８１】
ステップ２５３では、例えば図１４に例示するように、両方のクラスタにおいて、復元処理が行われる。具体的には、キャッシュ制御プログラム４５４が、ＮＭ３１３のキャッシュ制御退避領域３９３からＣＭ３１１のキャッシュ制御領域３７７に、ディレクトリエントリ５５３を復元（コピー）する。また、キャッシュ制御プログラム４５４が、ＮＭセグメントからＣＭキャッシュにダーティのデータを復元（コピー）する。ダーティのデータの復元では、例えば、復元された複数のディレクトリエントリ５５３のうちの、ＮＭダーティのディレクトリエントリ５５３から、ＮＭセグメントが特定され、特定されたＮＭセグメントがコピー元とされてよい。同様に、例えば、復元された複数のディレクトリエントリ５５３のうちの、ＣＭダーティのディレクトリエントリ５５３から、ＣＭセグメントが特定され、特定されたＣＭセグメントがコピー先とされてよい。ステップ２５３が行われた後、前述したステップ２５６が行われる。
【０１８２】
ステップ２５４では、ステップ２５３で説明した、ディレクトリエントリの復元及びダーティデータの復元が、片方のクラスタでのみ行われる。そして、ステップ２５５に進む。
【０１８３】
ステップ２５５では、キャッシュ制御プログラム４５４が、ダーティデータの二重化処理を行う。具体的には、キャッシュ制御プログラム４５４が、ＣＭ３１１に復元されたダーティデータを、もう片方のクラスタのＣＭ３１１にコピーする。この後、前述したステップ２５６が行われる。
【０１８４】
以上が、障害復旧時に行われる処理である。なお、ＮＭからデータ及び／又はディレクトリエントリを復元できない場合には、記憶装置部３５１のフラッシュメモリ３５４から復元されても良い。
【０１８５】
＜実施形態２＞。
【０１８６】
以下、本発明の第二実施形態を説明する。その際、第一実施形態との相違点を主に説明し、第一実施形態との共通点については説明を省略或いは簡略する（これは、後述の第三実施形態についても同様である）。
【０１８７】
図１５Ａは、ＮＭセグメントの構成例を示す。
【０１８８】
ＮＭセグメント４６３´には、ＣＭセグメント内のデータが書かれる領域であるデータ格納部４６３´−１に加えて、制御情報の一種として、通算更新回数が格納される通算更新回数格納部４６３−２がある。ＮＭセグメント４６３´のデータ格納部４６３´−１上のデータを更新することのできるプログラム、或いは別に用意されたコンピュータプログラムが、このＮＭセグメント４６３´のデータが更新される都度に、このＮＭセグメント４６３´に記録されている通算更新回数を１加算する。通算更新回数とは、現在までに更新された回数を意味し、第一実施形態で説明した更新頻度（すなわち、単位時間当たりの更新回数）とは異なる。ＮＭセグメント４６３´には、更新頻度が格納される更新頻度格納部が更に用意されても良い。
【０１８９】
図１５Ｂは、ダーティ退避専用フリーキューを示す。
【０１９０】
第二実施形態では、ダーティ退避専用フリーキューが更に用意される。後述するように、通算更新回数が所定の閾値を超えたＮＭセグメントは、通常時（障害が発生していない時）のように、ＣＭセグメント上のクリーンデータのコピー先されず、障害時にダーティデータの退避先としてのみ使用されるようになるからである。ＮＭダーティ退避専用フリーキューポインタ４９９に直接又は他のディレクトリエントリを介して繋がっているディレクトリエントリ５５３が、ダーティ退避専用のＮＭセグメントに対応したディレクトリエントリである。
【０１９１】
図１５Ｃは、ＮＭセグメント確保処理に関わる処理の流れの一例を示す。
【０１９２】
ＮＭセグメント確保処理（ステップ２１１）では、例えば、図９のステップ１７７で、ハッシュテーブル５１１に新たに接続されたディレクトリエントリ５５３に対応したＮＭセグメントが、確保されたＮＭセグメントということになる。
【０１９３】
キャッシュ制御プログラム４５４が、確保されたＮＭセグメントに記録されている通算更新回数が、所定の閾値をオーバーしているかどうかを判断する（ステップ２１２）。オーバーしていると判断した場合、ステップ２１３に進み、オーバーしていないと判断した場合、終了となる（例えば、ステップ２１１が、図８のステップ１５９である場合、終了となれば、図８のステップ１６０に進む）。
【０１９４】
ステップ２１３では、キャッシュ制御プログラム４５４が、ディレクトリ接続解除を行う。具体的には、キャッシュ制御プログラム４５４は、ハッシュテーブル５１１に新たに接続された上記ディレクトリエントリ５５３と、そのハッシュテーブル５１１との接続を解除する。
【０１９５】
ステップ２１４では、キャッシュ制御プログラム４５４が、接続が解除されたディレクトリエントリ５５３を、ＮＭダーティ退避専用フリーキューポインタ４９９にエンキューする（例えば直接繋げる）。
【０１９６】
ステップ２１５では、キャッシュ制御プログラム４５４がＳＶＰ通信プログラム４５５を呼び出す。ＳＶＰ通信プログラム４５５が、ダーティ退避専用とされたＮＭセグメントに関する情報をＳＶＰ３６３に通知し、ＳＶＰ３６３が、管理サーバ４００にその情報を通知する。つまり、その情報は、ＳＶＰ３６３経由で管理サーバ４００に通知される。ここで通知される情報は、例えば、ダーティ退避専用とされたＮＭセグメントが新たに１つ増えたことを意味する情報であっても良いし、上記エンキューされたディレクトリエントリ５５３に記録されている所定種類の情報（例えばＮＭセグメントアドレス）であっても良いし、ＮＭ３１３に存在するＮＭセグメントの総数（第一の総数）のうちダーティ退避専用とされたＮＭセグメントの総数（第二の総数）であっても良いし、第一の総数に対する第二の総数の比率（すなわち、ダーティ退避専用とされたＮＭセグメントがＮＭ中のどのぐらい占めているか）であっても良い。第一の総数や第二の総数は、コントローラ部３０１で管理されても良いし、ＳＶＰ３６３で管理されても良い。この通知された情報それ自体、或いは、その情報を基にしてＳＶＰ３６３或いは管理サーバ４００で算出される情報（例えば、第二の総数、或いは上記比率）により、管理者は、ＮＭ３１３の劣化の状況を知ることができる。
【０１９７】
この第二の実施形態によれば、各ＮＭセグメント毎に、通算更新回数が管理され、通算更新回数過多のＮＭセグメントが、障害時のダーティ退避専用として確保される。これにより、障害時に確実にダーティのデータをＣＭ３１１から退避することができる。また、通算更新回数過多のＮＭセグメントには、クリーンのデータがコピーされることがないので、通算更新回数過多のＮＭセグメントにクリーンのデータをコピーしてしまうことによりＮＭが使えなくなってしまうことを未然に防ぐことができる。
【０１９８】
＜実施形態３＞。
【０１９９】
本発明の第三の実施形態では、ＮＭ３１３は、ＮＡＮＤ型フラッシュメモリである（以下、フラッシュメモリを「ＦＭ」と略記することがある）。ＮＡＮＤ型フラッシュメモリの記憶領域は、複数のブロックで構成される。ブロックは、図１６Ａに示すように、複数のセグメント（前述したＮＭセグメントに相当、以下、ＦＭのセグメントであるため「ＦＭセグメント」と言う）で構成される。この例では、一ブロックが、８個のＦＭセグメントで構成されるが、ＦＭセグメントの数は、８に限らず、それよりも多くても少なくても良い。
【０２００】
ＮＡＮＤ型フラッシュメモリへの書込みは、セグメント単位に行うことができる。ＮＡＮＤ型メモリは、ＦＭセグメントへの上書きは不可能であり、そのＦＭセグメントにデータを上書きするためには、データを一回消去する必要がある。消去は、ブロック単位で行われる。そのため、或るＦＭセグメントにデータを上書きしたい場合には、該或るＦＭセグメントを構成要素として備えるブロックにおける全ＦＭセグメントのデータを消去する必要がある。そのため、上書きの必要の無いＦＭセグメントに対してまでデータ消去が行われる。故に、ＦＭセグメントの更新回数（消去回数）が、ＦＭセグメント単位で消去することができるタイプのＮＭに比して多くなりやすい。
【０２０１】
そこで、この第三実施形態では、ＬＲＵが、ＦＭセグメント単位ではなくブロック単位で管理される。以下、フラッシュメモリを「ＦＭ」と略記することがある。
【０２０２】
図１６Ｂは、第三実施形態でのディレクトリエントリ５５３Ａの構成例と、ＦＭブロック制御エントリ５５３Ｂの構成例とを示す。
【０２０３】
ディレクトリエントリ５５３Ａには、ＦＭブロック制御エントリ５５３ＢのポインタであるＦＭブロック制御エントリポインタが記録される。また、このエントリ５５３Ａには、ＦＭブロック制御エントリ５５３Ｂがキューに組み込まれるため、双方向キューポインタが無い。
【０２０４】
ＦＭブロック制御エントリ５５３Ｂには、双方向キューポインタ、通算更新回数、有効ビットマップ、ＦＭブロックアドレス及び時刻が記録される。通算更新回数は、このエントリ５５３Ｂに対応するＦＭブロック（以下、当該ＦＭブロック）の通算消去回数を意味する。有効ビットマップは、当該ＦＭブロックを構成する８個のＦＭセグメントにそれぞれ対応した８個のビットで構成されており、各ビットの値が、各ＦＭセグメントが有効（クリーンまたはダーティ）か無効（フリー）かを表す。ＦＭブロックアドレスは、当該ＦＭブロックの場所を示す。時刻は、このエントリ５５３Ｂがキュー遷移した時の時刻を表す。リードコマンド、ライトコマンド処理において、キュー遷移処理（図６のステップ１１１１及び図７のステップ１３５）においてＮＭセグメントに対応するディレクトリエントリ５５３ＡをＭＲＵへキュー遷移させる場合は、対応するＦＭブロック制御エントリ５５３Ｂをキュー遷移させる。
【０２０５】
図１７は、ＦＭリプレース処理の流れの一例を示す。
【０２０６】
ＦＭリプレース処理の流れは、図８を参照して説明したＮＭリプレース処理の流れと似ているが、幾つか相違点がある。
【０２０７】
第一の相違点として、例えば、ステップ１５９、１６２などでは、ディレクトリエントリ５５３Ａではなく、ＦＭブロック制御エントリ５５３Ｂが使用される。ＦＭに関するＬＲＵ管理のためのキューや、フリーキューには、ＦＭブロック制御エントリ５５３Ｂが組み込まれるからである。
【０２０８】
第二の相違点として、例えば、ステップ１５５では、８個のＣＭランダムクリーンＬＲＵセグメントが選択される。具体的には、例えば、ＣＭランダムクリーンＬＲＵキューポインタに直接繋がっているディレクトリエントリを外すと、そのディレクトリエントリのＭＲＵ側に繋がっていたディレクトリエントリセグメントが、そのＬＲＵキューポインタに直接繋がることになる。こういった処理を８回行うことで、８個のＣＭランダムクリーンＬＲＵセグメントを選択することができる。また、ステップ１５９ではＮＭクリーンキューＬＲＵから1つのＦＭブロック制御エントリ５５３Ｂをデキューし、対応する８個のＦＭセグメントフリー化処理を実行する。このような処理を行うのは、ＣＭからＮＭへのコピーの際、ＮＭにおいて一回消去の動作が必要になる場合があり、そうなると、ブロック単位でコピーが行われるのが効率的であると考えられるためである。すなわち、８個のＣＭランダムクリーンＬＲＵセグメントから１個のＦＭブロック（つまり８個のＦＭセグメント）にデータコピーが行うのが効率的であると考えられる。
【０２０９】
第三の相違点として、ステップ１５７でＮと、ステップ１５９との間に、ステップ５０１として、キャッシュ制御プログラム４５４により、ステップ１５５で８個のＣＭセグメントが選出されたかどうかが判断される。選出されなかったと判断された場合、ステップ５０１でＮとなり、選出されたと判断された場合、ステップ５０１でＹとなり、ステップ１５９にすすむ。
【０２１０】
図１８は、ＦＭセグメントフリー化処理の流れの一例を示す。
【０２１１】
この処理は、例えば、ホスト２００からのライトコマンドでＮＭヒットした場合、ＦＭブロック内の特定のＦＭセグメント（例えば、ＣＭへのコピー元のＦＭセグメント）を無効にする場合に開始される。以下、その特定のＦＭセグメントを、「フリー化対象ＦＭセグメント」と呼ぶ。
【０２１２】
ステップ２８１で、キャッシュ制御プログラム４５４が、フリー化対象ＦＭセグメントを含むＦＭブロック（以下、フリー化対象ＦＭブロック）のＦＭブロック制御エントリ５５３Ｂを特定し、そのＦＭブロック制御エントリ５５３における有効ビットマップ中の、フリー化対象ＦＭセグメントに対応したビットを、オフにする。
【０２１３】
ステップ２８１では、キャッシュ制御プログラム４５４が、その有効ビットマップを構成する全ビットがオフを表しているかどうかを判断する。全ビットオフと判断した場合（ステップ２８２でＹ）、ステップ２８３に進み、少なくとも一つのビットがオンと判断した場合（ステップ２８２でＮ）、ステップ２８５に進む。
【０２１４】
ステップ２８３では、キャッシュ制御プログラム４５４が、フリー化対象ＦＭブロックに対して消去を行う。そして、ステップ２８４で、キャッシュ制御プログラム４５４は、フリー化対象ＦＭブロックに対応したＦＭブロック制御エントリを、フリーキューにエンキューする。
【０２１５】
ステップ２８５では、キャッシュ制御プログラム４５４が、フリー化対象ＦＭセグメントのフリー化を行う。具体的には、例えば、キャッシュ制御プログラム４５４が、そのセグメントに対応したディレクトリエントリ５５３とハッシュテーブル５５１との接続を解除する。
【０２１６】
図２３は、ＦＭブロック割り当て処理の流れの一例を示す。
【０２１７】
この割当て処理は、図９に示した割当て処理と似ているが、幾つか相違点がある。
【０２１８】
第一の相違点は、例えば、ステップ１７２、１７４及び１７５では、ＦＭブロック制御エントリ５５３Ｂのデキューが行われる。
【０２１９】
第二の相違点は、ステップ１７６では、デキューされたＦＭブロック制御エントリ５５３Ｂに対応した８つのディレクトリエントリ５５３Ａについて、ハッシュディレクトリとの接続の解除が実行される。ステップ１７７では、それら８つのディレクトリエントリ５５３Ａについて、ハッシュディレクトリとの接続が実行される。
【０２２０】
第三の相違点は、ステップ１７７の後に、ステップ１７８が実行されることである。ステップ１７８では、キャッシュ制御プログラム４５４により、接続された８つのディレクトリエントリ５５３Ａに対応するＦＭブロック制御エントリ５５３Ｂにおいて、有効ビットマップを構成する全ビットがオンにされる。
【０２２１】
この第三実施形態では、ＮＭ３１３として、ＮＡＮＤ型フラッシュメモリが採用され、ＬＲＵ管理がブロック単位でされる。そして、ＦＭブロック内の全ＦＭセグメントがアクセスされなくなりＦＭリプレース処理のステップ１５９で選択されるまで（すなわち、ＦＭブロック確保処理で、ＮＭクリーンＬＲＵからＦＭブロックを１個選択して８セグメントがフリー化されるまで）、或いは、ＦＭブロック内の全ページが無効になるまで、フリー化しない。これにより、ＦＭブロックの消去回数が抑えられ、以って、ＮＡＮＤ型フラッシュメモリの劣化を抑える（言い換えれば、ＮＡＮＤ型フラッシュメモリの寿命を延ばす）ことができる。
【０２２２】
以上、本発明の幾つかの実施形態を説明したが、これらの実施形態は本発明の説明のための例示にすぎず、本発明の範囲をそれらの実施形態にのみ限定する趣旨ではない。本発明は、その要旨を逸脱することなく、その他の様々な態様でも実施することができる。例えば、第三実施形態において、通算更新回数は、ＦＭブロック制御エントリ５５３Ｂで管理することに代えて又は加えて、ＦＭブロックで管理されても良い。また第三実施形態において、書き込み単位と消去単位が異なる性質を有するなら、ＮＡＮＤフラッシュメモリ以外のＮＭを使用してもよい。
【図面の簡単な説明】
【０２２３】
【図１】図１は、本発明の第一実施形態に係る計算機システムの構成例を示す。
【図２】図２は、ストレージシステム１０１の構成例を示す。
【図３】図３は、コントローラ部３０１の論理的な構成例を示す。
【図４】図４Ａは、ＬＵ構成テーブルの構成例を示す。図４Ｂは、ＬＶＯＬ構成テーブルの構成例を示す。
【図５】図５Ａは、キャッシュディレクトリ管理構造の一例を示す。図５Ｂは、ＬＲＵ管理構造の一例を示す。図５Ｃは、フリー管理構造を示す。
【図６】図６は、ホストＩ／Ｆでリードコマンドを受信した場合に実行される処理の流れの一例を示す。
【図７】図７は、ホストＩ／Ｆでライトコマンドを受信した場合に実行される処理の流れの一例を示す。
【図８】図８は、ＮＭリプレース処理の流れの一例を示す。
【図９】図９は、セグメント割当て処理の流れの一例を示す。
【図１０】図１０は、障害が発生した場合に実行される処理の流れの一例を示す。
【図１１】図１１は、障害復旧時に行われる処理の流れの一例を示す。
【図１２】図１２は、片側障害を示す。
【図１３】図１３は、両電源障害の発生とデータ退避を示す。
【図１４】図１４は、障害復旧時のデータ復元を示す。
【図１５】図１５Ａは、本発明の第二実施形態におけるＮＭセグメントの構成例を示す。図１５Ｂは、ダーティ退避専用フリーキューを示す。図１５Ｃは、ＮＭセグメント確保処理に関わる処理の流れの一例を示す。
【図１６】図１６Ａは、ＮＡＮＤ型フラッシュメモリのブロックの構成例を示す。図１６Ｂは、本発明の第三実施形態でのディレクトリエントリ５５３Ａの構成例と、ＦＭブロック制御エントリ５５３Ｂの構成例とを示す。
【図１７】図１８は、ＦＭセグメントフリー化処理の流れの一例を示す。
【図１８】図１８は、初期コピー処理の流れの一例を示す。
【図１９】図１９は、本発明の第一実施形態に係る計算機システムの概要、並びに、ホスト計算機からリードコマンドが発行された場合に実行される処理の流れの概要を示す。
【図２０】図２０は、ホスト計算機からライトコマンドが発行された場合に実行される処理の流れの概要を示す。
【図２１】図２１は、一次電源からキャッシュメモリへの給電が無くなった場合に実行される処理の流れの概要を示す。
【図２２】図２２は、セグメントフリー化処理の流れの一例を示す。
【図２３】図２３は、ＦＭブロック割り当て処理の流れの一例を示す。
【図２４】図２４は、第一の実施形態でダーティ過多の場合に実行される処理の一変形例を示す。
【符号の説明】
【０２２４】
１０１…ストレージシステム、２００…ホスト、３０１…コントローラ部、３１５…バッテリー、３０３…マイクロプロセッサ、３１１…揮発性キャッシュメモリ、３１３…不揮発性メモリ、３５３…記憶装置
【図１】
2008108026.tif 000003
【図２】
2008108026.tif 000004
【図３】
2008108026.tif 000005
【図４】
2008108026.tif 000006
【図５】
2008108026.tif 000007
【図６】
2008108026.tif 000008
【図７】
2008108026.tif 000009
【図８】
2008108026.tif 000010
【図９】
2008108026.tif 000011
【図１０】
2008108026.tif 000012
【図１１】
2008108026.tif 000013
【図１２】
2008108026.tif 000014
【図１３】
2008108026.tif 000015
【図１４】
2008108026.tif 000016
【図１５】
2008108026.tif 000017
【図１６】
2008108026.tif 000018
【図１７】
2008108026.tif 000019
【図１８】
2008108026.tif 000020
【図１９】
2008108026.tif 000021
【図２０】
2008108026.tif 000022
【図２１】
2008108026.tif 000023
【図２２】
2008108026.tif 000024
【図２３】
2008108026.tif 000025
【図２４】
2008108026.tif 000026