(57)【要約】【課題】キャッシュ制御において、ストレージシステムが提供するボリュームの全ブロックのアクセス数を管理すると、サーバには大容量のＤＲＡＭ等のメモリが必要となる。【解決手段】アプリケーションが稼働するサーバ、及び、データを格納するストレージシステムを備える計算機システムであって、サーバはオペレーティングシステムを有し、オペレーティングシステムは、キャッシュを制御するキャッシュドライバを含み、キャッシュドライバは、ストレージシステムによって提供されるボリュームの一部の記憶領域のアクセス数を管理するためのアクセス管理情報を保持し、アクセス管理情報を用いてボリュームの一部の記憶領域のアクセス数を管理し、前記キャッシュドライバは、所定の入れ替えアルゴリズムに基づいて、アクセス数を管理する記憶領域を入れ替え、アクセス管理情報に基づいてキャッシュに対するデータの配置を制御する。【選択図】  図１
2015075818.tif 000002
【特許請求の範囲】
【請求項１】
所定のアプリケーションが稼働するサーバ、及び、前記アプリケーションが使用するデータを格納するストレージシステムを備える計算機システムであって、
前記サーバは、第１のプロセッサ、第１のメモリ、一時的にデータを格納するサーバキャッシュが設定されるキャッシュデバイス、及び他の装置と接続するための第１のインタフェースを有し、
前記ストレージシステムは、第２のプロセッサ、第２のメモリ、及び他の装置と接続するための第２のインタフェースを含むコントローラ、並びに複数の記憶装置を有し、
前記サーバは、前記サーバを制御するオペレーティングシステムを有し、
前記ストレージシステムは、前記ストレージシステムを制御するストレージ制御部を有し、
前記オペレーティングシステムは、前記サーバキャッシュを制御するキャッシュドライバを含み、
前記キャッシュドライバは、前記ストレージシステムによって提供されるボリュームの一部の記憶領域のアクセス数を管理するための第１のアクセス管理情報を保持し、
前記キャッシュドライバは、
前記第１のアクセス管理情報を用いて前記ボリュームの一部の記憶領域のアクセス数を管理し、
所定の入れ替えアルゴリズムに基づいて、前記アクセス数を管理する記憶領域を入れ替え、
前記第１のアクセス管理情報に基づいて、前記サーバキャッシュに対するデータの配置を制御することを特徴とする計算機システム。
【請求項２】
請求項１に記載の計算機システムであって、
前記第１のアクセス管理情報は、前記ボリュームに対するアクセス単位である第１の記憶領域毎のアクセス数を格納し、
前記キャッシュドライバは、
前記ボリュームを、複数の前記第１の記憶領域から構成される複数の第２の記憶領域に分割して管理し、
前記第１のアクセス管理情報を用いて、所定の数の前記第２の記憶領域についてのみ、当該第２の記憶領域を構成する前記第１の記憶領域毎のアクセス数を管理し、
前記所定のアルゴリズムに基づいて、前記第１の記憶領域毎のアクセス数を管理する第２の記憶領域を入れ替えることを特徴とする計算機システム。
【請求項３】
請求項２に記載の計算機システムであって、
前記第２の記憶領域単位のアクセス数を管理するための第２のアクセス管理情報を保持し、
前記キャッシュドライバは、
前記複数の第２の記憶領域の各々のアクセス数に基づいて、前記第１の記憶領域毎のアクセス数を管理する追加対象の第２の記憶領域を決定し、
前記決定の結果に基づいて、前記第１の記憶領域毎のアクセス数の管理を解除する削除対象の第２の記憶領域を特定し、
前記第１のアクセス管理情報から前記削除対象の第２の記憶領域を構成する第１の記憶領域のアクセス数に関する情報を削除し、
前記第１のアクセス管理情報に、前記追加対象の第２の記憶領域を構成する第１の記憶領域のアクセス数に関する情報を追加することを特徴とする計算機システム。
【請求項４】
請求項３に記載の計算機システムであって、
前記ストレージ制御部は、前記第２のアクセス管理情報を保持し、
前記キャッシュドライバは、
前記アプリケーションからＩ／Ｏ要求を受信した場合、前記第１のアクセス管理情報を参照して、前記Ｉ／Ｏ要求のアクセス先の第１の記憶領域のアクセス数が管理されているか否かを判定し、
前記Ｉ／Ｏ要求のアクセス先の第１の記憶領域のアクセス数が管理されていると判定された場合、前記第１のアクセス管理情報における当該第１の記憶領域のアクセス数を更新し、
前記ストレージ制御部は、
前記アプリケーションからＩ／Ｏ要求を受信した場合に、前記Ｉ／Ｏ要求のアクセス先の記憶領域を含む前記第２の記憶領域を特定し、
前記第２のアクセス管理情報における前記特定された第２の記憶領域のアクセス数を更新し、
前記キャッシュドライバは、
前記第１のアクセス管理情報から、前記アクセス数が管理される第１の記憶領域から構成される前記第２の記憶領域のアクセス数を取得し、
前記ストレージ制御部から、前記アクセス数が管理されていない第１の記憶領域から構成される前記第２の記憶領域のアクセス数を取得し、
前記取得された第２の記憶領域のアクセス数に基づいて、前記追加対象の第２の記憶領域及び前記削除対象の第２の記憶領域を決定することを特徴とする計算機システム。
【請求項５】
請求項３に記載の計算機システムであって、
前記キャッシュドライバは、前記第２のアクセス管理情報を保持し、
前記キャッシュドライバは、
前記アプリケーションからＩ／Ｏ要求を受信した場合、前記第１のアクセス管理情報を参照して、前記Ｉ／Ｏ要求のアクセス先の第１の記憶領域のアクセス数が管理されているか否かを判定し、
前記Ｉ／Ｏ要求のアクセス先の第１の記憶領域のアクセス数が管理されていると判定された場合、前記第１のアクセス管理情報における当該第１の記憶領域のアクセス数と、前記第２のアクセス管理情報における当該第１の記憶領域を含む第２の記憶領域のアクセス数とを更新し、
前記Ｉ／Ｏ要求のアクセス先の第１の記憶領域のアクセス数が管理されていないと判定された場合、前記第２のアクセス管理情報における当該第１の記憶領域を含む第２の記憶領域のアクセス数と更新し、
前記第２のアクセス管理情報から、前記第２の記憶領域のアクセス数を取得し、
前記取得された第２の記憶領域のアクセス数に基づいて、前記追加対象の第２の記憶領域及び前記削除対象の第２の記憶領域を決定することを特徴とする計算機システム。
【請求項６】
請求項２に記載の計算機システムであって、
前記キャッシュドライバは、
所定の時間周期毎に、前記第１のアクセス管理情報を用いて、前記第１の記憶領域毎のアクセス数を管理する前記第２の記憶領域を入れ替えることを特徴とする計算機システム。
【請求項７】
請求項６に記載の計算機システムであって、
前記キャッシュドライバは、
前記アプリケーションからＩ／Ｏ要求を受信した場合、前記Ｉ／Ｏ要求のアクセス先の第１の記憶領域を含む前記第２の記憶領域を特定し、
前記特定された第２の記憶領域を構成する第１の記憶領域のアクセス数が管理されているか否かを判定し、
前記特定された第２の記憶領域を構成する第１の記憶領域のアクセス数が管理されていると判定された場合、前記第１のアクセス数における当該第１の記憶領域のアクセス数を更新することを特徴とする計算機システム。
【請求項８】
請求項１に記載の計算機システムであって、
前記第１のアクセス管理情報は、前記ボリュームに対するアクセス単位である第１の記憶領域毎のアクセス数を格納し、
前記キャッシュドライバは、
キャッシュアルゴリズムに基づいて、前記アクセス数を管理する第１の記憶領域を決定し、
前記第１のアクセス管理情報を用いて、前記決定された第１の記憶領域のアクセス数を管理することを特徴とする計算機システム。
【請求項９】
所定のアプリケーションが稼働するサーバ、及び、前記アプリケーションが使用するデータを格納するストレージシステムを備える計算機システムにおけるキャッシュ管理方法であって、
前記サーバは、第１のプロセッサ、第１のメモリ、一時的にデータを格納するサーバキャッシュが設定されるキャッシュデバイス、及び他の装置と接続するための第１のインタフェースを有し、
前記ストレージシステムは、第２のプロセッサ、第２のメモリ、及び他の装置と接続するための第２のインタフェースを含むコントローラ、並びに複数の記憶装置を有し、
前記サーバは、前記サーバを制御するオペレーティングシステムを有し、
前記ストレージシステムは、前記ストレージシステムを制御するストレージ制御部を有し、
前記オペレーティングシステムは、前記サーバキャッシュを制御するキャッシュドライバを含み、
前記キャッシュドライバは、
前記ストレージシステムによって提供されるボリュームの一部の記憶領域のアクセス数を管理するための第１のアクセス管理情報を保持し、
前記第１のアクセス管理情報を用いて前記ボリュームの一部の記憶領域のアクセス数を管理し、
前記方法は、
前記キャッシュドライバが、所定の入れ替えアルゴリズムに基づいて、前記アクセス数を管理する記憶領域を入れ替える第１のステップと、
前記キャッシュドライバが、前記第１のアクセス管理情報に基づいて、前記サーバキャッシュに対するデータの配置を制御する第２のステップと、を含むことを特徴とするキャッシュ管理方法。
【請求項１０】
請求項９に記載のキャッシュ管理方法であって、
前記第１のアクセス管理情報は、前記ボリュームに対するアクセス単位である第１の記憶領域毎のアクセス数を格納し、
前記キャッシュドライバは、
前記ボリュームを、複数の前記第１の記憶領域から構成される複数の第２の記憶領域に分割して管理し、
前記第１のアクセス管理情報を用いて、所定の数の前記第２の記憶領域についてのみ、当該第２の記憶領域を構成する前記第１の記憶領域毎のアクセス数を管理し、
前記第１のステップでは、前記所定のアルゴリズムに基づいて、前記第１の記憶領域毎のアクセス数を管理する第２の記憶領域を入れ替えることを特徴とするキャッシュ管理方法。
【請求項１１】
請求項１０に記載のキャッシュ管理方法であって、
前記ストレージ制御部は、前記第２の記憶領域単位のアクセス数を管理するための第２のアクセス管理情報を保持し、
前記方法は、
前記キャッシュドライバが、前記アプリケーションからＩ／Ｏ要求を受信した場合、前記第１のアクセス管理情報を参照して、前記Ｉ／Ｏ要求のアクセス先の第１の記憶領域のアクセス数が管理されているか否かを判定するステップと、
前記キャッシュドライバが、前記Ｉ／Ｏ要求のアクセス先の第１の記憶領域のアクセス数が管理されていると判定された場合、前記第１のアクセス管理情報における当該第１の記憶領域のアクセス数を更新するステップと、
前記ストレージ制御部が、前記アプリケーションからＩ／Ｏ要求を受信した場合に、前記Ｉ／Ｏ要求のアクセス先の記憶領域を含む前記第２の記憶領域を特定するステップと、
前記ストレージ制御部が、前記第２のアクセス管理情報における前記特定された第２の記憶領域のアクセス数を更新するステップと、を含み、
前記第１のステップは、
前記第１のアクセス管理情報から、前記アクセス数が管理される第１の記憶領域から構成される前記第２の記憶領域のアクセス数を取得するステップと、
前記ストレージ制御部から、前記アクセス数が管理されていない第１の記憶領域から構成される前記第２の記憶領域のアクセス数を取得するステップと、
前記取得された第２の記憶領域のアクセス数に基づいて、前記アクセス数を管理する追加対象の第２の記憶領域及び前記アクセス数が管理されない削除対象の第２の記憶領域を決定するステップと、を含むことを特徴とするキャッシュ管理方法。
【請求項１２】
請求項１０に記載のキャッシュ管理方法であって、
前記キャッシュドライバは、前記第２の記憶領域単位のアクセス数を管理するための第２のアクセス管理情報を保持し、
前記方法は、
前記キャッシュドライバが、前記アプリケーションからＩ／Ｏ要求を受信した場合、前記第１のアクセス管理情報を参照して、前記Ｉ／Ｏ要求のアクセス先の第１の記憶領域のアクセス数が管理されているか否かを判定するステップと、
前記キャッシュドライバが、前記Ｉ／Ｏ要求のアクセス先の第１の記憶領域のアクセス数が管理されていると判定された場合、前記第１のアクセス管理情報における当該第１の記憶領域のアクセス数と、前記第２のアクセス管理情報における当該第１の記憶領域を含む第２の記憶領域のアクセス数とを更新するステップと、
前記キャッシュドライバが、前記Ｉ／Ｏ要求のアクセス先の第１の記憶領域のアクセス数が管理されていないと判定された場合、前記第２のアクセス管理情報における当該第１の記憶領域を含む第２の記憶領域のアクセス数と更新するステップと、を含み、
前記第１のステップは、
前記第２のアクセス管理情報から、前記第２の記憶領域のアクセス数を取得するステップと、
前記取得された第２の記憶領域のアクセス数に基づいて、前記アクセス数を管理する追加対象の第２の記憶領域及び前記アクセス数が管理されない削除対象の第２の記憶領域を決定するステップと、を含むことを特徴とするキャッシュ管理方法。
【請求項１３】
請求項１０に記載のキャッシュ管理方法であって、
前記第１のステップでは、所定の時間周期毎に、前記第１のアクセス管理情報を用いて、前記第１の記憶領域毎のアクセス数を管理する前記第２の記憶領域を入れ替えることを特徴とするキャッシュ管理方法。
【請求項１４】
請求項９に記載のキャッシュ管理方法であって、
前記第１のアクセス管理情報は、前記ボリュームに対するアクセス単位である第１の記憶領域毎の前記アクセス数を格納し、
前記第１のステップでは、キャッシュアルゴリズムに基づいて、前記アクセス数を管理する第１の記憶領域を決定することを特徴とするキャッシュ管理方法。
【請求項１５】
所定のアプリケーションが稼働する計算機であって、
前記計算機は、第１のプロセッサ、第１のメモリ、一時的にデータを格納するキャッシュが設定されるキャッシュデバイス、及び他の装置と接続するための第１のインタフェースを備え、
前記計算機には、前記アプリケーションが使用するデータを格納するストレージシステムが接続され、
前記計算機は、前記計算機を制御するオペレーティングシステムを有し、
前記オペレーティングシステムは、前記キャッシュを制御するキャッシュドライバを含み、
前記キャッシュドライバは、前記ストレージシステムによって提供されるボリュームの一部の記憶領域のアクセス数を管理するためのアクセス管理情報を保持し、
前記キャッシュドライバは、
前記アクセス管理情報を用いて前記ボリュームの一部の記憶領域のアクセス数を管理し、
所定の入れ替えアルゴリズムに基づいて、前記アクセス数を管理する記憶領域を入れ替え、
前記アクセス管理情報に基づいて、前記キャッシュに対するデータの配置を制御することを特徴とする計算機。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、サーバ及びストレージシステムが有するキャッシュ領域を用いたＩ／Ｏ処理におけるキャッシュ制御に関する。
【背景技術】
【０００２】
近年、ＨＤＤと比較して高速に動作可能なフラッシュメモリのサーバへの搭載が進んでおり、将来的にはＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）及びＰＣＭ（Ｐｈａｓｅ  Ｃｈａｎｇｅ  Ｍｅｍｏｒｙ）等の高速メモリも搭載されてゆくと予測できる。
【０００３】
このようなサーバに搭載された高速メモリの活用方法の一つに、ストレージシステムのキャッシュとして活用する方法がある。具体的には、サーバに搭載した高速なメモリにストレージシステムに格納されるデータのキャッシュを配置することによって、ストレージシステムに対するＩ／Ｏ回数を減らし、ひいてはストレージシステムにおけるＩ／Ｏ処理の高速化を図る。
【０００４】
高速メモリに対するキャッシュ制御方式には、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）を用いた制御方法、及びＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）アルゴリズムを用いた制御方法等が存在する。
【０００５】
このようなキャッシュ制御方式の一つとして、「Ｈｏｔデータピン止め方式」が考えられる。「Ｈｏｔデータピン止め方式」では、ストレージシステムのブロック毎にサーバからストレージシステムへのＩ／Ｏ数、すなわち、アクセス数が取得され、一定時間ごとにアクセス数が多いストレージシステムのブロックデータを高速メモリに配置する。
【０００６】
例えば、ある一定期間、サーバからストレージシステムへのブロック毎のアクセス数を取得した結果、アドレスＡへのアクセス回数が１００回、アドレスＢへのアクセス回数が１５回、アドレスＣへのアクセス回数が５０回であった場合、アドレスＡ、アドレスＣ、アドレスＢの順に高速メモリにデータを配置する。その後、再びサーバからストレージへのブロック毎のアクセス回数を取得し、ブロック毎のアクセス数に基づいて、高速メモリにおけるデータ配置の入れ替えを行う。
【０００７】
本方式に関連して、例えば、特許文献１には、ブロック単位にアクセス履歴を保持する方式が開示されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００６−２３６４７０号
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかし、上述した「Ｈｏｔデータピン止め方式」には、ストレージシステムのブロック毎のアクセス数を保存するための記憶領域が不足するという課題がある。これは、ＤＲＡＭ等のサーバが搭載するメインメモリに、ストレージシステムにおけるブロック毎のアクセス数を保持する必要があるためである。
【００１０】
例えば、ストレージシステムの記憶容量が１ＰＢであり、８ＫＢブロック単位でアクセス数を取得する場合、１ブロック辺りのアクセス数を管理するために必要な記憶容量を３２ｂｉｔとすると、サーバのメインメモリ容量は、下式（１）に示すように４ＴＢ必要となる。
【００１１】
【数１】
2015075818.tif 000003
【００１２】
通常、１台のサーバに搭載されるメインメモリ（ＤＲＡＭ）の容量は、多くても数百ＧＢ〜数ＴＢであるため、本方式によってメインメモリを４ＴＢ消費することはできない。ストレージシステムの記憶容量が１００ＴＢの場合であっても、サーバに搭載するメインメモリの容量は４００ＧＢも必要となる。したがって、本方式では、メインメモリ容量を大量に消費してしまう結果となる。
【００１３】
また、アクセス数をフラッシュメモリ等の高速メモリに記憶した場合、アクセス数を取得するためのＩ／Ｏが発生するため、サーバにストレージシステムのキャッシュを配置するという本来の目的である、Ｉ／Ｏ回数の削減を達成することができない。
【課題を解決するための手段】
【００１４】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、所定のアプリケーションが稼働するサーバ、及び、前記アプリケーションが使用するデータを格納するストレージシステムを備える計算機システムであって、前記サーバは、第１のプロセッサ、第１のメモリ、一時的にデータを格納するサーバキャッシュが設定されるキャッシュデバイス、及び他の装置と接続するための第１のインタフェースを有し、前記ストレージシステムは、第２のプロセッサ、第２のメモリ、及び他の装置と接続するための第２のインタフェースを含むコントローラ、並びに複数の記憶装置を有し、前記サーバは、前記サーバを制御するオペレーティングシステムを有し、前記ストレージシステムは、前記ストレージシステムを制御するストレージ制御部を有し、前記オペレーティングシステムは、前記サーバキャッシュを制御するキャッシュドライバを含み、前記キャッシュドライバは、前記ストレージシステムによって提供されるボリュームの一部の記憶領域のアクセス数を管理するための第１のアクセス管理情報を保持し、前記キャッシュドライバは、前記第１のアクセス管理情報を用いて前記ボリュームの一部の記憶領域のアクセス数を管理し、所定の入れ替えアルゴリズムに基づいて、前記アクセス数を管理する記憶領域を入れ替え、前記第１のアクセス管理情報に基づいて、前記サーバキャッシュに対するデータの配置を制御することを特徴とする。
【発明の効果】
【００１５】
本発明によれば、サーバは、ストレージシステムによって提供されるボリュームのうち、一部の記憶領域についてのみアクセス数を管理する。したがって、アクセス数を管理するためのサーバのメモリ容量を削減できる。
【００１６】
上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００１７】
【図１】本発明の実施例１における計算機システムのハードウェア構成の一例を示すブロック図である。
【図２】本発明の実施例１における計算機システムのソフトウェア構成の一例を示す説明図である。
【図３】本発明の実施例１におけるサーバアクセス管理情報の一例を示す説明図である。
【図４】本発明の実施例１におけるキャッシュ管理情報の一例を示す説明図である。
【図５】本発明の実施例１におけるストレージアクセス管理情報の一例を示す説明図である。
【図６】本発明の実施例１におけるタイマの構成例を示す説明図である。
【図７】本発明の実施例１におけるサーバアクセス計測部が実行するアクセス数計測処理を説明するフローチャートである。
【図８】本発明の実施例１におけるアクセス振り分け部が実行するアクセス振り分け処理を説明するフローチャートである。
【図９】本発明の実施例１におけるストレージアクセス計測部が実行するアクセス計測処理を説明するフローチャートである。
【図１０】本発明の実施例１におけるアクセスカウンタ入替制御部が実行するアクセスカウンタ入替処理を説明するフローチャートである。
【図１１】本発明の実施例１におけるキャッシュデータ入替制御部が実行するキャッシュデータ入替処理を説明するフローチャートである。
【図１２】本発明の実施例１におけるキャッシュドライバが実行する初期化処理を説明するフローチャートである。
【図１３】本発明の実施例２における計算機システムのソフトウェア構成の一例を示す説明図である。
【図１４】本発明の実施例２におけるサーバアクセス階層化管理情報の一例を示す説明図である。
【図１５】本発明の実施例２におけるアクセス階層化カウンタ入替制御部が実行するアクセスカウンタ入替処理を説明するフローチャートである。
【図１６】本発明の実施例２におけるキャッシュドライバが実行する初期化処理を説明するフローチャートである。
【図１７】本発明の実施例３における計算機システムのソフトウェア構成の一例を示す説明図である。
【図１８】本発明の実施例３におけるサーバアクセス時分割管理情報の一例を示す説明図である。
【図１９】本発明の実施例３におけるサーバアクセス時分割計測部が実行するアクセス数計測処理を説明するフローチャートである。
【図２０】本発明の実施例３におけるアクセス時分割カウンタ入替制御部が実行するアクセスカウンタ入替処理を説明するフローチャートである。
【図２１】本発明の実施例３におけるキャッシュデータ時分割入替制御部が実行するキャッシュデータ入替処理を説明するフローチャートである。
【図２２】本発明の実施例３におけるキャッシュドライバが実行する初期化処理を説明するフローチャートである。
【図２３】本発明の実施例４における計算機システムのソフトウェア構成の一例を示す説明図である。
【図２４Ａ】本発明の実施例４におけるキャッシュ管理情報の一例を示す説明図である。
【図２４Ｂ】本発明の実施例４におけるキャッシュ管理情報の一例を示す説明図である。
【図２５】本発明の実施例４におけるアクセス振り分け部が実行するアクセス振り分け処理を説明するフローチャートである。
【図２６】キャッシュヒット時のアクセス振り分け部が実行するキャッシュヒット時のＩ／Ｏ処理を説明するフローチャートである。
【図２７】本発明の実施例４のアクセス振り分け部が実行するキャッシュミスかつアクセスカウンタヒット時のＩ／Ｏ処理を説明するフローチャートである。
【図２８】本発明の実施例４のアクセス振り分け部が実行するキャッシュミスかつアクセスカウンタミスヒット時のＩ／Ｏ処理を説明するフローチャートである。
【図２９】本発明の実施例４のキャッシュデータ入替制御部が実行するキャッシュデータ入替処理を説明するフローチャートである。
【図３０】本発明の実施例４におけるキャッシュドライバが実行する初期化処理を説明するフローチャートである。
【発明を実施するための形態】
【００１８】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。
【００１９】
本発明では、ストレージシステムの全記憶領域のうち、一部の記憶領域についてのみブロック単位のアクセス数を管理するようにサーバを構成する。このとき、サーバは、キャッシュ効率が最適になるように、ストレージシステムの全記憶領域の中から、所定の単位のアクセス数を管理する記憶領域（ブロック）を決定する必要がある。
【００２０】
そこで、本発明では、ストレージシステムが提供する全記憶領域の中からアクセス数を取得する記憶領域を選択する。サーバは、選択された記憶領域について所定の単位の詳細なアクセス数を取得する。
【実施例１】
【００２１】
実施例１では、サーバモジュール１１０（図１参照）と共有ストレージシステム１３０（図１参照）との間で、アクセス数を管理するためのアクセス管理情報（アクセスカウンタ）を階層化する。
【００２２】
サーバモジュール１１０（図１参照）は、ブロック単位のアクセス数を管理するためのアクセス管理情報（アクセスカウンタ）を有する。サーバモジュール１１０が有するアクセス管理情報（アクセスカウンタ）では、共有ストレージシステム１３０の一部の記憶領域のアクセス数が管理される。
【００２３】
一方、共有ストレージシステム１３０（図１参照）は、ブロックグループ単位のアクセス数を管理するためのアクセス管理情報（アクセスカウンタ）を有する。ここで、ブロックグループとは、複数のブロックから構成される記憶領域を示す。共有ストレージシステム１３０（図１参照）が有するアクセス管理情報（アクセスカウンタ）では、共有ストレージシステム１３０（図１参照）の全記憶領域のアクセス数が管理される。
【００２４】
サーバモジュール１１０のキャッシュドライバ２１０（図２参照）は、共有ストレージシステム１３０（図１参照）の全記憶領域のブロックグループ単位のアクセス数に基づいて、ブロック単位のアクセス数を管理するブロックグループを決定する。また、サーバモジュール１１０のキャッシュドライバ２１０（図２参照）は、決定されたブロックグループを構成するブロック毎のアクセス数を管理する。
【００２５】
これによって、アクセス数を保持するために必要なサーバ側のメインメモリの記憶容量の削減することできる。
【００２６】
図１は、本発明の実施例１における計算機システムのハードウェア構成の一例を示すブロック図である。図２は、本発明の実施例１における計算機システムのソフトウェア構成の一例を示す説明図である。
【００２７】
本発明の計算機システムは、サーバ装置１０及び共有ストレージシステム１３０から構成される。サーバ装置１０及び共有ストレージシステム１３０は、ネットワーク１４０を介して接続される。ネットワーク１４０は、ＷＡＮ、ＬＡＮ及びＳＡＮ等が考えられる。本発明は、ネットワークの種類に限定されない。なお、サーバ装置１０及び共有ストレージシステム１３０は、直接接続されていてもよい。
【００２８】
サーバ装置１０は、複数のサーバモジュール１１０、及びキャッシュメモリシステム１２０を備える。サーバモジュール１１０とキャッシュメモリシステム１２０との間は、例えば、ＰＣＩ−ＳＩＧが策定したＰＣＩＥｘｐｒｅｓｓ（ＰＣＩｅ）の規格の接続規格を用いるものとする。
【００２９】
サーバモジュール１１０は、所定のアプリケーション２０１を実行する計算機であり、プロセッサ１１１、メモリ１１２、ネットワークインタフェース１１３、及び接続インタフェース１１４を備え、各構成は内部経路を介して互いに接続される。なお、サーバモジュール１１０は、図示しない、記憶媒体、入出力装置等の他の構成を備えてもよい。
【００３０】
プロセッサ１１１は、メモリ１１２に格納されるプログラムを実行する。プロセッサ１１１が、メモリ１１２に格納されるプログラムを実行することによって、サーバモジュール１１０が有する機能が実現される。
【００３１】
メモリ１１２は、プロセッサ１１１によって実行されるプログラム及び当該プログラムの実行に必要な情報を格納する。また、メモリ１１２は、プログラムが使用するワークエリアを含む。メモリ１１２に格納されるプログラム及び情報については、後述する。
【００３２】
ネットワークインタフェース１１３は、ネットワーク１４０を介して他の装置と接続するためのインタフェースである。
【００３３】
接続インタフェース１１４は、キャッシュメモリシステム１２０に接続するためのインタフェースである。前述した様に、本実施例では、サーバモジュール１１０及びキャッシュメモリシステム１２０は、ＰＣＩｅバスとの通信経路を介して接続されているものとする。この場合、ＰＣＩｅインタフェースが接続インタフェース１１４として用いられる。
【００３４】
キャッシュメモリシステム１２０は、サーバモジュール１１０が使用する記憶領域を提供する。キャッシュメモリシステム１２０は、フラッシュメモリ等の不揮発性メモリ（不揮発性の記憶素子）から構成される。なお、キャッシュメモリシステム１２０は、不揮発性メモリに対する制御を行うためのコントローラ（図示省略）を備える。
【００３５】
本実施例では、キャッシュメモリシステム１２０が提供する記憶領域は、共有ストレージシステム１３０のキャッシュとして用いられる。より具体的には、キャッシュメモリシステム１２０が提供する記憶領域には、ＬＵ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ）の論理ブロック単位のキャッシュデータが格納される。
【００３６】
なお、論理ブロック単位のデータの管理方法としては、バッファキャッシュを用いることが考えられる。バッファキャッシュは、キャッシュメモリシステム１２０の記憶領域にバッファページを割り当て、所定のブロックサイズのブロックバッファに当該バッファページを分割することによって生成される。
【００３７】
バッファキャッシュには、共有ストレージシステム１３０における論理ブロック単位のデータの格納場所を特定するためのバッファヘッドが含まれる。なお、ＬＵは、後述するように共有ストレージシステム１３０によって提供される。
【００３８】
以下の説明では、論理ブロックを単にブロックと記載し、また、論理ブロック単位のデータをブロックデータ、キャッシュメモリシステム１２０における論理ブロック単位の記憶領域をキャッシュ領域とも記載する。
【００３９】
また、本実施例では、複数のサーバモジュール１１０が、キャッシュメモリシステム１２０を共有して使用するものとする。なお、本発明はこれに限定されず、一つのサーバモジュール１１０に一つのキャッシュメモリシステム１２０を接続する構成でもよい。また、サーバモジュール１１０内部にキャッシュメモリシステム１２０が存在してもよい。さらに、サーバ装置１０の外部にキャッシュメモリシステム１２０が存在してもよい。
【００４０】
また、本実施例では、不揮発性メモリから構成されるキャッシュメモリシステム１２０を用いているが、揮発性メモリから構成されるキャッシュメモリシステムを用いてもよい。
【００４１】
共有ストレージシステム１３０は、各サーバモジュール１１０上で実行されるアプリケーション２０１が使用するデータ等を格納する記憶領域を提供する。共有ストレージシステム１３０は、コントローラ１３１及び複数の記憶媒体１３６を備える。
【００４２】
コントローラ１３１は、共有ストレージシステム１３０を制御する。コントローラ１３１は、プロセッサ１３２、メモリ１３３、ネットワークインタフェース１３４、及びストレージインタフェース１３５を備え、各構成は内部経路を介して互いに接続される。
【００４３】
プロセッサ１３２は、メモリ１３３に格納されるプログラムを実行する。プロセッサ１３２が、メモリ１３３に格納されるプログラムを実行することによって、共有ストレージシステム１３０が有する機能が実現される。
【００４４】
メモリ１３３は、プロセッサ１３２によって実行されるプログラム及び当該プログラムの実行に必要な情報を格納する。また、メモリ１３３は、プログラムが使用するワークエリアを含む。メモリ１３３に格納されるプログラム及び情報については、後述する。
【００４５】
ネットワークインタフェース１３４は、ネットワーク１４０を介して他の装置と接続するためのインタフェースである。
【００４６】
ストレージインタフェース１３５は、記憶媒体１３６に接続するためのインタフェースである。記憶媒体１３６は、データを格納する装置である。記憶媒体１３６は、例えばＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）又はＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等が考えられる。ただし、データを格納できる装置であればどのような装置であってもよい。
【００４７】
次に、サーバモジュール１１０、キャッシュメモリシステム１２０、及び共有ストレージシステム１３０のソフトウェア構成について説明する。
【００４８】
まず、サーバモジュール１１０のソフトウェア構成について説明する。サーバモジュール１１０のメモリ１１２は、一つ以上のアプリケーション２０１、及びＯＳ２００を実現するプログラムを格納する。当該プログラムは、プロセッサ１１１によって実行される。
【００４９】
アプリケーション２０１は、例えば、データベースソフトウェア、ハイパーバイザ、仮想デスクトップインフラストラクチャなどが考えられる。なお、本発明は、アプリケーション２０１の種類に依存しない。
【００５０】
ＯＳ２００は、サーバモジュール１１０全体を制御する。ＯＳ２００は、キャッシュドライバ２１０を含む。
【００５１】
ＯＳ２００は、共有ストレージシステム１３０によって提供されるＬＵを所定のファイルシステムにフォーマットする。このとき、ＯＳ２００は、ＬＵを所定の論理ブロックに分割し、各論理ブロックに識別番号を割り当てる。ファイルシステムは、一つ以上のブロックデータから構成されるデータをファイルとして管理する。
【００５２】
なお、ＯＳ２００に含まれるファイルシステム等は、公知のものであるため説明を省略する。
【００５３】
キャッシュドライバ２１０は、キャッシュ領域におけるキャッシュデータを制御するドライバである。キャッシュドライバ２１０は、サーバアクセス計測部２１１、アクセスカウンタ入替制御部２１２、アクセス振り分け部２１３、キャッシュデータ入替制御部２１４、及びタイマ２１７を含み、また、サーバアクセス管理情報２１５、及びキャッシュ管理情報２１６を保持する。
【００５４】
サーバアクセス計測部２１１は、サーバモジュール１１０が管理する記憶領域（ブロック）のアクセス数を計測する。アクセスカウンタ入替制御部２１２は、所定の条件に基づいて、サーバモジュール１１０がアクセス数を計測するブロックを入れ替える。
【００５５】
アクセス振り分け部２１３は、アプリケーション２０１から入力されたＩ／Ｏ要求の出力先を振り分ける。キャッシュデータ入替制御部２１４は、キャッシュメモリシステム１２０のキャッシュ領域に格納するデータの入れ替えを制御する。
【００５６】
タイマ２１７は、アクセスカウンタ入替制御部２１２及びキャッシュデータ入替制御部２１４の処理開始の契機を管理する。
【００５７】
サーバアクセス管理情報２１５は、サーバモジュール１１０が管理するブロックのアクセス数等に関する情報を格納する。サーバアクセス管理情報２１５の詳細は図３を用いて後述する。
【００５８】
キャッシュ管理情報２１６は、キャッシュメモリシステム１２０に格納されるキャッシュデータに関する情報を格納する。キャッシュ管理情報２１６の詳細は図４を用いて後述する。
【００５９】
次に、共有ストレージシステム１３０のソフトウェア構成について説明する。共有ストレージシステム１３０のメモリ１３３は、ストレージ制御部２５０を実現するプログラムを格納する。当該プログラムは、プロセッサ１３２によって実行される。
【００６０】
ストレージ制御部２５０は、共有ストレージシステム１３０を制御する。本実施例では、複数の記憶媒体１３６を用いてＲＡＩＤが構成される。ストレージ制御部２５０は、ＲＡＩＤボリュームを論理的に分割することによって、複数のＬＵを生成し、生成された複数のＬＵをサーバモジュール１１０に提供する。また、ストレージ制御部２５０は、ＬＵと記憶媒体１３６との対応関係を示す管理情報（図示省略）を保持する。
【００６１】
また、ストレージ制御部２５０は、ストレージアクセス計測部２５１を含み、また、ストレージアクセス管理情報２５２を保持する。
【００６２】
ストレージアクセス計測部２５１は、共有ストレージシステム１３０が管理する記憶領域（ブロックグループ）のアクセス数を計測する。
【００６３】
ストレージアクセス管理情報２５２は、共有ストレージシステム１３０が管理するブロックグループのアクセス数等に関する情報を格納する。ストレージアクセス管理情報２２０の詳細は図５を用いて後述する。
【００６４】
なお、ストレージ制御部２５０は、ＬＵの管理機能、及びデータ転送機能等の各種機能を有するが、公知の技術であるため詳細な説明を省略する。
【００６５】
本実施例では、ストレージ制御部２５０は、複数のブロックから構成されるブロックグループ単位に全記憶領域のアクセス数を管理する。また、キャッシュドライバ２１０は、アプリケーション２０１によってアクセスされたブロックグループのうち、所定の条件に基づいて、アクセス数を管理するブロックグループを決定し、決定されたブロックグループを構成するブロックのアクセス数を管理する。すなわち、キャッシュドライバ２１０は、共有ストレージシステム１３０の全記憶領域（ＬＵの全ブロック）のうち、一部の記憶領域（ブロック）のアクセス数のみを管理する。
【００６６】
以下の説明では、アプリケーション２０１によってアクセスされたブロックグループのうち、詳細なアクセス数を管理するブロックグループとして決定されたブロックグループを対象ブロックグループと記載し、対象ブロック以外のブロックグループを対象外ブロックグループとも記載する。
【００６７】
図３は、本発明の実施例１におけるサーバアクセス管理情報２１５の一例を示す説明図である。
【００６８】
サーバアクセス管理情報２１５は、アクセスカウンタエントリ最大数３００、ブロックサイズ３１０、ブロックグループサイズ３２０、サーバアクセスカウンタ３３０、及びサーバアクセス領域３４０を含む。
【００６９】
アクセスカウンタエントリ最大数３００は、サーバアクセスカウンタ３３０に登録可能なエントリ数である。すなわち、キャッシュドライバ２１０が、管理可能な対象ブロックグループの数を示す。後述するように、本実施例では、キャッシュドライバ２１０は、アクセスカウンタエントリ最大数３００の数の範囲内で対象ブロックグループを決定する。
【００７０】
ブロックサイズ３１０は、ブロックのサイズである。本実施例では、キャッシュメモリシステム１２０には、ブロック単位にデータが格納される。ブロックグループサイズ３２０は、ブロックグループのサイズである。
【００７１】
サーバアクセスカウンタ３３０は、対象ブロックグループを構成するブロック毎のアクセス数を管理するための情報である。サーバアクセスカウンタ３３０は、ブロックグループアドレス３３１、エントリ有効ビット３３２、共有ストレージアドレス３３３、リード回数３３４、及びライト回数３３５を含む。
【００７２】
本実施例のブロックグループは、アドレスが連続する複数のブロックから構成されるものとする。なお、本実施例のブロックグループの構成は、一例であって、アドレスが連続しない複数のブロックから構成されてもよい。
【００７３】
ブロックグループアドレス３３１は、ブロックグループの先頭のアドレスである。
【００７４】
エントリ有効ビット３３２は、ブロックグループアドレス３３１に対応する対象ブロックグループのエントリが有効であるか否かを示すビットである。本実施例では、エントリ有効ビット３３２が「１」の場合、エントリが有効であることを示し、エントリ有効ビット３３２が「０」の場合、エントリが無効であることを示す。
【００７５】
エントリ有効ビット３３２が「０」のエントリには、後述するアクセスカウンタ入替処理において、新たな対象ブロックグループの情報が格納されることとなる。
【００７６】
共有ストレージアドレス３３３は、ブロックグループアドレス３３１に対応する対象ブロックグループを構成する各ブロックの先頭アドレスである。
【００７７】
リード回数３３４は、共有ストレージアドレス３３３に対応するブロックに対するリード処理の回数である。ライト回数３３５は、共有ストレージアドレス３３３に対応するブロックに対するライト処理の回数である。
【００７８】
サーバアクセス領域３４０は、サーバモジュール１１０がアクセスしたブロックグループに関する情報である。サーバアクセス領域３４０は、ブロックグループアドレス３４１、アクセスビット３４２、及びサーバアクセスカウンタ存在ビット３４３を含む。
【００７９】
ブロックグループアドレス３４１は、ブロックグループの先頭アドレスである。
【００８０】
アクセスビット３４２は、ブロックグループアドレス３４１に対応するブロックグループにアクセスしたか否かを示すビットである。
【００８１】
本実施例では、アクセスビット３４２が「１」の場合、サーバモジュール１１０がブロックグループアドレス３４１に対応するブロックグループにアクセスしたことを示し、アクセスビット３４２が「０」の場合、サーバモジュール１１０がブロックグループアドレス３４１に対応するブロックグループにアクセスしていないことを示す。
【００８２】
サーバアクセスカウンタ存在ビット３４３は、ブロックグループアドレス３４１に対応するブロックグループを構成するブロックのアクセス数が管理されているか否かを示すビットである。すなわち、ブロックグループアドレス３４１に対応するブロックグループが対象ブロックグループとしてサーバアクセスカウンタ３３０に登録されているか否かを示すビットである。
【００８３】
本実施例では、サーバアクセスカウンタ存在ビット３４３が「１」の場合、ブロックグループアドレス３４１に対応するブロックグループのエントリがサーバアクセスカウンタ３３０に登録されていることを示し、サーバアクセスカウンタ存在ビット３４３が「０」の場合、ブロックグループアドレス３４１に対応するブロックグループのエントリがサーバアクセスカウンタ３３０に登録されていないことを示す。
【００８４】
サーバアクセス領域３４０には、ストレージ制御部２５０が管理する全てのブロックグループに対応するエントリが登録される。これによって、サーバモジュール１１０は、どのブロックグループにアクセスしたかを把握することができる。
【００８５】
図４は、本発明の実施例１におけるキャッシュ管理情報２１６の一例を示す説明図である。
【００８６】
キャッシュ管理情報２１６は、キャッシュエントリ最大数４００及びキャッシュ対応テーブル４１０を含む。
【００８７】
キャッシュエントリ最大数４００は、キャッシュ対応テーブル４１０に登録可能なエントリ数である。すなわち、キャッシュドライバ２１０が管理するキャッシュ領域の数を示す。
【００８８】
キャッシュ対応テーブル４１０は、共有ストレージシステム１３０上のアドレスとキャッシュメモリシステム１２０との対応を示す。キャッシュ対応テーブル４１０は、キャッシュメモリアドレス４１１、共有ストレージアドレス４１２、及びキャッシュ有効ビット４１３を含む。
【００８９】
キャッシュメモリアドレス４１１は、キャッシュメモリシステム１２０のキャッシュ領域の先頭アドレスである。
【００９０】
共有ストレージアドレス４１２は、キャッシュメモリアドレス４１１に対応するキャッシュ領域に格納されたデータの共有ストレージシステム１３０における格納位置、すなわち、ブロックの先頭アドレスである。
【００９１】
キャッシュ有効ビット４１３は、キャッシュメモリアドレス４１１に対応するキャッシュ領域に読み出し可能なデータが格納されているか否かを示すビットである。本実施例では、キャッシュ有効ビット４１３が「１」の場合、キャッシュ領域に読み出し可能なデータが格納されていることを示し、キャッシュ有効ビット４１３が「０」の場合、キャッシュ領域に読み出し可能なデータが格納されていないことを示す。
【００９２】
図５は、本発明の実施例１におけるストレージアクセス管理情報２５２の一例を示す説明図である。
【００９３】
ストレージアクセス管理情報２５２は、ブロックグループサイズ５００及びストレージアクセスカウンタ５１０を含む。
【００９４】
ブロックグループサイズ５００は、ブロックグループのサイズであり、サーバアクセス管理情報２１５のブロックグループサイズ３２０と同一のものである。本実施例では、ストレージ制御部２５０は、ブロックグループ毎にアクセス数を管理する。
【００９５】
ストレージアクセスカウンタ５１０は、ストレージ制御部２５０がブロックグループ毎のアクセス数を管理するための情報である。ストレージアクセスカウンタ５１０は、ブロックグループアドレス５１１、リード回数５１２、及びライト回数５１３を含む。
【００９６】
ブロックグループアドレス５１１は、ブロックグループの先頭アドレスである。リード回数５１２は、ブロックグループに対するリード処理の回数である。ライト回数５１３は、ブロックグループに対するライト処理の回数である。リード回数５１２及びライト回数５１３は、それぞれ、ブロックグループを構成するブロックに対するリード処理の回数及びライト処理の回数の合計値を表す。
【００９７】
本実施例では、複数のサーバモジュール１１０に対して一つのストレージアクセス管理情報２５２を保持するものとする。なお、ストレージ制御部２５０は、サーバモジュール１１０毎にストレージアクセス管理情報２５２を保持してもよい。
【００９８】
図３及び図４に示すように、キャッシュドライバ２１０は、アプリケーション２０１によってアクセスされたブロックグループの中の一部のブロックグループ（対象ブロックグループ）について、ブロック単位のアクセス数を管理し、当該一部のブロックグループを構成するブロックのアクセス数に基づいて、キャッシュメモリシステム１２０へのキャッシュ制御を行う。
【００９９】
また、図５に示すように、ストレージ制御部２５０は、ブロックグループ単位のアクセス数を管理する。
【０１００】
図６は、本発明の実施例１におけるタイマ２１７の構成例を示す説明図である。
【０１０１】
タイマ２１７は、タイマ・カウンタ６００、アクセスカウンタ入替処理割込タイミング６１０、及びキャッシュデータ入替処理割込タイミング６２０を含む。
【０１０２】
アクセスカウンタ入替処理割込タイミング６１０は、後述するアクセスカウンタ入替処理の実行タイミングである。キャッシュデータ入替処理割込タイミング６２０は、後述するキャッシュデータ入替処理の実行タイミングである。
【０１０３】
タイマ・カウンタ６００は、各割込タイミングにしたがって、処理の開始を指示する。具体的には、タイマ・カウンタ６００は、アクセスカウンタ入替処理割込タイミング６１０に示される時間毎に、アクセスカウンタ入替制御部２１２に処理開始の割込を発生させ、また、キャッシュデータ入替処理割込タイミング６２０で示される時間毎に、キャッシュデータ入替制御部２１４に処理開始の割込を発生させる。
【０１０４】
本実施例では、計測されたアクセス数を管理するアクセス管理情報（アクセスカウンタ）がサーバアクセス管理情報２１５とストレージアクセス管理情報２５２との二つに分かれている点に特徴である。
【０１０５】
ストレージアクセス管理情報２５２では、共有ストレージシステム１３０の全ての記憶領域に対するアクセス数が、ブロックグループ単位に管理される。一方、サーバアクセス管理情報２１５では、共有ストレージシステム１３０の一部のブロックグループのアクセス数が、ブロック単位に管理される。
【０１０６】
そのため、サーバモジュール１１０は、共有ストレージシステム１３０の全ての記憶領域のアクセス数をブロック単位で管理する場合と比較して、メモリ１１２の使用容量を削減することができる。また、共有ストレージシステム１３０自身がアクセス数を管理しているため、共有ストレージシステム１３０は、当該アクセス数を用いて独自に共有ストレージシステム１３０内のデータの配置を決めることができる。
【０１０７】
前述したようなアクセス数の管理方法を実現するためには、サーバモジュール１１０が、共有ストレージシステム１３０の記憶領域（ブロックグループ）の中から、ブロック単位のアクセス数を管理する記憶領域（対象ブロックグループ）を適切に決定し、また、アクセス状況に応じて対象ブロックグループを動的に変更する必要がある。
【０１０８】
次に、図７、図８及び図９を用いて、アプリケーション２０１からＩ／Ｏ要求が発行された場合に実行される処理を説明する。
【０１０９】
図７は、本発明の実施例１におけるサーバアクセス計測部２１１が実行するアクセス数計測処理を説明するフローチャートである。
【０１１０】
アプリケーション２０１からＩ／Ｏ要求が発行されると、まず、キャッシュドライバ２１０のサーバアクセス計測部２１１に当該Ｉ／Ｏ要求が入力される。このとき、サーバアクセス計測部２１１は、アクセス数計測処理を開始する。
【０１１１】
サーバアクセス計測部２１１は、サーバアクセスカウンタ３３０を参照し、Ｉ／Ｏ要求の宛先アドレスに一致するエントリを検索する（ステップＳ１００）。
【０１１２】
具体的には、サーバアクセス計測部２１１は、共有ストレージアドレス３３３がＩ／Ｏ要求の宛先アドレスに一致するエントリを検索する。
【０１１３】
本実施例では、キャッシュドライバ２１０は、共有ストレージシステム１３０の全記憶領域のうち、一部の記憶領域（対象ブロックグループを構成するブロック）のアクセス数のみを管理する。そのため、サーバアクセス管理情報２１５には、共有ストレージシステム１３０の対象ブロックグループを構成するブロックのアクセス数が格納される。したがって、Ｉ／Ｏ要求の宛先アドレスが対象ブロックグループを構成するブロックを示すアドレスでない場合、サーバアクセスカウンタ３３０にはＩ／Ｏ要求の宛先アドレスに一致するエントリが存在しないこととなる。
【０１１４】
以下、実施例１におけるキャッシュドライバ２１０及びストレージ制御部２５０が実行する処理について説明する。
【０１１５】
サーバアクセス計測部２１１は、検索結果に基づいて、サーバアクセスカウンタ３３０にＩ／Ｏ要求の宛先アドレスに一致するエントリが存在するか否かを判定する（ステップＳ１０１）。
【０１１６】
サーバアクセスカウンタ３３０にＩ／Ｏ要求の宛先アドレスに一致するエントリが存在しないと判定された場合、サーバアクセス計測部２１１は、ステップＳ１０３に進む。
【０１１７】
サーバアクセスカウンタ３３０にＩ／Ｏ要求の宛先アドレスに一致するエントリが存在すると判定された場合、サーバアクセス計測部２１１は、Ｉ／Ｏ要求の種別に基づいて、当該エントリのリード回数３３４又はライト回数３３５の値を「１」加算する（ステップＳ１０２）。
【０１１８】
具体的には、サーバアクセス計測部２１１は、Ｉ／Ｏ要求の種別がリードの場合にはリード回数３３４の値を「１」加算し、Ｉ／Ｏ要求の種別がライトの場合にはライト回数３３５の値を「１」加算する。
【０１１９】
サーバアクセス計測部２１１は、サーバアクセス領域３４０を参照し、Ｉ／Ｏ要求の宛先アドレスに対応するエントリのアクセスビット３４２を更新し（ステップＳ１０３）、処理を終了する。具体的には以下のような処理が実行される。
【０１２０】
サーバアクセス計測部２１１は、サーバアクセス領域３４０のブロックグループアドレス３４１を参照し、Ｉ／Ｏ要求の宛先アドレスが含まれるブロックグループに対応するエントリを検索する。例えば、Ｉ／Ｏ要求のアドレスが「０ｘ１０００２０００」の場合、図３に示すサーバアクセス領域３４０の一番上のエントリが当該宛先アドレスに対応するエントリとして検索される。
【０１２１】
サーバアクセス計測部２１１は、検索されたエントリのアクセスビット３４２を参照し、アクセスビット３４２が「０」の場合には「１」に更新する。なお、アクセスビット３４２が「１」の場合には特に処理は実行されない。
【０１２２】
以上が、ステップＳ１０３の処理の説明である。なお、ステップＳ１０３の処理結果は、後述するようにアクセスカウンタ入替制御部２１２によって利用される。
【０１２３】
図８は、本発明の実施例１におけるアクセス振り分け部２１３が実行するアクセス振り分け処理を説明するフローチャートである。
【０１２４】
Ｉ／Ｏ要求は、サーバアクセス計測部２１１の次に、アクセス振り分け部２１３に入力される。このとき、アクセス振り分け部２１３は、アクセス振り分け処理を開始する。
【０１２５】
まず、アクセス振り分け部２１３は、キャッシュ管理情報２１６のキャッシュ対応テーブル４１０を参照し、Ｉ／Ｏ要求の宛先アドレスに一致するエントリを検索する（ステップＳ２００）。
【０１２６】
具体的には、アクセス振り分け部２１３は、共有ストレージアドレス４１２がＩ／Ｏ要求の宛先アドレスと一致するエントリを検索する。エントリが存在する場合、アクセス振り分け部２１３は、さらに、検索されたエントリのキャッシュ有効ビット４１３が「１」であるか否かを判定する。
【０１２７】
アクセス振り分け部２１３は、検索結果に基づいて、キャッシュ対応テーブル４１０にＩ／Ｏ要求の宛先アドレスに一致するエントリが存在し、かつ、当該エントリのキャッシュ有効ビット４１３が「１」であるか否かを判定する（ステップＳ２０１）。すなわち、Ｉ／Ｏ要求の宛先アドレスに対応するブロックのブロックデータが、キャッシュメモリシステム１２０に格納されているか否かが判定される。
【０１２８】
キャッシュ対応テーブル４１０にＩ／Ｏ要求の宛先アドレスに一致するエントリが存在しない場合、又は、キャッシュ対応テーブル４１０にＩ／Ｏ要求の宛先アドレスに一致するエントリが存在するが、当該エントリのキャッシュ有効ビット４１３が「１」ではない場合、アクセス振り分け部２１３は、入力されたＩ／Ｏ要求を共有ストレージシステム１３０に出力し、処理を終了する。すなわち、キャッシュメモリシステム１２０に対象となるブロックデータが格納されていない場合には、Ｉ／Ｏ要求は、そのまま、共有ストレージシステム１３０に送信される。
【０１２９】
キャッシュ対応テーブル４１０にＩ／Ｏ要求の宛先アドレスに一致するエントリが存在し、かつ、当該エントリのキャッシュ有効ビット４１３が「１」であると判定された場合、すなわち、キャッシュメモリシステム１２０にＩ／Ｏ要求の対象となるブロックデータが格納されていると判定された場合、アクセス振り分け部２１３は、Ｉ／Ｏ要求の種別がリードであるか否かを判定する（ステップＳ２０２）。
【０１３０】
Ｉ／Ｏ要求の種別がリードであると判定された場合、アクセス振り分け部２１３は、Ｉ／Ｏ要求をキャッシュメモリシステム１２０へのＩ／Ｏ要求（リード要求）に変換し（ステップＳ２０３）、処理を終了する。
【０１３１】
具体的には、アクセス振り分け部２１３は、Ｉ／Ｏ要求の宛先アドレスを、ステップＳ２００において検索されたエントリのキャッシュメモリアドレス４１１に格納されるアドレスに変更する。さらに、アクセス振り分け部２１３は、変換されたＩ／Ｏ要求をキャッシュメモリシステム１２０に入力する。
【０１３２】
これによって、キャッシュメモリシステム１２０からＩ／Ｏ要求の対象となるブロックデータが読み出される。
【０１３３】
ステップＳ２０２において、Ｉ／Ｏ要求の種別がライトであると判定された場合、アクセス振り分け部２１３は、キャッシュメモリシステム１２０へのＩ／Ｏ要求（ライト要求）を生成し（ステップＳ２０４）、処理を終了する。
【０１３４】
具体的には、アクセス振り分け部２１３は、Ｉ／Ｏ要求の宛先アドレスに、ステップＳ２００において検索されたエントリのキャッシュメモリアドレス４１１に格納されるアドレスが設定されたＩ／Ｏ要求を生成する。さらに、アクセス振り分け部２１３は、最初に入力されたＩ／Ｏ要求を共有ストレージシステム１３０に入力し、また、新たに生成されたＩ／Ｏ要求をキャッシュメモリシステム１２０に入力する。
【０１３５】
これによって、共有ストレージシステム１３０及びキャッシュメモリシステム１２０の双方に格納されるブロックデータが更新される。
【０１３６】
Ｓ２０４において、共有ストレージシステム１３０にもＩ／Ｏ要求を送信する理由は、キャッシュメモリシステム１２０において障害が発生した場合に、共有ストレージシステム１３０から更新後のデータを取得することができ、データの可用性を向上させることができるためである。
【０１３７】
なお、ステップＳ２０４の処理の代わりに、アクセス振り分け部２１３が、キャッシュ対応テーブル４１０から検索されたエントリのキャッシュ有効ビット４１３を「０」に変更することによって、当該エントリを無効化する処理、又は、Ｉ／Ｏ要求の宛先アドレスをキャッシュメモリシステム１２０に変更する処理を実行してもよい。
【０１３８】
図９は、本発明の実施例１におけるストレージアクセス計測部２５１が実行するアクセス計測処理を説明するフローチャートである。
【０１３９】
ストレージ制御部２５０は、サーバモジュール１１０から出力されたＩ／Ｏ要求を受け付けると、当該Ｉ／Ｏ要求を、ストレージアクセス計測部２５１に入力する。このとき、ストレージアクセス計測部２５１は、アクセス計測処理を開始する。
【０１４０】
ストレージアクセス計測部２５１は、ストレージアクセスカウンタ５１０を参照し、Ｉ／Ｏ要求の宛先アドレスに対応するエントリを検索する（ステップＳ３００）。
【０１４１】
具体的には、ストレージアクセス計測部２５１は、ストレージアクセスカウンタ５１０のブロックグループアドレス５１１を参照し、Ｉ／Ｏ要求の宛先アドレスが含まれるブロックグループに対応するエントリを検索する。
【０１４２】
ストレージアクセスカウンタ５１０には、共有ストレージシステム１３０の全記憶領域（全ブロックグループ）のアクセス数が管理されているため、ステップＳ３００の処理では、必ずいずれか一つのエントリが検索される。
【０１４３】
ストレージアクセス計測部２５１は、Ｉ／Ｏ要求の種別に基づいて、検索されたエントリのリード回数５１２又はライト回数５１３の値を「１」加算し（ステップＳ３０１）、処理を終了する。
【０１４４】
具体的には、ストレージアクセス計測部２５１は、Ｉ／Ｏ要求の種別がリードの場合にはリード回数５１２の値を「１」加算し、Ｉ／Ｏ要求の種別がライトの場合にはライト回数５１３の値を「１」加算する。
【０１４５】
図７、図８及び図９を用いて説明したように、アプリケーション２０１から発行されたＩ／Ｏ要求に対して、サーバアクセス計測部２１１はブロック単位にアクセス数を計測し、ストレージアクセス計測部２５１はブロックグループ単位にアクセス数を計測し、アクセス振り分け部２１３はキャッシュヒット／ミスヒットの判定を行う。
【０１４６】
以下、図１０を用いてアクセスカウンタ入替処理について説明し、図１１を用いてキャッシュデータの入替処理について説明する。
【０１４７】
図１０は、本発明の実施例１におけるアクセスカウンタ入替制御部２１２が実行するアクセスカウンタ入替処理を説明するフローチャートである。
【０１４８】
アクセスカウンタ入替処理では、アクセスカウンタ入替制御部２１２が、アプリケーション２０１によってアクセスされたブロックグループを特定し、特定されたブロックグループのアクセス数に基づいて対象ブロックグループを決定する。
【０１４９】
このとき、対象ブロックグループのアクセス数はサーバアクセス管理情報２１５から取得され、対象外ブロックグループのアクセス数はストレージアクセス管理情報２５２から取得される。これは、以下のような理由のためである。
【０１５０】
（理由１）対象ブロックグループを構成するブロックは、キャッシュ制御の対象となる。そのため、対象ブロックグループを構成するブロックのブロックデータがキャッシュメモリシステム１２０に格納された場合、当該ブロックデータに対するアクセス数は、サーバモジュール１１０によって管理されるため、共有ストレージシステム１３０側では正確なアクセス数を把握できない。例えば、リード要求の対象となるデータがキャッシュメモリシステム１２０に格納される場合、共有ストレージシステム１３０にはリード要求が送信されないため、共有ストレージシステム１３０は当該リード要求を把握できない。したがって、対象ブロックグループのアクセス数は、サーバアクセス管理情報２１５から取得される。
【０１５１】
（理由２）一方、サーバモジュール１１０は、対象ブロックグループのアクセス数のみを管理するため、対象外ブロックグループのアクセス数を把握できない。したがって、対象外ブロックグループのアクセス数は、ストレージアクセス管理情報２５２から取得される。
【０１５２】
以下、アクセスカウンタ入替処理の具体的な処理について説明する。
【０１５３】
タイマ・カウンタ６００は、アクセスカウンタ入替処理割込タイミング６１０にしたがって、アクセスカウンタ入替制御部２１２に、処理の開始を通知する割り込みを発生させる。
【０１５４】
アクセスカウンタ入替制御部２１２は、タイマ・カウンタ６００からの割り込みを受け付けると（ステップＳ４００）、処理を開始する。
【０１５５】
アクセスカウンタ入替制御部２１２は、サーバアクセスカウンタ３３０を参照し、対象ブロックグループのアクセス数を取得する（ステップＳ４０１）。
【０１５６】
具体的には、アクセスカウンタ入替制御部２１２は、サーバアクセスカウンタ３３０を参照し、対象ブロックグループを構成するブロックのアクセス数を取得し、取得された各ブロックのアクセス数の合計値を算出する。すなわち、アクセスカウンタ入替制御部２１２は、ブロックグループアドレス３３１に含まれる各共有ストレージアドレス３３３のリード回数３３４及びライト回数３３５を取得し、取得されたリード回数３３４の合計値及び取得されたライト回数３３５の合計値を算出する。
【０１５７】
例えば、図３に示す例では、ブロックグループアドレス３３１が「０ｘ１０００００００」のブロックグループのリード回数は、共有ストレージアドレス３３３に対応する五つのブロックのリード回数３３４を合計することによって「１７」と算出され、当該ブロックグループのライト回数は、共有ストレージアドレス３３３に対応する五つブロックのライト回数３３５を合計することによって「１２」と算出される。
【０１５８】
アクセスカウンタ入替制御部２１２は、サーバモジュール１１０によってアクセスされたブロックを含むブロックグループの中から、対象外ブロックグループを特定する（ステップＳ４０２）。これは、サーバモジュール１１０が一部のブロックグループ、すなわち、対象ブロックグループのアクセス数のみを管理しているためである。
【０１５９】
具体的には、アクセスカウンタ入替制御部２１２は、サーバアクセス領域３４０を参照し、アクセスビット３４２が「１」、かつ、サーバアクセスカウンタ存在ビット３４３が「０」であるエントリを検索する。
【０１６０】
ここで、本実施例では、ストレージアクセス管理情報２５２には、複数のサーバモジュール１１０がアクセスしたブロックグループのアクセス数も管理されている。そのため、サーバモジュール１１０は、自身がアクセスしたブロックグループのアクセス数のみを取得すればよい。したがって、ステップＳ４０２において、アクセスカウンタ入替制御部２１２は、アクセスビット３４２が「１」であるエントリの中から対象外ブロックグループを検索する。
【０１６１】
アクセスカウンタ入替制御部２１２は、共有ストレージシステム１３０から、特定された対象外ブロックグループのアクセス数を取得する（ステップＳ４０３）。
【０１６２】
具体的には、アクセスカウンタ入替制御部２１２は、検索されたエントリのブロックグループアドレス３４１が含まれる取得要求を、共有ストレージシステム１３０に送信する。
【０１６３】
このとき、ストレージ制御部２５０は、当該取得要求を受け付けると、ストレージアクセス管理情報２５２のストレージアクセスカウンタ５１０を参照し、ブロックグループアドレス５１１が、取得要求に含まれるブロックグループアドレス３４１と一致するエントリを検索する。さらに、ストレージ制御部２５０は、検索されたエントリのリード回数５１２及びライト回数５１３をアクセスカウンタ入替制御部２１２に送信する。
【０１６４】
次に、アクセスカウンタ入替制御部２１２は、サーバアクセスカウンタ３３０及びストレージアクセスカウンタ５１０のそれぞれから取得されたブロックグループのアクセス数に基づいて、サーバアクセスカウンタ３３０に登録するブロックグループ、すなわち、対象ブロックグループを決定する（ステップＳ４０４）。
【０１６５】
例えば、アクセスカウンタ入替制御部２１２は、ブロックグループのリード回数及びライト回数の合計値が大きい順に、アクセスカウンタエントリ最大数３００の範囲内で対象ブロックグループを決定する。
【０１６６】
なお、前述した判定方法は一例であって、本発明はこれに限定されない。例えば、リード回数が大きい順に対象ブロックグループが決定されてもよい。
【０１６７】
アクセスカウンタ入替制御部２１２は、決定された対象ブロックグループの情報に基づいて、サーバアクセスカウンタ３３０を更新することによって、対象ブロックグループを入れ替える（ステップＳ４０５）。具体的には、以下のような処理が実行される。
【０１６８】
アクセスカウンタ入替制御部２１２は、入れ替え前の対象ブロックグループのアドレスと、ステップＳ４０４において決定された対象ブロックグループのアドレスとを比較することによって、対象ブロックグループから除外されるブロックグループ、すなわち、サーバアクセスカウンタ３３０から削除されるブロックグループを特定する。さらに、アクセスカウンタ入替制御部２１２は、削除されるブロックグループのエントリのエントリ有効ビット３３２に「０」を設定する。
【０１６９】
アクセスカウンタ入替制御部２１２は、ステップＳ４０４において決定された対象ブロックグループのうち、サーバアクセスカウンタ３３０に未登録の対象ブロックグループに対応するエントリを、当該サーバアクセスカウンタ３３０に登録する。
【０１７０】
より具体的には、アクセスカウンタ入替制御部２１２は、エントリ有効ビット３３２が「０」のエントリのブロックグループアドレス３３１に未登録の対象ブロックグループのアドレスを設定する。さらに、アクセスカウンタ入替制御部２１２は、当該ブロックグループをブロック単位に分割し、各ブロックのアドレスを当該エントリの共有ストレージアドレス３３３に設定する。さらに、アクセスカウンタ入替制御部２１２は、当該エントリのリード回数３３４及びライト回数３３５に初期値を設定する。
【０１７１】
初期値は、例えば、リード回数３３４及びライト回数３３５のそれぞれに「０」を設定してもよいし、下式（２）及び下式（３）に基づいて算出された値を設定してもよい。
【０１７２】
なお、式（２）のリード回数、ブロックグループサイズ、及びブロックサイズには、リード回数５１２の値、ブロックグループサイズ３２０の値、及びブロックサイズ３１０の値が代入される。また、式（３）のライト回数、ブロックグループサイズ、及びブロックサイズには、ライト回数５１３の値、ブロックグループサイズ３２０の値、及びブロックサイズ３１０の値が代入される。
【０１７３】
【数２】
2015075818.tif 000004
【０１７４】
【数３】
2015075818.tif 000005
【０１７５】
その後、アクセスカウンタ入替制御部２１２は、サーバアクセスカウンタ３３０に新たに登録された対象ブロックグループに対応するエントリのエントリ有効ビット３３２に「１」を設定する。
【０１７６】
以上がステップＳ４０５の処理の説明である。
【０１７７】
次に、アクセスカウンタ入替制御部２１２は、サーバアクセス領域３４０を更新し（ステップＳ４０６）、処理を終了する。
【０１７８】
具体的には、アクセスカウンタ入替制御部２１２は、サーバアクセス領域３４０の全てのエントリのアクセスビット３４２に「０」を設定する。さらに、アクセスカウンタ入替制御部２１２は、サーバアクセスカウンタ３３０に登録されている対象ブロックグループに対応するエントリのサーバアクセスカウンタ存在ビット３４３に「１」を設定し、サーバアクセスカウンタ３３０に登録されていない対象外ブロックグループに対応するエントリのサーバアクセスカウンタ存在ビット３４３に「０」を設定する。
【０１７９】
なお、ストレージ制御部２５０がサーバモジュール１１０毎にストレージアクセス管理情報２５２を保持する場合、アクセスカウンタ入替制御部２１２は、ステップＳ４０２の処理の代わりに、サーバモジュール１１０の識別情報とを送信してもよい。このとき、ストレージ制御部２５０は、当該サーバモジュール１１０に対応するストレージアクセス管理情報２５２をアクセスカウンタ入替制御部２１２に送信することとなる。
【０１８０】
図１１は、本発明の実施例１におけるキャッシュデータ入替制御部２１４が実行するキャッシュデータ入替処理を説明するフローチャートである。
【０１８１】
タイマ・カウンタ６００は、キャッシュデータ入替処理割込タイミング６２０にしたがって、キャッシュデータ入替制御部２１４に、処理の開始を通知する割り込みを発生させる。
【０１８２】
キャッシュデータ入替制御部２１４は、タイマ・カウンタ６００からの割り込みを受け付けると、処理を開始する（ステップＳ５００）。
【０１８３】
キャッシュデータ入替制御部２１４は、サーバアクセスカウンタ３３０に基づいて、キャッシュメモリシステム１２０に格納するブロックデータを決定する（ステップＳ５０１）。具体的には、以下のような処理が実行される。
【０１８４】
キャッシュデータ入替制御部２１４は、サーバアクセスカウンタ３３０を参照し、共有ストレージアドレス３３３毎、すなわち、ブロック毎にリード回数３３４及びライト回数３３５を取得する。すなわち、ブロック毎のリード回数及びライト回数が取得される。
【０１８５】
キャッシュデータ入替制御部２１４は、各ブロックのリード回数及びライト回数に基づいて、キャッシュエントリ最大数４００の範囲内で、キャッシュメモリシステム１２０に格納するブロックデータを決定する。
【０１８６】
例えば、リード回数３３４及びライト回数３３５の合計値が大きい順、若しくは、リード回数３３４の値が大きい順に決定する方法、又は、重み付けが行われたリード回数３３４及びライト回数３３５に基づいて決定する方法などが考えられる。なお、前述した方法は一例であって、本発明はこれに限定されない。
【０１８７】
以上がステップＳ５０１の処理の説明である。
【０１８８】
次に、キャッシュデータ入替制御部２１４は、キャッシュ対応テーブル４１０を参照し、ステップＳ５０１の処理結果に基づいて、キャッシュ領域から追い出されるブロックデータに対応するエントリを更新する（ステップＳ５０２）。具体的には、以下のような処理が実行される。
【０１８９】
キャッシュデータ入替制御部２１４は、現在キャッシュ領域に格納されるブロックデータのアドレスのリスト（第１アドレスリスト）と、新たにキャッシュ領域に格納されるブロックデータのアドレスのリスト（第２アドレスリスト）とを比較する。
【０１９０】
キャッシュデータ入替制御部２１４は、比較の結果に基づいて、現在キャッシュ領域に格納されるブロックデータの中から、第２アドレスリストに含まれないブロックデータを検索する。キャッシュデータ入替制御部２１４は、検索されたブロックデータをキャッシュ領域から追い出されるブロックデータに決定する。
【０１９１】
キャッシュデータ入替制御部２１４は、キャッシュ対応テーブル４１０を参照し、キャッシュメモリアドレス４１１が、決定されたブロックデータを格納するキャッシュ領域のアドレスと一致するエントリのキャッシュ有効ビット４１３に「０」を設定する。
【０１９２】
以上がステップＳ５０２の処理の説明である。
【０１９３】
キャッシュデータ入替制御部２１４は、キャッシュメモリシステム１２０に、新たなブロックデータを格納し（ステップＳ５０３）、処理を終了する。具体的には、以下のような処理が実行される。
【０１９４】
キャッシュデータ入替制御部２１４は、キャッシュ有効ビット４１３が「０」であるエントリの共有ストレージアドレス４１２に、共有ストレージシステム１３０における新たなブロックデータのアドレスを登録する。
【０１９５】
キャッシュデータ入替制御部２１４は、当該エントリの共有ストレージアドレス４１２に対応する記憶領域（ブロック）からブロックデータを読み出し、キャッシュメモリアドレス４１１に対応するキャッシュ領域に読み出されたデータを格納する。また、キャッシュデータ入替制御部２１４は、当該エントリのキャッシュ有効ビット４１３に「１」を設定する。
【０１９６】
なお、キャッシュデータ入替処理の実行中に、新たなブロックデータが格納されるキャッシュ領域へのライト要求が発行された場合、キャッシュデータ入替制御部２１４は、キャッシュメモリシステム１２０へのライト処理をキャンセルし、代わりに当該キャッシュ領域へのライトが行われるように制御する。
【０１９７】
図１２を用いて、実施例１における計算機システムの初期化処理について説明する。
【０１９８】
図１２は、本発明の実施例１におけるキャッシュドライバ２１０が実行する初期化処理を説明するフローチャートである。
【０１９９】
キャッシュドライバ２１０は、管理者から設定情報の入力を受け付けると（ステップＳ６００）、初期化処理を開始する。
【０２００】
設定情報には、サーバアクセスカウンタ３３０のエントリ数、ブロックのサイズ、ブロックグループのサイズ、キャッシュメモリシステム１２０のキャッシュ容量、キャッシュメモリシステム１２０におけるキャッシュ領域のアドレス範囲、共有ストレージシステム１３０の記憶領域のアドレス範囲、アクセスカウンタ入替処理の実行間隔、及びキャッシュデータ入替処理の実行間隔等が含まれる。
【０２０１】
なお、管理者は、サーバモジュール１１０に対して直接、設定情報を入力してもよいし、管理サーバ（図示省略）を用いて、設定情報を入力してもよい。
【０２０２】
キャッシュドライバ２１０は、設定情報に基づいて、サーバアクセス管理情報２１５を初期化する（ステップＳ６０１）。具体的には、以下のような処理が実行される。
【０２０３】
キャッシュドライバ２１０は、アクセスカウンタエントリ最大数３００に設定情報に含まれるサーバアクセスカウンタ３３０のエントリ数を設定する。キャッシュドライバ２１０は、ブロックサイズ３１０及びブロックグループサイズ３２０のそれぞれに、設定情報に含まれるブロックのサイズ及びブロックグループのサイズを設定する。
【０２０４】
キャッシュドライバ２１０は、サーバアクセスカウンタ３３０にアクセスカウンタエントリ最大数３００の数だけエントリを生成し、生成されたエントリのエントリ有効ビット３３２に「０」を設定する。
【０２０５】
キャッシュドライバ２１０は、ブロックグループのサイズ、共有ストレージシステム１３０の記憶領域のアドレス範囲に基づいて、サーバアクセス領域３４０のブロックグループアドレス３４１に、ブロックグループサイズ毎のアドレスが設定されたエントリを生成する。また、キャッシュドライバ２１０は、生成されたエントリのアクセスビット３４２及びサーバアクセスカウンタ存在ビット３４３に「０」を設定する。
【０２０６】
以上がステップＳ６０１の処理の説明である。
【０２０７】
次に、キャッシュドライバ２１０は、キャッシュ管理情報２１６を初期化する（ステップＳ６０２）。具体的には、以下のような処理が実行される。
【０２０８】
キャッシュドライバ２１０は、キャッシュエントリ最大数４００に、下式（４）を用いて算出される値を設定する。なお、式（４）のブロックサイズには、ブロックサイズ３１０の値が代入される。また、式（４）のキャッシュメモリシステムのキャッシュ容量には、設定情報に含まれるキャッシュメモリシステム１２０のキャッシュ容量が代入される。
【０２０９】
【数４】
2015075818.tif 000006
【０２１０】
キャッシュドライバ２１０は、ブロックのサイズ、及びキャッシュメモリシステム１２０の記憶領域のアドレス範囲に基づいて、キャッシュ対応テーブル４１０のキャッシュメモリアドレス４１１に、ブロックサイズ毎のアドレスが設定されたエントリを生成する。また、キャッシュドライバ２１０は、生成されたエントリのキャッシュ有効ビット４１３に「０」を設定する。
【０２１１】
以上がステップＳ６０２の処理の説明である。
【０２１２】
次に、キャッシュドライバ２１０は、ストレージ制御部２５０に設定情報を通知することによって、ストレージアクセス管理情報２５２の初期化を指示する（ステップＳ６０３）。
【０２１３】
このとき、ストレージ制御部２５０は、ブロックグループサイズ５００に、設定情報に含まれるブロックグループのサイズを設定する。また、ストレージ制御部２５０は、ブロックグループのサイズ、及び共有ストレージシステム１３０の記憶領域のアドレス範囲に基づいて、ストレージアクセスカウンタ５１０のブロックグループアドレス５１１に、ブロックグループサイズ毎のアドレスが設定されたエントリを生成する。また、ストレージ制御部２５０は、生成されたエントリのリード回数５１２及びライト回数５１３に「０」を設定する。
【０２１４】
なお、ＲＡＩＤの設定、及びＬＵの設定等、共有ストレージシステム１３０の初期化処理は、キャッシュドライバ２１０の初期化処理の前に実行されているものとする。共有ストレージシステム１３０の初期化は公知の技術を用いればよいため詳細な説明は省略する。
【０２１５】
キャッシュドライバ２１０は、タイマ２１７を初期化し（ステップＳ６０４）、処理を終了する。
【０２１６】
具体的には、キャッシュドライバ２１０は、アクセスカウンタ入替処理割込タイミング６１０及びキャッシュデータ入替処理割込タイミング６２０に、設定情報に含まれるアクセスカウンタ入替処理の実行間隔及びキャッシュデータ入替処理の実行間隔を設定する。
【０２１７】
以上説明したように、実施例１によれば、サーバモジュール１１０は、共有ストレージシステム１３０の記憶領域のうち、一部の記憶領域（対象ブロックグループ）についてのみブロック単位のアクセス数を管理する。これによって、サーバモジュール１１０のメモリ１１２の使用量を削減できる。
【０２１８】
また、サーバモジュール１１０は、ブロックグループ単位のアクセス数に基づいて、アプリケーション２０１によってアクセスされたブロックグループの中から、動的に対象ブロックグループを変更することによって、キャッシュ効率が高いブロックに対するキャッシュ制御を実現することができる。
【実施例２】
【０２１９】
次に、本発明の実施例２について説明する。
【０２２０】
実施例２では、サーバモジュール１１０内で、アクセス管理情報（アクセスカウンタ）を階層化する点が実施例１と異なる。より具体的には、実施例１のブロックを下位階層ブロックとし、実施例１のブロックグループを上位階層ブロックとして、サーバモジュールが上位階層ブロック及び下位階層ブロックのアクセス数を管理する。
【０２２１】
実施例２では、対象ブロックグループを対象上位階層ブロックと記載し、対象外ブロックグループを対象外上位ブロックと記載する。
【０２２２】
以下、実施例１との差異を中心に説明する。なお、同一の符号を付した構成又は処理は、実施例１と同一の構成又は同一の処理であることを示す。
【０２２３】
実施例２における計算機システムの構成、及び計算機システムのハードウェア構成は実施例１と同一であるため説明を省略する。
【０２２４】
図１３は、本発明の実施例２における計算機システムのソフトウェア構成の一例を示す説明図である。
【０２２５】
実施例２では、キャッシュドライバ２１０の一部の構成が異なる。具体的には、実施例２のキャッシュドライバ２１０は、アクセスカウンタ入替制御部２１２の代わりにアクセス階層化カウンタ入替制御部１３１２を含み、また、サーバアクセス管理情報２１５の代わりにサーバアクセス階層化管理情報１３１５を保持する。その他の構成は実施例１と同一である。
【０２２６】
また、実施例２では、共有ストレージシステム１３０はアクセス数を管理する必要がないため、実施例２のストレージ制御部２５０は、ストレージアクセス計測部２５１及びストレージアクセス管理情報２５２を有さない。
【０２２７】
図１４は、本発明の実施例２におけるサーバアクセス階層化管理情報１３１５の一例を示す説明図である。
【０２２８】
サーバアクセス階層化管理情報１３１５は、下位階層アクセスカウンタエントリ最大数１４００、下位階層ブロックサイズ１４１０、上位階層ブロックサイズ１４２０、下位階層サーバアクセスカウンタ１４３０、上位階層サーバアクセスカウンタ１４４０を含む。
【０２２９】
下位階層アクセスカウンタエントリ最大数１４００は、下位階層サーバアクセスカウンタ１４３０に登録可能なエントリ数である。すなわち、キャッシュドライバ２１０が管理可能な上位階層ブロックの数を示す。
【０２３０】
下位階層ブロックサイズ１４１０は、下位階層ブロックのサイズである。本実施例では、キャッシュメモリシステム１２０には、下位階層ブロック単位にデータが格納される。上位階層ブロックサイズ１４２０は、上位階層ブロックのサイズである。
【０２３１】
下位階層サーバアクセスカウンタ１４３０は、対象上位階層ブロックを構成する下位階層ブロック毎のアクセス数を管理するための情報であり、実施例１のサーバアクセスカウンタ３３０に対応する情報である。下位階層サーバアクセスカウンタ１４３０は、上位階層ブロックアドレス１４３１、データ有効ビット１４３２、下位階層ブロックアドレス１４３３、リード回数１４３４、及びライト回数１４３５を含む。
【０２３２】
上位階層ブロックアドレス１４３１は、上位階層ブロックの先頭アドレスである。
【０２３３】
データ有効ビット１４３２は、上位階層ブロックアドレス１４３１に対応する上位階層ブロックのエントリが有効であるか否かを示すビットである。
【０２３４】
本実施例では、エントリ有効ビット３３２が「１」の場合、エントリが有効であることを示し、エントリ有効ビット３３２が「０」の場合、エントリが無効であることを示す。
【０２３５】
下位階層ブロックアドレス１４３３は、上位階層ブロックアドレス１４３１に対応する上位階層ブロックを構成する下位階層ブロックの先頭アドレスである。
【０２３６】
リード回数１４３４は、下位階層サーバアドレスに対応する下位階層ブロックに対するリード処理の回数である。ライト回数１４３５は、下位階層ブロックアドレスに対応する下位階層ブロックに対するライト処理の回数である。
【０２３７】
上位階層サーバアクセスカウンタ１４４０は、上位階層ブロック毎のアクセス数を管理するための情報であり、実施例１のストレージアクセスカウンタ５１０に対応する情報である。上位階層サーバアクセスカウンタ１４４０は、上位階層ブロックアドレス１４４１、リード回数１４４２、及びライト回数１４４３を含む。
【０２３８】
上位階層ブロックアドレス１４４１は、上位階層ブロックの先頭アドレスである。リード回数１４４２は、上位階層ブロックに対するリード処理の回数である。ライト回数１４４３は、上位階層ブロックに対するライト処理の回数である。リード回数１４４２及びライト回数１４４３は、それぞれ、上位階層ブロックを構成する開会総ブロックに対するリード処理の回数及びライト処理の回数の合計値を表す。
【０２３９】
以下、実施例２におけるキャッシュドライバ２１０が実行する処理について説明する。
【０２４０】
実施例２のアクセス数計測処理は、ステップＳ１０２の処理が実施例１のアクセス数計測処理と異なる。具体的には、サーバアクセス計測部２１１は、実施例１のステップＳ１０２と同様の処理によって、下位階層サーバアクセスカウンタ１４３０を更新する。またサーバアクセス計測部２１１は、実施例１のストレージ制御部２５０が実行するアクセス数計測処理と同一の処理に基づいて、上位階層サーバアクセスカウンタ１４４０を更新する。
【０２４１】
実施例２のアクセス振り分け処理は、図８に示す実施例１の処理と同一であるため説明を省略する。
【０２４２】
実施例２では、サーバモジュール１１０内でアクセス数を管理するアクセスカウンタが階層化される。すなわち、上位階層サーバアクセスカウンタ１４４０では、共有ストレージシステム１３０の全ての記憶領域に対するアクセス数が、上位階層ブロック単位に管理される。一方、下位階層サーバアクセスカウンタ１４３０では、共有ストレージシステム１３０の一部の上位階層ブロックのアクセス数が、ブロック単位に管理される。
【０２４３】
そのため、サーバモジュール１１０は、共有ストレージシステム１３０の全ての記憶領域のアクセス数をブロック単位で管理する場合と比較して、メモリ１１２の使用容量を削減することができる。
【０２４４】
前述したようなアクセス数の管理方法を実現するためには、サーバモジュール１１０は、共有ストレージシステム１３０の全ての記憶領域（全ての上位階層ブロック）の中から、下位階層ブロック単位のアクセス数を管理する記憶領域（対象上位階層ブロック）を適切に決定し、また、アクセス状況に応じて対象上位階層ブロックを動的に変更する必要がある。
【０２４５】
以下、図１５を用いて実施例２のアクセスカウンタ入替処理について説明する。
【０２４６】
図１５は、本発明の実施例２におけるアクセス階層化カウンタ入替制御部１３１２が実行するアクセスカウンタ入替処理を説明するフローチャートである。
【０２４７】
タイマ・カウンタ６００は、アクセスカウンタ入替処理割込タイミング６１０にしたがって、アクセス階層化カウンタ入替制御部１３１２に、処理の開始を通知する割り込みを発生させる。
【０２４８】
アクセス階層化カウンタ入替制御部１３１２は、タイマ・カウンタ６００からの割り込みを受け付けると（ステップＳ７００）、処理を開始する。
【０２４９】
アクセス階層化カウンタ入替制御部１３１２は、上位階層サーバアクセスカウンタ１４４０を参照し、各上位階層ブロックのアクセス数を取得する（ステップＳ７０１）。
【０２５０】
アクセス階層化カウンタ入替制御部１３１２は、上位階層サーバアクセスカウンタ１４４０から取得された各上位階層ブロックのアクセス数に基づいて、下位階層サーバアクセスカウンタ１４３０にて管理する上位階層ブロック、すなわち、対象上位階層ブロックを決定する（ステップＳ７０２）。
【０２５１】
例えば、アクセス階層化カウンタ入替制御部１３１２は、上位階層ブロックのリード回数及びライト回数の合計値が大きい順に、下位階層アクセスカウンタエントリ最大数１４００の範囲内で対象上位階層ブロックを決定する。
【０２５２】
なお、前述した判定方法は一例であって、本発明はこれに限定されない。例えば、リード回数が大きい順に対象上位階層ブロックが決定されてもよい。
【０２５３】
アクセス階層化カウンタ入替制御部１３１２は、決定された対象上位階層ブロックの情報に基づいて、下位階層サーバアクセスカウンタ１４３０を更新することによって、対象上位階層ブロックを入れ替える（ステップＳ７０３）。その後、アクセス階層化カウンタ入替制御部１３１２は、処理を終了する。具体的には、以下のような処理が実行される。
【０２５４】
アクセス階層化カウンタ入替制御部１３１２は、対象上位階層ブロックから除外される上位階層ブロック、すなわち、下位階層サーバアクセスカウンタ１４３０から削除される上位階層ブロックを特定する。さらに、アクセス階層化カウンタ入替制御部１３１２は、削除される上位階層ブロックのエントリのデータ有効ビット１４３２に「０」を設定する。なお、削除される上位ブロックの特定方法は、ステップＳ４０５と同一の方法である。
【０２５５】
アクセス階層化カウンタ入替制御部１３１２は、ステップＳ７０２において決定された対象上位階層ブロックのうち、下位階層サーバアクセスカウンタ１４３０に未登録の対象上位階層ブロックに対応するエントリを、当該下位階層サーバアクセスカウンタ１４３０に登録する。
【０２５６】
より具体的には、アクセス階層化カウンタ入替制御部１３１２は、データ有効ビット１４３２が「０」のエントリの上位階層ブロックアドレス１４３１に未登録の対象上位階層ブロックのアドレスを設定する。さらに、アクセス階層化カウンタ入替制御部１３１２は、当該上位階層ブロックを下位階層ブロック単位に分割し、各下位階層ブロックのアドレスを当該エントリの下位階層ブロックアドレス１４３３に設定する。さらに、アクセス階層化カウンタ入替制御部１３１２は、当該エントリのリード回数１４３４及びライト回数１４３５に初期値を設定する。
【０２５７】
初期値は、例えば、リード回数１４３４及びライト回数１４３５のそれぞれに「０」を設定してもよいし、下式（５）及び（６）に基づいて算出された値を設定してもよい。
【０２５８】
なお、式（５）のリード回数、上位階層ブロックサイズ、及び下位階層ブロックサイズには、リード回数１４４２の値、上位階層ブロックサイズ１４２０の値、及び下位階層ブロックサイズ１４１０の値が代入される。また、式（６）のライト回数、上位階層ブロックサイズ、及び下位階層ブロックサイズには、ライト回数１４４３の値、上位階層ブロックサイズ１４２０の値、及び下位階層ブロックサイズ１４１０の値が代入される。
【０２５９】
【数５】
2015075818.tif 000007
【０２６０】
【数６】
2015075818.tif 000008
【０２６１】
その後、アクセス階層化カウンタ入替制御部１３１２は、下位階層サーバアクセスカウンタ１４３０に新たに登録された対象上位階層ブロックに対応するエントリのデータ有効ビット１４３２に「１」を設定する。
【０２６２】
以上が、ステップＳ７０３の処理の説明である。
【０２６３】
実施例２のキャッシュデータ入れ替え処理は、図１１に示す実施例１の処理と同一のものであるため説明を省略する。
【０２６４】
図１６は、本発明の実施例２におけるキャッシュドライバ２１０が実行する初期化処理を説明するフローチャートである。サーバアクセス階層化管理情報１３１５を初期化する処理以外の処理は、実施例１と同一の処理である。
【０２６５】
キャッシュドライバ２１０は、管理者から設定情報の入力を受け付けると（ステップＳ８００）、処理を開始する。
【０２６６】
設定情報には、下位階層サーバアクセスカウンタ１４３０のエントリ数、下位階層ブロックのサイズ、上位階層ブロックのサイズ、キャッシュメモリシステム１２０のキャッシュ容量、キャッシュメモリシステム１２０におけるキャッシュ領域のアドレス範囲、共有ストレージシステム１３０の記憶領域のアドレス範囲、アクセスカウンタ入替処理の実行間隔、及びキャッシュデータ入替処理の実行間隔等が含まれる。
【０２６７】
なお、管理者は、サーバモジュール１１０に対して直接、設定情報を入力してもよいし、管理サーバ（図示省略）を用いて、設定を入力してもよい。
【０２６８】
キャッシュドライバ２１０は、設定情報に基づいて、サーバアクセス階層化管理情報１３１５を初期化する（ステップＳ８０１）。具体的には、以下のような処理が実行される。
【０２６９】
キャッシュドライバ２１０は、下位階層アクセスカウンタエントリ最大数１４００に設定情報に含まれる下位階層サーバアクセスカウンタ１４３０のエントリ数を設定する。キャッシュドライバ２１０は、下位階層ブロックサイズ１４１０及び上位階層ブロックサイズ１４２０のそれぞれに、設定情報に含まれる下位階層ブロックのサイズ及び上位階層ブロックのサイズを設定する。
【０２７０】
キャッシュドライバ２１０は、下位階層サーバアクセスカウンタ１４３０に下位階層アクセスカウンタエントリ最大数１４００に数だけエントリを生成し、生成されたエントリのデータ有効ビット１４３２を「０」に設定する。
【０２７１】
キャッシュドライバ２１０は、上位階層ブロックのサイズ、共有ストレージシステム１３０の記憶領域のアドレス範囲に基づいて、上位階層サーバアクセスカウンタ１４４０の上位階層ブロックアドレス１４４１に、上位階層ブロックサイズ毎のアドレスが設定されるエントリを生成する。また、キャッシュドライバ２１０は、生成されたエントリのリード回数１４４２及びライト回数１４４３に「０」を設定する。
【０２７２】
以上が、ステップＳ８０１の処理の説明である。
【０２７３】
次に、キャッシュドライバ２１０は、キャッシュ管理情報２１６を初期化する（ステップＳ８０２）。具体的には、以下のような処理が実行される。
【０２７４】
キャッシュドライバ２１０は、キャッシュエントリ最大数４００に、下式（７）を用いて算出される値を設定する。なお、式（７）の下位階層ブロックサイズには、下位階層ブロックサイズ１４１０の値が代入される。また、式（７）のキャッシュメモリシステムのキャッシュ容量には、設定情報に含まれるキャッシュメモリシステム１２０のキャッシュ容量が代入される。
【０２７５】
【数７】
2015075818.tif 000009
【０２７６】
キャッシュドライバ２１０は、下位階層ブロックのサイズ、キャッシュメモリシステム１２０の記憶領域のアドレス範囲に基づいて、キャッシュ対応テーブル４１０のキャッシュメモリアドレス４１１に、下位階層ブロックサイズ毎のアドレスが設定されたエントリを生成する。また、キャッシュドライバ２１０は、生成されたエントリのキャッシュ有効ビット４１３に「０」を設定する。
【０２７７】
以上が、ステップＳ８０２の処理の説明である。
【０２７８】
キャッシュドライバ２１０は、タイマ２１７を初期化し（ステップＳ８０３）、処理を終了する。
【０２７９】
具体的には、キャッシュドライバ２１０は、アクセスカウンタ入替処理割込タイミング６１０及びキャッシュデータ入替処理割込タイミング６２０に、設定情報に含まれるアクセスカウンタ入替処理の実行間隔及びキャッシュデータ入替処理の実行間隔を設定する。
【０２８０】
実施例２では、キャッシュドライバ２１０は、共有ストレージシステム１３０の全記憶領域については上位階層ブロック単位にアクセス数を管理し、一部の上位階層ブロックについてのみ、下位階層ブロック単位のアクセス数を管理する。したがって、実施例１と同様に、サーバモジュール１１０のメモリ１１２の使用量を削減できる。また、サーバモジュール１１０は、キャッシュ効率が高いブロックに対するキャッシュ制御を実現することができる。
【実施例３】
【０２８１】
次に、本発明の実施例３について説明する。
【０２８２】
実施例３では、サーバモジュール１１０が、共有ストレージシステム１３０の一部の記憶領域のブロック単位のアクセス数を管理するためのアクセス管理情報（アクセスカウンタ）を有する。
【０２８３】
サーバモジュール１１０のキャッシュドライバ２１０は、時分割で、アクセス管理情報を用いてブロック単位のアクセス数を管理するブロックグループを決定する。また、サーバモジュール１１０のキャッシュドライバ２１０は、決定されたブロックグループを構成するブロック毎のアクセス数を管理する。
【０２８４】
これによって、アクセス数を保持するために必要なサーバ側のメインメモリの記憶容量の削減することできる。
【０２８５】
以下、実施例１との差異を中心に説明する。なお、同一の符号を付した構成又は処理は、実施例１と同一の構成又は同一の処理であることを示す。
【０２８６】
実施例３における計算機システムの構成、及び計算機システムのハードウェア構成は実施例１と同一であるため説明を省略する。
【０２８７】
図１７は、本発明の実施例３における計算機システムのソフトウェア構成の一例を示す説明図である。
【０２８８】
実施例３では、キャッシュドライバ２１０の一部の構成が異なる。具体的には、実施例３のキャッシュドライバ２１０は、サーバアクセス計測部２１１、アクセスカウンタ入替制御部２１２、キャッシュデータ入替制御部２１４の代わりに、サーバアクセス時分割計測部１７１１、アクセス時分割カウンタ入替制御部１７１２、キャッシュデータ時分割入替制御部１７１４を含む。また、実施例３のキャッシュドライバ２１０は、サーバアクセス管理情報２１５の代わりに、サーバアクセス時分割管理情報１７１５を保持する。その他の構成は実施例１と同一である。
【０２８９】
また、実施例３では、共有ストレージシステム１３０は、アクセス数を管理する必要がないため、実施例３のストレージ制御部２５０は、ストレージアクセス計測部２５１及びストレージアクセス管理情報２５２を有さない。
【０２９０】
図１８は、本発明の実施例３におけるサーバアクセス時分割管理情報１７１５の一例を示す説明図である。
【０２９１】
サーバアクセス時分割管理情報１７１５は、ブロックサイズ１８１０、ブロックグループ数１８２０、サーバ時分割アクセスカウンタ１８３０、及び対象ブロックグループ１８４０を含む。
【０２９２】
ブロックサイズ１８１０は、ブロックのサイズである。ブロックグループ数１８２０は、ブロックグループの数である。ブロックグループ数１８２０は、また、時分割の数にも対応する。
【０２９３】
実施例３では、キャッシュメモリシステム１２０の全記憶領域がブロックグループ数１８２０にしたがって分割される。図１８に示す例では、共有ストレージシステム１３０の全記憶領域が四つのブロックグループに分割され、所定の時間周期毎に、各ブロックグループのアクセス数が管理される。
【０２９４】
本実施例では、共有ストレージシステム１３０の全記憶領域のアドレスを、ブロックサイズ１８１０で除算することによって算出される余りをブロックグループ数１８２０で分類することによって、ブロックグループを構成するものとする。図１８に示す例では、余りが「０」のブロックグループ、余りが「１」のブロックグループ、余りが「２」のブロックグループ、余りが「３」のブロックグループの四つのブロックグループが存在することとなる。
【０２９５】
以下の説明では、現在、アクセス数が管理されるブロックグループを対象ブロックグループとも記載する。
【０２９６】
実施例３では、キャッシュメモリシステム１２０の記憶領域もブロックグループ数１８２０と同一の数だけ分割される。例えば、下式（８）及び下式（９）を用いてキャッシュメモリシステム１２０のキャッシュ領域が分割される。すなわち、各ブロックグループには、式（８）の値から式（９）の値までの範囲のキャッシュメモリシステム１２０のキャッシュ領域が対応付けられる。
【０２９７】
なお、式（８）及び式（９）のキャッシュエントリ最大数、及び対象ブロックグループには、キャッシュエントリ最大数４００の値、及び対象ブロックグループ１８４０の値が代入される。
【０２９８】
【数８】
2015075818.tif 000010
【０２９９】
【数９】
2015075818.tif 000011
【０３００】
サーバ時分割アクセスカウンタ１８３０は、現在、アクセス数が管理されるブロックグループ、すなわち、対象ブロックグループを構成するブロック毎のアクセス数を管理するための情報である。サーバ時分割アクセスカウンタ１８３０は、共有ストレージアドレス１８３１、リード回数１８３２、及びライト回数１８３３を含む。
【０３０１】
共有ストレージアドレス１８３１は、ブロックグループの先頭アドレスである。
【０３０２】
本実施例では、前述したように、共有ストレージシステム１３０の全記憶領域のアドレスをブロックサイズ１８１０で除算した余りに基づいて、ブロックが分類される。したがって、アドレスが連続する複数のブロックは、それぞれ異なるブロックグループに所属する。図１８に示す例では、余りが「０」のアドレスに対応するブロックの次にブロックは、余りが「１」のブロックグループに所属する。
【０３０３】
そこで、本実施例では、時間周期毎に、サーバ時分割アクセスカウンタ１８３０において管理するブロックグループを変更する。
【０３０４】
したがって、サーバ時分割アクセスカウンタ１８３０には、下式（１０）を用いて算出されるアドレス範囲毎に一つのエントリが登録される。なお、式（１０）のブロックサイズ、及びブロックグループ数には、ブロックサイズ１８１０の値、及びブロックグループ数１８２０の値が代入される。
【０３０５】
【数１０】
2015075818.tif 000012
【０３０６】
リード回数１８３２は、共有ストレージアドレス１８３１に対応するブロックに対するリード処理の回数である。ライト回数１８３３は、共有ストレージアドレス１８３１に対応するブロックに対するライト処理の回数である。
【０３０７】
対象ブロックグループ１８４０は、対象ブロックグループを識別するための識別番号である。
【０３０８】
本実施例では、所定の時間周期毎に、対象ブロックグループを変更する。
【０３０９】
例えば、共有ストレージシステム１３０の全記憶領域が、ブロックグループＡとブロックグループＢとの二つのブロックグループに分割された場合、キャッシュドライバ２１０は、ある時間にブロックグループＡを対象ブロックグループとしてブロック単位のアクセス数を管理する。所定の時間周期が経過した後、キャッシュドライバ２１０は、対象グループをブロックグループＢに変更し、当該ブロックグループＢのブロック単位のアクセス数を管理する。
【０３１０】
また、ブロックグループＡには「０」から「９９９９」までの範囲のキャッシュメモリシステム１２０の記憶領域が対応付けられ、ブロックグループＢには「１００００」から「１９９９９」までの範囲のキャッシュメモリシステム１２０の記憶領域が対応付けられる。
【０３１１】
以下、実施例３におけるキャッシュドライバ２１０が実行する処理について説明する。
【０３１２】
図１９は、本発明の実施例３におけるサーバアクセス時分割計測部１７１１が実行するアクセス数計測処理を説明するフローチャートである。
【０３１３】
アプリケーション２０１からＩ／Ｏ要求が発行されると、まず、キャッシュドライバ２１０のサーバアクセス時分割計測部１７１１に当該Ｉ／Ｏ要求が入力される。このとき、サーバアクセス時分割計測部１７１１は、アクセス数計測処理を開始する。
【０３１４】
サーバアクセス時分割計測部１７１１は、Ｉ／Ｏ要求の宛先アドレスに対応するブロックが含まれるブロックグループを特定する（ステップＳ９００）。
【０３１５】
本実施例では、サーバアクセス時分割計測部１７１１は、下式（１１）に基づいて、Ｉ／Ｏ要求の宛先アドレスが含まれるブロックグループを特定する。なお、式（１１）のブロックサイズ、及びブロックグループ数には、ブロックサイズ１８１０の値、及びブロックグループ数１８２０の値が代入される。
【０３１６】
【数１１】
2015075818.tif 000013
【０３１７】
サーバアクセス時分割計測部１７１１は、特定されたブロックグループが、対象ブロックグループであるか否かを判定する（ステップＳ９０１）。
【０３１８】
具体的には、サーバアクセス時分割計測部１７１１は、式（１１）の値が時分割タイミング１８１４と一致するか否かを判定する。式（１１）の値が時分割タイミング１８１４と一致する場合、特定されたブロックグループが、管理対象のブロックグループに一致すると判定される。
【０３１９】
特定されたブロックグループが対象ブロックグループではないと判定された場合、サーバアクセス時分割計測部１７１１は、処理を終了する。これは、Ｉ／Ｏ要求の宛先アドレスに対応するブロックは、現在、管理対象でないためである。
【０３２０】
特定されたブロックグループが対象ブロックグループにあると判定された場合、サーバアクセス時分割計測部１７１１は、サーバ時分割アクセスカウンタ１８３０を参照し、Ｉ／Ｏ要求の宛先アドレスに一致するエントリを検索する（ステップＳ９０２）。
【０３２１】
具体的には、サーバアクセス時分割計測部１７１１は、共有ストレージアドレス１８３１がＩ／Ｏ要求の宛先アドレスに一致するエントリを検索する。
【０３２２】
サーバアクセス時分割計測部１７１１は、Ｉ／Ｏ要求の種別に基づいて、当該エントリのリード回数１８３４又はライト回数１８３５の値を「１」加算し（ステップＳ９０３）、処理を終了する。ステップＳ９０３の処理は、ステップＳ１０２と同一の処理である。
【０３２３】
実施例３のアクセス振り分け処理は、図８に示す実施例１の処理と同一であるため説明を省略する。
【０３２４】
図２０は、本発明の実施例３におけるアクセス時分割カウンタ入替制御部１７１２が実行するアクセスカウンタ入替処理を説明するフローチャートである。
【０３２５】
実施例３のアクセスカウンタ入替処理では、所定の周期毎に、対象ブロックグループを変更する。
【０３２６】
タイマ・カウンタ６００は、アクセスカウンタ入替処理割込タイミング６１０にしたがって、アクセス時分割カウンタ入替制御部１７１２に、処理の開始を通知する割り込みを発生させる。
【０３２７】
アクセス時分割カウンタ入替制御部１７１２は、タイマ・カウンタ６００からの割り込みを受け付けると（ステップＳ１０００）、処理を開始する。
【０３２８】
アクセス時分割カウンタ入替制御部１７１２は、サーバ時分割アクセスカウンタ１８３０を初期化する（ステップＳ１００１）。具体的には、アクセス時分割カウンタ入替制御部１７１２は、サーバ時分割アクセスカウンタ１８３０の全てエントリのリード回数１８３２及びライト回数１８３３に「０」を設定する。
【０３２９】
アクセス時分割カウンタ入替制御部１７１２は、対象ブロックグループ１８４０を更新することによって、アクセスカウンタを割り当てるブロックグループを切り替える（ステップＳ１００２）。具体的には、以下のような処理が実行される。
【０３３０】
アクセス時分割カウンタ入替制御部１７１２は、対象ブロックグループ１８４０の値がブロックグループ数１８２０の値から「１」減算した値に等しい場合、対象ブロックグループ１８４０に「０」を設定し、対象ブロックグループ１８４０の値がブロックグループ数１８２０の値から「１」減算した値より小さい場合、対象ブロックグループ１８４０の値を「１」加算する。
【０３３１】
前述した処理によって、所定の周期毎に、サーバ時分割アクセスカウンタ１８３０がクリアされ、さらに、当該サーバ時分割アクセスカウンタ１８３０を割り当てるブロックグループが変更される。
【０３３２】
図２１は、本発明の実施例３におけるキャッシュデータ時分割入替制御部１７１４が実行するキャッシュデータ入替処理を説明するフローチャートである。
【０３３３】
実施例３のキャッシュデータ入替処理では、キャッシュデータ時分割入替制御部１７１４は、キャッシュメモリシステム１２０のキャッシュ領域をブロックグループの数だけ分割し、各ブロックグループに対応付けられるキャッシュ領域に対してキャッシュ制御を行う。
【０３３４】
タイマ・カウンタ６００は、キャッシュデータ入替処理割込タイミング６２０にしたがって、キャッシュデータ時分割入替制御部１７１４に、処理の開始を通知する割り込みを発生させる。
【０３３５】
キャッシュデータ時分割入替制御部１７１４は、タイマ・カウンタ６００からの割り込みを受けると、処理を開始する（ステップＳ１１００）。
【０３３６】
キャッシュデータ時分割入替制御部１７１４は、サーバ時分割アクセスカウンタ１８３０に基づいて、キャッシュメモリシステム１２０に格納するブロックデータを決定する（ステップＳ１１０１）。具体的には以下のような処理が実行される。
【０３３７】
キャッシュデータ時分割入替制御部１７１４は、サーバ時分割アクセスカウンタ１８３０を参照し、共有ストレージアドレス１８３１毎にリード回数１８３２及びライト回数１８３３を取得する。すなわち、ブロック毎のリード回数及びライト回数が取得される。
【０３３８】
キャッシュデータ時分割入替制御部１７１４は、各ブロックのリード回数及びライト回数に基づいて、下式（１２）の値を超えない範囲で、キャッシュメモリシステム１２０に配置するデータを決定する。なお、式（１２）のキャッシュエントリ最大数、及びブロックグループ数には、キャッシュエントリ最大数４００の値、及びブロックグループ数１８２０の値が代入される。
【０３３９】
【数１２】
2015075818.tif 000014
【０３４０】
式（１２）が示す範囲は、対象ブロックグループに対応付けられるキャッシュ領域に格納可能なブロックの数を示す。
【０３４１】
以上がステップＳ１００１の処理の説明である。
【０３４２】
次に、キャッシュデータ時分割入替制御部１７１４は、ステップＳ１１０１の処理結果に基づいて、対象ブロックグループに対応付けられるキャッシュ領域から追い出されるブロックデータに対応するエントリを更新する（ステップＳ１１０２）。ステップＳ５０２と同一の処理である。
【０３４３】
以上の処理によって、対象ブロックグループに対応付けられるキャッシュ領域のデータのみを入れ替えることが可能となる。
【０３４４】
以上がステップＳ１１０２の処理の説明である。
【０３４５】
次に、キャッシュデータ時分割入替制御部１７１４は、対象ブロックグループに対応付けられるキャッシュ領域に、新たなブロックデータを格納し（ステップＳ１１０３）、処理を終了する。具体的には、以下のような処理が実行される。
【０３４６】
キャッシュデータ時分割入替制御部１７１４は、キャッシュメモリアドレス４１１がブロックグループに対応付けられるキャッシュ領域内のアドレスであり、かつ、キャッシュ有効ビット４１３が「０」であるエントリの共有ストレージアドレス４１２に、新たなブロックデータのアドレスを登録する。
【０３４７】
キャッシュデータ入替制御部２１４は、当該エントリの共有ストレージアドレス４１２に対応する記憶領域（ブロック）からブロックデータを読み出し、キャッシュメモリアドレス４１１に対応するキャッシュ領域に読み出されたデータを格納する。また、キャッシュデータ入替制御部２１４は、当該エントリのキャッシュ有効ビット４１３に「１」を設定する。
【０３４８】
以上がステップＳ１１０３の処理の説明である。
【０３４９】
図２２は、本発明の実施例３におけるキャッシュドライバ２１０が実行する初期化処理を説明するフローチャートである。サーバアクセス時分割管理情報１７１５を初期化する処理以外の処理は、実施例１と同一の処理である。
【０３５０】
キャッシュドライバ２１０は、管理者から設定情報の入力を受け付けると（ステップＳ１２００）、処理を開始する。
【０３５１】
設定情報には、ブロックサイズ、ブロックグループの数、キャッシュメモリシステム１２０のキャッシュ容量、キャッシュメモリシステム１２０におけるキャッシュ領域のアドレス範囲、アクセスカウンタ入替処理の実行間隔、及びキャッシュデータ入替処理の実行間隔等が含まれる。
【０３５２】
なお、管理者は、サーバモジュール１１０に対して直接、設定情報を入力してもよいし、管理サーバ（図示省略）を用いて、設定を入力してもよい。
【０３５３】
キャッシュドライバ２１０は、設定情報に基づいて、サーバアクセス時分割管理情報１７１５を初期化する（ステップＳ１２０１）。具体的には、以下のような処理が実行される。
【０３５４】
キャッシュドライバ２１０は、ブロックサイズ１８１０及びブロックグループ数１８２０に、設定情報に含まれるブロックサイズ及びブロックグループの数をそれぞれ設定する。
【０３５５】
キャッシュドライバ２１０は、サーバ時分割アクセスカウンタ１８３０に、共有ストレージアドレス１８３１に、式（１０）を用いて算出されるサイズ毎のアドレスが設定されるエントリを生成する。また、キャッシュドライバ２１０は、生成されたエントリのリード回数１８３２及びライト回数１８３３に「０」を設定する。
【０３５６】
キャッシュドライバ２１０は、対象ブロックグループ１８４０に「０」を設定する。
【０３５７】
以上が、ステップＳ１２０１の処理の説明である。
【０３５８】
次に、キャッシュドライバ２１０は、キャッシュ管理情報２１６を初期化する（ステップＳ１２０２）。具体的には、以下のような処理が実行される。
【０３５９】
キャッシュドライバ２１０は、キャッシュエントリ最大数４００に式（１３）を用いて算出される値を設定する。なお、式（１３）のブロックサイズには、ブロックサイズ１８１０の値が代入される。また、式（１３）のキャッシュメモリシステムのキャッシュ容量には、設定情報に含まれるキャッシュメモリシステム１２０のキャッシュ容量が代入される。
【０３６０】
【数１３】
2015075818.tif 000015
【０３６１】
キャッシュドライバ２１０は、ブロックのサイズ、キャッシュメモリシステム１２０の記憶領域のアドレス範囲に基づいて、キャッシュ対応テーブル４１０のキャッシュメモリアドレス４１１に、ブロックサイズ毎のアドレスが設定されたエントリを生成する。また、キャッシュドライバ２１０は、生成されたエントリのキャッシュ有効ビット４１３に「０」を設定する。
【０３６２】
キャッシュドライバ２１０は、タイマ２１７を初期化し（ステップＳ１２０３）、処理を終了する。
【０３６３】
具体的には、キャッシュドライバ２１０は、アクセスカウンタ入替処理割込タイミング６１０及びキャッシュデータ入替処理割込タイミング６２０に、設定情報に含まれるアクセスカウンタ入替処理の実行間隔及びキャッシュデータ入替処理の実行間隔を設定する。
【０３６４】
以上説明したように、実施例３によれば、サーバモジュール１１０は、共有ストレージシステム１３０の記憶領域を複数のブロックグループに分割し、一つのブロックグループについてのみブロック単位のアクセス数を管理する。これによって、サーバモジュール１１０のメモリ１１２の使用量を削減できる。
【０３６５】
また、サーバモジュール１１０は、周期的に、対象ブロックグループを変更することによって、対象ブロックグループを構成するブロックに対するキャッシュ制御を実現することができる。
【０３６６】
また、サーバモジュール１１０は、対象ブロックグループに対応付けられるキャッシュ領域に対してキャッシュ制御を行うため、各ブロックグループに対して、キャッシュ効率が高いキャッシュ制御を実現できる。
【０３６７】
実施例３も実施例１と同様に、一部の記憶領域（対象ブロックグループ）についてのみブロック単位のアクセス数を管理する。これによって、サーバモジュール１１０のメモリ１１２の使用量を削減できる。また、サーバモジュール１１０は、キャッシュ効率が高いブロックに対するキャッシュ制御を実現することができる。
【実施例４】
【０３６８】
次に、本発明の実施例４について説明する。
【０３６９】
実施例４では、サーバモジュール１１０が、共有ストレージシステム１３０の一部の記憶領域のブロック単位のアクセス数を管理するためのアクセス管理情報（アクセスカウンタ）を有する。
【０３７０】
サーバモジュール１１０のキャッシュドライバ２１０は、キャッシュアルゴリズムに基づいて、アクセス管理情報を用いてブロック単位のアクセス数を管理するブロックを決定する。
【０３７１】
本実施例では、キャッシュアルゴリズムとして、ＬＲＵ方式を用いるものとする。また、ＬＲＵ方式を実現するために連結リストを用いるものとする。連結リストは、キャッシュ対応テーブル２４５０において管理される一部のブロックの連結リストであるため、メモリ１１２の使用量は十分小さいものとなる。
【０３７２】
これによって、アクセス数を保持するために必要なサーバ側のメインメモリの記憶容量の削減することできる。
【０３７３】
以下、実施例１との差異を中心に説明する。なお、同一の符号を付した構成又は処理は、実施例１と同一の構成又は同一の処理であることを示す。
【０３７４】
実施例４における計算機システムの構成、及び計算機システムのハードウェア構成は実施例１と同一であるため説明を省略する。
【０３７５】
図２３は、本発明の実施例４における計算機システムのソフトウェア構成の一例を示す説明図である。
【０３７６】
実施例４のキャッシュドライバ２１０は、アクセス振り分け部２１３、キャッシュデータ入替制御部２１４、及びタイマ２１７を含む。また、実施例４のキャッシュドライバ２１０は、キャッシュ管理情報２３１６を保持する。
【０３７７】
実施例５のタイマ２１７は、アクセスカウンタ入替処理割込タイミング６１０を含まない。ＬＲＵ方式では、アクセス管理情報に新たなブロックを追加できない場合、すなわち、アクセスカウンタに空きがない場合に、ブロックが入れ替えられるためである。
【０３７８】
また、実施例４の共有ストレージシステム１３０は、アクセス数を管理する必要がないため、実施例４のストレージ制御部２５０は、ストレージアクセス計測部２５１及びストレージアクセス管理情報２５２を有さない。
【０３７９】
図２４Ａ及び図２４Ｂは、本発明の実施例４におけるキャッシュ管理情報２３１６の一例を示す説明図である。
【０３８０】
キャッシュ管理情報２３１６は、アクセスカウンタエントリ最大数２４００、ブロックサイズ２４１０、ピン止め制御キャッシュエントリ最大数２４２０、ピン止め用キャッシュアドレスリスト２４３０、先頭ポインタ２４４０、キャッシュ対応テーブル２４５０を含む。
【０３８１】
アクセスカウンタエントリ最大数２４００は、キャッシュ対応テーブル２４５０に登録可能なエントリ数である。すなわち、アクセスカウンタエントリ最大数２４００は、キャッシュドライバ２１０が管理可能なブロックの数を示す。ブロックサイズ２４１０は、ブロックのサイズである。
【０３８２】
ピン止め制御キャッシュエントリ最大数２４２０は、ピン止め方式に基づいてキャッシュ制御を行うブロックデータとして、キャッシュ対応テーブル２４５０に登録可能なエントリ数である。ピン止め用キャッシュアドレスリスト２４３０は、ピン止め方式に基づいてキャッシュ制御を行うデータを格納するキャッシュ領域のアドレスリストである。先頭ポインタ２４４０は、連結リストの先頭へのポインタである。
【０３８３】
キャッシュ対応テーブル２４５０は、ブロック毎のアクセス数を管理するための情報である。キャッシュ対応テーブル２４５０は、キャッシュメモリアドレス２４５１、共有ストレージアドレス２４５２、エントリ有効ビット２４５３、キャッシュ有効ビット２４５４、リード回数２４５５、ライト回数２４５６、次エントリポインタ２４５７、及び前エントリポインタ２４５８を含む。なお、キャッシュ対応テーブル２４５０に格納されるエントリは、連結リストによって管理される。
【０３８４】
キャッシュメモリアドレス２４５１は、キャッシュメモリシステム１２０のキャッシュ領域の先頭アドレスである。
【０３８５】
共有ストレージアドレス２４５２は、キャッシュメモリアドレス２４５１に対応するキャッシュ領域に格納されたデータの共有ストレージシステム１３０における格納位置、すなわち、ブロックの先頭アドレスである。
【０３８６】
エントリ有効ビット２４５３は、キャッシュメモリアドレス２４５１に対応するキャッシュ領域のエントリが有効であるか否かを示すビットである。本実施例では、エントリ有効ビット２４５３が「１」の場合、エントリが有効であることを示し、エントリ有効ビット２４５３が「０」の場合、エントリが無効であることを示す。
【０３８７】
キャッシュ有効ビット２４５４は、キャッシュメモリアドレス２４５１に対応するキャッシュ領域に読み出し可能なデータが格納されているか否かを示すビットである。本実施例では、キャッシュ有効ビット２４５４が「１」の場合、キャッシュ領域に読み出し可能なデータが格納されていることを示し、キャッシュ有効ビット２４５４が「０」の場合、キャッシュ領域に読み出し可能なデータが格納されていないことを示す。
【０３８８】
リード回数２４５５は、共有ストレージアドレス２４５２に対応するブロックに対するリード処理の回数である。ライト回数２４５６は、共有ストレージアドレス２４５２に対応するブロックに対するライト処理の回数である。
【０３８９】
次エントリポインタ２４５７は、連結リストにおける次のエントリを示すポインタである。前エントリポインタ２４５８は、連結リストにおける前のエントリを示すポインタである。
【０３９０】
実施例４では、ＬＲＵ方式等のキャッシュ制御アルゴリズムに基づいて、アクセス数を管理するブロックの入れ替えを制御する。これによって、アクセス数を管理する管理情報のサイズを小さくできるため、サーバモジュール１１０のメモリ１１２の使用量を削減できる。
【０３９１】
具体的には、キャッシュドライバ２１０は、キャッシュ対応テーブル２４５０に、キャッシュメモリシステム１２０の記憶容量に格納可能なブロックの数より数倍程度大きい数のブロックを管理するためのキャッシュ対応テーブル２４５０（アクセスカウンタ）を保持する。キャッシュドライバ２１０は、連結リストを用いたＬＲＵ方式に基づいて、キャッシュ対応テーブル２４５０において管理されるブロックを入れ替える。
【０３９２】
したがって、共有ストレージシステム１３０の一つのブロックに対し、以下のような三つの状態を取り得る。
【０３９３】
（状態１）キャッシュメモリシステム１２０のキャッシュ領域にデータが格納され、かつ、当該ブロックデータのアクセス数がサーバモジュール１１０上で管理されている状態。
【０３９４】
（状態２）ブロックデータのアクセス数はサーバモジュール１１０上で管理されているが、キャッシュメモリシステム１２０のキャッシュ領域に当該ブロックデータが格納されていない状態。
【０３９５】
（状態３）キャッシュメモリシステム１２０のキャッシュ領域にブロックデータが格納されてなく、かつ、当該ブロックデータのアクセス数がサーバモジュール１１０上で管理されていない状態。
【０３９６】
なお、（状態１）は、エントリ有効ビット２４５３が「１」、かつ、キャッシュ有効ビット２４５４が「１」の状態に対応し、（状態２）は、エントリ有効ビット２４５３が「１」、かつ、キャッシュ有効ビット２４５４が「０」の状態に対応する。（状態３）は、エントリ有効ビット２４５３が「０」、かつ、キャッシュ有効ビット２４５４が「０」の状態、又は、キャッシュ対応テーブル２４５０にブロックに対応するエントリが存在しない状態に対応する。
【０３９７】
前述した、（状態１）、（状態２）及び（状態３）の間の状態の遷移、すなわち、サーバモジュール１１０がアクセス数を管理するブロックデータの入れ替えは、ＬＲＵ方式に基づいて制御される。
【０３９８】
以下の説明では、キャッシュ対応テーブル２４５０においてブロックのアクセス数が管理されているエントリが存在することをアクセスカウンタヒットと記載し、キャッシュ対応テーブル２４５０においてブロックのアクセス数が管理されているエントリが存在しないことをアクセスカウンタミスヒットとも記載する。
【０３９９】
なお、本実施例は、ＬＲＵ方式を用いて、アクセス数を管理するブロックデータの入れ替えを制御しているが、他のキャッシュアルゴリズムを用いてもよい。また、キャッシュ対応テーブル２４５０のデータ構造として連結リストを用いているが、適用するキャッシュアルゴリズムに応じてデータ構造を変更してもよい。
【０４００】
以下、実施例４におけるキャッシュドライバ２１０が実行する処理について説明する。
【０４０１】
図２５は、本発明の実施例４におけるアクセス振り分け部２１３が実行するアクセス振り分け処理を説明するフローチャートである。
【０４０２】
アプリケーション２０１からＩ／Ｏ要求が発行されると、まず、キャッシュドライバ２１０のアクセス振り分け部２１３に当該Ｉ／Ｏ要求が入力される。このとき、アクセス振り分け部２１３は、アクセス振り分け処理を開始する。
【０４０３】
まず、アクセス振り分け部２１３は、キャッシュ管理情報２３１６のキャッシュ対応テーブル２４５０を参照し、Ｉ／Ｏ要求に対応するエントリを検索する（ステップＳ１３００）。
【０４０４】
具体的には、アクセス振り分け部２１３は、共有ストレージアドレス２４５２がＩ／Ｏ要求の宛先アドレスに一致するエントリを検索する。
【０４０５】
アクセス振り分け部２１３は、検索結果に基づいて、キャッシュ対応テーブル２４５０にＩ／Ｏ要求に対応するエントリが存在するか否かを判定する（ステップＳ１３０１）。
【０４０６】
キャッシュ対応テーブル２４５０にＩ／Ｏ要求に対応するエントリが存在しないと判定された場合、アクセス振り分け部２１３は、キャッシュミスヒットかつアクセスカウンタミスヒット時のＩ／Ｏ処理を実行し（ステップＳ１３０６）、処理を終了する。キャッシュミスヒットかつアクセスカウンタミスヒット時のＩ／Ｏ処理については、図２８を用いて後述する。
【０４０７】
キャッシュ対応テーブル２４５０にＩ／Ｏ要求に対応するエントリが存在すると判定された場合、アクセス振り分け部２１３は、当該エントリのエントリ有効ビット２４５３が「１」、かつ、キャッシュ有効ビット２４５４が「１」であるか否かを判定する（ステップＳ１３０２）。すなわち、（状態１）のブロックであるか否かが判定される。
【０４０８】
検索されたエントリのエントリ有効ビット２４５３が「１」、かつ、キャッシュ有効ビット２４５４が「１」であると判定された場合、アクセス振り分け部２１３は、キャッシュヒット時のＩ／Ｏ処理を実行し（ステップＳ１３０３）、処理を終了する。キャッシュヒット時のＩ／Ｏ処理については、図２６を用いて後述する。
【０４０９】
エントリのエントリ有効ビット２４５３が「１」、かつ、キャッシュ有効ビット２４５４が「１」でないと判定された場合、アクセス振り分け部２１３は、エントリのエントリ有効ビット２４５３が「１」、かつ、キャッシュ有効ビット２４５４が「０」であるか否かを判定する（ステップＳ１３０４）。すなわち、（状態２）のブロックであるか否かが判定される。
【０４１０】
エントリのエントリ有効ビット２４５３が「１」、かつ、キャッシュ有効ビット２４５４が「０」であると判定された場合、アクセス振り分け部２１３は、キャッシュミスヒットかつアクセスカウンタヒット時のＩ／Ｏ処理を実行し（ステップＳ１３０５）、処理を終了する。キャッシュミスヒットかつアクセスカウンタヒット時のＩ／Ｏ処理については、図２７を用いて後述する。
【０４１１】
エントリのエントリ有効ビット２４５３が「１」、かつ、キャッシュ有効ビット２４５４が「０」でないと判定された場合、アクセス振り分け部２１３は、キャッシュミスヒットかつアクセスカウンタミスヒット時のＩ／Ｏ処理を実行し（ステップＳ１３０６）、処理を終了する。
【０４１２】
図２６は、キャッシュヒット時のアクセス振り分け部２１３が実行するキャッシュヒット時のＩ／Ｏ処理を説明するフローチャートである。
【０４１３】
まず、アクセス振り分け部２１３は、Ｉ／Ｏ要求の種別に基づいて、ステップＳ１３００において検索されたエントリのリード回数２４５５又はライト回数２４５６の値を「１」加算する（ステップＳ１４００）。ステップＳ１４００の処理は、ステップＳ１０２の処理と同一の処理である。
【０４１４】
アクセス振り分け部２１３は、Ｉ／Ｏ要求の種別がリードであるか否かを判定する（ステップＳ１４０１）。
【０４１５】
Ｉ／Ｏ要求の種別がリードであると判定された場合、アクセス振り分け部２１３は、Ｉ／Ｏ要求をキャッシュメモリシステム１２０へのＩ／Ｏ要求（リード要求）に変換し（ステップＳ１４０２）、ステップＳ１４０３に進む。ステップＳ１４０２の処理は、ステップＳ２０３と同一の処理である。
【０４１６】
Ｉ／Ｏ要求の種別がライトであると判定された場合、アクセス振り分け部２１３は、キャッシュメモリシステム１２０へのＩ／Ｏ要求（ライト要求）を生成し（ステップＳ１４０４）、ステップＳ１４０３に進む。ステップＳ１４０３の処理は、ステップＳ２０４の処理と同一の処理である。
【０４１７】
アクセス振り分け部２１３は、検索されたエントリを連結リストの先頭に配置し（ステップＳ１４０３）、処理を終了する。具体的には以下のような処理が実行される。
【０４１８】
アクセス振り分け部２１３は、検索されたエントリ（第１エントリ）の前エントリポインタ２４５８に対応するエントリ（第２エントリ）を検索する。アクセス振り分け部２１３は、第１エントリの次エントリポインタ２４５７に格納されるポインタを、第２エントリの次エントリポインタ２４５７に設定する。
【０４１９】
アクセス振り分け部２１３は、先頭ポインタ２４４０に対応するエントリ（第３エントリ）を検索し、第３エントリの前エントリポインタ２４５８に第１エントリを示すポインタに設定する。
【０４２０】
アクセス振り分け部２１３は、第１エントリの次エントリポインタ２４５７に、第３エントリの次エントリポインタ２４５７に格納されるポインタを設定する。
【０４２１】
アクセス振り分け部２１３は、第１エントリの前エントリポインタ２４５８に、先頭ポインタ２４４０に格納されるポインタを設定する。
【０４２２】
アクセス振り分け部２１３は、先頭ポインタ２４４０に、第１エントリを示すポインタを設定する。
【０４２３】
本実施例では、キャッシュ対応テーブル２４５０のエントリが更新された場合、当該エントリを連結リストの先頭に移動させる。また、エントリを削除する場合には、連結リストの最後尾のエントリが対象となる。以上のような処理によって、キャッシュ対応テーブル２４５０のエントリに対して、ＬＲＵ方式に対応した制御を実現できる。
【０４２４】
図２７は、本発明の実施例４のアクセス振り分け部２１３が実行するキャッシュミスかつアクセスカウンタヒット時のＩ／Ｏ処理を説明するフローチャートである。
【０４２５】
アクセス振り分け部２１３は、Ｉ／Ｏ要求の種別に基づいて、ステップＳ１３００において検索されたエントリのリード回数２４５５又はライト回数２４５６の値を「１」加算する（ステップＳ１５００）。ステップＳ１５００の処理はステップＳ１０２の処理と同一の処理である。
【０４２６】
アクセス振り分け部２１３は、検索されたエントリを連結リストの先頭に配置し（ステップＳ１５０１）、処理を終了する。
【０４２７】
図２８は、本発明の実施例４のアクセス振り分け部２１３が実行するキャッシュミスかつアクセスカウンタミスヒット時のＩ／Ｏ処理を説明するフローチャートである。
【０４２８】
アクセス振り分け部２１３は、Ｉ／Ｏ要求に対応するエントリが存在するか否かを判定する（ステップＳ１６００）。これは、ステップＳ１３０１の判定結果を用いればよい。
【０４２９】
Ｉ／Ｏ要求に対応するエントリが存在すると判定された場合、アクセス振り分け部２１３は、ステップＳ１６０４に進む。
【０４３０】
Ｉ／Ｏ要求に対応するエントリが存在しないと判定された場合、アクセス振り分け部２１３は、キャッシュ対応テーブル２４５０を参照し、エントリ有効ビット２４５３が「０」であるエントリを検索する（ステップＳ１６０１）。
【０４３１】
アクセス振り分け部２１３は、検索結果に基づいて、キャッシュ対応テーブル２４５０にエントリ有効ビット２４５３が「０」であるエントリが存在するか否かを判定する（ステップＳ１６０２）。
【０４３２】
エントリ有効ビット２４５３が「０」であるエントリが存在すると判定された場合、アクセス振り分け部２１３は、エントリを一つ選択し（ステップＳ１６０３）、その後、ステップＳ１６０４に進む。
【０４３３】
エントリ有効ビット２４５３が「０」であるエントリが存在しないと判定された場合、アクセス振り分け部２１３は、キャッシュ対応テーブル２４５０の連結リストの最後尾のエントリを取得し、当該エントリのキャッシュ有効ビット２４５４が「１」であるか否かを判定する（ステップＳ１６０６）。
【０４３４】
連結リストの最後尾のエントリのキャッシュ有効ビット２４５４が「１」でないと判定された場合、アクセス振り分け部２１３は、ステップＳ１６０８に進む。
【０４３５】
連結リストの最後尾のエントリのキャッシュ有効ビット２４５４が「１」であると判定された場合、アクセス振り分け部２１３は、当該エントリのキャッシュメモリアドレス２４５１に格納されるアドレスを、ピン止め用キャッシュアドレスリスト２４３０に登録する（ステップＳ１６０７）。
【０４３６】
アクセス振り分け部２１３は、キャッシュ対応テーブル２４５０の連結リストの最後尾のエントリを初期化し（ステップＳ１６０８）、その後、ステップＳ１６０４に進む。具体的には、アクセス振り分け部２１３は、当該エントリのエントリ有効ビット２４５３、キャッシュ有効ビット２４５４、リード回数２４５５、及びライト回数２４５６のそれぞれに「０」を設定する。
【０４３７】
アクセス振り分け部２１３は、Ｉ／Ｏ要求の対象のブロックに対応するエントリを更新する（ステップＳ１６０４）。ステップＳ１６０４では、分岐によって更新する内容が異なる。具体的には、以下のような処理が実行される。
【０４３８】
ステップＳ１６００の分岐の場合、アクセス振り分け部２１３は、当該エントリのエントリ有効ビット２４５３に「１」を設定する。また、アクセス振り分け部２１３は、Ｉ／Ｏ要求の種別に基づいて、当該エントリのリード回数２４５５又はライト回数２４５６の値を「１」加算する。
【０４３９】
ステップＳ１６０３の分岐の場合、アクセス振り分け部２１３は、選択されたエントリの共有ストレージアドレス２４５２にＩ／Ｏ要求の宛先アドレスを設定し、さらに、エントリ有効ビット２４５３に「１」を設定する。また、アクセス振り分け部２１３は、Ｉ／Ｏ要求の種別に基づいて、当該エントリのリード回数２４５５又はライト回数２４５６の値を「１」加算する。
【０４４０】
ステップＳ１６０８の分岐の場合、アクセス振り分け部２１３は、初期化されたエントリの共有ストレージアドレス２４５２にＩ／Ｏ要求の宛先アドレスを設定し、さらに、エントリ有効ビット２４５３に「１」を設定する。また、アクセス振り分け部２１３は、Ｉ／Ｏ要求の種別に基づいて、当該エントリのリード回数２４５５又はライト回数２４５６の値を「１」加算する。
【０４４１】
以上がステップＳ１６０４の処理の説明である。
【０４４２】
アクセス振り分け部２１３は、ステップＳ１６０４において更新されたエントリを連結リストの先頭に配置し（ステップＳ１６０５）、処理を終了する。
【０４４３】
ステップＳ１６００又はステップＳ１６０８の分岐の場合、ステップＳ１６０５の処理は、ステップＳ１４０３と同様の処理である。
【０４４４】
ステップＳ１６０３の分岐の場合、ステップＳ１６０５では以下のような処理が実行される。
【０４４５】
まず、アクセス振り分け部２１３は、先頭ポインタ２４４０に対応するエントリ（第４エントリ）を検索し、第４エントリの前エントリポインタ２４５８に、更新されたエントリ（第５エントリ）を示すポインタを設定する。
【０４４６】
アクセス振り分け部２１３は、第５エントリの次エントリポインタ２４５７に、第４エントリの次エントリポインタ２４５７に格納されるポインタを設定する。
【０４４７】
アクセス振り分け部２１３は、第５エントリの前エントリポインタ２４５８に、先頭ポインタ２４４０に格納されるポインタを設定する。
【０４４８】
アクセス振り分け部２１３は、先頭ポインタ２４４０に、第５エントリを示すポインタを設定する。
【０４４９】
図２９は、本発明の実施例４のキャッシュデータ入替制御部２１４が実行するキャッシュデータ入替処理を説明するフローチャートである。
【０４５０】
タイマ・カウンタ６００は、キャッシュデータ入替処理割込タイミング６２０にしたがって、キャッシュデータ入替制御部２１４に、処理の開始を通知する割り込みを発生させる。
【０４５１】
キャッシュデータ入替制御部２１４は、タイマ・カウンタ６００からの割込を受け付けると、処理を開始する（ステップＳ１７００）。
【０４５２】
キャッシュデータ入替制御部２１４は、キャッシュ対応テーブル２４５０に基づいて、キャッシュメモリシステム１２０に格納するブロックデータを決定する（ステップＳ１７０１）。具体的には、以下のような処理が実行される。
【０４５３】
キャッシュデータ入替制御部２１４は、キャッシュ対応テーブル２４５０を参照し、共有ストレージアドレス２４５２毎にリード回数２４５５及びライト回数２４５６を取得する。すなわち、ブロック毎のリード回数及びライト回数が取得される。
【０４５４】
キャッシュデータ入替制御部２１４は、各ブロックのリード回数及びライト回数に基づいて、ピン止め制御キャッシュエントリ最大数２４２０の範囲内で、キャッシュメモリシステム１２０に格納するブロックデータを決定する。
【０４５５】
以上が、ステップＳ１７０１の処理の説明である。
【０４５６】
次に、キャッシュデータ入替制御部２１４は、キャッシュ対応テーブル２４５０を参照し、ステップＳ１７０１の処理結果に基づいて、キャッシュ領域から追い出されるブロックデータに対応するエントリを更新する（ステップＳ１７０２）。
【０４５７】
追い出されるブロックデータの決定方法は、ステップＳ５０２と同一の方法である。ステップＳ１７０２では、エントリの更新内容が異なる。具体的には、キャッシュデータ入替制御部２１４は、キャッシュ対応テーブル２４５０を参照し、キャッシュメモリアドレス２４５１が、決定されたブロックデータを格納するキャッシュ領域のアドレスと一致するエントリのキャッシュ有効ビット２４５４に「０」を設定する。これによって、ブロックデータは、（状態１）から（状態２）に遷移する。さらに、キャッシュデータ入替制御部２１４は、更新されたエントリのキャッシュメモリアドレス２４５１をピン止め用キャッシュアドレスリスト２４３０に登録する。
【０４５８】
次に、キャッシュデータ入替制御部２１４は、新たにキャッシュメモリシステム１２０に格納するブロックデータのエントリをキャッシュ対応テーブル２４５０に登録する（ステップＳ１７０３）。具体的には以下のような処理が実行される。
【０４５９】
キャッシュデータ入替制御部２１４は、キャッシュ対応テーブル２４５０を参照し、空のエントリ又はエントリ有効ビット２４５３が「０」のエントリを検索する。キャッシュデータ入替制御部２１４は、検索されたエントリの共有ストレージアドレス２４５２に新たに格納されるブロックデータのアドレスを設定し、また当該エントリのエントリ有効ビット２４５３に「１」を設定する。
【０４６０】
キャッシュデータ入替制御部２１４は、ピン止め用キャッシュアドレスリスト２４３０から一つのアドレスを取得する。キャッシュデータ入替制御部２１４は、検索されたエントリのキャッシュメモリアドレス２４５１に当該取得されたアドレスを設定する。
【０４６１】
以上がステップＳ１７０３の処理の説明である。
【０４６２】
次に、キャッシュデータ入替制御部２１４は、キャッシュメモリシステム１２０に、新たなブロックデータを格納し（ステップＳ１７０４）、処理を終了する。
【０４６３】
具体的には、キャッシュデータ入替制御部２１４は、ステップＳ１７０３において更新されたエントリの共有ストレージアドレス２４５２に対応する記憶領域（ブロック）からブロックデータを読み出し、キャッシュメモリアドレス２４５１に対応するキャッシュ領域に読み出されたデータを格納する。また、キャッシュデータ入替制御部２１４は、当該エントリのキャッシュ有効ビット２４５４に「１」を設定する。
【０４６４】
図３０は、本発明の実施例４におけるキャッシュドライバ２１０が実行する初期化処理を説明するフローチャートである。
【０４６５】
キャッシュドライバ２１０は、管理者から設定情報の入力を受け付けると（ステップＳ１８００）、初期化処理を開始する。
【０４６６】
設定情報には、アクセスカウンタエントリ数、ブロックサイズ、ピン止め制御キャッシュエントリ数、キャッシュメモリシステム１２０のキャッシュ容量、キャッシュメモリシステム１２０におけるキャッシュ領域のアドレス範囲、及びキャッシュデータ入替処理の実行間隔等が含まれる。
【０４６７】
キャッシュドライバ２１０は、設定情報に基づいて、キャッシュ対応テーブル２４５０を初期化する（ステップＳ１８０１）。具体的には、以下のような処理が実行される。
【０４６８】
キャッシュドライバ２１０は、アクセスカウンタエントリ最大数２４００及びピン止め制御キャッシュエントリ最大数２４２０に、設定情報に含まれるアクセスカウンタエントリ数及びピン止め制御キャッシュエントリ数をそれぞれ設定する。
【０４６９】
キャッシュドライバ２１０は、ブロックサイズ２４１０に設定情報に含まれるブロックサイズを設定する。キャッシュドライバ２１０は、ブロックサイズ２４１０及びピン止め制御キャッシュエントリ最大数２４２０に基づいて、ピン止め用キャッシュアドレスリスト２４３０に、ブロックサイズ毎のアドレスが設定されるエントリを設定する。
【０４７０】
キャッシュドライバ２１０は、ブロックのサイズ、キャッシュメモリシステム１２０の記憶領域のアドレス範囲に基づいて、キャッシュ対応テーブル２４５０に、キャッシュ領域の数だけエントリを生成する。また、キャッシュドライバ２１０は、生成されたエントリのエントリ有効ビット２４５３及びキャッシュ有効ビット２４５４のそれぞれに「０」設定する。
【０４７１】
キャッシュドライバ２１０は、タイマ２１７を初期化し（ステップＳ１８０２）、処理を終了する。
【０４７２】
具体的には、キャッシュドライバ２１０は、キャッシュデータ入替処理割込タイミング６２０に、設定情報に含まれるキャッシュデータ入替処理の実行間隔を設定する。
【０４７３】
なお、本実施例で例示した種々のソフトウェアは、電磁的、電子的及び光学式等の種々の記録媒体（例えば、非一時的な記憶媒体）に格納可能であり、インターネット等の通信網を通じて、コンピュータにダウンロード可能である。
【０４７４】
さらに、本実施例では、ソフトウェアによる制御を用いた例について説明したが、その一部をハードウェアによって実現することも可能である。
【０４７５】
以上、本発明を添付の図面を参照して詳細に説明したが、本発明はこのような具体的構成に限定されるものではなく、添付した請求の範囲の趣旨内における様々な変更及び同等の構成を含むものである。
【符号の説明】
【０４７６】
１０  サーバ装置
１１０  サーバモジュール
１２０  キャッシュメモリシステム
１３０  共有ストレージシステム
２００  ＯＳ
２０１  アプリケーション
２１０  キャッシュドライバ
２１１  サーバアクセス計測部
２１２  アクセスカウンタ入替制御部
２１３  アクセス振り分け部
２１４  キャッシュデータ入替制御部
２１５  サーバアクセス管理情報
２１６  キャッシュ管理情報
２１７  タイマ
２２０  ストレージアクセス管理情報
２５０  ストレージ制御部
２５１  ストレージアクセス計測部
２５２  ストレージアクセス管理情報
３３０  サーバアクセスカウンタ
４１０  キャッシュ対応テーブル
５１０  ストレージアクセスカウンタ
１３１２  アクセス階層化カウンタ入替制御部
１３１５  サーバアクセス階層化管理情報
１４３０  下位階層サーバアクセスカウンタ
１４４０  上位階層サーバアクセスカウンタ
１７１１  サーバアクセス時分割計測部
１７１２  アクセス時分割カウンタ入替制御部
１７１４  キャッシュデータ時分割入替制御部
１７１５  サーバアクセス時分割管理情報
１８３０  サーバ時分割アクセスカウンタ
２３１６  キャッシュ管理情報
２４５０  キャッシュ対応テーブル
【図１】
2015075818.tif 000016
【図２】
2015075818.tif 000017
【図３】
2015075818.tif 000018
【図４】
2015075818.tif 000019
【図５】
2015075818.tif 000020
【図６】
2015075818.tif 000021
【図７】
2015075818.tif 000022
【図８】
2015075818.tif 000023
【図９】
2015075818.tif 000024
【図１０】
2015075818.tif 000025
【図１１】
2015075818.tif 000026
【図１２】
2015075818.tif 000027
【図１３】
2015075818.tif 000028
【図１４】
2015075818.tif 000029
【図１５】
2015075818.tif 000030
【図１６】
2015075818.tif 000031
【図１７】
2015075818.tif 000032
【図１８】
2015075818.tif 000033
【図１９】
2015075818.tif 000034
【図２０】
2015075818.tif 000035
【図２１】
2015075818.tif 000036
【図２２】
2015075818.tif 000037
【図２３】
2015075818.tif 000038
【図２４Ａ】
2015075818.tif 000039
【図２４Ｂ】
2015075818.tif 000040
【図２５】
2015075818.tif 000041
【図２６】
2015075818.tif 000042
【図２７】
2015075818.tif 000043
【図２８】
2015075818.tif 000044
【図２９】
2015075818.tif 000045
【図３０】
2015075818.tif 000046