(57)【要約】【課題】アクセス処理の並列度を向上すること。【解決手段】記憶部１ａは、キャッシュメモリＣ１として用いられる複数のページを有する。処理部１ｂは、複数のページのうちの第１のページ群を示す第１のリンクＬ１に第１のストレージ資源２ａを割り当て、複数のページのうちの第２のページ群を示す第２のリンクＬ２に第２のストレージ資源２ｂを割り当てる。処理部１ｂは、第１のリンクＬ１および第２のリンクＬ２を用いて、第１のストレージ資源２ａおよび第２のストレージ資源２ｂに対するアクセス要求を分散して処理する。【選択図】図１
2019095881.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュメモリとして用いられる複数のページを有する記憶部と、
前記複数のページのうちの第１のページ群を示す第１のリンクに第１のストレージ資源を割り当て、前記複数のページのうちの第２のページ群を示す第２のリンクに第２のストレージ資源を割り当て、前記第１のリンクおよび前記第２のリンクを用いて、前記第１のストレージ資源および前記第２のストレージ資源に対するアクセス要求を分散して処理する処理部と、
を有するストレージ制御装置。
【請求項２】
前記処理部は、ページに対応するリンク要素を前記第１のリンクに追加する際、前記キャッシュメモリに空きページがない場合に、前記第２のリンクに含まれる前記リンク要素を前記第１のリンクへ移し替える、請求項１記載のストレージ制御装置。
【請求項３】
前記処理部は、前記第１のリンクに含まれる前記リンク要素の数が閾値以下の場合に、前記第２のリンクに含まれる前記リンク要素を前記第１のリンクへ移し替え、前記第１のリンクに含まれる前記リンク要素の数が前記閾値よりも大きい場合に、前記第１のリンクに含まれる一部のリンク要素に対応するページを再利用する、請求項２記載のストレージ制御装置。
【請求項４】
前記処理部は、前記再利用の際、前記第１のページ群に属する再利用可能なページが不足する場合、前記第２のリンクに含まれる前記リンク要素を前記第１のリンクへ移し替える、請求項３記載のストレージ制御装置。
【請求項５】
前記処理部は、前記空きページに対応する前記リンク要素を複数含む１つのフリーリンクを参照して、前記フリーリンクに属する前記リンク要素を前記第１のリンクに追加し、前記フリーリンクに属する他のリンク要素を前記第２のリンクに追加する、請求項２乃至４の何れか１項に記載のストレージ制御装置。
【請求項６】
前記処理部は、前記第１のストレージ資源へ書き込むデータまたは前記第１のストレージ資源から読み出したデータを前記キャッシュメモリに格納する際に、前記リンク要素を前記第１のリンクに追加する、請求項２乃至５の何れか１項に記載のストレージ制御装置。
【請求項７】
前記処理部は、前記第１のストレージ資源の第１の負荷と、前記第２のストレージ資源の第２の負荷とを比較し、負荷が大きい方のストレージ資源に対応するリンクから負荷が小さい方のストレージ資源に対応するリンクに、ページに対応するリンク要素を移し替える、請求項１記載のストレージ制御装置。
【請求項８】
キャッシュメモリとして用いられる複数のページのうちの第１のページ群を示す第１のリンクに第１のストレージ資源を割り当て、前記複数のページのうちの第２のページ群を示す第２のリンクに第２のストレージ資源を割り当て、
前記第１のリンクおよび前記第２のリンクを用いて、前記第１のストレージ資源および前記第２のストレージ資源に対するアクセス要求を分散して処理する、
処理をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストレージ制御装置およびプログラムに関する。
【背景技術】
【０００２】
データの保存にストレージ装置が利用されている。ストレージ装置は、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）などの記憶デバイスを複数搭載可能であり、大容量の記憶領域を提供する。ストレージ装置は、記憶デバイスに対するデータの書き込みや読み出しのアクセス制御を行うストレージ制御装置に接続される。ストレージ装置は、ストレージ制御装置を内蔵することもある。
【０００３】
ここで、ストレージ制御装置では、Ｉ／Ｏ（Input / Output）処理を行うプロセッサを複数設け、複数のＩ／Ｏ処理を複数のプロセッサにより並列に実行することでデータアクセスの高速化を図ることがある。例えば、複数のマイクロプロセッサによりＩ／Ｏ処理を実行する場合に、自マイクロプロセッサの負荷が第一の負荷以上の場合に、当該Ｉ／Ｏ処理のうちの一部を他のマイクロプロセッサに割り振るストレージシステムの提案がある。また、複数のメインプロセッサのそれぞれの稼働率に応じて、複数のメインプロセッサにＩ／Ｏ処理を振り分けるストレージ装置の提案もある。
【０００４】
なお、１つのデータ処理システム内の複数のプロセスまたはエージェントにメモリ上の共用リソースを区画と呼ばれる分割単位で割り振るシステムの提案もある。提案のシステムは、使用レベルが高い区画に共用リソースを追加し、使用レベルが低い区画から共用リソースを除去することにより、共用リソースの分配を再割り振りする。また、全プロセッサが共用メイン・メモリを介して通信する共用マルチプロセッシングシステムで、第１のプロセッサでアプリケーション・バイナリを実行中に、他プロセッサにより当該実行をモニタし、アプリケーション・バイナリの実行を最適化する提案もある。
【０００５】
ところで、ある記憶デバイスに対し、当該記憶デバイスよりも高速にアクセス可能なキャッシュメモリが利用されることがある。例えば、ストレージ制御装置は、今後アクセスされる可能性の高いデータをキャッシュメモリに保持しておき、該当のデータが要求された際、記憶デバイスではなくキャッシュメモリからデータを読み出して要求元へ送ることで、データアクセスを高速化できる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−２４９７２９号公報
【特許文献２】国際公開第２０１４／０４９６３５号
【特許文献３】特開２００４−１６４６０７号公報
【特許文献４】特開２００４−１１０８２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
キャッシュメモリの記憶容量は有限である。そこで、ストレージ制御装置は、キャッシュメモリ内の使用済の複数の単位領域をリスト構造のデータ（リンクや連結リストなどと呼ぶことがある）により管理し、ＬＲＵ（Least Recently Used）などのアルゴリズムを用いて、各単位領域を再利用することがある。この場合、リンクに対する操作は、データに対する処理結果の整合性を保つため、複数のプロセスにより同時に操作されないよう、排他資源を獲得したプロセスにより排他的に行われる。このため、キャッシュメモリの各単位領域を単一のリンクで管理すると、他プロセスによる排他資源の獲得待ちが生じ易くなり、ストレージ装置に対するアクセス処理の並列度が低下する可能性がある。
【０００８】
１つの側面では、本発明は、アクセス処理の並列度の向上を目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、ストレージ制御装置が提供される。ストレージ制御装置は、記憶部と処理部とを有する。記憶部は、キャッシュメモリとして用いられる複数のページを有する。処理部は、複数のページのうちの第１のページ群を示す第１のリンクに第１のストレージ資源を割り当て、複数のページのうちの第２のページ群を示す第２のリンクに第２のストレージ資源を割り当て、第１のリンクおよび第２のリンクを用いて、第１のストレージ資源および第２のストレージ資源に対するアクセス要求を分散して処理する。
【発明の効果】
【００１０】
１つの側面では、アクセス処理の並列度を向上できる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態のストレージ制御装置を示す図である。
【図２】第２の実施の形態のストレージ装置のハードウェア例を示す図である。
【図３】ＣＭの機能例を示す図である。
【図４】排他資源の分割例を示す図である。
【図５】記憶部の記憶領域の例を示す図である。
【図６】ＣＢＥの例を示す図である。
【図７】ＬＲＵリンクの例を示す図である。
【図８】フリーリンクの例を示す図である。
【図９】新規ＬＵ割り当て処理の例を示すフローチャートである。
【図１０】Ｉ／Ｏ時ＣＢＥ獲得処理の例を示すフローチャートである。
【図１１】別資源からのＣＢＥ獲得処理の例を示すフローチャートである。
【図１２】Ｉ／Ｏ非同期のＣＢＥ移し替え処理の例を示すフローチャートである。
【図１３】ライトバック時のＣＢＥ解放処理の例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、本実施の形態について図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態のストレージ制御装置を示す図である。ストレージ制御装置１は、ストレージ装置２および情報処理装置３に接続されている。ストレージ装置２は、ＨＤＤやＳＳＤなどの記憶デバイスを複数備えている。ストレージ装置２は、ストレージ制御装置１を内蔵してもよい。
【００１３】
情報処理装置３は、ストレージ装置２に記憶されたデータに対するアクセス要求をストレージ制御装置１に送信する。ストレージ制御装置１は、情報処理装置３からアクセス要求を受信し、アクセス要求に応じて、ストレージ装置２に記憶されたデータにアクセスする。ストレージ制御装置１は、キャッシュメモリを有する。ストレージ制御装置１は、キャッシュメモリを用いて情報処理装置３のアクセス要求に対する応答の高速化を図る。ストレージ制御装置１は、記憶部１ａおよび処理部１ｂを有する。
【００１４】
記憶部１ａは、ＲＡＭ（Random Access Memory）などの揮発性記憶装置である。記憶部１ａは、キャッシュメモリＣ１として利用される記憶領域を含む。キャッシュメモリＣ１に対応する記憶領域は、ページまたはキャッシュページと呼ばれる所定サイズ単位の記憶領域（単位領域）に分けて管理される。例えば、キャッシュメモリＣ１は、ページＰ１，Ｐ２，Ｐ３，・・・を含む。すなわち、記憶部１ａは、キャッシュメモリＣ１として用いられる複数のページを有する。ページＰ１，Ｐ２，Ｐ３，・・・には、ストレージ装置２から読み出されたデータや、情報処理装置３によりストレージ装置２に書き込まれるデータが格納される（ストレージ装置２へのデータ書き込みにライトバック（Write back）が用いられる）。キャッシュメモリＣ１上の書き込み対象のデータは、例えば、処理の空き時間の発生時や周期的なタイミングなどで、ストレージ装置２に書き戻される。
【００１５】
処理部１ｂは、プログラムを実行するプロセッサを複数含むマルチプロセッサ（複数のプロセッサの集合）である。処理部１ｂは、プログラムを実行するコアを複数含むマルチコアＣＰＵ（Central Processing Unit）（あるいはマルチコアのプロセッサ）でもよい。処理部１ｂは、サブ処理部１ｂ１，１ｂ２を有する。サブ処理部１ｂ１を１つのプロセッサ、または、１つのコアと考えてもよい。同様に、サブ処理部１ｂ２を１つのプロセッサ、または、１つのコアと考えてもよい。サブ処理部１ｂ１，１ｂ２は、記憶部１ａを共有する。複数のプロセッサまたは複数のコアによりメモリ資源を共有して処理を実行する技術は、対称型マルチプロセッシング（ＳＭＰ：Symmetric MultiProcessing）と呼ばれる。以下の説明において、処理部１ｂにより実行される処理は、サブ処理部１ｂ１またはサブ処理部１ｂ２により実行されると考えてもよい。また、処理部１ｂは、３以上のサブ処理部を備えてもよい。
【００１６】
処理部１ｂは、複数のページのうちの第１のページ群を示す第１のリンクＬ１に第１のストレージ資源２ａを割り当てる。また、処理部１ｂは、複数のページのうちの第２のページ群を示す第２のリンクＬ２に第２のストレージ資源２ｂを割り当てる。
【００１７】
ここで、ストレージ資源は、ストレージ装置２における記憶デバイスの記憶領域の集合である。ストレージ資源は、ストレージ装置２における複数の記憶デバイスにより構成される論理的な記憶領域（例えば、ＬＵ（Logical Unit））の集合でもよい。各ストレージ資源には、それぞれ異なる記憶領域が属する。第１のストレージ資源２ａおよび第２のストレージ資源２ｂは、ストレージ装置２のストレージ資源である。
【００１８】
また、第１のリンクＬ１および第２のリンクＬ２は、キャッシュメモリＣ１に含まれる使用済（データ格納済）のページの管理、および、ページの再利用の制御に用いられる情報である。処理部１ｂは、例えば、ＬＲＵのアルゴリズムを用いて、第１のリンクＬ１および第２のリンクＬ２を操作することで、使用済のページＰ１，Ｐ２，Ｐ３，・・・（あるいは、ページＰ１，Ｐ２，Ｐ３，・・・に格納されたデータ）の追い出しを制御する。
【００１９】
第１のリンクＬ１および第２のリンクＬ２は、例えば、構造体と呼ばれるリンク要素がポインタによって順番に連結されたデータ構造（リスト構造）をもつ。第１のリンクＬ１および第２のリンクＬ２は、連結リストやリンクリストなどと呼ばれてもよい。特に、第１のリンクＬ１および第２のリンクＬ２は、ＬＲＵのアルゴリズムに用いられる場合、ＬＲＵリンクやＬＲＵリストなどと呼ばれてもよい。１つのリンク要素は、１つのページに予め対応付けられている。第１のリンクＬ１により管理されるページと第２のリンクＬ２により管理されるページとは重複しない。
【００２０】
第１のリンクＬ１は、ページＰ１，Ｐ２，・・・（第１のページ群）に対応するリンク要素Ｌ１ａ，Ｌ１ｂ，Ｌ１ｃ，・・・，Ｌ１ｍを含む。例えば、リンク要素Ｌ１ａはページＰ１に対応する。また、例えば、リンク要素Ｌ１ｂはページＰ２に対応する。ある時点において、リンク要素Ｌ１ａ，Ｌ１ｂ，Ｌ１ｃ，・・・，Ｌ１ｍは、ポインタにより、この順番で連結されている。第２のリンクＬ２は、ページＰ３，・・・（第２のページ群）に対応するリンク要素Ｌ２ａ，Ｌ２ｂ，Ｌ２ｃ，・・・，Ｌ２ｎを含む。例えば、リンク要素Ｌ２ｂは、ページＰ３に対応する。ある時点において、リンク要素Ｌ２ａ，Ｌ２ｂ，Ｌ２ｃ，・・・，Ｌ２ｎは、ポインタにより、この順番で連結されている。
【００２１】
例えば、第１のリンクＬ１の図１における左端のリンク要素がＬＲＵ側（第１のリンクＬ１に属するページのうち、前回のアクセスから最も時間が経過しているページ）に対応する。一方、第１のリンクＬ１の図１における右端のリンク要素が、ＭＲＵ（Most Recently Used）側（第１のリンクＬ１に属するページのうち、最後にアクセスされたページ）に対応する。第２のリンクＬ２についても同様にＬＲＵ側（左端）、ＭＲＵ側（右端）が定められる。
【００２２】
ここで、第１のリンクＬ１の操作は、排他的に行われる。そのため、記憶部１ａは、第１のリンクＬ１に対して第１の排他資源を記憶する。第１の排他資源は、例えば、第１の排他資源が何れかのサブ処理部によって獲得済であるか、または、何れのサブ処理部も未獲得であるかを示すフラグである。第１の排他資源を獲得した（すなわち、第１の排他資源を獲得済に設定した）サブ処理部が、第１のリンクＬ１の操作を行える。当該サブ処理部は、第１のリンクＬ１を用いた今回の処理を終えると、第１の排他資源を未獲得に戻す。同様に、第２のリンクＬ２の操作は、排他的に行われる。そのため、記憶部１ａは、第２のリンクＬ２に対して第２の排他資源を記憶する。第２の排他資源は、例えば、第２の排他資源が何れかのサブ処理部によって獲得済であるか、または、何れのサブ処理部も未獲得であるかを示すフラグである。第２の排他資源を獲得したサブ処理部が、第２のリンクＬ２の操作を行える。
【００２３】
したがって、第１のリンクＬ１に第１のストレージ資源２ａを割り当てることは、第１の排他資源に第１のストレージ資源２ａを割り当てることであるともいえる。また、第２のリンクＬ２に第２のストレージ資源２ｂを割り当てることは、第２の排他資源に第２のストレージ資源２ｂを割り当てることであるともいえる。
【００２４】
処理部１ｂは、第１のリンクＬ１および第２のリンクＬ２を用いて、第１のストレージ資源２ａおよび第２のストレージ資源２ｂに対するアクセス要求を分散して処理する。
例えば、サブ処理部１ｂ１は、第１のストレージ資源２ａに対する書き込みまたは読み出しのアクセス要求を情報処理装置３から受信する。すると、サブ処理部１ｂ１は、第１の排他資源を獲得して、第１のリンクＬ１を操作し、情報処理装置３から取得した書き込み対象のデータまたは第１のストレージ資源２ａから読み出したデータをキャッシュメモリＣ１に格納する。
【００２５】
第１のリンクＬ１および第２のリンクＬ２の操作方法は、ＬＲＵのアルゴリズムに従う。例えば、サブ処理部１ｂ１は、第１のストレージ資源２ａに関連する新データをキャッシュメモリＣ１に格納する際、キャッシュメモリＣ１に空きページがあれば、第１のリンクＬ１のＭＲＵ側に空きページに対応するリンク要素を追加する。そして、サブ処理部１ｂ１は、新データを当該空きページに格納する。ここで、第１のリンクＬ１へのリンク要素の追加は、追加されたリンク要素のページが第２のストレージ資源２ｂのアクセス処理に利用可能となったことに相当する。したがって、第２のストレージ資源２ｂのアクセス処理に利用可能なキャッシュ容量が、追加されたページの分だけ増加したことになる。
【００２６】
一方、キャッシュメモリＣ１に空きページがなければ、サブ処理部１ｂ１は、第１のリンクＬ１のＬＲＵ側のリンク要素に対応するページに新データを上書きする（該当ページの旧データは上書きにより消去される）。このとき、例えば、第１のストレージ資源２ａに未書き込みのデータを格納しているページは再利用の対象外となる（当該ページは未書き込みのデータを第１のストレージ資源２ａに書き込み後、再利用可能になる）。そして、サブ処理部１ｂ１は、新データを書き込んだページに対応するリンク要素を第１のリンクＬ１のＭＲＵ側に移動させる。
【００２７】
こうして、サブ処理部１ｂ１は、空きページがなければ、最近アクセスされていないページを優先的に解放して再利用する。サブ処理部１ｂ１は、第２のストレージ資源２ｂに関連する新データをキャッシュメモリＣ１に格納する際、第２のリンクＬ２に対しても同様の操作を行う。また、サブ処理部１ｂ２も、サブ処理部１ｂ１と同様に、第１のリンクＬ１および第２のリンクＬ２の操作を行う。
【００２８】
例えば、処理部１ｂは、サブ処理部１ｂ１およびサブ処理部１ｂ２により、第１のストレージ資源２ａおよび第２のストレージ資源２ｂに対するアクセス要求を分散して処理する。具体的には、サブ処理部１ｂ１が第１の排他資源を獲得し、第１のリンクＬ１により、第１のストレージ資源２ａへのアクセス要求を処理している間にも、サブ処理部１ｂ２は、第２の排他資源を獲得して第２のリンクＬ２を操作できる。
【００２９】
すなわち、処理部１ｂは、サブ処理部１ｂ１による第１のリンクＬ１を用いた第１のストレージ資源２ａに対するＩ／Ｏ処理と、サブ処理部１ｂ２による第２のリンクＬ２を用いた第２のストレージ資源２ｂに対するＩ／Ｏ処理とを並列に実行できる。あるいは、処理部１ｂは、サブ処理部１ｂ１による第２のリンクＬ２を用いた第２のストレージ資源２ｂに対するＩ／Ｏ処理と、サブ処理部１ｂ２による第１のリンクＬ１を用いた第１のストレージ資源２ａに対するＩ／Ｏ処理とを並列に実行することもできる。
【００３０】
ここで、ストレージ制御装置１は、単一のリンクおよび当該リンクに対応する単一の排他資源により、キャッシュメモリＣ１における使用済のページを管理することも考えられる。しかし、例えば、ＳＭＰのように、キャッシュメモリＣ１が複数のサブ処理部によって共有される場合、あるサブ処理部が排他資源を獲得してアクセス要求を処理している間は、他のサブ処理部で排他資源の獲得待ちが生じ、アクセス処理の並列度が低下する可能性がある。アクセス処理の並列度の低下を抑制するには、排他資源の獲得待ちの時間を減らすことが好ましい。
【００３１】
そこで、ストレージ制御装置１では、ストレージ装置２の記憶領域を複数のストレージ資源に分け、各ストレージ資源に対してリンクおよび当該リンクに対応する排他資源を設ける。上記の例では、リンクの数（ストレージ資源の数）を２としたが、リンクの数は、サブ処理部の数に応じて決定可能である。サブ処理部の数をＭ個（Ｍは２以上の整数）とすると、リンクの数（および排他資源の数）Ｎ（Ｎは２以上の整数）は、２≦Ｎ≦Ｍである。そして、各サブ処理部は、それぞれのストレージ資源をＮ個のうちの何れか１つの排他資源に割り当て、割り当てた排他資源を獲得して、当該ストレージ資源に関するＩ／Ｏ処理を行う。こうして、ストレージ制御装置１によれば、各サブ処理部における排他資源の獲得待ちの時間を減少させることができ、アクセス処理の並列度を向上させることができる。
【００３２】
なお、第１のリンクＬ１および第２のリンクＬ２に対して、空きページに対応するリンク要素を獲得し、追加する方法には次の方法が考えられる。例えば、記憶部１ａは、空きページに対応するリンク要素をポインタで連結したフリーリンク（あるいは、フリーリスト）を記憶する。フリーリンクも、リスト構造をもつデータである。そして、処理部１ｂは、各ストレージ資源に対するアクセス要求に応じた先着順で、フリーリストからリンク要素を取得し、アクセス先のストレージ資源に応じて第１のリンクＬ１または第２のリンクＬ２のＭＲＵ側に、獲得したリンク要素を追加する。この場合、記憶部１ａは、フリーリンクに対応する第３の排他資源を記憶する。
【００３３】
フリーリンクをキャッシュメモリＣ１に対して１つ用意し、当該フリーリンクから、第１のリンクＬ１および第２のリンクＬ２へのリンク要素の獲得を行うことが好ましい。なぜなら、第１のリンクＬ１用のフリーリンク、および、第２のリンクＬ２用のフリーリンクというように、複数のフリーリンクを設けると、その分、１つのストレージ資源へのアクセスに利用可能なキャッシュ容量の上限が制限されてしまうからである。例えば、Ｎ個のフリーリンクを設けるとすると、あるストレージ資源に対して使用できるキャッシュ容量の上限は、キャッシュメモリＣ１の全体の容量の１／Ｎになってしまう。そこで、フリーリンクを１つとすることで、処理部１ｂは、アクセス状況に応じたキャッシュ容量を（例えば、アクセスが多いほど多い容量を、アクセスが少ないほど少ない容量を）各ストレージ資源に割り振ることができる。アクセスがより多いストレージ資源に、より多くのキャッシュ容量を割くことで、ストレージ装置２へのデータアクセス性能を向上できる。
【００３４】
ただし、当初の各ストレージ資源に対するアクセス状況に応じた負荷が、その後も変わらずに継続するとは限らない。あるストレージ資源では、当初アクセス数が多かったが、その後のアクセス数が少なくなることもある。また、別のストレージ資源では、当初アクセス数が少なかったが、その後のアクセス数が多くなることもある。
【００３５】
そこで、処理部１ｂは、空きページがない状況で、第１のストレージ資源２ａに割り当てられたキャッシュ容量が不足し、かつ、当該キャッシュ容量が閾値以下（第１のリンクＬ１に属するリンク要素数が閾値以下）の場合、第２のストレージ資源２ｂに割り当て済のページを、第１のストレージ資源２ａに再割り当てしてもよい。
【００３６】
すなわち、処理部１ｂは、第２のリンクＬ２のリンク要素（例えば、ＬＲＵ側にあって第２のストレージ資源２ｂに未書き込みのデータが存在しないページに対応するもの）を獲得し、第１のリンクＬ１に移し替えてもよい。リンク要素の移し替えは、当該リンク要素に対応するページを、あるストレージ資源から別のストレージ資源に再割り当てすることに相当する。例えば、上記の移し替えにより、第２のストレージ資源２ｂのアクセス処理に利用可能なキャッシュ容量は減少し、第１のストレージ資源２ａのアクセス処理に利用可能なキャッシュ容量は増加する。
【００３７】
一方、第１のストレージ資源２ａに割り当てられたキャッシュ容量が閾値より大きい（第１のリンクＬ１に属するリンク要素数が閾値より大きい）場合、処理部１ｂは、第１のリンクＬ１を用いて、追い出し対象のページを特定し、当該ページを再利用する。ただし、処理部１ｂは、当該再利用の際に、第１のリンクＬ１が示す第１のページ群に属する再利用可能なページが不足する場合には、第２のリンクＬ２に含まれるリンク要素を第１のリンクＬ１に移し替えてもよい。
【００３８】
例えば、処理部１ｂは、リンク要素の移し替えを行うか否かをアクセス要求の受け付け時や周期的なタイミングなどで判定し（上記のキャッシュ容量不足かつキャッシュ容量閾値以下の判定）、判定に応じて、リンク要素の移し替えを行うことが考えられる。
【００３９】
ところで、リンク要素の移し替えでは、移し替え元のリンクの排他資源の獲得、移し替え元のリンクにおける移し替え対象ページの解放、移し替え元のリンクの排他資源の解放、移し替え先のリンクの排他資源の獲得、移し替え先のリンクへの該当ページのリンク要素追加といった手順を伴う。したがって、リンク要素の移し替えは、これら手順の実行を要し、アクセス要求に対する処理のオーバーヘッドとなり得る。このため、キャッシュ容量の不足のたびに毎回、リンク要素の移し替えの動作を行っていると、移し替え先のリンクに対応するストレージ資源に対するアクセス負荷が高い場合に、当該ストレージ資源へのアクセスに時間がかかる可能性がある。そこで、処理部１ｂは、各ストレージ資源への負荷を考慮して、一度に移し替えるリンク要素の数を変更してもよい。
【００４０】
例えば、処理部１ｂは、あるストレージ資源に対応するリンクが連続してリンク要素の移し替え先となった回数が多いほど、一度に移し替えるリンク要素の数を増加させることが考えられる。該当のストレージ資源には、連続的にアクセスが発生しており、当該ストレージ資源に係るアクセス負荷が高まっていると推定できるからである。
【００４１】
あるいは、処理部１ｂは、移し替え元のリンクに対応するストレージ資源に対する第１のアクセス数と、移し替え先のリンクに対応するストレージ資源に対する第２のアクセス数との比較に応じて、一度に移し替えるリンク要素の数を増やしてもよい。例えば、処理部１ｂは、第２のアクセス数が、第１のアクセス数よりも大きい場合に、第２のアクセス数と第１のアクセス数との差に応じて、一度に移し替えるリンク要素の数を増やしてもよい。より具体的には、処理部１ｂは、第２のアクセス数と第１のアクセス数との差が大きいほど、一度に移し替えるリンク要素の数を増加させることが考えられる。
【００４２】
このようにして、ストレージ制御装置１は、ページの再割り当てに伴うリンク要素の移し替えの回数を低減し、ストレージ装置２に対するアクセスを高速化することもできる。
以下の説明では、より具体的なストレージ装置を例示して、ストレージ制御装置１の機能を更に詳細に説明する。
【００４３】
［第２の実施の形態］
図２は、第２の実施の形態のストレージ装置のハードウェア例を示す図である。ストレージ装置１００は、コントローラモジュール（ＣＭ：Controller Module）１１０，１１０ａおよびドライブ収納部１２０を有する。
【００４４】
ＣＭ１１０，１１０ａは、ドライブ収納部１２０に収納された複数のＨＤＤに対するアクセスを制御するストレージ制御装置である。例えば、ドライブ収納部１２０は、ＨＤＤ１２１，１２２，１２３，・・・を有する。ドライブ収納部１２０は、ＨＤＤに代えて、または、ＨＤＤに加えて、ＳＳＤなどの他の種類の記憶デバイスを収納してもよい。ＣＭ１１０は、ドライブ収納部１２０に収納された複数のＨＤＤを組合せて、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）の技術により、論理的な記憶領域を構築し、サーバ２００の処理に用いられるデータを当該記憶領域に格納する。ＣＭ１１０，１１０ａは、第１の実施の形態のストレージ制御装置１の一例である。
【００４５】
ここで、ストレージ装置１００におけるリソースの一単位にＲＡＩＤ論理ユニット（ＲＬＵ：RAID group Logical Unit）が挙げられる。ＲＬＵは、ＲＡＩＤグループに相当する論理的な記憶領域である。例えば、ＣＭ１１０，１１０ａは、ＲＬＵを更に分割した論理的な記憶領域（論理ユニット（ＬＵ）と称する）を作成し、サーバ２００に提供することができる。ＬＵは、ＬＵＮ（Logical Unit Number）と呼ばれる識別番号により識別される。ＬＵもストレージ装置１００におけるリソースの一単位である。
【００４６】
ＣＭ１１０は、プロセッサ１１１、ＲＡＭ１１２、フラッシュメモリ１１３、ＤＩ（Drive Interface）１１４、ＣＡ（Channel Adapter）１１５、ＮＡ（Network Adapter）１１６、媒体リーダ１１７およびＣＭ間通信ＩＦ（InterFace）１１８を有する。これらのハードウェアは、ＣＭ１１０内のバスに接続されている。ＣＭ１１０ａもＣＭ１１０と同様のハードウェアを有する。
【００４７】
プロセッサ１１１は、ＣＭ１１０の情報処理を制御するハードウェアである。プロセッサ１１１は、複数のコアを備えるマルチコアプロセッサである。複数のコアは、コア１１１ａ，１１１ｂ，・・・を含む。
【００４８】
ＲＡＭ１１２は、ＣＭ１１０の主記憶装置である。ＲＡＭ１１２は、揮発性の半導体メモリである。ＲＡＭ１１２として、例えば、ＳＲＡＭ（Static RAM）やＤＲＡＭ（Dynamic RAM）などが用いられる。ＲＡＭ１１２は、プロセッサ１１１により実行されるＯＳやファームウェアのプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ１１２は、プロセッサ１１１による処理に用いられる各種データを記憶する。
【００４９】
ここで、コア１１１ａ，１１１ｂ，・・・は、ＲＡＭ１１２を共有して処理を実行する。複数のコアで物理メモリ（例えば、ＲＡＭ１１２）を共有して処理を実行する手法は、ＳＭＰと呼ばれる。
【００５０】
フラッシュメモリ１１３は、ＣＭ１１０の補助記憶装置である。フラッシュメモリ１１３は、不揮発性の半導体メモリであり、ＯＳやファームウェアを含むプログラムや各種データなどを記憶する。
【００５１】
ＤＩ１１４は、ドライブ収納部１２０と通信するためのインタフェースである。例えば、ＤＩ１１４として、ＳＡＳ（Serial Attached SCSI）（SCSIは、Small Computer System Interfaceの略）などのインタフェースを用いることができる。
【００５２】
ＣＡ１１５は、ＳＡＮ（Storage Area Network）１０に接続される通信インタフェースである。ＣＡ１１５は、ＳＡＮ１０を介して、ＳＡＮ１０に接続されているサーバ２００と通信する。ＣＡ１１５として、例えばＦＣ（Fibre Channel）のインタフェースを用いることができる。
【００５３】
ＮＡ１１６は、ＬＡＮ（Local Area Network）２０を介して他のコンピュータと通信する通信インタフェースである。ＮＡ１１６として、例えばイーサネット（登録商標）のインタフェースを用いることができる。
【００５４】
媒体リーダ１１７は、記録媒体３０に記憶されたプログラムやデータを読み取る装置である。記録媒体３０として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することができる。媒体リーダ１１７は、例えば、プロセッサ１１１からの命令に従って、記録媒体３０から読み取ったプログラムやデータを、ＲＡＭ１１２やフラッシュメモリ１１３に格納する。
【００５５】
ＣＭ間通信ＩＦ１１８は、ＣＭ１１０ａと接続するためのインタフェースである。ＣＭ１１０は、ＣＭ間通信ＩＦ１１８を用いて、ＣＭ１１０ａと連携してデータアクセスを行える。例えば、ＣＭ１１０を運用系、ＣＭ１１０ａを待機系としてもよい。あるいは、ＣＭ１１０，１１０ａの両方を運用系として、データアクセスを分散して行ってもよい。何れの場合も、一方の故障時に他方でデータアクセスを引き継ぐことができ、ユーザの業務が停止されることを防げる。なお、以下の説明では、ＣＭ１１０に関して主に説明するが、ＣＭ１１０ａも、ＣＭ１１０と同様の機能を有する。
【００５６】
なお、第１の実施の形態では、ストレージ制御装置１がストレージ装置２に外付けされる例を示したが、図２で例示されるように、ＣＭ１１０（ストレージ制御装置１の一例）がストレージ装置１００に内蔵されてもよい。
【００５７】
図３は、ＣＭの機能例を示す図である。ＣＭ１１０は、記憶部１３０、資源割当部１４０、アクセス処理部１５０，１６０および監視部１７０を有する。記憶部１３０は、ＲＡＭ１１２の記憶領域を用いて実現される。資源割当部１４０、アクセス処理部１５０，１６０および監視部１７０は、プロセッサ１１１により実現される。例えば、プロセッサ１１１は、ＲＡＭ１１２に記憶されたプログラムを実行することで、資源割当部１４０、アクセス処理部１５０，１６０および監視部１７０の機能を発揮する。ここで、プロセッサ１１１は、コア１１１ａ，コア１１１ｂ，・・・により、アクセス処理部１５０，１６０の機能を並列に実現することができる。
【００５８】
記憶部１３０は、ストレージ装置１００に格納されたデータアクセスに用いられるキャッシュメモリを提供する。ここで、以下の説明では、キャッシュメモリを“キャッシュ”と略記する。キャッシュを形成するメモリ領域の一単位はページと呼ばれる。１ページ当たりのサイズは、例えば、６５ＫＢ（Kilo Bytes）である。記憶部１３０は、ＣＢＥ（Cache Bundle Element）と呼ばれるページ管理用のテーブルを、ページ毎に記憶する。ＣＢＥは、第１の実施の形態におけるリンク要素の一例である。空きページに対応するＣＢＥは、ＣＢＥに含まれるポインタによって連結される。空きページに対応するＣＢＥによるリスト構造のデータ（連結リスト）を、フリーリンクと称する。フリーリンクは、フリーリストなどと呼ばれてもよい。
【００５９】
また、使用済ページに対応するＣＢＥは、フリーリンクとは別個のリンクを形成する。使用済ページを管理するためのＣＢＥのリンクは、ＬＲＵのアルゴリズムによるページ獲得の制御に用いられる。このため、使用済ページを管理するためのＣＢＥのリンクを、ＬＲＵリンクと呼ぶ。ＬＲＵリンクもリスト構造のデータ（連結リスト）である。ＬＲＵリンクは、ＬＲＵリストと呼ばれてもよい。記憶部１３０は、ストレージ装置１００における記憶リソースの１つのグループに対して１つのＬＲＵリンクを記憶する。第２の実施の形態の例では、ストレージ装置１００における記憶リソースは、２つのグループに分けられる。このため、記憶部１３０は、２つのＬＲＵリンクを記憶する。
【００６０】
資源割当部１４０は、ＬＲＵリンク（あるいは、ＬＲＵリンクの操作のための排他資源）に、各ＬＵを割り当てる。例えば、資源割当部１４０は、ＲＬＵやＬＵなどの所定の単位のリソースの集合を、１つのＬＲＵリンクに割り当てる。例えば、資源割当部１４０は、複数のＬＲＵリンクそれぞれに対して、均等な数のリソースを割り当てる。ただし、資源割当部１４０は、複数のＬＲＵリンクそれぞれに対して、均等な容量のリソースを割り当ててもよい。１つのＬＲＵリンクに割り当てられたリソースの集合は、第１の実施の形態のストレージ資源の一例である。
【００６１】
アクセス処理部１５０は、ストレージ装置１００に格納されたデータに対するアクセス要求（Ｉ／Ｏ要求と称してもよい）をサーバ２００から受信し、記憶部１３０に設けられたキャッシュを用いて、アクセス要求を処理する。
【００６２】
具体的には、アクセス処理部１５０は、データの読み出しのアクセス要求を受け付けると、アクセス先のＬＵから該当のデータを読み出し、キャッシュに格納し、当該データをサーバ２００に応答する。以後、同じデータに対する読み出しのアクセス要求を受け付けると、アクセス処理部１５０は、キャッシュから該当のデータを読み出して、サーバ２００に応答する。
【００６３】
また、アクセス処理部１５０は、データの書き込みのアクセス要求および書き込み対象のデータをサーバ２００から受け付けると、書き込み対象のデータをキャッシュに格納し、書き込みの完了をサーバ２００に応答する。アクセス処理部１５０は、処理の空き時間の発生時や周期的なタイミングで、キャッシュに格納されたデータ（あるいは、データが格納されたページ）を、ＬＲＵのアルゴリズムに基づいて、キャッシュからＬＵに書き戻す。このような書き込み制御は、ライトバックと呼ばれる。ただし、以下の説明では、キャッシュからＬＵへの書き戻しの処理を指して「ライトバック」と呼ぶことがある。ライトバック対象となるデータは、キャッシュ上で更新されたデータあるいはサーバ２００から受け付けた新規の書き込みデータである。また、ＬＲＵのアルゴリズムにより、最近アクセスされていないページに格納されたデータが書き戻し対象として優先的に選択される。
【００６４】
アクセス処理部１５０は、新たなデータを格納するためのページ（またはＣＢＥ）を獲得する際、ページの獲得を実行する。
アクセス処理部１５０は、Ｉ／Ｏの実行に応じて、ＬＲＵリンクを操作する。例えば、空きページが枯渇し、キャッシュの容量が不足すると、アクセス処理部１５０は、該当のＬＲＵリンクのページを、ＬＲＵのアルゴリズムに基づいて解放する。すなわち、アクセス処理部１５０は、解放対象とするページを、最近アクセスされていないページから優先的に選択する。そして、アクセス処理部１５０は、解放したページを再利用する。なお、アクセス処理部１５０は、書き戻し未実行のデータが格納されているページを再利用の対象外とする。アクセス処理部１５０は、あるＬＲＵリンクにおいて、フリーリンクから空きページを獲得できないとき、所定の条件に基づき、別のＬＲＵリンクから当該ＬＲＵリンクへＣＢＥを移し替えることもある。
【００６５】
アクセス処理部１６０は、アクセス処理部１５０と同様の処理を行う。アクセス処理部１５０，１６０は、アクセス要求に対する処理を並列に行える。アクセス処理部１６０は、アクセス処理部１６０によるＩ／Ｏの実行に応じて、アクセス処理部１５０と同様に、ＬＲＵリンクを操作する。アクセス処理部１５０，１６０は、それぞれ別個の排他資源を獲得することで、それぞれが獲得した排他資源に対応するＬＲＵリンクを並列に操作可能である。
【００６６】
監視部１７０は、各ストレージ資源に対するアクセス数（Ｉ／Ｏ数）を監視し、監視に応じて、アクセス処理部１５０，１６０によるＩ／Ｏ処理とは非同期に（例えば、周期的に）、各ストレージ資源に対して割り当てられたＣＢＥの数を調整する。例えば、監視部１７０は、ＣＢＥの数が少ない（すなわち、獲得ページ数が少ない）方のストレージ資源へのアクセス数が、ＣＢＥの数が多い（すなわち、獲得ページ数が多い）方のストレージ資源のアクセス数よりも多いことを検出する。すると、監視部１７０は、ＣＢＥの数が多い方のストレージ資源のＣＢＥを、ＣＢＥの数が少ない方のストレージ資源のＬＲＵリンクに移す。
【００６７】
次に、２つのＬＲＵに対して設けられる排他資源の例を説明する。
図４は、排他資源の分割例を示す図である。フリーリンク５０は、空きページの管理に用いられる。フリーリンク５０には、共通排他資源が対応付けられている。フリーリンク５０は、キャッシュの全ページに対して１つ設けられる。共通排他資源は、フリーリンク５０に対する１つの排他資源である。このため、フリーリンク５０に対する操作（例えば、フリーリンク５０からのＣＢＥの獲得）は、アクセス処理部１５０，１６０のうち、共通排他資源を獲得した方によって排他的に行われる。
【００６８】
ＬＲＵリンク６０は、ストレージ資源８０に対して割り当てられたＬＲＵリンクである。ＬＲＵリンク６０には、排他資源＃０が対応付けられている。ＬＲＵリンク７０は、ストレージ資源９０に対して割り当てられたＬＲＵリンクである。ＬＲＵリンク７０には、排他資源＃１が対応付けられている。ＬＲＵリンク６０，７０には、それぞれ別個に排他資源が設けられている。このため、アクセス処理部１５０，１６０は、ＬＲＵリンク６０，７０に対する操作を並列に行える。
【００６９】
例えば、アクセス処理部１５０が排他資源＃０を獲得してＬＲＵリンク６０の操作を行っている間、アクセス処理部１６０は、排他資源＃１を獲得し、ＬＲＵリンク７０の操作を行える。あるいは、アクセス処理部１６０が排他資源＃０を獲得してＬＲＵリンク６０を用いた処理を行っている間、アクセス処理部１５０は、排他資源＃１を獲得し、ＬＲＵリンク７０の操作を行える。
【００７０】
ここで、例えば、ストレージ装置１００はＲＬＵ＃０，＃１，＃２，＃３を含む。また、ＲＬＵ＃０は、ＬＵ＃０，＃１を含む。ＲＬＵ＃１は、ＬＵ＃２，＃３を含む。ＲＬＵ＃２は、ＬＵ＃４，＃５を含む。ＲＬＵ＃３は、ＬＵ＃６，＃７を含む。そして、ストレージ資源８０は、ＲＬＵ＃０，＃２を含む。ストレージ資源９０は、ＲＬＵ＃１，＃３を含む。すなわち、ストレージ資源８０に属するＲＬＵの数は２であり、ＬＵの数は４である。ストレージ資源９０に属するＲＬＵの数は２であり、ＬＵの数は４である。すなわち、ＬＲＵリンク６０，７０には、均等に、ＲＬＵまたはＬＵが割り当てられている。
【００７１】
図５は、記憶部の記憶領域の例を示す図である。記憶部１３０は、管理領域１３１、テーブル領域１３２およびキャッシュ１３３を含む。例えば、管理領域１３１、テーブル領域１３２およびキャッシュ１３３の順に、記憶部１３０内の位置を示すアドレスが大きくなる。
【００７２】
管理領域１３１は、共通排他資源および排他資源＃０，＃１を記憶する記憶領域である。前述のように、共通排他資源は、フリーリンク５０に対応する排他資源（セマフォ）である。排他資源＃０は、ＬＲＵリンク６０に対応する排他資源（セマフォ）である。排他資源＃１は、ＬＲＵリンク７０に対する排他資源（セマフォ）である。共通排他資源および排他資源＃０，＃１は、当該排他資源がアクセス処理部１５０，１６０によって獲得済か、あるいは、アクセス処理部１５０，１６０の何れにも獲得されていないか（未獲得）を示す排他制御用のフラグ（排他フラグと称する）である。例えば、共通排他資源および排他資源＃０，＃１に相当する排他フラグ＝“１”であれば獲得済、排他フラグ＝“０”であれば未獲得を示す。
【００７３】
テーブル領域１３２は、複数のＣＢＥを記憶する記憶領域である。１つのＣＢＥは、キャッシュ１３３における１つのページに対応付けられる。
キャッシュ１３３は、複数のページが属する記憶領域である。前述のように、例えば、１つのページのサイズは６５ＫＢである。
【００７４】
図６は、ＣＢＥの例を示す図である。ＣＢＥ４０は、例えば、複数のフィールドをもつ構造体として表される。ＣＢＥ４０は、ＣＢＥ  ＩＤ（IDentifier）、Ｌｉｎｋ  Ｔｙｐｅ、Ｐｒｅｖ  ＣＢＥ  ＩＤ、Ｎｅｘｔ  ＣＢＥ  ＩＤ、Ｃａｃｈｅ  Ｐａｇｅ  Ａｄｄｒｅｓｓ、ＬＵＮ、ＬＢＡ（Logical Block Address）およびＤｉｒｔｙ  Ｆｌａｇのフィールドを含む。
【００７５】
ＣＢＥ  ＩＤのフィールドには、ＣＢＥの識別情報が設定される。Ｌｉｎｋ  Ｔｙｐｅのフィールドには、該当のＣＢＥの所属先のリンクがフリーリンクかＬＲＵリンクかを示す情報が設定される。Ｐｒｅｖ  ＣＢＥ  ＩＤのフィールドには、前のＣＢＥへのポインタが設定される。Ｎｅｘｔ  ＣＢＥ  ＩＤのフィールドには、次のＣＢＥへのポインタが設定される。Ｃａｃｈｅ  Ｐａｇｅ  Ａｄｄｒｅｓｓのフィールドには、キャッシュ１３３におけるページのアドレス（当該ＣＢＥに対応するページのアドレス）が設定される。ＬＵＮのフィールドには、該当のページに格納されたデータの格納先のＬＵに対応するＬＵＮが設定される。ＬＢＡのフィールドには、該当のＬＵにおける格納先のＬＢＡ（論理ブロックアドレス）が設定される。Ｄｉｒｔｙ  Ｆｌａｇのフィールドには、ダーティフラグが設定される。例えば、該当のページに格納されたデータのライトバックを未実行であれば、Ｄｉｒｔｙ  Ｆｌａｇ＝“Ｔｒｕｅ”である。また、該当のページに格納されたデータのライトバックを実行済、または、当該データがライトバック対象でなければ、Ｄｉｒｔｙ  Ｆｌａｇ＝“Ｆａｌｓｅ”である。
【００７６】
例えば、ページが空きの場合、当該ページに対応するＣＢＥのＬｉｎｋ  Ｔｙｐｅはフリーリンクを示し、ＬＵＮやＬＢＡは設定なし、Ｄｉｒｔｙ  Ｆｌａｇは“Ｆａｌｓｅ”である。
【００７７】
また、例えば、ページが使用済の場合、当該ページに対応するＣＢＥのＬｉｎｋ  ＴｙｐｅはＬＲＵリンクを示す。また、ＬＵＮやＬＢＡは当該ページのデータの格納場所（書き戻し先や読み出し元）を示す。そして、Ｄｉｒｔｙ  Ｆｌａｇはライトバックの実行済／未実行に応じた値となる。
【００７８】
図７は、ＬＲＵリンクの例を示す図である。ＬＲＵリンク６０は、例えば、ＣＢＥ６１，６２，６３を有する。ここで、図７では、図６で例示した複数のフィールドのうちの一部のフィールドの図示が省略されている。
【００７９】
ＣＢＥ６１は、ＬＲＵリンク６０のうちの最もＬＲＵ側にあるリンク要素である。ＣＢＥ６１は、ＬＲＵポインタ９１によって示される。例えば、ＣＢＥ６１のＣＢＥ  ＩＤは“１”である。ＣＢＥ６１のＰｒｅｖ  ＣＢＥ  ＩＤは“０ｘｆｆ”である。Ｐｒｅｖ  ＣＢＥ  ＩＤ＝“０ｘｆｆ”は、前のＣＢＥが存在しないことを示す。ＣＢＥ６１のＮｅｘｔ  ＣＢＥ  ＩＤは“２”である。
【００８０】
ＣＢＥ６２は、ＣＢＥ６１のＮｅｘｔ  ＣＢＥ  ＩＤによって示されるリンク要素である。ＣＢＥ６２のＣＢＥ  ＩＤは“２”である。ＣＢＥ６２のＰｒｅｖ  ＣＢＥ  ＩＤは“１”である。ＣＢＥ６２のＮｅｘｔ  ＣＢＥ  ＩＤは“３”である。
【００８１】
ＣＢＥ６３は、ＣＢＥ６２のＮｅｘｔ  ＣＢＥ  ＩＤによって示されるリンク要素である。また、ＣＢＥ６３は、ＬＲＵリンク６０のうちの最もＭＲＵ側にあるリンク要素である。ＣＢＥ６３は、ＭＲＵポインタ９２によって示される。例えば、ＣＢＥ６３のＣＢＥ  ＩＤは“３”である。ＣＢＥ６２のＰｒｅｖ  ＣＢＥ  ＩＤは“２”である。ＣＢＥ６３のＮｅｘｔ  ＣＢＥ  ＩＤは“０ｘｆｆ”である。Ｎｅｘｔ  ＣＢＥ  ＩＤ＝“０ｘｆｆ”は、次のＣＢＥが存在しないことを示す。
【００８２】
ＬＲＵリンク６０にＣＢＥが追加される場合、ＭＲＵ側に新たなＣＢＥが追加されることになる。
また、ＬＲＵリンク７０に関しても同様にしてポインタによりＣＢＥが連結される。ＬＲＵリンク７０に対するＬＲＵポインタおよびＭＲＵポインタも、ＬＲＵポインタ９１およびＭＲＵポインタ９２とは別個に設けられている。
【００８３】
また、ＬＲＵポインタ９１やＭＲＵポインタ９２は、例えば、テーブル領域１３２内の排他資源＃０に対応する所定の記憶領域に格納される。あるいは、ＬＲＵポインタ９１やＭＲＵポインタ９２は、管理領域１３１内に、排他資源＃０と共に（例えば、排他資源＃０に連続する記憶領域に）格納されてもよい。ＬＲＵリンク７０のＬＲＵポインタやＭＲＵポインタも同様である。
【００８４】
図８は、フリーリンクの例を示す図である。フリーリンク５０は、例えば、ＣＢＥ５１，５２，５３を有する。ここで、図８では、図６で例示した複数のフィールドのうちの一部のフィールドの図示が省略されている。
【００８５】
ＣＢＥ５１は、フリーリンク５０のうちの先頭のリンク要素である。ＣＢＥ５１は、フリーリンクポインタ９３によって示される。フリーリンクポインタ９３は、フリーリンク５０の先頭のＣＢＥを示すポインタである。例えば、ＣＢＥ５１のＣＢＥ  ＩＤは“４”である。ＣＢＥ５１のＰｒｅｖ  ＣＢＥ  ＩＤは“０ｘｆｆ”である。ＣＢＥ５１のＮｅｘｔ  ＣＢＥ  ＩＤは“５”である。
【００８６】
ＣＢＥ５２は、ＣＢＥ５１のＮｅｘｔ  ＣＢＥ  ＩＤによって示されるリンク要素である。ＣＢＥ５２のＣＢＥ  ＩＤは“５”である。ＣＢＥ５２のＰｒｅｖ  ＣＢＥ  ＩＤは“０ｘｆｆ”である。ＣＢＥ５２のＮｅｘｔ  ＣＢＥ  ＩＤは“６”である。
【００８７】
ＣＢＥ５３は、ＣＢＥ５２のＮｅｘｔ  ＣＢＥ  ＩＤによって示されるリンク要素である。ＣＢＥ５３のＣＢＥ  ＩＤは“６”である。ＣＢＥ５３のＰｒｅｖ  ＣＢＥ  ＩＤは“０ｘｆｆ”である。ＣＢＥ５３のＮｅｘｔ  ＣＢＥ  ＩＤは“０ｘｆｆ”である。
【００８８】
なお、上記のように、フリーリンク５０の各ＣＢＥのＰｒｅｖ  ＣＢＥ  ＩＤは“０ｘｆｆ”でもよい。ただし、具体的な値（例えば、ＣＢＥ５２ではＰｒｅｖ  ＣＢＥ  ＩＤ＝“４”、ＣＢＥ５３ではＰｒｅｖ  ＣＢＥ  ＩＤ＝“５”など）が設定されてもよい。
【００８９】
また、フリーリンクポインタ９３は、例えば、テーブル領域１３２内の共通排他資源に対応する所定の記憶領域に格納される。あるいは、フリーリンクポインタ９３は、管理領域１３１内に、共通排他資源と共に（例えば、共通排他資源に連続する記憶領域に）格納されてもよい。
【００９０】
次に、ＣＭ１１０による処理の手順を説明する。まず、新規ＬＵを作成した際に、ＬＲＵリンク６０，７０に新規ＬＵを割り当てる処理を説明する。
図９は、新規ＬＵ割り当て処理の例を示すフローチャートである。以下、図９に示す処理をステップ番号に沿って説明する。
【００９１】
（Ｓ１１）資源割当部１４０は、各資源に対応するＬＵ数を参照する。ここで、「各資源」とは、排他資源＃０，＃１または排他資源＃０，＃１に対応するＬＲＵリンク６０，７０を示す。
【００９２】
（Ｓ１２）資源割当部１４０は、ＬＵ数が最小の資源に新規ＬＵを割り当てる。例えば、対応するＬＵ数が最小のＬＲＵリンクがＬＲＵリンク６０の場合、資源割当部１４０は、ＬＲＵリンク６０に、新規ＬＵを割り当てる。資源割当部１４０は、ＬＵと排他資源との対応関係を示す情報を記憶部１３０に格納する。これにより、アクセス処理部１５０，１６０は、アクセス要求に含まれるＬＵと記憶部１３０に記憶された当該情報を確認することで、獲得する排他資源や当該排他資源に対応するＬＲＵリンクを識別可能になる。
【００９３】
次に、アクセス処理部１５０による処理手順を説明する。アクセス処理部１５０の手順を主に例示するが、アクセス処理部１６０もアクセス処理部１５０と同様の手順を実行する。
【００９４】
図１０は、Ｉ／Ｏ時ＣＢＥ獲得処理の例を示すフローチャートである。以下、図１０に示す処理をステップ番号に沿って説明する。アクセス処理部１５０は、新たなＩ／Ｏを実行し、新たにＣＢＥを獲得する際に、下記の手順を実行する。以下では、一例として、Ｉ／Ｏ対象のストレージ資源をストレージ資源８０とする。ただし、Ｉ／Ｏ対象がストレージ資源９０の場合も同様の手順となる。
【００９５】
（Ｓ２１）アクセス処理部１５０は、フリーリンク５０にＣＢＥがあるか否かを判定する。フリーリンク５０にＣＢＥがある場合、アクセス処理部１５０は、ステップＳ２２に処理を進める。フリーリンク５０にＣＢＥがない場合、アクセス処理部１５０は、ステップＳ２３に処理を進める。
【００９６】
（Ｓ２２）アクセス処理部１５０は、フリーリンク５０からＣＢＥを獲得する。具体的には、アクセス処理部１５０は、共通排他資源を獲得済に設定し、フリーリンク５０から（例えば、フリーリンク５０の先頭から）ＣＢＥを取得し（当該ＣＢＥはフリーリンク５０から外れる）、共通排他資源を未獲得に設定する。アクセス処理部１５０は、排他資源＃０を獲得済に設定し、取得したＣＢＥをＬＲＵリンク６０のＭＲＵ側に連結する。アクセス処理部１５０は、排他資源＃０を未獲得に設定する。そして、アクセス処理部１５０は、Ｉ／Ｏ時ＣＢＥ獲得処理を終了する。
【００９７】
（Ｓ２３）アクセス処理部１５０は、自資源のＣＢＥ数が閾値ａよりも大きいか否か（自資源のＣＢＥ数＞閾値ａ）を判定する。自資源のＣＢＥ数が閾値ａよりも大きい場合、アクセス処理部１５０は、ステップＳ２４に処理を進める。自資源のＣＢＥ数が閾値ａ以下の場合、アクセス処理部１５０は、ステップＳ２６に処理を進める。ここで、「自資源」とは、アクセス処理部１５０が現在参照しているＬＲＵリンク６０を示す。「自資源のＣＢＥ数」とは、アクセス処理部１５０が現在参照しているＬＲＵリンク６０に属するＣＢＥの数である。
【００９８】
ここで、閾値ａは、アクセス頻度の比較的大きなストレージ資源のＬＲＵリンクに連結するＣＢＥの数のおおよその目標値であり、ＬＲＵリンクの数やデータへのアクセス状況などに応じて予め定められる。例えば、ＬＲＵリンクが２つの場合、全ＣＢＥ数（全ページ数）をＰとして、ａ≧Ｐ／２とすることが考えられる。
【００９９】
（Ｓ２４）アクセス処理部１５０は、自資源に削除可能なＣＢＥがあるか否かを判定する。自資源に削除可能なＣＢＥがある場合、アクセス処理部１５０は、ステップＳ２５に処理を進める。自資源に削除可能なＣＢＥがない場合、アクセス処理部１５０は、ステップＳ２６に処理を進める。「削除可能なＣＢＥがある場合」とは、該当のＬＲＵリンク（ＬＲＵリンク６０）において、Ｄｉｒｔｙ  Ｆｌａｇが“Ｆａｌｓｅ”のＣＢＥをＬＲＵ側から優先的に取得して、今回のデータサイズ分のＣＢＥを確保できる場合を示す。「削除可能なＣＢＥがない場合」とは、該当のＬＲＵリンク（ＬＲＵリンク６０）において、Ｄｉｒｔｙ  Ｆｌａｇが“Ｆａｌｓｅ”のＣＢＥをＬＲＵ側から優先的に取得して、今回のデータサイズ分のＣＢＥを確保できない場合を示す。
【０１００】
（Ｓ２５）アクセス処理部１５０は、自資源のＣＢＥを削除し、ＣＢＥを獲得する。具体的には、アクセス処理部１５０は、排他資源＃０を獲得済に設定し、ＬＲＵリンク６０から削除可能なＣＢＥを削除し（当該ＣＢＥに対応するページを解放し）、削除したＣＢＥを当該ＬＲＵリンク６０のＭＲＵ側に連結する。アクセス処理部１５０は、排他資源＃０を未獲得に設定する。そして、アクセス処理部１５０は、Ｉ／Ｏ時ＣＢＥ獲得処理を終了する。
【０１０１】
（Ｓ２６）アクセス処理部１５０は、別資源からのＣＢＥ獲得処理を実行する。処理の詳細は後述される。別資源からのＣＢＥ獲得処理は、別資源から自資源へのＣＢＥの移し替えということもできる。そして、アクセス処理部１５０は、Ｉ／Ｏ時ＣＢＥ獲得処理を終了する。
【０１０２】
なお、アクセス処理部１５０は、ストレージ資源８０に対して上記手順により新たなページを獲得すると、当該ページに対して今回のＩ／Ｏに関するデータを格納する。
図１１は、別資源からのＣＢＥ獲得処理の例を示すフローチャートである。以下、図１１に示す処理をステップ番号に沿って説明する。
【０１０３】
（Ｓ３１）アクセス処理部１５０は、相手資源から獲得するＣＢＥ数を決定する。ここで、「相手資源」とは、アクセス処理部１５０が現在獲得している排他資源以外の排他資源に対応するＬＲＵリンクである。例えば、アクセス処理部１５０は、予め定められた数のＣＢＥを獲得すると決定してもよい。また、アクセス処理部１５０は、ステップＳ２４で不足分のＣＢＥ数を算出し、当該不足分のＣＢＥ数（あるいは、当該不足分のＣＢＥ数に比例するＣＢＥ数）を、獲得するＣＢＥ数としてもよい。
【０１０４】
更に、後述するように、記憶部１３０は、前回、他のＬＲＵリンクからＣＢＥを移し替えたＬＲＵリンクを示す情報を記憶部１３０に記録している。そこで、アクセス処理部１５０は、当該情報に基づき、前回の移し替え先のＬＲＵリンクが、今回も連続して移し替え先となっている場合に、移し替え元のＬＲＵリンクから一度に獲得するＣＢＥ数を増やしてもよい。具体的には、１回目の移し替えでは獲得するＣＢＥ数を５とし、２回目の移し替えでも移し替え先が同じであれば、獲得するＣＢＥ数を１０（例えば、１回目の２倍）とするなどの方法が考えられる。また、移し替え先として選ばれた連続回数に応じて、一度に獲得するＣＢＥ数の増分を増やしてもよい（例えば、先の例に続き、３回目の移し替えでも移し替え先が同じであれば、獲得するＣＢＥ数を２０（１回目の４倍）とするなど）。
【０１０５】
（Ｓ３２）アクセス処理部１５０は、相手資源からＣＢＥを獲得する。例えば、ＬＲＵリンク７０からＬＲＵリンク６０へＣＢＥを移し替える場合、アクセス処理部１５０は、排他資源＃１を獲得し、ＬＲＵリンク７０のうち、ステップＳ３１で決定した数のＣＢＥをＬＲＵ側から優先的に獲得する。そして、アクセス処理部１５０は、排他資源＃１を未獲得に設定する。このとき、アクセス処理部１５０は、Ｄｉｒｔｙ  Ｆｌａｇ＝“Ｔｒｕｅ”（ライトバック未実行）のＣＢＥを獲得の対象外とする。アクセス処理部１５０は、排他資源＃０を獲得し、獲得したＣＢＥを、ＬＲＵリンク６０のＭＲＵ側に連結する。そして、アクセス処理部１５０は、排他資源＃０を未獲得に設定する。
【０１０６】
（Ｓ３３）アクセス処理部１５０は、ステップＳ３２において、ステップＳ３１で決定したＣＢＥ数のＣＢＥを獲得できたか否かを判定する。獲得できた場合、アクセス処理部１５０は、ステップＳ３６に処理を進める。獲得できなかった場合、アクセス処理部１５０は、ステップＳ３４に処理を進める。
【０１０７】
（Ｓ３４）アクセス処理部１５０は、変数Ａ（グローバル変数とする）にＦｌａｇをセットする。ここで、変数Ａに相当するＦｌａｇをＦｌａｇＡと称する。変数ＡにＦｌａｇをセットするとは、ＦｌａｇＡ＝“Ｔｒｕｅ”を設定することを示す。ＦｌａｇＡ＝“Ｔｒｕｅ”は、ＣＢＥ獲得待ちのＬＲＵリンクが存在することを示す。また、ＦｌａｇＡ＝“Ｆａｌｓｅ”は、ＣＢＥ獲得待ちのＬＲＵリンクが存在しないことを示す。
【０１０８】
（Ｓ３５）アクセス処理部１５０は、ステップＳ３２におけるＣＢＥの獲得数が０であるか否かを判定する。ＣＢＥの獲得数が０の場合、アクセス処理部１５０は、ステップＳ３７に処理を進める。ＣＢＥの獲得数が０でない場合、アクセス処理部１５０は、ステップＳ３６に処理を進める。
【０１０９】
（Ｓ３６）アクセス処理部１５０は、今回移し替え先となった資源（ＬＲＵリンク）を示す情報を記憶部１３０に記録する。このとき、アクセス処理部１５０は、連続して移し替え先となった回数も一緒に、記憶部１３０に記録してもよい。ステップＳ３６で記録された情報は、次に、アクセス処理部１５０またはアクセス処理部１６０がステップＳ３１を実行する際に用いられる。そして、アクセス処理部１５０は、別資源からのＣＢＥ獲得処理を終了する。
【０１１０】
（Ｓ３７）アクセス処理部１５０は、ＣＢＥ獲得待ちの状態に遷移する。アクセス処理部１５０は、他のＩ／Ｏ（例えば、アクセス処理部１６０によるライトバック）完了後に、Ｉ／Ｏ時ＣＢＥ獲得処理を再起動する。そして、アクセス処理部１５０は、Ｉ／Ｏ時ＣＢＥ獲得処理を再度実行し、別資源からのＣＢＥ獲得処理を終了する。
【０１１１】
なお、アクセス処理部１５０は、ストレージ資源８０に対して新たなページが獲得されると、当該ページに対して今回のＩ／Ｏに関するデータを格納する。
こうして、ＣＭ１１０は、Ｉ／Ｏにおいて、ＬＲＵリンク６０にＣＢＥを追加する際、キャッシュ１３３に空きページがない場合、ＬＲＵリンク７０に含まれるＣＢＥをＬＲＵリンク６０へ移し替える（Ｉ／Ｏ延長でのＣＢＥの移し替え）。
【０１１２】
特に、上記のように、アクセス処理部１５０は、ＣＢＥの移し替えの際に、前回の移し替え先のリンクと今回の移し替え先のリンクとが同じ場合、今回移し替えるＣＢＥの数を、前回移し替えたＣＢＥの数よりも増やす。これにより、現在アクセス頻度が高いと推定されるストレージ資源に対して、多くのキャッシュ容量を予め割り当てることが可能である。その結果、該当のストレージ資源に対する今後のアクセスに対するＣＢＥの移し替えの頻度を低減でき、ＣＢＥの移し替えに伴うオーバーヘッドを減らせる。その結果、ＣＭ１１０によるデータアクセスを高速化できる。
【０１１３】
また、ＣＭ１１０は、Ｉ／Ｏとは非同期にＣＢＥの移し替えを行う。
図１２は、Ｉ／Ｏ非同期のＣＢＥ移し替え処理の例を示すフローチャートである。以下、図１２に示す処理をステップ番号に沿って説明する。
【０１１４】
（Ｓ４１）監視部１７０は、各資源のＣＢＥ数を比較し、移し替え元／移し替え先の資源を決定する。ここで、「各資源のＣＢＥ数」は、各ＬＲＵリンクのＣＢＥ数（例えば、ＬＲＵリンク６０のＣＢＥ数およびＬＲＵリンク７０のＣＢＥ数）を示す。例えば、監視部１７０は、ＣＢＥ数が多い方（あるいは最大）のＬＲＵリンクを移し替え元とし、ＣＢＥ数が少ない方（あるいは最小）のＬＲＵリンクを移し替え先と決定する。なお、監視部１７０は、ステップＳ４１の処理を行うために、所定時間前から現時点までの期間において、排他資源毎に（ストレージ資源毎に）、Ｉ／Ｏが発行された回数をカウントし、記憶部１３０に記録しておく。ここで、「所定時間前」の時刻は、例えば、Ｉ／Ｏ非同期のＣＢＥ移し替え処理を前回行った時刻である。
【０１１５】
（Ｓ４２）監視部１７０は、各資源のＩ／Ｏの有無から移し替えるＣＢＥ数を決定する。ここで、「各資源のＩ／Ｏの有無」とは、各ＬＲＵリンクに対応するストレージ資源に対するＩ／Ｏの有無（例えば、ストレージ資源８０に対するＩ／Ｏの有無およびストレージ資源９０に対するＩ／Ｏの有無）を示す。ここで、移し替え先のＬＲＵリンクに対応するストレージ資源を、「移し替え先のストレージ資源」と呼び、移し替え元のＬＲＵリンクに対応するストレージ資源を、「移し替え元のストレージ資源」と呼ぶこととする。
【０１１６】
ステップＳ４２でのＣＢＥ数の決定方法には種々の方法が考えられる。例えば、監視部１７０は、移し替え先のストレージ資源への所定時間前から現時点までの期間におけるＩ／Ｏがあり、かつ、移し替え元のストレージ資源への同期間におけるＩ／Ｏがない場合、所定数ｘを移し替えるＣＢＥ数と決定する。あるいは、監視部１７０は、移し替え先のストレージ資源への所定時間前から現時点までの期間における第１のＩ／Ｏ数ｐが、移し替え元のストレージ資源への同期間における第２のＩ／Ｏ数ｑよりも多い場合に、所定数ｘを移し替えるＣＢＥ数と決定する。ここで、Ｉ／Ｏ数は、アクセス数と呼ばれてもよい。また、Ｉ／Ｏ数（アクセス数）は、各ストレージ資源に対する負荷を示す指標といえる。
【０１１７】
所定数ｘは、例えば、予め定められた値（例えば、キャッシュ１３３のサイズ６５ＭＢ（Mega Bytes）であり、総ページ数が６５ＭＢ／６５ＫＢ＝１０００の場合に、ｘ＝１０程度）とすることが考えられる。あるいは、監視部１７０は、第１のＩ／Ｏ数ｐと第２のＩ／Ｏ数ｑとの差ｄ（＝ｐ−ｑ）に応じてｘの値を決定してもよい。より具体的には、監視部１７０は、差ｄが大きいほど、ｘの値を大きくする（一例では、ｘ＝α＊ｄ（αは比例定数）とする）ことが考えられる。
【０１１８】
（Ｓ４３）監視部１７０は、ステップＳ４２で決定した数のＣＢＥの移し替えを実行する。具体的には、監視部１７０は、移し替え元の排他資源を獲得して当該排他資源に対応するＬＲＵリンクのＬＲＵ側からＣＢＥを解放し（ただし、Ｄｉｒｔｙ  Ｆｌａｇ＝“Ｔｒｕｅ”のＣＢＥを解放対象から除く）、排他資源を未獲得に戻す。そして、監視部１７０は、移し替え先の排他資源を獲得して当該排他資源に対応するＬＲＵリンクにＣＢＥを連結する。また、移し替え先の排他資源を未獲得に戻す。このとき、監視部１７０は、例えば、移し替え先のＬＲＵリンクのＬＲＵ側にＣＢＥを連結することで、当該ＣＢＥ（または、当該ＣＢＥに対応するページ）の解放および再利用のタイミングを早めることができる。
【０１１９】
このように、監視部１７０は、所定のタイミング（例えば、周期的なタイミング）で、ストレージ資源８０に対する負荷と、ストレージ資源９０に対する負荷とを比較する。監視部１７０は、負荷が大きい方のストレージ資源に対応するＬＲＵリンクから負荷が小さい方のストレージ資源に対応するＬＲＵリンクにＣＢＥを移し替える。特に、監視部１７０は、負荷の差に応じて、移し替えるＣＢＥの数を決定する。例えば、負荷としてアクセス数を用いることで、アクセス頻度の高いストレージ資源に対して、より多くのキャッシュ容量を割ける。これにより、各ストレージ資源に対するアクセス状況に応じて動的にキャッシュ容量を割り当てることができ、ＣＭ１１０によるデータアクセスを高速化できる。
【０１２０】
図１３は、ライトバック時のＣＢＥ解放処理の例を示すフローチャートである。以下、図１３に示す処理をステップ番号に沿って説明する。以下では、ＬＲＵリンク６０で管理されるページ群からストレージ資源８０へのライトバックが行われる場合を例示する。ただし、ＬＲＵリンク７０で管理されるページ群からストレージ資源９０へのライトバックが行われる場合も同様である。例えば、アクセス処理部１５０は、以下の手順を周期的に実行する。
【０１２１】
（Ｓ５１）アクセス処理部１５０は、排他資源＃０を獲得し、ＬＲＵリンク６０に連結されたＣＢＥをＬＲＵ側からＭＲＵ側へ順に参照して、Ｄｉｒｔｙ  Ｆｌａｇ＝“Ｔｒｕｅ”のページをライトバック対象のＣＢＥと決定する。例えば、アクセス処理部１５０は、参照順に、所定数のＣＢＥをライトバック対象とする。
【０１２２】
（Ｓ５２）アクセス処理部１５０は、ライトバック対象のＣＢＥに対応するページに格納されたデータをキャッシュ１３３から読み出し、ディスク（ＨＤＤ１２１，１２２，１２３，・・・）に書き込む（ライトバック実行）。このとき、アクセス処理部１５０は、書き込み先のＬＵやＬＢＡを、該当のＣＢＥのＬＵやＬＢＡのフィールドから取得する。
【０１２３】
（Ｓ５３）アクセス処理部１５０は、ライトバックによるディスクへの書き込みを完了する。アクセス処理部１５０は、ライトバックが完了したＣＢＥのＤｉｒｔｙ  Ｆｌａｇを、“Ｆａｌｓｅ”に設定する。
【０１２４】
（Ｓ５４）アクセス処理部１５０は、記憶部１３０に記憶された変数Ａを参照し、Ｆｌａｇがセットされているか否かを判定する。前述のように「Ｆｌａｇがセットされている」ことは、ＦｌａｇＡ＝“Ｔｒｕｅ”であることを示す。ＦｌａｇＡ＝“Ｔｒｕｅ”は、ＣＢＥ獲得待ちのＬＲＵリンクがあることを示す。変数ＡにＦｌａｇがセットされている場合（ＦｌａｇＡ＝“Ｔｒｕｅ”の場合）、アクセス処理部１５０は、ステップＳ５６に処理を進める。変数ＡにＦｌａｇがセットされていない場合（ＦｌａｇＡ＝“Ｆａｌｓｅ”の場合）、アクセス処理部１５０は、ステップＳ５５に処理を進める。
【０１２５】
（Ｓ５５）アクセス処理部１５０は、ライトバック対象のＣＢＥをＲＥＡＤ属性に変更する。アクセス処理部１５０は、ＲＥＡＤ属性とすることで、該当のＣＢＥに対応するページを読み出しのアクセス要求に対する応答に利用可能にする。アクセス処理部１５０は、排他資源＃０を未獲得に設定する。そして、アクセス処理部１５０はライトバック時のＣＢＥ解放処理を終了する。
【０１２６】
（Ｓ５６）アクセス処理部１５０は、共通排他資源を獲得する。アクセス処理部１５０は、ＬＲＵリンク６０におけるライトバック対象のＣＢＥを解放し、フリーリンク５０に接続する。アクセス処理部１５０は、共通排他資源および排他資源＃０を未獲得に設定する。また、アクセス処理部１５０は、変数ＡのＦｌａｇを解除（ＦｌａｇＡ＝“Ｆａｌｓｅ”に設定）する。そして、アクセス処理部１５０はライトバック時のＣＢＥ解放処理を終了する。
【０１２７】
このように、アクセス処理部１５０は、あるＬＲＵリンクで示されるページ群の一部のＣＢＥに対応するページに格納されたデータを、あるストレージ資源に書き戻した後、他のＬＲＵリンクに対するページの獲得待ちが発生しているか否かを判定する。そして、アクセス処理部１５０は、獲得待ちが発生している場合、書き戻したデータを格納していたページを解放し、解放したページに対応するＣＢＥを、フリーリンクに追加する。
【０１２８】
こうして、アクセス処理部１５０は、ＣＢＥをフリーリンク５０に接続することで、ＣＢＥ獲得待ちの他プロセスにより、フリーリンク５０からＣＢＥを獲得可能にする。すなわち、ＣＭ１１０は、一方のＬＲＵリストで示されるページ群に再利用可能なページが不足し、かつ、他のＬＲＵリストで示されるページ群に移し替え可能なページが不足する場合、何れかのＬＲＵリンクに属するＣＢＥを、フリーリンク５０に移す。その後、ＣＭ１１０は、フリーリンク５０に移したＣＢＥをＣＢＥ獲得待ちのＬＲＵリンクに追加する。なお、アクセス処理部１５０は、ＣＢＥ獲得待ちの他プロセスがある場合（図１１のステップＳ３７）、当該他プロセスにライトバックによるＩ／Ｏ完了を通知してもよい。
【０１２９】
ところで、ＣＭ１１０は、単一のリンクおよび当該リンクに対応する単一の排他資源により、キャッシュ１３３における使用済のページを管理することも考えられる。しかし、例えば、ＳＭＰのように、キャッシュ１３３がコア１１１ａ，１１１ｂ，・・・によって共有される場合、あるコアが排他資源を獲得してアクセス要求を処理している間は、他のコアで排他資源の獲得待ちが生じ、アクセス処理（Ｉ／Ｏ）の並列度が低下してしまう。
【０１３０】
そこで、ＣＭ１１０では、ＨＤＤ１２１，１２２，１２３，・・・により提供される論理領域を複数のストレージ資源に分け、各ストレージ資源に対してＬＲＵリンクおよび排他資源を設ける。第２の実施の形態の例では、リンクの数（ストレージ資源の数）を２としたが、リンクの数は、コアの数に応じて決定可能である。コアの数をＭ個（Ｍは２以上の整数）とすると、ＬＲＵリンクの数Ｎ（Ｎは２以上の整数）は、２≦Ｎ≦Ｍである。そして、各コアは、それぞれのストレージ資源をＮ個のうちの何れか１つの排他資源に割り当て、割り当てた排他資源を獲得して、当該ストレージ資源に関するＩ／Ｏ処理を行う。
【０１３１】
こうして、ＣＭ１１０によれば、各コアにおける排他資源の獲得待ちの時間を減少させることができる。その結果、ストレージ装置１００におけるアクセス処理の並列度を向上させることができる。あるいは、ＣＭ１１０がストレージ装置１００の外部に設けられる場合には、ストレージ装置１００に対するアクセス処理の並列度を向上させることができる。排他資源の獲得待ちの時間の減少の度合いは、各排他資源（各ＬＲＵリンク）に割り当てられたＬＵの数が均等で、かつ、各ＬＵに対するＩ／Ｏ負荷が同程度である場合に特に大きい。
【０１３２】
また、フリーリンク５０は、キャッシュ１３３に対して１つ設けられる。そして、ＣＭ１１０は、１つのフリーリンク５０から、ＬＲＵリンク６０およびＬＲＵリンク７０へのＣＢＥの獲得を行う。なぜなら、ＬＲＵリンク６０用のフリーリンク、および、ＬＲＵリンク７０用のフリーリンクというように、複数のフリーリンクを設けると、その分、１つのストレージ資源へのアクセスに利用可能なキャッシュ容量の上限が制限されてしまうからである。例えば、Ｎ個のフリーリンクを設けるとすると、あるストレージ資源に対して使用できるキャッシュ容量の上限は、キャッシュ全体の容量の１／Ｎになってしまう。そこで、フリーリンク５０を１つとすることで、ＣＭ１１０は、アクセス状況に応じたキャッシュ容量を（例えば、アクセスが多いほど多い容量を、アクセスが少ないほど少ない容量を）各ストレージ資源に割り振ることができる。アクセスがより多いストレージ資源に、より多くのキャッシュ容量を割くことで、ストレージ装置１００におけるデータアクセス性能を向上できる。
【０１３３】
ただし、当初の各ストレージ資源に対するアクセス状況が、その後も変わらずに継続するとは限らない。あるストレージ資源では、当初アクセス数が多かったが、その後のアクセス数が少なくなることもある。また、別のストレージ資源では、当初アクセス数が少なかったが、その後のアクセス数が多くなることもある。フリーリンク５０から早いもの勝ちでＣＢＥを獲得していくのみでは、当初アクセス数の多いストレージ資源に対して多くのキャッシュ容量が割かれてしまい、その後のアクセス状況の変化に応じたキャッシュ容量の割り振りを行えない。
【０１３４】
そこで、ＣＭ１１０は、空きページがない状況で、例えば、ストレージ資源８０に割り当てられたキャッシュ容量（ＣＢＥ数）が不足し、かつ、当該キャッシュ容量が閾値以下（あるいは、ＬＲＵリンク６０に属するリンク要素数が閾値ａ以下）の場合、ストレージ資源９０に割り当て済のページを、ストレージ資源８０に再割り当てする。
【０１３５】
すなわち、ＣＭ１１０は、ＬＲＵリンク７０からＣＢＥ（例えば、ＬＲＵ側にあってライトバック未実行でないもの）を獲得し、ＬＲＵリンク６０に追加する（ＣＢＥの移し替え）。なお、ストレージ資源８０に割り当てられたキャッシュ容量が閾値より大きい（あるいは、ＬＲＵリンク６０に属するＣＢＥ数が閾値ａより大きい）場合、ＣＭ１１０は、ＬＲＵリンク６０の中から、追い出し対象のページを特定し、当該ページを再利用する。例えば、ＣＭ１１０は、ＣＢＥの移し替えを行うか否かをＩ／Ｏに同期して、あるいは、Ｉ／Ｏに非同期で判定し、判定に応じてＣＢＥの移し替えを行う。
【０１３６】
ＣＢＥの移し替えでは、移し替え元のＬＲＵリンクの排他資源の獲得、移し替え元のＬＲＵリンクにおける移し替え対象ページの解放、移し替え元のＬＲＵリンクの排他資源の解放、移し替え先のＬＲＵリンクの排他資源の獲得、移し替え先のＬＲＵリンクへの該当ページのＣＢＥ追加といった手順を伴う。このため、キャッシュ容量の不足のたびに毎回、ＣＢＥの移し替えの動作を行っていると、移し替え先のＬＲＵリンクに対応するストレージ資源に対するアクセス負荷が高い場合に、当該ストレージ資源へのアクセスに時間がかかる可能性がある。そこで、ＣＭ１１０は、各ストレージ資源への負荷を考慮して、一度に移し替えるリンク要素の数を変更する。
【０１３７】
例えば、ＣＭ１１０は、移し替え先のＬＲＵリンクに対応するストレージ資源に対して連続してアクセスが発生している場合、連続したアクセス回数に応じて、一度に移し替えるリンク要素の数を増やす。より具体的には、ＣＭ１１０は、前回移し替え先となったＬＲＵリンクに対応するストレージ資源に対して、今回も連続してアクセスが発生した場合に、当該ＬＲＵリンクに対して一度に移し替えるリンク要素の数を増加させる。
【０１３８】
あるいは、ＣＭ１１０は、移し替え元のリンクに対応するストレージ資源に対する第１のアクセス数と、移し替え先のリンクに対応するストレージ資源に対する第２のアクセス数との比較に応じて、一度に移し替えるリンク要素の数を増やす。例えば、ＣＭ１１０は、第２のアクセス数が、第１のアクセス数よりも大きい場合に、第２のアクセス数と第１のアクセス数との差に応じて、一度に移し替えるＣＢＥの数を増やす。より具体的には、ＣＭ１１０は、第２のアクセス数と第１のアクセス数との差が大きいほど、一度に移し替えるリンク要素の数を増加させる。
【０１３９】
このようにして、ＣＭ１１０は、負荷が高まっていると推定されるストレージ資源のＬＲＵリンクに対して一度に移し替えるＣＢＥの数を増やすことで、キャッシュ容量不足の発生回数を低減する。その結果、ページの再割り当てに伴うＣＢＥの移し替えの回数を低減し、ＣＭ１１０によるデータアクセスを高速化することができる。
【０１４０】
なお、第１の実施の形態の情報処理は、処理部１ｂにプログラムを実行させることで実現できる。また、第２の実施の形態の情報処理は、プロセッサ１１１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体３０に記録できる。
【０１４１】
例えば、プログラムを記録した記録媒体３０を配布することで、プログラムを流通させることができる。記録媒体３０として、フレキシブルディスク（ＦＤ：Flexible Disk）、ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc）およびＢｌｕ−ｒａｙ（登録商標）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）などを使用してもよい。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体３０に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＲＡＭ１１２やフラッシュメモリ１１３などの記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【０１４２】
以上の第１，第２の実施の形態を含む実施形態に関し、更に以下の付記を開示する。
（付記１）  キャッシュメモリとして用いられる複数のページを有する記憶部と、
前記複数のページのうちの第１のページ群を示す第１のリンクに第１のストレージ資源を割り当て、前記複数のページのうちの第２のページ群を示す第２のリンクに第２のストレージ資源を割り当て、前記第１のリンクおよび前記第２のリンクを用いて、前記第１のストレージ資源および前記第２のストレージ資源に対するアクセス要求を分散して処理する処理部と、
を有するストレージ制御装置。
【０１４３】
（付記２）  前記処理部は、ページに対応するリンク要素を前記第１のリンクに追加する際、前記キャッシュメモリに空きページがない場合に、前記第２のリンクに含まれる前記リンク要素を前記第１のリンクへ移し替える、付記１記載のストレージ制御装置。
【０１４４】
（付記３）  前記処理部は、前記第１のリンクに含まれる前記リンク要素の数が閾値以下の場合に、前記第２のリンクに含まれる前記リンク要素を前記第１のリンクへ移し替え、前記第１のリンクに含まれる前記リンク要素の数が前記閾値よりも大きい場合に、前記第１のリンクに含まれる一部のリンク要素に対応するページを再利用する、付記２記載のストレージ制御装置。
【０１４５】
（付記４）  前記処理部は、前記再利用の際、前記第１のページ群に属する再利用可能なページが不足する場合、前記第２のリンクに含まれる前記リンク要素を前記第１のリンクへ移し替える、付記３記載のストレージ制御装置。
【０１４６】
（付記５）  前記処理部は、前記移し替えの際に、前回の移し替え先のリンクと今回の移し替え先のリンクとが同じ場合、今回移し替える前記リンク要素の数を、前回移し替えた前記リンク要素の数よりも増やす、付記２乃至４の何れか１つに記載のストレージ制御装置。
【０１４７】
（付記６）  前記処理部は、前記空きページに対応する前記リンク要素を複数含む１つのフリーリンクを参照して、前記フリーリンクに属する前記リンク要素を前記第１のリンクに追加し、前記フリーリンクに属する他のリンク要素を前記第２のリンクに追加する、付記２乃至５の何れか１つ記載のストレージ制御装置。
【０１４８】
（付記７）  前記処理部は、前記第１のストレージ資源へ書き込むデータまたは前記第１のストレージ資源から読み出したデータを前記キャッシュメモリに格納する際に、前記リンク要素を前記第１のリンクに追加する、付記２乃至６の何れか１つに記載のストレージ制御装置。
【０１４９】
（付記８）  前記処理部は、前記第１のページ群に属する再利用可能なページが不足し、かつ、前記第２のページ群に移し替え可能なページが不足する場合、何れかのリンクに属する前記リンク要素を、空きページを示す前記リンク要素を含むフリーリンクに移した後に、前記フリーリンクの前記リンク要素を前記第１のリンクに追加する、付記４記載のストレージ制御装置。
【０１５０】
（付記９）  前記処理部は、前記第２のページ群の一部のリンク要素に対応するページに格納されたデータを前記第２のストレージ資源に書き戻した後、前記第１のリンクに対するページの獲得待ちが発生しているか否かを判定し、前記獲得待ちが発生している場合、書き戻したデータを格納していたページを解放し、解放したページに対応する前記リンク要素を、空きページを示す前記リンク要素を含むフリーリンクに追加する、付記１記載のストレージ制御装置。
【０１５１】
（付記１０）  前記処理部は、前記第１のストレージ資源の第１の負荷と、前記第２のストレージ資源の第２の負荷とを比較し、負荷が大きい方のストレージ資源に対応するリンクから負荷が小さい方のストレージ資源に対応するリンクに、ページに対応するリンク要素を移し替える、付記１記載のストレージ制御装置。
【０１５２】
（付記１１）  前記処理部は、前記第１の負荷と前記第２の負荷との差に応じて、移し替える前記リンク要素の数を決定する、付記１０記載のストレージ制御装置。
（付記１２）  前記第１の負荷は、前記第１のストレージ資源に対するアクセス数であり、
前記第２の負荷は、前記第２のストレージ資源に対するアクセス数である、付記１１記載のストレージ制御装置。
【０１５３】
（付記１３）  前記処理部は、所定の周期で、前記第１の負荷と前記第２の負荷とを比較し、比較に応じて前記リンク要素の移し替えを行う、付記１０乃至１２の何れか１つに記載のストレージ制御装置。
【０１５４】
（付記１４）  前記処理部は、前記第１のストレージ資源に属する論理ユニットの数と前記第２のストレージ資源に属する論理ユニットの数とを均等にする、付記１乃至１３の何れか１つに記載のストレージ制御装置。
【０１５５】
（付記１５）  前記処理部は、前記キャッシュメモリを共有する複数のサブ処理部を有し、前記複数のサブ処理部により、前記第１のリンクに対する排他処理と、前記第２のリンクに対する排他処理とを並列に実行する、付記１乃至１４の何れか１つに記載のストレージ制御装置。
【０１５６】
（付記１６）  前記第１のリンクおよび前記第２のリンクは、ページに対応するリンク要素をポインタによって連結したデータである、付記１記載のストレージ制御装置。
（付記１７）  前記処理部は、ＬＲＵのアルゴリズムにより、移し替え対象の前記リンク要素を決定する、付記２乃至１３の何れか１つに記載のストレージ制御装置。
【０１５７】
（付記１８）  キャッシュメモリとして用いられる複数のページのうちの第１のページ群を示す第１のリンクに第１のストレージ資源を割り当て、前記複数のページのうちの第２のページ群を示す第２のリンクに第２のストレージ資源を割り当て、
前記第１のリンクおよび前記第２のリンクを用いて、前記第１のストレージ資源および前記第２のストレージ資源に対するアクセス要求を分散して処理する、
処理をコンピュータに実行させるプログラム。
【符号の説明】
【０１５８】
１  ストレージ制御装置
１ａ  記憶部
１ｂ  処理部
１ｂ１，１ｂ２  サブ処理部
２  ストレージ装置
２ａ  第１のストレージ資源
２ｂ  第２のストレージ資源
３  情報処理装置
Ｃ１  キャッシュメモリ
Ｐ１，Ｐ２，Ｐ３  ページ
Ｌ１  第１のリンク
Ｌ２  第２のリンク
Ｌ１ａ，Ｌ１ｂ，Ｌ１ｃ，Ｌ１ｍ，Ｌ２ａ，Ｌ２ｂ，Ｌ２ｃ，Ｌ２ｍ  リンク要素
【図１】
2019095881.tif 000003
【図２】
2019095881.tif 000004
【図３】
2019095881.tif 000005
【図４】
2019095881.tif 000006
【図５】
2019095881.tif 000007
【図６】
2019095881.tif 000008
【図７】
2019095881.tif 000009
【図８】
2019095881.tif 000010
【図９】
2019095881.tif 000011
【図１０】
2019095881.tif 000012
【図１１】
2019095881.tif 000013
【図１２】
2019095881.tif 000014
【図１３】
2019095881.tif 000015