(57)【要約】  Ｉ／Ｏノードと、複数の計算ノードとを含むシステムであって、Ｉ／Ｏノードは、記憶デバイスと、第１記憶デバイスのデータを一時的に記憶する第１キャッシュ領域の基になる第１メモリデバイスとを有し、各計算ノードは、Ｉ／Ｏ要求に従うデータを一時的に記憶する第２キャッシュ領域の基になる第２メモリデバイスを有する。Ｉ／Ｏノードと各計算ノードとのうちのいずれか一方のノードが、Ｉ／Ｏノードと各計算ノードとのうちの他方のノードのキャッシュ領域における物理的な記憶領域に関する情報とその物理的な記憶領域に対応付けられ自分のキャッシュ領域の一部とした仮想的な記憶領域に関する情報とを含んだ管理情報を記憶する。複数のノードのうちのいずれかのノードである対象ノードが、各計算ノードの管理情報、又は、Ｉ／Ｏノードの管理情報を基に、第２キャッシュ領域に記憶されるデータの配置を制御する。
2014007249.tif 000002
【特許請求の範囲】
【請求項１】
複数のノードを有し、
前記複数のノードが、Ｉ／Ｏ（Input/Output）ノードと、それぞれが前記Ｉ／Ｏノードに接続されＩ／Ｏ要求を前記Ｉ／Ｏノードに送信する複数の計算ノードとを含み、
前記Ｉ／Ｏノードが、Ｉ／Ｏ要求に従い書き込まれる又は読み出されるデータを記憶する第１記憶デバイスと、前記第１記憶デバイスに書き込まれる又は前記第１記憶デバイスから読み出されるデータを一時的に記憶する第１キャッシュ領域の基になる第１メモリデバイスとを有し、
各計算ノードが、Ｉ／Ｏ要求に従うデータを一時的に記憶する第２キャッシュ領域の基になる第２メモリデバイスを有し、
前記Ｉ／Ｏノードと前記各計算ノードとのうちのいずれか一方のノードが、前記Ｉ／Ｏノードと前記各計算ノードとのうちの他方のノードのキャッシュ領域における物理的な記憶領域に関する情報とその物理的な記憶領域に対応付けられ自分のキャッシュ領域の一部とした仮想的な記憶領域に関する情報とを含んだ管理情報を記憶し、
前記複数のノードのうちのいずれかのノードである対象ノードが、前記各計算ノードの管理情報、又は、前記Ｉ／Ｏノードの管理情報を基に、第２キャッシュ領域に記憶されるデータの配置を制御する、
計算機システム。
【請求項２】
前記対象ノードは、前記各計算ノードであり、
前記第１キャッシュ領域は、通常領域と共有領域とを含み、
前記通常領域は、Ｉ／Ｏ要求に従い前記第１記憶デバイスに書き込まれる又は前記第１記憶デバイスから読み出されるデータを一時的に記憶する記憶領域であり、
前記共有領域は、前記各計算ノードが管理する第１の仮想的な記憶領域である仮想共有領域に対応付けられた記憶領域であり、
前記各計算ノードにおいて、仮想共有領域は、第２キャッシュ領域の一部であり、
前記各計算ノードの管理情報が、自分以外の計算ノードが有する第２キャッシュ領域の記憶領域に対応付けられた第２の仮想的な記憶領域である仮想ローカル領域に関する情報を含み、且つ、どの領域にどのデータが記憶されているかを表す情報を含み、
前記複数の計算ノードは、前記複数の計算ノードのうちのいずれか１つの計算ノードである第１計算ノードと、前記第１計算ノード以外のいずれか１つの計算ノードである第２計算ノードとを含み、
前記第１計算ノードが、前記第１計算ノードの管理情報を基に、読み出し対象の第１データが前記第２計算ノードの第２キャッシュ領域の記憶領域に対応付けられた仮想ローカル領域に存在することを特定し、且つ、前記第１データを前記第２計算ノードの第２キャッシュ領域からデータを取得する場合、前記第１計算ノード又は前記第２計算ノードが、その計算ノードの管理情報を基に、前記Ｉ／Ｏノードに前記第１データを前記共有領域に格納させ、且つ、前記第２計算ノードが、前記第２計算ノードの第２キャッシュ領域内の前記第１データを無効にする、
請求項１記載の計算機システム。
【請求項３】
前記第１計算ノードが、
前記第１データが前記仮想共有領域に存在することを特定した場合、前記第１計算ノードの管理情報を基に、前記共有領域のアドレスを指定した第１リード要求を前記Ｉ／Ｏノードに送信し、
前記Ｉ／Ｏノードから前記第１データを受信し、その第１データを前記第１計算ノードの第２キャッシュ領域に書き込む、
請求項２記載の計算機システム。
【請求項４】
前記第１計算ノードが、前記第１リード要求を送信した後、前記仮想共有領域に前記第１データがあるというキャッシュヒットが起こったか否かの判定を行い、
前記判定の結果が真の場合、前記第１計算ノードが前記Ｉ／Ｏノードから受信した第１データは、前記第１リード要求に応答して受信した第１データである、
請求項３記載の計算機システム。
【請求項５】
前記判定の結果が偽の場合、前記第１計算ノードが、前記第１データのアドレスを指定した第２リード要求を前記Ｉ／Ｏノードに送信し、前記第１計算ノードが前記Ｉ／Ｏノードから受信した第１データは、前記第２リード要求に応答して受信した第１データである、
請求項４記載の計算機システム。
【請求項６】
前記第１リード要求のレスポンスタイムが所定値を超えた場合、又は、前記第１リード要求に対する応答がキャッシュミスを表す場合、前記判定の結果が偽となる、
請求項４記載の計算機システム。
【請求項７】
前記第１計算ノード又は前記第２計算ノードが、その計算ノードの管理情報を基に、前記第１データのアドレスと前記共有領域のアドレスとを指定したリード要求を前記Ｉ／Ｏノードに送信することにより、前記Ｉ／Ｏノードが前記第１データを前記第１記憶デバイスから前記共有領域に読み出す、
請求項２記載の計算機システム。
【請求項８】
前記第１計算ノード又は前記第２計算ノードが、その計算ノードの管理情報を基に、前記第１データを書き込み対象とし前記共有領域のアドレスを指定し前記第１記憶デバイスに関わるアドレスを指定していないライト要求を前記Ｉ／Ｏノードに送信することにより、前記Ｉ／Ｏノードが前記第１データを前記共有領域に書き込む、
請求項２記載の計算機システム。
【請求項９】
前記第１計算ノード又は前記第２計算ノードが、前記共有領域及び前記第１計算ノードの第２キャッシュ領域のうち前記共有領域に前記第１データがあることを自分以外の計算ノードに通知する、
請求項２記載の計算機システム。
【請求項１０】
前記複数のノードは、前記複数の計算ノード及び前記Ｉ／Ｏノードに接続された管理ノードを含み、
前記対象ノードは、前記管理ノードであり、
前記複数の計算ノードは、第１アプリケーションプログラムを含む複数のアプリケーションプログラムを実行し、
前記複数の計算ノードは、前記第１アプリケーションプログラムを実行している第１計算ノードを含み、
アプリケーションプログラム毎に性能条件が関連付けられており、
前記管理ノードは、前記第１アプリケーションプログラムを前記第１計算ノードから第２計算ノードに移動する、及び、第３計算ノードの第２キャッシュ領域の一部を前記第１計算ノードに融通する、のいずれか一方を行うことにより、第２キャッシュ領域に記憶されるデータの配置を制御し、
前記第２計算ノードは、前記第１計算ノード以外のいずれかの１つの計算ノードであり、
前記第３計算ノードは、前記第１計算ノード以外のいずれか１つの計算ノードであり、前記第２計算ノード、又は、前記第２計算ノードとは別の計算ノードである、
請求項１記載の計算機システム。
【請求項１１】
前記管理ノードは、
前記第１アプリケーションプログラムを前記第２計算ノードに移動できるか否かを判定し、
前記判定の結果が真の場合、前記第２ノードに前記第１アプリケーションプログラムを移動し、
前記判定の結果が偽の場合、前記第３計算ノードの第２キャッシュ領域の一部を前記第３計算ノードに融通する、
請求項９記載の計算機システム。
【請求項１２】
性能が性能閾値を超えることが性能条件を満たすことであり、
前記第１アプリケーションプログラムは、性能閾値が最大要求数以上であり性能閾値と最大要求数との差が最大であるアプリケーションプログラム、又は、性能閾値が最大性能以下であり性能閾値と最大性能との差が最大であるアプリケーションプログラムであり、
各アプリケーションプログラムの最大要求数は、そのアプリケーションプログラムが単位時間当たりに処理した要求の数の最大値であり、
各アプリケーションプログラムの最大性能は、そのアプリケーションプログラムを実行する計算ノードの第２キャッシュ領域の容量を基に算出された値でありそのアプリケーションプログラムにより発揮されることが期待される性能である、
請求項９記載の計算機システム。
【請求項１３】
前記対象ノードは、前記各計算ノードであり、
前記各計算ノードが、第２記憶デバイスを有し、前記第２記憶デバイスの一部を前記第２キャッシュ領域の一部として使用し、且つ、第２キャッシュ領域における複数の記憶領域を前記複数の記憶領域にそれぞれ対応する複数の優先度に基づいて使用し、
前記各計算ノードにとって、第２キャッシュ領域のうち、自分が有する第２メモリデバイスに基づく領域が最も優先度が高く、他の計算ノードが有する第２メモリデバイスに基づく領域が２番目に優先度が高く、自分が有する第２記憶デバイスに基づく領域が３番目に優先度が高く、他の計算ノードが有する第２記憶デバイスに基づく領域が４番目に優先度が高い、
請求項１記載の計算機システム。
【請求項１４】
前記複数の計算ノードは、前記複数の計算ノードのうちのいずれか１つの計算ノードである第１計算ノードを含み、
前記第１計算ノードは、
前記第１計算ノードの第２キャッシュ領域から第２計算ノードの第２キャッシュ領域にデータを移動し、
前記第２計算ノードの第２キャッシュ領域から、前記第１計算ノードの第２キャッシュ領域の一部であり前記第１計算ノードの第２記憶デバイスに基づく領域に、データを移動し、
前記第１計算ノードの第２キャッシュ領域の一部であり前記第１計算ノードの第２記憶デバイスに基づく領域から、第３計算ノードの第２キャッシュ領域の一部であり前記第３計算ノードの第２記憶デバイスに基づく領域にデータを移動し、
前記第２計算ノードは、前記第１計算ノード以外のいずれかの１つの計算ノードであり、
前記第３計算ノードは、前記第１計算ノード以外のいずれか１つの計算ノードであり、前記第２計算ノード、又は、前記第２計算ノードとは別の計算ノードである、
請求項１３記載の計算機システム。
【請求項１５】
複数のノードを含んだ計算機システムで行われるキャッシュ制御方法であって、
前記複数のノードが、Ｉ／Ｏ（Input/Output）ノードと、それぞれが前記Ｉ／Ｏノードに接続されＩ／Ｏ要求を前記Ｉ／Ｏノードに送信する複数の計算ノードとを含んでおり、
前記Ｉ／Ｏノードが、Ｉ／Ｏ要求に従い書き込まれる又は読み出されるデータを記憶する第１記憶デバイスと、前記第１記憶デバイスに書き込まれる又は前記第１記憶デバイスから読み出されるデータを一時的に記憶する第１キャッシュ領域の基になる第１メモリデバイスとを有しており、
各計算ノードが、Ｉ／Ｏ要求に従うデータを一時的に記憶する第２キャッシュ領域の基になる第２メモリデバイスを有しており、
前記キャッシュ制御方法が、
前記Ｉ／Ｏノードと前記各計算ノードとのうちのいずれか一方のノードが、前記Ｉ／Ｏノードと前記各計算ノードとのうちの他方のノードのキャッシュ領域における物理的な記憶領域に関する情報とその物理的な記憶領域に対応付けられ自分のキャッシュ領域の一部とした仮想的な記憶領域に関する情報とを含んだ管理情報を記憶し、
前記複数のノードのうちのいずれかのノードである対象ノードが、前記前記各計算ノードの管理情報、又は、前記Ｉ／Ｏノードの管理情報を基に、第２キャッシュ領域に記憶されるデータの配置を制御する、
キャッシュ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュ制御に関する。
【背景技術】
【０００２】
大量のデータの利用及び活用を目的として、大量のデータに対する高速解析技術に注目が高まっている。この高速解析技術を実現するためには、大量のデータに対して高速にアクセスできるＩＴプラットフォームが必要となる。【０００３】
このニーズを実現するために、例えば、特許文献１には、複数台の処理装置と各処理装置が備える分散共有メモリ（キャッシュメモリ）、及びそれらの間の情報転送路を持つ並列処理装置についての記載がある。具体的には、各処理装置は、必要な時に、自分の分散共有メモリに、他処理装置が備える分散共有メモリが保有しているデータを格納することができる。つまり、特許文献１記載の各処理装置は、分散共有メモリで、他の処理装置とデータを共有することができる。このため、並列処理装置全体として、分散共有メモリの容量を多くすることなく、大量のデータに対して高速にアクセスすることができる。【０００４】
しかし、分散共有メモリの容量を、大量のデータ処理を伴うアプリケーションが対象とするようなデータを全て格納できる容量とした場合、分散共有メモリは、高速ではあるが高価となってしまう。そのため、キャッシュメモリを有する処理装置（計算ノード）に、不揮発性の記憶デバイスとその記憶デバイスに入出力されるデータを一時的に記憶するキャッシュメモリとを有するＩ／Ｏ（Input/Output）ノードを接続し、使用頻度の高いデータを、処理装置のキャッシュ領域に格納し、使用頻度の低いデータを、Ｉ／Ｏノードの記憶デバイスに格納することが考えられる。【０００５】
例えば、特許文献２では、計算ノードのキャッシュメモリ、Ｉ／Ｏノードのキャッシュメモリ、及びＩ／Ｏノードの記憶デバイスを含めた記憶領域を階層化し、アプリケーションの処理と連動して、アプリケーションに必要なデータを、所定の階層に属する記憶領域に配置する技術が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平０６−２６６６８３号公報
【特許文献２】特開２００３−１５０４４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献２では、計算ノードでのキャッシュメモリの管理とＩ／Ｏノードでのキャッシュメモリの管理が互いに独立している。キャッシュメモリの管理は、そのキャッシュメモリを有するノード（Ｉ／Ｏノード或いは計算ノード）で最適化されている。このため、複数の計算ノードとそれらに接続されたＩ／Ｏノード（計算機の一例としてのＩ／Ｏノード）とを含んだ計算機システムでのキャッシュメモリの利用効率が悪くなる。例えば、計算ノードのキャッシュメモリとＩ／Ｏノードのキャッシュメモリの両方に同じデータが残ってしまうこと、或いは、使用頻度の低いデータがキャッシュメモリに残ってしまうことがあり得る。
【課題を解決するための手段】
【０００８】
複数のノードが、Ｉ／Ｏ（Input/Output）ノードと、複数の計算ノードとを含む。各計算ノードは、Ｉ／Ｏ要求をＩ／Ｏノードに送信する。Ｉ／Ｏノードは、Ｉ／Ｏ要求に従い書き込まれる又は読み出されるデータを記憶する第１記憶デバイスと、第１記憶デバイスに書き込まれる又は第１記憶デバイスから読み出されるデータを一時的に記憶する第１キャッシュ領域の基になる第１メモリデバイスとを有する。各計算ノードが、Ｉ／Ｏ要求に従うデータを一時的に記憶する第２キャッシュ領域の基になる第２メモリデバイスを有する。Ｉ／Ｏノードと各計算ノードとのうちのいずれか一方のノードが、Ｉ／Ｏノードと各計算ノードとのうちの他方のノードのキャッシュ領域における物理的な記憶領域に関する情報とその物理的な記憶領域に対応付けられ自分のキャッシュ領域の一部とした仮想的な記憶領域に関する情報とを含んだ管理情報を記憶する。複数のノードのうちのいずれかのノードである対象ノードが、各計算ノードの管理情報、又は、Ｉ／Ｏノードの管理情報を基に、第２キャッシュ領域に記憶されるデータの配置を制御する。なお、メモリデバイスとは、ＤＲＡＭ（Dynamic  Random  Access  Memory）のような揮発性メモリであっても良いし、フラッシュメモリのような不揮発性のメモリであっても良いし、１又は複数の揮発性又は不揮発性のメモリを含んだデバイス（例えばＳＳＤ（Solid  State  Drive））であっても良い。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施例１に係る計算機システムの全体構成の一例を示すブロック図である。
【図２】図２は、計算ノード２の構成の一例を示すブロック図である。
【図３】図３は、Ｉ／Ｏノード３の構成の一例を示すブロック図である。
【図４】図４は、計算ノード２のメモリ２１の使用方法の一例を説明するための模式図である。
【図５】図５は、Ｉ／Ｏノード３のメモリ３１の使用方法の一例を説明するための模式図である。
【図６】図６は、計算ノード２の構成管理テーブル２１２１の一例を示す。
【図７】図７は、計算ノード２のキャッシュ管理テーブル２１２２の一例を示す。
【図８】図８は、Ｉ／Ｏノード３の構成管理テーブル３１２１の一例を示す。
【図９】図９は、Ｉ／Ｏノード３のキャッシュ管理テーブル３１２２の一例を示す。
【図１０】図１０は、Ｉ／Ｏノード３のアドレス管理テーブル３１３３の一例を示す。
【図１１】図１１は、計算ノード２の構成情報収集プログラム２１１１の処理フローチャートの一例である。
【図１２】図１２は、計算ノード２の情報通知プログラム２１１２の処理フローチャートの一例である。
【図１３】図１３は、計算ノード２のキャッシュ管理プログラム２１１３の処理フローチャートの一例である。
【図１４】図１４は、Ｉ／Ｏノード３の構成情報収集プログラム３１１１の処理フローチャートである。
【図１５】図１５は、図１５のＳ５０３の詳細の一例である。
【図１６】図１６は、データ取得処理（図１５のＳ５０４）の詳細の一例である。
【図１７】図１７は、スワップアウト処理（図１６のＳ６０４）の詳細の一例である。
【図１８】図１８は、計算ノード２の起動処理の流れを示すフローチャートの一例である。
【図１９】図１９は、Ｉ／Ｏノード３の起動処理の流れを示すフローチャートの一例である。
【図２０】図２０は、実施例２に係るキャッシュ管理プログラム２１１３の処理の流れを示すフローチャートの一例である。
【図２１】図２１は、実施例３に係る計算機システム１の全体構成の一例を示す。
【図２２】図２２は、キャッシュ間でのデータの移行を説明するための模式図である。
【図２３】図２３は、実施例４に係る計算ノード２の構成の一例を示すブロック図である。
【図２４】図２４は、実施例４に係る計算ノード２Ａのメモリ２１の使用方法を説明するための模式図である。
【図２５】図２５は、実施例４に係る計算ノード２Ａのアドレス管理テーブル２１２３の一例を示す。
【図２６】図２６は、実施例４に係るＩ／Ｏノード３のメモリ３１の使用方法を説明するための模式図である。
【図２７】図２７は、実施例４に係るアドレス管理テーブル３１２３の一例を示す。
【図２８】図２８は、実施例４に係る計算ノード２のキャッシュ管理プログラム２１１３の処理フローチャートの一例である。
【図２９】図２９は、実施例４に係る計算ノード２のデータ取得処理（図２８のＳ３０６）の詳細の一例である。
【図３０】図３０は、実施例４に係る計算ノード２のスワップアウト処理（図２９のＳ１１０６）の詳細の一例である。
【図３１】図３１は、実施例４に係るＩ／Ｏノード３のデータ取得処理（図１５のＳ５０４）の詳細の一例である。
【図３２】図３２は、実施例４に係るＩ／Ｏノード３のスワップアウト取得処理（図３１のＳ６０５）の詳細の一例である。
【図３３】図３２は、実施例４に係るＩ／Ｏノード３のスワップアウト取得処理（図３１のＳ６０５）の詳細の一例である。
【図３４】図３４は、実施例５に係る管理サーバ５の構成の一例を示すブロック図である。
【図３５】図３５は、実施例５に係る計算ノード２の構成管理テーブル２１２１の一例を示す。
【図３６】図３６は、実施例５に係る管理サーバ５の構成管理テーブル５１２１の一例を示す。
【図３７】図３７は、実施例５に係る管理サーバ５の性能管理テーブル５１２２の一例を示す。
【図３８】図３８は、実施例５に係る管理サーバ５のアドレス管理テーブル５１３３の一例を示す。
【図３９】図３９は、実施例５に係る管理サーバ５の性能管理プログラム５１１２の処理フローチャートの一例である。
【図４０】図４０は、実施例５に係る管理サーバ５のキャッシュ構成変更処理（図３９のＳ１３０５）の詳細の一例である。
【図４１】図４１は、実施例５にかかる管理サーバ５の容量融通先選択処理（図３９のＳ１４０２）の詳細の一例である。
【図４２】図４２は、実施例５にかかる管理サーバ５の容量融通方式選択処理（図４０のＳ１４０３）の詳細の一例である。
【図４３】図４３は、実施例５に係る計算ノード２のスワップアウト処理の詳細の一例である。
【図４４】図４４は、実施例６に係る計算機システム１の全体構成の一例を示すブロック図である。
【図４５】図４５は、実施例６に係る計算ノード２の構成の一例を示すブロック図である。
【図４６】図４６は、実施例６に係る計算ノード２の構成管理テーブル２１２１の一例を示す。
【図４７】図４７は、実施例６に係る計算ノード２のアドレス管理テーブル２１３３の一例を示す。
【図４８】図４８は、実施例６に係る計算ノード２のスワップアウト処理（図２９のＳ１１０６）の詳細の一例である。
【図４９】図４９は、計算機システム１のネットワークトポロジー構成の一例を示すブロック図である。
【図５０】図５０は、実施例４に係るキャッシュ制御処理に伴うデータ移行を説明するための模式図である。
【図５１】図５１は、実施例５に係るキャッシュ制御処理を説明するための模式図である。
【図５２】図５２は、実施例６におけるスワップアウト処理を説明するための模式図である。
【発明を実施するための形態】
【００１０】
幾つかの実施例を説明する。
【００１１】
なお、以後の説明では、「ＸＸＸテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「ＸＸＸテーブル」を「ＸＸＸ情報」と呼ぶことができる。
【００１２】
また、以後の説明では、コンピュータプログラムを主語として処理を説明する場合があるが、プログラムは、コントローラが有するプロセッサ（例えばＣＰＵ（Central  Processing  Unit））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び通信制御装置（例えば通信ポート）を用いながら行うため、処理の主語がプロセッサとされてもよい。また、プログラムを主語として説明された処理は、そのプログラムを実行するプロセッサを有するコントローラ、或いは、そのコントローラを有する装置（例えば計算ノード或いはＩ／Ｏノード）が行う処理としても良い。また、プログラムの一部又は全ては専用ハードウェアによって実現されてもよい。コントローラは、プロセッサの他に、その専用ハードウェアを含んでも良い。また、コンピュータプログラムは、プログラムソースから各計算機にインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであっても良い。
【００１３】
また、以後の説明において、同種の要素「ｔｔｔ」を区別して説明する場合、符号を組み合わせて「ｔｔｔＡ」、「ｔｔｔＢ」のように表すことがあるが、これらの要素を特に区別しない場合は、単に「ｔｔｔ」と示す。
【実施例１】
【００１４】
図１は、実施例１に係る計算機システム１の全体構成の一例を示すブロック図である。
計算機システム１は、計算ノード２及びＩ／Ｏノード３を有し、これらの構成要素（計算ノード２及びＩ／Ｏノード３）が、同一の筺体内に設置されている。計算ノード２及びＩ／Ｏノード３は、筺体内で、例えば、所定のインタフェース（例えば、ＰＣＩ（Peripheral  Components  Interconnect  bus））２３、３３で接続されている。計算ノード２は、例えば、ホスト計算機である。また、Ｉ／Ｏノード３は、例えば、ホスト計算機が接続されるストレージ装置である。【００１５】
なお、計算ノード２とＩ／Ｏノード３とは、同一の筺体に配置されなくても良い。また、計算ノード２とＩ／Ｏノード３とは、所定の通信ネットワーク（例えば、ＳＡＮ（Storage  Area  Network））を介して接続されても良い。【００１６】
計算ノード２は、例えば、一種の計算機である。計算ノード２は、メモリ２１に、制御プログラム群２１１、管理テーブル群２１２及びアプリケーションプログラム４を格納する。アプリケーションプログラム４は、ある目的のために設計されたソフトウェア（例えば、ワードプロセッサとして計算機を機能させるためのソフトウェア）である。制御プログラム群２１１及び管理テーブル群２１２については後述する。【００１７】
Ｉ／Ｏノード３は、例えば、一種の入出力デバイスであり、具体例として、前述したように、ストレージ装置である。Ｉ／Ｏノード３は、不揮発性の記憶デバイス３４とメモリ３１とを有しており、メモリ３１に、制御プログラム群２１１及び管理テーブル群２１２を格納する。【００１８】
図２は、計算ノード２の構成の一例を示すブロック図である。【００１９】
計算ノード２は、メモリ２１、インタフェース２３及びそれらに接続されたプロセッサ（例えばＣＰＵ（Central  Processing Unit））２２及びを備える。【００２０】
プロセッサ２２は、計算ノード２の動作の制御を司り、メモリ２１に格納された制御プログラム群２１１及び管理テーブル群２１２に基づいて必要な処理を実行する。メモリ２１は、制御プログラム群２１１及び管理テーブル群２１２を記憶するために用いられるほか、プロセッサ２２のワークメモリとしても用いられる。インタフェース２３は、通信インタフェースデバイスであり、計算ノード２がＩ／Ｏノード３と通信する際のプロトコルの制御を行う。【００２１】
制御プログラム群２１１には、構成情報収集プログラム２１１１、構成情報通知プログラム２１１２及びキャッシュ管理プログラム２１１３が含まれている。図では、プログラム２１１１〜２１１３は、一つのプログラムで実現されても良いし、実装上の都合により２以下或いは４以上に、分けられても良い。【００２２】
構成情報収集プログラム２１１１は、例えば、後述の構成管理テーブル２１１１を設定するためのインタフェースとして動作する。構成情報収集プログラム２１１１は、例えば、設定ＡＰＩ（Application  Program  Interface）の呼び出しに応じて、構成管理テーブル２１２１の設定、及び／又は更新を行う。【００２３】
構成情報通知プログラム２１１２は、計算ノード２の図示しないＯＳ（Operating  System）の起動時、及び後述のＩ／Ｏノード３の構成情報収集プログラム３１１１及び共有キャッシュ管理プログラム３１１２からの要求に応じて、構成管理テーブル２１２１に保存されている情報、及び後述のキャッシュ管理テーブル２１２２に格納されている情報を、Ｉ／Ｏノード３に通知する。【００２４】
キャッシュ管理プログラム２１１３は、アプリケーションプログラム４からの要求に応じて、Ｉ／Ｏノード３（メモリ３１或いは記憶デバイス３４）からローカルキャッシュ領域２１５にデータを格納する、及び、ローカルキャッシュ領域２１５に格納したデータの更新を行う。具体的には、例えば、キャッシュ管理プログラム２１１３は、キャッシュ管理テーブル２１２２にエントリを追加すること、及び、エントリを更新することを行う。【００２５】
管理テーブル群２１２には、構成管理テーブル２１２１及びキャッシュ管理テーブル２１２２が含まれている。これらの管理テーブル２１２１、２１２２については、後述する。【００２６】
図３は、Ｉ／Ｏノード３の構成の一例を示すブロック図である。【００２７】
図３に示すように、Ｉ／Ｏノード３は、メモリ３１、プロセッサ３２、インタフェース３３及び記憶デバイス３４を備える。【００２８】
メモリ３１、プロセッサ３２及びインタフェース３３は、それぞれ計算ノード２のメモリ２１、及びプロセッサ２２及びインタフェース３３と、実質的に同様の機能を有するものであるため、その詳細については説明を省略する。【００２９】
記憶デバイス３４は、例えばＲＡＩＤ（Redundant  Array  of  Inexpensive  Disks）構成とされた複数の物理的な記憶デバイスでも良いし、内部又は外部の物理記憶デバイスに基づく論理的な記憶デバイスでも良い。記憶デバイス３４には、例えば、計算ノード２のアプリケーションプログラム４が使用するデータが格納され、そのデータは、アプリケーションプログラム４が必要な時にメモリ２１に格納され使用される。【００３０】
メモリ３１に格納されている制御プログラム群３１１には、構成情報収集プログラム３１１１及び共有キャッシュ管理プログラム３１１２がある。プログラム３１１１及び３１１２は、一つにまとめて実現されても良いし、実装上の都合により３以上に分けられてもよい。【００３１】
構成情報収集プログラム３１１１は、計算ノード２の情報通知部２１１２からの要求に応じて、構成管理テーブル２１２１及びアドレス管理テーブル３１２３の更新を行う。【００３２】
共有キャッシュ管理プログラム３１１２は、計算ノード２のキャッシュ管理プログラム２１１３からの要求に応じて、記憶デバイス３４からのデータ取得、メモリ３１のキャッシュ領域へのデータの読み書き、及び後述の共有キャッシュ管理テーブル３１２２の更新を行う。【００３３】
メモリ３１に記憶されている管理テーブル群３１２には、構成管理テーブル３１２１、キャッシュ管理テーブル３１２２及びアドレス管理テーブル３１２３が含まれている。これら、のテーブル３１２１〜３１２３については、後述する。【００３４】
図４は、計算ノード２のメモリ２１の使用方法を説明するための模式図である。【００３５】
計算ノード２は、メモリ２１の記憶領域を、上記管理テーブル群２１２及び各プログラム（４、２１１）に対して割当て使用する他、メモリ２１の記憶領域を、ＯＳ割当て領域２１３、ローカルキャッシュ領域２１４及び制御コマンド格納領域２１５に論理的に分割して使用する。【００３６】
ＯＳ割当て領域２１３は、ＯＳ、アプリケーションプログラム４及び制御プログラム群２１１がワークメモリとして使用する領域である。ローカルキャッシュ領域２１４は、制御プログラム群２１１がキャッシュ領域として使用する領域である。制御コマンド格納領域２１５は、ローカルキャッシュ領域２１４、及びＩ／Ｏノード３からの処理要求（コマンド）の内容を格納するための領域である。【００３７】
図５は、Ｉ／Ｏノード３のメモリ３１の使用方法を説明するための模式図である。【００３８】
Ｉ／Ｏノード３は、メモリ３１の記憶領域を、上記管理テーブル群３１２及び制御プログラム群３１１に対して割当てる他、メモリ３１の記憶領域を、制御プログラム割当て領域３１３及びキャッシュ領域３１４に割当て、制御プログラム割当て領域３１３及びキャッシュ領域３１４に論理的に分割して使用する。【００３９】
このうち、Ｉ／Ｏノード３は、キャッシュ領域３１４を、通常キャッシュ領域３１４４、ローカルキャッシュ拡張領域３１４１及び共有キャッシュ領域３１４２に論理的に分割して管理し、且つ、複数のローカルキャッシュ領域２１４にそれぞれ対応する複数の仮想ローカルキャッシュ領域３１４３を管理する。【００４０】
通常キャッシュ領域３１４４は、記憶デバイス３４に入出力されるデータを一時的に格納する領域である。【００４１】
ローカルキャッシュ拡張領域３１４１は、計算ノード２のローカルキャッシュ領域２１４からのデータを格納する領域である。共有キャッシュ領域３１４２は、複数の計算ノード２が参照するデータを蓄積する領域である。【００４２】
仮想ローカルキャッシュ領域３１４３は、各計算ノード２のそれぞれのローカルキャッシュ領域２１４と対応付けられる領域である。すなわち、仮想ローカルキャッシュ領域３１４３は、Ｉ／Ｏノード３と通信する計算ノード２の数だけ存在する。例えば、図では、Ｉ／Ｏノード３と３台の計算ノード２Ａ〜２Ｃが通信する場合を示しており、メモリ３１には、計算ノード２Ａ〜２Ｃがそれぞれ有するローカルキャッシュ領域２１４Ａ〜２１４Ｃにそれぞれ対応する仮想ローカルキャッシュ領域３１４３Ａ〜３１４３Ｃが存在している。以下、仮想ローカルキャッシュ領域については、１つの仮想ローカルキャッシュ領域３１４３Ａを適宜に例に取る。【００４３】
Ｉ／Ｏノード３は、計算ノード２Ａ〜２Ｃのローカルキャッシュ領域２１４Ａ〜２１４Ｃのアドレス（後述の物理アドレス）を、対応する仮想ローカルキャッシュ領域３１４３Ａ〜３１４３Ｃのアドレス（後述の仮想アドレス）に対応付け、且つ、ローカルキャッシュ領域２１４Ａ〜２１４Ｃの使用状況を管理する。これにより、Ｉ／Ｏノード３は、計算ノード２のローカルキャッシュ領域２１４Ａ〜２１４Ｃ及びＩ／Ｏノード３のキャッシュ領域３１４を一元的に管理することができる。【００４４】
仮想ローカルキャッシュ領域３１４３Ａには、ローカルキャッシュ領域２１４Ａに対応付けられており、データ（例えば、アプリケーションプログラム４で使用されるデータ）は実際には格納されていない。仮想ローカルキャッシュ領域３１４３Ａ内のデータは、実際には、対応するローカルキャッシュ領域２１４Ａに格納されている。Ｉ／Ｏノード３は、仮想ローカルキャッシュ領域３１４３Ａを参照することにより、対応するローカルキャッシュ領域２１４Ａ内のデータに対してアクセスすることができる。仮想ローカルキャッシュ領域３１４３Ａには、ローカルキャッシュ領域２１４Ａに格納されているデータと同じデータは格納されないので、Ｉ／Ｏノード３のキャッシュ領域３１４の容量を節約することができる。【００４５】
ローカルキャッシュ拡張領域３１４１は１つであり、このローカルキャッシュ拡張領域３１４１が論理的に分割され、各計算ノード２には、分割された領域がそれぞれ与えられる。こうすると、ローカルキャッシュ拡張領域３１４１の容量を少なく抑えることが期待できる。しかしながら、このローカルキャッシュ拡張領域３１４１は、各計算ノード２に対してそれぞれ用意されても良い。【００４６】
図６は、計算ノード２の構成管理テーブル２１２１の一例を示す。【００４７】
構成管理テーブル２１２１は、容量２１２１１、使用量２１２１２及び物理アドレス２１２１３を有する。容量２１２１１は、ローカルキャッシュ領域２１４の容量を示す。使用量２１２１２は、ローカルキャッシュ領域２１４の容量のうち、計算ノード２により実際に使用されているデータの量を示す。物理アドレス２１２１３は、ローカルキャッシュ領域２１４に属する複数の物理的なアドレスを示す。【００４８】
図７は、計算ノード２のキャッシュ管理テーブル２１２２の一例を示す。【００４９】
キャッシュ管理テーブル２１２２は、ページ番号２１２２１、物理アドレス２１２２２、データ２１２２３及び有効ビット２１２２４を有する。【００５０】
記憶デバイス３４は、複数のページ（記憶領域）で構成されており、ページ番号２１２２１は、記憶デバイス３４のページの番号である。物理アドレス２１２２２は、構成管理テーブル２１２１の物理アドレス２１２１３と同じである、つまりローカルキャッシュ領域２１４の物理アドレスを示す。ページ番号２１２２１と物理アドレス２１２２２の組から、記憶デバイス３４のどのページに格納されるデータが、ローカルキャッシュ領域２１４のどこに格納されているかがわかる。データ２１２２３は、物理アドレス２１２２２より特定される領域（ローカルキャッシュ領域２１４内の領域）に格納されているデータの種類を示す。【００５１】
有効ビット２１２２４は、物理アドレス２１２２２で特定される領域に格納されているデータが「無効」或いは「有効」であるかを示す情報である。「無効」とは、物理アドレス２１２２２によって特定される領域に格納されているデータが、当該領域に対応付けられている記憶デバイス34のページに格納されているデータと異なっていることを示す。一方「有効」とは、物理アドレス２１２２２によって特定される領域に格納されているデータが、当該領域に対応付けられているページに格納されているデータと同じであることを示す。【００５２】
図８は、Ｉ／Ｏノード３の構成管理テーブル３１２１の一例を示す。【００５３】
構成管理テーブル３１２１は、計算ノード２或いはＩ／Ｏノード３毎に、ノード識別子３１２２１、通信方式３１２１２、容量３１２１３、使用容量３１２１４を対応付けて管理する。【００５４】
ノード識別子３１２２１は、計算ノード２Ａ〜２Ｃ、及びＩ／Ｏノード３を識別するための情報である。ノード識別子「０」は、Ｉ／Ｏノード３を示す。また、ノード識別子「Ａ〜Ｃ」はそれぞれ計算ノード２Ａ〜２Ｃを示す。【００５５】
通信方式３１２１２は、Ｉ／Ｏノード３が、キャッシュ領域３１４に対応付けられているデータ、及び格納されているデータにアクセスするための方式を示す。データにアクセスするための方式は、例えば、ＲＤＭＡ（Remote  Direct  Memory  Access）、及びメモリ参照がある。「ＤＭＡ」は、Ｉ／Ｏノード３が、仮想ローカルキャッシュ領域３１４３に対応付けられているローカルキャッシュ領域２１４に格納されているデータにアクセスすることを示す。「メモリ参照」とは、Ｉ／Ｏノード３が、キャッシュ領域３１４のうち、仮想ローカルキャッシュ領域３１４３以外の領域であるローカルキャッシュ拡張領域３１４１及び共有キャッシュ領域３１４２に格納されているデータにアクセスすることを示す。【００５６】
容量３１２１３は、ノード識別子３１２１１が「０」の場合、ローカルキャッシュ拡張領域３１４１及び共有キャッシュ領域３１４２のそれぞれの容量を示す。ノード識別子３１２１１が「Ａ〜Ｃ」の場合、容量３１２１３は、ローカルキャッシュ領域２１４Ａ〜２１４Ｃのそれぞれの容量を示す。【００５７】
使用容量３１２１４は、容量３１２１３のうち実際に使用されている量を示す。【００５８】
ノード識別子３１２１１が「０」の場合、容量３１２１３及び使用量３１２１４が２行に分かれている。上段は、ローカルキャッシュ拡張領域３１４１の容量３１２１３及び使用量３１２１４を表し、下段は、共有キャッシュ領域３１４２の容量３１２１３及び使用量３１２１４を表す。さらに、ノード識別子３１２１１が「Ａ」〜「Ｃ」の場合は、それぞれ計算ノード２Ａ〜２Ｃのローカルキャッシュ領域２１４Ａ〜２４１Ｃに対応する仮想ローカルキャッシュ領域３１４３の容量３１２１３及び使用量３１２１４を表す。  図９は、Ｉ／Ｏノード３のキャッシュ管理テーブル３１２２の一例を示す。【００５９】
キャッシュ管理テーブル３１２２は、キャッシュ領域３１４に格納されているデータと記憶デバイス３４に格納されているデータが重複しているか否かを示す。【００６０】
キャッシュ管理テーブル３１２２は、ページ番号３１２２１、仮想アドレス３１２２２及び有効ビット３１２２３を有する。【００６１】
ページ番号３１２２１は、記憶デバイス３４のページの番号である。仮想アドレス３１２２２は、キャッシュ領域３１４に属する複数の仮想的なアドレスを示す。例えば、図に示す例では、ページ番号３１２２１「０」と仮想アドレス「３」とが対応付けられているが、これは、ページ番号「０」のページに格納されているデータが、仮想アドレス「３」に属する領域（キャッシュ領域３１４内の領域）に格納されていることを示している。一方、ページ番号３１２２１「１」には、仮想アドレス３１２２２として無効な値「−」が対応付けられている。これは、記憶デバイス３４に格納されているデータが、キャッシュ領域３１４に格納されていないことを示す。【００６２】
有効ビット３１２２３は、記憶デバイス３４に格納されているデータが「有効」或いは「無効」であるかを示す情報である。有効ビット３１２２３は、キャッシュ管理テーブル２１２２の有効ビット２１２２３と実質的に同じである。例えば、図では、キャッシュ領域３１４の仮想アドレス「５」には、記憶デバイス３４のページ番号「２」が対応付けられているが、有効ビット２１２２３は「無効」であるため、仮想アドレス「５」の領域（キャッシュ領域３１４内の領域）に格納されているデータと、ページ番号「２」のページに格納されているデータとは異なっていることを示している。【００６３】
図１０は、Ｉ／Ｏノード３のアドレス管理テーブル３１３３の一例を示す。【００６４】
アドレス管理テーブル３１２３は、キャッシュ領域３１４における領域毎に、仮想アドレス３１２３１、属性値３１２３２、物理位置３１２３３、物理アドレス３１２３４、及び使用状況３１２３５を有する。以下、キャッシュ領域３１４における１つの領域（図１０の説明において「対象領域」という）を例に取り、アドレス管理テーブル３１２３が有する情報を説明する。【００６５】
仮想アドレス３１２３１は、対象領域の仮想的なアドレスを示す。【００６６】
属性値３１２３２は、対象領域を含む領域の種類を示す。属性値３１２３２が「拡張」とは、対象領域がローカルキャッシュ拡張領域３１４１として使用されていることを示す。属性値３１２３２が「共有」とは、対象領域が共有キャッシュ領域３１４２として使用されていることを示す。また、属性値３１２３３が「仮想Ａ」とは、対象領域が仮想ローカルキャッシュ領域３１４３Ａとして使用されていることを示す。なお、この属性値３１２３２は、省略されても良い。【００６７】
物理位置３１２３３は、対象領域に格納されるデータが実際に格納される場所を示す。「ローカルメモリ」とは、対象領域に格納されるデータが実際にはＩ／Ｏノード３のメモリ３１１に格納されることを示す。また「計算ノードＡ」とは、対象領域に格納されるデータが実際には計算ノード２Ａのメモリ２１に格納されることを示す。【００６８】
物理アドレス３１２３４は、対象領域の物理的なアドレスを示す。使用状況３１２３５は、対象領域の物理アドレス３１２３４が示す領域にデータが格納されているかを示す。「使用」とは、対象領域の物理アドレス３１２３４が示す領域にはデータが格納されていることを示す。また「未使用」とは、対象領域の物理アドレス３１２３４が示す領域にはデータが格納されていなことを示す。【００６９】
次に、キャッシュ間でデータの移行がどのように行われるかを説明する。【００７０】
図２２は、キャッシュ間でのデータ移行を説明するための模式図である。なお、図２２の説明において、計算機システム１が、以下の（１）〜（５）の通りであるとする。
（１）計算ノードＡ（２Ａ）のローカルキャッシュ領域Ａ（２１４）は、アプリケーションプログラムＡ（４Ａ）（計算ノードＡ（２Ａ）が有しているアプリケーションプログラム）のリード要求時に取得したデータを格納するための領域である。また、計算ノードＢ（２Ｂ）のローカルキャッシュ領域２１４Ｂも同様に、アプリケーションプログラムＢ（４Ｂ）（計算ノードＢ（２Ｂ）が有しているアプリケーションプログラム）のリード要求時に使用する。
（２）仮想ローカルキャッシュ領域Ａ（２１４Ａ）及びＢ（２１４Ｂ）は、Ｉ／Ｏノード３が計算機ノードＡ（２Ａ）及びＢ（２Ｂ）のローカルキャッシュ領域２１４Ａ、２１４Ｂへのデータ書き込み可否を判定するために、Ｉ／Ｏノード３のキャッシュ管理テーブル３１２２に登場する領域名であり、Ｉ／Ｏノード３のキャッシュ領域３１４における物理的な領域ではない。Ｉ／Ｏノード３が、仮想ローカルキャッシュ領域Ａ（２１４Ａ）及びＢ（２１４Ｂ）にデータ読み書きをすることを決定した場合には、計算機ノードＡ（２Ａ）及びＢ（２Ｂ）に、ローカルキャッシュ領域Ａ（２１４Ａ）及びＢ（２１４Ｂ）に対する読み書き要求を発行する。
（３）ローカルキャッシュ拡張領域３１４１は、ローカルキャッシュ領域Ａ（２１４Ａ）及びＢ（２１４Ｂ）においてデータの上書きが発生した際に、上書き前のデータの移行先として使用するための領域である。
（４）共有キャッシュ領域３１４２は、アプリケーションプログラムＡ（４Ａ）及びＢ（４Ｂ）共に参照したデータを格納するための領域である。アプリケーションプログラムＡ（４Ａ）（Ｂ（４Ｂ））からのリード要求に対して、ローカルキャッシュ領域Ｂ（２１４Ｂ）（Ａ（（２１４Ａ））もしくはローカルキャッシュ拡張領域３１４１についてキャッシュヒットがある場合に、キャッシュヒットしたデータが共有キャッシュ領域３１４２に移行される。
（５）計算ノードＡ（２Ａ）及びＢ（２Ｂ）のローカルキャッシュ領域Ａ（２１４Ａ）、Ｂ（２１４Ｂ）、及びＩ／Ｏノード３のキャッシュ領域３１４内のデータを、アプリケーションプログラムＡ（４Ａ）及びＢ（４Ｂ）のいずれもが、Ｉ／Ｏノード３を仲介することにより使用することができる。【００７１】
＜データの移行処理（１）＞【００７２】
ここでは、ローカルキャッシュ領域Ａ（２１４Ａ）（仮想ローカルキャッシュ領域Ａ（３１４３Ａ））から共有キャッシュ領域３１４２へのデータの移行処理を説明する。【００７３】
記憶デバイス３４のページ内のデータＸを読み出すためのリード要求がアプリケーションプログラムＡ（４Ａ）からあった場合、計算ノードＡ（２Ａ）は、データＸがローカルキャシュ領域Ａ（２１４Ａ）に存在するかどうかを判定することなく、そのリード要求をＩ／Ｏノード３に送信する。Ｉ／Ｏノード３は、データＸを、記憶デバイス３４から通常キャッシュ領域３１４４に読み出し、読み出したデータＸを、リード要求の送信元である計算ノードＡ（２Ａ）に送信する。計算ノード２Ａは、ローカルキャッシュ領域Ａ（２１４Ａ）に、受信したデータＸを格納する。【００７４】
そして、計算ノードＡ（２Ａ）とは別の計算機ノードＢ（２Ｂ）のアプリケーションプログラムＢ（４Ｂ）から、データＸのリード要求があった場合、計算ノードＢ（２Ｂ）は、データＸがローカルキャシュ領域Ｂ（２１４Ｂ）に存在するかどうかを判定することなく、そのリード要求をＩ／Ｏノード３に送信する。Ｉ／Ｏノード３は、そのリード要求を受信し、データＸが仮想ローカルキャッシュ領域Ａ（３１４３Ａ）に格納されていることを特定する。Ｉ／Ｏノード３は、仮想ローカルキャッシュ領域Ａ（３１４３Ａ）に対応しているローカルキャッシュ領域Ａ（２１４Ａ）からデータＸを読み出し、読み出したデータＸを、通常キャッシュ領域３１４４に格納し、通常キャッシュ領域３１４４から計算ノードＢ（２Ｂ）にデータＸを送信する。計算ノードＢ（２Ｂ）は、受信したデータＸを、ローカルキャッシュ領域Ｂ（２１４Ｂ）に格納する。その後、Ｉ／Ｏノード３は、通常キャッシュ領域３１４４に格納されているデータＸ（ローカルキャッシュ領域Ａ（２１４Ａ）から通常キャッシュ領域３１４４へと格納された上記のデータＸ）を、通常キャッシュ領域３１４４から共有キャッシュ領域３１４２に移行する。このため、アプリケーションＢ（４Ｂ）がデータＸを再びリード対象とした場合、たとえローカルキャッシュ領域Ｂ（２１４Ｂ）からデータＸが無くなっていたとしても、データＸが共有キャッシュ領域３１４２に格納されているのでキャッシュヒットがある。これにより、Ｉ／Ｏノード３が計算ノードＢ（２Ｂ）からデータＸをリード対象としたリード要求を受信した場合には、計算ノードＡ（２Ａ）に負荷をかけることなく、さらにアプリケーションＡ（４Ａ）のキャッシュ更新頻度に依存することなくデータＸを高速に送信することができるようになる。【００７５】
＜データ移行処理（２）＞【００７６】
ここでは、ローカルキャッシュ領域Ａ（２１４Ａ）（仮想ローカルキャッシュ領域Ａ（３１４３Ａ））からローカルキャッシュ拡張領域３１４１へのデータの移行処理を説明する。【００７７】
Ｉ／Ｏノード３は、計算ノードＡ（２Ａ）のローカルキャッシュ領域Ａ（２１４Ａ）の残容量（或いは、ローカルキャッシュ領域Ａ（２１４Ａ）の容量に対する残容量の割合である空き領域率）を、キャッシュ更新時にチェックする。そして、計算ノードＡ（２Ａ）のローカルキャッシュ領域Ａ（２１４Ａ）の残容量が、更新データサイズ以下となった場合、Ｉ／Ｏノード３は、ローカルキャッシュ領域Ａ（２１４Ａ）に格納されているデータのうち、所定の条件に該当するデータ（例えば、使用頻度が低いデータ）Ｘを、ローカルキャッシュ領域Ａ（２１４Ａ）（仮想ローカルキャッシュ領域Ａ（３１４３Ａ））からローカルキャッシュ拡張領域３１４１に移行する。【００７８】
＜データ移行処理（３）＞【００７９】
ここでは、ローカルキャッシュ拡張領域３１４１から共有キャッシュ領域３１４２へのデータの移行処理を説明する。【００８０】
データ移行処理（２）が行われてから、アプリケーションプログラムＢ（４Ｂ）から、データＸのリード要求があった場合、計算ノードＢ（２Ｂ）は、そのリード要求をＩ／Ｏノード３に送信する。Ｉ／Ｏノード３は、そのリード要求を受信し、ローカルキャッシュ拡張領域３１４１に格納されているデータＸを、一旦ローカルキャッシュ拡張領域３１４１から通常キャッシュ領域３１４４に移行し、通常キャッシュ領域３１４４から計算ノードＢ（２Ｂ）にデータＸを送信する。計算ノードＢ（２Ｂ）は、受信したデータＸをローカルキャッシュ領域Ｂ（２１４Ｂ）に格納する。その後、Ｉ／Ｏノード３は、通常キャッシュ領域３１４４から共有キャッシュ領域３１４２にデータＸを移行する。【００８１】
このように、所定の条件に適合するデータ（例えば、使用頻度が低くなったデータ）Ｘを、記憶デバイス３４にいきなりスワップアウトするのではなく、一旦、ローカルキャッシュ拡張領域３１４１に格納することにより、データＸを記憶デバイス３４から読み出さなければいけない頻度を削減できる場合がある。また、ローカルキャッシュ拡張領域３１４１に格納されたデータＸが、計算ノードＢ（２Ｂ）のリード対象になった場合、データＸは、共有キャッシュ領域３１４２に移行される。【００８２】
次に、各プログラムによる処理の流れを説明する。【００８３】
図１１は、計算ノード２の構成情報収集プログラム２１１１の処理フローチャートの一例である。【００８４】
構成情報収集プログラム２１１１は、アプリケーションプログラム４から設定用ＡＰＩの実行を検知する（Ｓ１０１）。【００８５】
構成情報収集プログラム２１１１は、設定用ＡＰＩの実行を検知しなかった場合（Ｓ１０１：Ｎｏ）、Ｓ１０１の処理をする。【００８６】
構成情報収集プログラム２１１１は、設定用ＡＰＩの実行を検知した場合（Ｓ１０１：Ｙｅｓ）、構成情報収集プログラム２１１１は、設定ＡＰＩを使って通知される構成情報を収集し（Ｓ１０２）、収集した構成情報を構成管理テーブル２１２１に書き込む（Ｓ１０３）。【００８７】
これにより、構成管理テーブル２１２１が作成又は更新される。【００８８】
図１２は、計算ノード２の情報通知プログラム２１１２の処理フローチャートの一例である。【００８９】
情報通知プログラム２１１２は、Ｉ／Ｏノード３からの構成情報の取得要求があったか否かを判定する（Ｓ２０１）。ここで、構成情報とは、計算ノード２が有している構成管理テーブル２１２１、及びキャッシュ管理テーブル２１２２にて管理されている情報である。【００９０】
情報通知プログラム２１１２は、Ｉ／Ｏノード３からの構成情報の取得要求を検知しなかった場合（Ｓ２１０：Ｎｏ）、計算ノード２のＯＳ起動処理が実行されたかどうかをチェックする（Ｓ２０２）。【００９１】
情報通知プログラム２１１２は、ＯＳ起動処理が実行されたことを検知できなかった場合（Ｓ２０２：Ｎｏ）、Ｓ２０１の処理に戻る。【００９２】
情報通知プログラム２１１２は、ＯＳ起動処理が実行されたことを検知できた場合（Ｓ２０２：Ｙｅｓ）、構成管理テーブル２１２１及びキャッシュテーブル２１２２から、ローカルキャッシュ領域２１３に関する情報を収集し（Ｓ２０３）、収集した情報を構成情報としてＩ／Ｏノード３に送信する（Ｓ２０４）。その後、情報通知プログラム２１１２は、Ｓ２０１の処理を再度行う。【００９３】
情報通知プログラム２１１２は、Ｉ／Ｏノード３からの構成情報の取得要求を検知した場合（Ｓ２０１：Ｙｅｓ）、Ｉ／Ｏノード３からの要求の種類（リード或いはライト）を判定する（Ｓ２０５）。【００９４】
Ｓ２０５の判断において、要求がリード要求だった場合、情報通知プログラム２１１２は、Ｓ２０６の処理を行う。要求がライト要求だった場合、情報通知プログラム２１１２は、Ｓ２０４の処理を行う。【００９５】
Ｓ２０６の判断において、リード要求が構成情報の取得の要求だった場合、情報通知プログラム２１１２は、Ｓ２０３の処理を行う。【００９６】
Ｓ２０６の判断において、リード要求がキャッシュデータ（ローカルキャッシュ領域２１３内のデータ）の取得の要求だった場合、そのリード要求では、物理アドレスが指定されている。構成情報通知プログラム２１１２は、リード要求が有する物理アドレスを用いてキャッシュ管理テーブル２１２２を参照して、リード対象のデータの格納場所を特定し（Ｓ２０７）、特定した格納場所（ローカルキャッシュ領域３１２内の領域）から、リード対象のデータを取得する（Ｓ２０８）、その後、情報通知プログラム２１１２は、Ｓ２０４の処理を行う。【００９７】
図１３は、計算ノード２のキャッシュ管理プログラム２１１３の処理フローチャートの一例である。【００９８】
キャッシュ管理プログラム２１１３は、或るコンピュータプログラム（図１３の説明では、アプリケーションプログラム４とする）が実行されることによりＩ／Ｏ要求が発生したか否かをチェックする（Ｓ３０１）。【００９９】
アプリケーションプログラム４からのＩ／Ｏ要求がない場合（Ｓ３０１：Ｎｏ）、キャッシュ管理プログラム２１１３は、Ｓ３０１の処理をする。【０１００】
アプリケーションプログラム４からのＩ／Ｏ要求があった場合（Ｓ３０１：Ｙｅｓ）、キャッシュ管理プログラム２１１３は、そのＩ／Ｏ要求に従うデータがローカルキャッシュ領域２１４にあるかどうかを判定することなく、Ｉ／Ｏノード３に対して、アプリケーションプログラム４からのＩ／Ｏ要求を送信する（Ｓ３０２）。【０１０１】
キャッシュ管理プログラム２１１３は、Ｉ／Ｏノード３からのＩ／Ｏ要求に対する返信（以下、Ｉ／Ｏ返信と言う）を受信する（Ｓ３０３）。具体的には、例えば、キャッシュ管理プログラム２１１３は、Ｉ／Ｏノード３からのＩ／Ｏ返信に従い、そのＩ／Ｏ返信で指定されている物理アドレスに属する領域（ローカルキャッシュ領域２１４内の領域）に、Ｉ／Ｏ要求に従うデータを格納する。【０１０２】
キャッシュ管理プログラム２１１３は、キャッシュ管理テーブル２１２２を更新する。例えば、キャッシュ管理プログラム２１１３は、キャッシュ管理テーブル２１２２に、Ｉ／Ｏ要求に従うエントリを追加し、その追加したエントリに、受信した返信に含まれるページ番号、物理アドレス、及びデータを格納し、且つ、そのエントリにおいて、有効ビット２１２２３を「有効」に設定する。また、キャッシュ管理プログラム２１１３は、構成管理テーブル２１２１の使用量２１２１２の値を、Ｉ／Ｏノード３からのＩ／Ｏ返信で指定されている値に更新する（Ｓ３０４）。【０１０３】
キャッシュ管理プログラム２１１３は、アプリケーションプログラム４に対して、Ｉ／Ｏ処理の完了を返信する（Ｓ３０５）。【０１０４】
図１４は、Ｉ／Ｏノード３の構成情報収集プログラム３１１１の処理フローチャートの一例である。【０１０５】
Ｉ／Ｏノード３は、計算ノード２からの構成情報の通知要求があるか否かを判定する（Ｓ４０１）。【０１０６】
計算ノード２からの構成情報の通知要求がなかった場合（Ｓ４０１：Ｎｏ）、構成情報収集プログラム３１１１は、Ｓ４０１の処理をする。【０１０７】
計算ノード２からの構成情報の通知要求があった場合（Ｓ４０１：Ｙｅｓ）、構成情報収集プログラム３１１１は、通知要求元の計算ノード２が、新規な計算ノード２か否かを判定する（Ｓ４０２）。新規な計算ノード２とは、アドレス管理テーブル３１２３に登録されていない計算ノードである。具体的に、例えば、構成情報収集プログラム３１１１は、通信が発生したＰＣＩピン番号を特定し、その特定した計算ノード２がアドレス管理テーブル３１２３に登録されていないか否かを判定することにより、その特定した計算ノード２が、新規な計算ノード２であるかを判定する。【０１０８】
構成情報収集プログラム３１１１は、構成情報の通知要求に従う情報を、構成情報としてＩ／Ｏノード３のメモリ３１に格納、及び／又は、構成情報の通知要求に従う情報で、メモリ３１を更新する（Ｓ４０３）。【０１０９】
構成情報収集プログラム３１１１は、計算ノード２が、新規な計算ノード２である場合、その計算ノード２の識別番号として、例えば、ＰＣＩピン番号を設定し、その計算ノード２の使用可能なメモリ２１（ローカルキャッシュ領域２１４）の容量に基づき、メモリ２１に、キャッシュ領域３１４の一部の領域である仮想アドレス３１４３を割当てる（Ｓ４０４）。【０１１０】
構成情報収集プログラム３１１１は、アドレス管理テーブル３１２３に登録されている計算ノード２に関する構成情報、及び／又は、新規な計算ノード２に関する構成情報を、キャッシュ管理テーブル３１２２及びアドレス管理テーブル３１２３に格納する（Ｓ４０５）。その後、構成情報収集プログラム３１１１は、Ｓ４０１の処理を再度行う。【０１１１】
図１４に示した処理によれば、Ｉ／Ｏノード３は、各計算ノード２の計算ノード２の構成管理テーブル２１２１及びキャッシュ管理テーブル２１２２で管理されている情報を一元に管理できるようになる。【０１１２】
図１５は、Ｉ／Ｏノード３の共有キャッシュ管理プログラム３１１２の処理フローチャートの一例である。【０１１３】
共有キャッシュ管理プログラム３１１２は、計算ノード２からのＩ／Ｏ要求があるか否かを判定する（Ｓ５０１）。【０１１４】
計算ノード２からのＩ／Ｏ要求がなかった場合（Ｓ５０１：Ｎｏ）、共有キャッシュ管理プログラム３１１２は、Ｓ５０１の処理を再度する。【０１１５】
計算ノード２からのＩ／Ｏ要求があった場合（Ｓ５０１：Ｙｅｓ）、共有キャッシュ管理プログラム３１１２は、Ｉ／Ｏ要求がリード要求かライト要求であるかを判定する（Ｓ５０２）。【０１１６】
Ｉ／Ｏ要求がリード要求だった場合、共有キャッシュ管理プログラム３１１２は、キャッシュ管理テーブル３１２２から、リード要求に従うデータの格納場所を特定する（Ｓ５０３）。ここで、データの格納場所とは、記憶デバイス３４のページ番号３１２２１を示す。リード要求に従うデータは、当初、ローカルキャッシュ領域３１４１、共有キャッシュ領域３１４２、及び、仮想ローカルキャッシュ領域３１４３に対応付けられているローカルキャッシュ領域２１４の何れにも格納されていない。【０１１７】
共有キャッシュ管理プログラム３１１２は、リード要求に従うデータが格納されている記憶デバイス３４のリード元のページ（リード要求で指定されているアドレスが属するページ）からデータを読み出し、読み出したデータを、通常キャッシュ領域３１４４に格納する（Ｓ５０４）。【０１１８】
共有キャッシュ管理プログラム３１１２は、そのデータを含んだ返信（応答）を、要求元（リード要求の送信元）の計算ノード２に送信する（Ｓ５０５）。【０１１９】
一方、Ｉ／Ｏ要求がライト要求だった場合、共有キャッシュ管理プログラム３１１２は、記憶デバイス３４のライト先のページ（ライト要求で指定されているアドレスが属するページ）に、ライト要求に従うデータ（ライト対象のデータ）をライトする（Ｓ５０６）。ここで、共有キャッシュ管理プログラム３１１２は、通常キャッシュ領域３１４４にライト対象のデータをライトしないが、そのデータを通常キャッシュ領域３１４４に一時格納した上で、そのデータを通常キャッシュ領域３１４４からライト先のページにライトしても良い。【０１２０】
共有キャッシュ管理プログラム３１１２は、キャッシュ管理テーブル３１２２における、ライト先のページに対応する有効ビット３１２２３を「無効」に設定する（Ｓ５０７）。これは、例えば、アプリケーションプログラム４に、キャッシュ領域２１４、３１４に格納されている更新前のデータを使用させないための処理である。この様に処理をするのは、記憶デバイス３４に格納されているデータが更新されたことにより、更新前に記憶デバイス３４からキャッシュ領域２１４、３１４にリードされたデータが、記憶デバイス３４に格納されている更新後データと異なってしまったためである。【０１２１】
共有キャッシュ管理プログラム３１１２は、アドレス管理テーブル３１２３を参照して、Ｓ５０７で有効ビット３１２２３が「無効」となった仮想アドレスに対応する計算ノード２に対して、キャッシュ管理テーブル２１２２の更新要求を送信する（Ｓ５０８）。その更新要求では、Ｓ５０７で有効ビット３１２２３が「無効」となった仮想アドレスに対応する物理アドレスが指定される。【０１２２】
Ｓ５０８の更新要求の送信先の計算ノード２は、その更新要求を受信し、キャッシュ管理テーブル２１２２における、その更新要求で指定されている物理アドレスに対応する有効ビット２１２２３を、「無効」に設定する（Ｓ５０９）。その後、共有キャッシュ管理プログラム３１１２は、Ｓ５０５の処理を再度する。【０１２３】
図１６は、データ取得処理（図１５のＳ５０４）の詳細の一例である。【０１２４】
共有キャッシュ管理プログラム３１１２は、キャッシュ管理テーブル３１２２を参照してキャッシュヒットの有無を判定する（Ｓ６０１）。ここで、「キャッシュヒットの有無」とは、リード対象のデータが、リード要求の送信元の計算ノードに対応した仮想ローカルキャッシュ領域に格納されているか否か、具体的には、リード元のページの番号３１２２１と仮想アドレス３１２２２との対応付けがキャッシュ管理テーブル３１２２に存在するか否かである。【０１２５】
キャッシュヒットしなかった場合（Ｓ６０１：Ｎｏ）、共有キャッシュ管理プログラム３１１２は、リード元ページ（記憶デバイス３４）からリード対象のデータを読み出し（Ｓ６０２）、読み出したデータを通常キャッシュ領域３１４４に格納し、そのデータを、要求元の計算ノード２に対する返信に含め、且つ、キャッシュ管理テーブル３１２２における、リード元ページに対応する有効ビット３１２２３を「有効」に設定する（Ｓ６０３）。【０１２６】
その後、共有キャッシュ管理プログラム３１１２は、要求元の計算ノード２に対応する仮想ローカルキャッシュ領域３１４３について所定の条件が満たされているか否かを判定する（Ｓ６０４）。具体的には、例えば、共有キャッシュ管理プログラム３１１２は、要求元の計算ノード２に対応する仮想ローカルキャッシュ領域３１４３（ローカルキャッシュ領域２１４）について、残容量（或いは空き容量率）が、所定値以下であるか否かを判定する。この判定は、構成管理テーブル３１２１を参照することにより、行うことができる。【０１２７】
要求元の計算ノード２に対応する仮想ローカルキャッシュ領域３１４３について所定の条件が満たされている場合（Ｓ６０４：Ｙｅｓ）、共有キャッシュ管理プログラム３１１２は、スワップアウト処理を実行する（Ｓ６０５）。ここで、「スワップアウト処理」とは、例えば、仮想ローカルキャッシュ領域３１４３（ローカルキャッシュ領域２１４）に格納されているデータのうち使用頻度が低いデータを記憶デバイス３４に移すことである。このスワップアウト処理により、仮想ローカルキャッシュ領域３１４３（ローカルキャッシュ領域２１４）の残容量が多くなる。【０１２８】
キャッシュヒットした場合（Ｓ６０１：Ｙｅｓ）、共有キャッシュ管理プログラム３１１２は、アドレス管理テーブル３１２３を参照して、キャッシュヒットした場所（リード対象データを記憶している領域）がキャッシュ領域３１４上のどの領域か（すなわち、ローカルキャッシュ拡張領域３１４１、共有キャッシュ領域３１４２及び仮想ローカルキャッシュ領域３１４３のいずれであるか）を判定する（Ｓ６０６）。【０１２９】
Ｓ６０６の判定において、キャッシュヒット場所が仮想ローカルキャッシュ領域３１４３だった場合には、共有キャッシュ管理プログラム３１１２は、ＲＤＭＡ転送処理により、仮想ローカルキャッシュ領域３１４３に対応付けられているローカルキャッシュ領域２１４からリード対象のデータを取得し（Ｓ６０７）、データ要求元の計算ノードとデータ取得先の計算ノードが同一かどうかを判定する（Ｓ６０８）。この判定処理は、構成管理テーブル３１２１のノード識別子３１２１１を比較することによって実施する。【０１３０】
Ｓ６０８の判定において、同一ノードではないと判定した場合（Ｓ６０８：Ｎｏ）、共有キャッシュ管理プログラム３１１２は、Ｓ６０３の処理を行う。【０１３１】
Ｓ６０８の判定において、同一ノードであると判定した場合（Ｓ６０８：Ｙｅｓ）、共有キャッシュ管理プログラム３１１２は、その取得したデータを共有キャッシュ領域３１４２にライトする（Ｓ６０９）。その後、共有キャッシュ管理プログラム３１１２は、Ｓ６０３の処理を行う。【０１３２】
Ｓ６０６の判定において、キャッシュヒット場所がローカルキャッシュ拡張領域３１４１だった場合には、共有キャッシュ管理プログラム３１１２は、ローカルキャッシュ拡張領域３１４１からリード対象のデータを取得し（Ｓ６１０）、そのデータを共有キャッシュ領域３１４２にライトする（Ｓ６０９）。その後、共有キャッシュ管理プログラム３１１２は、Ｓ６０３の処理を行う。【０１３３】
Ｓ６０６の判断において、キャッシュヒット場所が共有キャッシュ領域３１４２だった場合には、共有キャッシュ管理プログラム３１１２は、共有キャッシュ領域３１４２からリード対象のデータを取得する（Ｓ６１１）。その後、共有キャッシュ管理プログラム３１１２は、Ｓ６０３の処理を行う。【０１３４】
なお、キャッシュヒットか否かの判定は、例えば、共有キャッシュ領域、仮想ローカルキャッシュ領域及びローカルキャッシュ拡張領域の順に行われて良い。具体的には、例えば、共有キャッシュ管理プログラム３１１２は、共有キャッシュ領域についてキャッシュヒット判定を行い、その判定の結果が否定の場合に、仮想ローカルキャッシュ領域についてキャッシュヒット判定を行い、その判定の結果が否定の場合に、ローカルキャッシュ拡張領域についてキャッシュヒット判定を行って良い。共有キャッシュ領域が最初にキャッシュヒット判定の対象となる理由は、一度共有キャッシュ領域に格納されたデータを優先して活用し、計算ノード２へのアクセス頻度を抑えることにより、アプリケーションプログラム４の性能劣化を抑制することができるからである。
さらに、Ｉ／Ｏノード３の共有キャッシュ管理プログラム３１１２は、キャッシュヒット判定の順序を制御するための設定用ＡＰＩを備え、アプリケーションプログラム４からの指定により判定順序を変更してもよい。【０１３５】
図１７は、スワップアウト処理（図１６のＳ６０４）の詳細の一例である。【０１３６】
スワップアウト処理は、例えば、仮想ローカルキャッシュ領域３１４３に対応付けられているローカルキャッシュ領域２１４の残容量の多寡に基づいて行われる。具体的には、例えば、共有キャッシュ管理プログラム３１１２は、構成管理テーブル３１２１を参照し、要求元の計算ノード２について、容量３１２１３が、使用量３１２１４とライト容量（ライト対象データのサイズ）との和以上か否かを判定する（Ｓ７０１）。【０１３７】
容量３１２１３が使用量３１２１４とライト容量との和以上の場合（Ｓ７０１：Ｙｅｓ）、共有キャッシュ管理プログラム３１１２は、仮想ローカルキャッシュ領域３１４３に対応付けられているローカルキャッシュ領域２１４に、ライト対象のデータをライトし、要求元の計算ノード２の使用量３１２１４に、ライト容量の値を加算する（Ｓ７０２）。【０１３８】
一方、容量３１２１３が使用量３１２１４とライト容量との和未満の場合（Ｓ７０１：Ｎｏ）、共有キャッシュ管理プログラム３１１２は、要求元の計算ノード２のローカルキャッシュ領域２１４に格納されているデータのうち、例えば、LRU（Least  Recently  Used）アルゴリズムなどに基づいて、移行対象データを決定する（Ｓ７０３）。共有キャッシュ管理プログラム３１１２は、移行対象データをローカルキャッシュ領域２１４から読み出し、その移行対象データを通常キャッシュ領域３１４４に一時的に格納する。【０１３９】
共有キャッシュ管理プログラム３１１２は、キャッシュ管理テーブル３１２２及びアドレス管理テーブル３１２３を基に、移行対象データに対応するページ番号を用いて、移行対象データと重複するデータ（一致するデータ）をローカルキャッシュ拡張領域３１４１及び共有キャッシュ領域３１４２から検索する（Ｓ７０４）。【０１４０】
重複するデータがローカルキャッシュ拡張領域３１４１及び共有キャッシュ領域３１４２の何れにも格納されていない場合（Ｓ７０５：Ｎｏ）、共有キャッシュ管理プログラム３１１２は、構成管理テーブル３１２１（ノード識別子３１２１１が「０」のノードの容量３１２１３）を参照し、ローカルキャッシュ拡張領域３１４１について、容量３１２１３が、使用量３１２１４と移行容量（移行対象のデータのサイズ）との和以上か否かを判定する（Ｓ７０６）。【０１４１】
容量３１２１３が使用量３１２１４と移行容量との和以上の場合（Ｓ７０６：Ｙｅｓ）、共有キャッシュ管理プログラム３１１２は、ローカルキャッシュ拡張領域のうちの空いている領域に移行対象データをライトし、構成管理テーブル３１２１における、ローカルキャッシュ拡張領域の使用量３１２１４に、移行容量を加算する（Ｓ７０７）。【０１４２】
一方、容量３１２１３が使用量３１２１４と移行容量との和未満の場合（Ｓ７０６：Ｎｏ）、共有キャッシュ管理プログラム３１１２は、ローカルキャッシュ拡張領域３１４１に格納されているデータの中から、スワップアウトさせるデータを決定し（例えばLRUアルゴリズムに基づいて決定し）、決定したデータを、ローカルキャッシュ拡張領域３１４１から記憶デバイス３４にスワップアウトし、移行対象データをローカルキャッシュ拡張領域３１４３の空いた領域（スワップアウトされたデータが格納されている領域）にライトする（Ｓ７０８）。更に、共有キャッシュ管理プログラム３１１２は、スワップアウトされたデータが格納されている領域（移行対象データの書き込み先の領域）について、キャッシュ管理テーブル３１２２を更新する（Ｓ７０９）。具体的には、例えば、当該領域について、ページ番号３１２１１が、スワップアウトされたデータのページ番号から、移行対象データのページ番号に変わる。なお、本実施例では、スワップアウトされるデータ（決定されたデータ）のサイズは、移行対象データのサイズと一致しており、そのため、Ｓ７０７のような使用量３１２１４の更新は行われないでよい。スワップアウトされるデータ（決定されたデータ）のサイズは、移行対象データのサイズより大きくても良い。【０１４３】
移行対象データが、ローカルキャッシュ拡張領域３１４１及び共有キャッシュ領域３１４２の何れかに格納されている場合（Ｓ７０５：Ｙｅｓ）、共有キャッシュ管理プログラム３１１２は、移行対象データと重複するデータが格納されている場所がローカルキャッシュ拡張領域３１４１なのか、共有キャッシュ領域３１４２なのかを判定する（Ｓ７１０）。【０１４４】
Ｓ７１０の判定において重複データがローカルキャッシュ拡張領域３１４１に格納されている場合、共有キャッシュ管理プログラム３１１２は、構成管理テーブル３１２１を参照し、共有キャッシュ領域３１４２について、容量３１２１３が、使用量３１２１４と重複容量（重複データのサイズ）との和以上か否かを判定する（Ｓ７１１）。【０１４５】
容量３１２１３が使用量３１２１４と重複容量の和以上の場合（Ｓ７１１：Ｙｅｓ）、共有キャッシュ管理プログラム３１１２は、共有キャッシュ領域３１４２に重複データをライトし、構成管理テーブル３１２１における、共有キャッシュ領域の使用量３１２１４に重複データのサイズを加算する（Ｓ７１２）。【０１４６】
容量３１２１３が使用量３１２１４と重複容量の和未満の場合（Ｓ７１１：Ｎｏ）、共有キャッシュ管理プログラム３１１２は、共有キャッシュ領域３１４２からスワップアウトさせるデータを決定し（例えば、LRUアルゴリズムに基づいて決定し）、決定したデータを記憶デバイス３４に格納する。共有キャッシュ管理プログラム３１１２は、共有キャッシュ領域３１４２の空いた領域（スワップアウトされたデータが格納されている領域）に重複データをライトする（Ｓ７１３）。更に、共有キャッシュ管理プログラム３１１２は、ローカルキャッシュ拡張領域３１４１からその重複データを削除する（Ｓ７１４）。その後、共有キャッシュ管理プログラム３１１２は、Ｓ７０９の処理をする。なお、Ｓ７１３で決定されるデータのサイズは、重複データのサイズと一致しているが、重複データのサイズより大きくても良い。【０１４７】
Ｓ７１０の判定において重複データが共有キャッシュ領域３１４２に格納されていた場合、共有キャッシュ管理プログラム３１１２は、処理を終了する。【０１４８】
図１８は、計算ノード２の起動処理の流れを示すフローチャートの一例である。【０１４９】
計算ノード２の電源が投入されると（Ｓ８０１）、計算ノード２（構成情報収集プログラム２１１１）は、キャッシュ管理テーブル２１２２で管理されているデータをすべて削除する初期化処理を実行し（Ｓ８０２）、構成管理テーブル２１２１及びキャッシュ管理テーブル２１２２を、Ｉ／Ｏノード３に送信する（Ｓ８０３）。【０１５０】
Ｉ／Ｏノード３（構成情報収集プログラム３１１１）は、構成管理テーブル２１２１及びキャッシュ管理テーブル２１２２を計算ノード２から受信し、それらテーブル２１２１及び２１２２に基づく情報がアドレス管理テーブル３１２３に既に登録されているかを判定する（Ｓ８０４）。【０１５１】
登録が無い場合（Ｓ８０４：Ｎｏ）、Ｉ／Ｏノード３（構成情報収集プログラム３１１１）は、登録されていない計算ノード２の構成管理テーブル２１２１を参照し、物理アドレス２１２１３と同じ数の仮想アドレス３１２３１を生成し、アドレス管理テーブル３１２３に登録する（Ｓ８０５）。この処理を行うことにより、Ｉ／Ｏノード３の仮想ローカルキャッシュ領域３１４３と、計算ノード２のローカルキャッシュ領域２１４とが対応付けられる。その後、Ｉ／Ｏノード３は、その処理に成功したか否かを判定する（Ｓ８０６）。【０１５２】
処理が成功の場合（Ｓ８０６：Ｙｅｓ）、Ｉ／Ｏノード３は、処理を終了する。一方、処理が失敗の場合（Ｓ８０６：Ｎｏ）、Ｉ／Ｏノード３は、Ｓ８０３の処理を行う。【０１５３】
Ｓ８０４の判定において、登録がある場合（Ｓ８０４：Ｙｅｓ）、Ｉ／Ｏノード３は、アドレス管理テーブル３１２３で該当する計算ノード２の使用状況３１２３５を、すべて未使用に設定する（Ｓ８０７）。その後、Ｉ／Ｏノード３は、Ｓ８０６の処理を行う。【０１５４】
図１９は、Ｉ／Ｏノード３の起動処理の流れを示すフローチャートの一例である。【０１５５】
Ｉ／Ｏノード３の電源が投入されると（Ｓ９０１）、Ｉ／Ｏノード３（構成情報収集プログラム３１１１）は、ＲＤＭＡ機能を用いて、各計算ノード２のメモリ上の制御コマンド格納領域２１５に、データ通知ビットを立て（Ｓ９０２）、各計算ノード２に割り込み通知を送信する（Ｓ９０３）。【０１５６】
計算ノード２（構成情報収集プログラム２１１１）は、Ｉ／Ｏノード３からの割り込み通知を受信し（Ｓ９０４）、メモリ２１の制御コマンド格納領域２１５にデータ通知ビットが格納されていることをチェックし（Ｓ９０５）、Ｉ／Ｏノード３に対して、この計算ノード２が持つキャッシュ管理テーブル２１２２が有する情報を送信する（Ｓ９０６）。【０１５７】
Ｉ／Ｏノード３は、計算ノード２からのキャッシュ管理テーブル２１２２の情報を受信し、その情報に基づく情報を、キャッシュ管理テーブル３１２２に登録する（Ｓ９０７）。Ｉ／Ｏノード３は、Ｓ９０７の処理が成功したか否かを判定する（Ｓ９０８）。【０１５８】
処理が成功の場合（Ｓ９０８：Ｙｅｓ）、Ｉ／Ｏノード３は、処理を終了する。一方、処理が失敗の場合（Ｓ９０８：Ｎｏ）、Ｉ／Ｏノード３は、Ｓ９０２の処理をする。【０１５９】
実施例１によれば、複数の計算ノード２と、Ｉ／Ｏノード３が接続された計算機システム１において、キャッシュ領域上のデータを重複ずに共有することができる。【０１６０】
また、各計算ノード２に、複数の計算ノード２が参照したデータを格納するキャッシュ領域（共有キャッシュ領域）を形成することにより、計算ノード２間で、キャッシュ領域上で使用頻度の高いデータを共有することができる。それ故、各計算ノード１のキャッシュ領域の容量を大きくすることなく、計算ノード３上で動作するアプリケーションプログラムの処理性能を向上させ、さらに計算ノード上のローカルキャッシュ領域に複数の計算ノードからのＩ／Ｏ要求が集中し、アプリケーションプログラムの処理性能の劣化を回避することが期待できる。
【実施例２】
【０１６１】
以下、実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略或いは簡略する。【０１６２】
実施例２では、各計算ノード２は、アプリケーションプログラム４からのＩ／Ｏ要求がある場合、要求されたデータが、計算ノード２のローカルキャッシュ領域２１４に格納されているか否かを判定し、データが格納されている場合、Ｉ／Ｏノード３へＩ／Ｏ要求を送信せず、格納しているデータをアプリケーションプログラム４に返す。【０１６３】
図２０は、実施例２に係るキャッシュ管理プログラム２１１３の処理の流れを示すフローチャートの一例である。【０１６４】
キャッシュ管理プログラム２１１３は、アプリケーションプログラム４からのＩ／Ｏ要求があるか否かを判定する（Ｓ１００１）。【０１６５】
Ｉ／Ｏ要求がない場合（Ｓ１００１：Ｎｏ）、キャッシュ管理プログラム２１１３は、Ｓ１００１の処理をする。【０１６６】
一方、Ｉ／Ｏ要求がある場合（Ｓ１００１：Ｙｅｓ）、キャッシュ管理プログラム２１１３は、キャッシュ管理テーブル２１２２を参照し、要求されたデータがローカルキャッシュ領域２１４に格納されているかを判定する（Ｓ１００２）。【０１６７】
要求されたデータがローカルキャッシュ領域２１４に格納されていない場合（Ｓ１００２：Ｎｏ）、図１３のＳ３０２〜Ｓ３０５の処理と同様の処理が行われる（Ｓ１００３〜Ｓ１００６）。【０１６８】
一方、要求されたデータがローカルキャッシュ領域２１４に格納されている場合（Ｓ１００２：Ｙｅｓ）、キャッシュ管理プログラム２１１３は、Ｉ／Ｏノード３のキャッシュ領域３１４からではなく、ローカルキャッシュ領域２１４からデータを取得する（Ｓ１００７）。キャッシュ管理プログラム２１１３は、アプリケーションプログラム４に対する応答メッセージを生成する（Ｓ１００８）。その後、キャッシュ管理プログラム２１１３は、Ｓ１００６の処理を行う。
【実施例３】
【０１６９】
実施例３を説明する。その際、実施例１及び２との相違点を主に説明し、実施例１及び２との共通点については説明を省略或いは簡略する。【０１７０】
実施例３では、計算ノード２として、物理的なノードの他に、仮想的なノード（仮想計算機）がある。実施例３では、Ｉ／Ｏノード３が無く、いずれかの仮想ノードが、Ｉ／Ｏノード３に代わって、Ｉ／Ｏノード３と同様の処理を行う。【０１７１】
図２１は、実施例３に係る計算機システム１の全体構成を示す。【０１７２】
記憶デバイス３４を持つ計算ノード２Ｄがある。計算ノード２Ｄは、仮想化機構５（例えばハイパバイザ）を実行することで、１以上の仮想サーバ５１を生成し管理する。仮想サーバ５１としては、仮想的な計算ノード２である仮想サーバ５１Ａと、Ｉ／Ｏノード３と同様の処理を行う仮想サーバ５１Ｂとがある。【０１７３】
プロセッサ２２は、メモリ２１のうち仮想サーバ５１Ａに割り当てられたメモリ領域（図示略）に格納された制御プログラム群２１１Ｄ及び管理テーブル群２１２Ｄに基づいて必要な処理を実行することにより、計算ノードとしての処理を実行する。また、プロセッサ２２はメモリ２１のうち仮想サーバ５１Ｂに割り当てられたメモリ領域（図示略）に格納された制御プログラム群３１１及び管理テーブル群３１２に基づいて必要な処理を実行することにより、Ｉ／Ｏノードとしての処理を実行する。【０１７４】
なお、本実施例では、仮想化機構を用いて処理を分割する構成が採用されているが、仮想化機構を用いずにＯＳのスレッド分割またはプロセス分割の機能が採用されてもよい。【０１７５】
以上、幾つかの実施例を説明したが、本発明は、それらの実施例に限らない。【０１７６】
例えば、上述の実施例においては、計算ノード２のキャッシュ管理部２１１３のＳ６０３（図１６参照）の処理で、要求元に対応する領域にデータをライトするとしたが、計算ノード２間でデータが重複しないように、ハッシュ値などを用いて、データを格納する計算ノード２を一意に決定するとしてもよい。【０１７７】
また、上述の実施例において、ローカルキャッシュ領域２１４、ローカルキャッシュ拡張領域３１４１、及び共有キャッシュ領域３１４２のキャッシュデータはアプリケーションプログラム４のＲｅａｄ要求時に更新するとしたが、共有キャッシュ管理プログラム４１１２が制御用ＡＰＩを備え、アプリケーションプログラム４からの指定により、データを配置しても良い。なお、その場合、キャッシュ管理プログラム４１１２の処理におけるＳ６０３、Ｓ６０４、Ｓ６０５の処理は省略し実行しない。【０１７８】
また、上述の実施例においては、Ｉ／Ｏノード３の共有キャッシュ管理プログラム３１１２において、何れかの仮想ローカルキャッシュ３１４３にキャッシュヒットした場合、Ｉ／Ｏノード３を介してＲＤＭＡ通信により、一方の計算ノード２（例えば、計算ノード２Ａ）から他方の計算ノード（例えば、計算ノード２Ｂ）へデータの移行を行うとしたが、Ｉ／Ｏノード３のキャッシュ領域３１４を介さずに、計算ノード２（例えば、計算ノード２Ａ、２Ｂ）間で直接ＲＤＭＡ通信処理を行ってもよい。【０１７９】
また、上述の実施例においては、アプリケーションプログラム４は、ページ番号を指定するＩ／Ｏ要求を送信するとしたが、仮想アドレス指定でＩ／Ｏ要求を送信してもよい。【０１８０】
また、上述の実施例においては、ローカルキャッシュ領域２１４の容量を指定する処理は、計算ノード２の構成情報収集プログラム２１１１が行うとしたが、Ｉ／Ｏノード３が有する構成情報収集プログラム３１１１が行ってもよい。【０１８１】
また、上述の実施例においては、メモリ２１に形成されるローカルキャッシュ拡張領域３１４１は１つとしたが、計算ノード毎に複数形成されてもよい。【０１８２】
また、上述の実施例においては、メモリ３１上で、ローカルキャッシュ拡張領域３１４１と共有キャッシュ領域３１４２とを論理的に分けて管理したが、両者の領域を１つの領域として管理してもよい。【０１８３】
また、上述の実施例においては、ローカルキャッシュ拡張領域３１４１と共有キャッシュ領域３１４２内のデータが重複しないように、両者のキャッシュ領域に格納されているデータが重複しているかどうかをチェックしたが、この処理は、省略されてもよい。【０１８４】
また、上述の実施例においては、計算ノード２とＩ／Ｏノード３のインタフェース２３、３３を、所定の装置を介さずに接続する構成としたが、例えば、計算ノード２のインタフェース２２とＩ／Ｏノード３のインタフェース３３との間にスイッチを介して接続することもできる。こうすると、例えば、計算ノード２及びＩ／Ｏノード３が複数台ある場合、或る計算ノード２から特定のＩ／Ｏノード３にデータを送信したい場合、その計算ノード２は、Ｉ／Ｏ要求と同時にＩ／Ｏノード３を識別する情報をスイッチ装置に送信すれば良い。そうすると、スイッチが特定の計算ノード２を識別し、特定のＩ／Ｏノード３に対して計算ノード２からのＩ／Ｏ要求を振り分けることができる。【０１８５】
また、記憶デバイスは論理領域で構成されて良く、各論理領域は、ＲＡＩＤグループに基づくストライプを構成する要素で良い。各論理領域群は、ライト要求の送信元装置（例えば、ホスト計算機又は別のストレージシステム）に提供される論理ユニットの構成要素でも良いし、ライト要求の送信元装置に提供される仮想的な論理ユニット（例えばThin  Provisioningに従う論理ユニット）を構成する複数の仮想セグメント（仮想的な記憶領域）のいずれかに動的に割り当てられる領域群（仮想セグメントに対するライトに応じてそのライト先の仮想セグメントに割り当てられる領域群）であっても良い。後者の場合、記憶領域プールが、複数の論理セグメントで構成されていて、論理セグメント単位で、仮想セグメントに割り当てられても良い。記憶領域プールは、複数の論理ユニットで構成されて良く、その場合、各論理ユニットが、２以上の論理セグメントで構成されていて良い。【０１８６】
また、スワップアウト処理は、Ｉ／Ｏ要求を受けて行われる一連の処理（図１５のＳ５０４）の中で行われることに代えて又は加えて、別のタイミングで行われても良い。【０１８７】
以上が、実施例１〜３の説明である。実施例１〜３では、複数の計算ノード２のローカルキャッシュ領域に配置されるデータがＩ／Ｏノード３のキャッシュ領域３１４に一元的に管理される。つまり、Ｉ／Ｏノード３が、計算ノード２のローカルキャッシュ領域のデータの配置を制御するキャッシュ制御処理を行う。しかし、その場合、いずれの計算ノード２でＩ／Ｏが発生しても、計算ノード２とＩ／Ｏノード３との間で通信が発生し、故に、帯域の利用効率が悪くなる可能性がある。【０１８８】
そこで、以下の実施例４〜６では、複数の計算ノードが（実施例５では更に管理ノードも）、それぞれ、キャッシュ制御処理を行う。
【実施例４】
【０１８９】
実施例４を説明する。その際、実施例１〜３との相違点を主に説明し、実施例１〜３との共通点については説明を省略或いは簡略する。また、以下の説明では、同種の要素を区別して説明する場合には、参照符号の全てを使用し（例えば、計算ノード２Ａ、２Ｂ）、同種の要素を区別しないで説明する場合には、参照符号のうちの共通符号のみを使用する（例えば、計算ノード２）場合がある。なお、これは、実施例１〜３についても同様でよい。【０１９０】
実施例４では、計算ノード２（具体的には、図２３のキャッシュ管理プログラム２１１３）がキャッシュ制御処理を行う。【０１９１】
図５０は、実施例４に係るキャッシュ制御処理に伴うデータ移行を説明するための模式図である。なお、図５０の説明において、計算機システム１が、実質的に、図２２にて説明した（１）、（３）及び（４）の通りであるとする。【０１９２】
＜データの移行処理＞【０１９３】
ここでは、ローカルキャッシュ領域Ａ（２１４Ａ）から共有キャッシュ領域３１４２へのデータＸの移行処理を説明する。【０１９４】
まず、その前提として、計算ノードＡ（２Ａ）のアプリケーションプログラムＡ（４Ａ）からデータＸをリードするためのリード要求があり、計算ノードＡ（２Ａ）は、そのリード要求をＩ／Ｏノード３に送信し、そのリード要求に対してＩ／Ｏノード３から受信したデータＸを、ローカルキャッシュ領域Ａ（２１４Ａ）に格納しているとする。【０１９５】
また、各計算ノード２は、キャッシュ管理テーブル２１２２と後述のアドレス管理テーブル２１２３（図２５参照）を有している。各計算ノード２が有しているこれらのテーブル２１２２及び２１２３は、所定の契機で他の計算ノード２に送信される。また、Ｉ／Ｏノード３が有するアドレス管理テーブル３１２３も、所定の契機で計算ノード２に送信される。【０１９６】
各計算ノード２は、これらのテーブル２１２２、２１２３、及びアドレス管理テーブル３１２３を用いることにより、データが自身の計算ノード２のキャッシュ領域に格納されている場合だけでなく、他の計算ノード２及びＩ／Ｏノード３のキャッシュ領域に格納されている場合も、そのデータの物理的な位置を特定することができる。例えば、下記の通りである。
（１）計算ノードＢ（２Ｂ）のアプリケーションプログラムＢから、データＸのリード要求（正確には、例えば、データＸが格納されているページのアドレスを指定したリード要求）があった場合、計算ノードＢ（２Ｂ）は、計算ノードＢ（２Ｂ）が有するキャッシュ管理テーブル２１２２及びアドレス管理テーブル２１２３を用いることにより、データＸが計算ノードＡ（２Ａ）のローカルキャッシュ領域Ａ（２１４Ａ）に格納されていることを特定する。
（２）計算ノードＢ（２Ｂ）は、ＲＤＭＡ転送処理により、計算ノードＡ（２Ａ）のローカルキャッシュ領域Ａ（２１４Ａ）からデータＸを取得する。具体的には、計算ノードＢ（２Ｂ）は、データＸの仮想アドレス（又は物理アドレス）を指定したリード要求を計算ノードＡ（２Ａ）に送信する。計算ノードＡ（２Ａ）が、そのリード要求を受信し、そのリード要求で指定されている仮想アドレス（又は物理アドレス）とテーブル２１２３（及び２１２２）とを基に、データＸをローカルキャッシュ領域Ａ（２１４Ａ）から読み出し、読み出したデータＸを計算ノードＢ（２Ｂ）に送信する。【０１９７】
その後、計算ノードＡ（２Ａ）は、計算ノードＡ（２Ａ）を介することなく他の計算ノードＢ（２Ｂ）もデータＸを使用できるように、データＸを共有キャッシュ領域３１４２に格納する。以後、計算ノードＢ（２Ｂ）は、共有キャッシュ領域３１４２からデータＸを取得するようになる。これにより、使用頻度の高いデータＸを格納している計算ノードＡ（２Ａ）に、他の計算ノードＢ（２Ｂ）からのアクセスによる負荷が掛かることを回避することができる。【０１９８】
本実施例において、Ｉ／Ｏノード３のキャッシュ領域３１４が有する複数の領域のうち計算ノードＡ（２Ａ）が所望する領域（例えば共有キャッシュ領域３１４２）にデータＸを計算ノードＡ（２Ａ）がＩ／Ｏノード３に格納させる方法は、２通りある。以下、その２通りの方法をそれぞれ説明する。【０１９９】
＜共有キャッシュ領域３１４２にデータＸを格納する方法１＞
（３−１）計算ノードＡ（２Ａ）（例えば、計算ノードＡ（２Ａ）のキャッシュ管理プログラム）は、Ｉ／Ｏノード３に対して、データＸの特殊リード要求を送信する。データＸの特殊リード要求は、ローカルキャッシュ領域Ａ（２１４Ａ）に格納されているデータＸが他の計算ノードＢ（２Ｂ）から取得された場合に、送信される。ここで、「特殊リード要求」とは、Ｉ／Ｏノード３のキャッシュ領域３１４における領域を表す情報を含んだリード要求である。「キャッシュ領域３１４における領域を表す情報」は、キャッシュ領域３１４のアドレス（仮想アドレス又は物理アドレス）でもよいし、キャッシュ領域３１４における領域の種類（例えば、共有キャッシュ領域３１４２又はローカルキャッシュ拡張領域３４１１）を表すフラグのオン／オフでもよい。本実施例では、キャッシュ領域３１４のアドレス（仮想アドレス又は物理アドレス）が採用される。一般的なリード要求では、Ｉ／Ｏノード３が計算ノードに提供する論理ボリュームの領域を表す情報（例えば、ＬＵＮ（Logical  Unit  Number）及びＬＢＡ（Logical  Block  Address））は指定されるものの、キャッシュ領域３１４における領域を表す情報は指定されない。このような一般的なリード要求と区別するために、便宜上、キャッシュ領域３１４における領域を表す情報を含んだリード要求を「特殊リード要求」と言う。特殊リード要求では、キャッシュ領域３１４における領域を表す情報に加えて、論理ボリュームの領域を表す情報が指定されてもよい。特殊リード要求を受けたＩ／Ｏノード３は、記憶デバイス３４からデータＸを読み出し、読み出したデータＸを、特殊リード要求で指定されている、共有キャッシュ領域３１４２における領域、に格納し、その後、データＸを計算ノードＡ（２Ａ）に送信する。
（３−２）計算ノードＡ（２Ａ）は、Ｉ／Ｏノード３からデータＸを受信し、そのデータＸをローカルキャッシュ領域Ａ（２１４Ａ）に格納せず、ローカルキャッシュ領域Ａ（２１４Ａ）に格納されているデータＸを無効にする。「ローカルキャッシュ領域Ａ（２１４Ａ）に格納されているデータＸを無効にする」とは、ローカルキャッシュ領域Ａ（２１４Ａ）からデータＸを削除することでもよいし、計算ノードＡ（２Ａ）がデータＸを無効データとして管理することでもよい。【０２００】
この方法１では、Ｉ／Ｏノード３は、計算ノードＡ（２Ａ）から特殊リード要求を受信し、その特殊リード要求に基づいて、データＸを共有キャッシュ領域３１４２に格納する。すなわち、方法１では、Ｉ／Ｏノード３は、記憶デバイス３４からデータＸを読み出す処理と、読み出したデータＸを計算ノードＡ（２Ａ）に送信する処理とを行う。【０２０１】
＜共有キャッシュ領域３１４２にデータＸを格納する方法２＞
（４−１）計算ノードＡ（２Ａ）は、Ｉ／Ｏノード３に対して、データＸの特殊ライト要求を送信する。データＸの特殊ライト要求は、ローカルキャッシュ領域Ａ（２１４Ａ）に格納されているデータＸが他の計算ノードＢ（２Ｂ）から取得された場合に、送信される。ここで、「特殊ライト要求」とは、Ｉ／Ｏノード３のキャッシュ領域３１４における領域を表す情報を含んだライト要求である。「キャッシュ領域３１４における領域を表す情報」は、本実施例では、前述したように、キャッシュ領域３１４のアドレス（仮想アドレス又は物理アドレス）である。一般的なライト要求では、Ｉ／Ｏノード３が計算ノードに提供する論理ボリュームの領域を表す情報は指定されるものの、キャッシュ領域３１４における領域を表す情報は指定されない。このような一般的なライト要求と区別するために、便宜上、キャッシュ領域３１４における領域を表す情報を含んだライト要求を「特殊ライト要求」と言う。特殊ライト要求は、ライト対象のデータをキャッシュ領域３１４における領域に書き込むが論理ボリュームに書き込まないための要求である。例えば、特殊ライト要求では、キャッシュ領域３１４における領域を表す情報が指定されるが、論理ボリュームの領域を表す情報は指定されない（又は、論理ボリュームの領域を表す情報がダミーで指定されてその論理ボリュームにはデータを書き込まないことを意味するフラグのような情報が指定される）。Ｉ／Ｏノード３は、データＸの特殊ライト要求を受信し、その特殊ライト要求に従い、その特殊ライト要求に関連付けられているデータＸを共有キャッシュ領域３１４２に格納する。
（４−２）計算ノードＡ（２Ａ）は、ローカルキャッシュ領域Ａ（２１４Ａ）に格納されているデータＸを無効とする。【０２０２】
計算ノード２は、特殊リード要求及び特殊ライト要求を、例えば、Ｉ／Ｏノード３が提供するキャッシュ制御ＡＰＩ（Application  Program  Interface）を使用して送信してよい。【０２０３】
計算ノードＡ（２Ａ）は、特殊リード要求と特殊ライト要求を計算ノードＡ（２Ａ）又はＩ／Ｏノード３の状況に応じて使い分けてもよい。例えば、計算ノードＡ（２Ａ）は、転送データが大きい場合、又は他の計算ノード２からのＩ／Ｏ要求が頻発している場合には、転送処理を短時間で完了させるために特殊ライト要求を選択し、それ以外の場合に特殊リード要求を選択してもよい。【０２０４】
また、上述の方法１及び２のいずれにおいても、データＸが要求された計算ノードＡ（２Ａ）に代えて、データＸを要求した計算ノードＢ（２Ｂ）が、データＸの特殊リード要求又は特殊ライト要求をＩ／Ｏノード３に送信してもよい。【０２０５】
具体的には、方法１では、計算ノードＢ（２Ｂ）は、データＸを計算ノードＡ（２Ａ）から取得する前に、データＸの特殊リード要求をＩ／Ｏノード３に送信してよい。この場合、データＸはローカルキャッシュ領域Ｂ（２１４Ｂ）に格納されていないので、計算ノードＢ（２Ｂ）は、データＸを無効とする処理を行う必要が無い。また、計算ノードＡ（２Ａ）は、データＸが計算ノードＢ（２Ｂ）により取得された場合に、そのデータＸをローカルキャッシュ領域Ａ（２１４Ａ）から無効とする。【０２０６】
また、方法１では、計算ノードＢ（２Ｂ）は、データＸを計算ノードＡ（２Ａ）から取得した後に、データＸの特殊リード要求をＩ／Ｏノード３に送信してよい。この場合、データＸはローカルキャッシュ領域Ｂ（２１４Ｂ）に格納されているので、計算ノードＢ（２Ｂ）は、データＸを無効とする処理を行う。また、計算ノードＡ（２Ａ）は、データＸが計算ノードＢ（２Ｂ）により取得された場合に、計算ノードＢからの特殊リード処理完了通知を受信した後、そのデータＸをローカルキャッシュ領域Ａ（２１４Ａ）から無効とする。【０２０７】
一方、方法２では、計算ノードＢ（２Ｂ）は、データＸを計算ノードＡ（２Ａ）から取得した後に、データＸの特殊ライト要求をＩ／Ｏノード３に送信する。【０２０８】
以下、実施例４をより詳細に説明する。【０２０９】
図２３は、実施例４に係る計算ノード２の構成の一例を示すブロック図である。【０２１０】
メモリ２１が、制御プログラム群２１１と管理テーブル群２１２とを記憶する。【０２１１】
制御プログラム群２１１が有するプログラム２１１１〜２１１３は、例えば実施例１の制御プログラム群２１１が有するプログラム２１１１〜２１１３とそれぞれ異なっていてよい。少なくとも、キャッシュ管理プログラム２１１３は、実施例１のキャッシュ管理プログラム２１１３と異なる。例えば、キャッシュ管理プログラム２１１３は、実施例１のキャッシュ管理プログラム２１１３と同様の処理に加えて、図５０を参照して説明したようなデータ移行処理を実行する。【０２１２】
制御テーブル群２１２が有するテーブル２１２１及び２１２２は、例えば実施例１の制御テーブル群２１２が有するテーブル２１２１及び２１２２とそれぞれ異なっていてよい。例えば、キャッシュ管理テーブル２１２２は、図示しないが、図７のキャッシュ管理テーブル２１２２の物理アドレス２１２２２が仮想アドレスでよい。【０２１３】
また、制御テーブル群２１２は、更に、アドレス管理テーブル２１２３を有する。アドレス管理テーブル２１２３の詳細は後述する。【０２１４】
図２４は、実施例４に係る計算ノード２Ａのメモリ２１の使用方法を説明するための模式図である。【０２１５】
メモリ２１が、ＯＳ割当て領域２１３、ローカルキャッシュ領域Ａ（２１４Ａ）及び制御コマンド格納領域２１５に加え、仮想ローカルキャッシュ拡張領域２１４１、仮想共有キャッシュ領域２１４２、仮想ローカルキャッシュ領域Ｂ（２１４３Ｂ）及びＣ（２１４３Ｃ）を有する。つまり、実施例４では、メモリ２１の記憶領域として、物理的な領域２１３、２１４Ａ及び２１５に加えて、仮想的な領域２１４１、２１４２、２４１３Ｂ及び２４１３Ｃが管理される。仮想ローカルキャッシュ拡張領域２１４１は、Ｉ／Ｏノード３のローカルキャッシュ拡張領域３１４１に対応付けられた領域であり、仮想共有キャッシュ領域２１４２は、Ｉ／Ｏノード３の共有キャッシュ領域３１４２に対応付けられた領域である。また、仮想ローカルキャッシュ領域Ｂ（２１４３Ｂ）及びＣ（２１４３Ｃ）は、それぞれ、他の計算ノードＢ（２Ｂ）及びＣ（２Ｃ）のローカルキャッシュ領域Ｂ（２１４Ｂ）及びＣ（２１４Ｃ）に対応付けられている。メモリ２１のキャッシュ領域２４００１が、ローカルキャッシュ領域Ａ（２１４Ａ）と、仮想的な領域２１４１、２１４２、２４１３Ｂ及び２４１３Ｃとで構成される。【０２１６】
図２５は、実施例４に係る計算ノード２Ａのアドレス管理テーブル２１２３の一例を示す。【０２１７】
アドレス管理テーブル２１２３の構成は、実施例１におけるＩ／Ｏノード３のアドレス管理テーブル３１２３（図１０参照）と同様である。つまり、情報２１２３１〜２１２３５は、実施例１の情報３１２３１〜３１２３５とそれぞれ同じである。但し、図２５によれば、属性値２１２３２「拡張」及び「共有」に対応した物理位置２１２３３は、実施例１の物理位置３１２３３と異なり、「Ｉ／Ｏノード」となる。ローカルキャッシュ拡張領域３１４１及び共有キャッシュ領域３１４２の実体はＩ／Ｏノード３に存在するからである。【０２１８】
計算ノードＡ（２Ａ）は、このアドレス管理テーブル２１２３と、前述のキャッシュ管理テーブル２１２２とを用いて、読み出し対象のデータが、計算ノードＡ（２Ａ）のローカルキャッシュ領域Ａ（２１４Ａ）に格納されているのか、或いは、他の計算ノードＢ（２Ｂ）、Ｃ（２Ｃ）又はＩ／Ｏノード３のキャッシュ領域３１４に格納されているのかを判定することができる。【０２１９】
図２６は、実施例４に係るＩ／Ｏノード３のメモリ３１の使用方法を説明するための模式図である。図２７は、実施例４に係るアドレス管理テーブル３１２３の一例を示す。【０２２０】
実施例４では、Ｉ／Ｏノード３は、実施例１における仮想ローカルキャッシュ領域３１４３を管理しない。このため、メモリ３１のキャッシュ領域３１４は、ローカルキャッシュ拡張領域３１４１、共有キャッシュ領域３１４２及び通常キャッシュ領域３１４４を有するが、仮想ローカルキャッシュ領域３１４３Ａ〜Ｃを有しない。また、Ｉ／Ｏノード３は、仮想ローカルキャッシュ領域３１４３Ａ〜Ｃを管理しないため、アドレス管理テーブル３１２３では、属性値３１２３２の値に「仮想Ａ」〜「仮想Ｃ」が格納されない。【０２２１】
図２８は、実施例４に係る計算ノード２のキャッシュ管理プログラム２１１３の処理フローチャートの一例である。【０２２２】
キャッシュ管理プログラム２１１３は、Ｓ３０１でアプリケーションプログラム４から受けたＩ／Ｏ要求がライト要求であるかリード要求であるかを判定する（Ｓ２８０１）。ライト要求であれば（Ｓ２８０１：Ｎｏ）、キャッシュ管理プログラム２１１３は、そのライト要求をＩ／Ｏノード３に対して転送しその応答を受信した後、実施例１で説明したＳ３０２〜Ｓ３０５を行い、そのＩ／Ｏ要求がリード要求であれば（Ｓ２８０１：Ｙｅｓ）、データ取得処理を実行し（Ｓ３０６）、その後、Ｓ３０４及びＳ３０５を行う。【０２２３】
図２９は、実施例４に係る計算ノード２計算ノード２のデータ取得処理（図２８のＳ３０６）の詳細の一例である。【０２２４】
キャッシュ管理プログラム２１１３は、キャッシュ管理テーブル２１２２を参照してキャッシュヒットかキャッシュミスのどちらが起こったかを判定する（Ｓ１１０１）。リード元ページ（リード要求で指定されているアドレス（論理ボリュームのアドレス範囲におけるアドレス）が属するページ）のページ番号を含んだエントリがあれば、キャッシュヒットが起こる。なお、アドレスが属するページは、例えば、計算ノード２が有する図示しないテーブルにアドレスとページの関係が登録されていて計算ノードがそのテーブルも参照することにより特定されてもよいし、計算ノード２の計算によって特定されてもよい。【０２２５】
キャッシュミスが起こった場合（Ｓ１１０１：Ｎｏ）、キャッシュ管理プログラム２１１３は、リード元ページ（記憶デバイス３４）からリード対象のデータを読み出し（Ｓ１１０２）、読み出したデータをローカルキャッシュ領域２１４に格納する（Ｓ１１０３）。Ｓ１１０２が、図１３のＳ３０２及びＳ３０３に対応する。キャッシュ管理プログラム２１１３は、アドレス管理テーブル２１２３における、Ｓ１１０３での格納先の仮想アドレスに対応する使用状況２１２３５を「使用」に変更し、他の各計算ノード２に、自身のアドレス管理テーブル２１２３の変更内容（例えば、変更箇所を含んだレコードの情報全て）を通知する（Ｓ１１０４）。【０２２６】
その後、キャッシュ管理プログラム２１１３は、ローカルキャッシュ領域２１４について所定の条件が満たされているか否かを判定する（Ｓ１１０５）。具体的には、例えば、キャッシュ管理プログラム２１１３は、ローカルキャッシュ領域２１４について、残容量（或いは空き容量率）が、所定値以下であるか否かを判定する。この判定は、キャッシュ管理プログラム２１１３が構成管理テーブル２１２１を参照することにより行うことができる。ローカルキャッシュ領域２１４について所定の条件が満たされている場合（Ｓ１１０５：Ｙｅｓ）、キャッシュ管理プログラム２１１３は、スワップアウト処理を実行する（Ｓ１１０６）。【０２２７】
キャッシュヒットが起こった場合（Ｓ１１０１：Ｙｅｓ）、キャッシュ管理プログラム２１１３は、アドレス管理テーブル２１２３を参照して、リード対象データを記憶している領域（以下、図２９の説明において「ヒット領域」）が、ローカルキャッシュ領域２１４、ローカルキャッシュ拡張領域２１４１、共有キャッシュ領域２１４２、仮想ローカルキャッシュ領域２１４３Ｂ及び２１４３Ｃのいずれであるかを判定する（Ｓ１１０７）。【０２２８】
Ｓ１１０７の判定において、ヒット領域がローカルキャッシュ拡張領域２１４１または共有キャッシュ領域２１４２である場合には、キャッシュ管理プログラム２１１３は、アドレス管理テーブル２１２３を用いて、Ｉ／Ｏノード３にリード対象データを取得することを要求する（Ｓ１１０８）。具体的には、キャッシュ管理プログラム２１１３は、ローカルキャッシュ拡張領域２１４１又は共有キャッシュ領域２１４２に対応したアドレス（例えば物理アドレス）を指定し論理ボリュームのアドレスを指定しない特殊リード要求を送信する。キャッシュ管理プログラム２１１３は、Ｓ１１０８の要求について、キャッシュヒットとキャッシュミスのいずれが起こったかを判定する（Ｓ１１０９）。Ｓ１１０８の開始から所定時間以内にデータを受信した場合、キャッシュヒットが起こったと判定される。Ｓ１１０８の開始から所定時間以内にデータを受信できなかった場合、キャッシュミスが起こったと判定される。キャッシュヒットが起こった場合（Ｓ１１９０：Ｙｅｓ）、キャッシュ管理プログラム２１１３は、受信したデータをメモリ２１に一時格納する。キャッシュミスが起こった場合（Ｓ１１０９：Ｎｏ）、キャッシュ管理プログラム２１１３は、Ｓ１１０３を行う。【０２２９】
Ｓ１１０９の判定により、Ｓ１１０１でキャッシュヒットが判定された後にＩ／Ｏノード３においてスワップアウト処理が行われたことにより共有キャッシュ領域２１４２からリード対象のデータが無くなってしまった場合や、Ｉ／Ｏノード３が高負荷になったため処理遅延が発生した場合に、計算ノード２がそのような場合を検知することができる。そして、そのような場合が検知されたならば、計算ノード２は、リード対象データをローカルキャッシュ領域２１４に格納する。これにより、計算機システム１全体としての性能の劣化を抑止することができる。【０２３０】
さて、Ｓ１１０７の判定において、ヒット領域が仮想ローカルキャッシュ領域２１４３である場合には、キャッシュ管理プログラム２２１１３は、ＲＤＭＡ転送処理により、仮想ローカルキャッシュ領域Ｂ（２１４３Ｂ）（又はＣ（２１４３Ｃ））に対応付けられているローカルキャッシュ領域Ｂ（２１４Ｂ）（又はＣ（２１４Ｃ））からリード対象のデータを取得する（Ｓ１１１０）その後、取得したデータを共有キャッシュ領域２１４２に移すために、キャッシュ管理プログラム２１１３は、Ｉ／Ｏノード３に、取得したデータの特殊ライト要求（共有キャッシュ領域２１４２のアドレスを指定した特殊ライト要求）（又は特殊リード要求）を送信する（Ｓ１１１１）。キャッシュ管理プログラム２１１３は、アドレス管理テーブル２１２３における、リード元の仮想アドレスに対応する使用状況２１２３５を「未使用」に変更し、他の各計算ノード２に、自身のアドレス管理テーブル２１２３の変更内容を通知する（Ｓ１１１２）。他の各計算ノード２では、受信したアドレス管理テーブル２１２３の変更内容に基づいて、アドレス管理テーブル２１２３を更新する。【０２３１】
Ｓ１１０７の判定において、ヒット領域がローカルキャッシュ領域２１４である場合、キャッシュ管理プログラム２２１１３は、キャッシュ管理テーブル２１２２を参照してローカルキャッシュ領域からリード対象データを取得する（Ｓ１１０８）。【０２３２】
図３０は、実施例４に係る計算ノード２のスワップアウト処理（図２９のＳ１１０６）の詳細の一例である。【０２３３】
スワップアウト処理は、ローカルキャッシュ領域２１４の残容量の多寡に基づいて行われる。具体的には、例えば、キャッシュ管理プログラム２１１３は、構成管理テーブル２１２１を参照し、容量２１２１３が、使用量２１２１４とライト容量（ライト対象データのサイズ）との和以上か否かを判定する（Ｓ１２０１）。【０２３４】
容量２１２１３が使用量２１２１４とライト容量との和以上の場合（Ｓ１２０１：Ｙｅｓ）、キャッシュ管理プログラム２１１３は、ローカルキャッシュ領域２１４に、ライト対象のデータをライトし、使用量２１２１４に、ライト容量の値を加算する（Ｓ１２０２）。【０２３５】
一方、容量２１２１３が使用量２１２１４とライト容量との和未満の場合（Ｓ１２０１：Ｎｏ）、キャッシュ管理プログラム２１１３は、ローカルキャッシュ領域２１４に格納されているデータのうち、例えば、LRU（Least  Recently  Used）アルゴリズムなどに基づいて、移行対象データを決定する（Ｓ１２０３）。次に、キャッシュ管理プログラム２１１３は、決定した移行対象データをローカルキャッシュ領域２１４から読み出し、読み出したデータをローカルキャッシュ拡張領域２１４１へライトする特殊ライト要求を、Ｉ／Ｏノード３に対して発行する（Ｓ１２０４）。更に、キャッシュ管理プログラム２１１３は、スワップアウトされたデータが格納されている領域（移行対象データの書き込み先の領域）について、キャッシュ管理テーブル２１２２を更新する（Ｓ１２０５）。具体的には、例えば、当該領域について、ページ番号２１２１１が、スワップアウトされたデータのページ番号から、移行対象データのページ番号に更新される。本実施例では、スワップアウトされるデータ（決定されたデータ）のサイズは、移行対象データのサイズと一致させている。そのため、ここでは、Ｓ１２０２のような使用量２１２１４の更新は行われないでよい。【０２３６】
なお、スワップアウトされるデータ（決定されたデータ）のサイズは、移行対象データのサイズより大きくても良い。【０２３７】
図３１は、実施例４に係るＩ／Ｏノード３のデータ取得処理（図１５のＳ５０４）の詳細の一例である。【０２３８】
Ｉ／Ｏノード３の共有キャッシュ管理プログラム３１１２は、Ｉ／Ｏノード３の共有キャッシュ領域３１４２のみを管理する。したがって、キャッシュヒットが起こった場合（Ｓ６０１：Ｙｅｓ）、共有キャッシュ管理プログラム３１１２は、共有キャッシュ領域３１４２からデータを取得する（Ｓ６１１）。一方、キャッシュミスが起こった場合（Ｓ６０１：Ｎｏ）、共有キャッシュ管理プログラム３１１２は、実施例１と同じ処理を実施する。ただし、実施例４に係るスワップアウト処理（Ｓ６０５）は、実施例１に係るスワップアウト処理（Ｓ６０５）と異なる。【０２３９】
図３２は、実施例４に係るＩ／Ｏノード３のスワップアウト取得処理（図３１のＳ６０５）の詳細の一例である。【０２４０】
前述したように、Ｉ／Ｏノード３の共有キャッシュ管理プログラム３１１２は、共有キャッシュ領域３１４２のみを管理する。したがって、共有キャッシュ管理プログラム３１１２は、Ｓ７０１において共有キャッシュ領域３１４２に対する容量超過判定のみを行った後、容量３１２１３が使用量３１２１４とライト容量との和以下の場合（Ｓ７０１：Ｎｏ）、共有キャッシュ領域３１４２からデータを削除する（Ｓ７１５）。【０２４１】
実施例４によると、計算ノード２の間でキャッシュデータをやり取りする処理において、Ｉ／Ｏノード３が介在する必要がなくなるため、計算ノード２とＩ／Ｏノード３の間のネットワークの負荷が抑止されることにより、帯域の利用効率が向上し、Ｉ／Ｏノード３の処理負荷が低減する。【０２４２】
また、実施例４では、計算ノード２のキャッシュ管理プログラム２１１３は、アプリケーションプログラムから新たなデータをライトする処理を受信したことを契機に、共有キャッシュ領域３１４２に新たなデータが格納されているかを判定することができる。そして、共有キャッシュ領域３１４２に新たなデータが格納されている場合、キャッシュ管理プログラム２１１３は、その新たなデータをローカルキャッシュ領域２１４にライトしないこともできる。【０２４３】
また、実施例４では、キャッシュ管理プログラム２１１３は、ローカルキャッシュ拡張領域３１４１から共有キャッシュ領域３１４２へデータを移動させる際、Ｉ／Ｏノード３に対して、以下の（１）乃至（３）の処理を行なわせるコマンドを送信することもできる。
（１）ローカルキャッシュ拡張領域３１４１から読み出し対象のデータを読み出す。
（２）読み出したデータを共有キャッシュ領域３１４２に書き込む。
（３）リード元のローカルキャッシュ拡張領域３１４１に格納されている読み出し対象のデータを無効とする。【０２４４】
また、実施例４では、計算ノード２は、記憶デバイスの一部の記憶領域を、キャッシュ領域として利用してもよい。また、Ｉ／Ｏノード３は、記憶デバイス３４の一部の記憶領域を、キャッシュ領域として利用してもよい。メモリ２１（３１）と、計算ノード２が有する記憶デバイス及び記憶デバイス３４は、一般にＩ／Ｏ性能が異なるが、計算ノード２及びＩ／Ｏノード３の少なくとも一方において、それらのＩ／Ｏ性能の違いに応じたキャッシュ制御処理が行われてよい。
【実施例５】
【０２４５】
実施例５を説明する。その際、実施例１〜４との相違点を主に説明し、実施例１〜４との共通点については説明を省略或いは簡略する。【０２４６】
実施例５では、計算ノード２及びＩ／Ｏノード３の両方に接続された管理サーバ５（具体的には後述のキャッシュ管理プログラム５１１３）がキャッシュ制御処理を行う。【０２４７】
Ｉ／Ｏ量（入出力されるデータの総量）とアプリケーションプログラム４の性能（典型的にはＩ／Ｏ性能）には必ずしも相関がない。このため、Ｉ／Ｏ量に基づいた一般的なＬＲＵロジックが使用されると、アプリケーションプログラムの性能向上に貢献し得ないデータがキャッシュ領域に格納される可能性がある。すなわち、Ｉ／Ｏ量に基づいた一般的なＬＲＵロジックが使用されると、キャッシュの容量効率が低下する可能性がある。【０２４８】
そこで、実施例５では、以下に説明する処理が行われる。【０２４９】
図５１は、実施例５に係るキャッシュ制御処理を説明するための模式図である。【０２５０】
管理ノード５は、各アプリケーションプログラム４の性能（例えばＩ／Ｏ性能）に関する性能情報を記憶する。性能情報は、例えばＳＬＡ（Service  Level  Agreement）情報である。ここで、ＳＬＡ情報とは、アプリケーションプログラムの性能目標を表す情報、例えば、単位時間当たり（例えば１秒間）に処理できるトランザクションの数である。【０２５１】
また、管理ノード５は、各計算ノード２のキャッシュ領域の容量を、アプリケーションプログラムの性能に基づいて動的に制御する。【０２５２】
例えば、計算ノードＡ（２Ａ）のアプリケーションプログラムＡ（４Ａ）の性能がアプリケーションプログラムＡ（４Ａ）のＳＬＡ情報を満たしていない場合、管理サーバ５は、性能がＳＬＡ情報より大きいアプリケーションプログラム４を有している計算ノード２を１つ選択する。ここでは、計算ノードＢ（２Ｂ）が選択されたとする。【０２５３】
次に、管理サーバ５は、アプリケーションプログラムＡ（４Ａ）を計算ノードＢ（２Ｂ）に移動できるか否かを判定する。このように、まず、問題となるアプリケーションプログラムＡ（４Ａ）が他の計算ノードＢ（２Ｂ）に移動できるか否かを判定する基準は次の２つである。１つ目は、管理サーバ５は、アプリケーションプログラムＡを他のサーバに移動することがユーザに許可されていない場合に移動できないと判定する。２つ目は、管理サーバ５は、移動先の計算ノードＢのＣＰＵ負荷が１００％に近いなどの理由により、アプリケーションプログラムＡを移動させるとむしろ性能が劣化してしまうことが見込まれる場合に移動できないと判定する。【０２５４】
アプリケーションプログラムＡ（４Ａ）を計算ノードＢ（２Ｂ）に移動できると判定した場合、管理サーバ５は、図５１の（１）に示す通り、アプリケーションプログラムＡ（４Ａ）を計算ノードＢに移動する。この場合、アプリケーションプログラムＡ（４Ａ）は、計算ノードＢ（２Ｂ）に格納され、ローカルキャッシュ領域Ｂ（２１４Ｂ）を使用することになる。【０２５５】
一方、アプリケーションプログラムＡ（４Ａ）を計算ノードＢ（２Ｂ）に移動できないと判定した場合、管理サーバ５は、図５１の（２）に示す通り、計算ノードＢ（２Ｂ）のローカルキャッシュ領域Ｂ（２１４Ｂ）の一部の記憶領域を計算ノードＡ（２Ａ）に融通する。この場合、計算ノードＡ（２Ａ）は、融通された、ローカルキャッシュ領域Ｂ（２１４Ｂ）の一部の記憶領域をローカルキャッシュ領域Ａ（２１４Ａ）の一部として使用することができる。【０２５６】
以下、実施例５を詳細に説明する。【０２５７】
図３３は、実施例５に係る計算機システム１の全体構成の一例を示すブロック図である。【０２５８】
実施例５に係る計算機システム１は、実施例１における計算ノード２及びＩ／Ｏノード３に加え、管理サーバ５を有する。これらの構成要素（計算ノード２、Ｉ／Ｏノード３、及び管理サーバ５）が、同一の筺体内に設置されている。【０２５９】
計算ノード２、Ｉ／Ｏノード３、及び管理サーバ５は、筺体内で、所定のインタフェース（例えば、Ethernet（登録商標））５３で接続されている。計算ノード２は、例えば、ホスト計算機である。また、Ｉ／Ｏノード３は、例えば、ホスト計算機が接続されるストレージ装置である。【０２６０】
なお、計算ノード２、Ｉ／Ｏノード３、及び管理サーバ５とは、同一の筺体に配置されなくても良い。また、計算ノード２、Ｉ／Ｏノード３、及び管理サーバ５とは、所定の通信ネットワーク（例えば、ＬＡＮ（Local  Area  Network））を介して接続されても良い。【０２６１】
管理サーバ５は、例えば、一種の計算機である。管理サーバ５は、メモリ５５に、制御プログラム群５１１、及び管理テーブル群５１２を格納する。制御プログラム群５１１及び管理テーブル群５１２については、後述する。【０２６２】
図３４は、実施例５に係る管理サーバ５の構成の一例を示すブロック図である。【０２６３】
管理サーバ５は、メモリ５１、インタフェース５３、及びそれらに接続されたプロセッサ（例えばＣＰＵ（Central  Processing  Unit））５２を備える。【０２６４】
プロセッサ５２は、管理サーバ５の動作の制御を行い、メモリ５５に格納された制御プログラム群５１１及び管理テーブル群５１２に基づいて必要な処理を実行する。メモリ５５は、制御プログラム群５１１及び管理テーブル群５１２を記憶するために用いられるほか、プロセッサ５２のワークメモリとしても用いられる。インタフェース５３は、通信インタフェースデバイスであり、管理サーバ５が計算ノード２及びＩ／Ｏノード３と通信する際のプロトコルの制御を行う。【０２６５】
制御プログラム群５１１には、構成情報収集プログラム５１１１、性能管理プログラム５１１２及びキャッシュ管理プログラム５１１３が含まれている。プログラム５１１１〜５１１３は、全体として一つのプログラムで実現されても良いし、実装上の都合により２以下或いは４以上のプログラムに、分けられても良い。【０２６６】
構成情報収集プログラム５１１１は、例えば、後述の構成管理テーブル５１２１を設定するためのインタフェースとして動作する。また、構成情報収集プログラム５１１１は、例えば、設定ＡＰＩ（Application  Program  Interface）の呼び出しに応じて、構成管理テーブル５１２１の設定、及び／又は更新を行う。【０２６７】
性能管理プログラム５１１２は、定期的に計算ノード２及びＩ／Ｏノード３の図示しない性能情報通知プログラムから各計算ノード２のアプリケーションプログラム４の性能に関する情報を収集し、後述の性能管理テーブル５１１２に格納する。【０２６８】
キャッシュ管理プログラム５１１３は、ＳＬＡ違反イベントを検出したことを契機として、計算ノード２のローカルキャッシュ領域２１４にデータを格納する、及び、ローカルキャッシュ領域２１４に格納したデータの更新を行う。具体的には、例えば、キャッシュ管理プログラム５１１３は、アドレス管理テーブル５１２２にエントリを追加すること、アドレス管理テーブル５１２２のエントリを更新すること、及び性能管理テーブル５１２２に従って計算ノード２とＩ／Ｏノード３にキャッシュ制御指示を発行する。なお、「ＳＬＡ違反イベント」とは、アプリケーションプログラム４の性能がそのアプリケーションプログラム４のＳＬＡ情報未満になることである。【０２６９】
管理テーブル群５１２には、構成管理テーブル５１２１、性能管理テーブル５１２２及びアドレス管理テーブル５１２３が含まれている。これらの管理テーブル５１２１、５１２２、及び５１２３については、後述する。【０２７０】
図３５は、実施例５に係る計算ノード２の構成管理テーブル２１２１の一例を示す。【０２７１】
実施例５に係る構成管理テーブル２１２１は、物理位置２１２１０、容量２１２１１、使用量２１２１２、及び物理アドレス２１２１３を有する。物理位置２１２１０は、キャッシュ領域がローカルキャッシュ領域２１４なのか、リモートキャッシュ領域（２１４１、２１４２、２１４３）なのかを示す情報である。容量２１２１１は、ローカルキャッシュ領域２１４、或いはリモートキャッシュ領域（２１４１、２１４２）の容量を示す。使用量２１２１２は、ローカルキャッシュ領域２１４、或いはリモートキャッシュ領域（２１４１、２１４２、２１４３）の容量のうち、計算ノード２により実際に使用されているデータの量を示す。物理アドレス２１２１３は、ローカルキャッシュ領域２１４、或いはリモートキャッシュ領域（２１４１、２１４２、２１４３）に属する複数の物理的なアドレスを示す。【０２７２】
図３６は、実施例５に係る管理サーバ５の構成管理テーブル５１２１の一例を示す。【０２７３】
構成管理テーブル５１２１は、アプリケーションプログラム４毎に、計算ノード識別子５１２１１及びアプリケーション識別子５１２１２を有する。計算ノード識別子５１２１１は、アプリケーションプログラム４を実行する計算ノードの識別子である。アプリケーション識別子５１２１２は、アプリケーションプログラム４の識別子である。【０２７４】
図３７は、実施例５に係る管理サーバ５の性能管理テーブル５１２２の一例を示す。【０２７５】
性能管理テーブル５１２２は、計算ノード２毎に構成される。性能管理テーブル５１２２は、複数のアプリケーションプログラム４のうちの移動対象になり得るアプリケーションプログラム４について、アプリケーション識別子５１２２１、ＳＬＡ情報５１２２２、最大要求数５１２２３、最大性能５１２２４、及び移動可否５１２２５を有する。全てのアプリケーションプログラム４がそれぞれ移動対象になり得るアプリケーションプログラムでもよい。【０２７６】
アプリケーション識別子５１２２１は、アプリケーションプログラム４の識別子である。ＳＬＡ情報５１２２２は、アプリケーションプログラム４に予め設定された性能目標値、例えば、毎秒処理できるトランザクションの数である。【０２７７】
最大要求数５１２２３は、アプリケーションプログラム４が過去に（例えば過去の所定の期間に）処理することのできた要求（典型的にはＩ／Ｏ要求）の数の最大値である。最大性能５１２２４は、現在のキャッシュ領域の構成（例えばローカルキャッシュ領域の容量）においてアプリケーションプログラム４が発揮できると期待される最大性能である。最大性能５１２２４は、例えば、ローカルキャッシュ領域の容量を基に特定のプログラムにより算出された値でよい。また、最大性能５１２２４は、キャッシュ容量の融通のような構成変更（キャッシュ領域の構成変更）が行われた場合に、更新されてよい。【０２７８】
移動可否５１２２５は、アプリケーションプログラム４の実行中にそのアプリケーションプログラム４を他の計算ノード２に移動することが可能かどうかを表す情報である。移動可否５１２２５は、あらかじめユーザによって指定された値であってよい。例えば。ユーザは、他の計算ノード２に移動させたくないアプリケーションプログラムに対して移動可否５１２２５として「否」を設定することができる。【０２７９】
図３８は、実施例５に係る管理サーバ５のアドレス管理テーブル５１３３の一例を示す。【０２８０】
このアドレス管理テーブル５１２３を用いることにより、管理サーバ５は、計算ノード２及びＩ／Ｏノード３のキャッシュ構成を理解することができる。【０２８１】
アドレス管理テーブル５１２３の構成は、実施例１におけるＩ／Ｏノード３のアドレス管理テーブル３１２３と、実質的に同様である。【０２８２】
ただし、仮想アドレス５１２３１の値が５の列（点線枠Ｐ内）において、属性値５１２３２が「仮想Ａ」であるが、物理位置５１２３３が「計算ノードＢ」となっている。これは、計算ノードＢ（２Ｂ）のキャッシュ領域の一部を計算ノードＡ（２Ａ）に融通していることを示している。計算ノードＡ（２Ａ）は、例えば、データ取得処理（図２９）において、計算ノードＢ（２Ｂ）から融通されたキャッシュ領域にデータを追加したりそのキャッシュ領域からデータを削除したりすることができる。【０２８３】
図３９は、実施例５に係る管理サーバ５の性能管理プログラム５１１２の処理フローチャートの一例である。【０２８４】
性能管理プログラム５１１２は、各アプリケーションプログラム４の構築時にユーザに設定されたＳＬＡ情報及び移動可否情報を収集し、それぞれ性能管理テーブル５１１２のＳＬＡ情報欄５１１２１及び移動可否欄５１１２５に登録する（Ｓ１３０１）。【０２８５】
次に、性能管理プログラム５１１２は、アプリケーションプログラム４が参照するデータをすべて計算ノード２のローカルキャッシュ領域２１４から読み出した場合のアプリケーションプログラム４の単位時間当たりの処理件数を計測する。そして、性能管理プログラム５１１２は、計測した結果を性能管理テーブル５１１２の最大性能欄５１１２２に登録する（Ｓ１３０２）。【０２８６】
その後、性能管理プログラム５１１２は、稼働しているアプリケーションプログラム４の性能を定期的に収集し（Ｓ１３０３）、収集した性能をそのアプリケーションプログラム４のＳＬＡ情報５１２２２と比較する（Ｓ１３０４）。【０２８７】
ＳＬＡ情報５１２２２がＳ１３０３で収集した性能以上の場合（Ｓ１３０４：Ｙｅｓ）、性能管理プログラム５１１２は、Ｓ１３０３の処理に戻る。一方、ＳＬＡ情報５１２２２がＳ１３０３で収集した性能未満の場合（Ｓ１３０４：Ｎｏ）、性能管理プログラム５１１２は、キャッシュ管理プログラム５１１３に後述するキャッシュ構成変更処理を実行させるため、キャッシュ管理プログラム５１１３に、ＳＬＡ違反イベント通知を送信する（Ｓ１３０５）。ＳＬＡ違反イベント通知は、ＳＬＡ情報５１２２２がＳ１３０３で収集した性能未満であるイベントが生じたことの通知であり、例えば、Ｓ１３０３で収集した性能を表す情報、ＳＬＡ情報５１２２２、及び、アプリケーションプログラム４の識別子を含んでよい。Ｓ１３０５の処理の後、性能管理プログラム５１１２は、Ｓ１５０３の処理に戻る。【０２８８】
図４０は、実施例５に係る管理サーバ５のキャッシュ構成変更処理（図３９のＳ１３０５）の詳細の一例である。【０２８９】
キャッシュ管理プログラム５１１３は、ＳＬＡ違反イベント通知を性能管理プログラム５１１２から受信する（Ｓ１４０１）。または、キャッシュ管理プログラム５１１３は、ユーザのＧＵＩ操作などによる新規アプリケーションプログラム４の動作環境として割り当てるためのメモリ容量確保要求を受信する（Ｓ１４０１）。【０２９０】
キャッシュ管理プログラム５１１３は、後述する容量融通先選択処理を行ない（Ｓ１４０２）、キャッシュ容量削減可能なアプリケーションプログラム４を選択する。【０２９１】
キャッシュ管理プログラム５１１３は、性能管理テーブル５１２２のＳＬＡ情報５１２２１を参照し、後述する容量融通方式選択処理を行ない（Ｓ１４０３）、アプリケーションプログラム４及びキャッシュ容量の割り当ての構成変更を実行する。【０２９２】
キャッシュ管理プログラム５１１３は、各アプリケーションプログラム４の性能情報を収集し、収集した性能情報とＳＬＡ情報５１２２２とを比較することにより、ＳＬＡイベント違反のアプリケーションプログラム４が無くなったかどうかを判定する（Ｓ１４０４）。【０２９３】
まだＳＬＡイベント違反がある場合（Ｓ１４０４：Ｎｏ）、キャッシュ管理プログラム５１１３は、Ｓ１４０２の処理に戻る。一方、もうＳＬＡイベント違反が無い場合（Ｓ１４０４：Ｙｅｓ）、キャッシュ管理プログラム５１１３は、処理を終了する。【０２９４】
図４１は、実施例５に係る管理サーバ５の容量融通先選択処理（図３９のＳ１４０２）の詳細の一例である。【０２９５】
キャッシュ管理プログラム５１１３は、性能管理テーブル５１２２を参照し、アプリケーションプログラム４毎に、ＳＬＡ情報５１２２２と最大要求数５１２２３を比較する（Ｓ１５０１）。【０２９６】
ＳＬＡ情報５１２２２が最大要求数５１２２３以上であるアプリケーションプログラム４が存在する場合（Ｓ１５０１：Ｙｅｓ）、キャッシュ管理プログラム５１１３は、ＳＬＡ情報５１２２２と最大要求数５１２２３との差が最大のアプリケーションプログラム４を、容量融通先の候補として選択する（Ｓ１５０２）。
なお、容量融通先候補の選択基準として、ステップＳ１５０２の基準に加えて、計算機ノード２の負荷、例えばＣＰＵ負荷情報を収集し、高負荷の場合(例えば、負荷が８０％以上の場合)には候補からは除外するという基準を付加してもよい。【０２９７】
ＳＬＡ情報５１２２２が最大要求数５１２２３以上であるアプリケーションプログラム４が存在しない場合（Ｓ１５０１：Ｎｏ）、キャッシュ管理プログラム５１１３は、ＳＬＡ情報５１２２２と最大性能５１２２４を比較する（Ｓ１５０３）。【０２９８】
ＳＬＡ情報５１２２２が最大性能５１２２４以下であるアプリケーションプログラム４が存在する場合（Ｓ１５０３：Ｙｅｓ）、キャッシュ管理プログラム５１１３は、ＳＬＡ情報５１２２２と最大性能５１２２４との差が最大のアプリケーションプログラム４を、容量融通先の候補として選択する（Ｓ１５０４）。【０２９９】
ＳＬＡ情報５１２２２が最大性能５１２２４以下であるアプリケーションプログラム４が存在しない場合（Ｓ１５０３：Ｎｏ）、キャッシュ管理プログラム５１１３は、候補となるアプリケーションプログラム４が存在しない（解なし）と判定する（Ｓ１５０５）。【０３００】
図４２は、実施例５に係る管理サーバ５の容量融通方式選択処理（図４０のＳ１４０３）の詳細の一例である。【０３０１】
キャッシュ管理プログラム５１１３は、構成管理テーブル５１２２の移動可否５１２２５を参照し、Ｓ１４０１で指定されたアプリケーションプログラム４が動作する計算ノード２において、移動可能なアプリケーションプログラム４が存在するか否かを判定する（Ｓ１６０１）。【０３０２】
移動可能なアプリケーションプログラム４が存在する場合（Ｓ１６０１：Ｙｅｓ）、キャッシュ管理プログラム５１１３は、Ｓ１４０１で指定されたアプリケーションプログラム４を、容量融通先選択処理（Ｓ１４０２）で選択した計算ノード２へ移動する（Ｓ１６０２）。Ｓ１６０２の処理では、キャッシュ管理プログラム５１１３は、アプリケーションプログラム４が利用していたデータと共に、Ｓ１４０２で選択した計算ノード２へ移動する。そして、キャッシュ管理プログラム５１１３は、アプリケーションプログラム４が利用していた移動元の計算ノード２に格納されているデータを無効とする。【０３０３】
移動可能なアプリケーションプログラム４が存在しない場合（Ｓ１６０１：Ｎｏ）、キャッシュ管理プログラム５１１３は、アドレス管理テーブル５１２３を更新しキャッシュ容量を融通する（Ｓ１６０３）。具体的には、例えば、計算ノード２Ａのキャッシュ容量を計算ノード２Ｂに融通することは、属性値５１２３２「仮想Ｂ」に対応する物理位置５１２３３に物理位置５１２３３「計算ノードＡ」に対応する少なくとも１つの仮想アドレス５１２３１を対応付けることと、「計算ノードＡ」に対応する仮想アドレス５１２３１を融通先の計算ノードＡ（２Ａ）と融通元の計算ノードＢ（２Ｂ）とに通知することにより両方の計算ノードにキャッシュ領域の構成変更を行わせることである。【０３０４】
図４３は、実施例５に係る計算ノード２のスワップアウト処理の詳細の一例である。【０３０５】
キャッシュ管理プログラム５１１３は、キャッシュ領域から移行するデータ（以下、移行対象データ）を決定した後、構成管理テーブル２１２１を参照し、物理位置２１２１０がリモート」の容量５１２１３が、使用量２１２１４と移行容量（移行対象データのサイズ）との和以上か否かを判定する（Ｓ１２０６）。【０３０６】
容量２１２１３が使用量２１２１４と移行容量との和以上の場合（Ｓ１２０６：Ｙｅｓ）、キャッシュ管理プログラム５１１３は、移行対象のデータを「リモート」の領域、すなわち他の計算ノード２から融通されている領域にライトし、その後、Ｓ１２０２の処理に進む。【０３０７】
一方、容量２１２１３が使用量２１２１４と移行容量との和未満の場合（Ｓ１２０６：Ｎｏ）、キャッシュ管理プログラム５１１３は、「リモート」の領域に格納されているデータのうち、例えば、LRUアルゴリズムなどに基づいて、移行するデータを決定し、アドレス管理テーブル２１２３を参照し、決定したデータを移行対象データで置き換える（Ｓ１２０８）。その後、キャッシュ管理プログラム５１１３は、ステップＳ１２０４の処理に進む。それ以外の処理は、実施例４と同じであるため説明を省略する。【０３０８】
実施例５によれば、各計算ノード２が使用できるキャッシュ領域２４００１の容量を、各アプリケーションプログラム４に予め設けられたＳＬＡ情報に基づいて決定するので、アプリケーションプログラム４が使用するデータは、何れかの計算ノード２のキャッシュ領域２４００１に格納される可能性が高くなる。故に、データを記憶デバイス３４からリードする確率が減り、システム全体としてのキャッシュヒット率を向上させることができる。【０３０９】
また、実施例５によれば、例えば、計算ノードＡ（２Ａ）から計算ノードＢ（２Ｂ）に対してキャッシュ領域が融通され、更に、計算ノードＢ（２Ｂ）から計算ノードＡ（２Ａ）に対してキャッシュ領域が融通されることあり得る。その場合、キャッシュ管理プログラム５１１３は、各アプリケーションプログラムについて性能がＳＬＡ情報より小さくならないようにする。具体的には、キャッシュ管理プログラム５１１３は、アプリケーションプログラム４が使用するデータができるだけそのアプリケーションプログラム４を実行する計算ノードのローカルキャッシュ領域２１４に格納されるようにデータを配置する。より具体的には、例えば、計算ノードＡ（２Ａ）のキャッシュ管理プログラム２１１３は、アドレス管理テーブル５１２３の属性値５１２３２「仮想Ａ」に対して割り当たっていた物理位置５１２３３「計算ノードＢ」を「計算ノードＡ」に変更する。
【実施例６】
【０３１０】
次に、実施例６を説明する。その際、実施例１〜５との相違点を主に説明し、実施例１〜５との共通点については説明を省略或いは簡略する。【０３１１】
実施例６では、計算ノード２におけるキャッシュ管理プログラム２１１３がキャッシュ制御処理を行う。また、実施例６では、計算ノード２が記憶デバイス２４を有し記憶デバイス２４の一部の記憶領域がキャッシュ領域の一部として使用される。【０３１２】
しかし、記憶デバイス２４の一部がキャッシュ領域の一部として使用されると、計算ノード２及びＩ／Ｏノード３において、１つの装置における１つのキャッシュ領域内にＩ／Ｏ性能の異なる記憶領域が混在することになる。そうすると、キャッシュ領域におけるどの記憶領域がメモリ２１と記憶デバイス２４のどちらに基づいているかが問題となる。【０３１３】
実施例６では、記憶デバイス２４の一部の記憶領域が、ローカルキャッシュ領域２１４からスワップアウトされたデータを記憶する領域として使用される。【０３１４】
図４４は、実施例６に係る計算機システム１の全体構成の一例を示すブロック図である。【０３１５】
計算ノード２が記憶デバイス２４を有する。具体的には、計算ノード２Ａ〜２Ｃがそれぞれ記憶デバイス２４Ａ〜２４Ｃを有する。記憶デバイス２４は、例えば、ＳＳＤ（Solid  State  Drive）である。【０３１６】
図４５は、実施例６に係る計算ノード２の構成の一例を示すブロック図である。【０３１７】
計算ノード２は、実施例４における計算ノード２に記憶デバイス２４を加えた構成である。それ以外の構成は、実施例４と同じであるため説明を省略する。【０３１８】
図４６は、実施例６に係る計算ノード２の構成管理テーブル２１２１の一例を示す。【０３１９】
実施例５に係る構成管理テーブル２１２１と比較すると、物理位置２１１０として「ローカルディスク」及び「リモートディスク」が追加されている。【０３２０】
物理位置２１１０「ローカルディスク」とは、計算ノード２が有する記憶デバイス２４を示す。また、物理位置２１１０「リモートディスク」とは、他の計算ノード２が有する記憶デバイス２４を示す。【０３２１】
物理位置２１２１０「ローカルディスク」の容量２１２１１は、ローカルディスクの容量のうち、キャッシュ領域として使用可能な容量を示す。使用量２１２１２は、自身及び他の計算ノード２によって使用されている容量を示す。【０３２２】
物理位置２１２１０「リモートディスク」の容量２１２１１は、リモートディスクの容量のうち、キャッシュ領域として使用可能な容量を示す。つまり、容量２１２１１は、キャッシュ領域として利用可能な、他の計算ノード２から提供されている記憶デバイス２４の容量を示す。使用量２１２１２は、自身及び他の計算ノード２によって使用されている容量を示す。【０３２３】
実施例６では、キャッシュ管理プログラム５１１３は、構成管理テーブル２１２１を参照することにより、ローカルキャッシュ及びリモートキャッシュの、容量及び使用量を把握することができる。【０３２４】
図４７は、実施例６に係る計算ノード２のアドレス管理テーブル２１３３の一例を示す。【０３２５】
アドレス管理テーブル２１２３の構成は、実施例４における計算ノード２のアドレス管理テーブル２１２３と同様であるが、実施例６におけるアドレス管理テーブル２１２３では、計算ノード２の記憶デバイス２４及びＩ／Ｏノード３の記憶デバイス３４に対応する属性値２１２３３に「記憶デバイス」が追加されている。つまり、計算ノード２は、キャッシュ領域として記憶デバイス２４の物理領域を利用することができる。また、Ｉ／Ｏノード３は、キャッシュ領域として記憶デバイス３４の物理領域を利用することができる。【０３２６】
このアドレス管理テーブル２１２３を用いることにより、計算ノード２は、自身が有する記憶デバイス２４、及びＩ／Ｏノード３が有する記憶デバイス３４をキャッシュ領域として使用することができる。【０３２７】
図４８は、実施例６に係る計算ノード２のスワップアウト処理（図２９のＳ１１０６）の詳細の一例である。【０３２８】
Ｓ１２０３において移行するデータを決定した後、キャッシュ管理プログラム２１１３は、構成管理テーブル２１２１を参照し、物理位置２１２１０が「ローカルディスク」の容量２１２１３が、使用量２１２１４と移行容量（移行対象データのサイズ）との和以上か否かを判定する（Ｓ１２０６）。【０３２９】
容量が使用量２１２１４と移行容量との和以上の場合（Ｓ１２０６：Ｙｅｓ）、キャッシュ管理プログラム２１１３は、記憶デバイス２４に、移行対象のデータをライトした後、Ｓ１２０２に進む。【０３３０】
一方、容量が使用量２１２１４と移行容量との和未満の場合（Ｓ１２０６：Ｎｏ）、キャッシュ管理プログラム２１１３は、計算ノード２の記憶デバイス２４に格納されているデータのうち、例えば、LUR（Least  Recently  Used）アルゴリズムなどに基づいて、移行対象データを決定する（Ｓ１２０８）。キャッシュ管理プログラム２１１３は、記憶デバイス２４上のデータを置き換えた後、Ｓ１２０４に進む。それ以外の処理は、実施例４と同じであるため説明を省略する。【０３３１】
なお、実施例５と実施例６を組合せると、計算ノード２同士がキャッシュ領域を融通し合い、かつ各計算ノード２が記憶デバイス２４をキャッシュ領域として使用することができる。この場合、各計算ノード２は、「ローカルメモリ」、「リモートメモリ」、「ローカルディスク」及び「リモートディスク」の４つのキャッシュ領域を持つことになる。アクセス性能は、「ローカルメモリ」、「リモートメモリ」、「ローカルディスク」、「リモートディスク」の順番に高い。【０３３２】
図５２は、実施例６におけるスワップアウト処理を説明するための模式図である。【０３３３】
スワップアウト処理（図２９のＳ１１０６）は、以下の（１）〜（３）の順序で行われる。
（１）計算ノードＡ（２Ａ）が、ローカルメモリ（ローカルキャッシュ領域）Ａ（２１４Ａ）からリモートメモリ（ローカルキャッシュ領域）Ｂ（２１４Ｂ）にデータをスワップアウトする。
（２）計算ノードＡ（２Ａ）が、リモートメモリＢ（２１４Ｂ）からローカルディスクＡ（２４Ａ）にデータをスワップアウトする。
（３）計算ノードＡ（２Ａ）が、ローカルディスクＡ（２４Ａ）からリモートディスクＢ（２４Ｂ）（又は別の計算ノードのリモートディスク）にデータをスワップアウトする。【０３３４】
すなわち、移動元のキャッシュ領域についてＳ１２０６（容量判定）と、移動先のキャッシュ領域についてＳ１２０８（スワップアウトされるデータの置き換え）とを繰返し行った後、最後に、Ｓ１２０４の処理により、リモートディスクＢ（２４Ｂ）からＩ／Ｏノード３にデータをスワップアウトする。【０３３５】
さらに、実施例１〜６のＩ／Ｏノード３の共有キャッシュ管理プログラム３１１２によるデータ取得処理（Ｓ６０２）において、記憶デバイス３４からリード対象データを削除することができる。そして、共有キャッシュ管理プログラム３１１２は、Ｉ／Ｏノード３がスワップアウト処理を実行した場合、他の計算ノード２からキャッシュ更新要求（Ｓ１２０４）を受信した場合、または、管理サーバ３からキャッシュ更新要求を受信した場合、記憶デバイス３４に、削除したリード対象データを書き込んでよい。これにより、キャッシュ領域だけでなく記憶デバイス３４に格納するデータの配置制御も行うことができる。つまり、キャッシュ領域と記憶デバイス３４で、データが重複して格納されるのを防止することができる。【０３３６】
図４９は、計算機システム１のネットワークトポロジー構成の一例を示すブロック図である。【０３３７】
計算ノード２とＩ／Ｏノード３は１つのシャーシ（筐体）に搭載され、ＰＣＩなどのインタフェースで、ケーブル接続またはシャーシのバックプレーン接続などで接続されていてもよい。また、図４９では計算ノード２台の構成となっているが、それ以上の台数がシャーシに搭載され、Ｉ／Ｏノード３と接続されていてもよい。さらに、1つのシャーシに複数台のＩ／Ｏノード３が搭載されていてもよい。【０３３８】
なお、図４９における計算ノード２はＩ／Ｏノード３との接続インタフェースしか備えていないが、計算ノード間通信用、管理サーバ通信用、他の計算機システム１との通信用のインタフェースを別に備えていてもよい。同様に、Ｉ／Ｏノード３もＩ／Ｏノード間通信用、管理サーバ通信用、他の計算機システムとの通信用のインタフェースを別に備えていてもよい。【０３３９】
実施例５又は６では、制御対象となるキャッシュ領域は、ローカルキャッシュ領域２１４、仮想的な領域２１４１、２１４２、及び２４１３に限定されない。具体的には、キャッシュ領域２４００１をローカルキャッシュ領域２１４、仮想的な領域２１４１、２１４２、及び２４１３に論理的に分割せず、通常のキャッシュ領域を制御対象とすることもできる。【０３４０】
以上、幾つかの実施例を説明したが、本発明はこれらの実施例に限定されない。また、実施例１〜６において、参照符号が同一であっても、機能及び構成のうちの少なくとも１つが同一であるとは限らない。例えば、実施例１〜３における計算ノード２と、実施例４〜６のうちの少なくとも１つの実施例における計算ノード２は、説明からわかるように、機能が異なる。また、実施例の説明における「スワップアウト」とは、第１記憶領域内の第１データを第２記憶領域に追い出し、且つ、第１記憶領域内の第１データを第２データに変えることを言う。なお、第１記憶領域（例えばローカルキャッシュ領域）から第２記憶領域（例えば共有キャッシュ領域）にデータを書き込む契機は、スワップアウトに限らない。例えば、第１記憶領域の空き容量率が所定値未満であることが検出された場合に、第１記憶領域から第２記憶領域にデータが移動されることで、第１記憶領域の空き容量率が所定値以上となるよう制御されてもよい。
【符号の説明】
【０３４１】
１…計算機システム、２…計算ノード、３…Ｉ／Ｏノード
【図１】
2014007249.tif 000003
【図２】
2014007249.tif 000004
【図３】
2014007249.tif 000005
【図４】
2014007249.tif 000006
【図５】
2014007249.tif 000007
【図６】
2014007249.tif 000008
【図７】
2014007249.tif 000009
【図８】
2014007249.tif 000010
【図９】
2014007249.tif 000011
【図１０】
2014007249.tif 000012
【図１１】
2014007249.tif 000013
【図１２】
2014007249.tif 000014
【図１３】
2014007249.tif 000015
【図１４】
2014007249.tif 000016
【図１５】
2014007249.tif 000017
【図１６】
2014007249.tif 000018
【図１７】
2014007249.tif 000019
【図１８】
2014007249.tif 000020
【図１９】
2014007249.tif 000021
【図２０】
2014007249.tif 000022
【図２１】
2014007249.tif 000023
【図２２】
2014007249.tif 000024
【図２３】
2014007249.tif 000025
【図２４】
2014007249.tif 000026
【図２５】
2014007249.tif 000027
【図２６】
2014007249.tif 000028
【図２７】
2014007249.tif 000029
【図２８】
2014007249.tif 000030
【図２９】
2014007249.tif 000031
【図３０】
2014007249.tif 000032
【図３１】
2014007249.tif 000033
【図３２】
2014007249.tif 000034
【図３３】
2014007249.tif 000035
【図３４】
2014007249.tif 000036
【図３５】
2014007249.tif 000037
【図３６】
2014007249.tif 000038
【図３７】
2014007249.tif 000039
【図３８】
2014007249.tif 000040
【図３９】
2014007249.tif 000041
【図４０】
2014007249.tif 000042
【図４１】
2014007249.tif 000043
【図４２】
2014007249.tif 000044
【図４３】
2014007249.tif 000045
【図４４】
2014007249.tif 000046
【図４５】
2014007249.tif 000047
【図４６】
2014007249.tif 000048
【図４７】
2014007249.tif 000049
【図４８】
2014007249.tif 000050
【図４９】
2014007249.tif 000051
【図５０】
2014007249.tif 000052
【図５１】
2014007249.tif 000053
【図５２】
2014007249.tif 000054
【手続補正書】
【提出日】平成27年11月20日(2015.11.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１１
【補正方法】変更
【補正の内容】
【請求項１１】
前記管理ノードは、
前記第１アプリケーションプログラムを前記第２計算ノードに移動できるか否かを判定し、
前記判定の結果が真の場合、前記第２ノードに前記第１アプリケーションプログラムを移動し、
前記判定の結果が偽の場合、前記第３計算ノードの第２キャッシュ領域の一部を前記第３計算ノードに融通する、
請求項１０記載の計算機システム。
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１２
【補正方法】変更
【補正の内容】
【請求項１２】
性能が性能閾値を超えることが性能条件を満たすことであり、
前記第１アプリケーションプログラムは、性能閾値が最大要求数以上であり性能閾値と最大要求数との差が最大であるアプリケーションプログラム、又は、性能閾値が最大性能以下であり性能閾値と最大性能との差が最大であるアプリケーションプログラムであり、
各アプリケーションプログラムの最大要求数は、そのアプリケーションプログラムが単位時間当たりに処理した要求の数の最大値であり、
各アプリケーションプログラムの最大性能は、そのアプリケーションプログラムを実行する計算ノードの第２キャッシュ領域の容量を基に算出された値でありそのアプリケーションプログラムにより発揮されることが期待される性能である、
請求項１０記載の計算機システム。
【国際調査報告】
2014007249.tif 000055
2014007249.tif 000056