(57)【要約】  本発明は、複数のノードがストレージを共有しストレージに対するキャッシュを持つシステムにおいて、一貫性を維持するための無効化対象のデータ量を削減し性能低下を抑制可能とする。複数のノードは、複数のノードで共有ストレージのデータを一時的に保持するキャッシュをそれぞれ備え、データをアクセスする処理が前記複数のノードのうちの一のノードから他のノードに移動したときの時刻情報を記録しておき、処理が前記他のノードに移動した後の前記一のノードでは、前記一のノードのキャッシュに保持されているデータのうち、前記処理の前記他のノードへの移動前に、前記処理が前記一のノード上で最後にアクセスした時刻が、前記処理が前記一のノードから前記他のノードへ移動した時刻よりも古いデータを選択的に無効化する。
2015046552.tif 000002
【特許請求の範囲】
【請求項１】
複数のノードと、
前記複数のノードで共有されるストレージと、
を備え、
前記各ノードは、前記ストレージのデータを一時的に保持するキャッシュを備え、  
データをアクセスする処理が一のノードから他のノードに移動したときの時刻情報を記録しておき、
前記処理が前記他のノードへ移動した後の前記一のノードでは、前記一のノードの前記キャッシュに保持されているデータのうち、前記他のノードへ移動する前の前記処理が前記一のノード上で最後にアクセスした時刻が、前記処理が前記一のノードから前記他のノードへ移動した時刻よりも古いデータを選択的に無効化する、ことを特徴とするストレージシステム。
【請求項２】
前記一のノードは、前記無効化を、前記一のノードから前記他のノードに移動した前記処理が、再び、前記一のノードに戻る時刻以降の所定のタイミングで行う、ことを特徴とする請求項１に記載のストレージシステム。
【請求項３】
再び前記一のノードに戻った前記処理により、前記一のノードにおいて、前記キャッシュに保持されているデータのうち、前記他のノードへ移動する前の前記処理が前記一のノード上で最後にアクセスした時刻が、前記処理が前記一のノードから前記他のノードへ移動した時刻よりも古いデータへのアクセス要求が行われることを契機として、前記無効化を行う、ことを特徴とする請求項１又は２に記載のストレージシステム。
【請求項４】
前記一のノードにおいて、前記処理が前記一のノードから前記他のノードに移動した後に、前記他のノードへ移動した前記処理以外の処理によってアクセスされた前記一のノードの前記キャッシュ上のデータは、前記一のノードの前記キャッシュの前記無効化の対象から外す、ことを特徴とする請求項１乃至３のいずれか１項に記載のストレージシステム。
【請求項５】
前記一のノードにおいて、前記一のノードの前記キャッシュに保持されているデータのうち、前記他のノードへ移動した前記処理以外の処理によって最後にアクセスされた時刻が、前記他のノードへ移動した前記処理の移動時刻よりも古いデータも併せて無効化する、ことを特徴とする請求項１乃至４のいずれか１項に記載のストレージシステム。
【請求項６】
前記ストレージのデータへのアクセスは、一時には、単一のノードから行われ、前記単一のノードにおけるキャッシュへの書き込みに対して、他のノードでのキャッシュの無効化を不要としている、ことを特徴とする請求項１乃至５のいずれか１項に記載のストレージシステム。
【請求項７】
データを共有する第１の処理と第２の処理に関して、前記第１の処理を実行するノードが前記第２の処理を実行するノードと異なる場合に、前記第１又は第２の処理の一方をノード間で移動させ、前記第１及び第２の処理が同一のノードで実行されるようにする、ことを特徴とする請求項１乃至６のいずれか１項に記載のストレージシステム。
【請求項８】
前記ノードにおいて、データのアクセス処理の実行開始を管理部に通知する通知部を備え、
前記管理部は、
データをアクセスする処理を実行するノードの変更を検出する実行ノード変更検出部と、
前記処理を実行するノードの情報を記録する実行ノード記録部と、
前記処理を実行するノード上で前記データをアクセスする前記処理が最後に実行された時刻を記録する時刻記録部と、
データを共有する複数のアクセス処理が、同一のノードで順次実行されるように処理を配置する処理配置部と、
前記ノードに対してキャッシュに格納されたデータの無効を通知する無効通知部と、
を備え、
前記無効通知部は、前記アクセス処理を実行するノードが変更された時刻を、前記ノ−ドに通知する、ことを特徴とする請求項１乃至７のいずれか１項に記載のストレージシステム。
【請求項９】
前記ノードが仮想化機構を備え、前記アクセス処理を前記仮想化機構上の仮想マシンで実行し、
データのアクセス処理を実行するノードの変更は、前記仮想マシンのノード間の移動で実現される、ことを特徴とする請求項１乃至８のいずれか１項に記載のストレージシステム。
【請求項１０】
複数のノード装置間で共有するストレージのデータを一時的に保持するキャッシュを備えたノード装置であって、
前記キャッシュに保持されるデータに対するアクセスが行われる毎に、アクセス時刻を記録するアクセス時刻記録部と、
前記キャッシュに保持されているデータのうち、前記アクセス時刻記録部で記録されたデータの最終アクセス時刻と、入力した無効化の基準時刻と、を比較し、前記最終アクセス時刻が前記無効化の基準時刻以前であるデータを選択的に無効化するキャッシュ無効化部と、
を備えた、ことを特徴とするノード装置。
【請求項１１】
前記無効化の基準時刻が、前記ノード装置を移動元として、データをアクセスする処理が、前記ノード装置から他のノード装置に移動したときの時刻である、ことを特徴とする請求項１０記載のノード装置。
【請求項１２】
前記キャッシュ無効化部は、前記一のノードから前記他のノードに移動した前記処理が、再び、前記一のノードに戻る時刻以降のタイミングで、前記最終アクセス時刻が前記無効化の基準時刻以前であるデータを選択的に無効化する、ことを特徴とする請求項１１に記載のノード装置。
【請求項１３】
前記キャッシュ無効化部は、再び前記一のノードに戻った前記処理により、前記一のノードにおいて、前記キャッシュに保持されているデータのうち、前記他のノードへ移動する前の前記処理が前記一のノード上で最後にアクセスした時刻が、前記処理が前記一のノードから前記他のノードへ移動した時刻よりも古いデータへのアクセス要求が行われることを契機として、前記データの選択的な無効化を行う、ことを特徴とする請求項１１又は１２に記載のノード装置。
【請求項１４】
複数ノード間で共有するストレージのデータを一時的に保持するキャッシュを備えた各ノードに接続され、データのアクセス処理の実行開始の通知を前記ノードから受ける管理装置であって、
データをアクセスする処理の実行するノードの変更を検出する実行ノード変更検出部と、
前記処理を実行するノードの情報を記録する実行ノード記録部と、
前記処理を実行するノードで、前記データをアクセスする前記処理が最後に実行された時刻を記録する時刻記録部と、
データを共有する複数のアクセス処理が、同一のノードで順次実行されるように処理を配置する処理配置部と、
前記ノードに対して前記ノードのキャッシュに格納されたデータの無効を通知する無効通知部と、
を備え、
前記無効通知部は、前記アクセス処理を実行するノードが変更された時刻を、前記ノ−ドに通知する、ことを特徴とする管理装置。
【請求項１５】
複数のノードで共有されるストレージのデータを一時的に保持するキャッシュをそれぞれ有する複数のノードのうち、データをアクセスする処理が一のノードから他のノードに移動したときの時刻情報を記録しておき、
前記処理が移動した後の移動元の前記一のノードでは、前記一のノードの前記キャッシュに保持されているデータのうち、前記他のノードへ移動する前の前記処理が前記一のノード上で最後にアクセスした時刻が、前記処理が前記一のノードから前記他のノードへ移動した時刻よりも古いデータの選択的な無効化を所定のタイミング又は契機で行う、ことを特徴とするキャッシュの制御方法。
【請求項１６】
前記一のノードから前記他のノードに移動した前記処理が、再び、前記一のノードに戻る時刻以降のタイミングで前記無効化を行う、ことを特徴とする請求項１５に記載のキャッシュの制御方法。
【請求項１７】
再び前記一のノードに戻った前記処理により、前記一のノードにおいて、前記キャッシュに保持されているデータのうち、前記他のノードへ移動する前の前記処理が前記一のノード上で最後にアクセスした時刻が、前記処理が前記一のノードから前記他のノードへ移動した時刻よりも古いデータへのアクセス要求が行われることを契機として、前記無効化を行う、ことを特徴とする請求項１５又は１６に記載のキャッシュの制御方法。
【請求項１８】
前記一のノードにおいて、前記処理が前記一のノードから前記他のノードに移動した後に、前記他のノードへ移動した前記処理以外の処理によってアクセスされた前記一のノードの前記キャッシュ上のデータを、前記一のノードの前記キャッシュの前記無効化の対象から外す、ことを特徴とする請求項１５乃至１７のいずれか１項に記載のキャッシュの制御方法。
【請求項１９】
前記一のノードにおいて、前記一のノードの前記キャッシュに保持されているデータのうち、前記他のノードへ移動した前記処理以外の処理によって最後にアクセスされた時刻が、前記他のノードへ移動した前記処理の移動時刻よりも古いデータも併せて無効化する、ことを特徴とする請求項１５乃至１８のいずれか１項に記載のキャッシュの制御方法。
【請求項２０】
前記ストレージのデータへのアクセスは、一時には、単一のノードから行われ、前記単一のノードにおけるキャッシュへの書き込みに対して、他のノードでのキャッシュの無効化を不要としている、ことを特徴とする請求項１５乃至１９のいずれか１項に記載のキャッシュの制御方法。
【請求項２１】
データを共有する第１の処理と第２の処理に関して、前記第１の処理を実行するノードが前記第２の処理を実行するノードと異なる場合に、前記第１又は第２の処理の一方をノード間で移動させ、前記第１及び第２の処理が同一のノードで実行されるようにする、ことを特徴とする請求項１５乃至２０のいずれか１項に記載のキャッシュの制御方法。
【請求項２２】
前記ノードが仮想化機構を備え、前記アクセス処理を前記仮想化機構上の仮想マシンで実行し、
前記処理の移動は、前記仮想マシンのノード間の移動で実現される、ことを特徴とする請求項１５乃至２１のいずれか１項に記載のキャッシュの制御方法。
【請求項２３】
複数のノード装置間で共有するストレージのデータを一時的に保持するキャッシュを備えたノード装置を構成するコンピュータに、
前記キャッシュに保持されるデータに対するアクセスが行われる毎にアクセス時刻を記録するアクセス時刻記録処理と、
前記キャッシュに保持されているデータのうち、前記アクセス時刻記録部で記録されたデータの最終アクセス時刻と、入力した無効化の基準時刻とを比較し、前記最終アクセス時刻が、前記基準時刻以前であるデータの無効化を、前記データがアクセスされる前の所定のタイミング又は契機で行うキャッシュ無効化処理と、
を実行させるプログラム。
【請求項２４】
前記無効化の基準時刻が、前記ノード装置を移動元として、データをアクセスする処理が前記ノード装置から他のノード装置に移動した時刻である、ことを特徴とする請求項２３記載のプログラム。
【請求項２５】
前記キャッシュ無効化処理は、前記一のノードから前記他のノードに移動した前記処理が、再び、前記一のノードに戻る時刻以降のタイミングで、前記無効化を行う、ことを特徴とする請求項２４に記載のプログラム。
【請求項２６】
前記キャッシュ無効化処理は、再び前記一のノードに戻った前記処理により、前記一のノードにおいて、前記キャッシュに保持されているデータのうち、前記他のノードへ移動する前の前記処理が前記一のノード上で最後にアクセスした時刻が、前記処理が前記一のノードから前記他のノードへ移動した時刻よりも古いデータへのアクセス要求が行われることを契機として、前記無効化を行う、ことを特徴とする請求項２４又は２５に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願についての記載）
本発明は、日本国特許出願：特願２０１３−２０４９１４号（２０１３年９月３０日出願）の優先権主張に基づくものであり、同出願の全記載内容は引用をもって本書に組み込み記載されているものとする。
本発明は、ストレージシステムとノード装置とキャッシュ制御方法並びにプログラムに関する。
【背景技術】
【０００２】
近時、情報通信技術の進展とその適用分野の拡大等に伴い、情報処理システムの適用先、及び、該システムで扱う処理量が増大している。扱う処理量やデータ量の増大に対処すべく、例えば情報処理システムを、バスや通信網を介して相互接続される複数の計算機で構成し、システム性能を向上させる設計方式が用いられている。【０００３】
＜処理又はＶＭのノード間のマイグレーション＞
計算機の負荷は、処理内容、時間に応じて変動することから、複数の計算機（ノード）からなる情報処理システムにおいて、負荷に応じて、計算機間で処理を移動（migrate）させることで負荷分散を図り、各計算機の利用効率やシステム全体の性能を高める手法が用いられている。例えば、ある計算機での性能の限界近くまで処理負荷が増大した場合、該処理を実行する計算機を、負荷の軽い別の計算機に変更させ、計算機資源の利用効率や性能の向上を図る。処理の移動は、仮想化システムでも行われる。例えば、サーバ上にハイパーバイザ等の仮想化機能を実装して、ＣＰＵ（Central Processing Unit）、メモリ等のハードウェア資源を仮想化し、この仮想化機能の上に仮想ＯＳ（Operating  System）を走らせ、アプリケーションを実行することで実現される仮想マシン（ＶＭ：Virtual Machine）を備えた仮想化環境等においても、ＶＭを移動させることで、計算機資源の利用効率や性能の向上を図る場合がある。処理を実行するＶＭを一のＶＭから別のＶＭへ変更する等、ＶＭ単位で移動を行う場合、移動対象となるＶＭに関するシステム・ディスクのイメージ（ＶＭイメージ）を、移動後のＶＭを実行する計算機側からアクセスし、例えばＶＭのホットマイグレーション等を実現する。ＶＭを一の計算機（ノード）から別の計算機（ノード）へ移動する場合（ＶＭのノード間マイグレーション）、移動対象のＶＭの状態情報は、例えばＶＭの移動先の計算機にコピーされる。このＶＭの状態情報は、例えば、ネットワーク接続情報を含む全メモリ情報と、ＶＭのレジスタのダンプ情報等、プロセッサ（ＣＰＵ）にかかわる全情報が含まれる。ＶＭの状態情報やＶＭイメージ等、処理が参照するデータは、例えば、複数の計算機間で共有される共有ストレージに格納される。【０００４】
＜ストレージキャッシュ＞
また、複数の計算機（ノード）を備えた情報処理システムにおいて、複数のノードがストレージを共有するシステム構成においては、共有ストレージに対するアクセスがシステムの性能を律速する要因（ボトルネック）となる、ことが知られている。なお、特に制限されないが、複数のノードは共有ストレージにネットワーク（あるいはバス）を介して接続されているものとする。代表的なボトルネックとして、
・共有ストレージにおけるアクセス要求による負荷、及び、
・アクセス要求の増大に伴い増大するネットワーク負荷等、
が挙げられる。よく知られているように、ストレージへのアクセス要求を削減し、アクセス性能を向上させるための技術として、ストレージに格納されるデータの一部の写し及び更新を一時的に保持するキャッシュ（ストレージキャッシュ）が用いられる。ストレージのキャッシュは、例えばDRAM（Dynamic Random Access Memory）や、SSD(Solid State Device：例えばNAND型不揮発性メモリ（フラッシュメモリ）等からなる)で構成され、計算機（ノード）からストレージへのアクセスと比較して、高速アクセスが可能である。キャッシュ上にアクセス頻度の高いデータの写し（コピー）を格納することで、ストレージへのアクセスを行わずにアクセス可能とするか、あるいはストレージへのアクセス回数を減少させる。キャッシュ上のデータのうちアクセスが少ないデータはキャッシュから追い出され、アクセス頻度の高いデータの写しがキャッシュに格納される。リードアクセスでは、アクセス要求に対する該データがヒットした場合、ヒットしたデータが、アクセス要求元に応答として返送される。ライトアクセスの場合、キャッシュでヒットしたデータの更新が行われ、アクセス要求元にライトの完了応答が返送され、例えばライトバック方式では、その後、キャッシュ上でのデータの更新がストレージに反映される。【０００５】
＜キャッシュ・コヒーレンシ＞
複数のノード間で共通のストレージを共有するシステムにおいても、キャッシュへの複数ノードからのアクセスによる性能の低下、及び、複数のノードからのアクセスの増大によるネットワーク負荷の増大等により、キャッシュのアクセス性能が低下する。このため、複数ノードにそれぞれ個別のキャッシュ（ローカルキャッシュ／プライベートキャッシュ）を備えた構成が用いられる（例えば非特許文献１）。この場合、複数のノードのそれぞれのキャッシュに対してキャッシュの一貫性（cache coherency）の維持機構が実装される。「キャッシュ・コヒーレンシ」（cache coherency）とは、複数のノードの各々がデータ更新を行った場合でも、最新の正しいデータにアクセスできるように保つべきデータの一貫性のことをいう。共有ストレージに格納されたデータは、一般に、複数のノードから参照可能とされている。そのため、一のノードと他のノードのそれぞれのキャッシュに、共有ストレージの同一のデータが格納され、前記一のノードで実行される処理により、前記一のノードのキャッシュに格納されている前記データが更新された場合、前記他のノードのキャッシュに格納されている前記データに対して、前記一のノードで実行された前記更新を反映させるか、若しくは、前記他のノードのキャッシュに格納されている前記データを無効化する必要がある。【０００６】
ノード間で共有される共有ストレージを備え、各ノードが共有ストレージのデータの写し又は更新を一時的に保持するキャッシュを備えた関連技術の典型的なシステムの動作例について、図１８を参照して説明する。ノード１０１−１のＣＰＵは、更新データをノード１０１−１のキャッシュ（ローカルキャッシュ）に書き込む（１：更新）。【０００７】
ノード１０１−１のＣＰＵは、ノード１０１−２のＣＰＵに対して、更新したデータの格納先アドレス（キャッシュライン）を通知することで、データの更新を通知する（２：アドレスによる更新通知）。なお、２：アドレスによる更新通知は、ノード１０１−１のキャッシュのデータ更新（書き込み）と同時、あるいはその直前に行ってもよい。【０００８】
ノード１０１−２では、ノード１０１−１からの更新通知を受けると、ノード１０１−２のキャッシュで当該アドレスのデータ（更新前のデータ）を保持している場合、これを無効化する（３：無効化）。【０００９】
ノード１０１−１のＣＰＵは、ノード１０１−１のキャッシュの更新データを、共有ストレージ３に書き戻す（write back）（４：書戻（反映））。【００１０】
ノード１０１−２のＣＰＵが当該データを参照する場合、ノード１０１−２のキャッシュの該データは無効化されているため（不図示の無効フラグがオン等）、ノード１０１−２のキャッシュはヒットせず（５：ミス）、共有ストレージ３から、第１のノード１０１−１による更新を反映したデータを読み込み、ノード１０１−２のキャッシュに登録する（６：更新データ読込）。なお、ノード１０１−２において、共有ストレージ３から更新データをノード１０１−２のキャッシュに格納する場合、ノード１０１−２のキャッシュに十分な空き容量がない場合、例えば無効化されたデータや参照頻度が最も少ないデータがキャッシュから追い出され、空き領域が確保される。【００１１】
ノード１０１−２において、当該データを参照する場合、ノード１０１−２のＣＰＵは、ノード１０１−２のキャッシュに登録された更新データを参照する（７：アクセス）。【００１２】
＜ストレージキャッシュの管理情報の一例＞
図１９は、図１８のキャッシュの管理情報の一例を模式的に示す図である。キャッシュの管理情報は、例えばキャッシュ制御装置（図１８では不図示）によって管理され、キャッシュ内においてキャッシュメモリとは別の記憶領域に設けられるか、あるいは、キャッシュ制御装置内に設けられる。特に制限されないが、キャッシュの管理情報は、例えば無効フラグ（Invalid flag）、ページアドレス、格納先アドレス、更新済フラグ、置換優先度等を含む。無効フラグ（Invalid flag）は、各ページのデータが無効である（Ｙｅｓ）か、無効でない（Ｎｏ）を表すフラグである。無効フラグがＹｅｓのエントリのキャッシュデータの読み出し、書き込み（更新）は行われず、例えば、キャッシュデータの入れ替え時に、当該キャッシュデータはキャッシュから優先的に追い出される。ページアドレスは、キャッシュに格納されたページについて、ストレージ全体での対応するページアドレス（論理アドレス）である。なお、ストレージのキャッシュの記憶領域は、通常、例えば４KB(KiloByte)、８KB等の固定ページサイズのページ単位で管理される。格納先アドレスは、当該ページ（キャッシュレコード）のキャッシュにおける格納先を表すアドレスである。更新済フラグは、当該ページのデータ（キャッシュレコード）が、キャッシュに格納された後に、更新済であるか否かを表すフラグである。更新済フラグは、例えば、キャッシュ上の当該ページのデータが更新されたが、ストレージへ該更新内容が反映されていない（write backされていない）場合に、Ｎｏとされ、キャッシュ上の当該ページにデータが格納された後に、該ページのデータが未更新状態であるか、ストレージへ更新内容が反映されている場合に、Ｙｅｓに設定される。置換優先度は、キャッシュ上での当該ページの置換の優先度を表す情報である（値の設定としては、例えば正値に関して、大きいほど、当該ページは優先的に置換される。あるいは、値が小さいほど、当該ページは優先的に置換されようにしてもよい）。なお、図１９のキャッシュの管理情報において、ページアドレスは、ストレージに実現されたファイルシステムにおけるパス名（ファイル名）等であってもよい。【００１３】
＜ＭＥＳＩ−ｐｒｏｔｏｃｏｌ＞
複数のノードが記憶領域を共有する場合に、各ノードに分散したキャッシュに対して、キャッシュの一貫性の維持を図るプロトコルが用いられる（例えばＭＥＳＩ−ｐｒｏｔｏｃｏｌ等）。よく知られているように、ＭＥＳＩにおいては、以下の状態をとる。
（１）Ｍｏｄｉｆｉｅｄ（変更）：当該キャッシュだけに存在し、共有ストレージのデータから変更されている（ｄｉｒｔｙ）。他のＣＰＵがこのキャッシュライン（データ）に相当する共有ストレージをリード（Ｒｅａｄ）することを許可する前に、キャッシュ機構はこのキャッシュライン（データ）をいずれかの時点で共有ストレージに書き戻さなければならない。
（２）Ｅｘｃｌｕｓｉｖｅ（排他）：当該キャッシュだけに存在するが共有ストレージ上の値と一致している（ｃｌｅａｎ）。
（３）Ｓｈａｒｅｄ（共有）：システム内の他のキャッシュにも同じキャッシュライン（データ）が存在している（共有ストレージとも内容が一致）。
（４）Ｉｎｖａｌｉｄ（無効）：このキャッシュライン（データ）は無効。
なお、上記では、主記憶のデータを保持するＣＰＵのキャッシュを、共有ストレージのキャッシュに読み替えている。例えばＩｎｖａｌｉｄ（無効）状態のライン（データ）に対してリードアクセス要求が発行された場合、共用ストレージから、データを読み込む必要があり、Ｓｈａｒｅｄ又はＥｘｃｌｕｓｉｖｅ状態に遷移する。またキャッシュへのライトアクセスを実行できるのは、Ｍｏｄｉｆｉｅｄ状態かＥｘｃｌｕｓｉｖｅ状態の場合のみである。Ｓｈａｒｅｄ状態の場合、キャッシュへの書き込みを行う前にシステム内の他のキャッシュ（の該当するキャッシュライン（データ））をＩｎｖａｌｉｄ状態（無効化状態）にしなければならない。これは、通常、ブロードキャスト操作で実行され、その操作を、「Ｒｅａｄ  Ｆｏｒ  Ｏｗｎｅｒｓｈｉｐ（ＲＦＯ）」と呼ぶ。キャッシュにおいて、Ｍｏｄｉｆｉｅｄ状態以外のキャッシュライン（データ）をいつでも捨ててＩｎｖａｌｉｄ状態にすることができる。なお、Ｍｏｄｉｆｉｅｄ状態のキャッシュライン（データ）は必ず共用ストレージに書き戻さなければならない。
【先行技術文献】
【非特許文献】
【００１４】
【非特許文献１】Papamarcos, M. S.; Patel, J. H. (1984). "A low-overhead coherence solution for multiprocessors with private cache memories". Proceedings of the 11th annual international symposium on Computer architecture - ISCA '84. p.348.
【発明の開示】
【発明が解決しようとする課題】
【００１５】
以下に関連技術の分析を与える。【００１６】
＜共有ストレージのアドレス空間のマッピングとキャッシュ・コヒーレンシ＞
図１８を参照して説明したように、複数のノード間でストレージを共有し、各ノードがキャッシュを備えた、関連技術の情報処理システムにおいて、該ノードのキャッシュ上で更新が行われたデータを特定するために、キャッシュ上の更新されたデータに対応する共有ストレージ上での格納先のアドレスを、他のノードに通知することで、キャッシュの一貫性の維持のための無効化が行われる。この場合、複数のノード間で、データのアドレス（論理アドレス）が指し示す共有ストレージ上の領域（物理アドレス）が一意的であることが必要である、すなわち、共有ストレージ上でのデータ格納先の論理アドレスに関して、複数のノードの間で同一のアドレス空間を用いることが前提とある。【００１７】
複数のノード間で、共有ストレージ上の記憶領域に対してアドレス空間上で異なるマッピングを行っている場合（例えば、共有ストレージ上でのデータの格納先の論理アドレスと物理アドレスの対応がノード間で異なる場合）、キャッシュのデータを更新した一のノードが、例えば図１８の２）の「アドレスによる更新通知」を用いて、他のノードにデータの更新の通知を行っても、他のノードにおいて、通知された共有ストレージの格納先のアドレスから、前記一のノードのキャッシュで更新されたデータを特定することはできない。このため、他のノードのキャッシュにおいて、当該一のノードで更新されたデータに対応するキャッシュレコード（エントリ）を選択的に無効化することはできない。また、当該一のノードによって、共有ストレージのデータに、当該一のノードのキャッシュで更新された内容が反映（書き戻し）されても、論理アドレスのマッピングが当該一のノードと異なる他のノードでは、共有ストレージから該更新が反映されたデータを、該他のノードのキャッシュに読み込むことはできない。このため、キャッシュの一貫性を維持することができない。【００１８】
よく知られているシンプロビジョニング（thin provisioning）は、アプリケーションやサーバに割り当てられているストレージを、実際に割り当てられている物理ストレージの物理容量よりも、多くの領域を使えるように見せる技術（仮想化技術）である。シンプロビジョニングでは、ストレージにおいて、ノード（サーバ）が要求した容量を、仮想ボリュームとして割り当てる。ノード（サーバ）は、この仮想ボリュームを論理ボリュームとして認識する。仮想ボリュームに例えば必要最低限の物理容量を初期容量として割り当てておき、運用開始後、仮想ボリュームに対して、書き込まれたデータ量に応じて動的に物理容量を割り当てる。このように、ストレージにおいて、論理ボリュームの空き容量に割り当てられる物理容量を減らすことで（初期段階で大きな論理ボリュームの割り当てを行わないため、論理ボリュームの空き容量に物理容量が割り当てられているという事態を回避する）、ストレージの使用効率を上げる。【００１９】
シンプロビジョニング等により、各ノードのストレージの記憶領域を確保する場合、あるノードによるデータの書き込み量が増大した場合に、当該ノードに対してストレージプールから新たに物理記憶が割り当てられ、当該ノードの仮想ボリュームの記憶領域を初期設定値（例えば１０ＴＢ（TeraByte））から増やす（例えば３０ＴＢに増やす）ことになる。記憶領域の割り当ての際に、ノードで実行する処理のアクセスパターンの相違等によって記憶領域(物理ページ)のアドレス空間（論理アドレス空間）へのマッピングが変化することになる。そのため、ノード間で共有される共有ストレージ及びノードのキャッシュに、例えばＶＭのイメージ等を格納し、ＶＭを実行するノードが変更可能とされる仮想システムにおいて、シンプロビジョニング等を用いて各ノードの記憶領域を確保する場合、ノードによって共有ストレージのアドレス空間のマッピングが異なることから、一般的なキャッシュ一貫性維持のプロトコルを利用することはできない。このことは、ＶＭを備えた仮想化システムに制限されない。共有ストレージ上の記憶領域のアドレス空間のマッピングがノードによって異なる場合、あるノードのキャッシュにおいてデータの書き込み（更新）が発生する毎に、他のノードのキャッシュ全体を無効化する必要がある。【００２０】
＜キャッシュ無効化による性能低下＞
例えば、あるノードのキャッシュのデータが更新され、該データの共用ストレージのアドレスを他のノードに通知しても（図１８の「アドレスによる更新通知」）、他のノードでは、アドレスマッピング（仮想アドレス空間又は論理アドレス空間から物理アドレス空間へのマッピング）が相違しているため、通知された更新データ格納先のページアドレスから当該データを特定することができない。このため、他のノードでは、他のノードのキャッシュに保持されているデータを全て無効化する。キャッシュに保持されているデータ全体を無効化することは、キャッシュレコード全てを削除することに対応する。キャッシュ全体の無効化は、無効化のための処理負荷が必要とされるほか、無効化が完了したキャッシュにはデータが何も保持されていない状態となり、キャッシュに頻繁に参照されるデータが格納されるまで、ほとんどアクセスはキャッシュミスとなり、アクセス性能の低下を伴う。【００２１】
また、共有ストレージ上のデータに対して、書き込み（Ｗｒｉｔｅ）が行われる頻度は、共有ストレージを共有するノードの数に比例する。このため、多数のノードを持つ大規模なシステムでは、キャッシュの一貫性を維持するために各ノードのキャッシュにおいて、他ノードによって更新された可能性を持つデータを全て無効化する場合、各ノードでのキャッシュ全体の無効化による、システムの性能の大幅な低下が懸念される。【００２２】
したがって、本発明は、上記問題点に鑑みて創案されたものであって、その目的は、複数のノードが、該複数のノード間で共有するストレージに対するキャッシュをそれぞれ有するシステムにおいて、キャッシュの一貫性を維持するために行われる無効化対象のデータ量を削減し性能低下を抑制可能とする装置と方法とプログラムを提供することにある。
【課題を解決するための手段】
【００２３】
本発明の関連するいくつかの側面の１つによれば、複数のノードと、前記複数のノードで共有されるストレージと、を備え、前記複数のノードは、前記ストレージのデータを一時的に保持するキャッシュをそれぞれ備え、データをアクセスする処理が前記複数のノードのうちの一のノードから他のノードに移動したときの時刻情報を記録しておき、前記処理が前記他のノードに移動した後の前記一のノードでは、前記一のノードの前記キャッシュに保持されているデータのうち、前記他のノードへ移動する前の前記処理が前記一のノード上で最後にアクセスした時刻が、前記処理が前記一のノードから前記他のノードへ移動した時刻よりも古いデータを選択的に無効化するストレージシステムが提供される。【００２４】
本発明の関連する別の側面の１つによれば、複数のノード装置間で共有するストレージのデータを一時的に保持するキャッシュを備えたノード装置であって、前記キャッシュに保持されるデータに対するアクセスが行われる毎に、アクセス時刻を記録するアクセス時刻記録部と、
前記キャッシュに保持されているデータのうち、前記アクセス時刻記録部で記録されたデータの最終アクセス時刻と、入力した無効化の基準時刻とを比較し、前記最終アクセス時刻が、前記無効化の基準時刻以前であるデータの無効化を、前記データがアクセスされる前の所定のタイミング又は契機で行うキャッシュ無効化部と、を備えたノード装置が提供される。【００２５】
本発明の関連する別の側面の１つによれば、複数ノード間で共有するストレージのデータを一時的に保持するキャッシュを備えた各ノードに接続され、データのアクセス処理の実行開始の通知を前記ノードから受ける管理装置であって、
データをアクセスする処理の実行するノードの変更を検出する実行ノード変更検出部と、
前記処理を実行するノードの情報を記録する実行ノード記録部と、
前記処理を実行するノードで、最後に前記データのアクセス処理が実行された時刻を記録する時刻記録部と、
データを共有する複数のアクセス処理が、同一のノードで順次実行されるように処理を配置する処理配置部と、
前記ノードに対して前記ノードのキャッシュに格納されたデータの無効を通知する無効通知部と、
を備え、前記無効通知部は、前記処理を実行するノードが変更された時刻を、前記ノ−ドに通知する、管理装置が提供される。【００２６】
本発明の関連するさらに別の側面の１つによれば、
複数のノードで共有されるストレージのデータを一時的に保持するキャッシュをそれぞれ有する複数のノードのうち、データをアクセスする処理が一のノードから他のノードに移動したときの時刻情報を記録しておき、
前記処理が前記他のノードに移動した後の前記一のノードでは、前記一のノードの前記キャッシュに保持されているデータのうち、前記他のノードへ移動する前の前記処理が前記一のノード上で最後にアクセスした時刻が、前記処理が前記一のノードから前記他のノードへ移動した時刻よりも古いデータを選択的に無効化するキャッシュの制御方法が提供される。【００２７】
本発明の関連するさらに別の側面の１つによれば、複数のノード装置間で共有するストレージのデータを一時的に保持するキャッシュを備えたノード装置を構成するコンピュータに、
前記キャッシュに保持されるデータに対するアクセスが行われる毎にアクセス時刻を記録するアクセス時刻記録処理と、
前記キャッシュに保持されているデータのうち、前記アクセス時刻記録部で記録されたデータの最終アクセス時刻と、入力した無効化の基準時刻とを比較し、前記最終アクセス時刻が、前記基準時刻以前であるデータの無効化を、前記データがアクセスされる前の所定のタイミング又は契機で行うキャッシュ無効化処理と、
を実行させるプログラムが提供される。本発明によれば、該プログラムを記録したコンピュータ読み出し可能な媒体（半導体メモリ、磁気／光ディスク等の記録媒体）が提供される。
【発明の効果】
【００２８】
本発明によれば、複数のノードが共有ストレージのキャッシュをそれぞれ有するシステムにおいて、キャッシュの一貫性を維持するための無効化対象のデータ量を削減可能とし性能低下を抑制可能としている。
【図面の簡単な説明】
【００２９】
【図１】本発明の一実施形態における、全体のシステム構成を示す図である。
【図２】本発明の一実施形態のノードの構成を例示する図である。
【図３】本発明の一実施形態における最終アクセス時刻テーブルを例示する図である。
【図４】本発明の一実施形態における管理ノードの構成を例示する図である。
【図５】本発明の一実施形態における実行ノードテーブルを例示する図である。
【図６】本発明の一実施形態におけるノード実行終了時刻テーブルを例示する図である。
【図７】本発明の一実施形態の動作手順を説明するフローチャートである。
【図８】図７のＳ１３の詳細手順を説明するフローチャートである。
【図９】本発明の一実施例における、全体のシステム構成を示す図である。
【図１０】本発明の一実施例における実行ノードテーブルの初期状態を示す図である。
【図１１】本発明の一実施例におけるノード実行終了時刻テーブルの初期状態を示す図である。
【図１２】本発明の一実施例における実行ノードテーブル（ＶＭの実行ノードを一度変更した後の状態）を示す図である。
【図１３】本発明の一実施例におけるノード実行終了時刻テーブル（ＶＭの実行ノードを一度変更した後の状態）を示す図である。
【図１４】本発明の一実施例における最終アクセス時刻テーブルを示す図である。
【図１５】本発明の基本概念を説明する図である。
【図１６】本発明の基本概念を説明する図である。
【図１７】本発明の基本概念を説明する図である。
【図１８】キャッシュ一貫性維持を説明する図である。
【図１９】ストレージのキャッシュ管理情報の一例を例示する図である。
【発明を実施するための形態】
【００３０】
本発明のいくつかの実施形態について説明する。本発明の一つの側面によれば、図１５を参照すると、情報処理システムは、複数のノード（ノード１−１、１−２）と、複数のノードで共有されるストレージ（共用ストレージ３）を少なくとも備えている。複数のノード（１−１、１−２）は、共有ストレージ３のデータを一時的に保持するキャッシュ１３−１、１３−２をそれぞれ備えている。なお、図１５では、単に説明の簡単のため、２つのノード１−１、１−２が示されているが、ノードは３個以上であってもよいことは勿論である。本発明の一つの側面によれば、キャッシのデータ、又はキャッシュとストレージのデータをアクセスする処理（該処理は、仮想マシン（ＶＭ）による実装も含む）はノード間で移動（migration）可能とされる。
【００３１】
本発明の一つの側面によれば、一のノード（例えばノード１−１）で実行されていた、データをアクセスするアクセス処理（キャッシュデータの更新処理等、例えば処理Ａ）が、前記一のノード（１−１）から他のノード（例えばノード１−２）に移動したときの時刻（移動時刻）情報を記録しておき、前記アクセス処理（処理Ａ）が前記他のノード（１−２）へ移動した後の前記一のノード（１−１）では、前記一のノード（１−１）の前記キャッシュ（１３−１）に保持されているデータのうち、前記アクセス処理（処理Ａ）が前記一のノード（１−１）から前記他のノード（１−２）へ移動する前に、前記アクセス処理（処理Ａ）が前記一のノード（１−１）上で、最後にアクセスした時刻が、前記アクセス処理（処理Ａ）が前記一のノード（１−１）から前記他のノード（１−２）へ移動した時刻（移動時刻）よりも古いデータを選択的に無効化する。前記一のノード（１−１）において、前記無効化は、前記アクセス処理（処理Ａ）が前記他のノード（１−２）へ移動した後、前記一のノード（１−１）の前記キャッシュ（１３−１）上の当該データが再びアクセス（参照又は更新等のアクセス）される前の所定のタイミング又は契機で行う。上記したキャッシュ無効化の制御は、前記一のノード（１−１）に備えられるキャッシュ制御部(図１５では不図示)で行ってもよいし、前記キャッシュ（１３−１）内の制御部（不図示）で行うようにしてもよいし、あるいは、前記一のノード（１−１）に接続される不図示の管理装置（制御装置）と連携して行うようにしてもよい。特に制限されないが、以下では、移動元であるノード１−１で実行されていたアクセス処理（処理Ａ）を、ノード１−２へ移動してノード１−２上で実行した後、該処理Ａをノード１−２から直接、元のノード１−１に戻す場合について説明する（処理Ａをノード１−２から不図示の他のノードへの移動を経由して元のノード１−１に戻す場合についても同様である）。
【００３２】
ノード１−１では、例えば、処理Ａがノード１−２からノード１−１に移動した時刻（Ｔ１）以降に、キャッシュ１３−１において一貫性を維持するための無効化を行う。処理Ａが過去にノード１−１からノード１−２に移動した時刻（Ｔ０）（特に制限されないが、例えば、西暦年月日時分秒のタイムスタンプ）と、キャッシュ１３−１に保持されているデータの最終アクセス時刻（処理Ａがノード１−１からノード１−２への移動する前にノード１−１上でキャッシュ１３−１にアクセスしたデータの最終アクセス時刻、特に制限されないが、例えば西暦年月日時分秒のタイムスタンプ）とを比較し、キャッシュ１３−１に保持されているデータのうち、最終アクセス時刻の方が、処理Ａが過去にノード１−２へ移動した時刻（Ｔ０）よりも古いデータ（キャッシュページ）を無効化する。ノード１−１において、この無効化は一括して行ってもよい。あるいは、処理Ａがノード１−２からノード１−１に移動した時刻（Ｔ１）以降に、処理Ａにより、ノード１−１において、キャッシュ１３−１に保持されているデータのうち、ノード１−２へ移動する前の処理Ａがノード１−１上で最後にアクセスした時刻が、処理Ａがノード１−１から前記ノード１−２へ移動した時刻（Ｔ０）よりも古いデータへのアクセス要求が行われることを契機として、該アクセスの実行直前に、前記データ（処理Ａがノード１−１で最後にアクセスした時刻が、該Ｔ０よりも古いデータ）の無効化を、個別に（当該データへのアクセス要求実行のたびに）行うようにしてもよい。処理がノード間を移動した時刻は、図示されない管理装置（管理ノード）等において、その都度、記録するようにしてもよい。なお、処理Ａが、ノード１−１からノード１−２に移動後、移動先のノード１−２からさらに不図示のいくつかの他のノードに移動されたのち、ノード１−１に戻る場合にも、ノード１−１では、上記と同様、処理Ａがノード１−１に戻った時刻以降に、ノード１−１のキャッシュ１３−１に保持されているデータの最終アクセス時刻が、処理Ａが過去にノード１−２へ移動した時刻（Ｔ０）よりも古いデータ（ページ）を無効化する。また、処理Ａがノード１−２からさらに不図示の他のノードに移動された場合にも、処理Ａが再びノード１−２に戻った場合、ノード１−２のキャッシュ１３−２に保持されているデータのうち、処理Ａが不図示の他のノードへの移動前に、ノード１−２上で最後にアクセスした時刻が、前記処理Ａがノード１−２からさらに他のノードへ移動した時刻よりも古いデータを無効化する。
【００３３】
＜アクセス処理のノード間移動（inter-node migration）と、キャッシュの無効化制御＞
図１６、図１７は、図１５におけるアクセス処理の移動とノードでのキャッシュ制御を模式的に説明する図である。図１７は、図１６の処理Ａの移動時刻及び各処理によるデータ参照・更新と、各データの無効化の有無を時系列で模式的に説明する図である。図１６において、データのアクセス処理Ａ、Ｂ、Ｃはノード１−１、１−２のいずれかで実行可能であり、初期状態では、全ての処理がノード１−１で実行されるものとする。図１６（Ａ）に示すように、時刻Ｔ０で処理Ａはノード１−１からノード１−２に移動し、その後、図１６（Ｂ）に示すように、時刻Ｔ１で処理Ａはノード１−２からノード１−１に移動している。
【００３４】
時刻Ｔ０に、処理Ａがノード１−１からノード１−２に移動した場合、処理Ａがノード１−１でキャッシュ（図１５の１３−１）に格納したデータ（図１７のＡ１、Ａ２）は、ノード１−１で実行中のいずれの処理からもアクセスされない。よって、これらのデータの最終アクセス時刻は、必ず、処理Ａがノード１−１からノード１−２に移動した時刻Ｔ０よりも以前となる。一方、ノード１−１上で実行される他の処理Ｂ、Ｃが、キャッシュ（図１の１３−１）に格納したデータは、処理Ａがノード１−１からノード１−２へ移動した後も、他の処理（図１６の処理Ｂ、Ｃ）によってアクセスされる。したがって、その最終アクセス時刻が更新され、処理Ａの移動時刻Ｔ０よりも、後の時刻となる。すなわち、時刻Ｔ１に再び処理Ａがノード１−１に戻った際に、ノード１−１のキャッシュ（図１５の１３−１）において、最終アクセス時刻が処理Ａの移動時刻Ｔ０以降のデータ（図１７のＢ２、Ｃ１、Ｃ２、Ｂ３）は、ノード１−１において処理Ａによってアクセスされたデータではない。ノード１−１のキャッシュ（図１５の１３−１）に格納された、これらのデータ（図１７のＢ２、Ｃ１、Ｃ２、Ｂ３）は、期間Ｔ０と期間Ｔ１の間、ノード１−１以外では更新されない。このため、ノード１−１のキャッシュ（図１５の１３−１）において、最終アクセス時刻が処理Ａの移動時刻Ｔ０以降のデータ（図１７のＢ２、Ｃ１、Ｃ２、Ｂ３）の無効化は不要である。
【００３５】
ノード１−１のキャッシュ（図１５の１３−１）に格納されているデータに関して、最終アクセス時刻がＴ０以前のデータは、処理Ａがノード１−２に移動する前にノード１−１のキャッシュ（図１５の１３−１）に格納されたデータであり、ノード１−２に移動する前の処理Ａによって更新された可能性がある。このため、一貫性維持のための無効化が必要である。このように、あるノード（例えば１−１）において、キャッシュ（図１５の１３−１）上のデータの最終アクセス時刻と、処理Ａが過去に他のノード（例えば１−２）に移動した移動時刻（Ｔ０）とを比較し、最終アクセス時刻が移動時刻（Ｔ０）以前のデータを無効化対象とすることで、当該あるノード（１−１）のキャッシュ（図１５の１３−１）上で無効化対象となるデータ量を削減し、キャッシュの性能（アクセス性能）の低下を抑制する。図１６（Ａ）の処理Ａがノード１−１からノード１−２へ移動する移動時刻Ｔ０、図１６（Ｂ）の処理Ａがノード１−２からノード１−１へ移動する移動時刻Ｔ１等、各処理がノード間で移動する毎に、その移動時刻の記録が行われる。
【００３６】
ノード１−１のキャッシュ（図１５の１３−１）において、処理Ａ以外の処理（例えば処理Ｂ）がアクセスするデータ（例えば図１７のＢ１）についても、最終アクセス時刻がＴ０以前であるという条件を満たせば、無効化の対象とされる。この場合、ノード１−１のキャッシュ（図１５の１３−１）において、処理Ａ以外の処理Ｂがアクセスするデータ（図１７のＢ１）の無効化によって、キャッシュ（図１５の１３−１）において本来ヒットするはずのデータが無効化され、ヒット率の低下等、キャッシュ性能の低下（アクセス性能の低下）の原因となる可能性も考えられる。しかしながら、この場合、ノード１−１のキャッシュ（図１５の１３−１）において無効化されるデータは、最終アクセス時刻がＴ０以前のデータ、つまり、処理Ａが他のノード１−２で実行されている間（時刻Ｔ０からＴ１の間）に一度も参照されない、アクセス頻度の低いデータであるといえる。処理のノード間の移動の頻度等にもよるが、無効化対象となるデータは、参照頻度が低いデータであるため、アクセス性能の低下の影響は十分に抑えることができる。
【００３７】
図１７を参照すると、時刻Ｔ０以前には、ノード１−１において、例えば処理ＡによりアクセスされたデータＡ１、Ａ２がキャッシュ（図１５の１３−１）に格納されている（Ｂ１は処理Ｂによってキャッシュ（１３−１）に格納されたデータである）。なお、キャッシュに格納されたデータＡ１、Ａ２が、処理Ａの書き込みアクセスにより更新されたものである場合、更新データＡ１、Ａ２は、共有ストレージ（図１５、図１６の３）に書き戻され（Write Back）、更新内容が反映される。  
【００３８】
時刻Ｔ０で、処理Ａはノード１−２に移動する。図示されない管理ノード等で、この移動時刻Ｔ０が記録される。時刻Ｔ０の後、ノード１−２では、移動してきた処理ＡによりデータＡ１、Ａ２が更新され、キャッシュ（図１５の１３−２）に更新データＡ１’、Ａ２’が格納される。更新データＡ１’、Ａ２’は、共有ストレージ（図１５、図１６の３）に書き戻され（Write Back）、更新内容が反映される。一方、ノード１−１では、キャッシュ（図１５の１３−１）において、データＢ２、Ｃ１、Ｃ２、Ｂ３が格納されるが、処理Ａの影響を受けず、ノード１−２でキャッシュ（図１５の１３−２）が更新されても、ノード１−１において、キャッシュ（図１５の１３−１）の一貫性維持のための無効化は不要である。
【００３９】
時刻Ｔ１で処理Ａがノード１−２からノード１−１に戻る。処理Ａが移動した移動先のノード１−１では、前記ノード１−１の前記キャッシュ（図１５の１３−１）に保持されているデータのうち、ノード１−１から過去に他のノード１−２へ移動する前の前記処理Ａが前記ノード１−１上で最後にアクセスした時刻が、前記処理Ａがノード１−１から他のノード１−２へ移動した時刻Ｔ０よりも古いデータを無効化する。すなわち、処理Ａがノード１−２からノード１−１に移動した時刻（Ｔ１）以降、ノード１−１のキャッシュ（図１５の１３−１）において、最終アクセス時刻がＴ０以前のデータは、Ｔ０以降ノード１−２の処理Ａによって更新されている可能性があるため、無効化する。その際、ノード１−１の前記キャッシュ（図１５の１３−１）において、処理ＡでアクセスされたものでないキャッシュデータＢ１も、その最終アクセス時刻がＴ０以前であるため、無効化される。なお、ノード１−１のキャッシュ（図１５の１３−１）において、データＡ１（データＡ１を格納したキャッシュのページ）が無効化されている場合、データＡ１へのアクセスはミスヒットとなり、共有ストレージ（図１５の３）から更新データＡ１’（処理Ａがノード１−２で実行されているときに更新されたデータ）が読み出され、キャッシュ（図１５の１３−１）に格納される。
【００４０】
本発明の一形態によれば、キャッシュに格納されたデータについて、ノード間で、共有ストレージのアドレス空間のマッピング等が異なり、他のノードで更新されたデータを、共有ストレージの格納先アドレスを用いて特定することが不可能な場合でも、キャッシュの一貫性を維持するために、キャッシュ全体を無効化することはしない。キャッシュに格納されたデータを選択的に無効化することで、無効化するデータ量を削減し、キャッシュ無効化による性能低下の影響を低減する。すなわち、データをアクセスする処理のノード間移動が行われた場合、移動元のノードのキャッシュに保持されるデータの最終アクセス時刻と、処理が過去に当該移動元のノードから他のノードに移動した移動時刻（無効化の基準時刻）とを比較し、最終アクセス時刻が当該基準時刻よりも古いデータを、選択的に無効化することで、例えばノード間において、共有ストレージの論理アドレス空間（仮想アドレス空間）の、記憶媒体の物理アドレスへのマッピングが異なる場合であっても、キャッシュ全体を無効化することを要しなくし、無効化対象のデータ量を削減している。
【００４１】
＜単一ノードでの処理の実行＞
本発明の一形態によれば、好ましくは、データのアクセス処理を、常に、単一のノード上で実行するように設定する。例えば複数のノードが同時に同一データへアクセスすることはない。この場合、共有ストレージのデータは、常に、単一のノードからアクセスされ、データは単一のノード上のキャッシュにのみ格納される（データへのアクセスを行う単一のノードは、固定ノードである必要はなく、あるノードから別のノードに変わってもよい）。この場合、単一のノード上のキャッシュに格納されたデータに対する書き込みアクセスに対して、他のノードでキャッシュの無効化を行うことは不要である。図１５の例では、前記キャッシュ又は前記ストレージのデータのアクセス処理を実行するノードを、第１のノード１−１から第２のノード１−２へ変更すると、共有ストレージ３上のデータは、常に、第２のノード１−２からアクセスされ、共有ストレージ３上のデータの写し又は更新内容は、第２のノード１−２上のキャッシュ１３−２にのみ格納される。
【００４２】
ノード間でデータを共有するキャッシュ構成では、あるノードのキャッシュに格納されたデータが更新されるごとに、他のノードのキャッシュに格納されたデータの無効化が必要とされる。これに対して、本発明の一形態によれば、データは単一のノードからアクセスされ、単一のキャッシュにのみ格納される構成としたことで、あるノードでのキャッシュに格納されたデータの更新毎に発生する他のノードのキャッシュの無効化は不要である。
【００４３】
再び図１５を参照すると、処理Ａを実行するノードが、ノード１−１からノード１−２に変更された場合、ノード１−１とノード１−２がそれぞれ保有するキャッシュ１３−１、１３−２には、該処理Ａが、移動元のノード１−１と、移動先のノード１−２上で、それぞれアクセスしたデータが格納されるが、共有ストレージ３の格納先アドレスのマッピング（論理アドレス空間と物理アドレスの対応）が、ノード１−１、１−２間で同一である場合、共有ストレージ３の格納先アドレスが同一のデータを、前記処理Ａが、移動前のノード１−１と、移動後のノード１−２でそれぞれアクセスした場合、該同一のデータが、ノード１−１とノード１−２のキャッシュ１３−１、１３−２に格納される。処理Ａの移動先のノード１−２のキャッシュ１３−２において、データが更新された場合には、ノード１−２のキャッシュ１３−２においてのみデータの更新が反映され、移動元ノードであるノード１−１のキャッシュ１３−１には、該処理Ａが移動先のノード１−２へ移動する前（ノード変更前）のデータが格納された状態のままとされる。この状態を解消し、ノード１−１、１−２のキャッシュ１３−１、１３−２間でキャッシュの一貫性を維持するために、ノード１−１においてキャッシュ１３−１に格納されている、更新前のデータ（更新が反映されていない状態のデータ）に対する無効化が行われる。このように、あるノードのキャッシュに格納されたデータの無効化は、処理（例えば仮想マシン）が、当該ノードから他のノードに移動し、該他のノードのキャッシュのデータが更新された場合に必要である。
【００４４】
関連技術の問題点として前述したように、共有ストレージの格納先アドレスのマッピングがノード間で異なり、アクセス処理の移動先のノードで更新されたデータを、移動元のノードで一意に特定することが不可能である場合、移動先のノード以外の他のノード（移動元のノード）では、キャッシュの一貫性を維持するために、キャッシュに保持されている全てのデータに対する無効化が行われる（移動先のノードで更新された可能性があるためである）。しかし、このようなキャッシュデータ全体の無効化は、性能の低下を招く。
【００４５】
キャッシュの一貫性の維持を図るための無効化による性能低下を抑えるためには、キャッシュに格納されたデータを無効化する頻度、及び、キャッシュ上で無効化の対象となるデータの量、を削減する必要がある。
【００４６】
＜キャッシュ無効化を行うノードの選択：移動元ノード＞
本発明の一形態によれば、キャッシュの一貫性が失われた可能性の存在するノードのみに限定して、キャッシュの無効化が行われる。すなわち、アクセス処理を実行するノードが他のノードに移動された場合に、アクセス処理の移動元となるノードに対してのみキャッシュに格納されたデータの無効化を行う。
【００４７】
＜キャッシュ無効化のデータ量の削減＞
本発明の一形態によれば、アクセス処理のノード間の移動において、移動元のノードのキャッシュに格納されたデータの無効化の際に、無効化の対象となるデータ量を削減するために、アクセス処理が移動元のノードから他のノードへ移動する移動時刻を記録する。この移動時刻は、例えば、移動元のノードに通信接続される管理ノード等の記憶装置に記憶される。また、アクセス処理を実行するノードにおいて、キャッシュに保持されるデータに対する前記アクセス処理による最終アクセス時刻を保持する。すなわち、該ノードで実行されるアクセス処理により該ノードのキャッシュに保持されるデータがアクセスされる毎に、該データのアクセス時刻を更新する（アクセスがなくなった場合、最後に更新されたアクセス時刻が最終アクセス時刻となる）。ノードにおいて、前記アクセス処理によるキャッシュに保持されるデータの最終アクセス時刻は、データに関連付けてキャッシュに記憶保持するようにしてもよい。キャッシュの一貫性維持のための無効化を行う移動元ノードでは、当該ノードのキャッシュに保持されたデータの最終アクセス時刻と、アクセス処理が当該移動元ノードから他のノードに移動した移動時刻とを比較することで、キャッシュの一貫性が維持された状態のデータを除いた、残りのデータ（キャッシュの一貫性が維持されないデータ）に対してのみ、選択的に無効化を行う。  
【００４８】
例えば、図１５において、処理Ａ（アクセス処理）がノード１−１から他のノード１−２に移動した場合、移動元のノード１−１のキャッシュ１３−１において、移動前の前記処理Ａがノード１−１でアクセスしたデータの最終アクセス時刻は、処理Ａのノード１−１からノード１−２への移動時刻よりも、必ず、時間的に前である（古い）。  
【００４９】
＜キャッシュの無効化の頻度削減＞
本発明の一形態によれば、キャッシュの一貫性を維持し、キャッシュに格納されたデータの無効化を行う頻度を最小化するために、第１のアクセス処理を実行するノードがノード１−１からノード１−２に変更された場合、前記第１のアクセス処理とデータを共有する第２のアクセス処理についても、実行するノードがノード１−２以外のノードである場合、前記第１のアクセス処理の移動先であるノード１−２に変更する。例えば、ノード１−２に第２のアクセス処理を移動せず、ノード１−２以外のノード上で第２のアクセス処理を実行してデータに更新が行われた場合、第１のアクセス処理の移動元のノード１−１のほかに、第１のアクセス処理を実行するノード１−２でも、キャッシュの一貫性維持のため無効化を行うことが必要となる場合がある。これに対して、ノード１−２以外のノードでは、第２のアクセス処理を実行せずに、ノード１−２に第２のアクセス処理を移動してノード１−２上で第１、第２のアクセス処理を実行し前記共有するデータを更新するようにすることで、当該データに関してキャッシュの一貫性維持のための無効化は、移動元のノード１−１でのみ行われる。すなわち、キャッシュの一貫性維持のための無効化の頻度を削減している。
【００５０】
＜キャッシュ無効化対象データ量の削減：移動元ノードでのキャッシュ制御＞
図１５において、移動元であるノード１−１は、処理Ａ（アクセス処理）がノード１−１からノード１−２に移動した後に、ノード１−１のキャッシュ１３−１でアクセスされたデータ（図１７のＢ２、Ｃ１、Ｃ２、Ｂ３）を無効化の対象から外す。つまり、キャッシュに格納されたデータの無効化を行う場合、処理Ａがノード１−１からノード１−２に移動した後に、移動元のノード１−１のキャッシュ１３−１でアクセスされるデータは、移動先のノード１−２の前記処理Ａからはアクセスされない。このため、移動元のノード１−１のキャッシュ１３−１上の当該データは、無効化の対象から除外することができる。
【００５１】
アクセス頻度の高いデータであるほど、処理Ａ（アクセス処理）を実行するノードを、ノード１−１からノード１−２へ変更した後に、移動先のノード１−２で実行される処理Ａによって、キャッシュ１３−２上でアクセスが行われる可能性も高くなる。このため、移動元のノード１−１のキャッシュ１３−１上の当該データを無効化の対象から除外することは、キャッシュ無効化によるアクセス性能の低下の影響の低減に、効果的である。
【００５２】
＜キャッシュ無効化の遅延制御＞
また、キャッシュ無効化の対象となるデータ量を更に削減するために、キャッシュの一貫性維持のためのキャッシュ無効化を行う時期を、例えば可能な限り、遅らせるようにしてもよい。データのアクセス処理（処理Ａ）を実行するノードがノード１−１からノード１−２に変更されて、前記アクセス処理の移動先のノード１−２のキャッシュ１３−２のデータの更新が行われ、移動元のノード１−１のキャッシュ１３−１には、更新前のデータがそのまま残されている場合、前記更新前のデータが参照されない限り、キャッシュの一貫性は維持された状態にある。つまり、前記アクセス処理（処理Ａ）がノード１−１に戻って実行されるまでの間に、ノード１−１のキャッシュ１３−１に保持された前記更新前のデータを無効化すれば、キャッシュの一貫性を維持することができる。そのため、アクセス処理（処理Ａ)がノード１−１に戻り、ノード１−１上で当該アクセス処理（処理Ａ)により、キャッシュ１３−１上の当該データ（当該アクセス処理（処理Ａ）がノード１−２への移動前にキャッシュ１３−１上で最後にアクセスした時刻が、処理Ａがノード１−１からノード１−２へ移動した時刻（Ｔ０）よりも古いデータ）へのアクセスが行われるときに（当該データへのアクセスの実行直前に）、その都度、キャッシュ１３−１上の当該データの無効化を行うようにしてもよい。アクセス処理を実行するノードの変更は、オーバーヘッドを伴う場合が多いことから、一般に、アクセス処理を実行するノードの変更が頻繁には行われることはない。そのため、他のノード（図１５のノード１−２）で、前記アクセス処理が実行されている間に、キャッシュに格納された、アクセス頻度の高いデータに対するアクセスが行われることで、最終アクセス時刻が更新される。
【００５３】
なお、前記アクセス処理（処理Ａ）が移動した後の移動元のノード１−１のキャッシュ１３−１に格納されたデータの無効化は、無効となったデータが誤ってアクセスされる可能性が発生した、任意の時点で行うようにしてもよい。あるいは、前記アクセス処理（処理Ａ）が時刻Ｔ０に他のノード１−２に移動し、ノード１−２のキャッシュ１３−２のデータに対するアクセスを実行するようになった後に、ノード１−１のキャッシュ１３−１に格納されたデータの無効化を行うようにしてもよい。この場合、移動元のノード１−１のキャッシュ１３−１において、例えば一度もアクセスされていないアクセス頻度の低いデータに対してのみ、行うようにしてもよい。
【００５４】
＜システムの一形態＞
本発明の一形態によれば、キャッシュの一貫性維持に関連した構成として、
・ノードのキャッシュに格納されたデータに対する最終アクセス時刻を記録する手段（図２のアクセス時刻記録部１４）と、
・ノードにおけるキャッシュのデータのアクセス処理の実行開始を通知する手段（図２の処理開始通知部１５）と、
・データのアクセス処理を実行中のノードの変更を検出する手段（図４の実行ノード変更検出部２４）と、
・データのアクセス処理を実行中のノードの情報を記録する手段（図４の実行ノード記録部２１）と、
・データのアクセス処理がノードにおいて最後に実行されていた時刻を記録する手段（図４の処理移動時刻記録部２２）と、
・データを共有する複数のアクセス処理が同一のノードで実行されるように、処理の配置を行う手段（図４の処理配置部２３）と、
・ノードに対して該ノードのキャッシュに格納されたデータの無効を通知する手段（図４のデータ無効通知部２５）と、
・データの無効を通知する手段からの無効の通知を受け、ノードのキャッシュ内の最終アクセス時刻が古いデータを無効化する手段（図２のキャッシュ無効化部１６）と、を備える。
【００５５】
ノードのキャッシュに格納されたデータ毎に最終アクセス時刻を記録する手段（アクセス時刻記録部１４）は、ノードのキャッシュに格納されたデータに対して、ノード内の処理からのアクセス毎に、当該アクセスの対象となったデータの最終アクセス時刻の情報を記録するか、あるいは、更新する。
【００５６】
ノードにおける処理の実行開始を通知する手段（処理開始通知部１５）は、ノードで行われる新たなアクセス処理の実行開始を検出する。また、処理開始通知部１５は、検出されたアクセス処理の実行開始について、アクセス処理の実行中のノードを記録する手段、アクセス処理がノードにおいて最後に実行されていた時刻を記録する手段に通知する。
【００５７】
データをアクセスする処理（アクセス処理）について、該アクセス処理を実行中のノードの変更を検出する手段（実行ノード変更検出部２４）は、前記ノードにおける処理の実行開始を通知する手段（処理開始通知部１５）から送られる通知を受けて、前記通知の生成元である処理を実行するノード（実行ノード）が変更されているか否か判定する。また実行ノード変更検出部２４は、前記判定の結果、実行ノードが変更されている場合に、実行ノードの情報、及び、以前の実行ノードにおいて最後に実行されていた時刻の情報について、更新を指示する。
【００５８】
アクセス処理の実行中のノードを記録する手段（実行ノード記録部２１）は、情報処理システムで実行される、アクセス処理の実行ノードの情報を記録する。また、実行ノード記録部２１は、前記実行ノード変更検出部２４からの問い合わせに対して、アクセス処理の実行ノードを応答する。さらに、実行ノード記録部２１は、前記実行ノード変更検出部２４が検出した、アクセス処理に対する新たな実行ノード（新規実行ノード）の情報に基づき、記録された実行ノードの情報を更新する。
【００５９】
アクセス処理、がノードにおいて最後に実行されていた時刻を記録する手段（処理移動時刻記録部２２）は、情報処理システムで実行される、処理について、ノードにおける実行が終了した時刻（ノード実行終了時刻）を記録する。
【００６０】
また、アクセス処理がノードにおいて最後に実行されていた時刻を記録する手段（処理移動時刻記録部２２）は、前記アクセス処理を実行中のノードの変更を検出する手段（実行ノード変更検出部２４）からの問い合わせに対して、記録されたアクセス処理のノードにおけるノード実行終了時刻を応答する。
【００６１】
さらに、アクセス処理がノードにおいて最後に実行されていた時刻を記録する手段（処理移動時刻記録部２２）は、前記アクセス処理を実行中のノードの変更を検出する手段（実行ノード変更検出部２４）が、実行ノードの変更を検出した処理について、実行ノード変更検出部２４から指示された、以前の実行ノードについてノード実行終了時刻を更新する。
【００６２】
データを共有する複数の処理が同一ノードで実行されるように配置する手段（処理配置部２３）は、前記実行ノード変更検出部２４が、実行ノードの変更を検出したアクセス処理について、前記アクセス処理とデータを共有する他のアクセス処理について実行ノードを変更して、実行ノードが前記アクセス処理と同一ノードとなるようにする。
【００６３】
ノードに、該ノードのキャッシュに格納されたデータの無効を通知する手段（データ無効通知部２５）は、前記実行ノード変更検出部２４からの指示により、指定されたノードに対して、指定された時刻より前にアクセスされたデータが無効であることを通知する。
【００６４】
キャッシュ内の最終アクセス時刻が古いデータを無効化する手段（キャッシュ無効化部１６）は、前記データ無効通知部２５から送られた通知を受けて、当該ノードのキャッシュにおいて、前記アクセス時刻記録部１４によって記録された最終アクセス時刻が、前記通知で指定された時刻以前であるデータを無効化して、キャッシュに格納されていない状態となるようにする。
【００６５】
本発明によれば、複数のノードと、各ノードが共有するストレージから構成され、前記各ノードは前記共有ストレージに対する個別のキャッシュを有する情報処理システムにおいて、キャッシュに格納されたデータから、他のノードで更新されたデータを特定することが不可能な場合であっても、本発明を適用しない場合（比較例）と比べて、キャッシュを無効化する頻度、及び、無効化の対象となるデータ量を削減することができる。その結果、キャッシュの無効化によるアクセス性能の低下の影響を低減することができる。
【００６６】
＜実施形態＞
次に、本発明の実施形態のシステム構成について図面を参照して説明する。図１は、実施形態１の構成を示す図である。図１を参照すると、実施形態１において、システム全体の構成は、単体または複数の処理を実行し、共有ストレージのデータにアクセスを行う２台以上のノード１、ノード１において実行中の処理を管理するための管理ノード２、単体または複数の記憶媒体から構成される共有ストレージ３、及び、ノード１、管理ノード２、及び共有ストレージ３を接続するネットワーク４を含む。共有ストレージ３は、ハードディスク（HDD: Hard Disk Drive）装置から構成される。共有ストレージ３は、ネットワーク４によって接続された複数の装置あるいはシステム（分散ストレージシステム）によって構成されてもよい。また、図１は、ノード１と管理ノード２が分離したシステム構成であるが、管理ノード２の全てまたは一部がノード１と同一の装置上で動作してもよい。
【００６７】
図２は、ノード１の構成を示す図である。図２を参照すると、ノード１は、処理１１と、新規処理１２と、キャッシュ１３と、アクセス時刻記録部１４と、処理開始通知部１５と、キャッシュ無効化部１６を備えている。アクセス時刻記録部１４と、処理開始通知部１５と、キャッシュ無効化部１６は制御部１７を構成している。なお、制御部１７とキャッシュ１３を一体に構成してもよいことは勿論である。
【００６８】
処理１１は、ノード１において実行中の単体または複数の処理である。処理１１は、例えばオペレーティングシステム（不図示）上で実行されるプロセス、スレッド等の実行単位、あるいは、ハイパーバイザ（不図示）上で実行される仮想マシン（ＶＭ）を表す。ノード１で実行されるそれぞれの処理１１は、共有ストレージ３に格納されたデータに対してアクセスを行う。
【００６９】
新規処理１２は、ノード１において、新たに実行を開始した直後の処理を表す。また、新規処理１２は、キャッシュ無効化部１６から、実行開始が許可されるまで待機する。前記待機の終了後、新規処理１２は処理１１に変化する。例えば新規処理１２は、図１６（Ａ）の例では、時刻Ｔ０でノード１−１から他のノード１−２に移動した処理Ａに対応する。図１６（Ｂ）の例では、時刻Ｔ１でノード１−２から元のノード１−１に戻った処理Ａに対応する。
【００７０】
キャッシュ１３は、例えばクロック同期型の高速ＤＲＡＭあるいはＳＳＤ等から構成される。キャッシュ１３は、ノード１で実行される処理１１によって、Ｒｅａｄ又はＷｒｉｔｅされる、共有ストレージ３に格納されたデータを一時的に格納する。
【００７１】
アクセス時刻記録部１４は、処理１１からのＲｅａｄアクセス又はＷｒｉｔｅアクセスによって、キャッシュ１３に格納されたデータのアクセスが行われる毎に、当該アクセスが行われた時点の時刻（最終アクセス時刻）を記録する。アクセス時刻記録部１４は、キャッシュ１３に格納された各データに対するアクセス時刻を記録するための最終アクセス時刻テーブル１４１を備えている。最終アクセス時刻テーブル１４１に記録されているアクセス時刻は、当該データが再びアクセスされるまでの間、最終アクセス時刻とされる。また、処理の他ノードヘの移動等により、移動元ノードで当該データへのアクセスが行われなくなると、最終アクセス時刻として確定する。
【００７２】
図３（Ａ）は、最終アクセス時刻テーブル１４１の一形態を表す。最終アクセス時刻テーブル１４１は、キャッシュ３内の管理単位となるデータを一意に識別するためのデータ識別子１４１１と、データ識別子１４１１に対応したデータの最終アクセス時刻１４１２と、を備えている。
【００７３】
データ識別子１４１１は、キャッシュ１３に格納されるデータの管理単位によって形式が異なる。例えば、キャッシュ１３において、記憶領域を一定の容量（ページサイズ）で区切ったページ単位でデータを管理する場合、データ識別子１４１１は、データを含むページを指し示すページアドレスである（図１７参照）。キャッシュ１３において、共有ストレージ３のデータを、ファイル単位で管理する場合、データ識別子１４１１は、データを含むファイル名（ファイルシステムのパス名）などの、ファイルを一意に指し示す識別子である。図３（Ａ）の例では、データ識別子１４１１において、文字列先頭の“０ｘ”はヘキサデシマル表示を表し、ページアドレスは１０Ｈｅｘデジット（４０ビット）からなる。なお、データ識別子１４１１をページ単位で管理する場合、最終アクセス時刻テーブル１４１の最終アクセス時刻１４１２の欄を、例えばキャッシュ管理テーブル（図１７参照）に含ませ、図３（Ｂ）に示す構成としてもよい。
【００７４】
図２の処理開始通知部１５は、新規処理１２の起動を検出し、管理ノード２（図１）に対して、新規処理１２が起動したことを通知する。この通知は、新規処理１２を一意に表す識別子を含む。
【００７５】
キャッシュ無効化部１６は、管理ノード２（図１）からのキャッシュ無効に関する通知を受け取る。管理ノード２（図１）は、例えば新規処理１２（図２）の実行ノードがノード１に変更された場合、それ以前に、当該ノード１で新規処理１２が実行されたことを検出すると、ノード１のキャッシュ無効化部１６に対してキャッシュ無効を通知する。キャッシュ無効化部１６は、管理ノード２（図１）から受け取った通知に含まれる時刻情報（例えば新規処理１２（図２）の実行ノードがノード１から他のノードに変更された時刻情報）と、アクセス時刻記録部１４に格納された最終アクセス時刻テーブル１４１から得られた、キャッシュ１３に保持される各データの最終アクセス時刻１４１２と、を比較し、最終アクセス時刻１４１２が、管理ノード２（図１）から受け取った通知に含まれる時刻以前であるデータについて、キャッシュ１３に対して無効化を指示する。キャッシュ１３は、キャッシュ無効化部１６からの無効化の指示に従って、キャッシュ１３に格納されたデータを無効化する。キャッシュ管理テーブル（例えば図３（Ｂ））の無効フラグをオンに設定する。
【００７６】
図４乃至図６を参照して、管理ノード２の構成について説明する。図４は、管理ノード２の構成を例示する図である。図４を参照すると、管理ノード２は、実行ノード記録部２１と、処理移動時刻記録部２２と、処理配置部２３と、実行ノード変更検出部２４と、データ無効通知部２５を備えている。
【００７７】
実行ノード記録部２１は、ノード１で実行中の処理１１（図２参照）について、現在実行中のノード１を一意に表す情報を記録する。実行ノード記録部２１は、処理１１（図２参照）を実行するノード１を記録するための実行ノードテーブル２１１を備えている。
【００７８】
図５は、図４の実行ノードテーブル２１１の一形態を例示する図である。実行ノードテーブル２１１は、システムに含まれる全てのノードで実行される処理１１（図２参照）を一意に識別するための処理識別子２１１１と、処理識別子２１１１に対応した処理を実行中のノードを一意に識別する、実行ノード識別子２１１２と、を備えている。
【００７９】
図４の処理移動時刻記録部２２は、システム全体で実行されている処理１１（図２参照）について、各ノード１での実行が終了した時刻（ノード実行終了時刻）を記録する。処理移動時刻記録部２２は、処理１１（図２参照）について、各ノード１におけるノード実行終了時刻を記録するためのノード実行終了時刻テーブル２２１を持つ。
【００８０】
図６は、図４のノード実行終了時刻テーブル２２１の一形態を表す図である。ノード実行終了時刻テーブル２２１は、システムに含まれる全てのノード１で実行される処理１１（図２参照）を一意に識別するための処理識別子２２１１と、処理識別子２２１１に対応した、ノード１におけるノード実行終了時刻２２１２を備えている。ノード実行終了時刻テーブル２２１は、処理識別子２２１１に対して、ノード１（図１参照）の数に等しいノード実行終了時刻２２１２を管理する。図６の例では、処理識別子２２１１に対して複数（ノード１（図１参照）の数：Node001、Node002）でのノード実行終了時刻２２１２を記憶する。
【００８１】
ノード実行終了時刻２２１２は、ノード１において新規処理１２（図２参照）の実行が開始された場合に、ノード実行終了時刻テーブル２２１に格納される。
【００８２】
新規処理１２（図２参照）が、実行ノードが変更された直後の処理１１（図２参照）である場合に、処理１１を過去に実行したことがないノード１に対するノード実行終了時刻２２１２は、ノード実行終了時刻テーブル２２１に格納されない。
【００８３】
処理１１に対するノード実行終了時刻２２１２が存在しない場合には、ノード実行終了時刻２２１２が存在しないことを表す時刻情報を、ノード実行終了時刻２２１２（図６参照）として格納する。例えば、図６では、処理識別子２２１１が「１００２」である処理１１に対して、ノード実行終了時刻２２１２として、システムの動作開始時刻より前の時刻（1970/01/01 00:00:00.000）を格納することで、識別子Ｎｏｄｅ００２で表されるノード１において、処理１１（図２）を過去に実行したことがないことを表す。あるいは、ノード実行終了時刻テーブル２２１において、処理１１（図２）がノード１において過去に実行されたことがないことを表すフラグ情報を新規に持たせてもよい。
【００８４】
処理配置部２３は、実行ノード変更検出部２４において起動された新規処理１２（図２）について、該処理とデータを共有する処理１１（図２）の実行ノードを変更し、実行ノードが、前記処理と同一のノード１となるようにする。処理配置部２３は、新規処理１２（図２）に対して、互いに、データを共有する組み合わせとなる処理１１（図２）の情報が事前に与えられ、その情報を基に、実行ノードの変更が必要な処理１１（図２）を特定する。
【００８５】
処理配置部２３において、実行ノードの変更が必要な処理１１（図２）に対する実行ノードの変更処理は、処理１１（図２）を実行する機能に対する指示として行う。この機能は、複数のノードで構成される情報処理システムにおける一般的な機能として実装されていることを想定している。
【００８６】
実行ノード変更検出部２４は、ノード１の処理開始通知部１５（図２）からの通知を受け取る。同時に、実行ノード変更検出部２４は、ノード１の処理開始通知部１５（図２参照）からの通知を受け取った時点の時刻を取得する。実行ノード変更検出部２４は、ノード１の処理開始通知部１５（図２）からの通知から、送信元となった新規処理１２（図２）を一意に指し示す識別子の情報、及び、該通知の送信元（新規処理１２の新規実行ノードとなるノード１）の情報を取得する。前記情報の取得後に、実行ノード変更検出部２４は、実行ノード記録部２１に対して、新規実行ノードで実行が開始された新規処理１２（図２）が以前実行されていたノード１の情報を問い合わせる。実行ノード変更検出部２４は、新規処理１２（図２）が以前に実行されていたノードと、前記通知の送信元のノード１と比較し、該比較結果から、新規処理１２が、同一ノードで実行が再開されたものであるか、若しくは、実行ノードが変更されたのかを判定する。
【００８７】
また、実行ノード変更検出部２４は、新規処理１２（図２）について、実行ノードが変更されていた場合には、処理移動時刻記録部２２に対して、新規処理１２（図２）を指し示す識別子の情報、及び、実行ノード記録部２１に問い合わせた、実行ノードの情報を用いて、新規処理１２（図２）に対する、これまでの実行ノード（これまで新規処理１２を実行していたノード）について、ノード実行終了時刻テーブル２２１（図４）のノード実行終了時刻２２１２（図６）を更新する。更新後のノード実行終了時刻２２１２は、処理開始通知部１５（図２）から前記通知を受け取った時点の時刻となる。
【００８８】
実行ノード変更検出部２４は、処理移動時刻記録部２２に対して、新規処理１２（図２）を指し示す識別子の情報、及び新規実行ノードの情報を用いて、新規実行ノードにおけるノード実行終了時刻２２１２（図６）を取得する。
【００８９】
さらに、実行ノード変更検出部２４は、新規処理１２（図２）について、実行ノードが変更されていた場合に、処理配置部２３に対して、新規処理１２（図２）とデータを共有する処理１１（図２）について、新規処理１２（図２）の新規実行ノードで、同時に実行されるように指示する。
【００９０】
実行ノード変更検出部２４は、データ無効通知部２５に対して、新規実行ノードを指し示す識別子、及び、処理移動時刻記録部２２から取得したノード実行終了時刻２２１２の情報を用いて、ノード１のキャッシュ１３に格納されたデータを無効化するための通知を送るように指示する。実行ノード変更検出部２４では、例えば、一旦、ノード１から別のノードに実行ノードの変更が行われた処理が、当該処理を実行していた移動元のノード１に、再び、実行ノードが変更されたことを検出した際に、ノード１のキャッシュ１３に格納されたデータを無効化するための通知を送るようにデータ無効通知部２５に対して指示するようにしてもよい。
【００９１】
データ無効通知部２５は、実行ノード変更検出部２４から指定されたノード１に対して、キャッシュ１３（図２）に格納されたデータを無効化するように、ノード１のキャッシュ無効化部１６に通知を送る。
【００９２】
また、データ無効通知部２５は、実行ノード変更検出部２４から指定された時刻情報を格納して、ノード１のキャッシュ無効化部１６に送信する。ノード１は、キャッシュ１３に保持されるデータのうち、前記通知に格納された時刻以前の最終アクセス時刻を持つデータを選択的に無効化する。
【００９３】
次に、図１乃至図８を参照して、本実施形態の動作について説明する。
【００９４】
図１、図２、図３、図７を参照して、ノード１で新規処理１２（図２）の実行を検出し、処理実行開始の通知が管理ノード２に送られ、その後、管理ノード２からキャッシュ無効化通知を受け取り、キャッシュ１３（図２）におけるデータの無効化が完了した後に、新規処理１２の実行を開始するための手順を説明する。
【００９５】
ノード１（例えば図１６（Ｂ）のノード１−１）の処理開始通知部１５（図２）は、ノード１における新規処理１２（図１６（Ｂ）のノード１−１に戻った処理Ａに対応する）の実行開始を検出する。新規処理１２は実行を一時的に停止する（ステップＳ１１）。
【００９６】
ノード１の処理開始通知部１５は、管理ノード２（図１）に対して、新規処理１２の実行開始に関する通知を送信する。この通知には、新規処理１２を一意に指し示す識別子が含まれる（ステップＳ１２）。
【００９７】
管理ノード２（図１、図４）は、ステップＳ１２の処理開始通知部１５（図２）からの通知を受け取り、新規処理１２（図２）の実行がノード１で開始されたことに伴い、ノード１のキャッシュ１３（図２）に格納されたデータから、無効化が必要になるキャッシュデータの最終アクセス時間を決定する。なお、新規処理１２が移動してきたノード１では、過去、新規処理１２がノード１から他のノードに移動する前に、新規処理１２を実行している（図１６（Ａ）のノード１−１における処理Ａの実行に対応）。管理ノード２（図１、図４）は、前記無効化が必要になるキャッシュデータの最終アクセス時刻を、キャッシュ無効の通知として、ノード１のキャッシュ無効化部１６（図２）に送る（ステップＳ１３）。
【００９８】
キャッシュ無効化部１６（図２）は、ステップＳ１３で受け取った通知（キャッシュ無効の通知）から無効化が必要なデータの最終アクセス時刻を取り出し、同時に、アクセス時刻記録部１４（図２）から最終アクセス時刻テーブル１４１（図２）を参照して、キャッシュ１３（図２）に格納された各データの最終アクセス時刻と比較する。
【００９９】
その結果、キャッシュ無効化部１６（図２）は、キャッシュ１３（図２）に格納されたデータのうち最終アクセス時間について前記無効化が必要なデータの最終アクセス時刻以前であるものを無効化する（ステップＳ１４）。
【０１００】
キャッシュ無効化部１６（図２）は、ステップＳ１４の無効化処理が完了すると、一時的に停止していた新規処理１２（図２）の実行を開始する。新規処理１２は実行が開始されることで、処理１１に変化する。
【０１０１】
以上のステップＳ１１からＳ１５までの処理を行い、ノード１で新規処理１２の実行を検出し、ノード１から、処理実行開始の通知が、管理ノード２に送られる。その後、管理ノード２からのキャッシュ無効化通知を受け取り、キャッシュ１３（図２）におけるデータの無効化が完了した後に、新規処理１２（図２）の実行を開始するための動作が完了する。
【０１０２】
次に、図１、図４、図５、図６、図８を参照して、図７のステップＳ１３における、管理ノード２の更に詳細な手順について説明する。
【０１０３】
管理ノード２の実行ノード変更検出部２４（図４）は、ノード１の処理開始通知部１５（図２）から、新規処理１２の実行開始の通知を受け取る（ステップＳ２０１）。
【０１０４】
管理ノード２の実行ノード変更検出部２４（図４）は、ステップＳ２０１で受け取った通知の送信元となった新規処理１２（図２）に対応した実行ノードの情報を、実行ノード記録部２１（図４）に対して、問い合わせる。
【０１０５】
管理ノード２の実行ノード記録部２１（図４）は、実行ノードテーブル２１１（図４）に格納された、新規処理１２の実行ノード識別子２１１２（図５）を返す。
【０１０６】
管理ノード２の実行ノード変更検出部２４（図４）は、実行ノード記録部２１（図４）から返されたノード識別子と、ノード１の処理開始通知部１５（図２）から通知された新規処理１２（図２）の新規実行ノードを比較する（ステップＳ２０２）。
【０１０７】
ノード１の処理開始通知部１５（図２）から通知された新規処理１２の新規実行ノードが、前回起動した時の実行ノードと同一である場合（ステップＳ２０３のＹｅｓ判定）、新規実行ノードであるノード１のキャッシュ１３（図２）の無効化は不要であるため、管理ノード２の実行ノード変更検出部２４（図４）は、新規実行ノードのキャッシュ無効化部１６（図２）に対して、キャッシュ無効化が不要であることを表す通知を送信し、処理を終了する（ステップＳ２０４）。
【０１０８】
新規処理１２の新規実行ノードが、前回起動時の実行ノードと異なる場合（ステップＳ２０３のＮｏ判定）、管理ノード２の実行ノード変更検出部２４（図４）は、処理移動時刻記録部２２に格納されたノード実行終了時刻テーブル２２１（図４）の更新を指示する。具体的には、管理ノード２の実行ノード変更検出部２４（図４）は、ステップＳ２０２で取得した、新規処理の実行ノード識別子２１１２（図５）を用いて、新規処理１２（図２）に対する、それまでの実行ノードのノード実行終了時刻２２１２（図６）を、ステップＳ２０１で通知を受け取った時点の時刻、または現在の時刻で更新する（ステップＳ２０５）。
【０１０９】
管理ノード２の実行ノード変更検出部２４（図４）は、実行ノード記録部２１（図４）に対して、新規処理１２の実行ノードを、新規実行ノードに更新するように指示する。管理ノード２の実行ノード記録部２１は、実行ノードテーブル２１１（図４）における、新規処理１２に対応した実行ノード識別子２１１２（図５）について、新規実行ノードを指し示す識別子で更新する（ステップＳ２０６）。
【０１１０】
管理ノード２の実行ノード変更検出部２４（図４）は、処理配置部２３（図４）に対して、新規処理１２（図２）とデータを共有する処理１１（図２）について、実行ノードを新規処理１２の新規実行ノードに変更するように指示する（ステップＳ２０７）。
【０１１１】
ステップＳ２０７では、新規処理１２（図２）とデータを共有する処理１１（図２）に関する処理を行うが、新規処理１２とデータを共有する処理１１が存在しない場合は、ステップＳ２０７の処理は不要である。
【０１１２】
管理ノード２の実行ノード変更検出部２４（図４）は、処理移動時刻記録部２２（図４）に対して新規処理１２（図２）について、新規実行ノードにおけるノード実行終了時刻２２１２（図６）の取得を要求する。
【０１１３】
管理ノード２の処理移動時刻記録部２２（図４）は、実行ノード変更検出部２４（図４）に対して、ノード実行終了時刻テーブル２２１（図４）に格納された前記ノード実行終了時刻２２１２（図６）を返す（Ｓ２０８）。
【０１１４】
新規処理１２の新規実行ノードにおけるノード実行終了時刻２２１２（図６）を調べた結果、新規実行ノードでの実行履歴が存在しない場合（Ｓ２０９のＹｅｓ判定）、新規実行ノードであるノード１のキャッシュ１３の無効化は不要である。このため、実行ノード変更検出部２４（図４）は、新規実行ノードのキャッシュ無効化部１６（図２）に対してキャッシュ無効化が不要であることを表す通知を送信して処理を終了する（ステップＳ２１０）。
【０１１５】
新規処理１２の新規実行ノードにおけるノード実行終了時刻２２１２（図６）が通常の時刻であり、新規実行ノードでの実行履歴が存在する場合（Ｓ２０９のＮｏ判定）、管理ノード２の実行ノード変更検出部２４（図４）は、新規実行ノードのキャッシュ無効化部１６（図２）に対して、ステップＳ２０８で取得したノード実行終了時刻２２１２（図６）以前の最終アクセス時刻を持つキャッシュ１３（図２）のデータが無効であることを通知して、処理を終了する（ステップＳ２１１）。なお、ステップＳ２０９において、新規処理１２が新規実行ノードで初めて実行するものでない（実行履歴が存在する）場合の新規実行ノードは、図１６（Ｂ）及び図１７において、時刻Ｔ１で処理Ａがノード１−２から戻ったノード１−１に対応する。
【０１１６】
以上のステップＳ２０１からＳ２１１までの処理を行い、図７のステップＳ１３における、管理ノード２の更に詳細な動作が完了する。ステップＳ２０５からＳ２０８までの動作は、任意の順序で行ってよい。また、ステップＳ２０４、及びＳ２１０では、新規実行ノードに対して、キャッシュ１３（図２）のデータの無効化が不要であることを通知しているが、前記通知の代わりに、ステップＳ２１１と同様に、指定時刻以前の最終アクセス時刻を持つデータの無効を通知し、前記指定時刻として、キャッシュ１３（図２）に格納されたデータの最終アクセス時刻よりも前の時刻を指定することで、データが無効化されないようにしてもよい。
【０１１７】
＜実施形態の作用効果＞
上記実施形態によれば、一のノードで実行されていた処理が前記一のノードから他のノードに移動したときの時刻情報を記録しておき、移動元の一のノードは、前記一のノードのキャッシュに保持されているデータのうち、前記処理が、他のノードへ移動する前に、前記一のノード上で最後にアクセスした時刻（最終アクセス時刻）が、前記処理が前記一のノードから前記他のノードへ移動した時刻よりも古いデータを選択的に無効化する構成としたことで、キャッシュに対して一貫性維持のために行われる無効化のデータ量を、削減し、キャッシュ無効化の影響によるキャッシュ性能、アクセス性能の低下を程度を低減可能としている。また上記実施形態によれば、ノード間でストレージの論理アドレスのマッピングが異なる場合であっても、キャッシュに対して一貫性維持のために行われる無効化を、キャッシュ全体に対して行うことを要しなくし、無効化対象のデータ量を削減し、キャッシュ無効化の影響によるキャッシュ性能、アクセス性能の低下の程度を低減可能としている。
【０１１８】
本実施形態によれば、共有ストレージへのアクセスを行うノードを、一時には一つ（単一ノード）とすることで、あるノードでキャッシュの書き込み（更新）を行う毎に他のノードでキャッシュの無効化を行うことは不要とされる。
【０１１９】
さらに、本実施形態によれば、移動元の一のノードにおいてキャッシュの一貫性維持のための無効化を実行するタイミングを可能なかぎり遅らせるようにしてもよい。例えば前記移動元の一のノードから他のノードに移動した処理が、再び前記移動元の一のノードに戻り、前記移動元の一のノードで実行されるまで、前記移動元の一のノードのキャッシュの一貫性維持のための無効化を遅延させるようにしてもよい。この場合、前記移動元の一のノードのキャッシュにおいて無効化の対象となるデータは、前記処理が前記移動元の一のノードから他のノードに移動後もアクセスされなかった参照頻度が相対的に低いデータとなる。このように、キャッシュの一貫性維持のための無効化を実行するタイミングを可能なかぎり遅らせることで、無効化の対象となるデータを絞り込み、無効化の対象のデータ量をさらに削減することができる。
【０１２０】
そして、上記実施形態によれば、データを共有する複数の処理が同一のノードで実行されるように、処理を当該ノードに移動させることで、キャッシュの一貫性維持のための無効化の頻度を削減している。
【０１２１】
＜実施例＞
上記した実施形態の一具体例（実施例）として、図２、図４、図７乃至図１４を参照して、データをアクセスする処理を実行するノードの変更に伴うキャッシュの無効化動作の例を説明する。本実施例では、前記した処理（図２の処理１１）を、仮想マシン（ＶＭ）とし、ＶＭのノード間マイグレーションを例に説明する。共有ストレージ３３にはＶＭのイメージ（仮想マシンの仮想環境のディスクイメージ）を格納する。
【０１２２】
図９は、本実施例における、全体のシステム構成を模式的に表した図である。ＶＭを実行するノードは、ノードＡ３１１、ノードＢ３１２の２つであり、ＶＭ−Ａ３５１、ＶＭ−Ｂ３５２、及びＶＭ−Ｃ３５３の３つのＶＭを実行する。なお、ＶＭはサーバ等の計算機（ノード）に実装されたハイパーバイザ等の仮想化機構の上に実装されるが、図９では図面作成の都合で、各ＶＭは、ノードＡ又はノードＢの外部に配置されている。
【０１２３】
図９において、これら３つのＶＭは、初期状態では、過去にノードＢ３１２では、一度も実行されたことがないものとする。共有ストレージ３３には、ＶＭ−Ａ３５１、ＶＭ−Ｂ３５２、及びＶＭ−Ｃ３５３の３つのＶＭのイメージが格納されている。共有ストレージ３３において、ＶＭ−Ａ３５１とＶＭ−Ｃ３５３が一部のデータを共有する以外は、３つのＶＭが共有ストレージ３３に格納するデータ（ＶＭのイメージ）は非共有であるものとする。ノードＡ３１１、ノードＢ３１２は、図２に示した構成とされ、キャッシュ１３、アクセス時刻記録部１４、処理開始通知部１５、キャッシュ無効化部１６を備えている。管理ノード３２は、図４の管理ノード２の構成と同様に、実行ノード変更検出部２４、実行ノード記録部２１、処理移動時刻記録部２２、処理配置部２３、データ無効通知部２５を備えている。
【０１２４】
初期状態から、ＶＭ−Ａ３５１について、２０１３／０４／０１の日付変更時に、実行ノードを、ノードＡ３１１からノードＢ３１２に変更する（ＶＭ−Ａ３５１はノードＡ３１１からノードＢ３１２に移動）。このとき、ノードＢ３１２において、新たに起動されたＶＭ−Ａ３５１が、図２の新規処理１２に相当し、ノードＢ３１２の処理開始通知部１５（図２）によって、ノードＢ３１２における、ＶＭ−Ａ３５１の起動が、管理ノード３２に通知される。
【０１２５】
管理ノード３２の実行ノード変更検出部２４（図４）では、前記通知（ノードＢ３１２におけるＶＭ−Ａ３５１の起動）を受け取り、ノードＢ３１２のキャッシュ１３に格納されたデータについて、無効化の必要性を判定する。
【０１２６】
図１０は、本実施例の初期状態における実行ノードテーブル４１（図５の実行ノードテーブル２１１に対応）を表している。図１１は、本実施例の初期状態におけるノード実行終了時刻テーブル５１（図６のノード実行終了時刻テーブル２２１に対応する）を表している。
【０１２７】
ノード実行終了時刻テーブル５１のノードＢ実行終了時刻５１３において、ＶＭ−Ａ３５１、ＶＭ−Ｂ３５２、及びＶＭ−Ｃ３５３の３つのＶＭのノード実行終了時刻の値(1970/01/01 00:00:00.000)は、これら３つのＶＭが過去に一度も、ノードＢ３１２で実行されたことがないことを表す値である。
【０１２８】
ＶＭ−Ａ３５１は、ノードＢ３１２で起動されるため、図１０の実行ノードテーブル４１に格納されたＶＭ−Ａ３５１の実行ノードと異なる。そのため、管理ノード３２の実行ノード変更検出部２４（図４）は、図８に示された手順に従い、図１１のノード実行終了時刻テーブル５１における、ＶＭ−Ａ３５１のノードＡ３１１での実行終了時刻を更新する。
【０１２９】
さらに、管理ノード３２の実行ノード変更検出部２４（図４）は、実行ノード記録部２１の実行ノードテーブル４１（図１０）における、ＶＭ−Ａ３５１の実行ノードを、ノードＢ３１２に更新する。同時に、ＶＭ−Ａ３５１とデータを共有するＶＭ−Ｃ３５３について、管理ノード３２の処理配置部２３（図４）によって、実行ノードが、ノードＢ３１２に更新される。
【０１３０】
ＶＭ−Ａ３５１、及びＶＭ−Ｃ３５３について、ノード実行終了時刻テーブル５１（図１１）における、ノードＢ実行終了時刻５１３を参照すると、いずれのＶＭについても、過去にノードＢ３１２で実行されたことがないため、管理ノード３２は、データ無効通知部２５（図４）を通して、ノードＢ３１２に対して、キャッシュのデータの無効化が不要であることを通知する。ノードＢ３１２のキャッシュ無効化部１６（図２）は、キャッシュ無効化を行わず、実行を待機していた新規処理であるＶＭ−Ａ３５１、及びＶＭ−Ｃ３５３の実行を開始する。
【０１３１】
さらに、実施例では、２０１３／０４／０２の日付変更時に、ＶＭ−Ａ３５１について、再び実行ノードを、ノードＡ３１１に変更する。
【０１３２】
このとき、ノードＡ３１１において、新たに起動されたＶＭ−Ａ３５１が、図２の新規処理１２に相当し、ノードＡ３１１の処理開始通知部１５（図２）によって、ノードＡ３１１におけるＶＭ−Ａ３５１の起動が管理ノード３２に通知される。
【０１３３】
管理ノード３２の実行ノード変更検出部２４では、ノードＡ３１１からの通知（ノードＡ３１１における新規処理１２（ＶＭ−Ａ３５１）の起動）を受け取り、ノードＡ３１１のキャッシュ１３（図２）に格納されたデータについて、キャッシュ無効化の要否を判定する。
【０１３４】
図１２は、管理ノード３２の実行ノードテーブル４１（図５の２１１に対応）に対して、ＶＭ−Ａ３５１がノードＢ３１２で起動された際に更新を行った後、つまり、ＶＭ−Ａ３５１が、２０１３／０４／０２の日付変更時に、再び、ノードＡ３１１で起動された時点での実行ノードテーブル６１の内容を表している。
【０１３５】
図１３は、ノード実行終了時刻テーブル５１（図１１）に対して、ＶＭ−Ａ３５１がノードＢ３１２で起動された際に、更新を行った後のノード実行終了時刻テーブル７１の内容を表している。
【０１３６】
ＶＭ−Ａ３５１は、ノードＡ３１１で起動されるため、実行ノードテーブル６１（図１２）に格納されているＶＭ−Ａ３５１の実行ノードと異なる。このため、管理ノード３２の実行ノード変更検出部２４は、図８に示された手順に従い、ノード実行終了時刻テーブル７１（図１３）における、ＶＭ−Ａ３５１のノードＢ３１２における実行終了時刻を更新する。
【０１３７】
さらに、管理ノード３２は、実行ノードテーブル６１における、ＶＭ−Ａ３５１の実行ノードをノードＡ３１１に更新する。同時に、ＶＭ−Ａ３５１とデータを共有するＶＭ−Ｃ３５３について、管理ノード３２の処理配置部２３（図４）によって、実行ノードがノードＡ３１１に、更新される。
【０１３８】
ＶＭ−Ａ３５１、及びＶＭ−Ｃ３５３について、ノード実行終了時刻テーブル７１(図１３)におけるノードＡ実行終了時刻７１２を参照すると、ＶＭ−Ａ３５１、及びＶＭ−Ｃ３５３とも、２０１３／０４／０１の日付変更時まで、ノードＡ３１１で実行されている。このため、ノードＡ３１１のキャッシュ１３（図２）において、前記ノードＡ実行終了時刻（２０１３／０４／０１の日付変更時）以前の最終アクセス時刻を持つデータの無効化が必要である。
【０１３９】
管理ノード３２の実行ノード変更検出部２４は、データ無効通知部２５（図４）を通して、ノードＡ３１１に対して、前記ノードＡ実行終了時刻（２０１３／０４／０１  ００：００：００．０００）以前の最終アクセス時刻を持つキャッシュデータについて、無効を通知する。
【０１４０】
図１４は、ノードＡ３１１のアクセス時刻記録部１４（図２）に格納された、最終アクセス時刻テーブル８１の内容を表している（図３（Ａ）の１４１に対応）。最終アクセス時刻テーブル８１には、キャッシュ１３（図２）に格納されたデータ（データ識別子８１１で指定される）の最終アクセス時刻が格納される。なお、データ識別子８１１はデータを含むページを指し示すページアドレスである（０ｘはヘキサデシマル表示を表し、８Ｈｅｘデジット（３２ビット）からなる）。ノードＡ３１１のキャッシュ無効化部１６（図２）は、管理ノード３２のデータ無効通知部２５（図４）からキャッシュ無効通知を受け取ると、前記通知に格納されたノードＡ実行終了時刻（２０１３／０４／０１  ００：００：００．０００）と、キャッシュ１３（図２）に格納された各データの最終アクセス時刻を比較する。
【０１４１】
前記通知に格納されたノードＡ実行終了時刻は、最初にＶＭ−Ａ３５１の実行ノードがノードＡ３１１からノードＢ３１２に変更された時刻（２０１３／０４／０１  ０：００：００．０００）である。ノードＡ３１１のキャッシュ１３の各データの最終アクセス時刻は、最終アクセス時刻テーブル８１（図１４）に格納された通りである。最終アクセス時刻８１２が、前記通知に格納された時刻（２０１３／０４／０１  ０：００：００．０００）以前であるデータ識別子８１１は、最終アクセス時刻が２０１３／０３／３１  ２３：４５：１２．８７６の０ｘ１０００００００のみである。
【０１４２】
つまり、データ識別子８１１が０ｘ１０００００００のデータは、ＶＭ−Ａ３５１、及びＶＭ−Ｃ３５３が、以前、ノードＡ３１１で実行されていた際に、アクセスされた時点（時期）でのデータであり、それ以降、ノードＡ３１１以外のノードで、ＶＭ−Ａ３５１、ＶＭ−Ｃ３５３が実行された際に、更新されている可能性を持つ。
【０１４３】
ノードＡ３１１のキャッシュ無効化部１６（図２）は、ノードＡ３１１のキャッシュ１３（図２）に対して、データ識別子８１１が０ｘ１０００００００であるデータのみが無効化されるように指示する。この結果、ＶＭのノード間の移動（inter-VM migration）に伴う、キャッシュ１３（図２）において、無効化されるデータ量を削減することができる。
【０１４４】
最後に、ノードＡ３１１のキャッシュ無効化部１６は、新規処理であるＶＭ−Ａ３５１、及びＶＭ−Ｃ３５３の実行を開始する。
【０１４５】
上記実施例では、仮想マシン（ＶＭ）のノード間マイグレーションにおけるノードのキャッシュの無効化を説明したが、データのアクセスする処理（図２の処理１１）をサーバ等の計算機（例えば同一ノード）に実装されるハイパーバイザ等の仮想化機構上の第１のＶＭから第２のＶＭへ移動させる実施例も可能である。この場合、各ＶＭ（ノード）に対して、共有ストレージ、キャッシュ、ＣＰＵ、メモリ、ネットワーク等のリソースはハイパーバイザを介して仮想化される。データのアクセス処理を実行するＶＭが、第１のＶＭから第２のＶＭに変更されると、変更先の第２のＶＭでは、前記第２のＶＭの仮想化されたキャッシュに保持されているデータのうち、前記第２のＶＭで最後にアクセスした時刻が、前記アクセス処理を実行するＶＭを前記第１のＶＭから前記第２のＶＭに変更した時刻（無効化の基準時刻）よりも、古いデータを無効化する。すなわち、仮想マシン（ＶＭ）をノードとみなし、ＶＭが備える仮想化されたキャッシュをノードのキャッシュ（図２の１３）とみなすことで、前記実施形態がそのまま適用される。なお、図２の管理ノード２をＶＭとして実装してもよいことは勿論である。
【０１４６】
上記実施例によれば、共有ストレージのデータを一時的に保持するキャッシュをそれぞれ有する複数のノードのうち、データをアクセスする処理を実行するＶＭ（仮想マシン）が一のノードから他のノードに移動したときの時刻情報を記録しておき、移動元の一のノードのキャッシュに保持されているデータのうち、他のノードへ移動する前の前記処理が前記一のノード上で最後にアクセスした時刻が、前記処理が前記一のノードから前記他のノードへ移動した時刻よりも古いデータを、選択的に無効化するようにしたことで、ＶＭのノード間移動による、一貫性維持のためにキャッシュを無効化する頻度、及び、無効化の対象となるデータ量を削減することができ、キャッシュ無効化によるアクセス性能の低下の影響を低減することができる。
【０１４７】
なお、上記非特許文献の開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素の多様な組み合わせないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【０１４８】
１、１−１、１−２、１０１−１、１０１−２  ノード
２  管理ノード
３  共有ストレージ
４  ネットワーク
１１  処理
１２  新規処理
１３、１３−１、１３−２  キャッシュ
１４  アクセス時刻記録部
１４１  最終アクセス時刻テーブル
１４１１  データ識別子
１４１２  最終アクセス時刻
１５  処理開始通知部
１６  キャッシュ無効化部
１７  制御部
２１  実行ノード記録部
２１１  実行ノードテーブル
２１１１  処理識別子
２１１２  実行ノード識別子
２２  処理移動時刻記録部
２２１  ノード実行終了時刻テーブル
２２１１  処理識別子
２２１２  ノード実行終了時刻
２３  処理配置部
２４  実行ノード変更検出部
２５  データ無効通知部
３１１  ノードＡ
３１２  ノードＢ
３２  管理ノード
３３  共有ストレージ
３４  ネットワーク
３５１  ＶＭ−Ａ
３５２  ＶＭ−Ｂ
３５３  ＶＭ−Ｃ
４１  実行ノードテーブル（初期状態）
４１１  処理識別子
４１２  実行ノード識別子
５１  ノード実行終了時刻テーブル（初期状態）
５１１  処理識別子
５１２  ノードＡ実行終了時刻
５１３  ノードＢ実行終了時刻
６１  実行ノードテーブル（実行ノード変更後）
６１１  処理識別子
６１２  実行ノード識別子
７１  ノード実行終了時刻テーブル（実行ノード変更後）
７１１  処理識別子
７１２  ノードＡ実行終了時刻
７１３  ノードＢ実行終了時刻
８１  最終アクセス時刻テーブル
８１１  データ識別子
８１２  最終アクセス時刻
【図１】
2015046552.tif 000003
【図２】
2015046552.tif 000004
【図３】
2015046552.tif 000005
【図４】
2015046552.tif 000006
【図５】
2015046552.tif 000007
【図６】
2015046552.tif 000008
【図７】
2015046552.tif 000009
【図８】
2015046552.tif 000010
【図９】
2015046552.tif 000011
【図１０】
2015046552.tif 000012
【図１１】
2015046552.tif 000013
【図１２】
2015046552.tif 000014
【図１３】
2015046552.tif 000015
【図１４】
2015046552.tif 000016
【図１５】
2015046552.tif 000017
【図１６】
2015046552.tif 000018
【図１７】
2015046552.tif 000019
【図１８】
2015046552.tif 000020
【図１９】
2015046552.tif 000021
【国際調査報告】
2015046552.tif 000022
2015046552.tif 000023
2015046552.tif 000024
2015046552.tif 000025