(57)【特許請求の範囲】
【請求項１】
複数のメモリ領域を有するメモリ及びキャッシュメモリを、それぞれ有する第１、第２のノードと、
第１のノードが実行中のジョブを第２のノードに移行して前記ジョブの実行を継続する際に、前記ジョブがアクセスするデータが記憶された前記第１のノードの第１の複数のメモリ領域のアドレスに対応する、前記キャッシュメモリのインデックス値の組を取得し、
前記第２のノードが、前記インデックス値の組と同一または相対位置関係を有するインデックス値の組に対応する、非使用状態の第２の複数のメモリ領域を有するか否かを判定し、
前記非使用状態の第２の複数のメモリ領域を有する場合に、前記データを前記第２の複数のメモリ領域に移動する処理部と、を有する、
並列計算機。
【請求項２】
請求項１において、
前記相対位置関係を有するインデックス値の組は、取得した前記インデックス値の組を一律にシフトしたインデックス値の組を示す、
並列計算機。
【請求項３】
請求項１または２において、
前記処理部は、前記非使用状態の第２の複数のメモリ領域を有しない場合に、前記第２のノードとは異なるノードを対象として前記取得及び前記判定を行う、
並列計算機。
【請求項４】
請求項１乃至３のいずれかにおいて、
前記処理部は、さらに、
前記第１のノードが実行中のジョブを移行する対象の候補ノードが複数ある場合に、前記複数の候補ノードのそれぞれについて、前記インデックス値の組と同一または相対位置関係を有するインデックス値の組に対応する、前記候補ノードの複数のメモリ領域の使用状況に基づいて、移行後のスラッシングの発生度合いを示す判定値を算出し、
前記判定値がより小さい候補ノードを、前記第２のノードとして、前記データを前記第２の複数のメモリ領域に移動する、
並列計算機。
【請求項５】
第１のノードが実行中のジョブを第２のノードに移行して前記ジョブの実行を継続する際に、前記ジョブがアクセスするデータが記憶された前記第１のノードの第１の複数のメモリ領域のアドレスに対応する、キャッシュメモリのインデックス値の組を取得し、
前記第２のノードが、前記インデックス値の組と同一または相対位置関係を有するインデックス値の組に対応する、非使用状態の第２の複数のメモリ領域を有するか否かを判定し、
前記非使用状態の第２の複数のメモリ領域を有する場合に、前記データを前記第２の複数のメモリ領域に移動する、
処理をコンピュータに実行させるマイグレーションプログラム。
【請求項６】
処理部が、第１のノードが実行中のジョブを第２のノードに移行して前記ジョブの実行を継続する際に、前記ジョブがアクセスするデータが記憶された前記第１のノードの第１の複数のメモリ領域のアドレスに対応する、キャッシュメモリのインデックス値の組を取得し、
処理部が、前記第２のノードが、前記インデックス値の組と同一または相対位置関係を有するインデックス値の組に対応する、非使用状態の第２の複数のメモリ領域を有するか否かを判定し、
処理部が、前記非使用状態の第２の複数のメモリ領域を有する場合に、前記データを前記第２の複数のメモリ領域に移動する、
マイグレーション方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列計算機、マイグレーションプログラム、及び、マイグレーション方法に関する。
【背景技術】
【０００２】
ＣＰＵ（Central Processing Unit：ＣＰＵ）コア及びメモリを、複数有する情報処理装置がある。このような情報処理装置のＯＳ（Operating System：ＯＳ）やＯＳ上で動作するソフトウェアは、実行中のジョブをマイグレーションする際に、ジョブに割り当てたハードウェア資源（ＣＰＵコア、メモリ）の再配置を行う。
【０００３】
ハードウェア資源の再配置を行うソフトウェア（以下、再配置プログラムと称する）は、実行中のジョブのプロセスを実行するＣＰＵコアを変更することによって、ＣＰＵコアの再配置を行う。また、再配置プログラムは、実行中のジョブのプロセスがアクセスするデータが記憶されているメモリ領域を変更することによって、メモリの再配置を行う。
【０００４】
一方、情報処理装置のキャッシュメモリは、キャッシュラインと呼ばれる単位のデータを複数有するデータアレイと、インデックス値に応じて、対応するキャッシュラインの情報を有するタグアレイ（キャッシュタグともいう）とを有する。ＣＰＵコアは、インデックス値に基づいて、キャッシュタグを参照し、アクセス対象のメモリ領域のキャッシュミスヒット判定を行う。
【０００５】
また、キャッシュメモリには、アクセス対象のメモリ領域のアドレスに基づいて、メモリ領域のデータを記憶するキャッシュラインを定めるキャッシュメモリがある。このようなキャッシュメモリによると、ＣＰＵコアは、アクセス対象のメモリ領域のアドレスに基づいて、インデックス値を取得する。
【０００６】
キャッシュメモリに関する技術については、特許文献１〜４に記載される。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００９−８７１３９号公報
【特許文献２】特開２０００−６６８９９号公報
【特許文献３】特開平８−７７０６８号公報
【特許文献４】特開平１０−２０７８５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
再配置プログラムが、実行中のジョブのプロセスがアクセスするデータが記憶されたメモリ領域を再配置した場合、アクセス対象のメモリ領域のアドレスが変化する。アドレスの変化に伴い、メモリ領域のデータを記憶するキャッシュラインが変化する場合がある。
【０００９】
実行中のジョブが複数のメモリ領域にアクセスする場合、アドレスの変化に伴い、複数のメモリ領域のデータを記憶するキャッシュラインが重複する場合がある。キャッシュラインの重複により、ジョブの実行中に、同一のキャッシュラインに対する書き換えが頻繁に発生し、キャッシュメモリのスラッシングが発生する場合がある。スラッシングの発生により、メモリアクセスの処理時間のレイテンシが増加し、ジョブの実行時間が長くなる。
【００１０】
１つの側面は、本発明は、メモリの再配置に伴うキャッシュメモリにおけるスラッシングの発生を抑制する並列計算機、マイグレーションプログラム、及び、マイグレーション方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
第１の側面によれば、複数のメモリ領域を有するメモリ及びキャッシュメモリを、それぞれ有する第１、第２のノードと、第１のノードが実行中のジョブを第２のノードに移行して前記ジョブの実行を継続する際に、前記ジョブがアクセスするデータが記憶された前記第１のノードの第１の複数のメモリ領域のアドレスに対応する、前記キャッシュメモリのインデックス値の組を取得し、前記第２のノードが、前記インデックス値の組と同一または相対位置関係を有するインデックス値の組に対応する、非使用状態の第２の複数のメモリ領域を有するか否かを判定し、前記非使用状態の第２の複数のメモリ領域を有する場合に、前記データを前記第２の複数のメモリ領域に移動する処理部と、を有する。
【発明の効果】
【００１２】
第１の側面によれば、ジョブ実行時のメモリの再配置に伴う、キャッシュメモリにおけるスラッシングの発生を抑制する。
【図面の簡単な説明】
【００１３】
【図１】本実施の形態における情報処理装置の一例を説明する図である。
【図２】ジョブに対するジョブ資源の割り当てを模式的に説明する図である。
【図３】ジョブＡ〜ジョブＥが要求するジョブ資源、及び、ジョブＡ〜ジョブＥに指定されるメモリｍｍに関するＮＵＭＡポリシーを説明する表図である。
【図４】再配置を行わない場合の、ジョブ資源の割り当てを模式的に説明する図である。
【図５】再配置を行わない場合の、ジョブＡ〜ジョブＥに対するメモリページｍｐの割り当て状態を時系列（タイミングｔ１〜ｔ７）に示す表図である。
【図６】図５に示したタイミングｔ７の、ジョブＣ〜ジョブＥのジョブ資源の割り当て状態を示す図である。
【図７】再配置を行う場合の、ジョブＡ〜ジョブＥに対するメモリページｍｐの割り当て状態を時系列（タイミングｔ１〜ｔ７）に示す表図である。
【図８】図７に示したタイミングｔ６の、ジョブＣ及びジョブＤのジョブ資源の割り当て状態を示す図である。
【図９】図７に示したタイミングｔ７の、ジョブＣ〜ジョブＥのジョブ資源の割り当て状態を示す図である。
【図１０】本実施の形態のキャッシュメモリ１０３の構成の一例を示す図である。
【図１１】メモリの再配置に伴う、スラッシングの発生を模式的に説明する図である。
【図１２】第１の実施の形態の並列計算機の処理の概要を説明するフローチャート図である。
【図１３】第１の実施の形態の並列計算機ｎｄのハードウェア構成を示す図である。
【図１４】図１３に示した並列計算機ｎｄのソフトウェアブロックを説明する図である。
【図１５】図１３、図１４に示した、ジョブ使用メモリ情報１２２の一例を示す図である。
【図１６】図１３、図１４に示す、メモリ再配置モジュール１３１の処理の詳細を説明するフローチャート図である。
【図１７】図１６のフローチャート図の工程Ｓ２３に示した、条件１（ｋ＝０）を満たすインデックス値の組を説明する図である。
【図１８】図１６のフローチャート図の工程Ｓ２３の処理を説明するフローチャート図である。
【図１９】図１６のフローチャート図の工程Ｓ２５に示した、条件１（ｋ≠０）を満たすインデックス値の組を説明する図である。
【図２０】図１６のフローチャート図の工程Ｓ２５の処理を説明するフローチャート図である。
【図２１】図１６のフローチャート図の工程Ｓ２７の処理を説明するフローチャート図である。
【図２２】メモリ獲得ルーチン１３３の処理を説明するフローチャート図である。
【図２３】第２の実施の形態の情報処理装置１０の一例を説明する図である。
【図２４】第２の実施の形態の並列計算機ｎｄのハードウェア構成図である。
【図２５】図２４に示した、並列計算機ｎｄのソフトウェアブロックを説明する図である。
【図２６】図２４、図２５に示した、第２の実施の形態のジョブ使用メモリ情報１２２の一例を説明する図である。
【図２７】図２４、図２５に示した、メモリ使用状態情報１２４の一例を説明する図である。
【図２８】図２４、図２５に示す、メモリ再配置モジュール１３１の処理の詳細を説明するフローチャート図である。
【図２９】図２８の工程Ｓ８１の処理の詳細を説明するフローチャート図である。
【図３０】図２８の工程Ｓ８４の処理の詳細を説明するフローチャート図である。
【図３１】図２８の工程Ｓ８６の処理の詳細を説明するフローチャート図である。
【図３２】図２８の工程Ｓ８７の処理の詳細を説明するフローチャート図である。
【図３３】図２８の工程Ｓ８８の処理の詳細を説明するフローチャート図である。
【図３４】図２８の工程Ｓ９１の処理の詳細を説明するフローチャート図である。
【図３５】評価値算出ルーチン１３４の処理の詳細を説明するフローチャート図である。
【発明を実施するための形態】
【００１４】
以下、図面にしたがって本発明の実施の形態について説明する。ただし、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【００１５】
［情報処理装置］
図１は、本実施の形態における情報処理装置の一例を説明する図である。図１に例示する情報処理装置１０は、ＮＵＭＡ（Non-Uniform Memory Access：ＮＵＭＡ）アーキテクチャを採用する情報処理装置１０である。
【００１６】
図１に示す情報処理装置１０は、複数のビルディングブロックｎｄ１〜ｎｄ４を有する。以下、ビルディングブロックｎｄ１〜ｎｄ４のそれぞれを、ノードと称する。複数のノードｎｄ１〜ｎｄ４（ノードｎｄともいう）は、グローバルクロスバースイッチやＬＡＮ（Local Area Network：ＬＡＮ）等の高速のインターコネクト２０にしたがって、相互に接続する。なお、情報処理装置１０が有するノードｎｄの数は、図１の例に限定されるものではない。
【００１７】
各ノードｎｄは、複数のＣＰＵコアｃｐ１ａ〜ｃｐ４ｄ（ＣＰＵコアｃｐともいう）、及び、メモリｍｍ１〜ｍｍ４（メモリｍｍともいう）等を有する。各ノードｎｄのハードウェア構成の詳細は、図１３にしたがって後述する。図１は、説明を簡略化するため、各ノードｎｄがＣＰＵコアｃｐ及びメモリｍｍを有する場合を例示する。なお、各ノードｎｄが有するＣＰＵコアｃｐ及びメモリｍｍの数は、図１の例に限定されるものではない。また、図１に図示していないが、メモリｍｍのそれぞれは、複数のメモリ領域を有する。
【００１８】
各ノードｎｄ（例えば、ノードｎｄ１）は、当該ノードｎｄが有するメモリ（ローカルメモリともいう）ｍｍ１、及び、他のノードｎｄ（例えば、ノードｎｄ２〜ｎｄ４）が有するメモリ（リモートメモリともいう）ｍｍ２〜ｍｍ４にアクセスする。つまり、各ノードｎｄは、互いに、メモリｍｍを共有する。なお、あるノードｎｄ（例えば、ノードｎｄ１）によるリモートメモリｍｍ２〜ｍｍ４に対するアクセスは、ローカルメモリｍｍ１に対するアクセスに対して遅い。
【００１９】
図１に示す情報処理装置１０は、複数のジョブを実行する。ジョブは、１つまたは複数のプロセスにより構成され、協働して１つの処理を行うプロセスグループである。また、ジョブは、例えば、アプリケーションプログラムの実行単位である。
【００２０】
情報処理装置１０で動作するオペレーションシステム（図示せず）は、実行対象のジョブが要求するジョブ資源（ＣＰＵコアｃｐ、メモリｍｍ）をジョブに割り当てることによって、ジョブを実行する。即ち、オペレーションシステムは、ジョブが要求する、ＣＰＵコアｃｐの数及びメモリ領域の数をジョブに割り当てることによって、ジョブを実行する。例えば、ＨＰＣ（high performance computing：ＨＰＣ）を行う情報処理装置１０は、プロセスの実行に１つのＣＰＵコアｃｐを使用する。
【００２１】
［ジョブ資源の割り当て］
図２は、ジョブに対するジョブ資源の割り当てを模式的に説明する図である。図２は、図１に示した情報処理装置１０が、５つのジョブ（ジョブＡ〜ジョブＥ）を実行する場合を例示する。
【００２２】
図２に示すように、ノードｎｄ１及びノードｎｄ２は、１つのジョブ（ジョブＡ）または複数のジョブ（ジョブＢ、ジョブＣ）を実行する。ジョブＡは、例えば、ノードｎｄ１の４つのＣＰＵコアｃｐ１ａ〜ｃｐ１ｄ、及び、ノードｎｄ１のメモリｍｍ１を占有して処理を実行する。一方、ジョブＢは、ノードｎｄ２の２つのＣＰＵコアｃｐ２ａ、ｃｐ２ｂ、及び、ノードｎｄ２のメモリｍｍ２を使用して処理を実行する。ジョブＣも、ジョブＢと同様である。
【００２３】
また、ノードｎｄ３とノードｎｄ４は、協働してジョブ（ジョブＤ、ジョブＥ）を実行する。ジョブＤは、ノードｎｄ３の２つのＣＰＵコアｃｐ３ａ、ｃｐ３ｂと、ノードｎｄ４の２つのＣＰＵコアｃｐ４ａ、ｃｐ４ｂ、及び、各ノードｎｄ３、ｎｄ４のメモリｍｍ３、ｍｍ４を使用して処理を実行する。ジョブＥも、ジョブＤと同様である。
【００２４】
前述したとおり、図１に示す情報処理装置１０は、ＮＵＭＡアーキテクチャを採用する。したがって、情報処理装置１０のオペレーションシステムは、ジョブに指定されたＮＵＭＡポリシーに基づいて、各ジョブにジョブ資源を割り当てる。次に、ＮＵＭＡポリシーを説明する。
【００２５】
［ＮＵＭＡポリシー］
ＮＵＭＡポリシーは、ジョブ資源の割り当て方法を指定する設定値である。ユーザは、ジョブを示すプログラムに、オペレーティングシステムが提供するＮＵＭＡアーキテクチャのＡＰＩ（Application Programming Interface：ＡＰＩ）を指定することによって、ＮＵＭＡポリシーを指定する。ユーザは、例えば、ジョブの処理内容の特性に応じて、ジョブにＮＵＭＡポリシーを指定する。
【００２６】
ここで、ＣＰＵコアｃｐの割り当ての指定に関するＮＵＭＡポリシー、及び、メモリｍｍの割り当ての指定に関するＮＵＭＡポリシーの一例を説明する。
【００２７】
ＣＰＵコアｃｐの割り当ての指定に関するＮＵＭＡポリシーには、例えば、ポリシー「ＰＡＣＫ」、ポリシー「ＵＮＰＡＣＫ」、ポリシー「ＣＰＵＢＩＮＤ＝Ｘ」等がある。ポリシー「ＰＡＣＫ」は、ジョブのプロセスを、単一のノードｎｄのＣＰＵコアｃｐに割り当てる指定を示す。ポリシー「ＵＮＰＡＣＫ」は、ジョブのプロセスを、複数のノードｎｄのＣＰＵコアｃｐに割り当てる指定を示す。ポリシー「ＣＰＵＢＩＮＤ＝Ｘ」は、ジョブのプロセスを、Ｘ番目のノードｎｄのＣＰＵコアｃｐに割り当てる指定を示す。
【００２８】
メモリｍｍの割り当ての指定に関するＮＵＭＡポリシーには、例えば、ポリシー「ＬＯＣＡＬ」、ポリシー「ＢＩＮＤ＝Ｘ」、ポリシー「ＰＲＥＦＥＲ＝Ｘ」、ポリシー「ＩＮＴＥＲＬＥＡＶＥ」等がある。
【００２９】
ポリシー「ＬＯＣＡＬ」は、ジョブのプロセスがアクセスするデータを記憶するメモリｍｍを、プロセスが動作するＣＰＵコアｃｐが属するノードｎｄのメモリｍｍに割り当てる指定を示す。ポリシー「ＢＩＮＤ＝Ｘ」は、メモリｍｍを、強制的にＸ番目のノードｎｄのメモリｍｍから割り当てる指定を示す。ポリシー「ＰＲＥＦＥＲ＝Ｘ」は、メモリｍｍを、可能な限り、Ｘ番目のノードｎｄのメモリｍｍから割り当てる指定を示す。ポリシー「ＩＮＴＥＲＬＥＡＶＥ」は、ラウンドロビン方式にしたがって、各ノードｎｄのメモリｍｍに割り当てる指定を示す。
【００３０】
このように、ジョブは、ＮＵＭＡポリシーの指定を有する場合がある。しかしながら、要求するジョブ資源をジョブに割り当てる際に、ジョブのＮＵＭＡポリシーを満たせない状態が生じ得る。したがって、オペレーティングシステムは、実行中のジョブがＮＵＭＡポリシーを満たすように、実行中のジョブをマイグレーションし、当該ジョブが使用しているジョブ資源を再配置する。
【００３１】
または、オペレーションシステムは、各ノードｎｄのジョブ資源をより効率的に利用するために、実行中のジョブをマイグレーションし、当該ジョブが使用しているジョブ資源を再配置する。
【００３２】
［ジョブ資源の再配置］
オペレーションシステムは、ジョブのプロセスを実行しているＣＰＵコアｃｐを、別のＣＰＵコアｃｐに変更することによって、ＣＰＵコアｃｐの再配置を行う。または、オペレーションシステムは、ジョブのプロセスがアクセスするデータが記憶されたメモリ領域を、別のメモリ領域に変更することによって、メモリｍｍの再配置を行う。
【００３３】
次に、図３〜図９にしたがって、実行中のジョブが使用しているジョブ資源の再配置の一例を説明する。図３〜図９は、２つのノードｎｄ１、ｎｄ２が、５つのジョブ（ジョブＡ〜ジョブＥ）を実行する場合を例示する。まず、図４〜図６にしたがって、再配置を行わない場合のジョブ資源の割り当て例を、次に、図７〜図９にしたがって、再配置を行う場合のジョブ資源の割り当て例を説明する。以下、メモリｍｍが有する複数のメモリ領域を、メモリページと称する。
【００３４】
図３は、ジョブＡ〜ジョブＥが要求するジョブ資源、及び、ジョブＡ〜ジョブＥに指定されるメモリｍｍに関するＮＵＭＡポリシーを説明する表図である。図３に示す表ＨＪによると、ジョブＡ、ジョブＢ、及び、ジョブＥは、ジョブの実行に、４つのＣＰＵコアｃｐ及び４つのメモリページを要求する。また、ジョブＣ、及び、ジョブＤは、ジョブの実行に、２つのＣＰＵコアｃｐ及び２つのメモリページとを要求する。
【００３５】
また、ジョブＡ、ジョブＢに指定されたＮＵＭＡポリシーは、ポリシー「ＢＩＮＤ」（使用するメモリページを、ジョブを実行するノードｎｄのメモリページから割り当てる）である。また、ジョブＣ〜ジョブＥに指定されたＮＵＭＡポリシーは、ポリシー「ＩＮＴＥＲＬＥＡＶＥ」（使用するメモリページを、各ノードｎｄのメモリページに割り当てる）である。
【００３６】
（再配置を行わない場合）
図４は、再配置を行わない場合の、ジョブ資源の割り当てを模式的に説明する図である。図４において、図１、図２で示したものと同一のものは、同一の記号で示す。オペレーションシステムは、ジョブＡ〜ジョブＥの順に、ジョブ資源の空き状況に応じて、各ジョブにジョブ資源を割り当てる。
【００３７】
図１、図２で前述したとおり、図４に示すノードｎｄ１、ｎｄ２のそれぞれは、４つのＣＰＵコアｃｐ（ｃｐ１ａ〜ｃｐ１ｄ、ｃｐ２ａ〜ｃｐ２ｄ）を有する。また、各ノードｎｄのメモリｍｍのそれぞれは、４つのメモリページｐ１１〜ｐ１４、ｐ２１〜ｐ２４（メモリページｍｐともいう）を有する。
【００３８】
図４は、ジョブＡ、ジョブＢの実行時のジョブ資源の割り当て状態を示す。オペレーションシステムは、ジョブＡが要求するジョブ資源（図３）に基づいて、ジョブＡに、ノードｎｄ１の４つのＣＰＵコアｃｐ１ａ〜ｃｐ１ｄを割り当てる。また、オペレーションシステムは、ジョブＡに４つのメモリページｍｐを割り当てる際に、ポリシー「ＢＩＮＤ」に基づいて、ノードｎｄ１の４つのメモリページｐ１１〜ｐ１４を割り当てる。
【００３９】
次に、オペレーションシステムは、ジョブＢが要求するジョブ資源（図３）に基づいて、ジョブＢに、ノードｎｄ２の４つのＣＰＵコアｃｐ２ａ〜ｃｐ２ｄを割り当てる。また、オペレーションシステムは、ポリシー「ＢＩＮＤ」に基づいて、ジョブＢに、ノードｎｄ２の４つのメモリページｐ２１〜ｐ２４を割り当てる。このように、オペレーションシステムは、ジョブが要求するジョブ資源を、ＮＵＭＡポリシーにしたがって、ジョブに割り当てる。
【００４０】
図５は、再配置を行わない場合の、ジョブＡ〜ジョブＥに対するメモリページｍｐの割り当て状態を時系列（タイミングｔ１〜ｔ７）に示す表図である。
【００４１】
図５に示す表Ｈ１によると、タイミングｔ２にジョブＡが終了しノードｎｄ１のジョブ資源が解放されたことにより、タイミングｔ４に、オペレーションシステムはジョブＣの実行を開始する。ジョブＢがノードｎｄ２のジョブ資源を占有しているため、オペレーションシステムは、ジョブＣに、ノードｎｄ１の２つのＣＰＵコアｃｐ、及び、２つのメモリページｍｐを割り当てる。この場合、ジョブＣは、１つのノードｎｄ１のメモリページｍｐのみを使用するため、ポリシー「ＩＮＴＥＲＬＥＡＶＥ」を満たしていない。
【００４２】
次に、タイミングｔ５に、オペレーションシステムは、ジョブＤに、ノードｎｄ１の２つのＣＰＵコアｃｐ、及び、２つのメモリページｍｐを割り当てる。ジョブＤも同様にして、１つのノードｎｄ１のメモリページｍｐのみを使用するため、ポリシー「ＩＮＴＥＲＬＥＡＶＥ」を満たしていない。
【００４３】
そして、タイミングｔ５に、ジョブＢが終了しノードｎｄ２のジョブ資源が解放されたことにより、タイミングｔ７に、オペレーションシステムはジョブＥの実行を開始する。オペレーションシステムは、ジョブＥに、ノードｎｄ２の、４つのＣＰＵコアｃｐ及び４つのメモリページｍｐを割り当てる。ただし、ジョブＥも同様にして、１つのノードｎｄ２のメモリページのみを使用するため、ポリシー「ＩＮＴＥＲＬＥＡＶＥ」を満たしていない。
【００４４】
図５の表Ｈ１内に示す記号「！」は、ジョブがＮＵＭＡポリシーを満たしていないことを示す。したがって、図５の表Ｈ１は、タイミングｔ４〜ｔ７に、ジョブＣ〜ジョブＥの実行がＮＵＭＡポリシーを満たしていないことを示す記号「！」を有する。
【００４５】
図６は、図５に示したタイミングｔ７の、ジョブＣ〜ジョブＥのジョブ資源の割り当て状態を示す図である。図６において、図１、図２で示したものと同一のものは、同一の記号で示す。
【００４６】
図５で前述したとおり、タイミングｔ７に、ジョブＣ及びジョブＤのそれぞれは、ノードｎｄ１の、２つのＣＰＵコアｃｐ及び２つのメモリページｍｐを使用する。また、ジョブＥは、ノードｎｄ２の、４つのＣＰＵコアｃｐ及び４つのメモリページｍｐを使用する。即ち、ジョブＣ〜ジョブＥのそれぞれは、１つのノードｎｄのメモリページｍｐのみを使用する。
【００４７】
（再配置を行う場合）
図７は、再配置を行う場合の、ジョブＡ〜ジョブＥに対するメモリページｍｐの割り当て状態を時系列（タイミングｔ１〜ｔ７）に示す表図である。図７において、図５で示したものと同一のものは、同一の記号で示す。また、図７に示す表Ｈ１は、図５に示した表Ｈ１と同様である。
【００４８】
図７の表Ｈ２は、タイミングｔ６に、メモリの再配置を行った場合における、メモリページｍｐの割り当て状態を示す。ノードｎｄ２のジョブ資源が解放されると、オペレーションシステムは、タイミングｔ６に、ＮＵＭＡポリシーを満たすために、実行中のジョブＣ、ジョブＤが使用しているメモリページｍｐを、ノードｎｄ１及びノードｎｄ２のメモリページｍｐに再配置する。
【００４９】
また、タイミングｔ７に、ノードｎｄ１及びノードｎｄ２のそれぞれの、２つのＣＰＵコアｃｐ及び２つのメモリページｍｐが空き状態になる。したがって、オペレーションシステムは、ＮＵＭＡポリシーを満たすために、ジョブＥに、ノードｎｄ１及びノードｎｄ２のそれぞれの、２つのＣＰＵコアｃｐ及び２つのメモリページｍｐを割り当てる。
【００５０】
図８は、図７に示したタイミングｔ６の、ジョブＣ及びジョブＤのジョブ資源の割り当て状態を示す図である。図８において、図５で示したものと同一のものは、同一の記号で示す。
【００５１】
図７で前述したとおり、タイミングｔ６に、ジョブＣ及びジョブＤのそれぞれは、ノードｎｄ１及びノードｎｄ２の、２つのＣＰＵコアｃｐ及び２つのメモリページｍｐを使用する。即ち、ジョブＣ及びジョブＤのそれぞれは、各ノードｎｄのメモリページｍｐを使用するため、ポリシー「ＩＮＴＥＲＬＥＡＶＥ」を満たす。
【００５２】
図９は、図７に示したタイミングｔ７の、ジョブＣ〜ジョブＥのジョブ資源の割り当て状態を示す図である。図９において、図５で示したものと同一のものは、同一の記号で示す。
【００５３】
図７で前述したとおり、タイミングｔ７に、ジョブＣ〜ジョブＥのそれぞれは、各ノードｎｄ１、ｎｄ２のメモリページｍｐを使用する。したがって、ジョブＣ〜ジョブＥは、ポリシー「ＩＮＴＥＲＬＥＡＶＥ」を満たす。
【００５４】
図７〜図９に示すように、実行中のジョブＣ、ジョブＤに割り当て済みのメモリページｍｐを再配置したことに伴い、ジョブＣ〜ジョブＥは、ＮＵＭＡポリシーを満たす。オペレーションシステムは、メモリページｍｐを再配置する場合、ジョブが使用するメモリページｍｐに記憶されているデータを、再配置先のメモリページｍｐに複写し、再配置先のメモリページｍｐをジョブに割り当てる。したがって、メモリページｍｐの再配置に伴い、ジョブのプロセスがアクセス（使用）する、メモリページｍｐの物理アドレスが変化する。なお、この場合、ジョブのプロセスがアクセスする仮想メモリのアドレスは、変化しない。
【００５５】
各ノードｎｄのＣＰＵコアｃｐは、キャッシュメモリを介して、メモリページｍｐにアクセスする。図７〜図９で説明したメモリページｍｐの再配置に伴い、ジョブのプロセスがアクセスするメモリページｍｐの物理アドレスが変化する。メモリページｍｐの物理アドレスの変化により、キャッシュメモリにおけるスラッシングが発生する場合がある。
【００５６】
次に、図１０にしたがって、本実施の形態のキャッシュメモリの構成を説明するとともに、図１１にしたがって、図１０で説明したキャッシュメモリにおけるスラッシングの発生を説明する。
【００５７】
［キャッシュメモリの構成］
図１０は、本実施の形態のキャッシュメモリ１０３の構成の一例を示す図である。図１０は、図１、図２に示す各ノードｎｄが有するキャッシュメモリ１０３と、メモリｍｍとを示す。図１０に示すメモリｍｍは、１２個のメモリページｐ０〜ｐ１１（ｍｐ、メモリ領域）を有する。
【００５８】
キャッシュメモリ１０３は、タグアレイｔａとデータアレイｄａとを有する。データアレイｄａは、所定のサイズの、複数のデータ領域（以下、キャッシュライン）ｄａ−１〜ｄａ−４を有する。タグアレイ（キャッシュタグともいう）ｔａは、インデックス値に応じて、対応するキャッシュラインｄａ−１〜ｄａ−４の情報をそれぞれ有する、タグｔａ−１〜ｔａ−４を有する。
【００５９】
インデックス値「０」のタグｔａ−１は、１番目のキャッシュラインｄａ−１に対応する。同様にして、インデックス値「１」のタグｔａ−２は、２番目のキャッシュラインｄａ−２に対応する。他のインデックス値のタグｔａ−３、ｔａ−４についても同様である。
【００６０】
図１０に示すキャッシュメモリ１０３によると、メモリページｐ０〜ｐ１１の物理アドレスに基づいて、各メモリページｐ０〜ｐ１１に記憶されているデータを記憶する対象の、キャッシュライン（即ち、インデックス値）が定まる。メモリページｐ０〜ｐ１１の物理アドレスに基づいてインデックス値が定まるキャッシュメモリ１０３を、物理アドレスキャッシュと称する。
【００６１】
プロセス間で共有するサイズの大きいキャッシュメモリ（Ｌｅｖｅｌ２、Ｌｅｖｅｌ３キャッシュ等）１０３は、物理アドレスキャッシュを採用する場合が多い。物理アドレスキャッシュの方式の一例に、セットアソシアティブ方式やダイレクトマッピング方式がある。
【００６２】
図１０に示すキャッシュメモリ１０３は、２ウェイ／４ラインのセットアソシアティブ方式のキャッシュメモリを示す。したがって、図１０に示すように、キャッシュメモリ１０３は、配列数が４つのタグアレイｔａ及びデータアレイｄａを、２セット有する。
【００６３】
ＣＰＵコアｃｐは、アクセス対象のメモリページｐ０〜ｐ１１の物理アドレス（先頭アドレス）に基づいて、インデックス値を取得する。ＣＰＵコアｃｐは、インデックス値に基づいて、対応するキャッシュタグｔａを参照し、アクセス対象のメモリページｍｐのキャッシュミスヒット判定を行う。
【００６４】
例えば、ＣＰＵコアｃｐは、アドレスを、キャッシュライン数とキャッシュラインのサイズとの乗算値にしたがって除算した場合の剰余を、インデックス値として算出する。本実施の形態では、メモリページｐ０〜ｐ１１のアドレス「上位アドレス＋下位アドレス」のうち、下位アドレスがインデックス値に対応する。
【００６５】
図１０の例によると、メモリページｐ０のアドレスは、例えば、値「０／０（上位アドレス／下位アドレス）」である。下位アドレス「０」は、インデックス値「０」に対応する。同様にして、メモリページｐ１のアドレスは値「０／１」であって、インデックス値「１」に対応する。同様にして、メモリページｐ２のアドレスは値「０／２」であって、インデックス値「２」に対応する。
【００６６】
また、メモリページｐ４のアドレスは値「１／０」であって、インデックス値「０」に対応する。このように、下位アドレスが同一のメモリページｐ０、ｐ４は、同一のインデックス値「０」に対応する。即ち、メモリページｐ０、ｐ４のデータは、同一のキャッシュラインｄａ−１に記憶される。
【００６７】
各タグｔａ−１〜ｔａ−４は、対応するキャッシュラインｄａ−１〜ｄａ−４に記憶されたメモリページｐ０〜ｐ１１の上位アドレス等の情報を有する。ＣＰＵコアｃｐは、アクセス対象のメモリページｐ０〜ｐ１１の上位アドレスと、インデックス値のタグｔａ−１〜ｔａ−４が有する上位アドレスとを比較し、キャッシュミスヒットの判定を行う。
【００６８】
上位アドレスが一致する場合、ＣＰＵコアｃｐは、アクセス対象のメモリページｐ０〜ｐ１１のデータが、キャッシュメモリ１０３に記憶されている旨、判定する（キャッシュヒット）。一方、上位アドレスが一致しない場合、ＣＰＵコアｃｐは、アクセス対象のメモリページｐ０〜ｐ１１のデータが、キャッシュメモリ１０３に記憶されていない旨、判定する（キャッシュミス）。
【００６９】
次に、図１１にしたがって、キャッシュメモリ１０３におけるスラッシングの概要を説明する。キャッシュメモリ１０３におけるスラッシングは、図１０に示した、同一のキャッシュラインｄａ−１〜ｄａ−４に対するデータの書き換えが頻繁に発生する事象を示す。ジョブがアクセスする複数のメモリページｐ０〜ｐ１１が同一のインデックス値に対応する場合、ジョブの実行中に、当該キャッシュラインｄａ−１〜ｄａ−４に対するデータの書き換えが頻繁に発生する。
【００７０】
［キャッシュメモリにおけるスラッシング］
図１１は、メモリの再配置に伴う、スラッシングの発生を模式的に説明する図である。図１１の（Ａ）は再配置前の状態を示し、図１１の（Ｂ）は再配置後の状態を示す。図１１において、図１０で示したものと同一のものは、同一の記号で示す。図１１の（Ａ）（Ｂ）に示すキャッシュメモリ１０３は、図１０に対して、タグアレイｔａ及びメモリｍｍを抜粋して表す。
【００７１】
図１１の（Ａ）の例によると、あるジョブは、複数のメモリページｐ０、ｐ２、ｐ５、ｐ１１（ｍｐ）を使用（アクセス）する。図１０で前述したとおり、メモリページｐ０はインデックス値「０」に対応し、メモリページｐ２はインデックス値「２」に対応する。同様にして、メモリページｐ５はインデックス値「１」に対応し、メモリページｐ１１はインデックス値「３」に対応する。
【００７２】
図１１の（Ａ）によると、ジョブが使用する各メモリページｐ０、ｐ２、ｐ５、ｐ１１に対応するインデックス値「０〜３」は互いに重複しない。したがって、ジョブの実行中に、複数のメモリページｐ０、ｐ２、ｐ５、ｐ１１の間で、同一のキャッシュラインに対するデータの書き換え（即ち、スラッシング）は発生しない。
【００７３】
本実施の形態において、図１１の（Ａ）に示すように、ジョブのプログラムは、例えば、予め、ジョブ実行時のスラッシングを抑制するように生成される。即ち、ジョブのプログラムは、ジョブが使用する複数のメモリページｍｐに対応する、インデックス値の組が重複しないように、生成される。したがって、図１１の（Ａ）に示すように、例えば、メモリページｍｐの再配置前、ジョブが使用する複数のメモリページｍｐに対応する、インデックス値の組は互いに重複しない。
【００７４】
図１１の（Ｂ）は、図１１の（Ａ）の状態から、メモリページｍｐを再配置した場合のキャッシュメモリ１０３の状態を示す。図１１の（Ｂ）の例によると、オペレーションシステムは、ジョブが使用するメモリページｐ０、ｐ２、ｐ５、ｐ１１を、ノードｎｄ２のメモリページｐ１、ｐ５、ｐ８、ｐ１０に再配置する。メモリページｍｐの再配置に伴い、ジョブが使用するメモリページｍｐのアドレス（物理アドレス）は変化する。図１１の（Ｂ）に示すように、アドレスの変化に伴い、再配置後のメモリページｐ１及びメモリページｐ５のアドレスは、同一のインデックス値「１」に対応する。
【００７５】
また、図１１のキャッシュメモリ１０３は、２ウェイのキャッシュメモリである。したがって、仮に、別のプロセスがインデックス値「１」のキャッシュラインｄａ−２を使用している場合、ジョブの実行時に、キャッシュラインｄａ−２に対するデータの書き換え処理が頻繁に発生し、キャッシュメモリ１０３におけるスラッシングが生じる。スラッシングが発生すると、メモリアクセスの処理時間のレイテンシが増加し、ジョブの実行時間が長くなる。
【００７６】
このように、再配置の際に、ジョブが使用する複数のメモリページｍｐ（ｐ０〜ｐ１１）が、同一のインデックス値に対応するメモリページｍｐに再配置され、スラッシングが発生する場合がある。オペレーションシステムは、スラッシングの発生を考慮することなく、ＮＵＭＡポリシーやジョブが要求するジョブ資源のみに基づいてメモリの再配置を行う。
【００７７】
［第１の実施の形態］
したがって、並列計算機は、第１のノードｎｄが実行中のジョブを第２のノードｎｄに移行してジョブの実行を継続する際に、ジョブがアクセスするデータが記憶された第１のノードｎｄの第１の複数のメモリページｍｐに対応するインデックス値を取得する。第１、第２のノードｎｄは、複数のメモリページ（メモリ領域）ｍｐ、及び、キャッシュメモリ１０３を、それぞれ有する。
【００７８】
そして、並列計算機は、第２のノードｎｄが、取得したインデックス値の組と同一または相対位置関係を有するインデックス値の組に対応する、非使用状態の第２の複数のメモリページｍｐを有するか否かを判定する。第２の複数のメモリページｍｐを有する場合、並列計算機は、データを第２の複数のメモリページｍｐに移動する。
【００７９】
図１２は、第１の実施の形態の並列計算機の処理の概要を説明するフローチャート図である。図１２のフローチャートは、第１のノード（再配置元ノード）ｎｄが実行しているジョブを第２のノード（再配置先ノード）ｎｄに移行して、ジョブの実行を継続する場合における、メモリページｍｐの再配置処理を説明する。
【００８０】
本実施の形態における並列計算機は、例えば、図１、図２に示すノードｎｄのひとつである。また、本実施の形態は、実行中のジョブが使用しているメモリページｍｐを、ノードｎｄ１からノードｎｄ２に再配置する場合を例示する。したがって、本実施の形態では、第１のノードを第１のノードｎｄ１と称し、第２のノードを第２のノードｎｄ２と称する。
【００８１】
Ｓ１１：並列計算機ｎｄは、移行する対象のジョブがアクセスするデータが記憶された、第１のノードｎｄ１の複数のメモリページｍｐのアドレス（先頭アドレス）に基づいて、インデックス値の組を取得する。
【００８２】
Ｓ１２：並列計算機ｎｄは、第２のノードｎｄ２が、取得したインデックス値の組と同一、または、取得したインデックス値の組と相対位置関係を有するインデックス値の組に対応する、非使用状態の複数のメモリページｍｐを有するか否かを判定する。
【００８３】
Ｓ１３：非使用状態の複数のメモリページｍｐを有する場合（Ｓ１２のＹｅｓ）、並列計算機ｎｄは、対象のジョブがアクセスするデータを、第１のノードｎｄ１から、第２のノードｎｄ２に移動する。一方、非使用状態の複数のメモリページｍｐを有していない場合（Ｓ１２のＮｏ）、並列計算機ｎｄは、第２のノードｎｄ２にジョブを移行しない。
【００８４】
前述したとおり、ジョブのプログラムは、例えば、ジョブの実行時に、スラッシングの発生を抑制するように生成される。つまり、ジョブのプログラムは、ジョブがアクセスする複数のメモリページｍｐに対応するインデックス値の重複を抑えるように生成される。したがって、本実施の形態の並列計算機ｎｄは、再配置前にジョブがアクセスするデータが記憶されている複数のメモリページｍｐに対応するインデックス値の組の相関関係を維持するように、メモリページｍｐを再配置する。
【００８５】
言い換えると、並列計算機ｎｄは、キャッシュメモリ１０３におけるスラッシングの発生を抑制する、インデックス値の変化の許容範囲を判定する。そして、並列計算機ｎｄは、第２のノードｎｄ２が、非使用状態の、許容範囲内のインデックス値の組に対応するメモリページｍｐを有する場合に、再配置後にスラッシング発生しない旨、判定する。
【００８６】
これにより、ジョブが使用する複数のメモリページｍｐが、再配置に伴って、同一のキャッシュラインに対応することを回避可能になり、キャッシュメモリ１０３におけるスラッシングの発生を抑制可能になる。これにより、並列計算機ｎｄは、スラッシングの発生に起因する、ジョブのメモリアクセス性能の低下を抑制できる。
【００８７】
また、並列計算機ｎｄは、メモリページｍｐの再配置の際に、ジョブが使用しているメモリページｍｐに対応するインデックス値の組の相関関係を変更しない。つまり、再配置の際に、ユーザが意図しない、インデックス値の組の間の相関関係の変更が発生しない。これにより、ベンチマークテスト等のテストの実行時に、再配置に伴うスラッシングの発生の有無に応じて、テスト結果が変動することを回避可能になり、テストの結果が安定する。これにより、ユーザは、安定したテスト結果に基づいて、分析や改良等を適切に行うことができる。
【００８８】
なお、本実施の形態における並列計算機ｎｄの再配置処理は、ＮＵＭＡ環境における再配置処理に限定されるものではない。また、第１、第２のノードｎｄ１、ｎｄ２は、例えば、仮想マシンであってもよいし、異なる物理マシンであってもよい。
【００８９】
次に、図１３にしたがって、第１の実施の形態における並列計算機ｎｄのハードウェア構成を、図１４にしたがって、並列計算機ｎｄのソフトウェアブロック図を説明する。前述したとおり、並列計算機ｎｄは、例えば、図１、図２に示す情報処理装置１０が有するノードｎｄのひとつを示す。なお、並列計算機ｎｄは、情報処理装置１０が有するノードｎｄとは、別の装置であってもよい。
【００９０】
［並列計算機のハードウェア構成］
図１３は、第１の実施の形態の並列計算機ｎｄのハードウェア構成を示す図である。図１３に示す並列計算機ｎｄは、ＣＰＵユニット１０１とメモリユニット１０２とを有する。ＣＰＵユニット１０１は、複数のＣＰＵコアｃｐ１ａ〜ｃｐ１ｄ（ｃｐ）と、キャッシュメモリ１０３、通信インタフェース部１０４等を有する。ＣＰＵユニット１０１の各部は、バス１０６を介して相互に接続する。
【００９１】
複数のＣＰＵコアｃｐは、キャッシュメモリ１０３を介して、メモリユニット１０２等と接続する。通信インタフェース部１０４は、図１、図２に示した他のノードｎｄと接続し、データの送受信を行う。図１３に示す、キャッシュメモリ１０３は、例えば、Ｌ２（Level２）キャッシュである。
【００９２】
メモリユニット１０２は、例えば、ＲＡＭ（Random Access Memory：ＲＡＭ）や不揮発性メモリ等を示す。メモリユニット１０２は、ＣＰＵコアｃｐが処理を行うデータ等を記憶する。また、メモリユニット１０２は、データ領域を示すメモリｍｍと、プログラム領域ｐｐとを有する。メモリｍｍは、静的領域やヒープ領域等を有し、プログラムの実行時に使用する領域である。前述したとおり、メモリｍｍは、複数のメモリページ（メモリ領域）ｍｐを有する。
【００９３】
また、プログラム領域ｐｐは、機械語に翻訳されたプログラムを格納する領域である。プログラム領域ｐｐは、例えば、オペレーションシステム格納領域１２０、ジョブプログラム格納領域１２３を有する。また、オペレーションシステム格納領域１２０は、再配置プログラム格納領域１２１と、ジョブ使用メモリ情報格納領域１２２とを有する。
【００９４】
オペレーションシステム格納領域１２０のオペレーションシステム（以下、オペレーションシステム１２０）は、ＣＰＵコアｃｐの実行によって、並列計算機ｎｄで動作するオペレーションシステムの処理を実現する。再配置プログラム格納領域１２１の再配置プログラム（以下、再配置プログラム１２１）は、実行中のジョブの、ジョブ資源の再配置処理を行う。再配置プログラム１２１の詳細は、図１４にしたがって後述する。
【００９５】
ジョブ使用メモリ情報格納領域１２２のジョブ使用メモリ情報（以下、ジョブ使用メモリ情報１２２と称する）は、各ジョブがアクセスするデータが記憶されたメモリページｍｐの情報を有する。ジョブ使用メモリ情報１２２の詳細は、図１５にしたがって後述する。
【００９６】
ジョブプログラム格納領域１２３のジョブプログラム（以下、ジョブプログラム１２３）は、ＣＰＵコアｃｐの実行によって、オペレーションシステム１２０上のジョブの実行を実現する。ジョブは、例えば、大規模な計算処理や、データの分析処理等である。ジョブプログラム１２３は、実行するジョブに応じて異なる。
【００９７】
［並列計算機のソフトウェアブロック］
図１４は、図１３に示した並列計算機ｎｄのソフトウェアブロックを説明する図である。図１３に示した再配置プログラム１２１は、メモリ再配置モジュール１３１と、ＣＰＵ再配置モジュール１３２とを有する。また、メモリ再配置モジュール１３１は、メモリ獲得ルーチン１３３を有する。
【００９８】
メモリ再配置モジュール１３１は、ジョブ使用メモリ情報１２２（図１３）を参照し、実行中のジョブが使用するメモリページｍｐの情報を取得する。そして、メモリ再配置モジュール１３１は、メモリ獲得ルーチン１３３を呼び出す。
【００９９】
メモリ獲得ルーチン１３３は、第２のノードｎｄ２が、メモリページｍｐに対応するインデックス値の組と同一または相対位置関係を有するインデックス値の組に対応する、非使用状態のメモリページｍｐを有するか否かを判定する。
【０１００】
メモリページｍｐを有する場合に、メモリ再配置モジュール１３１は、メモリページｍｐを第２のノードｎｄ２に再配置する。メモリ再配置モジュール１３１の処理の詳細を、図１６のフローチャート図にしたがって後述する。
【０１０１】
ＣＰＵ再配置モジュール１３２は、実行中のジョブが使用しているＣＰＵコアｃｐを、別のノードｎｄのＣＰＵコアｃｐに再配置する。例えば、ＣＰＵ再配置モジュール１３２は、第２のノードｎｄ２が、ジョブに指定されたＮＵＭＡポリシーを満たす場合に、ジョブが使用するＣＰＵコアｃｐを、第２のノードｎｄ２のＣＰＵコアｃｐに変更する。
【０１０２】
［ジョブ使用メモリ情報］
図１５は、図１３、図１４に示した、ジョブ使用メモリ情報１２２の一例を示す図である。ジョブ使用メモリ情報１２２は、実行中のジョブがアクセスするデータが記憶されたメモリページｍｐ、即ち、実行中のジョブが使用しているメモリページｍｐの情報を有する。
【０１０３】
図１５に示すジョブ使用メモリ情報１２２は、図１１の（Ａ）に示す、メモリページｍｐの情報を有する。具体的に、図１５に示すジョブ使用メモリ情報１２２は、実行中のジョブがアクセスするデータが記憶されたメモリページｍｐが、メモリページｐ０、ｐ２、ｐ５、ｐ１１であることを示す。
【０１０４】
なお、ノードｎｄが複数のジョブを実行している場合、ジョブ使用メモリ情報１２２は、ジョブ毎に、ジョブが使用しているメモリページｍｐの情報を有する。
【０１０５】
次に、図１６〜図２２にしたがって、図１３、図１４に示すメモリ再配置モジュール１３１の処理の詳細を説明する。図１６は、メモリ再配置モジュール１３１の処理の流れを示し、図１７〜図２２は、図１６に示す工程の一部の処理の詳細を示す。
【０１０６】
［メモリ再配置モジュールの処理］
図１６は、図１３、図１４に示す、メモリ再配置モジュール１３１の処理の詳細を説明するフローチャート図である。
【０１０７】
Ｓ２１：メモリ再配置モジュール１３１は、ジョブ使用メモリ情報１２２（図１５）を参照し、移行対象のジョブがアクセスするデータが記憶された第１のノードｎｄ１の複数のメモリページｍｐの情報を取得する。そして、メモリ再配置モジュール１３１は、取得した、複数のメモリページｍｐのアドレスに対応する、インデックス値の組を取得する。
【０１０８】
具体的に、メモリ再配置モジュール１３１は、対象ジョブがアクセスするデータが記憶された、第１のノードｎｄ１のメモリページｍｐのアドレス「Ｍ＝{ｍ１,ｍ２,ｍ３,…ｍＮ}（アドレス「Ｍ」ともいう）」を取得する。図１１の（Ａ）の例によると、アドレス「Ｍ」は、値「０（＝ｍ１），２（＝ｍ２），５（＝ｍ３），１１（＝ｍ４）」を示す。
【０１０９】
そして、メモリ再配置モジュール１３１は、アドレス「Ｍ」に対応する、インデックス値「Ｉ＝｛Ｉ（ｍ１）,Ｉ（ｍ２）,…,Ｉ（ｍＮ）｝（インデックス値「Ｉ」ともいう）」を取得する。図１１の（Ａ）の例によると、インデックス値「Ｉ」は、値「０（＝Ｉ（０）），２（＝Ｉ（２）），１（＝Ｉ（５）），３（＝Ｉ（１１））」を示す。
【０１１０】
前述したとおり、メモリ再配置モジュール１３１は、例えば、式「ｍｉ％（Ｋ×ｓ）」に基づいて、インデックス値「Ｉ（ｍｉ）」を算出する。値「Ｋ」はキャッシュラインの数を示し、値「ｓ」はキャッシュラインのサイズを示す。メモリ再配置モジュール１３１は、キャッシュラインの数「Ｋ」、及び、キャッシュラインのサイズ「ｓ」をハードウェアから取得可能である。
【０１１１】
Ｓ２２：メモリ再配置モジュール１３１は、インデックス値毎に、対象ジョブのプロセスが使用しているメモリページｍｐの数「Ｐ＝{Ｐ（１）,Ｐ（２）,Ｐ（３）,…,Ｐ（Ｋ）}（メモリページ数「Ｐ」ともいう）」を算出する。値「Ｐ（ｒ）（０≦ｒ＜Ｋ）」は、ｒ番目のインデックス値のメモリページ数の累計を示す。
【０１１２】
つまり、メモリ再配置モジュール１３１は、工程Ｓ２１で算出した各インデックス値「Ｉ（ｍｉ）」を累計し、インデックス値「ｒ」毎のメモリページ数を算出する。図１１の（Ａ）の例によると、メモリページ数「Ｐ」は、値「１（＝Ｐ（１））, １（＝Ｐ（２））, １（＝Ｐ（３））, １（＝Ｐ（０））」を示す。即ち、図１１の（Ａ）の例によると、各インデックス値のメモリページ数は、１ページである。
【０１１３】
Ｓ２３：メモリ再配置モジュール１３１は、条件１（ｋ＝０）を満たすインデックス値の組に対応する、第２のノードｎｄ２の複数のメモリページｍｐを取得（獲得）する。第２のノードｎｄ２が、条件１（ｋ＝０）を満たすインデックス値の組に対応する複数のメモリページｍｐを有する場合、複数のメモリページｍｐを獲得可能であることを示す。メモリページｍｐを獲得できた場合（Ｓ２３のＹｅｓ）、メモリ再配置モジュール１３１は、獲得した複数のメモリページｍｐのアドレスを、リスト「Ｌ（ｒ）」に追加する。
【０１１４】
条件１（ｋ＝０）を満たすインデックス値の組は、図１７にしたがって説明する。また、工程Ｓ２３の処理の詳細は、図１８のフローチャート図にしたがって後述する。
【０１１５】
Ｓ２４：メモリ再配置モジュール１３１は、工程Ｓ２３の処理の結果、メモリページｍｐの獲得に成功したか否かを判定する。
【０１１６】
Ｓ２５：メモリページｍｐの獲得に失敗した場合（Ｓ２４のＮｏ）、メモリ再配置モジュール１３１は、条件１（ｋ≠０）を満たすインデックス値の組に対応する、第２のノードｎｄ２の複数のメモリページｍｐを取得（獲得）する。第２のノードｎｄ２が、条件１（ｋ≠０）を満たすインデックス値の組に対応する複数のメモリページｍｐを有する場合、複数のメモリページｍｐを獲得可能であることを示す。
【０１１７】
メモリページｍｐを獲得できた場合（Ｓ２５のＹｅｓ）、メモリ再配置モジュール１３１は、獲得した複数のメモリページｍｐのアドレスをリスト「Ｌ（ｒ）」に追加する。条件１（ｋ≠０）を満たすインデックス値の組を、図１９にしたがって説明する。また、工程Ｓ２５の処理の詳細を、図２０のフローチャート図にしたがって後述する。
【０１１８】
Ｓ２６：メモリ再配置モジュール１３１は、工程Ｓ２５の処理の結果、メモリページｍｐの獲得に成功したか否かを判定する。
【０１１９】
Ｓ２７：メモリページｍｐの獲得に失敗した場合（Ｓ２６のＮｏ）、メモリ再配置モジュール１３１は、条件２（ｋ＝０）（ｋ≠０）を満たすインデックス値の組に対応する、第２のノードｎｄ２の複数のメモリページｍｐを取得（獲得）する。第２のノードｎｄ２が、条件２（ｋ＝０）（ｋ≠０）を満たすインデックス値の組に対応する複数のメモリページｍｐを有する場合、複数のメモリページｍｐを獲得可能であることを示す。
【０１２０】
メモリページｍｐを獲得できた場合（Ｓ２７のＹｅｓ）、メモリ再配置モジュール１３１は、獲得したメモリページｍｐのアドレスをリスト「Ｌ（ｒ）」に追加する。条件２（ｋ＝０）（ｋ≠０）を満たすインデックス値の組、及び、工程Ｓ２７の処理の詳細を、図２１のフローチャート図にしたがって後述する。
【０１２１】
Ｓ２８：メモリ再配置モジュール１３１は、工程Ｓ２７の処理の結果、メモリページｍｐの獲得に成功したか否かを判定する。
【０１２２】
Ｓ２９：メモリページｍｐの獲得に成功した場合（Ｓ２４のＹｅｓ、Ｓ２６のＹｅｓ、Ｓ２８のＹｅｓのいずれか）、メモリ再配置モジュール１３１は、リスト「Ｌ（ｒ）」から、獲得したメモリページｍｐのアドレス「Ｍ'」を取得する。そして、メモリ再配置モジュール１３１は、再配置先の第２のノードｎｄ２の、メモリページｍｐの物理アドレス「Ｍ'＝{ｍ１',ｍ２',ｍ３',…ｍＮ'}（アドレス「Ｍ'」ともいう）」を決定する。
【０１２３】
メモリ再配置モジュール１３１は、第１のノードｎｄ１のアドレス「Ｍ」のメモリページｍｐに記憶されたデータを、第２のノードｎｄ２のアドレス「Ｍ'」のメモリページｍｐに複写する。そして、メモリ再配置モジュール１３１は、対象ジョブのプロセスに割り当てるメモリページｍｐのアドレスを、アドレス「Ｍ」からアドレス「Ｍ'」に変更する。変更後、メモリ再配置モジュール１３１は、アドレス「Ｍ」のメモリページｍｐを開放する。
【０１２４】
なお、メモリページｍｐの獲得に失敗した場合（Ｓ２８のＮｏ）、メモリ再配置モジュール１３１は、第２のノードｎｄ２にジョブを移行しない。メモリ再配置モジュール１３１は、例えば、別のノードｎｄを対象として、図１６のフローチャート図の処理を行う。即ち、メモリ再配置モジュール１３１は、実行中のジョブの、インデックス値の組と同一または相対位置関係を有するインデックス値の組に対応する、非使用状態のメモリページｍｐを有する別のノードｎｄを検索する。
【０１２５】
［工程Ｓ２３：条件１（ｋ＝０）を満たすインデックス値の組］
図１７は、図１６のフローチャート図の工程Ｓ２３に示した、条件１（ｋ＝０）を満たすインデックス値の組を説明する図である。条件１（ｋ＝０）を満たすインデックス値の組は、ジョブがアクセスするデータが記憶された、第１のノードｎｄ１のメモリページｍｐに対応するインデックス値の組と同一のインデックス値の組を示す。即ち、条件１（ｋ＝０）を満たすインデックス値の組は、工程Ｓ２２で取得したインデックス値「Ｉ」と同一のインデックス値の組を示す。
【０１２６】
図１７の（Ａ）によると、ジョブが使用している、第１のノードｎｄ１のメモリページｍｐのアドレス「Ｍ」に対応するインデックス値「Ｉ」は、値「０，２，１，３」である。したがって、条件１（ｋ＝０）に対応するインデックス値の組は、インデックス値「０，２，１，３」を示す。
【０１２７】
次に、図１８にしたがって、条件１（ｋ＝０）を満たすインデックス値の組に対応する、第２のノードｎｄ２の複数のメモリページｍｐの取得処理（工程Ｓ２３）の詳細を説明する。
【０１２８】
［図１６の工程Ｓ２３］
図１８は、図１６のフローチャート図の工程Ｓ２３の処理を説明するフローチャート図である。
【０１２９】
Ｓ３１：メモリ再配置モジュール１３１は、インデックス値「ｒ（０≦ｒ＜Ｋ）」を対象として、工程Ｓ３２〜Ｓ３４の処理を繰り返す。
【０１３０】
Ｓ３２：メモリ再配置モジュール１３１は、インデックス値「ｒ」と、当該インデックス値のメモリページ数「Ｐ（ｒ）」を入力として、メモリ獲得ルーチン１３３を呼び出す。メモリ獲得ルーチン１３３は、インデックス値「ｒ」に対応するメモリページｍｐを、メモリページ数「ｐ（ｒ）」分、獲得する処理を行う。メモリ獲得ルーチン１３３の処理の詳細は、図２２にしたがって後述する。
【０１３１】
図１７の（Ａ）の例によると、メモリ再配置モジュール１３１は、インデックス値「ｒ＝０」の場合、インデックス値「ｒ＝０」と、メモリページ数「Ｐ（ｒ）＝１」とを入力として、メモリ獲得ルーチン１３３を呼び出す。同様にして、メモリ再配置モジュール１３１は、インデックス値「ｒ＝１」の場合、インデックス値「ｒ＝１」と、メモリページ数「Ｐ（ｒ）＝１」とを入力として、メモリ獲得ルーチン１３３を呼び出す。
【０１３２】
Ｓ３３：メモリ再配置モジュール１３１は、メモリ獲得ルーチン１３３にしたがって、メモリページｍｐを獲得できたか否かを判定する。メモリページｍｐを獲得できなかった場合（Ｓ３３のＮｏ）、メモリ再配置モジュール１３１は、工程Ｓ２３の処理を終了（失敗）する。
【０１３３】
Ｓ３４：メモリページｍｐを獲得できた場合（Ｓ３３のＹｅｓ）、メモリ再配置モジュール１３１は、インデックス値「ｒ」が値「Ｋ−１」と一致するか否か、即ち、全てのインデックス値を対象としてメモリページｍｐを獲得したか否かを判定する。
【０１３４】
Ｓ３５：変数「ｒ」が値「Ｋ−１」と一致する場合（Ｓ３４のＹｅｓ）、メモリ再配置モジュール１３１はループを終了し、工程Ｓ２３の処理を終了（成功）する。このように、メモリ再配置モジュール１３１は、インデックス値「０」からインデックス値「Ｋ−１」まで順に、メモリページ数「Ｐ（ｒ）」の数のメモリページを獲得する。
【０１３５】
これにより、図１７の（Ｂ）に示すように、メモリ再配置モジュール１３１は、インデックス値の組「０，２，１，３」に対応する、第２のノードｎｄ２のメモリページｐ４、ｐ１０、ｐ９、ｐ３（ｍｐ）を獲得する。獲得した、メモリページｐ４、ｐ１０、ｐ９、ｐ３（ｍｐ）のアドレス「４（＝ｍ１'）、１０（＝ｍ２'）、９（＝ｍ３'）、３（＝ｍ４'）」は、インデックス値の組「０，２，１，３」を示す。
【０１３６】
図１７、図１８によると、再配置の前後で、ジョブが使用する複数のメモリページｍｐに対応するインデックス値の組は、変化しない。したがって、再配置前に、ジョブ内でスラッシングが発生しないようにメモリページｍｐのアドレスが制御されている場合、同一のインデックス値の組を維持するようにメモリページｍｐを再配置することにより、再配置に伴うスラッシングの発生を抑制可能になる。
【０１３７】
［工程Ｓ２５：条件１（ｋ≠０）を満たすインデックス値の組］
図１９は、図１６のフローチャート図の工程Ｓ２５に示した、条件１（ｋ≠０）を満たすインデックス値の組を説明する図である。図１９において、図１７で示したものと同一のものは、同一の記号で示す。また、図１９の（Ａ）に示す、再配置前の、ジョブが使用している複数のメモリページｍｐは、図１７の（Ａ）と同様である。
【０１３８】
条件１（ｋ≠０）を満たすインデックス値の組は、メモリページｍｐのアドレス「Ｍ」に対応するインデックス値の組と相対位置関係を有するインデックス値の組を示す。即ち、条件１（ｋ≠０）を満たすインデックス値の組は、アドレス「Ｍ」に対応するインデックス値の組を、一律に同程度、シフトしたインデックス値の組を示す。
【０１３９】
図１９の（Ａ）によると、アドレス「Ｍ」に対応するインデックス値「Ｉ」は、値「０，２，１，３」である。条件１（ｋ≠０）を満たすインデックス値の組は、インデックス値「Ｉ＋ｋ（ｋ≠０）」となるインデックス値の組を示す。つまり、条件１（ｋ≠０）を満たすインデックス値の組は、組「Ｉ＝｛１，３，２，０｝」、組「Ｉ＝｛２，０，３，１｝」、組「Ｉ＝｛３，１，０，２｝」のいずれかである。
【０１４０】
次に、図２０にしたがって、条件１（ｋ≠０）を満たすインデックス値の組に対応する、第２のノードｎｄ２のメモリページｍｐの取得処理（工程Ｓ２５）の詳細を説明する。
【０１４１】
［図１６の工程Ｓ２５］
図２０は、図１６のフローチャート図の工程Ｓ２５の処理を説明するフローチャート図である。
【０１４２】
Ｓ４１：メモリ再配置モジュール１３１は、シフトする相対位置を示す相対値「ｋ（０＜ｋ＜Ｋ−１）」を対象として、工程Ｓ４２〜Ｓ４７の処理を繰り返す。
【０１４３】
Ｓ４２：メモリ再配置モジュール１３１は、インデックス値「ｒ（０≦ｒ＜Ｋ）」を対象として、工程Ｓ４３〜Ｓ４５の処理を繰り返す。
【０１４４】
Ｓ４３：メモリ再配置モジュール１３１は、インデックス値「ｒ」と、当該インデックス値に対応するメモリページ数「ｐ（（ｒ＋ｋ）％Ｋ）」を入力として、メモリ獲得ルーチン１３３を呼び出す。つまり、メモリ獲得ルーチン１３３は、インデックス値「ｒ」に対応するメモリページｍｐを、相対値「ｋ」シフトしたインデックス値に対応するメモリページ数分、獲得する処理を行う。
【０１４５】
具体的に、メモリ再配置モジュール１３１は、相対値「ｋ＝１」の場合、インデックス値「ｒ＝｛１，２，３，...，Ｋ−１｝」と、メモリページ数「ｐ（１），Ｐ（２），Ｐ（３），...，Ｐ（０）」とを入力として、メモリ獲得ルーチン１３３を呼び出す。また、メモリ再配置モジュール１３１は、相対値「ｋ＝２」の場合、インデックス値「ｒ＝｛１，２，３，...，Ｋ−１｝」と、メモリページ数「Ｐ（２），Ｐ（３），Ｐ（０），...，Ｐ（１）」とを入力として、メモリ獲得ルーチン１３３を呼び出す。
【０１４６】
Ｓ４４：メモリ再配置モジュール１３１は、メモリ獲得ルーチン１３３にしたがって、メモリページｍｐを獲得できたか否かを判定する。
【０１４７】
Ｓ４５：メモリページｍｐを獲得できた場合（Ｓ４４のＹｅｓ）、メモリ再配置モジュール１３１は、インデックス値「ｒ」が値「Ｋ−１」と一致するか否か、即ち、全てのインデックス値に対応するメモリページｍｐを獲得したか否かを判定する。
【０１４８】
Ｓ４６：インデックス値「ｒ」が値「Ｋ−１」と一致する場合（Ｓ４５のＹｅｓ）、全てのインデックス値のメモリページｍｐを獲得できた場合を示す。したがって、メモリ再配置モジュール１３１はループを終了し、工程Ｓ２５の処理を終了（成功）する。一方、変数「ｒ」が値「Ｋ−１」と一致しない場合（Ｓ４５のＮｏ）、インデックス値「ｒ」をインクリメントし、工程Ｓ４５の処理を行う。
【０１４９】
Ｓ４７：一方、メモリページｍｐを獲得できなかった場合（Ｓ４４のＮｏ）、メモリ再配置モジュール１３１は、相対値「ｋ」が値「Ｋ−２」と一致するか否か、即ち、全ての相対値を対象として、メモリ獲得処理を試みたか否かを判定する。相対値「ｋ」が値「Ｋ−２」と一致しない場合（Ｓ４７のＮｏ）、メモリ再配置モジュール１３１は、相対値「ｋ」をインクリメントし、工程Ｓ４２〜Ｓ４６の処理を行う。
【０１５０】
Ｓ４８：相対値「ｋ」が値「Ｋ−２」と一致する場合（Ｓ４７のＹｅｓ）、全ての相対値を対象としてメモリ獲得処理を試みたものの、メモリの獲得処理に成功しなかった場合を示す。したがって、メモリ再配置モジュール１３１はループを終了し、工程Ｓ２５の処理を終了（失敗）する。
【０１５１】
これにより、図１９の（Ｂ）に示すように、メモリ再配置モジュール１３１は、インデックス値の組「０，２，１，３」を一律に相対値「ｋ」シフトした、インデックス値の組に対応するメモリページｍｐの組を獲得する。図１９の（Ｂ）の例によると、メモリ再配置モジュール１３１は、インデックス値の組「０，２，１，３」を相対値「ｋ＝１」シフトしたインデックス値の組「１，３，２，０」に対応する、メモリページｐ９、ｐ７、ｐ１０、ｐ４（ｍｐ）を獲得する。
【０１５２】
図１９、図２０によると、再配置の前後に、ジョブが使用する複数のメモリページｍｐに対応するインデックス値の組は変化するものの、インデックス値の組は一律にシフトする。したがって、再配置前に、ジョブ内でスラッシングが発生しないようにメモリページｍｐのアドレスが制御されている場合、再配置後に、メモリページｍｐの間でインデックス値が重複することを回避可能になる。つまり、インデックス値の組が一律にシフトするようにメモリページｍｐを再配置することにより、再配置に伴うスラッシングの発生を抑制可能になる。
【０１５３】
［条件２（ｋ＝０）（ｋ≠０）を満たすインデックス値の組］
次に、図２１にしたがって、条件２（ｋ＝０）（ｋ≠０）を満たすインデックス値の組に対応する、第２のノードｎｄ２のメモリページｍｐの取得処理（工程Ｓ２７）の詳細を説明する。
【０１５４】
条件２（ｋ＝０）（ｋ≠０）を満たすインデックス値の組は、図１７、図１９で説明したインデックス値の組と同様である。ただし、条件２によると、再配置前後で、メモリページｍｐとインデックス値の組が異なってもよい。図１７、図１９に基づいて、具体的に説明する。
【０１５５】
図１７の（Ａ）（Ｂ）によると、再配置前のメモリページｐ０は、再配置後のメモリページｐ４に対応する。したがって、再配置前のメモリページｐ０に対応するインデックス値「０」は、対応する再配置後のメモリページｐ４に対応するインデックス値「０」は同一である。他のメモリページｍｐについても同様である。
【０１５６】
これに対し、条件２によると、再配置前のメモリページｍｐに対応するインデックス値は、対応する再配置後のメモリページｍｐに対応するインデックス値と異なっていてもよい。例えば、再配置前のメモリページｐ０が、インデックス値「２」に対応する再配置後のメモリページｐ１０に対応してもよい。この場合、例えば、再配置前の他のメモリページｐ２、ｐ５、ｐ１１が、再配置後のメモリページｐ４に対応する。
【０１５７】
同様にして、図１９の（Ａ）（Ｂ）によると、再配置前のメモリページｐ０は、インデックス値を相対値「１」シフトした、再配置後のメモリページｐ９に対応する。したがって、再配置前のメモリページｐ０に対応するインデックス値「０」は、対応する再配置後のメモリページｐ４に対応するインデックス値「０」を相対値「１」シフトした値である。他のメモリページｍｐについても同様である。
【０１５８】
これに対し、条件２によると、再配置前のメモリページｍｐに対応するインデックス値は、対応する再配置後のメモリページｍｐに対応するインデックス値を相対値シフトした値と異なっていてもよい。例えば、再配置前のメモリページｐ０が、インデックス値「３」に対応する再配置後のメモリページｐ７に対応し、再配置前のメモリページｐ２が、再配置前と同一のインデックス値「２」に対応する再配置後のメモリページｐ１０に対応してもよい。
【０１５９】
［図１６の工程Ｓ２７］
図２１は、図１６のフローチャート図の工程Ｓ２７の処理を説明するフローチャート図である。
【０１６０】
Ｓ５１：メモリ再配置モジュール１３１は、インデックス値のカウンタを示す変数「ｉ（１≦ｋ≦Ｋ）」を対象として、工程Ｓ５２〜Ｓ５８の処理を繰り返す。
【０１６１】
Ｓ５２：メモリ再配置モジュール１３１は、各インデックス値のメモリページ数「ｐ（ｒ）（０≦ｒ＜Ｋ）」のうち、ｉ番目に大きいメモリページｍｐ数を選択し、変数「Ｐｉ」にセットする。
【０１６２】
Ｓ５３：メモリ再配置モジュール１３１は、前述した条件１（ｋ＝０）（ｋ≠０）を満たすインデックス値の組を示す変数「ｓ（０≦ｓ＜Ｋ）」を対象として、工程Ｓ５４〜Ｓ５５の処理を繰り返す。なお、変数「ｉ＝２」回目以降は、メモリ再配置モジュール１３１は、メモリページｍｐを獲得済みのインデックス値「ｓ」を除外した、インデックス値「ｓ」を選択する。
【０１６３】
Ｓ５４：メモリ再配置モジュール１３１は、インデックス値「ｓ」と、当該インデックス値に対応するメモリページ数「Ｐ（ｉ）」を入力として、メモリ獲得ルーチン１３３を呼び出す。つまり、メモリ再配置モジュール１３１は、メモリページ数の多い順に、当該メモリページ数を獲得可能なインデックス値「ｓ」のメモリページｍｐを順次、獲得する。
【０１６４】
図１７及び図１９の例によると、各インデックス値のメモリページ数は値「１」である。図１９の例において、仮にインデックス値「０」に対応するメモリページ数が値「２」の場合、メモリ再配置モジュール１３１は、インデックス値「０，１，２，３」から、メモリページ数「２」を獲得可能なインデックス値を探索する。
【０１６５】
Ｓ５５：メモリ再配置モジュール１３１は、メモリ獲得ルーチン１３３にしたがって、メモリページｍｐを獲得できたか否かを判定する。
【０１６６】
Ｓ５６：メモリページｍｐを獲得できなかった場合（Ｓ５５のＮｏ）、メモリ再配置モジュール１３１は、インデックス値「ｓ」が値「Ｋ−１」と一致するか否かを判定する。
【０１６７】
インデックス値「ｓ」が値「Ｋ−１」と一致しない場合（Ｓ５６のＮｏ）、メモリ再配置モジュール１３１は、インデックス値「ｓ」をインクリメントし、工程Ｓ５４、工程Ｓ５５を繰り返す。一方、インデックス値「ｓ」が値「Ｋ−１」と一致する場合（Ｓ５６のＹｅｓ）、メモリページ数「Ｐｉ」を獲得可能なインデックス値が存在しない場合を示す。したがって、メモリ再配置モジュール１３１は、工程Ｓ２７の処理を終了（失敗）する。
【０１６８】
Ｓ５７：一方、メモリページｍｐを獲得できた場合（Ｓ５５のＹｅｓ）、メモリ再配置モジュール１３１は、インデックス値「ｓ」のループを終了する。
【０１６９】
Ｓ５８：メモリ再配置モジュール１３１は、カウンタを示す変数「ｉ」が値「Ｋ」と一致するか否か、即ち、全てのインデックス値を対象として、メモリ獲得処理を試みたか否かを判定する。
【０１７０】
Ｓ５９：変数「ｉ」が値「Ｋ」と一致する場合（Ｓ５８のＹｅｓ）、全てのインデックス値を対象としてメモリ獲得処理を試みたことを示す。したがって、メモリ再配置モジュール１３１はループを終了し、工程Ｓ２５の処理を終了（成功）する。一方、変数「ｉ」が値「Ｋ」と一致しない場合（Ｓ５８のＮｏ）、メモリ再配置モジュール１３１は、インデックスの相対値「ｉ」をインクリメントし、工程Ｓ５２〜Ｓ５８の処理を行う。
【０１７１】
これにより、メモリ再配置モジュール１３１は、例えば、図１９に示した、第２のノードｎｄ２のメモリページｐ９、ｐ７、ｐ１０、ｐ４を獲得する。ただし、条件２によると、再配置前のメモリページｐ０、ｐ２、ｐ５、ｐ１１と、再配置後の第２のノードｎｄ２のメモリページｐ９、ｐ７、ｐ１０、ｐ４との組合せはいずれの組合せであってもよい。
【０１７２】
図２１の例によると、再配置の前後で、ジョブが使用する複数のメモリページｍｐに対応するインデックス値の組は同一、または、一律にシフトする。したがって、再配置前に、ジョブ内でスラッシングが発生しないようにメモリページｍｐのアドレスが制御されている場合、前述したとおり、再配置に伴うスラッシングの発生を抑制可能になる。
【０１７３】
［メモリ獲得ルーチンの処理］
図２２は、メモリ獲得ルーチン１３３の処理を説明するフローチャート図である。メモリ獲得ルーチン１３３の第１のパラメータである値「ｒ」は獲得対象のメモリページｍｐに対応するインデックス値を示し、第２のパラメータである値「Ｐ（ｒ）」は獲得対象のメモリページ数を示す。
【０１７４】
Ｓ６１：メモリ獲得ルーチン１３３は、メモリページｍｐの先頭アドレスを示す変数「ｍ」に、パラメータである値「ｒ」に対応する、メモリページｍｐの最小アドレスをセットする。
【０１７５】
Ｓ６２：メモリ獲得ルーチン１３３は、アドレス「ｍ」が、第２のノードｎｄ２のメモリｍｍのアドレス範囲内であるか否かを判定する。アドレス範囲を超える場合（Ｓ６２のＮｏ）、メモリ獲得ルーチン１３３は、処理を終了（失敗）する。この場合、メモリ獲得ルーチン１３３は、リスト「Ｌ（ｒ）」に無効なアドレス「ＮＵＬＬ」をセットし、メモリ再配置モジュール１３１に出力する。
【０１７６】
Ｓ６３：一方、アドレス範囲内である場合（Ｓ６２のＹｅｓ）、アドレス「ｍ」のメモリページｍｐが使用状態にあるか否かを判定する。メモリ獲得ルーチン１３３は、メモリページｍｐの使用状態を、オペレーティングシステムの管理情報に基づいて取得可能である。
【０１７７】
Ｓ６４：メモリページｍｐが使用状態にある場合（Ｓ６３のＹｅｓ）、メモリ獲得ルーチン１３３は、アドレス「ｍ」を、同一のインデックス値に対応する、次のメモリページｍｐのアドレスにインクリメントする。そして、メモリ獲得ルーチン１３３は、インクリメントしたアドレス「ｍ」を対象として、工程Ｓ６２、Ｓ６３の処理を行う。
【０１７８】
このように、メモリ獲得ルーチン１３３は、第２のノードｎｄ２のメモリｍｍ内の、インデックス値「ｒ」に対応するメモリページｍｐのアドレスの集合「ｍ（＝ｒ）,ｍ＋Ｋ,ｍ＋２Ｋ,ｍ＋３Ｋ,…」から、非使用状態のメモリページｍｐを検索する。
【０１７９】
Ｓ６５：メモリページｍｐが非使用状態の場合（Ｓ６３のＮｏ）、メモリ獲得ルーチン１３３は、アドレス「ｍ」のメモリページｍｐを、使用状態に設定する。
【０１８０】
Ｓ６６：メモリ獲得ルーチン１３３は、使用状態に設定したメモリページｍｐのアドレス「ｍ」をリスト「Ｌ（ｒ）」に接続（追加）する。
【０１８１】
Ｓ６７：メモリ獲得ルーチン１３３は、リスト「Ｌ（ｒ）」のエントリの数が、パラメータである、獲得対象のメモリページ数「Ｐ（ｒ）」に達したか否かを判定する。
【０１８２】
Ｓ６８：獲得対象のメモリページ数「Ｐ（ｒ）」に達していない場合（Ｓ６７のＮｏ）、メモリ獲得ルーチン１３３は、アドレス「ｍ」を、同一のインデックス値に対応する、次のメモリページｍｐのアドレスにインクリメントする。そして、メモリ獲得ルーチン１３３は、インクリメントしたアドレス「ｍ」を対象として、工程Ｓ６２、Ｓ６３の処理を行う。
【０１８３】
一方、獲得対象のメモリページ数「Ｐ（ｒ）」に達した場合（Ｓ６７のＹｅｓ）、メモリ獲得ルーチン１３３は処理を終了（成功）する。メモリ獲得ルーチン１３３は、メモリページ数「ｐ（ｒ）」のメモリページｍｐのアドレスのリスト「Ｌ（ｒ）」を、メモリ再配置モジュール１３１に出力する。
【０１８４】
［第２の実施の形態］
第２の実施の形態の並列計算機ｎｄは、複数の候補ノードから、メモリの再配置先のノードを選択する。
【０１８５】
並列計算機ｎｄは、第１のノードｎｄ１が実行中のジョブを移行する対象の候補ノードが複数ある場合に、複数の候補ノードのそれぞれについて、インデックス値の組と同一または相対位置関係を有するインデックス値の組を取得する。また、並列計算機ｎｄは、取得したインデックス値の組に対応する、候補ノードの複数のメモリページｍｐの使用状況に基づいて、移行後のスラッシングの発生度合いを示す判定値を算出する。そして、並列計算機ｎｄは、判定値がより小さい候補ノードを、第２のノードｎｄ２として、データを第２の複数のメモリ領域に移動する。
【０１８６】
これにより、第２の実施の形態の並列計算機ｎｄは、同一または相対位置関係を有するインデックス値の組に対応する、複数のメモリページｍｐを使用可能な度合いがより大きい候補ノードを再配置先のノードｎｄとして選択できる。つまり、並列計算機ｎｄは、複数の候補ノードから、再配置に伴うスラッシングの発生率がより小さい候補ノードを選択し、メモリページｍｐを再配置できる。
【０１８７】
また、並列計算機ｎｄは、再配置前にジョブがアクセスするデータが記憶されている複数のメモリページｍｐに対応するインデックス値の組の相関関係を維持するように、メモリページｍｐを再配置する。これにより、ジョブが使用する複数のメモリページｍｐが、再配置に伴って、同一のキャッシュラインに対応することを回避可能になり、キャッシュメモリ１０３におけるスラッシングの発生を抑制可能になる。これにより、並列計算機ｎｄは、スラッシングの発生に起因する、ジョブのメモリアクセス性能の低下を抑制できる。
【０１８８】
図２３は、第２の実施の形態の情報処理装置１０の一例を説明する図である。図２３において、図１、図２で示したものと同一のものは、同一の記号で示す。
【０１８９】
図２３に示すように、情報処理装置１０は、ノードｎｄ１〜ノードｎｄｘを有する。第２の実施の形態において、ノードｎｄ１のメモリｍｍ１が有するメモリページｍｐを、メモリページｐ（１,０）〜ｐ（１,Ｎ）と称する。同様にして、ノードｎｄｘのメモリｍｍｘが有するメモリページｍｐを、メモリページｐ（ｘ,０）〜ｐ（ｘ,Ｎ）と称する。
【０１９０】
また、ノードｎｄ１が有するＣＰＵコアｃｐを、ＣＰＵコアｃｐ（１,０）〜ｃｐ（１,Ｎ）と称し、ノードｎｄｘが有するＣＰＵコアｃｐを、ＣＰＵコアｃｐ（ｘ,０）〜ｃｐ（ｘ,Ｎ）と称する。
【０１９１】
図２４は、第２の実施の形態の並列計算機ｎｄのハードウェア構成図である。図２４に示す並列計算機ｎｄは、第１の実施の形態と同様にして、例えば、図２３に示す情報処理装置１０が有するノードｎｄのひとつを示す。図２４において、図１３で示したものと同一のものは、同一の記号で示す。
【０１９２】
図２４に示す並列計算機ｎｄのオペレーションシステム格納領域１２０は、図１３に示した第１の実施の形態の並列計算機ｎｄに対して、さらに、メモリ使用状態情報格納領域１２４を有する。
【０１９３】
メモリ使用状態情報格納領域１２４のメモリ使用状態情報（以下、メモリ使用状態情報１２４と称する）は、ノード毎のメモリページｍｐの使用状態を、インデックス値に応じて有する。メモリ使用状態情報１２４の詳細は、図２７にしたがって後述する。また、第２の実施の形態のジョブ使用メモリ情報１２２は、各ジョブがアクセスするデータが記憶されたメモリページｍｐの情報をインデックス値に対応して有する。
【０１９４】
［並列計算機のソフトウェアブロック］
図２５は、図２４に示した、並列計算機ｎｄのソフトウェアブロックを説明する図である。図２５において、図１４で示したものと同一のものは、同一の記号で示す。ＣＰＵ再配置モジュール１３２は、第１の実施の形態と同様である。
【０１９５】
図２５に示すメモリ再配置モジュール１３１は、図１４に示した第１の実施の形態のメモリ再配置モジュール１３１に対して、さらに、評価値算出ルーチン１３４を有する。また、メモリ再配置モジュール１３１は、さらに、メモリ使用状態情報１２４を参照する。第２の実施の形態のメモリ再配置モジュール１３１の処理の詳細を、図２８のフローチャート図にしたがって後述する。
【０１９６】
評価値算出ルーチン１３４は、メモリ使用状態情報１２４を参照し、同一または相対位置関係を有するインデックス値の組に対応する候補ノードｎｄのメモリページの使用状況に基づいて、移行後のスラッシングの発生度合いを示す判定値を、候補ノードｎｄ毎に算出する。
【０１９７】
そして、メモリ再配置モジュール１３１は、スラッシングの発生度合いがより小さい判定値の候補ノードｎｄに、実行中のジョブがアクセスする、第１のノードｎｄのメモリ領域に記憶されたデータを移動する。また、このとき、メモリ再配置モジュール１３１は、第１の実施の形態にしたがって、候補ノードｎｄにデータを移動する。
【０１９８】
［ジョブ使用メモリ情報］
図２６は、図２４、図２５に示した、第２の実施の形態におけるジョブ使用メモリ情報１２２の一例を説明する図である。図２６に示すように、第２の実施の形態のジョブ使用メモリ情報１２２は、インデックス値毎に、実行中のジョブが使用している、メモリページｍｐの情報、及び、メモリページ数の情報を有する。
【０１９９】
図２６に示すジョブ使用メモリ情報１２２は、ノード「ｉ」で実行中のジョブが使用しているメモリページｍｐが、メモリページｐ（ｉ，０）、ｐ（ｉ，Ｋ）、ｐ（ｉ，１）、ｐ（ｉ，３）であることを示す。また、ジョブ使用メモリ情報１２２は、メモリページｐ（ｉ，０）、ｐ（ｉ，Ｋ）がインデックス値「０」に対応することを示す。したがって、インデックス値「１」のメモリページ数は値「２」である。同様にして、インデックス値「１」「３」のメモリページ数は値「１」である。
【０２００】
［メモリ使用状態情報］
図２７は、図２４、図２５に示した、メモリ使用状態情報１２４の一例を説明する図である。メモリ使用状態情報１２４は、ノード毎のインデックス値に対応するメモリページｍｐの使用状態を示す。図２７は、ノード「ｉ」のメモリ使用状態情報１２４を示す。
【０２０１】
図２７に示すように、メモリ使用状態情報１２４は、インデックス値毎に、対応するメモリページｍｐの使用状態を示す。状態「未使用」は、メモリページｍｐを使用していない非使用状態を示す。状態「使用中（ファイルのキャッシング用途）」は、キャッシュ等を目的として、メモリページｍｐを一時使用する状態を示す。また、状態「使用中（最近使用していない）」は、使用中であるものの、前回アクセスした後、所定の期間が経過している使用状態を示す。また、状態「使用中（最近使用した）」は、使用中であって、前回アクセスした後、所定期間が経過していない状態を示す。
【０２０２】
図２６のジョブ使用メモリ情報１２２に示すように、ノード「ｉ」で実行中のジョブが使用しているメモリページｍｐは、メモリページｐ（ｉ，０）、ｐ（ｉ，Ｋ）、ｐ（ｉ，１）、ｐ（ｉ，３）である。したがって、図２７に示すメモリ使用状態情報１２４によると、メモリページｐ（ｉ，０）、ｐ（ｉ，Ｋ）、ｐ（ｉ，１）、ｐ（ｉ，３）は、状態「使用中（最近使用した）」を示す。
【０２０３】
また、図２７に示すメモリ使用状態情報１２４によると、メモリページｐ（ｉ，５Ｋ−１）は、状態「使用中（最近使用していない）」を示す。また、メモリページｐ（ｉ，２Ｋ＋１）は、使用状態「未使用」（非使用状態）を示し、メモリページｐ（ｉ，Ｋ−１）は、状態「使用中（最近使用した）」を示す。
【０２０４】
次に、図２８〜図３５にしたがって、図２４、図２５に示すメモリ再配置モジュール１３１の処理の詳細を説明する。図２８は、第２の実施の形態におけるメモリ再配置モジュール１３１の処理の流れを示し、図２９〜図３５は、図２８に示す工程の一部の処理の詳細を示す。第２の実施の形態のメモリ再配置モジュール１３１は、ジョブの終了時に、図２８に示す処理を行う。または、メモリ再配置モジュール１３１は、定期的に（例えば、１０秒毎に）、図２８に示す処理を行う。
【０２０５】
また、図２８〜図３５の例は、実行中のジョブ１〜ジョブ３のうち、ジョブ１、ジョブ２がＮＵＭＡポリシーを満たしていない場合を例示する。また、図２８〜図３５の例は、第１のノードｎｄ１で実行中のジョブ１が使用しているメモリｍｍの再配置先のノードｎｄを、ノードｎｄ２、ノードｎｄ３から選択する場合を例示する。
【０２０６】
［メモリ再配置モジュールの処理］
図２８は、図２４、図２５に示す、第２の実施の形態における、メモリ再配置モジュール１３１の処理の詳細を説明するフローチャート図である。
【０２０７】
Ｓ８１：メモリ再配置モジュール１３１は、ＮＵＭＡポリシーを満たしていないジョブのリスト「JLIST」を作成する。工程Ｓ８１の処理の詳細は、図２９のフローチャート図で後述する。リスト「JLIST」は、ジョブの識別情報のリスト「jobid1,jobid2,...,jobidx」を有する。本実施の形態におけるリスト「JLIST」は、例えば、ジョブ１、ジョブ２を有する。
【０２０８】
Ｓ８２：メモリ再配置モジュール１３１は、工程Ｓ８１で生成したリスト「JLIST」が空ではないか否かを判定する。
【０２０９】
Ｓ８３：空ではない場合（Ｓ８２のＹｅｓ）、メモリ再配置モジュール１３１は、リスト「JLIST」内の各ジョブを対象として、工程Ｓ８４〜Ｓ８９の処理を繰り返す。
【０２１０】
一方、工程Ｓ８１で生成したリスト「JLIST」が空の場合（Ｓ８２のＮｏ）、全てのジョブがＮＵＭＡポリシーを満たしていることを示す。したがって、メモリ再配置モジュール１３１は、再配置を行うことなく、処理を終了する。
【０２１１】
Ｓ８４：メモリ再配置モジュール１３１は、リスト「JLIST」から１つのジョブを選択して、ジョブが使用しているメモリページｍｐの組を獲得可能なノードｎｄを抽出し、ノードｎｄのリスト「NLIST」を作成する。工程Ｓ８４の処理の詳細は、図３０のフローチャート図で後述する。
【０２１２】
本実施の形態では、メモリ再配置モジュール１３１は、例えば、リスト「JLIST」からジョブ１を選択する。また、本実施の形態におけるリスト「NLIST」は、ノードｎｄ２、ノードｎｄ３を有する。
【０２１３】
Ｓ８５：メモリ再配置モジュール１３１は、工程Ｓ８４で生成したリスト「NLIST」が空ではないか否かを判定する。空の場合（Ｓ８５のＮｏ）、メモリ再配置モジュール１３１は、選択したジョブの再配置を行わない。
【０２１４】
Ｓ８６：空ではない場合（Ｓ８５のＹｅｓ）、メモリ再配置モジュール１３１は、リスト「JLIST」から選択したジョブ「jobid」が使用するメモリページｍｐを、リスト「NLIST」のノードｎｄに再配置した場合のスラッシングの発生度合いを示す、評価値「eval」を算出する。つまり、評価値「eval」（判定値）は、再配置に伴うスラッシングの発生による、ジョブの実行の性能に対する影響度合いを示す。
【０２１５】
したがって、評価値「eval」がより小さい場合に、再配置先のノードｎｄが、非使用状態の、インデックス値の組と同一または相対位置関係を有するインデックス値の組に対応するメモリページｍｐを獲得可能な度合いがより高いことを示す。したがって、メモリ再配置モジュール１３１は、評価値「eval」がより小さいノードｎｄを、再配置先のノード「NIDz」ｎｄとして検出する。工程Ｓ８６の処理の詳細は、図３１のフローチャート図で後述する。
【０２１６】
メモリ再配置モジュール１３１は、例えば、ジョブ１が使用しているメモリページｍｐを、ノードｎｄ２、ノードｎｄ３に再配置した場合における評価値を算出する。この例では、ノードｎｄ３に再配置した場合の評価値「eval」がより小さい場合を例示する。
【０２１７】
Ｓ８７：メモリ再配置モジュール１３１は、選択したジョブ「jobid」の再配置前のノード「NIDj」ｎｄに再配置することによって、評価値「eval'」が向上するジョブ「jobuid'」を検出する。工程Ｓ８７の処理の詳細は、図３２のフローチャート図で後述する。
【０２１８】
即ち、ジョブ１をノードｎｄ３に移行した場合に、ジョブ１の再配置元のノードｎｄ１の非使用状態のメモリページｍｐが増加する。したがって、メモリ再配置モジュール１３１は、ＮＵＭＡポリシーを満たしていないジョブのうち、再配置元のノードｎｄ１に移行することによって、ＮＵＭＡポリシーを満たすジョブを検出する。このとき、メモリ再配置モジュール１３１は、複数のジョブから、スラッシングの発生を抑制可能なジョブを選択する。
【０２１９】
このように、メモリ再配置モジュール１３１は、他のジョブ（ジョブ２）がアクセスするデータが記憶された第３のノードｎｄ３の第３の複数のメモリページｍｐのアドレスに対応するキャッシュメモリの、別のインデックス値の組を取得する。
【０２２０】
そして、メモリ再配置モジュール１３１は、移行後に、第１のノードｎｄ１が、別のインデックス値の組と同一または相対位置関係を有するインデックス値の組に対応する、非使用状態の第３の複数のメモリページｍｐを有するか否かを判定する。非使用状態の第３の複数のメモリページｍｐを有する場合に、メモリ再配置モジュール１３１は、別のデータを第３の複数のメモリページｍｐに移動する。
【０２２１】
本実施の形態では、例えば、ジョブ１の再配置元のノードｎｄ１に再配置することによって、評価値がより小さくなるジョブとして、ジョブ２を検出する。これにより、メモリ再配置モジュール１３１は、スラッシングの発生を抑制しながら、再配置元のノードｎｄ１に、メモリページｍｐを再配置可能なジョブを検出可能になる。このように、本実施の形態における並列計算機ｎｄによると、ＮＵＭＡポリシー等に基づくジョブのマイグレーションの際に、マイグレーションに伴うスラッシングの発生を抑制可能になる。
【０２２２】
Ｓ８８：工程Ｓ８６、及び、工程Ｓ８７の評価値の合計「eval＋eval'」が前回の評価値の合計よりも小さい場合、メモリ再配置モジュール１３１は、再配置の対象のジョブと、再配置先のノードｎｄを確定する。工程Ｓ８８の処理の詳細は、図３３のフローチャート図で後述する。つまり、本実施の形態では、ジョブ１の再配置先のノードｎｄとしてノードｎｄ３が確定するとともに、ジョブ２の再配置先のノードｎｄとしてノードｎｄ１が確定する。
【０２２３】
Ｓ８９：メモリ再配置モジュール１３１は、工程Ｓ８１で生成したリスト「JLIST」の全てのジョブを選択したか否かを判定する。選択していない場合（Ｓ８９のＮｏ）、メモリ再配置モジュール１３１は、リスト「JLIST」内の別のジョブを選択し、工程Ｓ８４〜Ｓ８９の処理を行う。
【０２２４】
これにより、実行中のジョブをマイグレーションする際に、スラッシングの発生を最も抑制可能なジョブの再配置先のノードｎｄ、及び、当該ジョブの再配置元のノードｎｄにマイグレーションした場合にスラッシングの発生を最も抑制可能なジョブを検出可能になる。これにより、ＮＵＭＡポリシー等の目的により、実行中のジョブのマイグレーションに伴う、ジョブの性能低下を抑制することが可能になる。
【０２２５】
Ｓ９０：すべてのジョブを選択した場合（Ｓ８９のＹｅｓ）、メモリ再配置モジュール１３１は、リスト「JLIST」の各ジョブを対象とするループを終了する。
【０２２６】
Ｓ９１：メモリ再配置モジュール１３１は、工程Ｓ８９で確定した、再配置対象のジョブ、及び、再配置先のノードｎｄの情報に基づいて、ジョブの再配置を実施する。工程Ｓ９１の処理の詳細は、図３４のフローチャート図で後述する。
【０２２７】
［図２８の工程Ｓ８１］
図２９は、図２８の工程Ｓ８１の処理の詳細を説明するフローチャート図である。図２８のフローチャート図で前述したとおり、メモリ再配置モジュール１３１は、ＮＵＭＡポリシーを満たしていないジョブのリスト「JLIST」を作成する（図２８のＳ８１）。本実施の形態では、メモリ再配置モジュール１３１は、ジョブ１〜ジョブ３をリスト「JLIST」に追加する。
【０２２８】
Ｓ１０１：メモリ再配置モジュール１３１は、ＮＵＭＡ型の情報処理システムの各ノードで動作するジョブすべてを対象として、工程Ｓ１０２〜Ｓ１０４の処理を行う。
【０２２９】
Ｓ１０２：メモリ再配置モジュール１３１は、１つのジョブを選択し、選択したジョブがＮＵＭＡポリシーを満たしているか否かを判定する。メモリ再配置モジュール１３１は、実行中のジョブに指定されたＮＵＭＡポリシーを取得可能である。
【０２３０】
Ｓ１０３：ＮＵＭＡポリシーを満たしていない場合（Ｓ１０２のＮｏ）、メモリ再配置モジュール１３１は、リスト「JLIST」に、選択したジョブの識別情報を追加する。一方、ＮＵＭＡポリシーを満たしている場合（Ｓ１０２のＹｅｓ）、別のジョブを選択し、工程Ｓ１０２〜Ｓ１０４の処理を行う。
【０２３１】
Ｓ１０４：メモリ再配置モジュール１３１は、ＮＵＭＡ型の情報処理システムの各ノードで動作するジョブすべてを選択し、判定処理を行ったか否かを判定する。
【０２３２】
Ｓ１０５：ジョブすべてを選択し判定処理を行った場合（Ｓ１０４のＹｅｓ）、メモリ再配置モジュール１３１は、ループ終了を終了する。一方、未選択のジョブがある場合（Ｓ１０４のＮｏ）、メモリ再配置モジュール１３１は、別のジョブを選択し、工程Ｓ１０２〜Ｓ１０４の処理を行う。
【０２３３】
［図２８の工程Ｓ８４］
図３０は、図２８の工程Ｓ８４の処理の詳細を説明するフローチャート図である。図２８のフローチャート図で前述したとおり、メモリ再配置モジュール１３１は、リスト「JLIST」から１つのジョブを選択し、ジョブが使用しているメモリページの組を獲得可能なノードを抽出し、ノードのリスト「NLIST」を作成する（図２８のＳ８４）。本実施の形態では、メモリ再配置モジュール１３１は、例えば、ジョブ１を選択し、ノードｎｄ２、ノードｎｄ３をリスト「NLIST」に追加する。
【０２３４】
Ｓ１１１：メモリ再配置モジュール１３１は、全てのノード（図２３のノードｎｄ２〜ｎｄｘ）を対象として、工程Ｓ１１２〜Ｓ１１６の処理を行う。
【０２３５】
Ｓ１１２：メモリ再配置モジュール１３１は、選択したノードの、メモリ使用状態情報１２４（図２７）を参照し、非使用状態のメモリページｍｐのサイズ「tmp1」（空き状態のサイズ）を算出する。
【０２３６】
Ｓ１１３：メモリ再配置モジュール１３１は、選択したジョブのジョブ使用メモリ情報１２２（図２６）を参照し、選択したジョブが、再配置前のノードｎｄで使用しているメモリページｍｐの合計サイズ「tmp2」を算出する。
【０２３７】
Ｓ１１４：メモリ再配置モジュール１３１は、工程Ｓ１１３で算出したジョブが使用中のサイズ「tmp2」が、工程Ｓ１１２で算出した選択したノードｎｄの空き状態のサイズ「tmp1」以下であるか否かを判定する。使用中のサイズ「tmp2」が空き状態のサイズ「tmp1」以下である場合（Ｓ１１４のＹｅｓ）、選択したジョブを、選択したノードｎｄに移行可能であることを示す。
【０２３８】
Ｓ１１５：使用中のサイズ「tmp2」が空き状態のサイズ「tmp1」以下である場合（Ｓ１１４のＹｅｓ）、メモリ再配置モジュール１３１は、リスト「NLIST」に、選択したノードｎｄの識別情報を追加する。
【０２３９】
一方、使用中のサイズ「tmp2」が空き状態のサイズ「tmp1」より大きい場合（Ｓ１１４のＮｏ）、メモリ再配置モジュール１３１は、選択したノードｎｄの識別情報をリスト「NLIST」に追加せずに、別のノードｎｄを選択し、工程Ｓ１１２〜Ｓ１１６の処理を行う。
【０２４０】
Ｓ１１６：メモリ再配置モジュール１３１は、全てのノードｎｄを対象として、工程Ｓ１１２〜Ｓ１１５の処理を行ったか否かを判定する。
【０２４１】
Ｓ１１７：全てのノードｎｄを対象として処理を完了した場合（Ｓ１１６のＹｅｓ）、メモリ再配置モジュール１３１はループを終了し、工程Ｓ８４の処理を終了する。一方、未選択のノードがある場合、メモリ再配置モジュール１３１は、別のノードｎｄを選択し、工程Ｓ１１２〜Ｓ１１５の処理を行う。
【０２４２】
［図２８の工程Ｓ８６］
図３１は、図２８の工程Ｓ８６の処理の詳細を説明するフローチャート図である。図２８のフローチャート図で前述したとおり、メモリ再配置モジュール１３１は、リスト「JLIST」から選択したジョブ「jobid」を、リスト「NLIST」の各ノードｎｄに再配置した際の評価値「eval」を算出する。また、メモリ再配置モジュール１３１は、評価値が小さいノードｎｄを、再配置先のノード「NIDz」ｎｄとして検出する（図２８のＳ８４）。
【０２４３】
本実施の形態のメモリ再配置モジュール１３１は、ジョブ１をノードｎ２、ノードｎ３に再配置した場合の評価値をそれぞれ算出する。そして、メモリ再配置モジュール１３１は、評価値がより小さい、ノードｎ３を再配置先のノードｎｄとして検出する。
【０２４４】
Ｓ１２１：メモリ再配置モジュール１３１は、リスト「NLIST」内の各ノードｎｄを対象として、工程Ｓ１２２〜Ｓ１２５の処理を行う。
【０２４５】
Ｓ１２２：メモリ再配置モジュール１３１は、選択したジョブ「jobid」と、リスト「NLIST」から選択したノードｎｄを指定して、評価値算出ルーチン１３４を呼び出す。メモリ再配置モジュール１３１は、評価値算出ルーチン１３４が算出した評価値を、変数「tmp3」にセットする。評価値算出ルーチン１３４の処理の詳細は、図３５にしたがって後述する。
【０２４６】
Ｓ１２３：メモリ再配置モジュール１３１は、前回算出した評価値「eval」が、工程Ｓ１２２で算出した評価値「tmp3」より大きいか否かを判定する。
【０２４７】
Ｓ１２４：評価値「eval」が評価値「tmp3」より大きい場合（Ｓ１２３のＹｅｓ）、選択したジョブ「jobid」のメモリページｍｐを選択したノード「nid」ｎｄに再配置する場合に、スラッシングの発生をより抑制可能なメモリページｍｐを獲得できることを示す。したがって、メモリ再配置モジュール１３１は、変数「eval」に、新たに算出した評価値「tmp3」をセットする。また、メモリ再配置モジュール１３１は、再配置先のノード「NIDz」ｎｄに、選択したノード「nid」をセットする。
【０２４８】
一方、評価値「eval」が評価値「tmp3」以下の場合（Ｓ１２３のＮｏ）、メモリ再配置モジュール１３１は、リスト「NLIST」から別のノードｎｄを選択し、工程Ｓ１２２、Ｓ１２３の処理を行う。
【０２４９】
Ｓ１２５：メモリ再配置モジュール１３１は、リスト「NLIST」内の各ノードｎｄを対象として、工程Ｓ１２２〜Ｓ１２５の処理を行ったか否かを判定する。
【０２５０】
Ｓ１２６：全てのノードｎｄを対象として処理を完了した場合、メモリ再配置モジュール１３１は、ループ終了し、工程Ｓ８４の処理を終了する。一方、未選択のノードｎｄがある場合、メモリ再配置モジュール１３１は、別のノードを選択し、工程Ｓ１２２〜Ｓ１２５の処理を行う。
【０２５１】
［図２８の工程Ｓ８７］
図３２は、図２８の工程Ｓ８７の処理の詳細を説明するフローチャート図である。図２８のフローチャート図で前述したとおり、メモリ再配置モジュール１３１は、選択したジョブ「jobid」の再配置前のノード「NIDj」ｎｄに移行することによって、評価値「eval'」が向上するジョブ「jobuid'」を検出する（図２８のＳ８７）。
【０２５２】
前述したとおり、メモリ再配置モジュール１３１は、ジョブ２、ジョブ３から、ジョブ１の再配置元のノードｎｄ１に移行した場合に、スラッシングの発生度合いがより少ないジョブ２を選択する。このとき、例えば、ジョブ２、ジョブ３は、ジョブ１に移行することによって、ＮＵＭＡポリシーを満たす。
【０２５３】
Ｓ１３１：メモリ再配置モジュール１３１は、選択したジョブ「jobid」のメモリページｍｐが再配置先のノード「NIDz」ｎｄに再配置された場合における、再配置元のノードｎｄのメモリ使用状態情報１２４を算出する。
【０２５４】
Ｓ１３２：メモリ再配置モジュール１３１は、リスト「JLIST」のジョブ「jobid」を除く各ジョブを対象として、工程Ｓ１３３〜Ｓ１３６の処理を行う。
【０２５５】
Ｓ１３３：メモリ再配置モジュール１３１は、メモリ使用状態情報１２４に基づいて、リスト「JLIST」から選択したジョブ「jobid_tmp」と再配置元のノード「NIDj」を指定し、評価値算出ルーチン１３４を呼び出す。メモリ再配置モジュール１３１は、評価値算出ルーチン１３４が算出した評価値を、変数「tmp4」にセットする。評価値算出ルーチン１３４の処理の詳細は、図３５にしたがって後述する。
【０２５６】
Ｓ１３４：メモリ再配置モジュール１３１は、前回算出した評価値「eval'」が、工程Ｓ１３３で算出した評価値「tmp4」より大きいか否かを判定する。前回算出した評価値「eval'」の初期値は、例えば、値「２００」である。
【０２５７】
Ｓ１３５：評価値「tmp4」が評価値「eval'」より大きい場合（Ｓ１３４のＹｅｓ）、選択したジョブ「jobid_tmp」のメモリページｍｐをノード「NIDj」に再配置する場合に、スラッシングの発生をより抑制可能なメモリページｍｐを獲得できることを示す。したがって、メモリ再配置モジュール１３１は、変数「eval」に、新たに算出した評価値「tmp4」をセットする。また、メモリ再配置モジュール１３１は、新たな再配置対象のジョブ「jobid'」に、選択したジョブ「jobid_tmp」をセットする。
【０２５８】
一方、評価値「eval'」が評価値「tmp4」以下の場合（Ｓ１３４のＮｏ）、メモリ再配置モジュール１３１は、リスト「JLIST」から別のジョブを選択し、工程Ｓ１３３、Ｓ１３４の処理を行う。本実施の形態において、ジョブ２を再配置元のノードｎｄ１に移行した場合の評価値「eval'」は、ジョブ３を再配置元のノードｎｄ１に移行した場合の評価値「eval'」より小さい。
【０２５９】
Ｓ１３６：メモリ再配置モジュール１３１は、リスト「JLIST」のジョブ「jobid」を除く各ジョブを対象として、工程Ｓ１３３〜Ｓ１３６の処理を行ったか否かを判定する。
【０２６０】
Ｓ１３７：全てのジョブを対象として処理を完了した場合、メモリ再配置モジュール１３１は、ループ終了し、工程Ｓ８７の処理を終了する。一方、未選択のジョブがある場合、メモリ再配置モジュール１３１は、別のジョブを選択し、工程Ｓ１３３〜Ｓ１３５の処理を行う。
【０２６１】
［図２８の工程Ｓ８８］
図３３は、図２８の工程Ｓ８８の処理の詳細を説明するフローチャート図である。図２８のフローチャート図で前述したとおり、メモリ再配置モジュール１３１は、再配置の対象のジョブと、再配置先のノードを確定する（図２８のＳ８８）。
【０２６２】
Ｓ１４１：メモリ再配置モジュール１３１は、図３１のフローチャート図にしたがって算出した評価値「eval」と、図３２のフローチャート図にしたがって算出した評価値「eval'」とを加算して、総合評価値「EVALjobid」を算出する。
【０２６３】
Ｓ１４２：メモリ再配置モジュール１３１は、前回の総合評価値「EVAL」が、工程Ｓ１４１で算出した総合評価値「EVALjobid」より大きいか否かを判定する。前回の総合評価値「EVAL」が、今回の総合評価値「EVALjobid」より大きい場合、ジョブのマイグレーションの際にスラッシングの発生をより抑制可能なことを示す。
【０２６４】
Ｓ１４３：前回の総合評価値「EVAL」が、総合評価値「EVALjobid」より大きい場合（Ｓ１４２のＹｅｓ）、メモリ再配置モジュール１３１は、次の処理を行う。メモリ再配置モジュール１３１は、第１の再配置対象のジョブ「jobid1」にジョブ「jobid」（この例ではジョブ１）を設置し、その再配置先のノード「NID1」にノード「NIDz」（この例ではノードｎｄ３）をセットする。第２の再配置対象のジョブ「jobid2」にジョブ「jobid'」（この例ではジョブ２）を、その再配置先のノード「NID2」にノード「NIDj」（この例ではノードｎｄ１）をセットする。
【０２６５】
一方、前回の総合評価値「EVAL」が、総合評価値「EVALjobid」以下の場合（Ｓ１４２のＮｏ）、メモリ再配置モジュール１３１は工程Ｓ１４３の処理を行わない。
【０２６６】
［図２８の工程Ｓ９１］
図３４は、図２８の工程Ｓ９１の処理の詳細を説明するフローチャート図である。図２８のフローチャート図で前述したとおり、メモリ再配置モジュール１３１は、再配置対象のジョブ、及び、再配置先のノードの情報に基づいて、メモリページｍｐの再配置の実施する（図２８のＳ９１）。
【０２６７】
Ｓ１５１：メモリ再配置モジュール１３１は、第１の実施の形態の図１６のフローチャート図の処理を行い、第１の再配置対象のジョブ「jobid1」が使用するメモリページを、再配置先のノード「NID1」に再配置する。
【０２６８】
即ち、メモリ再配置モジュール１３１は、ジョブ１が使用しているメモリページｍｐに対応するインデックス値の組と同一または相対位置関係を有するインデックス値の組に対応する、ノードｎｄ３の、非使用状態のメモリページｍｐを獲得する。また、メモリ再配置モジュール１３１は、獲得したノードｎｄ３のメモリページｍｐに、ジョブ１が使用しているメモリページｍｐに記憶されたデータを移動する。
【０２６９】
Ｓ１５２：メモリ再配置モジュール１３１は、第１の実施の形態の図１６のフローチャート図の処理を行い、第２の再配置対象のジョブ「jobid2」が使用するメモリページを、再配置先のノード「NID2」に再配置する。
【０２７０】
即ち、メモリ再配置モジュール１３１は、ジョブ２が使用しているメモリページｍｐに対応するインデックス値の組と同一または相対位置関係を有するインデックス値の組に対応する、ノードｎｄ１の、非使用状態のメモリページｍｐを獲得する。また、メモリ再配置モジュール１３１は、獲得したノードｎｄ１のメモリページｍｐに、ジョブ２が使用しているメモリページｍｐに記憶されたデータを移動する。
【０２７１】
［評価値算出ルーチン］
図３５は、評価値算出ルーチン１３４の処理の詳細を説明するフローチャート図である。
【０２７２】
Ｓ１６１：評価値算出ルーチン１３４は、条件１（ｋ＝０）（ｋ≠０）を満たすインデックス値に対応する、再配置対象のノードｎｄのメモリページｍｐが全て非使用状態であるか否かを判定する。条件１を満たすインデックス値は、第１の実施の形態で説明したとおりである。
【０２７３】
Ｓ１６２：全て非使用状態である場合（Ｓ１６１のＹｅｓ）、評価値算出ルーチン１３４は、値「１」を評価値として出力する。
【０２７４】
Ｓ１６３：一方、全て非使用状態ではない場合（Ｓ１６１のＮｏ）、評価値算出ルーチン１３４は、条件２（ｋ＝０）（ｋ≠０）を満たすメモリページｍｐが全て非使用状態であるか否かを判定する。条件２を満たすインデックス値は、第１の実施の形態で説明したとおりである。
【０２７５】
Ｓ１６４：全て非使用状態である場合（Ｓ１６３のＹｅｓ）、評価値算出ルーチン１３４は、値「２」を評価値として出力する。
【０２７６】
Ｓ１６５：工程Ｓ１６３の判定がＮｏの場合、評価値算出ルーチン１３４は、条件１を満たすメモリページｍｐが、非使用状態、または、一時ファイルとして一時的な使用状態のいずれであるかを判定する。一時的な使用状態は、例えば、キャッシュを目的としてメモリページｍｐを使用している状態を示す。
【０２７７】
Ｓ１６６：工程Ｓ１６５の判定がＹｅｓの場合、評価値算出ルーチン１３４は、値「３」を評価値として出力する。
【０２７８】
Ｓ１６７：工程Ｓ１６５の判定がＮｏの場合、評価値算出ルーチン１３４は、条件２を満たすメモリページｍｐが、非使用状態、または、一時的な使用状態のいずれであるかを判定する。
【０２７９】
Ｓ１６８：工程Ｓ１６７の判定がＹｅｓの場合、評価値算出ルーチン１３４は、値「４」を評価値として出力する。
【０２８０】
Ｓ１６９：工程Ｓ１６７の判定がＮｏの場合、評価値算出ルーチン１３４は、条件１を満たすメモリページｍｐが、非使用状態、または、一時的な使用状態、または、使用状態であるが所定の期間アクセスしていない使用状態のいずれであるかを判定する。
【０２８１】
Ｓ１７０：工程Ｓ１６９の判定がＹｅｓの場合、評価値算出ルーチン１３４は、値「１０」を評価値として出力する。
【０２８２】
Ｓ１７１：工程Ｓ１６９の判定がＮｏの場合、評価値算出ルーチン１３４は、条件２を満たすメモリページｍｐが、非使用状態、または、一時的な使用状態、または、使用状態であるが所定の期間アクセスしていない使用状態のいずれであるかを判定する。
【０２８３】
Ｓ１７２：工程Ｓ１７１の判定がＹｅｓの場合、評価値算出ルーチン１３４は、値「１５」を評価値として出力する。
【０２８４】
Ｓ１７３：工程Ｓ１７１の判定がＮｏの場合、評価値算出ルーチン１３４は、条件２を満たすメモリページが、工程Ｓ１７１に示した状態に加え、オペレーションシステムが使用中の状態のいずれであるかを判定する。
【０２８５】
Ｓ１７４：工程Ｓ１７３の判定がＹｅｓの場合、評価値算出ルーチン１３４は、値「３０」を評価値として出力する。
【０２８６】
Ｓ１７５：工程Ｓ１７３の判定がＮｏの場合、評価値算出ルーチン１３４は、値「１００」を評価値として出力する。
【０２８７】
このように、評価値算出ルーチン１３４は、候補ノードｎｄの複数のメモリページｍｐの使用状況が非使用状態を示す場合に（Ｓ１６１のＹｅｓ、Ｓ１６３のＹｅｓ）、第１の判定値（値「１」「２」）を算出する。また、評価値算出ルーチン１３４は、さらに、使用状況が、所定期間アクセスしていない使用状態を示す第１の状態のメモリ領域を含む場合に（Ｓ１６９のＹｅｓ、Ｓ１７１のＹｅｓ）、第１の判定値より大きい第２の判定値（値「１０」「１５」）を算出する。
【０２８８】
評価値算出ルーチン１３４は、さらに、一時使用を示す第２の状態のメモリページｍｐを含む場合に（Ｓ１６５のＹｅｓ、Ｓ１６７のＹｅｓ）、第２の判定値より小さく第１の判定値より大きい第３の判定値（値「３」「４」）を算出する。評価値算出ルーチン１３４は、さらに、オペレーションシステムによる使用を示す第３の状態のメモリページｍｐを含む場合に（Ｓ１７３のＹｅｓ）、第２の判定値より大きい第４の判定値（値「３０」）を算出する。
【０２８９】
これにより、評価値算出ルーチン１３４は、同一または相対位置関係を有するインデックス値の組に対応する、再配置対象のノードｎｄのメモリページｍｐの使用状態に基づいて、スラッシングの発生度合いを示す評価値（判定値）を算出する。これにより、メモリ再配置モジュール１３１は、評価値に基づいて、複数の候補のノードｎｄから、マイグレーション後に、スラッシングの発生をより抑制可能なノードｎｄを選択可能になる。
【０２９０】
［他の実施の形態］
第１、第２の実施の形態では、並列計算機ｎｄが、実行中のジョブが使用しているメモリページｍｐを、他のノードｎｄに移行する場合を例示した。ただし、本実施の形態におけるメモリの再配置処理は、あるノードｎｄで実行しているジョブが使用中のメモリページｍｐを、同一のノードｎｄの別のメモリページｍｐに移動する場合についても有効である。
【０２９１】
以上の実施の形態をまとめると、次の付記のとおりである。
【０２９２】
（付記１）
複数のメモリ領域を有するメモリ及びキャッシュメモリを、それぞれ有する第１、第２のノードと、
第１のノードが実行中のジョブを第２のノードに移行して前記ジョブの実行を継続する際に、前記ジョブがアクセスするデータが記憶された前記第１のノードの第１の複数のメモリ領域のアドレスに対応する、キャッシュメモリのインデックス値の組を取得し、
前記第２のノードが、前記インデックス値の組と同一または相対位置関係を有するインデックス値の組に対応する、非使用状態の第２の複数のメモリ領域を有するか否かを判定し、
前記非使用状態の第２の複数のメモリ領域を有する場合に、前記データを前記第２の複数のメモリ領域に移動する処理部と、を有する、
並列計算機。
【０２９３】
（付記２）
付記１において、
前記相対位置関係を有するインデックス値の組は、取得した前記インデックス値の組を一律にシフトしたインデックス値の組を示す、
並列計算機。
【０２９４】
（付記３）
付記１または２において、
前記処理部は、前記非使用状態の第２の複数のメモリ領域を有しない場合に、前記第２のノードとは異なるノードを対象として前記取得及び前記判定を行う、
並列計算機。
【０２９５】
（付記４）
付記１乃至３のいずれかにおいて、
前記処理部は、さらに、
前記第１のノードが実行中のジョブを移行する対象の候補ノードが複数ある場合に、前記複数の候補ノードのそれぞれについて、前記インデックス値の組と同一または相対位置関係を有するインデックス値の組に対応する、前記候補ノードの複数のメモリ領域の使用状況に基づいて、移行後のスラッシングの発生度合いを示す判定値を算出し、
前記判定値がより小さい候補ノードを、前記第２のノードとして、前記データを前記第２の複数のメモリ領域に移動する、
並列計算機。
【０２９６】
（付記５）
付記４において、
前記処理部は、前記候補ノードの複数のメモリ領域の使用状況が非使用状態を示す場合に第１の判定値を算出し、前記候補ノードの複数のメモリ領域の使用状況が、所定期間アクセスしていない使用状態を示す第１の状態のメモリ領域を含む場合に、前記第１の判定値より大きい第２の判定値を算出する、
並列計算機。
【０２９７】
（付記６）
付記５において、
前記処理部は、さらに、前記候補ノードの複数のメモリ領域の使用状況が、一時使用を示す第２の状態のメモリ領域を含む場合に、前記第２の判定値より小さく前記第１の判定値より大きい第３の判定値を算出する、
並列計算機。
【０２９８】
（付記７）
付記６において、
前記処理部は、さらに、前記候補ノードの複数のメモリ領域の使用状況が、オペレーションシステムによる使用を示す第３の状態のメモリ領域を含む場合に、前記第２の判定値より大きい第４の判定値を算出する、
並列計算機。
【０２９９】
（付記８）
付記４乃至７のいずれかにおいて、
前記処理部は、さらに、
他のジョブがアクセスするデータが記憶された第３のノードの第３の複数のメモリ領域のアドレスに対応するキャッシュメモリの、別のインデックス値の組を取得し、
前記データの移動後に、前記第１のノードが、前記別のインデックス値の組と同一または相対位置関係を有するインデックス値の組に対応する、非使用状態の第３の複数のメモリ領域を有するか否かを判定し、
前記非使用状態の第３の複数のメモリ領域を有する場合に、前記別のデータを前記第３の複数のメモリ領域に移動する、
並列計算機。
【０３００】
（付記９）
第１のノードが実行中のジョブを第２のノードに移行して前記ジョブの実行を継続する際に、前記ジョブがアクセスするデータが記憶された前記第１のノードの第１の複数のメモリ領域のアドレスに対応する、キャッシュメモリのインデックス値の組を取得し、
前記第２のノードが、前記インデックス値の組と同一または相対位置関係を有するインデックス値の組に対応する、非使用状態の第２の複数のメモリ領域を有するか否かを判定し、
前記非使用状態の第２の複数のメモリ領域を有する場合に、前記データを前記第２の複数のメモリ領域に移動する、
処理をコンピュータに実行させるマイグレーションプログラム。
【０３０１】
（付記１０）
付記９において、
前記相対位置関係を有するインデックス値の組は、取得した前記インデックス値の組を一律にシフトしたインデックス値の組を示す、
マイグレーションプログラム。
【０３０２】
（付記１１）
付記９または１０において、
前記取得及び判定は、前記非使用状態の第２の複数のメモリ領域を有しない場合に、前記第２のノードとは異なるノードを対象として前記取得及び判定を行う、
マイグレーションプログラム。
【０３０３】
（付記１２）
付記９乃至１１のいずれかにおいて、さらに、
前記第１のノードが実行中のジョブを移行する対象の候補ノードが複数ある場合に、前記複数の候補ノードのそれぞれについて、前記インデックス値の組と同一または相対位置関係を有するインデックス値の組に対応する、前記候補ノードの複数のメモリ領域の使用状況に基づいて、移行後のスラッシングの発生度合いを示す判定値を算出し、
前記移動は、前記判定値がより小さい候補ノードを、前記第２のノードとして、前記データを前記第２の複数のメモリ領域に移動する、
マイグレーションプログラム。
【０３０４】
（付記１３）
付記１２において、
前記算出は、前記候補ノードの複数のメモリ領域の使用状況が非使用状態を示す場合に第１の判定値を算出し、前記候補ノードの複数のメモリ領域の使用状況が、所定期間アクセスしていない使用状態を示す第１の状態のメモリ領域を含む場合に、前記第１の判定値より大きい第２の判定値を算出する、
マイグレーションプログラム。
【０３０５】
（付記１４）
付記１３において、
前記算出は、さらに、前記候補ノードの複数のメモリ領域の使用状況が、一時使用を示す第２の状態のメモリ領域を含む場合に、前記第２の判定値より小さく前記第１の判定値より大きい第３の判定値を算出する、
マイグレーションプログラム。
【０３０６】
（付記１５）
処理部が、第１のノードが実行中のジョブを第２のノードに移行して前記ジョブの実行を継続する際に、前記ジョブがアクセスするデータが記憶された前記第１のノードの第１の複数のメモリ領域のアドレスに対応する、キャッシュメモリのインデックス値の組を取得し、
処理部が、前記第２のノードが、前記インデックス値の組と同一または相対位置関係を有するインデックス値の組に対応する、非使用状態の第２の複数のメモリ領域を有するか否かを判定し、
処理部が、前記非使用状態の第２の複数のメモリ領域を有する場合に、前記データを前記第２の複数のメモリ領域に移動する、
マイグレーション方法。
【０３０７】
（付記１６）
付記１５において、
前記相対位置関係を有するインデックス値の組は、取得した前記インデックス値の組を一律にシフトしたインデックス値の組を示す、
マイグレーション方法。
【０３０８】
（付記１７）
付記１５または１６において、
前記取得及び判定は、前記非使用状態の第２の複数のメモリ領域を有しない場合に、前記第２のノードとは異なるノードを対象として前記取得及び判定を行う、
マイグレーション方法。
【０３０９】
（付記１８）
付記１５乃至１７のいずれかにおいて、さらに、
処理部が、前記第１のノードが実行中のジョブを移行する対象の候補ノードが複数ある場合に、前記複数の候補ノードのそれぞれについて、前記インデックス値の組と同一または相対位置関係を有するインデックス値の組に対応する、前記候補ノードの複数のメモリ領域の使用状況に基づいて、移行後のスラッシングの発生度合いを示す判定値を算出し、
前記移動は、前記判定値がより小さい候補ノードを、前記第２のノードとして、前記データを前記第２の複数のメモリ領域に移動する、
マイグレーション方法。
【０３１０】
（付記１９）
付記１８において、
前記算出は、前記候補ノードの複数のメモリ領域の使用状況が非使用状態を示す場合に第１の判定値を算出し、前記候補ノードの複数のメモリ領域の使用状況が、所定期間アクセスしていない使用状態を示す第１の状態のメモリ領域を含む場合に、前記第１の判定値より大きい第２の判定値を算出する、
マイグレーション方法。
【０３１１】
（付記２０）
付記１９において、
前記算出は、さらに、前記候補ノードの複数のメモリ領域の使用状況が、一時使用を示す第２の状態のメモリ領域を含む場合に、前記第２の判定値より小さく前記第１の判定値より大きい第３の判定値を算出する、
マイグレーション方法。
【符号の説明】
【０３１２】
ｎｄ：ノード、ｃｐ：ＣＰＵコア、ｍｍ：メモリ、１０２：メモリユニット、１０３：キャッシュメモリ、１０４：通信インタフェース部、ｍｐ：メモリページ、ｐｐ：プログラム領域、１２０：オペレーションシステム、１２１：再配置プログラム、１２３：ジョブプログラム、１３１：メモリ再配置モジュール
【図１】
0006459784.tif 000002
【図２】
0006459784.tif 000003
【図３】
0006459784.tif 000004
【図４】
0006459784.tif 000005
【図５】
0006459784.tif 000006
【図６】
0006459784.tif 000007
【図７】
0006459784.tif 000008
【図８】
0006459784.tif 000009
【図９】
0006459784.tif 000010
【図１０】
0006459784.tif 000011
【図１１】
0006459784.tif 000012
【図１２】
0006459784.tif 000013
【図１３】
0006459784.tif 000014
【図１４】
0006459784.tif 000015
【図１５】
0006459784.tif 000016
【図１６】
0006459784.tif 000017
【図１７】
0006459784.tif 000018
【図１８】
0006459784.tif 000019
【図１９】
0006459784.tif 000020
【図２０】
0006459784.tif 000021
【図２１】
0006459784.tif 000022
【図２２】
0006459784.tif 000023
【図２３】
0006459784.tif 000024
【図２４】
0006459784.tif 000025
【図２５】
0006459784.tif 000026
【図２６】
0006459784.tif 000027
【図２７】
0006459784.tif 000028
【図２８】
0006459784.tif 000029
【図２９】
0006459784.tif 000030
【図３０】
0006459784.tif 000031
【図３１】
0006459784.tif 000032
【図３２】
0006459784.tif 000033
【図３３】
0006459784.tif 000034
【図３４】
0006459784.tif 000035
【図３５】
0006459784.tif 000036