(57)【要約】本発明のストレージ装置は、キャッシュメモリを有するコントローラがそれぞれキャッシュデータの二重化について管理する。ストレージ装置ＳＤは、キャッシュメモリを有する複数のコントローラ１と、各コントローラにより使用され、上位装置３へ提供するための論理ボリューム２４が設定される複数の記憶装置２１と、を備える。各コントローラは、二重化ペアを形成するペア先のコントローラが閉塞する場合、論理ボリューム毎に新たなペア先となるコントローラを選択し、自コントローラの有するキャッシュメモリに格納されているキャッシュデータを、新たなペア先のコントローラへ転送して新たなペア先のコントローラが有するキャッシュメモリに格納させ、キャッシュデータを二重化する。
2018011844.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュデータを二重化して管理するストレージ装置であって、
キャッシュメモリを有する複数のコントローラと、
前記各コントローラにより使用され、上位装置へ提供するための論理ボリュームが少なくとも一つ設定される複数の記憶装置と、を備え、
前記各コントローラは、前記論理ボリューム毎に設定される所定の管理情報を保持しており、
前記所定の管理情報は、
キャッシュデータを二重化して格納するための二重化ペアを形成する第１面または第２面のいずれとして前記キャッシュメモリが使用されているかを示す面属性情報と、
前記キャッシュメモリと前記二重化ペアを形成するキャッシュメモリを有するペア先のコントローラを特定するコントローラ番号と、
前記キャッシュメモリの状態遷移の方法を示す遷移方法情報と、
を含んでおり、
前記各コントローラは、前記二重化ペアを形成するペア先のコントローラが閉塞する場合に所定の二重化回復機能を起動し、前記所定の管理情報に基づいて前記論理ボリューム毎に新たなペア先となるコントローラを選択し、自コントローラの有するキャッシュメモリに格納されているキャッシュデータを、前記新たなペア先のコントローラへ転送して前記新たなペア先のコントローラが有するキャッシュメモリに格納させることで、前記キャッシュデータを二重化して管理する、
ストレージ装置。
【請求項２】
前記所定の管理情報は、さらに、前記新たなペア先のコントローラを選択する際の条件を示すコントローラ選択条件情報も含んでおり、
前記各コントローラは、前記面属性情報と、前記遷移方法情報と、前記コントローラ選択条件情報とに基づいて、前記新たなペア先となるコントローラと、前記新たなペア先となるコントローラが持つキャッシュメモリの面属性と、自コントローラが持つキャッシュメモリの面属性とを決定する、
請求項１に記載のストレージ装置。
【請求項３】
前記各コントローラは、自コントローラの持つキャッシュメモリの面属性を現在の面属性から変更して、前記新たなペア先となるコントローラの持つキャッシュメモリの面属性を決定することができる、
請求項３に記載のストレージ装置。
【請求項４】
前記コントローラ選択条件情報は、前記各コントローラのうちキャッシュメモリの負荷が所定の閾値以下であって、かつ前記論理ボリュームへ記憶領域を提供する記憶装置へのアクセスパスが最も多いコントローラを選択する、という条件を含む、
請求項３に記載のストレージ装置。
【請求項５】
前記上位装置との間のデータ授受には前記第１面を用い、前記記憶装置との間のデータ授受には前記第２面を用いる場合において、
前記コントローラ選択条件情報は、
前記各コントローラのうち前記第１面として使用する前記新たなペア先となるコントローラを選択する場合、キャッシュメモリの負荷が所定の閾値以下であって、かつ前記論理ボリュームへの論理パスが最も多いコントローラを選択し、
前記各コントローラのうち前記第２面として使用する前記新たなペア先となるコントローラを選択する場合、キャッシュメモリの負荷が所定の閾値以下であって、かつ前記論理ボリュームへ記憶領域を提供する記憶装置へのアクセスパスが最も多いコントローラを選択する、という条件を含む、
請求項３に記載のストレージ装置。
【請求項６】
前記上位装置との間のデータ授受および前記記憶装置との間のデータ授受には前記第１面を用いる場合において、
前記コントローラ選択条件情報は、
前記各コントローラのうち前記第１面として使用する前記新たなペア先となるコントローラを選択する場合、キャッシュメモリの負荷が所定の閾値以下であり、かつ、前記論理ボリュームへの論理パスの数と前記論理ボリュームへ記憶領域を提供する記憶装置へのアクセスパスの数との合計が最も多いコントローラを選択する、という条件を含む、
請求項３に記載のストレージ装置。
【請求項７】
前記コントローラ選択条件情報は、
前記各コントローラのうち前記第１面として使用する前記新たなペア先となるコントローラを選択する場合、キャッシュメモリの負荷が所定の閾値以下であって、かつ、そのキャッシュメモリにおいて前記第１面として使用する領域の占める割合が最も少ないコントローラを選択し、
前記各コントローラのうち前記第２面として使用する前記新たなペア先となるコントローラを選択する場合、キャッシュメモリの負荷が所定の閾値以下であって、かつ、そのキャッシュメモリにおいて前記第１面として使用する領域の占める割合が最も少ないコントローラを選択する、という条件を含む、
請求項３に記載のストレージ装置。
【請求項８】
前記キャッシュメモリの負荷が所定の閾値以下であるとは、そのキャッシュメモリに格納されているキャッシュデータのうち前記記憶装置へ書き込まれていないダーティ状態のデータの量が所定の閾値以下であることを意味する、
請求項４に記載のストレージ装置。
【請求項９】
前記各コントローラは、前記二重化ペアを形成するキャッシュメモリを有するコントローラの障害を検知した場合に、前記障害を検知したコントローラ以外の他の全てのコントローラに対して前記二重化回復機能の起動を指示する、
請求項１〜８のいずれか一項に記載のストレージ装置。
【請求項１０】
前記各コントローラは、保守閉塞する場合に、他の全てのコントローラに対して前記二重化回復機能の起動を指示し、自コントローラの持つキャッシュメモリと前記二重化ペアを形成するキャッシュメモリを持つ全てのコントローラにおいて、前記新たなペア先となるコントローラが選択されてキャッシュデータが再び二重化されるのを確認し、確認できた場合に閉塞状態へ移行する、
請求項１〜８のいずれか一項に記載のストレージ装置。
【請求項１１】
キャッシュデータを二重化して管理するストレージ装置の制御方法であって、
前記ストレージ装置は、
キャッシュメモリを有する複数のコントローラと、
前記各コントローラにより使用され、上位装置へ提供するための論理ボリュームが少なくとも一つ設定される複数の記憶装置と、を備え、
前記各コントローラは、前記論理ボリューム毎に設定される所定の管理情報を保持しており、
前記所定の管理情報は、
キャッシュデータを二重化して格納するための二重化ペアを形成する第１面または第２面のいずれとして前記キャッシュメモリが使用されているかを示す面属性情報と、
前記キャッシュメモリと前記二重化ペアを形成するキャッシュメモリを有するコントローラを特定するコントローラ番号と、
前記キャッシュメモリの状態遷移の方法を示す遷移方法情報と、
を含んでおり、
前記二重化ペアを形成するコントローラが閉塞する場合に、閉塞するコントローラ以外の全てのコントローラで所定の二重化回復機能を起動し、
前記所定の二重化回復機能は、
前記所定の管理情報に基づいて前記論理ボリューム毎に新たなペア先となるコントローラを選択し、
キャッシュメモリに格納されたキャッシュデータを、前記新たなペア先のコントローラへ転送して、前記新たなペア先のコントローラが有するキャッシュメモリに格納させることで、前記キャッシュデータを二重化して管理する、
ストレージ装置の制御方法。
【請求項１２】
キャッシュデータを二重化して管理するストレージ装置に使用されるコントローラであって、
上位装置と通信する上位通信部と、
前記上位装置へ提供するための論理ボリュームが少なくとも一つ設定される複数の記憶装置と通信する下位通信部と、
他のコントローラと通信するコントローラ間通信部と、
キャッシュメモリと、
マイクロプロセッサとを有し、
前記マイクロプロセッサは、前記論理ボリューム毎に設定される所定の管理情報を保持しており、
前記所定の管理情報は、
キャッシュデータを二重化して格納するための二重化ペアを形成する第１面または第２面のいずれとして前記キャッシュメモリが使用されているかを示す面属性情報と、
前記キャッシュメモリと前記二重化ペアを形成するキャッシュメモリを有する他のコントローラを特定するコントローラ番号と、
前記キャッシュメモリの状態遷移の方法を示す遷移方法情報と、
を含んでおり、
前記マイクロプロセッサは、
前記二重化ペアを形成する前記他のコントローラが閉塞する場合に、前記所定の管理情報に基づいて前記論理ボリューム毎に新たなペア先となるコントローラを選択し、
前記キャッシュメモリに格納されているキャッシュデータを、前記新たなペア先のコントローラへ転送して前記新たなペア先のコントローラが有するキャッシュメモリに格納させることで、前記キャッシュデータを二重化して管理する、
ストレージ装置用コントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置、ストレージ装置の制御方法およびストレージ装置用コントローラに関する。
【背景技術】
【０００２】
ストレージ装置は、ライトデータをキャッシュメモリへ格納した後、書込み先の論理ボリュームに対応するＲＡＩＤ（Redundant Arrays of Inexpensive Disks）構成の記憶装置に対してライトデータを書き込む。キャッシュメモリのみに格納されており、記憶装置に書き込まれていないデータはダーティデータと呼ばれる。ダーティデータは、キャッシュメモリにのみ格納されているため、万が一キャッシュメモリに障害が発生した場合は失われてしまうことになる。そこで、ストレージ装置では、ダーティデータを複数のキャッシュメモリに保持することで信頼性を高める（特許文献１，２）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００５−４３９３０号公報
【特許文献２】特開２００５−１２２４５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来技術では、それぞれキャッシュメモリを内蔵する複数のディスクコントローラでデータを保持し、一方のディスクコントローラに障害が発生した場合は、他方のディスクコントローラが別のディスクコントローラへデータを転送してデータを二重化する。【０００５】
しかし、従来技術では、ディスクコントローラ群とは別に設けたストレージ装置管理部により、キャッシュデータを二重化して保持するためのディスクコントローラを決定するため、ストレージ装置管理部に障害が発生した場合は、キャッシュデータを二重化して保持するためのディスクコントローラを変更することができない。【０００６】
さらに、従来技術では、キャッシュデータを二重化して保持するためのキャッシュメモリの選択方法に自由度が少なく、この点においても改善の余地がある。【０００７】
本発明は上記課題に鑑みてなされたもので、その目的は、キャッシュメモリを有するコントローラがそれぞれキャッシュデータの二重化について管理することができ、従来よりも柔軟にキャッシュメモリを選択できるようにしたストレージ装置、ストレージ装置の制御方法およびストレージ装置用コントローラを提供することにある。
【課題を解決するための手段】
【０００８】
上記課題を解決すべく、本発明に従うストレージ装置は、キャッシュデータを二重化して管理するストレージ装置であって、キャッシュメモリを有する複数のコントローラと、各コントローラにより使用され、上位装置へ提供するための論理ボリュームが少なくとも一つ設定される複数の記憶装置と、を備え、各コントローラは、論理ボリューム毎に設定される所定の管理情報を保持しており、所定の管理情報は、キャッシュデータを二重化して格納するための二重化ペアを形成する第１面または第２面のいずれとしてキャッシュメモリが使用されているかを示す面属性情報と、キャッシュメモリと二重化ペアを形成するキャッシュメモリを有するペア先のコントローラを特定するコントローラ番号と、キャッシュメモリの状態遷移の方法を示す遷移方法情報と、を含んでおり、各コントローラは、二重化ペアを形成するペア先のコントローラが閉塞する場合に所定の二重化回復機能を起動し、所定の管理情報に基づいて論理ボリューム毎に新たなペア先となるコントローラを選択し、自コントローラの有するキャッシュメモリに格納されているキャッシュデータを、新たなペア先のコントローラへ転送して新たなペア先のコントローラが有するキャッシュメモリに格納させることで、キャッシュデータを二重化して管理する。
【発明の効果】
【０００９】
本発明によれば、各コントローラは、キャッシュデータの二重化ペアを形成するコントローラが閉塞する場合に、所定の二重化回復機能を起動し、他のコントローラの中から新たなペア先となるコントローラを選択してキャッシュデータを転送し、新たなペア先となるコントローラが持つキャッシュメモリへ記憶させることができる。これにより、本発明によれば、障害に対する可用性を高くすることができ、二重化ペアとなるコントローラを柔軟に選択でき、使い勝手が向上する。
【図面の簡単な説明】
【００１０】
【図１】本実施形態の全体概要を示す説明図。
【図２】ストレージ装置のハードウェア構成図。
【図３】メモリの記憶内容を示す説明図。
【図４】キャッシュディレクトリの記憶内容を示す説明図。
【図５】図４に示す記憶内容の一部の詳細を示す説明図。
【図６】ストレージ構成情報の内容を示す説明図。
【図７】図６に含まれるＬＤＥＶ（Logical Device）情報の図。
【図８】図６に含まれるＶＤＥＶ（Virtual Device）情報の図。
【図９】図６に含まれるＨＤＤ（Hard Disk Drive）情報の図。
【図１０】図９に含まれるＨＤＤアクセスパス情報の図。
【図１１】図６に含まれるＬＤＥＶ／ＶＤＥＶ変換表の図。
【図１２】図１１に含まれるＶＤＥＶ毎のＬＤＥＶリストターミナル情報の図。
【図１３】図１１に含まれるＬＤＥＶ毎のリスト本体情報の図。
【図１４】図６に含まれるＶＤＥＶ／ＨＤＤ変換表の図。
【図１５】図１４に含まれるＶＤＥＶ毎のＨＤＤリストターミナル情報の図。
【図１６】図１４に含まれるＨＤＤ毎のリスト本体情報の図。
【図１７】図６に含まれるコントローラ情報の図。
【図１８】図６に含まれるホストパス情報の図。
【図１９】図６に含まれるホストパス本数情報の図。
【図２０】図６に含まれるアクセスパス本数情報の図。
【図２１】図６に含まれるキャッシュスロット遷移方式を指定する情報の図。
【図２２】キャッシュスロットの状態遷移図。
【図２３】或るコントローラが障害で閉塞したことを検出したコントローラでの処理を示すフローチャート。
【図２４】保守作業により閉塞するコントローラでの処理を示すフローチャート。
【図２５】キャッシュデータを二重化して保持する処理のメインフローチャート。
【図２６】図２５中のデータ二重化処理の詳細を示すフローチャート。
【図２７】図２６中のデータ二重化元コントローラでのデータ二重化処理の詳細を示すフローチャート。
【図２８】図２７中に示すデータ二重化先コントローラでのデータ二重化処理の詳細を示すフローチャート。
【図２９】閉塞したキャッシュメモリの属性と同じ用途のコントローラを探す様子を示す説明図。
【図３０】常にＮ面用のコントローラを探す様子を示す説明図。
【図３１】常にＣ面用のコントローラを探す様子を示す説明図。
【図３２】Ｃ面として使用されるべきコントローラを先に決定し、そのコントローラの属性を必要に応じてＮ面からＣ面へ変更する様子を示す説明図。
【図３３】Ｎ面として使用されるべきコントローラを先に決定し、そのコントローラの属性を必要に応じてＣ面からＮ面へ変更する様子を示す説明図。
【図３４】新たなペア先となるコントローラを選択する処理のフローチャート。
【図３５】図３４中のコントローラ選択処理１の詳細を示すフローチャート。
【図３６】図３４中のコントローラ選択処理２の詳細を示すフローチャート。
【図３７】図３４中のコントローラ選択処理３の詳細を示すフローチャート。
【図３８】図３４中のコントローラ選択処理４の詳細を示すフローチャート。
【図３９】キャッシュメモリの属性を決定する処理を示すフローチャート。
【図４０】図３９中の決定方法１の詳細を示すフローチャート。
【図４１】図３９中の決定方法２の詳細を示すフローチャート。
【図４２】図３９中の決定方法３の詳細を示すフローチャート。
【図４３】図３９中の決定方法４の詳細を示すフローチャート。
【図４４】図３９中の決定方法５の詳細を示すフローチャート。
【図４５】図３９中の決定方法６の詳細を示すフローチャート。
【図４６】図３９中の決定方法７の詳細を示すフローチャート。
【発明を実施するための形態】
【００１１】
以下、図面に基づいて、本発明の実施の形態を説明する。図１は、本実施形態の概要を示す説明図である。図１は、本発明の理解および実施に必要な程度で本実施形態の概要を示しており、本発明の範囲は図示の構成に限定されない。以下の説明では、キャッシュデータをデータと略記する場合がある。
【００１２】
本実施形態に係るストレージ装置ＳＤは、例えば複数のコントローラ１と、少なくとも一つの記憶装置２１とを備える。各コントローラ１は、メモリ１４を持つ。コントローラ１の詳細な構成例は、図２で後述する。メモリ１４には、図３で後述するように、キャッシュメモリ領域（以下、キャッシュメモリ）１３０が形成されている。
【００１３】
ドライブボックス２は、複数の記憶装置２１を収容する。複数の記憶装置１の持つ物理的記憶領域は、ＲＡＩＤグループとして仮想化される。ＲＡＩＤグループとしてまとめられた記憶領域のことを、本明細書ではＶＤＥＶ２３と呼ぶ。ＶＤＥＶ２３から任意サイズの記憶領域を切り出すことで、論理的な記憶装置を得ることができる。この論理的な記憶装置のことを、本明細書ではＬＤＥＶ２４または論理ボリューム２４と呼ぶ。
【００１４】
コントローラ１は、上位装置としてのホストコンピュータ３（図２参照）に対して、ＬＤＥＶ２４を提供する。ホストコンピュータ３は、ＬＤＥＶ２４に対してデータを読み書きする。図中、コントローラを「ＣＴＬ」と略記する。
【００１５】
コントローラ１は、ホストコンピュータ３からデータの書込みを要求されると、ホストコンピュータ３から受領したデータ（ライトデータ）を、キャッシュメモリ１３０のキャッシュスロットへ格納する。そして、コントローラ１は、キャッシュメモリ１３０へデータを記憶させた時点で、ホストコンピュータ３に対してライトコマンドの処理完了を通知する。その後、コントローラ１は、所定のタイミングで、キャッシュメモリ１３０に格納されたライトデータを、書込先のＬＤＥＶ２４の記憶領域に対応する記憶装置２１へ書き込む。キャッシュメモリ１３０のデータを記憶装置２１へ書き込む処理をデステージ処理と呼ぶ。
【００１６】
コントローラ１は、ホストコンピュータ３からデータの読出しを要求されると、要求されたデータ（リードデータ）がキャッシュメモリ１３０に記憶されているか確認する。コントローラ１は、キャッシュメモリ１３０上にリードデータが存在する場合、そのリードデータをホストコンピュータ３へ送信して、リードコマンドの処理完了をホストコンピュータ３に通知する。これに対し、コントローラ１は、リードデータがキャッシュメモリ１３０上に存在しない場合、そのリードデータが書き込まれているＬＤＥＶ２４に対応する記憶装置２１からデータを読み出して、ホストコンピュータ３へ送信し、リードコマンドの処理完了を通知する。コントローラ１は、ホストコンピュータ３の使用する論理アドレスと記憶装置２１で使用する物理アドレスとの変換処理、ＲＡＩＤ用のパリティ計算なども実行する。
【００１７】
本実施形態では、ＬＤＥＶ２４ごとに、キャッシュデータを二重化して管理するコントローラ１が決定されている。図１の例では、コントローラ１（ＣＴＬ＃１）のキャッシュスロットＳＴ１１（Ｃ）に格納されるデータは、コントローラ１（ＣＴＬ＃２）のキャッシュスロットＳＴ２１（Ｎ）に格納されるデータとペアを形成する。キャッシュスロットＳＴ１１（Ｃ）とキャッシュスロットＳＴ２１（Ｎ）とは、いずれもＬＤＥＶ２４（＃１）に対応する。
【００１８】
同様に、コントローラ１（ＣＴＬ＃１）のキャッシュスロットＳＴ１２（Ｎ）に格納されるデータは、コントローラ１（ＣＴＬ＃２）のキャッシュスロットＳＴ２２（Ｃ）に格納されるデータとペアを形成する。キャッシュスロットＳＴ１２（Ｎ）とキャッシュスロットＳＴ２２（Ｃ）とは、いずれもＬＤＥＶ２４（＃２）に対応する。
【００１９】
同様に、コントローラ１（ＣＴＬ＃２）のキャッシュスロットＳＴ２３（Ｃ）に格納されるデータとコントローラ１（ＣＴＬ＃３）のキャッシュスロットＳＴ３３（Ｎ）に格納されるデータもペアを形成する。キャッシュスロットＳＴ２３（Ｃ）とキャッシュスロットＳＴ３３（Ｎ）とは、いずれも図示せぬ他のＬＤＥＶ２４に対応する。以上の各ペアは、「キャッシュデータを二重化して格納するための二重化ペア」に該当する。
【００２０】
キャッシュメモリ１３０は、キャッシュ面（Ｃ）として使用する領域（キャッシュスロット）と、記憶保持面（Ｎ）として使用する領域（キャッシュスロット）とを混在して備えることができる。符号（Ｎ）は、ＮＶＳ（Non-Volatile Storage）の頭文字である。以下、Ｃ面、Ｎ面と呼ぶ。Ｃ面は「第１面」に該当し、Ｎ面は「第２面」に該当する。Ｃ面とＮ面とをどのように使い分けるかは、仕様やユーザの設定に依る。例えば、ホストコンピュータ３との間のデータ授受にはＣ面を使用し、記憶装置２１との間のデータ授受にはＮ面を使用してもよい。ホストコンピュータ３とのデータ授受および記憶装置２１とのデータ授受の両方にＣ面を使用し、Ｎ面はキャッシュデータのバックアップ用として使用してもよい。
【００２１】
キャッシュメモリ１３０のみに記憶されており、記憶装置２１には記憶されていない状態のデータはダーティデータと呼ばれる。ストレージ装置１は、ダーティデータの消失を防止するために、異なる複数のコントローラ１でペアを形成し、ペアを形成する各コントローラ１のキャッシュメモリ１３０にダーティデータをそれぞれ保持させる。デステージ処理が実行され、書込先のＬＤＥＶ２４に対応する記憶装置２１にデータが書き込まれると、ダーティデータはクリーンデータとなる。クリーンデータの格納されたキャッシュスロットは、上書き使用することができる。
【００２２】
ところで、コントローラ１が故障や保守作業のために閉塞する場合がある。図１の例では、コントローラ１（ＣＴＬ＃１）に異常が発生して閉塞する。各コントローラ１は、他の各コントローラ１と装置間通信ネットワークＣＮ２を介して、定期的に通信することで死活を監視している。閉塞とは、コントローラ１の機能が停止することである。
【００２３】
コントローラ１の閉塞時においてもキャッシュデータを二重化して管理し続け、キャッシュメモリの可用性を維持するために、本実施形態の各コントローラ１は、縮退復旧処理部１０１１（図３参照）を備える。縮退復旧処理部１０１１は、例えば、起動指示部Ｆ１１、コントローラ選択部Ｆ１２、データ二重化部Ｆ１３を備える。縮退復旧処理部１０１１は、障害の発生や保守作業のためにコントローラ１が閉塞されてストレージ装置ＳＤから切り離される場合（縮退時）に、キャッシュデータの二重化ペアを再形成（復旧）させる機能である。
【００２４】
起動指示部Ｆ１１は、キャッシュデータを二重化して記憶する構造の作り直しを、他の各コントローラ１へ指示する機能である。コントローラ選択部Ｆ１２は、閉塞したコントローラ１の代わりとなる新たなペア先のコントローラ１を選択する機能である。コントローラ選択部Ｆ１２は、予め設定されているコントローラ選択条件Ｆ１２１に従って、適切なコントローラ１を選択する。データ二重化部Ｆ１３は、新たなペア先として選択されたコントローラ１に対して、二重化して記憶させるべきキャッシュデータを装置間通信ネットワークＣＮ２を介して送信し、新たなペア先となるコントローラ１のキャッシュメモリ１３０に格納させる機能である。
【００２５】
図１の例で説明する。コントローラ１（ＣＴＬ＃２）は、コントローラ１（ＣＴＬ＃１）が閉塞したことを検出すると、起動指示部Ｆ１１により、自コントローラ１（ＣＴＬ＃２）および他のコントローラ１（ＣＴＬ＃３）に対して、縮退復旧処理部１０１１の起動を指示する。
【００２６】
各コントローラ１（ＣＴＬ＃２，ＣＴＬ＃３）のコントローラ選択部Ｆ１２は、閉塞したコントローラ１（ＣＴＬ＃１）に保持されていたデータとペアを形成するデータ、つまり二重化して記憶すべきデータが自コントローラ内に記憶されているかを確認する。コントローラ選択部Ｆ１２は、二重化して記憶すべきデータが記憶されている場合、コントローラ選択条件Ｆ１２１に基づいて、新たなペア先となるコントローラ１を選択する。
【００２７】
コントローラ選択条件Ｆ１２１は、例えば、キャッシュメモリ１３０の面属性（Ｃ面かＮ面か）、キャッシュメモリの状態遷移方式、ホストコンピュータ３と通信するためのホストパスの数、記憶装置２１と通信するためのＨＤＤパスの数、などに基づく条件を少なくとも一つ備えている。
【００２８】
各コントローラ１（ＣＴＬ＃２，ＣＴＬ＃３）のデータ二重化部Ｆ１３は、新たなペア先として選択されたコントローラ１に対して、二重化の対象であるキャッシュデータを転送し、新たなペア先となるコントローラ１のキャッシュメモリ１３０に記憶させる。
【００２９】
この結果、コントローラ１（ＣＴＬ＃２）のキャッシュスロットＳＴ２１（Ｎ）に格納されたデータは、コントローラ１（ＣＴＬ＃３）のキャッシュスロットＳＴ３１（Ｃ）にも格納され、ペアを再形成する。同様に、コントローラ１（ＣＴＬ＃２）のキャッシュスロットＳＴ２２に格納されたデータは、コントローラ１（ＣＴＬ＃３）のキャッシュスロットＳＴ３２にも格納され、ペアを再形成する。
【００３０】
コントローラ１（ＣＴＬ＃２）のキャッシュスロットＳＴ２３（Ｃ）に格納されたデータとコントローラ１（ＣＴＬ＃３）のキャッシュスロットＳＴ３３（Ｎ）に格納されたデータとは、コントローラ１（ＣＴＬ＃１）の閉塞とは無関係であるため、ペア構成はそのままである。
【００３１】
各コントローラ１は、ＬＤＥＶ単位でペア元となったり、ペア先となったりする。例えば、或るコントローラ１は、或るＬＤＥＶ２４に格納されるデータについてペア元（例えばＣ面）として使用されると共に、他のＬＤＥＶ２４に格納される他のデータについてペア先（例えばＮ面）として使用される。
【００３２】
なお、コントローラ１は障害発生以外に保守作業により閉塞する場合もある。保守作業のためにコントローラ１が閉塞される場合、その保守作業対象のコントローラ１は、他の各コントローラ１に対して閉塞状態へ移行する旨を通知する。
【００３３】
この通知を受けた各コントローラ１は、保守作業対象のコントローラ１とペアを形成するデータ、つまり、既存のペアが消滅するキャッシュデータを保持しているか確認し、保持している場合は新たなペア先となるコントローラ１をそれぞれ選択する。
【００３４】
保守作業対象のコントローラ１以外の各コントローラ１は、ペアを再形成すべきキャッシュデータを、新たなペア先として選択したコントローラ１へ送信して記憶させ、ペアを再形成する。ペアの再形成を完了したコントローラ１は、保守作業対象のコントローラ１に対しペアの再形成が完了した旨を通知する。保守作業対象のコントローラ１は、他の各コントローラ１からペアの再形成が完了した旨の通知を受領すると、「閉塞移行中」の状態から「閉塞」状態へ移行し、ストレージ装置ＳＤから切り離される。
【００３５】
すなわち、保守作業のために閉塞する場合、保守作業対象のコントローラ１が、他の各コントローラ１に対してペアの再形成を指示する。これに対し、障害などでコントローラ１が閉塞する場合、その障害による閉塞を最初に検出したコントローラ１が、各コントローラ１（自コントローラを含む）に対してペアの再形成を指示する。
【００３６】
以上述べたように、各コントローラ１はそれぞれ縮退復旧処理部１０１１を備えており、キャッシュデータの二重化について自律分散システムを形成している。このため本実施形態では、閉塞したコントローラ１とペアを形成する正常なコントローラ１は、閉塞したコントローラ１の代わりとなる新たなペア先のコントローラ１を選択して、二重化対象のキャッシュデータを新たなペア先となるコントローラへ転送し、ペアを再形成する。
【００３７】
本実施形態は、自律分散システムを構成する各コントローラ１が、キャッシュデータのペアを再形成すべきかをＬＤＥＶ単位で判断し、新たなペア先となるコントローラを選択してペアを再形成する。このため、本実施形態では、一つの管理装置で一元的に管理する場合に比べて、可用性を高くすることができる。
【００３８】
さらに、本実施形態では、ＬＤＥＶ単位でキャッシュデータのペアを再形成するため、ペア先のコントローラを柔軟に選択できる。
【００３９】
本実施形態では、コントローラ選択条件Ｆ１２１に基づいて、新たなペア先となるコントローラを選択するため、例えば、ストレージ装置ＳＤの使用目的やデータの種類などに応じて適切なコントローラを選択できる。これにより、ユーザの使い勝手を維持したままで、キャッシュの高可用性を実現することができる。
【実施例１】
【００４０】
図２〜図１７を用いて第１実施例を説明する。図２は、ストレージ装置ＳＤのハードウェア構成を示す。【００４１】
通信ネットワークの構成例を説明する。ストレージ装置ＳＤは、複数のコントローラ１と、少なくとも一つのドライブボックス２とを備えており、各コントローラ１とドライブボックス２とは、通信ネットワークＣＮ３を介して接続されている。各コントローラ１とホストコンピュータ（以下、ホスト）３とは、通信ネットワークＣＮ１を介して接続されており、各コントローラ１間は通信ネットワークＣＮ２を介して接続されている。【００４２】
ドライブボックス２は、記憶装置２１を搭載する装置である。ドライブボックス２は、例えば、複数の記憶装置２１と、複数のドライブポート２２と、図示せぬ電源装置などを備えている。記憶装置２１は、例えばハードディスクデバイス、半導体メモリデバイス、光ディスクデバイス、光磁気ディスクデバイス等の、データを読み書き可能な種々のデバイスを利用可能である。また例えば、フラッシュメモリ、ＭＲＡＭ（Magnetoresistive Random Access Memory）、相変化メモリ（Phase-Change Memory）、ＲｅＲＡＭ（Resistive random-access memory）、ＦｅＲＡＭ（Ferroelectric Random Access Memory）等の種々のデバイス、またはこれらの均等物を用いることもできる。さらに例えば、ハードディスクデバイスとフラッシュメモリデバイスとを併用する場合のように、種類の異なるデバイスをドライブボックス２内に混在させてもよい。本実施例では、記憶装置２１を「ＨＤＤ」として表現するが、ハードディスクデバイスに限定しない。【００４３】
各記憶装置２１は、それぞれ異なる複数のドライブポート２２を介して通信ネットワークＣＮ３に接続されており、異なる複数の通信経路（ＨＤＤパス）を介して、異なる複数のコントローラ１と通信可能である。各記憶装置２１はそれぞれ複数のＨＤＤパスを有するため、いずれかのＨＤＤパスに障害が発生した場合でも、正常なＨＤＤパスのうちのいずれかを用いることで、いずれかのコントローラ１と通信できる。各コントローラ１は、所望の記憶装置２１へのＨＤＤパスを持っていない場合、その記憶装置２１へのＨＤＤパスを持つコントローラ１を介して、その記憶装置２１にアクセスできる。【００４４】
コントローラ１のハードウェア構成を説明する。コントローラ１は、例えば、フロントエンドポート１１、バックエンドポート１２、ＣＰＵ（Central Processing Unit）１３、メモリ１４、インターコネクトポート１５を備える。【００４５】
フロントエンドポート１１は、通信ネットワークＣＮ１を介してホスト３と通信するための装置である。バックエンドポート１２は、通信ネットワークＣＮ３に接続し、ドライブポート２２を介して記憶装置２１と通信するための装置である。インターコネクトポート１５は、通信ネットワークＣＮ２を介して他の各コントローラ１と通信するための装置である。【００４６】
ＣＰＵ１３は、コントローラ１の動作を制御する。ＣＰＵ１３は、メモリ１４に格納された所定のコンピュータプログラムを読み込んで実行することで、コントローラ１としての各機能を実現する。ＣＰＵ１３は、例えばライトコマンドおよびリードコマンドのように、ホスト３から受領したコマンドを処理し、その処理結果をホスト３へ送信する。さらに、ＣＰＵ１３は、ダーティデータの二重化およびデステージ処理などの、キャッシュデータを管理する処理も行う。【００４７】
メモリ１４は、例えばコンピュータプログラムおよび管理表などのデータを格納し、さらにＣＰＵ１３に対して作業領域を提供する。メモリ１４は、単一のメモリ媒体から構成されてもよいし、複数種類のメモリ媒体から構成されてもよい。図３〜図２１を用いて、メモリ１４の記憶内容を説明する。【００４８】
図３は、メモリ１４の記憶内容の全体概要を示す。メモリ１４は、マイクロプログラム１００を記憶している。マイクロプログラム１００は、例えば、キャッシュ管理プログラム１０１、キャッシュディレクトリ１１０、キャッシュスロット管理テーブル１２０、キャッシュメモリ１３０、構成情報１４０を含む。【００４９】
ここで、詳細の図示は割愛するが、キャッシュスロット管理テーブル１２０は、キャッシュスロット番号をインデックスとして、キャッシュスロット情報を格納するテーブルである。キャッシュスロット番号からキャッシュメモリ上のアドレスを一意に求めることができる。キャッシュスロット情報は、例えば、キャッシュスロットの状態（フリー、クリーン、ダーティ）と、同じ状態のキャッシュスロットをキュー管理するための後続スロット番号と、キャッシュスロットに対応するＬＤＥＶ２４のＬＤＥＶスロット番号とを含むことができる。【００５０】
キャッシュ管理プログラム１０１は、キャッシュデータを管理するプログラムであり、縮退復旧処理部１０１１を備える。キャッシュ管理プログラム１０１は、キャッシュの状態（フリー、クリーン、ダーティ）の遷移、ステージング処理およびデステージ処理などを実行する。縮退復旧処理部１０１１は、コントローラ１が障害や保守作業で閉塞する場合に、コントローラ間で二重化して保持するキャッシュデータのペアを再形成するプログラムである。【００５１】
キャッシュメモリ１３０は、キャッシュデータを格納する記憶領域である。キャッシュメモリ１３０は複数のキャッシュスロットに区切られており、各キャッシュスロットはＣ面１３１またはＮ面１３２いずれかの属性を持つ。また、キャッシュスロットに格納されるキャッシュデータは、フリー、ダーティ、クリーンのいずれかの状態を持つ。【００５２】
図４は、キャッシュディレクトリ１１０の構成例を示す。キャッシュディレクトリ１１０は、例えば、このキャッシュメモリをＣ面として使用するＬＤＥＶの数１１０１、このキャッシュメモリをＮ面として使用するＬＤＥＶの数１１０２、全ＬＤＥＶについてのＬＤＥＶ単位の情報１１０３、キャッシュスロット状態ごとのキューターミナル１１０４、ディレクトリ本体１１０５を含む。【００５３】
キャッシュスロット状態ごとのキューターミナル１１０４は、キャッシュスロット情報の中で、同じキャッシュスロット状態のキャッシュスロットによるリストを表現する。このキューターミナル１１０４は、そのリストの先頭のキャッシュスロット番号と、最後尾のキャッシュスロット番号と、リストの長さを格納するテーブルである。このキャッシュスロット状態ごとのキューターミナル１１０４を用いることで、ダーティデータの量を求めたり、Ｃ面とＮ面の割当比率を求めたりすることができる。【００５４】
ディレクトリ本体１１０５は、ＬＤＥＶスロット番号をインデックスにするテーブルである。キャッシュスロット番号を割り当てると、ディレクトリ本体１１０５は有効な番号を格納する。キャッシュスロットを解放すると、ディレクトリ本体１１０５は、無効な番号を格納する。【００５５】
図５は、図４中に示すＬＤＥＶ単位の情報１１０３の構成例を示す。ＬＤＥＶ単位の情報１１０３は、ＬＤＥＶ毎に用意されるもので、例えば、キャッシュデータを二重化して保持する相手方のコントローラ番号１１０３１、二重化するコントローラを変更した場合の相手方のコントローラ番号１１０３２、面属性情報１１０３３を含む。コントローラ番号１１０３１は、現在ペアを形成する相手方コントローラを特定する番号である。コントローラ番号１１０３２は、縮退復旧処理部１０１１により選択される新たなペア先（ペアの相手方）のコントローラを特定する番号である。【００５６】
図６は、図３中の構成情報１４０の例を示す。構成情報１４０は、ストレージ装置ＳＤの記憶構造に関する構成を管理する。構成情報１４０は、例えば、ＬＤＥＶ情報１４０１、ＶＤＥＶ情報１４０２、ＨＤＤ情報１４０３、ＬＤＥＶ／ＶＤＥＶ変換表１４０４、ＶＤＥＶ／ＨＤＤ変換表１４０５、コントローラ情報１４０６、ホストパス情報１４０７、ホストパス本数情報１４０８、ＨＤＤアクセスパス情報１４０９、ＨＤＤアクセスパス本数情報１４１０、キャッシュスロット遷移方式指定情報１４１１を含む。それぞれの詳細はさらに後述する。【００５７】
図７は、図６中のＬＤＥＶ情報１４０１の例を示す。ＬＤＥＶ情報１４０１は、ＬＤＥＶ２４についての情報であり、例えば、状態情報１４０１１と、サイズ情報１４０１２とを含む。状態情報１４０１１は、ＬＤＥＶ２４の状態を示す。ＬＤＥＶの状態としては、例えば「正常」「閉塞」「フォーマット中」がある。サイズ情報１４０１２は、ＬＤＥＶ２４の記憶容量を示す。【００５８】
図８は、図６中のＶＤＥＶ情報１４０２の例を示す。ＶＤＥＶ情報１４０２は、ＶＤＥＶ２３についての情報であり、例えば、状態情報１４０２１と、サイズ情報１４０２２とを含む。状態情報１４０２１は、ＶＥＤＶ２３の状態を示す。ＶＤＥＶ２３の状態としては、例えば「正常」「閉塞」「フォーマット中」がある。サイズ情報１４０２２は、ＶＤＥＶ２３の記憶容量を示す。【００５９】
図９は、図６中のＨＤＤ情報１４０３の例を示す。ＨＤＤ情報１４０３は、記憶装置２１についての情報であり、例えば、状態情報１４０３１と、サイズ情報１４０３２と、ＨＤＤアクセスパス情報１４０３３を含む。【００６０】
状態情報１４０３１は、記憶装置２１の状態を示す。記憶装置２１の状態としては、例えば「正常」「閉塞」「フォーマット中」がある。サイズ情報１４０３２は、記憶装置２１の記憶容量を示す。ＨＤＤアクセスパス情報１４０３３は、記憶装置２１へアクセスするための経路を特定する情報である。ＨＤＤアクセスパスをＨＤＤパスと略記する場合がある。【００６１】
図１０は、図９中のＨＤＤアクセスパス情報１４０３３の詳細を示す。ＨＤＤアクセスパス情報１４０３３は、例えば、パスの状態１４０３３１と、パスを担当するコントローラ番号１４０３３２と、パスを担当するコントローラ内のバックエンドポートの番号１４０３３３とを含む。【００６２】
パスの状態１４０３３１は、ＨＤＤアクセスパス（ＨＤＤパス。以下同じ）の状態を示す。パス状態としては、例えば「正常」「閉塞」がある。パスを担当するコントローラ番号１４０３３２は、ＨＤＤアクセスパスを担当するコントローラ１の番号である。パスを担当するコントローラ内のバックエンドポートの番号１４０３３３は、ＨＤＤアクセスパスを担当するバックエンドポート１２の番号である。図１０に示す管理情報を用いることで、記憶装置２１へアクセスするためのＨＤＤアクセスパスが、どのコントローラ１のどのバックエンドポート１２に設定されているのかを調べることができる。【００６３】
図１１は、図６中のＬＤＥＶ／ＶＤＥＶ変換表１４０４の例を示す。ＬＤＥＶ／ＶＤＥＶ変換表１４０４は、ＬＤＥＶ２４とＶＤＥＶ２３との対応関係を管理する情報であり、ＶＤＥＶ毎のＬＤＥＶリストターミナル情報１４０４１と、ＬＤＥＶ毎のリスト本体情報１４０４２とを含む。【００６４】
図１２は、図１１中に示すＶＤＥＶ毎のＬＤＥＶリストターミナル情報１４０４１の例である。ＶＤＥＶ毎のＬＤＥＶリストターミナル情報１４０４１は、このＶＤＥＶと関連するＬＤＥＶリストの先頭番号１４０４１１と、ＬＤＥＶリストの長さ１４０４１２とを含む。先頭番号１４０４１１は、そのＶＤＥＶ２３から生成されている各ＬＤＥＶ２４のうち先頭のＬＤＥＶ２４を特定する番号である。ＬＤＥＶリストの長さ１４０４１２は、ＬＤＥＶリストに含まれるＬＤＥＶの個数を示す。【００６５】
図１３は、図１１中に示すＬＤＥＶ毎のリスト本体情報１４０４２の例である。ＬＤＥＶ毎のリスト本体情報１４０４２は、関連するＶＤＥＶ番号１４０４２１と、ＬＤＥＶリスト内での後続のＬＤＥＶ番号１４０４２２とを含む。関連するＶＤＥＶ番号１４０４２１は、ＬＤＥＶリストに対応するＶＤＥＶ２３を特定する番号である。ＬＤＥＶリスト内での後続のＬＤＥＶ番号１４０４２２は、ＬＤＥＶリスト内での次に位置するＬＤＥＶ２４の番号である。リストの終端のＬＤＥＶ２４の場合、ＬＤＥＶ番号１４０４２２には無効な番号がセットされる。【００６６】
図１４は、図６中のＶＤＥＶ／ＨＤＤ変換表１４０５の例である。ＶＤＥＶ／ＨＤＤ変換表１４０５は、ＶＤＥＶ２３と記憶装置２１との対応関係を管理する情報であり、ＶＤＥＶ毎のＨＤＤリストターミナル情報１４０５１と、ＨＤＤ毎のリスト本体情報１４０５２とを含む。【００６７】
図１５は、図１４中に示すＶＤＥＶ毎のＨＤＤリストターミナル情報１４０５１の例である。ＨＤＤリストターミナル情報１４０５１は、このＶＤＥＶと関連するＨＤＤリストの先頭番号１４０５１１と、ＨＤＤリストの長さ１４０５１２とを含む。先頭番号１４０５１１は、このＶＤＥＶ２３に対応する記憶装置２１のうち先頭の記憶装置２１の番号である。ＨＤＤリストの長さ１４０４５１２は、このＶＤＥＶ２３に対応する記憶装置２１の数である。【００６８】
図１６は、図１４中に示すＨＤＤ毎のリスト本体情報１４０５２の例である。ＨＤＤ毎のリスト本体情報１４０５２は、関連するＶＤＥＶ番号１４０５２１と、ＨＤＤリスト内での後続のＨＤＤ番号１４０５２２とを含む。関連するＶＤＥＶ番号１４０５２１は、対応するＶＤＥＶ２３を特定する番号である。ＨＤＤリスト内での後続のＨＤＤ番号１４０５２２は、ＨＤＤリスト内での次に位置する記憶装置２１の番号である。リストの終端の記憶装置２１の場合、ＨＤＤ番号１４０５２２には無効な番号がセットされる。【００６９】
図１７は、図６中に示すコントローラ情報１４０６の例である。コントローラ情報１４０６は、コントローラ状態１４０６１を保持する。コントローラ状態には、例えば「正常」「閉塞移行中」「閉塞」がある。【００７０】
図１８は、図６中に示すホストパス情報１４０７の例である。ホストパス情報１４０７は、フロントエンドポート番号１４０７１と、ＬＵＮ（Logical Unit Number）１４０７２と、ＬＤＥＶ番号１４０７３とを含む。ホストパス情報１４０７は、ホスト３がフロントエンドポート１１を介してアクセス可能なＬＤＥＶ２４を定義する。【００７１】
図１９は、図６中のホストパス本数情報１４０８の例である。ホストパス本数情報１４０８は、コントローラ番号とＬＤＥＶ番号による二次元配列構造を持つ。ホストパス本数情報１４０８は、各コントローラ１が各ＬＤＥＶ２４へアクセスするためのホストパスを何本持っているかを管理する。【００７２】
図２０は、図６中のＨＤＤアクセスパス本数情報１４１０の例である。ＨＤＤアクセスパス本数情報１４１０は、コントローラ番号とＬＤＥＶ番号による二次元配列構造を持っており、各コントローラ１が各ＬＤＥＶ２４に対応する記憶装置２１へアクセスするためのＨＤＤアクセスパスを何本持っているかを管理する。【００７３】
図２１は、図６中のキャッシュスロット遷移方式指定情報１４１１の例である。キャッシュスロット遷移方式指定情報１４１１は、キャッシュスロットの属性（Ｃ面かＮ面か）が遷移する方式を指定する。つまり、キャッシュスロット遷移方式指定情報１４１１は、キャッシュデータを二重化して保持するための二重化ペアを形成するに際して、ペア先となるキャッシュメモリ（キャッシュスロット）の属性が遷移する方式を指定する。キャッシュスロット遷移方式指定情報１４１１は、ＬＤＥＶ番号１４１１１と、遷移方式１４１１２とを対応付けて管理する。本実施例では、図２９〜図３２で後述するように複数の遷移方式（モード）を用意している。本実施例では、例えば、ホスト３がＬＤＥＶ２４を使用する目的、ホスト３の要求する性能条件などに基づいて、ＬＤＥＶ毎にキャッシュスロット遷移方式を指定することができる。なお、関連するデータを格納するＬＤＥＶ群のように、複数のＬＤＥＶ２４を含むＬＤＥＶグループを定義しておき、ＬＤＥＶグループ単位でキャッシュスロット遷移方式を指定する構成としてもよい。なお、キャッシュスロット遷移方式の概略を図２９〜図３３で説明し、キャッシュスロット遷移方式の詳細な例は図３９〜図４６で後述する。【００７４】
図２２は、キャッシュスロットの状態遷移を示す。図２２では、ペアを形成する２つのキャッシュスロットについて、その状態の遷移を説明する。いずれのキャッシュスロットも未だ使用されていない初期状態（Ｓ１）では、各キャッシュスロットの状態は「フリー」である。フリーとは、未使用状態であることを示す。【００７５】
ホスト３がリードコマンドを発行すると（Ｓ２）、リード対象データが記憶装置２１から読み出されて、フリー状態のキャッシュスロットのうちＣ面のキャッシュスロットに転送されて記憶される。これにより、Ｃ面のキャッシュスロットは、フリー状態からクリーン状態へ変化する（Ｓ３）。クリーン状態とは、キャッシュメモリと記憶装置の両方でデータが保持されている状態である。コントローラ１がクリーン状態のキャッシュスロットを解放すると（Ｓ４）、そのキャッシュスロットはクリーン状態からフリー状態へ遷移する（Ｓ１）。【００７６】
これに対し、ホスト３がライトコマンドを発行すると（Ｓ５）、ホスト３から受信したライトデータがＣ面のキャッシュスロットへ記憶される。これにより、Ｃ面のキャッシュスロットは、フリー状態からダーティ状態へ遷移する（Ｓ７）。これと同時に、Ｃ面のキャッシュスロットに記憶されたライトデータは、そのＣ面のキャッシュスロットとペアを形成するＮ面のキャッシュスロットに転送されて記憶される。これにより、Ｎ面のキャッシュスロットも、フリー状態からダーティ状態へ遷移する（Ｓ７）。なお、上述の通り、キャッシュデータを安全に二重化して保持すべく、Ｃ面のキャッシュスロットとＮ面のキャッシュスロットとは、それぞれ異なるコントローラ１内に存在する。【００７７】
コントローラ１は、所定のタイミングで、デステージ処理を実行する。コントローラ１が、Ｃ面のキャッシュスロットに記憶されたライトデータを、書込先のＬＤＥＶ２４に対応する記憶装置２１へ転送して書き込むと（Ｓ８）、Ｃ面のキャッシュスロットは、ダーティ状態からクリーン状態へ遷移する（Ｓ３）。これと同時に、Ｎ面のキャッシュスロットは、ライトデータを保持する必要性がなくなったため、ダーティ状態からフリー状態へ遷移する（Ｓ３）。【００７８】
次に、コントローラ１が障害や保守作業などで閉塞し、Ｃ面のキャッシュスロットとＮ面のキャッシュスロットとによるキャッシュデータを二重化して保持するためのペアが消失した場合を説明する。【００７９】
Ｃ面のキャッシュスロットが存在するコントローラ１が閉塞する場合（Ｓ９）、Ｃ面のキャッシュスロットは使用できなくなる（Ｓ１０）。そこで、残されたＮ面のキャッシュスロットを持つコントローラ１は、縮退復旧処理部１０１１を起動させて、新たなペア先のコントローラを選択し、キャッシュデータを再び二重化する（Ｓ１１）。【００８０】
Ｎ面のキャッシュスロットが存在するコントローラ１が閉塞する場合（Ｓ１２）、Ｎ面のキャッシュスロットは使用できなくなる（Ｓ１３）。そこで、残されたＣ面のキャッシュスロットを持つコントローラ１は、縮退復旧処理部１０１１を起動させて、新たなペア先のコントローラを選択し、キャッシュデータを再び二重化する（Ｓ１４）。【００８１】
図２３は、障害の発生によりコントローラが閉塞する場合の処理を示す。本処理は各コントローラ１が定期的に実施する。【００８２】
コントローラ１は、例えばハートビート通信の断絶などから、他のコントローラ１が閉塞したことを検出すると（Ｓ２０）、障害の発生したコントローラ（障害コントローラ）のコントローラ状態１４０６１（図１７参照）を「閉塞」に設定する（Ｓ２１）。そして、コントローラ１は、障害コントローラ以外の正常な他の各コントローラに対して、縮退復旧処理部１０１１の起動を指示する（Ｓ２２）。【００８３】
図２４は、保守作業のためにコントローラが閉塞する場合の処理を示す。本処理は、保守作業の対象となったコントローラ１が、保守作業の開始時に実施する。以下、保守作業対象のコントローラ１を保守対象コントローラ１と呼ぶ。【００８４】
保守対象コントローラ１は、自コントローラのコントローラ状態１４０６１を「閉塞移行中」に設定する（Ｓ３０）。保守対象コントローラ１は、正常な他の各コントローラに対して、縮退復旧処理部１０１１の起動を指示する（Ｓ３１）。【００８５】
保守対象コントローラ１は、ステップＳ３１で指示した後、指示した各コントローラからの処理完了通知を待つ（Ｓ３２）。保守対象コントローラ１は、指示した全てのコントローラから処理完了通知を受領すると、ストレージ装置ＳＤ内においてキャッシュデータの二重化ペアが再形成されたと判断し、自コントローラのコントローラ状態１４０６１を「閉塞」に設定する（Ｓ３３）。つまり、閉塞時期を意図的に調整可能な保守作業では、保守対象コントローラ１が、二重化ペアの再形成を管理する。【００８６】
図２５は、縮退復旧処理部１０１１の処理を示すメインフローチャートである。本処理は、図２３または図２４のいずれかの処理により縮退復旧処理部１０１１が起動されると、ＬＤＥＶ単位で実行される。以下、処理部１０１１と略記する場合がある。【００８７】
まず最初に、処理部１０１１は、キャッシュディレクトリ内にＬＤＥＶ毎に格納する面属性情報と、キャッシュ二重化ペアを形成する相手方コントローラの番号とを取得する（Ｓ４０）。【００８８】
処理部１０１１は、相手方コントローラの番号でコントローラ情報１４０６を検索することで、相手方コントローラの状態が「閉塞」であるか確認する（Ｓ４１）。処理部１０１１は、相手方コントローラの状態が「閉塞」ではないと判定すると（Ｓ４１：ＮＯ）、相手方コントローラの状態が「閉塞移行中」であるか確認する（Ｓ４２）。【００８９】
処理部１０１１は、相手方コントローラの状態が「閉塞」（Ｓ４１：ＹＥＳ）、または「閉塞移行中」（Ｓ４２：ＹＥＳ）のいずれかの場合、キャッシュデータ二重化処理を実行する（Ｓ４３）。キャッシュデータ二重化処理の詳細は、後述する。【００９０】
処理部１０１１は、相手方コントローラの状態が「閉塞」または「閉塞移行中のいずれでもない場合（Ｓ４１：ＮＯ，ＡＮＤ  Ｓ４２：ＮＯ）、特に何もせず、全てのＬＤＥＶ２４について処理を完了したか判定する（Ｓ４４）。全てのＬＤＥＶ２４とは、処理部１０１１が設けられているコントローラ１に関係するＬＤＥＶという意味である。【００９１】
処理部１０１１は、処理すべき全てのＬＤＥＶ２４について本処理を実行したと判定すると（Ｓ４４：ＹＥＳ）、正常に終了する。これに対し、処理部１０１１は、未処理のＬＤＥＶ２４が残っていると判定すると（Ｓ４４：ＮＯ）、次のＬＤＥＶ２４を選択し、ステップＳ４０へ戻る。【００９２】
図２６は、図２５中のキャッシュデータ二重化処理（Ｓ４３）の詳細を示すフローチャートである。本処理には、図２５のメインフローチャートから、処理対象のＬＤＥＶの番号と面属性情報とが入力される。処理対象のＬＤＥＶとは、閉塞した（または閉塞予定の）コントローラにデータが保持されているＬＤＥＶであり、コントローラの閉塞による影響を受けるＬＤＥＶである。【００９３】
処理部１０１１は、新たなペア先となるコントローラを選択するための処理を実行する（Ｓ５０）。ステップＳ５０の詳細は、図３４〜図３８で後述する。処理部１０１１は、ステップＳ５０から返されるコントローラ番号と面属性情報を、図５に示すＬＤＥＶ単位の情報１１０３に設定する（Ｓ５１）。【００９４】
処理部１１０１は、対象のＬＤＥＶ２４に割当済みのキャッシュスロットをキャッシュディレクトリで探し（Ｓ５２）、割当済みのキャッシュスロットを発見したか判定する（Ｓ５３）。【００９５】
処理部１０１１は、対象ＬＤＥＶに割当済みのキャッシュスロットを発見すると（Ｓ５３：ＹＥＳ）、その発見したキャッシュスロットの状態を調べる（Ｓ５４）。処理部１０１１は、その発見したキャッシュスロットの状態が「Ｃ面ダーティ」であるか判定する（Ｓ５５）。「Ｃ面ダーティ」とは、対象ＬＤＥＶのデータを記憶するキャッシュスロットの属性がＣ面であり、そこに記憶しているデータはキャッシュメモリ上にのみ存在するダーティデータであることを意味する。【００９６】
処理部１０１１は、対象ＬＤＥＶに割当済みのキャッシュスロットが「Ｃ面ダーティ」であると判定すると（Ｓ５５：ＹＥＳ）、ステップＳ５７へ移り、そうでなければ（Ｓ５５：ＮＯ）、ステップＳ５６へ進む。【００９７】
処理部１０１１は、対象ＬＤＥＶに割当済みのキャッシュスロットの状態が「Ｎ面ダーティ」であるか判定する（Ｓ５６）。「Ｎ面ダーティ」とは、対象ＬＤＥＶのデータを記憶するキャッシュスロットの属性がＮ面であり、そこに記憶しているデータはダーティデータであることを意味する。【００９８】
処理部１０１１は、対象ＬＤＥＶに割当済みのキャッシュスロットの状態が「Ｎ面ダーティ」であると判定すると（Ｓ５６：ＹＥＳ）、ステップＳ５７へ移り、そうでなければ（Ｓ５６：ＮＯ）、ステップＳ５８へ進む。【００９９】
処理部１０１１は、ステップＳ５７で実行する「二重化元コントローラでのデータ二重化処理」（図２７で後述）での結果に基づいて、対象ＬＤＥＶに割当済みのキャッシュスロットについて二重化ペアの再形成に成功したか判定する（Ｓ５８）。【０１００】
処理部１０１１は、二重化ペアの再形成に成功したと判定すると（Ｓ５８：ＹＥＳ）、対象ＬＤＥＶに割り当てられた次のキャッシュスロットを探し（Ｓ５９）、ステップＳ５２へ移る。これに対し、処理部１０１１は、対象のキャッシュスロットについて二重化ペアの再形成に失敗したと判定すると（Ｓ５８：ＮＯ）、所定時間待機した後に、そのキャッシュスロットについて処理すべくステップＳ５２へ戻る。【０１０１】
新たなペア先として選択されたコントローラ１の処理負荷が高いために、キャッシュデータの二重化を一定時間内に完了できなかった場合、ステップＳ５８では、二重化ペアの再形成に失敗したと判定される。そこで、処理部１０１１は、時間を置いてからステップＳ５２〜Ｓ５７の処理を再び行う（Ｓ６０）。【０１０２】
処理部１０１１は、対象ＬＤＥＶに割当済みのキャッシュスロットの状態が「Ｃ面ダーティ」（Ｓ５５：ＹＥＳ）、または「Ｎ面ダーティ」（Ｓ５６：ＹＥＳ）のいずれかである場合、「二重化元コントローラでのデータ二重化処理」を実施する（Ｓ５７）。【０１０３】
図２７は、図２６中のステップＳ５７の詳細を示すフローチャートである。処理部１０１１は、「二重化先コントローラでのデータ二重化処理」を実施する（Ｓ７０）。この処理は、新たなペア先となるコントローラにキャッシュデータを転送してキャッシュメモリへ記憶させる処理である。その詳細は図２８で後述する。図２７の処理の実行に際して図２６の処理から、二重化元でのキャッシュスロットの面属性、二重化先でのキャッシュスロットの面属性、対象のＬＤＥＶの番号、二重化対象のデータ、二重化先コントローラの番号が入力される。【０１０４】
処理部１０１１は、二重化先コントローラ（新たなペア先として選択されたコントローラ。以下同じ）へ依頼した処理が完了するのを待つ（Ｓ７１）。処理部１０１１は、二重化先コントローラでのデータ二重化に成功したか否か、つまり、対象のキャッシュデータについて二重化ペアの再形成に成功したか否かを判定する（Ｓ７２）。【０１０５】
処理部１０１１は、二重化先コントローラでのデータ二重化に成功したと判定すると（Ｓ７２：ＹＥＳ）、図２６に示すキャッシュデータ二重化処理に対して、正常終了した旨を返す（Ｓ７３）。【０１０６】
これに対し、処理部１０１１は、二重化先コントローラでのデータ二重化に失敗したと判定すると（Ｓ７２：ＮＯ）、二重化元コントローラで保持しているキャッシュデータをデステージ処理させる（Ｓ７４）。処理部１０１１は、自処理部の設けられているコントローラ１において、二重化ペアの再形成対象であったキャッシュデータのデステージ処理が完了するのを待つ（Ｓ７５）。異なるコントローラ間でキャッシュデータを二重化して保持できない場合（Ｓ７２：ＮＯ）、デステージ処理を実施することで、そのキャッシュデータを記憶装置２１へ書込み、ストレージ装置ＳＤの信頼性を維持する。【０１０７】
処理部１０１１は、デステージ処理が成功したか判定する（Ｓ７６）。デステージ処理が成功した場合（Ｓ７６：ＹＥＳ）、処理部１０１１はステップＳ７３へ移り、図２６の処理に対して正常終了した旨を返す。これに対し、処理部１０１１は、図２６の処理に対して異常終了した旨を返す（Ｓ７７）。【０１０８】
図２８は、図２７中のステップＳ７０の詳細を示すフローチャートである。本処理は、二重化先コントローラのキャッシュ管理プログラム１０１により実行される。本処理の実行に際して図２７の処理から、対象のＬＤＥＶの番号、対象のＬＤＥＶにおける二重化対象のデータの書込先アドレス、二重化元コントローラの番号、二重化先コントローラのキャッシュスロットへ格納するデータ、二重化先コントローラのキャッシュスロットの面属性を受け取る。【０１０９】
キャッシュ管理プログラム１０１は、対象のデータに対して、キャッシュスロットを一定時間内に割り当てる（Ｓ８０）。キャッシュ管理プログラム１０１は、一定時間内に、対象のデータにキャッシュスロットを割り当てることができたか判定する（Ｓ８１）。二重化先コントローラは、キャッシュメモリに空き容量が乏しい場合、デステージ処理を実施するなどして、キャッシュメモリに空き容量を増やす。しかし、デステージ処理ができなかった場合、またはデステージ処理をしても空き容量が足りない場合は、対象データにキャッシュスロットを割り当てることができない。【０１１０】
一定時間内にキャッシュスロットを対象データへ割り当てることができなかった場合（Ｓ８１：ＮＯ）、二重化先コントローラのキャッシュ管理プログラム１０１は、データの二重化に失敗したと判定し（Ｓ８２）、図２７の処理へ戻る。【０１１１】
対象データにキャッシュスロットを割り当てることができた場合（Ｓ８１：ＹＥＳ）、キャッシュ管理プログラム１０１は、割り当てたキャッシュスロットへ対象データを格納する（Ｓ８３）。【０１１２】
キャッシュ管理プログラム１０１は、二重化先のキャッシュの面属性がＣ面に指定されているか判定し（Ｓ８４）、Ｃ面に指定されている場合（Ｓ８４：ＹＥＳ）、対象データに割り当てたキャッシュスロットの状態を「Ｃ面ダーティ」に設定し（Ｓ８５）、図２７の処理へ戻る。【０１１３】
キャッシュ管理プログラム１０１は、二重化先のキャッシュの面属性がＣ面に指定されていないと判定すると（Ｓ８４：ＮＯ）、その面属性がＮ面に指定されているか判定する（Ｓ８６）。キャッシュ管理プログラム１０１は、二重化先のキャッシュの面属性がＮ面に指定されていると判定すると（Ｓ８６：ＹＥＳ）、対象データに割り当てたキャッシュスロットの状態を「Ｎ面ダーティ」に設定し（Ｓ８７）、図２７の処理へ戻る。なお、ステップＳ８６で「ＮＯ」と判定した場合、図２７の処理へ戻る。【０１１４】
図２９は、図２１で述べたキャッシュスロット遷移方式の第１の例を示す。図２９の遷移方式は、閉塞するコントローラが持つキャッシュスロットと同一の面属性を持つキャッシュスロットを得るべく、新たなペア先となるコントローラを選択する。以下、障害発生による閉塞時を例に挙げて説明するが、保守作業による閉塞時も同様である。【０１１５】
障害発生や保守作業の開始前の初期状態では、「Ｃ面ダーティ」のキャッシュスロットと「Ｎ面ダーティ」のキャッシュスロットとがペアを形成して、同一のデータを保持している（Ｓ９０）。【０１１６】
もしもＮ面のキャッシュスロットが設けられているコントローラ１に障害が発生したとすると（Ｓ９１）、Ｎ面のキャッシュスロットを使用することができなくなり、データの二重化ペアが失われる（Ｓ９２）。そこで、処理部１０１１は、使用不能となったキャッシュスロットと同一属性（Ｎ面）でキャッシュスロットを使用すべく、新たなペア先となるコントローラを選択し、データを二重化する（Ｓ９３）。これにより、二重化元コントローラ内のＣ面のキャッシュスロットは、新たなペア先のコントローラが持つＮ面のキャッシュスロットとペアを形成する（Ｓ９４）。【０１１７】
同様に、もしもＣ面のキャッシュスロットが設けられているコントローラ１に障害が発生したとすると（Ｓ９５）、Ｃ面のキャッシュスロットを使用できなくなり、データの二重化ペアが失われる（Ｓ９６）。そこで、処理部１０１１は、使用不能となったキャッシュスロットと同一属性（Ｃ面）でキャッシュスロットを使用すべく、新たなペア先となるコントローラを選択し、データを二重化する（Ｓ９７）。これにより、二重化元コントローラ内のＮ面のキャッシュスロットは、新たなペア先のコントローラが持つＣ面のキャッシュスロットとペアを形成する（Ｓ９８）。【０１１８】
図３０は、キャッシュスロット遷移方式の第２の例を示す。図３０の遷移方式は、新たなペア先となるコントローラの持つキャッシュスロットを常にＮ面のキャッシュスロットとして使用する。【０１１９】
初期状態では、「Ｃ面ダーティ」のキャッシュスロットと「Ｎ面ダーティ」のキャッシュスロットとがペアを形成して、同一のデータを保持している（Ｓ１００）。【０１２０】
Ｎ面のキャッシュスロットが設けられているコントローラ１に障害が発生すると（Ｓ１０１）、Ｎ面のキャッシュスロットを使用できなくなり、データの二重化ペアが失われる（Ｓ１０２）。そこで、処理部１０１１は、Ｎ面でキャッシュスロットを使用すべく、新たなペア先となるコントローラを選択し、データを二重化する（Ｓ１０３）。これにより、二重化元コントローラ内のＣ面のキャッシュスロットは、新たなペア先のコントローラが持つＮ面のキャッシュスロットとペアを形成する（Ｓ１０４）。【０１２１】
これに対し、Ｃ面のキャッシュスロットを有するコントローラ１に障害が発生すると（Ｓ１０５）、Ｃ面のキャッシュスロットが使用できなくなり、データの二重化ペアが失われる（Ｓ１０６）。【０１２２】
二重化元コントローラは、Ｎ面のキャッシュスロットを有するが、この遷移方式では、常にＮ面のキャッシュスロットを新たに探し求める。そこで、二重化元コントローラの処理部１０１１は、二重化元コントローラ側のキャッシュスロットの面属性をＮ面からＣ面に変更する（Ｓ１０７）。この結果、Ｃ面のキャッシュスロットが正常に機能し、Ｎ面のキャッシュスロットが失われた状態になる（Ｓ１０８）。【０１２３】
処理部１０１１は、Ｎ面でキャッシュスロットを使用すべく、新たなペア先となるコントローラを選択し、データを二重化する（Ｓ１０９）。これにより、二重化元コントローラ内のＣ面のキャッシュスロットは、新たなペア先となるコントローラ内のＮ面のキャッシュスロットとペアを形成する（Ｓ１１０）。【０１２４】
図３１は、キャッシュスロット遷移方式の第３の例を示す。図３１の遷移方式は、新たなペア先となるコントローラの持つキャッシュスロットを常にＣ面のキャッシュスロットとして使用する。【０１２５】
初期状態では、「Ｃ面ダーティ」のキャッシュスロットと「Ｎ面ダーティ」のキャッシュスロットとがペアを形成して、同一のデータを保持している（Ｓ１２０）。【０１２６】
Ｃ面のキャッシュスロットが設けられているコントローラ１に障害が発生すると（Ｓ１２１）、Ｃ面のキャッシュスロットを使用できなくなり、データの二重化ペアが失われる（Ｓ１２２）。処理部１０１１は、Ｃ面でキャッシュスロットを使用すべく、新たなペア先となるコントローラを選択し、データを二重化する（Ｓ１２３）。これにより、二重化元コントローラ内のＣ面のキャッシュスロットは、新たなペア先のコントローラが持つＣ面のキャッシュスロットとペアを形成する（Ｓ１２４）。【０１２７】
これに対し、Ｎ面のキャッシュスロットを有するコントローラ１に障害が発生すると（Ｓ１２５）、Ｎ面のキャッシュスロットが使用できなくなり、データの二重化ペアが失われる（Ｓ１２６）。【０１２８】
二重化元コントローラは、Ｃ面のキャッシュスロットを有するが、この遷移方式では、常にＣ面のキャッシュスロットを新たに探し求める。そこで、二重化元コントローラの処理部１０１１は、二重化元コントローラ側のキャッシュスロットの面属性をＣ面からＮ面に変更する（Ｓ１２７）。これにより、Ｎ面のキャッシュスロットが正常に機能し、Ｃ面のキャッシュスロットが失われた状態になる（Ｓ１２８）。【０１２９】
処理部１０１１は、Ｃ面でキャッシュスロットを使用すべく、新たなペア先となるコントローラを選択し、データを二重化する（Ｓ１２９）。これにより、二重化元コントローラ内のＮ面のキャッシュスロットは、新たなペア先となるコントローラ内のＣ面のキャッシュスロットとペアを形成する（Ｓ１３０）。【０１３０】
図３０で述べたように、当初のペアのうちＣ面、Ｎ面のいずれが使用できなくなった場合でも、常に、Ｎ面でキャッシュスロットを使用するコントローラを探す方式では、いずれの場合も結局、Ｎ面でキャッシュスロットを使用すべくコントローラを選択するため、処理を共通化できる。これにより制御プログラムを簡素化できる。同様に、図３１で述べた方式も、Ｃ面でキャッシュスロットを使用すべくコントローラを選択するため、処理を共通化でき、制御プログラムを簡素化できる。【０１３１】
図３２は、キャッシュスロット遷移方式の第４の例を示す。図３２の遷移方式は、Ｃ面のキャッシュスロットの設けられているコントローラが閉塞する場合、Ｃ面のキャッシュスロットとして使用すべきコントローラを先に決定する。この遷移方式では、Ｃ面のキャッシュスロットとして使用すべきと判定されたキャッシュスロットがＮ面の属性を持つ場合、その属性をＣ面に変更する。【０１３２】
初期状態では、「Ｃ面ダーティ」のキャッシュスロットと「Ｎ面ダーティ」のキャッシュスロットとがペアを形成して、同一のデータを保持している（Ｓ１４０）。Ｎ面のキャッシュスロットが存在するコントローラに障害が発生すると（Ｓ１４１）、Ｎ面のキャッシュスロットが使用できなくなり、データの二重化ペアが失われる（Ｓ１４２）。【０１３３】
処理部１０１１は、Ｎ面でキャッシュスロットを使用すべく、新たなペア先となるコントローラを選択し、データを二重化する（Ｓ１４３）。これにより、二重化元コントローラ内のＣ面のキャッシュスロットは、新たなペア先のコントローラが持つＮ面のキャッシュスロットとペアを形成する（Ｓ１４４）。【０１３４】
これに対し、Ｃ面のキャッシュスロットを有するコントローラ１に障害が発生すると（Ｓ１４５）、Ｃ面のキャッシュスロットが使用できなくなり、データの二重化ペアが失われる（Ｓ１４６）。対象のキャッシュデータについて閉塞対象のコントローラがＣ面のキャッシュスロットを有するため、二重化元コントローラはＮ面のキャッシュスロットを有する。【０１３５】
処理部１０１１は、対象のキャッシュデータの保存に際して、他の各コントローラのうちＣ面のキャッシュスロットを設けるのに適したコントローラがいずれであるか判定する（Ｓ１４７）。【０１３６】
処理部１０１１は、自コントローラにＣ面のキャッシュスロットを設けるべきと判定した場合（Ｓ１４８）、自コントローラのキャッシュスロットの属性をＮ面からＣ面に変更する（Ｓ１４９）。この結果、二重化元コントローラはＣ面のキャッシュスロットを有する。したがって、新たなペア先となるコントローラには、Ｎ面のキャッシュスロットを設けることになる（Ｓ１５０）。【０１３７】
処理部１０１１は、Ｎ面でキャッシュスロットを使用すべく、新たなペア先となるコントローラを選択し、データを二重化する（Ｓ１５１）。これにより、二重化元コントローラ内のＣ面のキャッシュスロットは、新たなペア先となるコントローラ内のＮ面のキャッシュスロットとペアを形成する（Ｓ１５２）。【０１３８】
一方、処理部１０１１は、Ｃ面のキャッシュスロットを有するのに適したコントローラが自コントローラ（二重化元コントローラ）以外の他のコントローラであると判定すると（Ｓ１５３）、Ｃ面でキャッシュスロットを使用するべきコントローラを選択し、データを二重化する（Ｓ１５４）。これにより、二重化元コントローラ内のＮ面のキャッシュスロットは、新たなペア先となるコントローラ内のＣ面のキャッシュスロットとペアを形成する（Ｓ１５５）。【０１３９】
図３３は、キャッシュスロット遷移方式の第５の例を示す。図３２の遷移方式は、Ｎ面のキャッシュスロットの設けられているコントローラが閉塞する場合、Ｎ面のキャッシュスロットとして使用すべきコントローラを先に決定する。この遷移方式では、Ｎ面のキャッシュスロットとして使用すべきと判定されたキャッシュスロットがＣ面の属性を持つ場合、その属性をＮ面に変更する。【０１４０】
初期状態では、「Ｃ面ダーティ」のキャッシュスロットと「Ｎ面ダーティ」のキャッシュスロットとがペアを形成して、同一のデータを保持している（Ｓ１６０）。Ｃ面のキャッシュスロットが存在するコントローラに障害が発生すると（Ｓ１６１）、Ｃ面のキャッシュスロットが使用できなくなり、データの二重化ペアが失われる（Ｓ１６２）。【０１４１】
処理部１０１１は、Ｃ面でキャッシュスロットを使用すべく、新たなペア先となるコントローラを選択し、データを二重化する（Ｓ１６３）。これにより、二重化元コントローラ内のＣ面のキャッシュスロットは、新たなペア先のコントローラが持つＣ面のキャッシュスロットとペアを形成する（Ｓ１６４）。【０１４２】
これに対し、Ｎ面のキャッシュスロットを有するコントローラ１に障害が発生すると（Ｓ１６５）、Ｎ面のキャッシュスロットが使用できなくなり、データの二重化ペアが失われる（Ｓ１６６）。対象のキャッシュデータについて閉塞対象のコントローラがＮ面のキャッシュスロットを有するため、二重化元コントローラはＣ面のキャッシュスロットを有する。【０１４３】
処理部１０１１は、対象のキャッシュデータの保存に際して、他の各コントローラのうちＮ面のキャッシュスロットを設けるのに適したコントローラがいずれであるか判定する（Ｓ１６７）。【０１４４】
処理部１０１１は、自コントローラにＮ面のキャッシュスロットを設けるべきと判定すると（Ｓ１６８）、自コントローラのキャッシュスロットの属性をＣ面からＮ面に変更する（Ｓ１６９）。この結果、二重化元コントローラは、Ｎ面のキャッシュスロットを有する。したがって、新たなペア先となるコントローラには、Ｃ面のキャッシュスロットを設けることになる（Ｓ１７０）。【０１４５】
処理部１０１１は、Ｃ面でキャッシュスロットを使用すべく、新たなペア先となるコントローラを選択し、データを二重化する（Ｓ１７１）。これにより、二重化元コントローラ内のＮ面のキャッシュスロットは、新たなペア先となるコントローラ内のＣ面のキャッシュスロットとペアを形成する（Ｓ１７２）。【０１４６】
一方、処理部１０１１は、Ｎ面のキャッシュスロットを有するのに適したコントローラが自コントローラ（二重化元コントローラ）以外の他のコントローラであると判定すると（Ｓ１７３）、Ｎ面でキャッシュスロットを使用するべきコントローラを選択し、データを二重化する（Ｓ１７４）。これにより、二重化元コントローラ内のＣ面のキャッシュスロットは、新たなペア先となるコントローラ内のＮ面のキャッシュスロットとペアを形成する（Ｓ１７５）。【０１４７】
図３４は、図２６にステップＳ５０で示すコントローラ選択処理の概要である。コントローラ選択処理（Ｓ５０）は、複数の（例えば４つの）選択方法の中からいずれか一つを選択できるようになっている。コントローラ選択方法は、例えば、ホスト３の要求する性能、ストレージ装置ＳＤの使用目的や種類などに応じて適宜選択することができ、途中変更も可能である。コントローラ選択方法の詳細は、図３５〜図３８で後述する。【０１４８】
図３５は、コントローラ選択の第１方法の例を示す。第１のコントローラ選択方法では、対象のキャッシュデータの最終的な格納先となる記憶装置２１へのアクセス経路（ＨＤＤパス）の多さと、キャッシュ負荷の低さとに基づいて、コントローラを選択する。ペア再形成の対象となるキャッシュデータを対象キャッシュデータと、対象キャッシュデータの記憶先であるＬＤＥＶ２４を対象ＬＤＥＶ２４と、対象ＬＤＥＶ２４を構成する記憶装置２１を対象記憶装置２１と呼ぶ。【０１４９】
処理部１０１１は、各コントローラ１から対象ＬＤＥＶ２４に対応する記憶装置２１（対象記憶装置２１）へ直接アクセスできるＨＤＤパスの本数を、図２０で述べたＨＤＤアクセスパス本数情報１４１０から検出する（Ｓ１８０）。【０１５０】
ここで、コントローラ１から対象記憶装置２１へ直接アクセスできるＨＤＤパスとは、そのコントローラ１が他のコントローラを経由することなく、対象記憶装置２１へアクセスしてデータを読み書きすることのできるＨＤＤパスである。本実施例の各コントローラは、対象記憶装置２１へ直接アクセスするＨＤＤパスを有していない場合でも、対象記憶装置２１へ直接アクセスできる他のコントローラを経由することで、対象記憶装置２１へデータを読み書きできる。しかし、或るコントローラが他のコントローラを経由して対象記憶装置２１へデータを読み書きすることは、他のコントローラの負荷を増加させることになる。そこで、本実施例では、対象記憶装置２１へ直接アクセスできるＨＤＤパスの本数に着目し、その本数の多い順に並び替える（Ｓ１８０）。【０１５１】
処理部１０１１は、対象記憶装置２１へ直接アクセスするＨＤＤパスの本数の多い順に、コントローラのキャッシュ負荷が閾値以下であるかを判定し、キャッシュ負荷が閾値以下であると最初に判定したコントローラを選択する（Ｓ１８１）。ただし、ステップＳ１８１では、処理部１０１１の設けられているコントローラと、「閉塞」または「閉塞移行中」のいずれかの状態にあるコントローラとは、選択対象から除外する。キャッシュ負荷とは、キャッシュメモリ１３０の使用量である。より詳しくは、キャッシュ負荷とは、キャッシュメモリ１３０に記憶されているデータのうちダーティデータの量である。【０１５２】
図３６は、コントローラ選択の第２方法を示す。第２のコントローラ選択方法は、ホスト３とのデータ授受にはＣ面のキャッシュスロットを使用し、記憶装置２１とのデータ授受にはＮ面のキャッシュスロットを使用する場合を前提とする。【０１５３】
処理部１０１１は、属性決定処理により、キャッシュスロットの属性を決定する（Ｓ１９０）。属性決定処理については、図３９〜図４６で後述する。処理部１０１１は、属性決定処理の結果、Ｎ面でキャッシュスロットを使用するコントローラを探索することが決定されたか判定する（Ｓ１９１）。Ｎ面でキャッシュスロットを使用するコントローラを探すことを、Ｎ面のコントローラを探すと表現する場合がある。同様に、Ｃ面でキャッシュスロットを使用するコントローラを探すことを、Ｃ面のコントローラを探すと表現する場合がある。【０１５４】
処理部１０１１は、Ｎ面のコントローラを探索しない場合（Ｓ１９１：ＮＯ）、即ちＣ面のコントローラの探索が決定された場合、対象ＬＤＥＶへアクセスするホストパスの数をコントローラ毎に検出し、本数順に並べ替える（Ｓ１９２）。処理部１０１１は、対象ＬＤＥＶ２４へのコントローラごとのホストパスの本数を、図１９で述べたホストパス本数情報１４０８から検出できる。【０１５５】
処理部１０１１は、各コントローラについて、ホストパスの多い順で、キャッシュ負荷が所定の閾値以下であるかを判定し、キャッシュ負荷が閾値以下であると最初に判定したコントローラを選択する（Ｓ１９３）。ただし、このステップＳ１９３では、処理部１０１１の設けられているコントローラと、「閉塞」または「閉塞移行中」のいずれかの状態にあるコントローラとは、選択対象から除外する。【０１５６】
これに対し、処理部１０１１は、Ｎ面のコントローラを探すことが決定された場合（Ｓ１９１：ＹＥＳ）、対象ＬＤＥＶ２４に対応する記憶装置２１へ直接アクセスできるＨＤＤパスの本数をコントローラ毎に調べ、ＨＤＤパスの本数の順で各コントローラを並び替える（Ｓ１９４）。【０１５７】
処理部１０１１は、各コントローラについて、ＨＤＤパスの多い順で、キャッシュ負荷が所定の閾値以下であるか判定し、キャッシュ負荷が閾値以下であると最初に判定したコントローラを選択する（Ｓ１９５）。ただし、このステップＳ１９３では、処理部１０１１の設けられているコントローラと、「閉塞」または「閉塞移行中」のいずれかの状態にあるコントローラとは、選択対象から除外する。【０１５８】
このように第２のコントローラ選択方法では、Ｃ面のコントローラを探す場合、対象ＬＤＥＶへのホストパスの本数およびキャッシュ負荷に基づいて探索し、Ｎ面のコントローラを探す場合は、対象ＬＤＥＶに対応する記憶装置２１へのＨＤＤパスの本数およびキャッシュ負荷に基づいて探索する。したがって、Ｃ面のキャッシュスロットの使用形態に適したコントローラと、Ｎ面のキャッシュスロットの使用形態に適したコントローラとを選択することができ、ストレージ装置ＳＤの応答性能を維持できる。【０１５９】
図３７は、コントローラ選択の第３方法を示す。第３のコントローラ選択方法は、ホスト３とのデータ授受および記憶装置２１とのデータ授受の両方に、Ｃ面のキャッシュスロットを使用する場合を前提とする。この場合、Ｎ面のキャッシュスロットは、対象キャッシュデータのバックアップ用のキャッシュとなる。【０１６０】
処理部１０１１は、属性決定処理により（Ｓ２００）、Ｎ面のコントローラの探索が決定されたか判定する（Ｓ２０１）。【０１６１】
処理部１０１１は、Ｎ面のコントローラの探索が決定されなかったと判定した場合（Ｓ２０１：ＮＯ）、即ちＣ面のコントローラの探索が決定された場合、対象ＬＤＥＶへアクセスするホストパスの本数ＨＰをコントローラ毎に検出する（Ｓ２０２）。この検出には、図１９に示すホストパス本数情報１４０８を用いる。【０１６２】
さらに、処理部１０１１は、対象ＬＤＥＶに対応する記憶装置へのＨＤＤパスの本数ＳＰをコントローラ毎に検出する（Ｓ２０３）。この検出には、図２０に示すＨＤＤアクセスパス本数情報１４１０を用いる。【０１６３】
処理部１０１１は、ホストパスの本数ＨＰとＨＤＤパスの本数ＳＰとの合計をコントローラ毎に算出し、その合計値（ＨＰ＋ＳＰ）の大きい順に、キャッシュ負荷が所定の閾値以下であるか調べ、最初のキャッシュ負荷が閾値以下であると判定したコントローラを選択する（Ｓ２０４）。ただし、このステップＳ２０４では、処理部１０１１の設けられているコントローラと、「閉塞」または「閉塞移行中」のいずれかの状態にあるコントローラとは、選択対象から除外する。【０１６４】
処理部１０１１は、属性決定処理によりＮ面のコントローラの探索が決定されると（Ｓ２０１：ＹＥＳ）、キャッシュ負荷が最少のコントローラを選択する（Ｓ２０５）。第３のコントローラ選択方法では、Ｎ面のキャッシュスロットは、単なるデータバックアップ用に使用するため、応答性能を問う必要はない。ただし、ステップＳＳ２０５も、処理部１０１１の設けられているコントローラと、「閉塞」または「閉塞移行中」のいずれかの状態にあるコントローラとは、選択対象から除外する。【０１６５】
このように第３のコントローラ選択方法では、Ｃ面のコントローラを探す場合、対象ＬＤＥＶに対応する、ホストパスの本数およびＨＤＤパスの本数の、合計値に基づいて探索するため、ストレージ装置ＳＤの応答性能を維持できる。【０１６６】
図３８は、コントローラ選択の第４方法を示す。第４のコントローラ選択方法は、キャッシュメモリ１３０に割り当てられた、Ｃ面のキャッシュスロットの割合またはＮ面のキャッシュスロットの割合と、キャッシュ負荷とに基づいてコントローラを選択する。【０１６７】
処理部１０１１は、属性決定処理により、Ｎ面のコントローラを探すことが決定されたか判定する（Ｓ２１１）。【０１６８】
Ｎ面のコントローラの探索が決定されていない場合（Ｓ２１１：ＮＯ）、即ちＣ面のコントローラの探索が決定された場合、処理部１０１１は、自コントローラ以外の正常な他の全てのコントローラから、”Ｃ面クリーン”のキャッシュスロット数と”Ｃ面ダーティ”のキャッシュスロット数との合計値ＳＬ１と、キャッシュメモリの持つキャッシュスロットの総数ＴＳとを取得する（Ｓ２１２）。つまり、ステップＳ２１２での合計値ＳＬ１は、Ｃ面として使用されているキャッシュスロットの合計値を意味する。自コントローラとは、本処理の判定主体である処理部１０１１が動作しているコントローラである。【０１６９】
処理部１０１１は、Ｃ面として使用されているキャッシュスロットの合計値ＳＬ１をキャッシュスロットの総数ＴＳで割った値を少ない順に並べ、キャッシュ負荷が所定の閾値以下であるか検査し、キャッシュ負荷が閾値以下であると最初に判定したコントローラを選択する（Ｓ２１３）。【０１７０】
これに対し、Ｎ面のコントローラを探すことが決定された場合（Ｓ２１１：ＹＥＳ）、処理部１０１１は、自コントローラ以外の正常な他の全てのコントローラから、”Ｎ面ダーティ”のキャッシュスロット数ＳＬ１と、キャッシュスロットの総数ＴＳとを取得する（Ｓ２１４）。【０１７１】
処理部１０１１は、Ｎ面ダーティの使用量ＳＬ１をキャッシュスロット総数ＴＳで割った値を少ない順に並べ、キャッシュ負荷が所定の閾値以下であるか検査し、キャッシュ負荷が閾値以下であると最初に判定したコントローラを選択する（Ｓ２３１）。【０１７２】
このように第４のコントローラ選択方法では、Ｃ面のコントローラを探す場合、Ｃ面としての使用量の少ないコントローラであって、かつキャッシュ負荷が閾値以下のコントローラを選択する。これにより、ストレージ装置ＳＤ内では、Ｃ面として使用するキャッシュスロットが各コントローラ間でほぼ均等に分散していく。使用頻度の高いＣ面のキャッシュスロットが各コントローラ間で分散することで、各コントローラの負荷や性能に偏りが生じるのを抑制できる。Ｎ面で使用しているキャッシュスロットは、いずれデステージ処理の結果解放されてフリー状態になるため、Ｎ面のキャッシュスロットをコントローラ間で均等に分散させる必要に乏しい。【０１７３】
図３９は、図３６のステップＳ１９０、図３７のステップＳ２００、図３８のステップＳ２１０で示した属性決定処理の詳細を示すフローチャートである。本実施例では、図２９〜図３３で述べたキャッシュスロット遷移方式に従って、属性を決定する。【０１７４】
閉塞するコントローラ内のキャッシュスロットの属性と同一属性のキャッシュスロットを探すことが事前に選択されている場合（Ｓ２２０）、処理部１０１１は、図４０に示す第１の属性決定方法を実施する（Ｓ２２１）。【０１７５】
図４０を参照する。第１の属性決定方法では、二重化元コントローラ内のキャッシュスロットの属性が入力されて開始される。処理部１０１１は、入力された属性がＮ面であるか判定する（Ｓ２４０）。入力された属性がＮ面の場合（Ｓ２４０：ＹＥＳ）、二重化元のコントローラの持つキャッシュスロットの属性はＮ面、検索対象のコントローラで使用するキャッシュスロットの属性はＣ面と、出力される。【０１７６】
以下、二重化元コントローラの持つキャッシュスロットの属性を二重化元コントローラの属性と略記し、検索対象のコントローラで使用するキャッシュスロットの属性を検索対象のコントローラの属性と略記する。【０１７７】
入力された属性がＮ面ではない場合（Ｓ２４０：ＮＯ）、二重化元コントローラの属性はＣ面、検索対象のコントローラの属性はＮ面と、出力される。【０１７８】
図３９に戻る。キャッシュスロット遷移方式として、常にＮ面のキャッシュスロットを探すことが選択されている場合（Ｓ２２２）、処理部１０１１は、図４１に示す第２の属性決定方法を実行する（Ｓ２２３）。【０１７９】
図４１を参照する。第２の属性決定方法では、二重化元コントローラの属性がＮ面であるかＣ面であるかを問わずに、常に、二重化元コントローラの属性はＣ面、検索対象のコントローラの属性はＮ面と、出力される（Ｓ２５０）。【０１８０】
図３９に戻る。キャッシュスロット遷移方式として、常にＣ面のキャッシュスロットを探すことが選択されている場合（Ｓ２２４）、図４２に示す第３の属性決定方法を実行する（Ｓ２２５）。【０１８１】
図４２を参照する。第３の属性決定方法では、二重化元コントローラの属性がＣ面であるかＮ面であるかを問わずに、常に、二重化元コントローラの属性はＮ面、検索対象のコントローラの属性はＣ面と、出力される（Ｓ２６０）。【０１８２】
図３９へ戻る。キャッシュスロット遷移方式として、ホストパスの多いコントローラをＣ面のコントローラとして選択することが設定されている場合（Ｓ２２６）、処理部１０１１は、図４３に示す第４の属性決定方法を実行する（Ｓ２２７）。【０１８３】
図４３を参照する。第４の属性決定方法では、処理部１０１１は、入力された属性、すなわち二重化元コントローラの持つキャッシュスロットの属性がＮ面であるか判定する（Ｓ２７０）。【０１８４】
二重化元コントローラの属性がＮ面の場合（Ｓ２７０：ＹＥＳ）、処理部１０１１は、コントローラごとに、対象ＬＤＥＶへのホストパスの本数を検出する（Ｓ２７１）。処理部１０１１は、ホストパスの本数の多い順にコントローラを並び替え、キャッシュ負荷が所定の閾値以下であるか検査し、キャッシュ負荷が閾値以下であると最初に判定したコントローラをＣ面として使用するコントローラの候補として選択する（Ｓ２７２）。【０１８５】
処理部１０１１は、ステップＳ２７２で選択したコントローラ候補が自コントローラであるか判定する（Ｓ２７３）。処理部１０１１は、自コントローラを候補として選択しなかった場合（Ｓ２７３：ＮＯ）、二重化元コントローラの属性をＮ面、検索対象のコントローラの属性をＣ面として出力する（Ｓ２７４）。処理部１０１１は、自コントローラを候補として選択した場合（Ｓ２７３：ＹＥＳ）、二重化元コントローラの属性をＣ面、検索対象のコントローラの属性をＮ面として出力する（Ｓ２７５）。【０１８６】
一方、二重化元コントローラの属性がＮ面ではない場合（Ｓ２７０：ＮＯ）、処理部１０１１は、二重化元コントローラの属性をＣ面、検索対象のコントローラの属性をＮ面として出力する（Ｓ２７６）。【０１８７】
図３９へ戻る。キャッシュスロット遷移方式として、ホストパスの本数およびＨＤＤパスの本数の合計値の多いコントローラをＣ面のコントローラとして選択することが設定されている場合（Ｓ２２８）、処理部１０１１は、図４４に示す第５の属性決定方法を実行する（Ｓ２２９）。【０１８８】
図４４を参照する。第５の属性決定方法では、処理部１０１１は、入力された属性がＮ面であるか判定する（Ｓ２８０）。入力された属性がＮ面である場合（Ｓ２８０：ＹＥＳ）、即ち二重化元コントローラの属性がＮ面の場合、処理部１０１１は、コントローラ毎に、対象ＬＤＥＶへのホストパスの本数ＨＰを検出する（Ｓ２８１）。続けて、処理部１０１１は、コントローラ毎に、対象ＬＤＥＶに対応する記憶装置２１へ直接アクセスするＨＤＤパスの本数ＳＰを検出する（Ｓ２８２）。【０１８９】
処理部１０１１は、ホストパスの本数ＨＰとＨＤＤパスの本数ＳＰとの合計値の多い順にコントローラを並び替え、キャッシュ負荷が所定の閾値以下であるかを判定し、キャッシュ負荷が閾値以下であると最初に判定したコントローラをＣ面のコントローラの候補として選択する（Ｓ２８３）。ただし、ステップＳ２８３では、「閉塞」または「閉塞移行中」のいずれかの状態にあるコントローラとは、選択対象から除外する。【０１９０】
処理部１０１１は、Ｃ面のコントローラの候補として自コントローラを選択したか判定する（Ｓ２８４）。自コントローラ以外の他のコントローラがＣ面のコントローラの候補として選択された場合（Ｓ２８４：ＮＯ）、処理部１０１１は、二重化元コントローラの属性をＮ面、検索対象のコントローラの属性をＣ面として出力する（Ｓ２８５）。【０１９１】
Ｃ面のコントローラ候補として自コントローラを選択した場合（Ｓ２８４：ＹＥＳ）、処理部１０１１は、二重化元コントローラの属性をＣ面、検索対象のコントローラの属性をＮ面として出力する（Ｓ２８６）。【０１９２】
一方、入力された属性がＮ面ではない場合（Ｓ２８０：ＮＯ）、つまり二重化元コントローラの属性がＣ面の場合、処理部１０１１は、二重化元コントローラの属性をＣ面、検索対象のコントローラの属性をＮ面として出力する（Ｓ２８７）。【０１９３】
図３９に戻る。キャッシュスロット遷移方式として、ＨＤＤパスの本数の多いコントローラをＮ面のコントローラとして選択することが設定されている場合（Ｓ２３０）、処理部１０１１は、図４５に示す第６の属性決定方法を実行する（Ｓ２３１）。【０１９４】
図４５を参照する。第６の属性決定方法では、処理部１０１１は、入力された属性がＣ面であるか判定する（Ｓ２９０）。入力された属性がＣ面の場合（Ｓ２９０：ＹＥＳ）、処理部１０１１は、コントローラ毎に、対象ＬＤＥＶに対応する記憶装置２１へ直接アクセスできるＨＤＤパスの本数を検出する（Ｓ２９１）。処理部１０１１は、ＨＤＤパスの多い順にコントローラを並び替え、キャッシュ負荷が所定の閾値以下であるか検査し、キャッシュ負荷が閾値以下であると最初に判定したコントローラを、Ｎ面のコントローラの候補として選択する（Ｓ２９２）。ただし、ステップＳ２９２では、「閉塞」または「閉塞移行中」のいずれかの状態にあるコントローラは、選択対象から除外する。【０１９５】
処理部１０１１は、Ｎ面のコントローラ候補として自コントローラを選択したか判定する（Ｓ２９３）。処理部１０１１は、自コントローラを選択しなかった場合（Ｓ２９３：ＮＯ）、二重化元コントローラの属性をＣ面、検索対象のコントローラの属性をＮ面として出力する（Ｓ２９４）。【０１９６】
これに対し、処理部１０１１は、Ｎ面のコントローラ候補として自コントローラを選択した場合（Ｓ２９３：ＹＥＳ）、二重化元コントローラの属性をＮ面、検索対象のコントローラの属性をＣ面として出力する（Ｓ２９５）。【０１９７】
一方、処理部１０１１は、入力された属性がＣ面ではない場合（Ｓ２９０：ＮＯ）、二重化元コントローラの属性をＮ面、検索対象のコントローラの属性をＣ面として出力する（Ｓ２９６）。【０１９８】
図３９に戻る。キャッシュスロット遷移方式として、キャッシュ負荷の最も少ないコントローラをＮ面のコントローラとして選択することが設定されている場合、処理部１０１１は、入力された属性がＣ面であるか判定する（Ｓ３００）。【０１９９】
処理部１０１１は、入力された属性がＣ面の場合（Ｓ３００：ＹＥＳ）、キャッシュ負荷の最も少ないコントローラをＮ面のコントローラ候補として選択する（Ｓ３０１）。ただし、ステップＳ３０１では、「閉塞」または「閉塞移行中」のいずれかの状態にあるコントローラは、選択対象から除外する。【０２００】
処理部１０１１は、Ｎ面のコントローラ候補として自コントローラを選択したか判定する（Ｓ３０２）。処理部１０１１は、自コントローラを選択しなかった場合（Ｓ３０２：ＮＯ）、二重化元コントローラの属性をＣ面、検索対象のコントローラの属性をＮ面として出力する（Ｓ３０３）。これに対し、処理部１０１１は、自コントローラをＮ面のコントローラ候補として選択した場合（Ｓ３０２：ＹＥＳ）、二重化元コントローラの属性をＮ面、検索対象のコントローラの属性をＣ面として出力する（Ｓ３０４）。【０２０１】
このように構成される本実施例のストレージ装置ＳＤでは、各コントローラ１はそれぞれ縮退復旧処理部１０１１を備えており、キャッシュデータの二重化について自律分散システムを形成している。このため、閉塞したコントローラ１とペアを形成する正常なコントローラ１は、閉塞したコントローラ１の代わりとなる新たなペア先のコントローラ１を自ら選択して、二重化対象のキャッシュデータを新たなペア先となるコントローラへ転送し、ペアを再形成する。【０２０２】
本実施例では、各コントローラ１が、キャッシュデータのペアを再形成すべきかをＬＤＥＶ単位で判断し、新たなペア先となるコントローラを選択してペアを再形成する。このため、本実施例では、一つの管理装置で一元的に管理する場合に比べて、可用性を高くすることができる。【０２０３】
本実施例では、ＬＤＥＶ単位でキャッシュデータのペアを再形成するため、ペア先のコントローラを柔軟に選択できる。【０２０４】
なお、本発明は、上記実施例に限定されず、様々な変形例を含む。例えば、上記実施例は本発明を分かりやすく説明したものであり、本発明は実施例で説明した全ての構成を備える必要はない。実施例で述べた構成の少なくとも一部を、他の構成に変更したり、削除したりすることができる。さらに、実施例に新構成を追加することもできる。【０２０５】
実施例で述べた機能や処理などの一部または全部を、ハードウェア回路として実現してもよいし、ソフトウェアとして実現してもよい。コンピュータプログラムや各種データは、計算機内の記憶装置に限らず、計算機外部の記憶装置へ格納してもよい。
【符号の説明】
【０２０６】
１：コントローラ、２：ドライブボックス、３：ホスト、１４：メモリ、２１：記憶装置、２４：ＬＤＥＶ、１０１：キャッシュ管理プログラム、１３０：キャッシュメモリ、１０１１：縮退復旧処理部
【図１】
2018011844.tif 000003
【図２】
2018011844.tif 000004
【図３】
2018011844.tif 000005
【図４】
2018011844.tif 000006
【図５】
2018011844.tif 000007
【図６】
2018011844.tif 000008
【図７】
2018011844.tif 000009
【図８】
2018011844.tif 000010
【図９】
2018011844.tif 000011
【図１０】
2018011844.tif 000012
【図１１】
2018011844.tif 000013
【図１２】
2018011844.tif 000014
【図１３】
2018011844.tif 000015
【図１４】
2018011844.tif 000016
【図１５】
2018011844.tif 000017
【図１６】
2018011844.tif 000018
【図１７】
2018011844.tif 000019
【図１８】
2018011844.tif 000020
【図１９】
2018011844.tif 000021
【図２０】
2018011844.tif 000022
【図２１】
2018011844.tif 000023
【図２２】
2018011844.tif 000024
【図２３】
2018011844.tif 000025
【図２４】
2018011844.tif 000026
【図２５】
2018011844.tif 000027
【図２６】
2018011844.tif 000028
【図２７】
2018011844.tif 000029
【図２８】
2018011844.tif 000030
【図２９】
2018011844.tif 000031
【図３０】
2018011844.tif 000032
【図３１】
2018011844.tif 000033
【図３２】
2018011844.tif 000034
【図３３】
2018011844.tif 000035
【図３４】
2018011844.tif 000036
【図３５】
2018011844.tif 000037
【図３６】
2018011844.tif 000038
【図３７】
2018011844.tif 000039
【図３８】
2018011844.tif 000040
【図３９】
2018011844.tif 000041
【図４０】
2018011844.tif 000042
【図４１】
2018011844.tif 000043
【図４２】
2018011844.tif 000044
【図４３】
2018011844.tif 000045
【図４４】
2018011844.tif 000046
【図４５】
2018011844.tif 000047
【図４６】
2018011844.tif 000048
【国際調査報告】
2018011844.tif 000049
2018011844.tif 000050
2018011844.tif 000051
2018011844.tif 000052