(57)【要約】【課題】キャッシュ領域に格納された更新頻度が高いデータを正確に管理する。【解決手段】記憶部１２は、キャッシュメモリ１１に格納されたデータブロックのうち読み出しが要求された第１のデータブロックがＬＲＵ方式で管理されるリスト１２ａと、キャッシュメモリ１１に格納されたデータブロックのうち書き込みが要求された第２のデータブロックがＬＲＵ方式で管理されるリスト１２ｂとを記憶する。制御部１３は、リスト１２ｂに属する第２のデータブロックのうちデータブロック１４の読み出しが要求されたとき、リスト１２ｂの状態をそのまま維持するとともに、リスト１２ａにおけるデータブロック１４の所属状態を更新する。【選択図】図１
2018088020.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置に対するアクセスをキャッシュメモリを用いて制御するストレージ制御装置において、
前記キャッシュメモリに格納されたデータブロックのうち読み出しが要求された第１のデータブロックがＬＲＵ（Least Recently Used）方式で管理される第１のリストと、前記キャッシュメモリに格納されたデータブロックのうち書き込みが要求された第２のデータブロックがＬＲＵ方式で管理される第２のリストとを記憶する記憶部と、
前記第２のリストに属する前記第２のデータブロックのうち第３のデータブロックの読み出しが要求されたとき、前記第２のリストの状態をそのまま維持するとともに、前記第１のリストにおける前記第３のデータブロックの所属状態を更新する制御部と、
を有するストレージ制御装置。
【請求項２】
前記記憶部は、ＬＲＵ方式で管理される第３のリストをさらに記憶し、
前記制御部は、さらに、前記第１のリストに属する前記第１のデータブロックのうち第４のデータブロックの読み出しが要求されたとき、前記第４のデータブロックの所属先を前記第１のリストから前記第３のリストに移動させ、
前記第３のデータブロックの所属状態の更新では、前記第３のデータブロックが前記第１のリストにも属する場合、前記第３のデータブロックの所属先を前記第１のリストから前記第３のリストに移動させる、
請求項１記載のストレージ制御装置。
【請求項３】
前記第３のデータブロックの所属状態の更新では、前記第３のデータブロックが前記第１のリストに属さない場合、前記第３のデータブロックを前記第１のリストにも所属させる、
請求項２記載のストレージ制御装置。
【請求項４】
前記記憶部は、ＬＲＵ方式で管理される第４のリストをさらに記憶し、
前記制御部は、さらに、
前記第２のリストに属する前記第２のデータブロックのうち第５のデータブロックの更新が要求されたとき、更新された前記第５のデータブロックの所属先を前記第２のリストから前記第４のリストに移動させ、
前記第４のリストに属する第６のデータブロックの読み出しが要求されたとき、前記第２のリストの状態をそのまま維持するとともに、前記第１のリストにおける前記第６のデータブロックの所属状態を更新する、
請求項２または３記載のストレージ制御装置。
【請求項５】
前記制御部は、さらに、前記第４のリストに属する前記第６のデータブロックの更新が要求されたとき、前記第４のリストにおける前記第６のデータブロックの要素を前記第４のリストの先頭に移動させる、
請求項４記載のストレージ制御装置。
【請求項６】
前記制御部は、さらに、前記キャッシュメモリに格納された第７のデータブロックが、前記第１乃至第４のリストのいずれにも所属しなくなった場合、前記第７のデータブロックを前記キャッシュメモリから追い出す、
請求項４または５記載のストレージ制御装置。
【請求項７】
前記記憶部は、ＬＲＵ方式で管理される第５のリストをさらに記憶し、
前記制御部は、さらに、
前記第１のリストから追い出されたデータブロックを前記第５のリストに所属させ、
前記第５のリストに所属する第８のデータブロックの読み出しが要求されたとき、前記第８のデータブロックの所属先を前記第５のリストから前記第３のリストに移動させるとともに、前記第１のリストの大きさの比の目標値を算出する、
請求項４乃至６のいずれか１項に記載のストレージ制御装置。
【請求項８】
前記制御部は、前記第８のデータブロックの読み出しが要求されたとき、前記第５のリストにおける前記第８のデータブロックの位置に基づいて、前記第１のリストと前記第３のリストの大きさの目標値、または、前記第１のリストと前記第２のリストもしくは前記第４のリストの大きさの目標値のいずれかを算出する、
請求項７記載のストレージ制御装置。
【請求項９】
記憶装置と、前記記憶装置に対するアクセスをキャッシュメモリを用いて制御するストレージ制御装置と、を有し、
前記ストレージ制御装置は、
前記キャッシュメモリに格納されたデータブロックのうち読み出しが要求された第１のデータブロックがＬＲＵ方式で管理される第１のリストと、前記キャッシュメモリに格納されたデータブロックのうち書き込みが要求された第２のデータブロックがＬＲＵ方式で管理される第２のリストとを記憶する記憶部と、
前記第２のリストに属する前記第２のデータブロックのうち第３のデータブロックの読み出しが要求されたとき、前記第２のリストの状態をそのまま維持するとともに、前記第１のリストにおける前記第３のデータブロックの所属状態を更新する制御部と、
を有するストレージシステム。
【請求項１０】
記憶装置に対するアクセスをキャッシュメモリを用いて制御するストレージ制御方法において、
コンピュータが、
前記キャッシュメモリに格納された第３のデータブロックの読み出しが要求されたとき、前記キャッシュメモリに格納されたデータブロックのうち書き込みが要求された第２のデータブロックがＬＲＵ方式で管理される第２のリストを参照し、
前記第３のデータブロックが前記第２のリストに属する場合、前記第２のリストの状態をそのまま維持するとともに、前記キャッシュメモリに格納されたデータブロックのうち読み出しが要求された第１のデータブロックがＬＲＵ方式で管理される第１のリストにおける、前記第３のデータブロックの所属状態を更新する、
ストレージ制御方法。
【請求項１１】
記憶装置に対するアクセスをキャッシュメモリを用いて制御するストレージ制御プログラムにおいて、
コンピュータに、
前記キャッシュメモリに格納された第３のデータブロックの読み出しが要求されたとき、前記キャッシュメモリに格納されたデータブロックのうち書き込みが要求された第２のデータブロックがＬＲＵ方式で管理される第２のリストを参照し、
前記第３のデータブロックが前記第２のリストに属する場合、前記第２のリストの状態をそのまま維持するとともに、前記キャッシュメモリに格納されたデータブロックのうち読み出しが要求された第１のデータブロックがＬＲＵ方式で管理される第１のリストにおける、前記第３のデータブロックの所属状態を更新する、
処理を実行させるストレージ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、ストレージシステム、ストレージ制御方法およびストレージ制御プログラムに関する。
【背景技術】
【０００２】
キャッシュ領域を管理するためのデータ置換アルゴリズムとして、ＡＲＣ（Adaptive Replacement Cache）が知られている。ＡＲＣでは、キャッシュ領域は、Ｒｅｃｅｎｃｙを基に管理される領域とＦｒｅｑｕｅｎｃｙを基に管理される領域とに分割される。また、各領域から追い出されたデータの履歴に基づいて、各領域の大きさが最適化される。
【０００３】
また、ＡＲＣをベースとした技術として、Ｈ−ＡＲＣ（Hierarchical−ＡＲＣ）が知られている。Ｈ−ＡＲＣでは、キャッシュ領域がさらにダーティデータ用とクリーンデータ用とに分割される。
【０００４】
また、キャッシュに関連する次のような技術が提案されている。例えば、ディスクドライブが有するフラッシュメモリに格納されているデータブロックを、ＡＲＣで管理するようにしたハイブリッドディスクドライブが提案されている。また、ライトバック対象のダーティデータをキャッシュ領域上で圧縮して、ディスクドライブへのライトに備えるようにしたディスク制御装置が提案されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−１９６７５５号公報
【特許文献２】特開平７−１２９４７０号公報
【非特許文献】
【０００６】
【非特許文献１】「Ｈ−ＡＲＣ： Ａ Ｎｏｎ−Ｖｏｌａｔｉｌｅ Ｍｅｍｏｒｙ Ｂａｓｅｄ Ｃａｃｈｅ Ｐｏｌｉｃｙ ｆｏｒ Ｓｏｌｉｄ Ｓｔａｔｅ Ｄｒｉｖｅｓ」
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、Ｈ−ＡＲＣでは、キャッシュ領域に格納されたデータが４つのＬＲＵ（Least Recently Used）リストによって管理される。第１、第２のリストは、クリーンデータを管理し、第３、第４のリストは、ダーティデータを管理する。また、第１のリストに属するデータのリードが要求されると、このデータは第２のリストに移動する。これにより、第２のリストでは、第１のリストと比較してリード頻度の高いデータが管理される。また、第３のリストに属するデータの更新が要求されると、このデータは第４のリストに移動する。これにより、第４のリストでは、第３のリストと比較して更新頻度の高いデータが管理される。
【０００８】
しかし、Ｈ−ＡＲＣでは、第３のリストに属するデータのリードが要求された場合、このデータは、更新頻度が高いとは言えないにもかかわらず、第４のリストに移動してしまう。このため、更新頻度が高いデータを正確に管理できなくなり、キャッシュ領域の管理効率が悪化するという問題がある。
【０００９】
１つの側面では、本発明は、キャッシュ領域に格納されたデータの更新頻度を正確に管理できるストレージ制御装置、ストレージシステム、ストレージ制御方法およびストレージ制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
１つの態様では、記憶装置に対するアクセスをキャッシュメモリを用いて制御するストレージ制御装置が提供される。このストレージ制御装置は、記憶部と制御部とを有する。記憶部は、キャッシュメモリに格納されたデータブロックのうち読み出しが要求された第１のデータブロックがＬＲＵ（Least Recently Used）方式で管理される第１のリストと、キャッシュメモリに格納されたデータブロックのうち書き込みが要求された第２のデータブロックがＬＲＵ方式で管理される第２のリストとを記憶する。制御部は、第２のリストに属する第２のデータブロックのうち第３のデータブロックの読み出しが要求されたとき、第２のリストの状態をそのまま維持するとともに、第１のリストにおける第３のデータブロックの所属状態を更新する。
【００１１】
また、１つの態様では、上記の記憶装置とストレージ制御装置とを有するストレージシステムが提供される。
さらに、１つの態様では、記憶装置に対するアクセスをキャッシュメモリを用いて制御するストレージ制御方法が提供される。このストレージ制御方法では、コンピュータは、キャッシュメモリに格納された第３のデータブロックの読み出しが要求されたとき、キャッシュメモリに格納されたデータブロックのうち書き込みが要求された第２のデータブロックがＬＲＵ方式で管理される第２のリストを参照し、第３のデータブロックが第２のリストに属する場合、第２のリストの状態をそのまま維持するとともに、キャッシュメモリに格納されたデータブロックのうち読み出しが要求された第１のデータブロックがＬＲＵ方式で管理される第１のリストにおける、第３のデータブロックの所属状態を更新する。
【００１２】
また、１つの態様では、上記のストレージ制御方法と同様の処理をコンピュータに実行させるストレージ制御プログラムが提供される。
【発明の効果】
【００１３】
１つの側面では、キャッシュ領域に格納された更新頻度が高いデータを正確に管理できる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態のストレージシステムを示す図である。
【図２】第２の実施の形態のストレージシステムを示す図である。
【図３】ＣＭのハードウェア例を示す図である。
【図４】ＣＭが備える機能の構成例を示す図である。
【図５】キャッシュ管理方法の比較例を示す図である。
【図６】第２の実施の形態で利用されるエントリのリストの例を示す図である。
【図７】Ｒ系リストおよびＤ系リストの管理方法について説明するための図である。
【図８】リスト管理テーブルのデータ構成例を示す図である。
【図９】メタデータのデータ構成例を示す図である。
【図１０】リスト操作の一例を示す図である。
【図１１】ページ分類表の例を示す図である。
【図１２】Ｉ／Ｏ処理時の推移表の例を示す図である。
【図１３】ページ解放判定時の推移表の例を示す図である。
【図１４】キャッシュリストの大きさの調整方法の例を示す図である。
【図１５】理想長増減テーブルの例を示す図である。
【図１６】キャッシュ制御処理の例を示すフローチャート（その１）である。
【図１７】キャッシュ制御処理の例を示すフローチャート（その２）である。
【図１８】キャッシュ制御処理の例を示すフローチャート（その３）である。
【発明を実施するための形態】
【００１５】
以下、本実施の形態について図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態のストレージシステムを示す図である。図１に示すストレージシステムは、ストレージ制御装置１０と記憶装置２０とを有する。ストレージ制御装置１０は、記憶装置２０へのアクセスを、キャッシュメモリ１１を用いて制御する。例えば、ストレージ制御装置１０は、図示しないホスト装置から記憶装置２０へのアクセス要求を受信し、アクセスが要求されたデータをキャッシュメモリ１１に一時的に格納する。その後、ストレージ制御装置１０は、ホスト装置からアクセス要求を受信したとき、アクセスが要求されたデータがキャッシュメモリ１１に存在する場合、キャッシュメモリ１１にアクセスすることでアクセス速度を向上させる。記憶装置２０は、例えば、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）を１台または複数台備えている。
【００１６】
ストレージ制御装置１０は、上記のキャッシュメモリ１１に加えて、記憶部１２と制御部１３とを有する。記憶部１２は、例えば、ＲＡＭ（Random Access Memory）などの揮発性記憶装置の記憶領域として実装される。また、記憶部１２とキャッシュメモリ１１は、同一の記憶装置によって実現されてもよい。制御部１３は、例えば、プロセッサである。プロセッサには、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。また、制御部１３は、マルチプロセッサであってもよい。
【００１７】
記憶部１２は、リスト１２ａ，１２ｂを記憶する。リスト１２ａにおいては、キャッシュメモリ１１に格納されたデータブロックのうち、読み出しが要求されたデータブロックが、ＬＲＵ方式で管理される。リスト１２ｂにおいては、キャッシュメモリ１１に格納されたデータブロックのうち、書き込みが要求されたデータブロックが、ＬＲＵ方式で管理される。
【００１８】
なお、図１では例として、記憶部１２はさらに、リスト１２ｃ，１２ｄを記憶している。リスト１２ｃには、リスト１２ａに属するデータブロックの読み出しが要求された場合に、このデータブロックの所属先がリスト１２ａから移動される。これにより、リスト１２ｃには、リスト１２ａと比較して読み出し頻度の高いデータブロックが所属することになる。リスト１２ｄには、リスト１２ｂに属するデータブロックの更新が要求された場合に、このデータブロックの所属先がリスト１２ｂから移動される。これにより、リスト１２ｄには、リスト１２ｂと比較して更新頻度の高いデータブロックが所属することになる。また、リスト１２ｃ，１２ｄが記憶される場合、キャッシュメモリ１１に格納されたあるデータブロックが、リスト１２ａ〜１２ｄのいずれにも所属しなくなると、このデータブロックはキャッシュメモリ１１から追い出される。
【００１９】
制御部１３は、例えば、キャッシュメモリ１１に格納されたデータブロック１４の読み出し要求を受信すると、次のような処理を実行する。制御部１３は、リスト１２ｂを参照し、データブロック１４がリスト１２ｂに属しているかを判定する（ステップＳ１）。図１では、リストの要素を「エントリ」と記載し、一例として、データブロック１４に対応するエントリ１４ａがリスト１２ｂに含まれている場合を示している。
【００２０】
図１の例のように、データブロック１４がリスト１２ｂに属している場合、制御部１３は、リスト１２ｂの状態をそのまま維持するとともに、リスト１２ａにおけるデータブロック１４の所属状態を更新する（ステップＳ２）。例えば、データブロック１４に対応するエントリ１４ｂがリスト１２ａにすでに含まれている場合、制御部１３は、点線矢印で示すように、エントリ１４ｂをリスト１２ａからリスト１２ｃに移動させる。なお、リスト１２ｃが存在しない場合、エントリ１４ｂはリスト１２ａの先頭に移動されてもよい。また、データブロック１４に対応するエントリ１４ｂがリスト１２ａ，１２ｃに含まれていない場合、制御部１３は、エントリ１４ｂをリスト１２ａに対して新たに追加する。
【００２１】
ここで、リスト１２ｂ，１２ｄにより、キャッシュメモリ１１に格納されたデータブロックの更新頻度が管理される。すなわち、更新頻度の比較的低いデータブロックがリスト１２ｂで管理され、更新頻度の比較的高いデータブロックがリスト１２ｄで管理される。また、リスト１２ｄが存在しない場合でも、リスト１２ｂにより、キャッシュメモリ１１に格納されたデータブロックの更新頻度が管理される。すなわち、更新頻度の高いデータブロックほど、リスト１２ｂに長く所属する。
【００２２】
本実施の形態のストレージ制御装置１０によれば、上記のように、リスト１２ｂに属するデータブロック１４の読み出しが要求された場合、リスト１２ｂの状態がそのまま維持される。これにより、読み出し要求が、リスト１２ｂ、またはリスト１２ｂ，１２ｄによる更新頻度の管理に影響を与えなくなる。したがって、ストレージ制御装置１０は、キャッシュメモリ１１に格納されたデータブロックの更新頻度を正確に管理できるようになる。
【００２３】
一方、リスト１２ｂに属するデータブロック１４の読み出しが要求された場合、リスト１２ｂでなく、リスト１２ａにおけるデータブロック１４の所属状態が更新される。したがって、ストレージ制御装置１０は、リスト１２ａ、またはリスト１２ａ，１２ｃを用いて、キャッシュメモリ１１に格納されたデータブロックの読み出し頻度を管理できる。
【００２４】
［第２の実施の形態］
図２は、第２の実施の形態のストレージシステムを示す図である。図２に示すストレージシステムは、ストレージ装置１００およびホスト装置４００を含む。ストレージ装置１００とホスト装置４００とは、例えば、ファイバチャネル（ＦＣ：Fibre Channel）やｉＳＣＳＩ（Internet Small Computer System Interface）などを用いたＳＡＮ（Storage Area Network）を介して接続される。
【００２５】
ストレージ装置１００は、ＣＥ（Controller Enclosure）２００およびＤＥ（Device Enclosure）３００を有する。ＣＥ２００は、ＣＭ（Controller Module）２１０を有する。ＣＭ２１０は、ストレージ装置１００全体を制御する。
【００２６】
ＤＥ３００は、複数の記憶装置を搭載する。ＤＥ３００は、記憶装置としてＨＤＤを備えたディスクアレイ装置である。なお、ＤＥ３００に搭載される記憶装置は、ＳＳＤなどの他の種類の記憶装置であってもよい。
【００２７】
また、ＣＭ２１０は、ホスト装置４００からの要求に応じて、ＤＥ３００に搭載された記憶装置に対するアクセスを制御する。具体的には、ＣＭ２１０は、ＤＥ３００内の記憶装置の物理記憶領域によって実現される論理ボリュームを作成する。論理ボリュームには、ＬＵＮ（Logical Unit Number）が割り当てられる。また、論理ボリュームは、一定サイズの論理ブロックに分割され、各論理ブロックにはＬＢＡ（Logical Block Address）が付与されている。そして、ＣＭ２１０は、ホスト装置４００からのアクセス要求に応じて、論理ボリュームに対するアクセスを制御する。
【００２８】
図３は、ＣＭのハードウェア例を示す図である。ＣＭ２１０は、プロセッサ２１０ａ、ＲＡＭ２１０ｂ、ＳＳＤ２１０ｃ、ＣＡ（Channel Adapter）２１０ｄおよびＤＩ（Device Interface）２１０ｅを有する。
【００２９】
プロセッサ２１０ａは、ＣＭ２１０の情報処理を制御する。プロセッサ２１０ａは、複数のプロセッシング要素を含むマルチプロセッサであってもよい。
ＲＡＭ２１０ｂは、ＣＭ２１０の主記憶装置である。ＲＡＭ２１０ｂは、プロセッサ２１０ａに実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ２１０ｂは、プロセッサ２１０ａによる処理に用いる各種データを記憶する。
【００３０】
ＳＳＤ２１０ｃは、ＣＭ２１０の補助記憶装置である。ＳＳＤ２１０ｃは、不揮発性の半導体メモリである。ＳＳＤ２１０ｃには、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ＣＭ２１０は、補助記憶装置として、ＳＳＤ２１０ｃの代わりにＨＤＤを備えていてもよい。
【００３１】
ＣＡ２１０ｄは、ホスト装置４００と通信するためのインタフェースである。ＤＩ２１０ｅは、ＤＥ３００と通信するためのインタフェースである。
図４は、ＣＭが備える機能の構成例を示す図である。ＣＭ２１０は、記憶部２１１、ホストＩ／Ｏ処理部２１２、キャッシュ制御部２１３およびディスクＩ／Ｏ処理部２１４を有する。
【００３２】
記憶部２１１は、ＲＡＭ２１０ｂに確保した記憶領域として実装される。記憶部２１１は、キャッシュ領域２１１ａと管理情報記憶部２１１ｂとを有する。キャッシュ領域２１１ａは、論理ボリュームに含まれる一部の論理ブロックのデータを一時的に記憶する。キャッシュ領域２１１ａは、ページ単位で管理され、１つのページに１つの論理ブロックのデータが格納される。なお、以下の説明では、論理ブロックのデータを「データブロック」と記載する場合がある。管理情報記憶部２１１ｂは、キャッシュ領域２１１ａへの格納制御で利用される各種の管理情報を記憶する。
【００３３】
ホストＩ／Ｏ処理部２１２、キャッシュ制御部２１３およびディスクＩ／Ｏ処理部２１４は、例えば、プロセッサ２１０ａが実行するプログラムのモジュールとして実装される。
【００３４】
ホストＩ／Ｏ処理部２１２は、ホスト装置４００からアクセス要求（ライト要求またはリード要求）を受信し、アクセス要求に応じた処理をキャッシュ制御部２１３に依頼する。例えば、ライト要求を受信した場合、ホストＩ／Ｏ処理部２１２は、書き込み先アドレスと、ライト要求とともに受信したライトデータとをキャッシュ制御部２１３に受け渡し、ライト処理を依頼する。一方、リード要求を受信した場合、ホストＩ／Ｏ処理部２１２は、読み出し元アドレスをキャッシュ制御部２１３に受け渡し、リード処理を依頼する。そして、ホストＩ／Ｏ処理部２１２は、リードデータをキャッシュ制御部２１３から受け取ってホスト装置４００に送信する。
【００３５】
キャッシュ制御部２１３は、ホストＩ／Ｏ処理部２１２から依頼されたアクセス処理を、キャッシュ領域２１１ａを用いて実行する。すなわち、キャッシュ制御部２１３は、リード要求に応じてＤＥ３００から読み出したデータブロックや、ライトが要求されたデータブロックを、キャッシュ領域２１１ａに一時的に格納する。そして、キャッシュ制御部２１３は基本的に、アクセスが要求されたデータブロックがキャッシュ領域２１１ａに存在する場合、ＤＥ３００にアクセスせずに、キャッシュ領域２１１ａにアクセスすることによってライト処理やリード処理を実行する。また、キャッシュ制御部２１３は、最近アクセスされたデータブロックや、アクセス頻度の高いデータブロックがキャッシュ領域２１１ａに保持されるように、キャッシュ領域２１１ａの読み書き処理を管理する。
【００３６】
ディスクＩ／Ｏ処理部２１４は、キャッシュ制御部２１３からの要求に応じてＤＥ３００にアクセスする。例えば、リードが要求されたデータブロックがキャッシュ領域２１１ａに存在しない場合、ディスクＩ／Ｏ処理部２１４は、キャッシュ制御部２１３からの要求に応じてそのデータブロックをＤＥ３００から読み出す。また、ディスクＩ／Ｏ処理部２１４は、キャッシュ領域２１１ａに存在するダーティデータを、キャッシュ制御部２１３からの要求に応じてＤＥ３００に書き込む。
【００３７】
次に、キャッシュ領域２１１ａの管理方法について説明する。以下の説明では、まず、図５を用いて、第２の実施の形態のキャッシュ管理方法と比較するための比較例について説明した後、図６以降で第２の実施の形態のキャッシュ管理方法について説明する。
【００３８】
図５は、キャッシュ管理方法の比較例を示す図である。この図５では、Ｈ−ＡＲＣを用いたキャッシュ管理方法を示す。
Ｈ−ＡＲＣでは、キャッシュ領域に格納されたデータブロックは、４つのリストＣ１，Ｃ２，Ｄ１ａ，Ｄ２ａによって管理される。リストＣ１，Ｃ２，Ｄ１ａ，Ｄ２ａは、いずれもＬＲＵで管理される。また、キャッシュ領域に格納されたデータブロックは、リストＣ１，Ｃ２，Ｄ１ａ，Ｄ２ａのいずれか１つに属する。
【００３９】
例えば、キャッシュ領域に存在しないデータブロックに対するリードが要求されると、このデータブロックはリストＣ１に追加される。さらに、リストＣ１に属するデータブロックに対するリードが要求されると、このデータブロックの所属先はリストＣ２に移動される。したがって、リストＣ１には、キャッシュ領域に存在しない状態からリードが１回要求されたデータブロックが所属する、また、リストＣ２には、キャッシュ領域に存在しない状態からリードが２回以上要求されたデータブロック、換言すると、リードに関して１回以上キャッシュヒットしたデータブロックが所属する。
【００４０】
また、キャッシュ領域に存在しないデータブロックに対するライトが要求されると、ライトが要求されるデータブロックはリストＤ１ａに追加される。さらに、リストＤ１ａに格納されたデータブロックに対する更新が要求されると、更新後のデータブロックの所属先はリストＤ２ａに移動される。したがって、リストＤ１ａには、キャッシュ領域に存在しない状態からライトが１回要求された論理ブロックのデータが所属する。また、リストＤ２ａには、キャッシュ領域に存在しない状態からライトが２回以上要求されたデータブロック、換言すると、１回以上更新されたデータブロックが所属される。
【００４１】
以上の処理により、リストＣ１，Ｄ１ａは、Ｒｅｃｅｎｃｙを基に管理されるようになり、リストＣ２，Ｄ２ａは、Ｐｏｐｕｌａｒｉｔｙ（またはＦｒｅｑｕｅｎｃｙ）を基に管理されるようになる。
【００４２】
ここで、リストＤ１ａ，Ｄ２ａに属するデータブロックは、リストＤ１ａ，Ｄ２ａから追い出されるときなどの所定のタイミングで、ＤＥ３００にライトバックされる。リストＤ１ａからのライトバックでは、キャッシュ領域に格納された後、更新されなかったデータブロックがライトバックされる。一方、リストＤ２ａからのライトバックでは、キャッシュ領域に格納された後に１回以上更新されたデータブロックがライトバックされる。このため、リストＤ１ａよりリストＤ２ａに属するデータブロックの方が、同じ論理ブロックについて、ホスト装置からの書き込み回数に対するＤＥ３００への相対的な書き込み（ライトバック）回数が少なくなる。
【００４３】
すなわち、更新頻度の高い論理ブロックのデータがリストＤ２ａに保持されることで、そのようなデータをできるだけ長い時間ＤＥ３００にライトバックしないような制御が行われる。これにより、ホスト装置からの書き込み回数全体より、ＤＥ３００への実際の書き込み回数を低減することができる。例えば、バックエンドの記憶装置として、ＳＳＤのような書き込み回数に制限のある記憶装置を用いた場合には、その記憶装置への書き込み回数が低減され、その結果、記憶装置の寿命を延ばすことができる。
【００４４】
なお、Ｈ−ＡＲＣでは、さらにゴーストキャッシュに対応するリストＧＣ１，ＧＣ２，ＧＤ１ａ，ＧＤ２ａが用いられる。リストＧＣ１，ＧＣ２，ＧＤ１ａ，ＧＤ２ａは、いずれもＬＲＵで管理される。リストＧＣ１，ＧＣ２，ＧＤ１ａ，ＧＤ２ａには、それぞれリストＣ１，Ｃ２，Ｄ１ａ，Ｄ２ａから追い出されたデータブロックが追加される。リストＧＣ１，ＧＣ２，ＧＤ１ａ，ＧＤ２ａに属するデータブロックは、キャッシュ領域には実際には格納されておらず、実際にはリストＧＣ１，ＧＣ２，ＧＤ１ａ，ＧＤ２ａにはそれらのデータブロックのメタデータのみがリンクされている。これらのリストＧＣ１，ＧＣ２，ＧＤ１ａ，ＧＤ２ａは、リストＣ１，Ｃ２，Ｄ１ａ，Ｄ２ａの大きさを最適化するために用いられる。
【００４５】
ところで、Ｈ−ＡＲＣには次のような問題がある。上記のように、リストＤ２ａは、Ｐｏｐｕｌａｒｉｔｙ（またはＦｒｅｑｕｅｎｃｙ）を基に管理される。すなわち、リストＤ２ａの目的は、上書きされやすいデータブロックを管理することである。しかし、Ｈ−ＡＲＣでは、リストＤ１ａに属するデータブロックのリードが要求されると、このデータブロックの所属先はリストＤ２ａに移動される。さらに、このデータブロックのリードが続けて要求されると、このデータブロックはリストＤ２ａに所属し続ける。
【００４６】
このような制御は、例えば、次のような理由から行われる。上記のデータブロックは、ライトが要求された後にリードが要求されており、アクセス頻度が高いと考えられることから、Ｐｏｐｕｌａｒｉｔｙを基に管理されるリストに移動させて、キャッシュ領域から落ちにくくするべきと考えられる。ただし、このデータブロックはライトが要求されたダーティデータであるので、リストＤ２ａに移動される。
【００４７】
しかし、上記のようなケースでは、ライトが１回しか要求されなかったデータブロックがリストＤ２ａに保持されてしまう。すなわち、リード頻度は高いものの、上書きの頻度が高いとは言えない論理ブロックのデータが、リストＤ２ａに保持される。このため、上書きされやすいデータブロックを保持するという本来の目的に合致しないデータブロックが、リストＤ２ａの一部を占拠することになる。その結果、キャッシュ領域の管理効率が悪化し、ＤＥ３００へのライトバック回数の低減効果が阻害されるという問題がある。
【００４８】
以下、第２の実施の形態のキャッシュ管理方法について説明する。本実施の形態では、リードヒットしやすいと考えられるデータブロックを管理するためのリストと、ダーティデータを管理するためのリストとが、互いに独立したリストとして設けられる。これにより、リード頻度が、上書きのされやすさの判定に影響を与えないようにし、上書きされやすい論理ブロックについてのライトバック回数を確実に低減できるようにする。
【００４９】
図６は、第２の実施の形態で利用されるエントリのリストの例を示す図である。本実施の形態では、Ｒ系リスト２２１とＤ系リスト２２２が利用される。Ｒ系リスト２２１は、リードヒットしやすいと考えられるデータブロックに対応するエントリのリストである。Ｄ系リスト２２２は、ダーティデータに対応するエントリのリストである。
【００５０】
ここで、エントリとは、キャッシュ領域２１１ａに格納されたデータブロックのメタデータ、またはキャッシュ領域２１１ａから追い出されたデータブロックのメタデータにリンクするデータである。
【００５１】
また、Ｒ系リスト２２１に属するエントリと、Ｄ系リスト２２２に属するエントリとは、互いに独立している。このため、同じデータブロックのメタデータにリンクするエントリは、Ｒ系リスト２２１とＤ系リスト２２２のどちらか一方だけに存在する場合だけでなく、これらの両方に存在する場合もある。以下、Ｒ系リスト２２１に属するエントリを「Ｒ系エントリ」、Ｄ系リスト２２２に属するエントリを「Ｄ系エントリ」と記載する場合がある。
【００５２】
Ｒ系リスト２２１は、リストＲ１，Ｒ２，ＧＲ１，ＧＲ２を含む。Ｄ系リスト２２２は、リストＤ１，Ｄ２，ＧＤ１，ＧＤ２を含む。リストＲ１，Ｒ２，ＧＲ１，ＧＲ２，Ｄ１，Ｄ２，ＧＤ１，ＧＤ２は、いずれもＬＲＵで管理される。
【００５３】
リストＲ１，Ｒ２は、主にリード要求に応じてキャッシュ領域２１１ａに格納されたデータブロックに対応するエントリが属するリストである。Ｒ系リスト２２１に存在しないエントリに対応するデータブロックのリードが要求されると、このデータブロックに対応するエントリがリストＲ１の先頭（ＭＲＵ側、ＭＲＵ：Most Recently Used）に追加される。また、リストＲ１に存在するエントリに対応するデータブロックのリードが要求されると、このエントリがリストＲ２の先頭（ＭＲＵ側）に移動される。さらに、リストＲ２に存在するエントリに対応するデータブロックのリードが要求された場合も、このエントリがリストＲ２の先頭に移動される。
【００５４】
このような制御により、リストＲ１は、Ｒｅｃｅｎｃｙを基に管理され、リストＲ２は、Ｐｏｐｕｌａｒｉｔｙ（またはＦｒｅｑｕｅｎｃｙ）を基に管理される。すなわち、リストＲ１には、対応するエントリがＲ系リスト２２１に存在しない状態からリードが１回要求されたデータブロックに対応するエントリが保持される。一方、リストＲ２には、対応するエントリがＲ系リスト２２１に存在しない状態からリードが２回以上要求されたデータブロック、換言すると、リストＲ１，Ｒ２において１回以上ヒットしたデータブロックに対応するエントリが保持される。したがって、リストＲ２には、リード頻度が高いと考えられるデータブロックに対応するエントリが保持されることになる。
【００５５】
リストＧＲ１には、リストＲ１から追い出されたエントリが追加される。リストＧＲ２には、リストＲ２から追い出されたエントリが追加される。また、リストＧＲ１，ＧＲ２のいずれかに存在するエントリに対応するデータブロックのリードが要求されると、このエントリがリストＲ２の先頭に移動される。
【００５６】
次に、リストＤ１，Ｄ２は、ライト要求に応じてキャッシュ領域２１１ａに格納されたデータブロックに対応するエントリが属するリストである。Ｄ系リスト２２２に存在しないエントリに対応するデータブロックへのライトが要求されると、このデータブロックに対応するエントリがリストＤ１の先頭（ＭＲＵ側）に追加される。また、リストＤ１に存在するエントリに対応するデータブロックに対して上書きするようなライトが要求されると、このエントリがリストＤ２の先頭（ＭＲＵ側）に移動される。さらに、リストＤ２に存在するエントリに対して上書きするようなライトが要求された場合も、このエントリがリストＤ２の先頭に移動される。
【００５７】
このような制御により、リストＤ１は、Ｒｅｃｅｎｃｙを基に管理され、リストＤ２は、Ｐｏｐｕｌａｒｉｔｙ（またはＦｒｅｑｕｅｎｃｙ）を基に管理される。すなわち、リストＤ１には、対応するエントリがＤ系リスト２２２に存在しない状態からライトが１回要求されたデータブロックに対応するエントリが保持される。一方、リストＤ２には、対応するエントリがＤ系リスト２２２に存在しない状態からライトが２回以上要求されたデータブロック、換言すると、リストＤ１，Ｄ２において１回以上ヒットしたデータブロックに対応するエントリが保持される。したがって、リストＤ２には、ライト頻度が高いと考えられるデータブロックに対応するエントリが保持されることになる。
【００５８】
リストＧＤ１には、リストＤ１から追い出されたエントリが追加される。リストＧＤ２には、リストＤ２から追い出されたエントリが追加される。また、リストＧＤ１，ＧＤ２のいずれかに存在するエントリに対応するデータブロックのライトが要求されると、このエントリがリストＤ２の先頭に移動される。
【００５９】
ここで、リストＤ１，Ｄ２に属するエントリに対応するデータブロックは、リストＤ１，Ｄ２からリストＧＤ１，ＧＤ２に追い出されるときなどの所定のタイミングで、ＤＥ３００にライトバックされる。リストＤ１からのライトバックでは、キャッシュ領域２１１ａに格納された後、更新されなかったデータブロックがライトバックされる。一方、リストＤ２からのライトバックでは、キャッシュ領域２１１ａに格納された後に１回以上更新されたデータブロックがライトバックされる。このため、リストＤ１よりリストＤ２の方が、同じ論理ブロックについて、ホスト装置４００からの書き込み回数に対するＤＥ３００への相対的な書き込み（ライトバック）回数が少なくなる。
【００６０】
すなわち、更新頻度の高い論理ブロックのデータに対応するエントリがリストＤ２に保持されることで、そのようなデータをできるだけ長い時間ＤＥ３００にライトバックしないような制御が行われる。これにより、ホスト装置４００からの書き込み回数全体より、ＤＥ３００への実際の書き込み回数を低減することができる。
【００６１】
なお、本実施の形態では、リストＲ１，Ｒ２は、リードが要求されたデータブロックだけでなく、ライトが要求されたデータブロックに対応するエントリも保持し得るものとする。例えば、対応するエントリがリストＲ１，Ｒ２，Ｄ１，Ｄ２のいずれにも存在しないデータブロックに対するライトが要求された場合に、このデータブロックに対応するエントリは、リストＤ１だけでなくリストＲ１にも追加される。エントリがリストＲ１に追加される理由は、ライトが要求されたデータブロックは、その後にリードが要求される可能性があるので、リードヒットしやすいデータブロックと考えることもできるからである。また、このデータブロックに対するリードがさらに要求された場合には、通常のリードヒット時と同様に、このデータブロックに対応するエントリはリストＲ１からリストＲ２に移動される。
【００６２】
このような制御が行われることで、Ｈ−ＡＲＣの場合とは異なり、リストＲ１，Ｒ２は、ダーティデータに対応するエントリも保持し得る。ただし、リストＲ１，Ｒ２がダーティデータに対応するエントリを保持する場合、このダーティデータに対応するエントリはリストＤ１，Ｄ２のどちらかにも必ず保持されている。
【００６３】
図７は、Ｒ系リストおよびＤ系リストの管理方法について説明するための図である。前述のように、Ｒ系リスト２２１およびＤ系リスト２２２に含まれるエントリは、データブロックのメタデータにリンクするデータである。各エントリは、例えば、メタデータに対するリンク情報と、エントリ自身が属するリストにおける前後のエントリへのポインタとを含む。
【００６４】
図７に示すように、Ｒ系リスト２２１に属する各エントリ、Ｄ系リスト２２２に属する各エントリ、および、エントリからリンクされるメタデータは、管理情報記憶部２１１ｂに記憶される。なお、少なくとも、対応するデータブロックがキャッシュ領域２１１ａに格納されているメタデータは、対応するデータブロックとともにキャッシュ領域２１１ａに格納されていてもよい。また、管理情報記憶部２１１ｂには、Ｒ系リスト２２１およびＤ系リスト２２２を管理するためのリスト管理テーブル２４１も格納される。
【００６５】
ここで、図８は、リスト管理テーブルのデータ構成例を示す図である。リスト管理テーブル２４１には、リストＲ１，Ｒ２，ＧＲ１，ＧＲ２，Ｄ１，Ｄ２，ＧＤ１，ＧＤ２のそれぞれについて、次の情報が登録される。リスト管理テーブル２４１には、例えば、対応するリストを識別するためのリスト名、リスト上の先頭エントリへのポインタ、リスト上の末尾エントリへのポインタ、現在のリスト長、および理想長が登録される。理想長とは、後述する計算によって得られる理想的なリスト長の目標値である。なお、現在のリスト長と理想長は、リストに属するエントリの数によって表される。また、リストＧＲ１，ＧＲ２，ＧＤ１，ＧＤ２にそれぞれ対応するリスト管理テーブル２４１には、理想長は設定されない。
【００６６】
以下、図７に戻って説明を続ける。
前述のＨ−ＡＲＣでは、あるデータブロックに対応するエントリは、リストＣ１，Ｃ２，Ｄ１ａ，Ｄ２ａおよびリストＧＣ１，ＧＣ２，ＧＤ１ａ，ＧＤ２ａにそれぞれ対応するリストのうち、１つだけに属することができた。これに対して、本実施の形態では、Ｒ系リスト２２１に属するエントリとＤ系リスト２２２に属するエントリとは、それぞれ独立している。そして、あるデータブロックに対応するエントリは、Ｒ系リスト２２１だけに属する場合もあるし、Ｄ系リスト２２２だけに属する場合もあるし、Ｒ系リスト２２１とＤ系リスト２２２の両方に属する場合もある。
【００６７】
例えば、図７において、メタデータ２３１ａに対応するエントリとしては、リストＲ１に属するエントリ２２１ａのみが存在している。また、メタデータ２３１ｂに対応するエントリとしては、リストＧＲ１に存在するエントリ２２１ｂのみが存在している。一方、メタデータ２３１ｃに対応するエントリとしては、リストＲ２に属するエントリ２２１ｃと、リストＤ２に属するエントリ２２２ｃとが存在している。また、メタデータ２３１ｄに対応するエントリとしては、リストＲ２に属するエントリ２２１ｄと、リストＧＤ２に属するエントリ２２２ｄとが存在している。
【００６８】
ここで、図９は、メタデータのデータ構成例を示す図である。メタデータ２３１には、例えば、ＬＵＮ、ＬＢＡ、ＧＲ１フラグ、Ｒ１フラグ、Ｒ２フラグ、ＧＲ２フラグ、ＧＤ１フラグ、Ｄ１フラグ、Ｄ２フラグ、ＧＤ２フラグが登録される。
【００６９】
ＬＵＮは、論理ボリュームの識別番号を示し、ＬＢＡは、論理ボリューム上の論理ブロックの識別番号を示す。メタデータ２３１は、データブロック毎に作成される情報であり、ＬＵＮおよびＬＢＡにより、対応するデータブロックが特定される。
【００７０】
ＧＲ１フラグは、対応するエントリがリストＧＲ１に属しているか否かを示す。Ｒ１フラグは、対応するエントリがリストＲ１に属しているか否かを示す。Ｒ２フラグは、対応するエントリがリストＲ２に属しているか否かを示す。ＧＲ２フラグは、対応するエントリがリストＧＲ２に属しているか否かを示す。
【００７１】
メタデータ２３１に対応するエントリがＲ系リスト２２１に属している場合、ＧＲ１フラグ、Ｒ１フラグ、Ｒ２フラグ、ＧＲ２フラグのいずれか１つが“１”に設定され、その他が“０”に設定される。なお、値が“１”の場合、エントリが対応するリストに属していることを示す。一方、メタデータ２３１に対応するエントリがＲ系リスト２２１に属していない場合、ＧＲ１フラグ、Ｒ１フラグ、Ｒ２フラグ、ＧＲ２フラグはいずれも“０”に設定される。
【００７２】
ＧＤ１フラグは、対応するエントリがリストＧＤ１に属しているか否かを示す。Ｄ１フラグは、対応するエントリがリストＤ１に属しているか否かを示す。Ｄ２フラグは、対応するエントリがリストＤ２に属しているか否かを示す。ＧＤ２フラグは、対応するエントリがリストＧＤ２に属しているか否かを示す。
【００７３】
メタデータ２３１に対応するエントリがＤ系リスト２２２に属している場合、ＧＤ１フラグ、Ｄ１フラグ、Ｄ２フラグ、ＧＤ２フラグのいずれか１つが“１”に設定され、その他が“０”に設定される。一方、メタデータ２３１に対応するエントリがＤ系リスト２２２に属していない場合、ＧＤ１フラグ、Ｄ１フラグ、Ｄ２フラグ、ＧＤ２フラグはいずれも“０”に設定される。
【００７４】
以上のように、ＧＲ１フラグ、Ｒ１フラグ、Ｒ２フラグ、ＧＲ２フラグは、対応するエントリのＲ系リスト２２１における所属状況を示し、ＧＤ１フラグ、Ｄ１フラグ、Ｄ２フラグ、ＧＤ２フラグは、対応するエントリのＤ系リスト２２２における所属状況を示す。換言すると、ＧＲ１フラグ、Ｒ１フラグ、Ｒ２フラグ、ＧＲ２フラグは、メタデータ２３１に対応するデータブロックに付加されたＲ系の属性を示し、ＧＤ１フラグ、Ｄ１フラグ、Ｄ２フラグ、ＧＤ２フラグは、このデータブロックに付加されたＤ系の属性を示す。そして、キャッシュ制御部２１３は、キャッシュ領域２１１ａに格納された、またはキャッシュ領域２１１ａから追い出されたデータブロックについてのＲ系、Ｄ系の２種類の属性を操作する。これにより、キャッシュ制御部２１３は、キャッシュ領域２１１ａへのデータの格納やキャッシュ領域２１１ａからのデータの追い出しの処理を制御する。
【００７５】
以下、図７に戻って説明を続ける。
対応するエントリがリストＲ１，Ｒ２，Ｄ１，Ｄ２の少なくとも１つに属しているメタデータについては、対応するデータブロックがキャッシュ領域２１１ａに格納されている。例えば、リストＲ１上のエントリ２２１ａからリンクされているメタデータ２３１ａについては、対応するデータブロック２３２ａがキャッシュ領域２１１ａに格納されている。また、リストＲ２上のエントリ２２１ｃとリストＤ２上のエントリ２２２ｃとからリンクされているメタデータ２３１ｃについては、対応するデータブロック２３２ｃがキャッシュ領域２１１ａに格納されている。さらに、リストＲ２上のエントリ２２１ｄからリンクされているメタデータ２３１ｄについては、対応するデータブロック２３２ｄがキャッシュ領域２１１ａに格納されている。
【００７６】
一方、対応するエントリがリストＧＲ１，ＧＲ２，ＧＤ１，ＧＤ２の少なくとも１つに属しているものの、リストＲ１，Ｒ２，Ｄ１，Ｄ２には属していないメタデータについては、対応するデータブロックはキャッシュ領域２１１ａに存在しない。例えば、リストＧＲ１に属するエントリ２２１ｂからのみリンクされているメタデータ２３１ｂについては、対応するデータブロックはキャッシュ領域２１１ａに存在しない。
【００７７】
このように、リストＲ１，Ｒ２，Ｄ１，Ｄ２に属するエントリについては、対応する実データがキャッシュ領域２１１ａに必ず格納されている。しかし、リストＧＲ１，ＧＲ２，ＧＤ１，ＧＤ２に属するエントリについては、対応する実データがキャッシュ領域２１１ａに格納されていない場合がある。
【００７８】
また、上記のような構造から、キャッシュ領域２１１ａからデータブロックが追い出されるケースは、次のようなケースとなる。キャッシュ領域２１１ａに格納されたデータブロックに対応するエントリがリストＲ１，Ｒ２のいずれかから追い出されたとき、このデータブロックに対応するエントリがリストＤ１，Ｄ２のどちらにも存在しない場合には、このデータブロックはキャッシュ領域２１１ａから追い出される。また、キャッシュ領域２１１ａに格納されたデータブロックに対応するエントリがリストＤ１，Ｄ２のいずれかから追い出されたとき、このデータブロックに対応するエントリがリストＲ１，Ｒ２のどちらにも存在しない場合には、このデータブロックはキャッシュ領域２１１ａから追い出される。このとき、追い出されるデータブロックがダーティ状態の場合は、データブロックのライトバックが行われる。
【００７９】
なお、以下の説明では、リストＲ１，Ｒ２，Ｄ１，Ｄ２を「キャッシュリスト」と呼び、リストＧＲ１，ＧＲ２，ＧＤ１，ＧＤ２を「ゴーストリスト」と呼ぶ場合がある。また、アクセスが要求されたデータブロックに対応するエントリがリストＲ１，Ｒ２，Ｄ１，Ｄ２の少なくとも１つに存在することを、「キャッシュヒット」と呼ぶ場合がある。一方、リードが要求されたデータブロックに対応するエントリがリストＧＲ１，ＧＲ２のいずれかに存在することを、「ゴーストヒット」と呼ぶ場合がある。また、ライトが要求されたデータブロックに対応するエントリがリストＧＤ１，ＧＤ２のいずれかに存在することも、同様に「ゴーストヒット」と呼ぶ場合がある。
【００８０】
ここで、図７で説明したように、Ｒ系リスト２２１のエントリとＤ系リスト２２２のエントリは、独立して管理される。このような管理方法を用いたことにより、キャッシュ制御部２１３は、ライト頻度に応じたＤ系リスト２２２の操作を、リード頻度とは完全に切り離して制御することが可能になっている。これにより、前述したＨ−ＡＲＣでの問題点を解決することが可能になる。
【００８１】
図１０は、リスト操作の一例を示す図である。この図１０では、対応するエントリがリスト上に存在しないデータブロックについて、ライト要求、リード要求、リード要求が順に発行された場合を示す。図１０（Ａ）は、Ｈ−ＡＲＣを用いた場合を示し、図１０（Ｂ）は、第２の実施の形態の場合を示す。
【００８２】
Ｈ−ＡＲＣを用いた場合には、図１０（Ａ）に示すように、まず、上記のデータブロックに対するライトが要求されると、この論理ブロックに対応するエントリ５０１がリストＤ１ａの先頭に追加される（ステップＳ１１）。その後、エントリ５０１がリストＤ１ａに存在する状態で同じデータブロックに対するリードが要求されると、エントリ５０１はリストＤ２ａの先頭に移動される（ステップＳ１２）。さらに、エントリ５０１がリストＤ２ａに存在する状態で同じデータブロックに対するリードが要求されると、エントリ５０１は再度リストＤ２ａの先頭に移動される（ステップＳ１３）。このように、Ｈ−ＡＲＣでは、ライトが１回しか要求されておらず、上書き頻度が高いとは言えないデータブロックに対応するエントリ５０１が、リストＤ２ａに保持され続けてしまう。
【００８３】
これに対して、本実施の形態では、図１０（Ｂ）に示すように、まず、上記のデータブロックに対するライトが要求されると、このデータブロックに対応するエントリ２２２ｅがリストＤ１の先頭に追加される。これとともに、同じデータブロックに対応するエントリ２２１ｅがリストＲ１の先頭にも追加される（ステップＳ２１）。その後、エントリ２２１ｅ，２２２ｅがリストＲ１，Ｄ１にそれぞれに存在する状態で、同じデータブロックに対するリードが要求されたとする。このとき、リストＲ１上のエントリ２２１ｅは、リストＲ２の先頭に移動される（ステップＳ２２）。しかし、リストＤ１上のエントリ２２２ｅは移動されず、リストＤ１上に残る。さらに、エントリ２２１ｅ，２２２ｅがリストＲ１，Ｄ１にそれぞれに存在する状態で、同じデータブロックに対するリードが要求されたとする。このとき、リストＲ２上のエントリ２２１ｅは、再度リストＲ２の先頭に移動される（ステップＳ２３）。しかし、この場合もリストＤ１上のエントリ２２２ｅは移動されず、リストＤ１上に残る。
【００８４】
上記のステップＳ２２，Ｓ２３のようにリードが要求された場合には、Ｒ系リスト２２１上でのエントリの移動は行われるものの、Ｄ系リスト２２２上でのエントリの移動は行われない。このため、エントリ２２２ｅは、１回のみライトが要求されたデータブロックに対応するエントリとしてリストＤ１に残り、２回以上ライトが要求されたデータブロックに対応するエントリを保持するためのリストＤ２に移動することはない。したがって、リストＤ２には上書きされやすいと考えられるデータブロックに対応するエントリだけを確実に保持させることができるようになる。その結果、キャッシュ領域２１１ａの管理効率が改善され、ＤＥ３００へのライトバック回数の低減効果が阻害されなくなる。
【００８５】
次に、リストに対するエントリの所属状態をキャッシュページの種別で表した場合について説明する。なお、キャッシュページのサイズは、論理ブロックのサイズと同じであるものとする。
【００８６】
図１１は、ページ分類表の例を示す図である。ページ分類表６０１は、Ｒ系、Ｄ系、ページ種別の項目を含む。Ｒ系の項目は、キャッシュページ内のデータブロックに対応するエントリが属しているＲ系リスト２２１内のリストを示す。Ｄ系の項目は、キャッシュページ内のデータブロックに対応するエントリが属しているＤ系リスト２２２内のリストを示す。ページ種別の項目は、キャッシュページの種別を表す。
【００８７】
このページ分類表６０１は、キャッシュ領域２１１ａ内のキャッシュページに格納されたデータブロックに対応するエントリの、リストに対する所属状態によって、キャッシュページを分類した一覧表である。例えば、ページ種別“Ｃｒｏｓｓ”は、対応するエントリが、リストＲ１，Ｒ２のいずれかに属し、かつ、リストＤ１，Ｄ２のいずれかに属する状態である。ページ種別“Ｂｕｆｆｅｒ”は、対応するエントリが、リストＤ１，Ｄ２のいずれかに属しているが、Ｒ系リスト２２１においては少なくともリストＲ１，Ｒ２のどちらにも属していない状態である。ページ種別“Ｃｌｅａｎ”は、対応するエントリが、リストＲ１，Ｒ２のいずれかに属しているが、Ｄ系リスト２２２においては少なくともリストＤ１，Ｄ２のどちらにも属していない状態である。なお、ページ種別“−”は、データブロックがキャッシュページに格納されていないため、該当するキャッシュページが存在しないことを示す。
【００８８】
次に、ページ種別の遷移について説明する。
図１２は、Ｉ／Ｏ処理時の推移表の例を示す図である。Ｉ／Ｏ処理時の推移表６０２は、Ｉ／Ｏ種別、推移前のページ種別、推移後のページ種別の項目を含む。Ｉ／Ｏ種別の項目は、リードとライトのどちらが要求されたかを示す。推移前のページ種別の項目は、推移前のページ種別を示す。推移後のページ種別の項目は、推移後のページ種別を示す。
【００８９】
例えば、推移表６０２の第３行は、Ｉ／Ｏ種別“Ｒｅａｄ”、推移前のページ種別“Ｂｕｆｆｅｒ”、推移後のページ種別“Ｃｒｏｓｓ”を示す。これは、ページ種別が“Ｂｕｆｆｅｒ”のキャッシュページに格納されたデータブロックに対するリードが要求された場合、対応するエントリがリストＲ１またはリストＲ２に登録されることで、ページ種別が“Ｃｒｏｓｓ”に推移することを示す。
【００９０】
ここで、上記の推移表６０２の第２行によれば、推移前のページ種別が“Ｃｌｅａｎ”の場合にリードが要求されると、Ｒ系リスト２２１においては対応するエントリがリストＲ２に移動される。しかし、Ｄ系リスト２２２においてはエントリの移動が行わず、対応するエントリがリストＤ１，Ｄ２のいずれかに登録されることはない。このため、ページ種別は“Ｃｌｅａｎ”のまま変化しない。このように、リードが要求された場合にはＤ系リスト２２２が変更されないことによって、リストＤ２に目的に合致しないデータブロックに対応するエントリが登録される事態が防止される。
【００９１】
図１３は、ページ解放判定時の推移表の例を示す図である。ページ解放判定時の推移表６０３は、系列、推移前のページ種別、推移後のページ種別の項目を含む。系列の項目は、Ｒ系、Ｄ系のどちらのキャッシュリストからエントリが追い出されたかを示す。推移前のページ種別の項目は、推移前のページ種別を示す。推移後のページ種別の項目は、推移後のページ種別を示す。
【００９２】
この推移表６０３において示すように、ページ種別“Ｃｒｏｓｓ”のキャッシュページに格納されたデータブロックについて、対応するリストがＲ系またはＤ系のキャッシュリストから追い出される場合、対応するリストはＲ系またはＤ系のキャッシュリストに残る。このため、データブロックはキャッシュページに残ったままとなり、キャッシュページは解放されない。
【００９３】
一方、ページ種別“Ｃｌｅａｎ”または“Ｂｕｆｆｅｒ”のキャッシュページに格納されたデータブロックについて、対応するエントリがＲ系またはＤ系のキャッシュリストから追い出される場合、対応するエントリはＲ系、Ｄ系のいずれのキャッシュリストにも残らない。このため、データブロックはキャッシュ領域２１１ａから追い出され、対応するキャッシュページが解放される。なお、ページ種別が“Ｂｕｆｆｅｒ”のキャッシュページに格納されたデータブロックについて、対応するエントリがＤ系のキャッシュリストから追い出される際、このデータブロックがダーティ状態である場合は、データブロックのライトバックが行われる。
【００９４】
次に、キャッシュリストの大きさの調整方法について説明する。
図１４は、キャッシュリストの大きさの調整方法の例を示す図である。
図８に示したように、リスト管理テーブル２４１には、キャッシュリスト、すなわちリストＲ１，Ｒ２，Ｄ１，Ｄ２のそれぞれについて、現在のリスト長と理想長とが保持される。理想長とは、リスト長の目標値である。キャッシュ制御部２１３は、ゴーストヒットが発生した場合、理想長を調整する。また、ゴーストヒットにより、ヒットしたゴーストリスト上のエントリをキャッシュリスト上に移動する必要が生じるため、いずれかのキャッシュリストからエントリを追い出す必要が生じる。キャッシュ制御部２１３は、理想長の調整後、リストＲ１，Ｒ２，Ｄ１，Ｄ２のいずれからエントリを追い出すかを決定する。その際、ＣＭ２１０は、現在のリスト長が理想長に近づくように、追い出すエントリを決定する。例えば、ＣＭ２１０は、理想長と現在のリスト長との差分の絶対値が最も大きいリストからエントリを追い出す。
【００９５】
ここで、Ｈ−ＡＲＣでは、リストＣ１，Ｃ２，Ｄ１ａ，Ｄ２ａを合わせた大きさがキャッシュ領域の大きさと一致していた。しかし、本実施の形態では、キャッシュ領域２１１ａ内のデータブロックに対応するエントリが、Ｒ系リスト２２１とＤ系リスト２２２の両方に属することが可能になっている。このため、リストＲ１，Ｒ２，Ｄ１，Ｄ２を合計した大きさはキャッシュ領域２１１ａより大きくなり得る。したがって、Ｈ−ＡＲＣと同様の理想長算出方法を用いることができない。
【００９６】
そこで、本実施の形態では、ゴーストリスト、すなわちリストＧＲ１，ＧＲ２，ＧＤ１，ＧＤ２のそれぞれが、Ｆａｒ領域とＮｅａｒ領域とに分割される。そして、キャッシュ制御部２１３は、ゴーストヒットした場合に、どのゴーストリストにヒットしたかと、Ｆａｒ領域とＮｅａｒ領域のどちらのエントリにヒットしたかとによって、理想長を調整する。
【００９７】
図１４では、リストＲ１，ＧＲ１，Ｄ１，ＧＤ１のそれぞれの先頭（ＭＲＵ側）は、図１４中右側であるものとする。また、リストＲ２，ＧＲ２，Ｄ２，ＧＤ２のそれぞれの先頭側（ＭＲＵ側）は、図１４中左側であるものとする。また、｜Ｒ１｜，｜Ｒ２｜，｜ＧＲ１｜，｜ＧＲ２｜，｜Ｄ１｜，｜Ｄ２｜，｜ＧＤ１｜，｜ＧＤ２｜は、それぞれリストＲ１，Ｒ２，ＧＲ１，ＧＲ２，Ｄ１，Ｄ２，ＧＤ１，ＧＤ２の現在のリスト長を示す。
【００９８】
図１４に示すように、リストＧＲ１のうち、先頭側の長さ｜Ｒ２｜の領域がＮｅａｒ領域に設定され、リストＧＲ２のうち、先頭側の長さ｜Ｒ１｜の領域がＮｅａｒ領域に設定される。ここで、リストＲ１，Ｒ２の合計サイズは、最大でキャッシュサイズ（キャッシュ領域２１１ａのサイズ）であるものとする。この場合、リストＲ１，ＧＲ１の合計サイズと、リストＲ２，ＧＲ２の合計サイズは、いずれも最大でキャッシュサイズとなる。
【００９９】
また、リストＧＤ１のうち、先頭側の長さ｜Ｄ２｜の領域がＮｅａｒ領域に設定され、リストＧＤ２のうち、先頭側の長さ｜Ｄ１｜の領域がＮｅａｒ領域に設定される。ここで、リストＤ１，Ｄ２の合計サイズは、最大でキャッシュサイズであるものとする。この場合、リストＤ１，ＧＤ１の合計サイズと、リストＤ２，ＧＤ２の合計サイズは、いずれも最大でキャッシュサイズとなる。
【０１００】
ここでは一例として、リストＧＲ１にゴーストヒットした場合のリスト長調整方法について説明する。
リストＧＲ１にゴーストヒットするということは、隣接するリストＲ１のリスト長を拡大する必要があることを意味する。ただし、リストＧＲ１のＮｅａｒ領域のエントリは、Ｆａｒ領域のエントリと比較して、リストＲ１から追い出されてからの時間が短い。このため、Ｎｅａｒ領域においてヒットしたエントリは、リストＲ１がもう少しだけ大きければ、リストＲ１から追い出される前にリストＲ２に移動できたと考えられる。したがって、Ｎｅａｒ領域にヒットした場合は、Ｆａｒ領域にヒットした場合より、リストＲ１のリスト長を大きく拡大する必要性は低いと考えられる。
【０１０１】
このような観点から、リストＧＲ１のＮｅａｒ領域にヒットした場合、キャッシュリスト全体のサイズ、すなわちリストＲ１，Ｒ２の合計サイズを増やす必要性は低いと考えることができる。そこで、キャッシュ制御部２１３は、リストＧＲ１のＮｅａｒ領域にヒットした場合、リストＲ１，Ｒ２の各理想長の合計値を変えずに、リストＲ１の理想長を増やし、リストＲ２の理想長を減らす。
【０１０２】
一方、リストＧＲ１のＦａｒ領域にヒットした場合には、キャッシュリスト全体のサイズ、すなわちリストＲ１，Ｒ２の合計サイズを増やす必要性が高いと考えることができる。そこで、キャッシュ制御部２１３は、リストＲ１の理想長を増やすとともに、リストＤ１，Ｄ２のいずれかの理想長を減らす。
【０１０３】
ここで、リストＤ１，Ｄ２のそれぞれの理想長をＬｄ１，Ｌｄ２とする。例えば、キャッシュ制御部２１３は、（Ｌｄ１−｜Ｄ１｜）が（Ｌｄ２−｜Ｄ２｜）以上の場合、リストＤ１の理想長Ｌｄ１を減らす。また、キャッシュ制御部２１３は、（Ｌｄ１−｜Ｄ１｜）が（Ｌｄ２−｜Ｄ２｜）未満の場合、リストＤ２の理想長Ｌｄ２を減らす。
【０１０４】
なお、上記のようにリストＧＲ１のエントリにヒットした場合、このエントリはリストＲ２に追加される。このとき、キャッシュ制御部２１３は、いずれかのキャッシュリストから末端（ＬＲＵ側）のエントリを追い出す。例えば、キャッシュ制御部２１３は、リストＲ１，Ｒ２のどちらかから末端のエントリを追い出す。このとき、キャッシュ制御部２１３は、リストＲ１，Ｒ２の長さが、それぞれ調整後のリストＲ１，Ｒ２の理想長に近づくように、リストＲ１，Ｒ２のどちらから末端のエントリを追い出すかを決定する。
【０１０５】
以上、リストＧＲ１にゴーストヒットした場合の理想長調整方法について説明したが、他のリストにゴーストヒットした場合については、次の図１５に示す理想長増減テーブルにしたがって理想長を調整することができる。
【０１０６】
図１５は、理想長増減テーブルの例を示す図である。なお、図１５に示す理想長増減テーブル２４２は、例えば、管理情報記憶部２１１ｂに格納されて、理想長の調整の際にキャッシュ制御部２１３によって参照されてもよい。
【０１０７】
理想長増減テーブル２４２は、ゴーストリスト、ヒットした領域、理想長減、理想長増の項目を含む。ゴーストリストの項目は、ヒットしたゴーストリストのリスト名を示す。ヒットした領域の項目は、ゴーストリストのＮｅａｒ領域とＦａｒ領域のどちらにヒットしたかを示す。理想長減の項目は、理想長を減らすキャッシュリストのリスト名を示す。理想長増の項目は、理想長を増やすキャッシュリストのリスト名を示す。
【０１０８】
例えば、理想長増減テーブル２４２は、ゴーストリスト“ＧＲ２”、ヒットした領域“Ｆａｒ領域”、理想長減“Ｄ１またはＤ２”、理想長増“Ｒ２”を示す。これは、リストＧＲ２のＮｅａｒ領域にゴーストヒットした場合、キャッシュ制御部２１３は、リストＤ１またはリストＤ２の理想長を減らし、リストＲ２の理想長を増やすことを示す。
【０１０９】
また、例えば、理想長増減テーブル２４２は、ゴーストリスト“ＧＤ１”、ヒットした領域“Ｆａｒ領域”、理想長減“Ｒ１またはＲ２”、理想長増“Ｄ１”を示す。これは、リストＧＤ１のＦａｒ領域にゴーストヒットした場合、キャッシュ制御部２１３は、リストＲ１またはリストＲ２の理想長を減らし、リストＤ１の理想長を増やすことを示す。ここで、リストＲ１またはリストＲ２のどちらの理想長を減らすかは、例えば次のような方法で決定される。なお、リストＲ１，Ｒ２のそれぞれの理想長をＬｒ１，Ｌｒ２とする。キャッシュ制御部２１３は、（Ｌｒ１−｜Ｒ１｜）が（Ｌｒ２−｜Ｒ２｜）以上の場合、リストＲ１の理想長Ｌｒ１を減らす。また、キャッシュ制御部２１３は、（Ｌｒ１−｜Ｒ１｜）が（Ｌｒ２−｜Ｒ２｜）未満の場合、リストＲ２の理想長Ｌｒ２を減らす。
【０１１０】
このように、キャッシュ制御部２１３は、ゴーストヒットがＮｅａｒ領域とＦａｒ領域のどちらで発生したかの違いによって、各リストの理想長を調整する。そして、キャッシュ制御部２１３は、リストＲ１，Ｒ２，Ｄ１，Ｄ２の各リスト長が対応する理想長に近づくように、リストＲ１，Ｒ２，Ｄ１，Ｄ２から追い出すエントリを決定する。これにより、リストＲ１，Ｒ２，Ｄ１，Ｄ２の各リスト長が適切に調整される。
【０１１１】
例えば、リードが要求されるデータブロックが多いと考えられる場合には、Ｒ系のキャッシュリストの大きさが拡張され、さらに、リード頻度の高いデータブロックが多いと考えられる場合には、リストＲ２の大きさが拡張される。これにより、リードヒットの確率を高めることができる。また、ライトが要求されるデータブロックが多いと考えられる場合には、Ｄ系のキャッシュリストの大きさが拡張され、さらに、上書きの頻度が高いデータブロックが多いと考えられる場合には、リストＤ２の大きさが拡張される。これにより、上書きの頻度が高いデータブロックについてのライトバック回数を低減できる。
【０１１２】
次に、ＣＭ２１０が実行する処理について、フローチャートを用いて説明する。
図１６は、キャッシュ制御処理の例を示すフローチャート（その１）である。図１６の処理は、ホストＩ／Ｏ処理部２１２がホスト装置４００からアクセス要求を受信することで開始される。以下、図１６に示す処理をステップ番号に沿って説明する。
【０１１３】
（Ｓ３１）キャッシュ制御部２１３は、アクセスが要求された論理ブロックのデータ（データブロック）がキャッシュ領域２１１ａに存在するか否かを判定する。データブロックが存在する場合、キャッシュ制御部２１３は、処理をステップＳ３２に進める。データブロックが存在しない場合（キャッシュミスの場合）、キャッシュ制御部２１３は、処理をステップＳ５１に進める。
【０１１４】
（Ｓ３２）キャッシュ制御部２１３は、アクセスが要求されたデータブロックが格納されているキャッシュページのページ種別が、Ｂｕｆｆｅｒであるか否かを判定する。ページ種別がＢｕｆｆｅｒの場合、キャッシュ制御部２１３は、処理をステップＳ３３に進める。ページ種別がＢｕｆｆｅｒ以外の場合、キャッシュ制御部２１３は、処理をステップＳ３６に進める。
【０１１５】
（Ｓ３３）キャッシュ制御部２１３は、アクセスが要求されたデータブロックに対応するエントリが、リストＧＲ１またはリストＧＲ２に属しているか否かを判定する。エントリがリストＧＲ１またはリストＧＲ２に属している場合、キャッシュ制御部２１３は、処理をステップＳ３５に進める。エントリがリストＧＲ１，ＧＲ２のいずれにも属していない場合、キャッシュ制御部２１３は、処理をステップＳ３４に進める。
【０１１６】
（Ｓ３４）このケースは、Ｄ系リスト２２２にヒットし、Ｒ系リスト２２１にヒットしなかったケースである。この場合、キャッシュ制御部２１３は、リストＲ１の先頭に、アクセスが要求されたデータブロックに対応するエントリを追加する。また、キャッシュ制御部２１３は、エントリの追加に伴い、このエントリがリンクするメタデータ２３１、およびリスト管理テーブル２４１を更新する。そして、キャッシュ制御部２１３は、処理をステップＳ４１に進める。
【０１１７】
（Ｓ３５）このケースは、リードが要求され、リストＧＲ１またはリストＧＲ２のいずれかにゴーストヒットしたケースである。この場合、キャッシュ制御部２１３は、Ｒ系のゴーストヒット処理を実行する。具体的には、キャッシュ制御部２１３は、理想長増減テーブル２４２にしたがって、Ｒ系のキャッシュリスト、またはＲ系およびＤ系のキャッシュリストの各理想長を調整する。そして、キャッシュ制御部２１３は、リストＲ１，Ｒ２の現在のリスト長と調整後の理想長とに基づいて、リストＲ１，Ｒ２のいずれかからエントリをゴーストリストに追い出す。
【０１１８】
（Ｓ３６）キャッシュ制御部２１３は、アクセスが要求されたデータブロックに対応するエントリをリストＲ２の先頭に移動させる。また、キャッシュ制御部２１３は、エントリの移動に伴い、このエントリ、エントリがリンクするメタデータ２３１、およびリスト管理テーブル２４１を更新する。ただし、キャッシュ制御部２１３は、メタデータ２３１のＲ２フラグに“１”が設定されている場合、メタデータ２３１を更新しなくてもよい。以上の処理が完了すると、キャッシュ制御部２１３は、処理をステップＳ４１に進める。
【０１１９】
図１７は、キャッシュ制御処理の例を示すフローチャート（その２）である。以下、図１７に示す処理をステップ番号に沿って説明する。
（Ｓ４１）キャッシュ制御部２１３は、ホスト装置４００からのアクセス要求がライト要求であるか否かを判定する。アクセス要求がライト要求の場合、キャッシュ制御部２１３は、処理をステップＳ４２に進める。アクセス要求がリード要求の場合、キャッシュ制御部２１３は、処理を終了する。
【０１２０】
（Ｓ４２）キャッシュ制御部２１３は、アクセスが要求されたデータブロックが格納されているキャッシュページのページ種別がＣｌｅａｎであるか否かを判定する。ページ種別がＣｌｅａｎの場合、キャッシュ制御部２１３は、処理をステップＳ４３に進める。ページ種別がＣｌｅａｎ以外の場合、キャッシュ制御部２１３は、処理をステップＳ４６に進める。
【０１２１】
（Ｓ４３）キャッシュ制御部２１３は、アクセスが要求されたデータブロックに対応するエントリが、リストＧＤ１またはリストＧＤ２に属しているか否かを判定する。エントリがリストＧＤ１またはリストＧＤ２に属している場合、キャッシュ制御部２１３は、処理をステップＳ４５に進める。エントリがリストＧＤ１，ＧＤ２のいずれにも属していない場合、キャッシュ制御部２１３は、処理をステップＳ４４に進める。
【０１２２】
（Ｓ４４）このケースは、Ｒ系リスト２２１にヒットし、Ｄ系リスト２２２にヒットしなかったケースである。この場合、キャッシュ制御部２１３は、ライトが要求されたデータブロックに対応するエントリをリストＤ１の先頭に追加する。また、キャッシュ制御部２１３は、エントリの追加に伴い、このエントリがリンクするメタデータ２３１、およびリスト管理テーブル２４１を更新する。そして、キャッシュ制御部２１３は、処理を終了する。
【０１２３】
（Ｓ４５）このケースは、ライトが要求され、リストＧＤ１またはリストＧＤ２のいずれかにゴーストヒットしたケースである。この場合、キャッシュ制御部２１３は、Ｄ系のゴーストヒット処理を実行する。具体的には、キャッシュ制御部２１３は、理想長増減テーブル２４２にしたがって、Ｄ系のキャッシュリスト、またはＲ系およびＤ系のキャッシュリストの各理想長を調整する。そして、キャッシュ制御部２１３は、リストＤ１，Ｄ２の現在のリスト長と調整後の理想長とに基づいて、リストＤ１，Ｄ２のいずれかからエントリをゴーストリストに追い出す。
【０１２４】
（Ｓ４６）キャッシュ制御部２１３は、アクセスが要求されたデータブロックに対応するエントリをリストＤ２の先頭に移動させる。また、キャッシュ制御部２１３は、エントリの移動に伴い、このエントリ、エントリがリンクするメタデータ２３１、およびリスト管理テーブル２４１を更新する。ただし、キャッシュ制御部２１３は、メタデータ２３１のＤ２フラグに“１”が設定されている場合、メタデータ２３１を更新しなくてもよい。以上の処理が完了すると、キャッシュ制御部２１３は、処理を終了する。
【０１２５】
図１８は、キャッシュ制御処理の例を示すフローチャート（その３）である。以下、図１８に示す処理をステップ番号に沿って説明する。
（Ｓ５１）キャッシュ制御部２１３は、アクセスが要求されたデータブロックをキャッシュ領域２１１ａに格納する。具体的には、リードが要求された場合、キャッシュ制御部２１３は、リードが要求されたデータブロックを、ＤＥ３００内の記憶装置からディスクＩ／Ｏ処理部２１４を介して取得し、取得したデータブロックをキャッシュ領域２１１ａに格納する。また、ライトが要求された場合、キャッシュ制御部２１３は、ホスト装置４００から受信したデータブロックをキャッシュ領域２１１ａに格納する。
【０１２６】
（Ｓ５２）キャッシュ制御部２１３は、アクセスが要求されたデータブロックに対応するエントリが、リストＧＲ１またはリストＧＲ２に属しているか否かを判定する。エントリがリストＧＲ１またはリストＧＲ２に属している場合、キャッシュ制御部２１３は、処理をステップＳ５４に進める。エントリがリストＧＲ１，ＧＲ２のいずれにも属していない場合、キャッシュ制御部２１３は、処理をステップＳ５３に進める。
【０１２７】
（Ｓ５３）キャッシュ制御部２１３は、アクセスが要求されたデータブロックに対応するエントリをリストＲ１の先頭に追加する。また、キャッシュ制御部２１３は、エントリの追加に伴い、エントリがリンクするメタデータ２３１、およびリスト管理テーブル２４１を更新する。キャッシュ制御部２１３は、該当するメタデータ２３１が存在しない場合、このメタデータ２３１を作成する。そして、キャッシュ制御部２１３は、処理をステップＳ５６に進める。
【０１２８】
（Ｓ５４）キャッシュ制御部２１３は、Ｒ系のゴーストヒット処理を実行する。すなわち、キャッシュ制御部２１３は、Ｒ系のキャッシュリスト、またはＲ系およびＤ系のキャッシュリストの各理想長を調整し、リストＲ１，Ｒ２の現在のリスト長と調整後の理想長とに基づいて、リストＲ１，Ｒ２のいずれかからエントリをゴーストリストに追い出す。
【０１２９】
（Ｓ５５）キャッシュ制御部２１３は、アクセスが要求されたデータブロックに対応するエントリをリストＲ２の先頭に移動させる。また、キャッシュ制御部２１３は、エントリの移動に伴い、このエントリ、エントリがリンクするメタデータ２３１、およびリスト管理テーブル２４１を更新する。ただし、キャッシュ制御部２１３は、メタデータ２３１のＲ２フラグに“１”が設定されている場合、メタデータ２３１を更新しなくてもよい。
【０１３０】
（Ｓ５６）キャッシュ制御部２１３は、ホスト装置４００からのアクセス要求がライト要求であるか否かを判定する。アクセス要求がライト要求の場合、キャッシュ制御部２１３は、処理をステップＳ５７に進める。アクセス要求がリード要求の場合、キャッシュ制御部２１３は、処理を終了する。
【０１３１】
（Ｓ５７）キャッシュ制御部２１３は、アクセスが要求されたデータブロックに対応するエントリが、リストＧＤ１またはリストＧＤ２に属しているか否かを判定する。エントリがリストＧＤ１またはリストＧＤ２に属している場合、キャッシュ制御部２１３は、処理をステップＳ５９に進める。エントリがリストＧＤ１，ＧＤ２のいずれにも属していない場合、キャッシュ制御部２１３は、処理をステップＳ５８に進める。
【０１３２】
（Ｓ５８）キャッシュ制御部２１３は、アクセスが要求されたデータブロックに対応するエントリをリストＤ１の先頭に追加する。また、キャッシュ制御部２１３は、エントリの追加に伴い、エントリがリンクするメタデータ２３１、およびリスト管理テーブル２４１を更新する。キャッシュ制御部２１３は、該当するメタデータ２３１が存在しない場合、このメタデータ２３１を作成する。そして、キャッシュ制御部２１３は、処理を終了する。
【０１３３】
（Ｓ５９）キャッシュ制御部２１３は、Ｄ系のゴーストヒット処理を実行する。すなわち、キャッシュ制御部２１３は、Ｄ系のキャッシュリスト、またはＲ系およびＤ系のキャッシュリストの各理想長を調整し、リストＤ１，Ｄ２の現在のリスト長と調整後の理想長とに基づいて、リストＤ１，Ｄ２のいずれかからエントリをゴーストリストに追い出す。
【０１３４】
（Ｓ６０）キャッシュ制御部２１３は、アクセスが要求されたデータブロックに対応するエントリをリストＤ２の先頭に移動させる。また、キャッシュ制御部２１３は、エントリの移動に伴い、このエントリ、エントリがリンクするメタデータ２３１、およびリスト管理テーブル２４１を更新する。ただし、キャッシュ制御部２１３は、メタデータ２３１のＤ２フラグに“１”が設定されている場合、メタデータ２３１を更新しなくてもよい。以上の処理が完了すると、キャッシュ制御部２１３は、処理を終了する。
【０１３５】
なお、第１の実施の形態の情報処理は、ストレージ制御装置１０に用いられるプロセッサに、プログラムを実行させることで実現できる。また、第２の実施の形態の情報処理は、プロセッサ２１０ａにプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体に記録できる。
【０１３６】
例えば、プログラムを記録した記録媒体は、プログラムを流通させることで配布することができる。また、ホストＩ／Ｏ処理部２１２、キャッシュ制御部２１３およびディスクＩ／Ｏ処理部２１４に相当する機能を実現するプログラムは、別個のプログラムとして各プログラムを別個に配布することができる。ホストＩ／Ｏ処理部２１２、キャッシュ制御部２１３およびディスクＩ／Ｏ処理部２１４の機能は、別個のコンピュータにより実現されてもよい。コンピュータは、例えば、記録媒体に記録されたプログラムを、ＲＡＭ２１０ｂ、ＳＳＤ２１０ｃに格納し、プログラムを読み込んで実行してもよい。
【符号の説明】
【０１３７】
１０  ストレージ制御装置
１１  キャッシュメモリ
１２  記憶部
１２ａ〜１２ｄ  リスト
１３  制御部
１４  データブロック
１４ａ，１４ｂ  エントリ
２０  記憶装置
【図１】
2018088020.tif 000003
【図２】
2018088020.tif 000004
【図３】
2018088020.tif 000005
【図４】
2018088020.tif 000006
【図５】
2018088020.tif 000007
【図６】
2018088020.tif 000008
【図７】
2018088020.tif 000009
【図８】
2018088020.tif 000010
【図９】
2018088020.tif 000011
【図１０】
2018088020.tif 000012
【図１１】
2018088020.tif 000013
【図１２】
2018088020.tif 000014
【図１３】
2018088020.tif 000015
【図１４】
2018088020.tif 000016
【図１５】
2018088020.tif 000017
【図１６】
2018088020.tif 000018
【図１７】
2018088020.tif 000019
【図１８】
2018088020.tif 000020