(57)【要約】【課題】メモリを効率的に利用可能にすること。【解決手段】メモリ１２は、計算を実行するノード間の通信を行う通信ライブラリにより使用される通信バッファ２０を含む。処理部１１は、通信バッファ２０のうち一時的に使用されていない部分バッファの情報を取得する。処理部１１は、メモリ１２の全体の使用量が増加中の場合に部分バッファをページアウトし、メモリ１２の全体の使用量が減少中の場合に部分バッファをページインする。【選択図】図１
2020013306.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
計算を実行するノード間の通信を行う通信ライブラリにより使用される通信バッファのうち一時的に使用されていない部分バッファの情報を取得し、
前記通信バッファが属するメモリの全体の使用量が増加中の場合に前記部分バッファをページアウトし、
前記メモリの全体の使用量が減少中の場合に前記部分バッファをページインする、
処理を実行させる通信バッファ管理プログラム。
【請求項２】
前記部分バッファのページアウトでは、前記メモリの全体の使用量が増加に転じる前における前記通信バッファのうちの前記通信ライブラリにより使用されていない領域のサイズの履歴に基づいて、ページアウトする前記部分バッファのサイズを決定する、
請求項１記載の通信バッファ管理プログラム。
【請求項３】
前記部分バッファの情報の取得では、前記通信ライブラリを利用する複数のプロセスそれぞれから前記部分バッファの情報を取得し、
前記部分バッファのページアウトでは、各プロセスによる前記通信バッファの使用量の比に応じて、ページアウトする前記部分バッファのサイズをプロセス毎に決定する、
請求項１記載の通信バッファ管理プログラム。
【請求項４】
前記コンピュータに更に、
前記複数のプロセスのうちの第１のプロセスに対するページアウトにより生じた前記メモリの空き領域を、前記複数のプロセスのうちの第２のプロセスに割り当てる、
処理を実行させる請求項３記載の通信バッファ管理プログラム。
【請求項５】
計算を実行するノード間の通信を行う通信ライブラリにより使用される通信バッファを含むメモリと、
前記通信バッファのうち一時的に使用されていない部分バッファの情報を取得し、前記メモリの全体の使用量が増加中の場合に前記部分バッファをページアウトし、前記メモリの全体の使用量が減少中の場合に前記部分バッファをページインする処理部と、
を有する情報処理装置。
【請求項６】
コンピュータが、
計算を実行するノード間の通信を行う通信ライブラリにより使用される通信バッファのうち一時的に使用されていない部分バッファの情報を取得し、
前記通信バッファが属するメモリの全体の使用量が増加中の場合に前記部分バッファをページアウトし、
前記メモリの全体の使用量が減少中の場合に前記部分バッファをページインする、
通信バッファ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は通信バッファ管理プログラム、情報処理装置および通信バッファ管理方法に関する。
【背景技術】
【０００２】
現在、大規模な計算を行う並列処理装置が利用されている。例えば、並列処理装置では、演算を実行するノードを相互に複数接続して、複数のノードにより演算を並列に行う。ここで、各ノードは、主記憶装置（メモリと称する）上に演算に用いる情報を格納する。そこで、メモリの使用を管理する方法が考えられている。
【０００３】
例えば、資源要求元に対応する専用メモリ領域から資源を確保しようとしたとき、当該領域に空きエリアが存在しなくても、他の専用メモリ領域から資源を自動的に確保することで、共有メモリの各専用メモリ領域の使用効率を向上させるシステムの提案がある。
【０００４】
また、複数個のプロセスと個々のプロセスに接続されるカーネルとを備えるソフトウェアシステムにおいて、システム管理プロセスが、カーネルより一括して格納した共有メモリなどの資源をそのキーと共に資源管理テーブルに記録する提案もある。この提案では、資源管理テーブルにより、資源を利用するためのキーを取得可能にし、個々のプロセスが資源を獲得、解放するための手間を簡略化する。
【０００５】
また、複数のユーザプログラムによるメモリ領域の獲得要求が時間的に重なることのないように制御することで、無駄なスワップアウトやスワップインを行わなくても済むようにするメモリの時間管理方式の提案もある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開昭６３−２３１５３４号公報
【特許文献２】特開平４−２４６７３１号公報
【特許文献３】特開平５−８１０４９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
並列処理装置の各ノードは、ノード間通信を行うための通信バッファをメモリ上に確保する。しかし、通信バッファに格納された情報を用いた計算の実行中は、通信バッファの全域が使用されるわけではない。このため、当該計算の実行中において、通信バッファのためにメモリ領域が余計に確保されていることがある。
【０００８】
１つの側面では、本発明は、メモリを効率的に利用可能にする通信バッファ管理プログラム、情報処理装置および通信バッファ管理方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、通信バッファ管理プログラムが提供される。通信バッファ管理プログラムは、コンピュータに、計算を実行するノード間の通信を行う通信ライブラリにより使用される通信バッファのうち一時的に使用されていない部分バッファの情報を取得し、通信バッファが属するメモリの全体の使用量が増加中の場合に部分バッファをページアウトし、メモリの全体の使用量が減少中の場合に部分バッファをページインする、処理を実行させる。
【００１０】
また、１つの態様では、情報処理装置が提供される。
また、１つの態様では、通信バッファ管理方法が提供される。
【発明の効果】
【００１１】
１つの側面では、メモリを効率的に利用できる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態の情報処理装置を示す図である。
【図２】第２の実施の形態の並列処理装置の例を示す図である。
【図３】計算ノードのハードウェア例を示すブロック図である。
【図４】管理ノードのハードウェア例を示すブロック図である。
【図５】計算ノードの機能例を示すブロック図である。
【図６】ページイン／ページアウトを行う期間の例を示す図である。
【図７】ページテーブルの例を示す図である。
【図８】計算ノードの処理例を示すフローチャートである。
【図９】ジョブと各プロセスとの通信用メモリの使用量の関係の例を示す図である。
【図１０】メモリ状況管理表の例を示す図である。
【図１１】通信用メモリの使用量の変化と各変数との関係の例を示す図である。
【図１２】メモリ制御の例を示すシーケンス図である。
【図１３】メモリ獲得時処理の例を示すフローチャートである。
【図１４】通信完了時処理の例を示すフローチャートである。
【図１５】メモリ状況管理の例を示すフローチャートである。
【図１６】メモリ利用状況収集の例を示すフローチャートである。
【図１７】ページアウト制御の例を示すフローチャートである。
【図１８】ジョブの通信用メモリの使用量の変化の例を示す図である。
【図１９】メモリ領域確保の例を示すシーケンス図である。
【図２０】ジョブの通信用メモリの使用量の変化の第１の比較例を示す図である。
【図２１】ジョブの通信用メモリの使用量の変化の第２の比較例を示す図である。
【図２２】メモリ領域確保の比較例を示すシーケンス図である。
【発明を実施するための形態】
【００１３】
以下、本実施の形態について図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００１４】
図１は、第１の実施の形態の情報処理装置を示す図である。
情報処理装置１は、複数のノードを有する。複数のノードは、ノード１０，１０ａ，１０ｂを含む。各ノードは、所定のネットワークにより相互に接続される。ノード１０は、処理部１１、メモリ１２および記憶装置１３を有する。
【００１５】
処理部１１は、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。処理部１１はプログラムを実行するプロセッサでもよい。ここでいう「プロセッサ」には、複数のプロセッサの集合（マルチプロセッサ）が含まれ得る。メモリ１２は、ＲＡＭ（Random Access Memory）などの揮発性記憶装置であり、ノード１０の主記憶装置である。記憶装置１３は、フラッシュメモリなどの不揮発性記憶装置であり、ノード１０の補助記憶装置である。
【００１６】
ノード１０ａ，１０ｂもノード１０と同様に、処理部、メモリおよび記憶装置を有する。以下では、主にノード１０について説明するが、ノード１０ａ，１０ｂもノード１０と同様の処理を行う。
【００１７】
ノード１０は、計算に利用する情報を格納するためのメモリ領域をメモリ１２に確保する。例えば、ある計算に関するジョブが情報処理装置１に入力されると、ノード１０，１０ａ，１０ｂそれぞれに対して、当該ジョブに属するプロセスと呼ばれる処理単位が割り当てられる。各ノードは、計算に伴い、自身の計算結果を他のノードに提供するための通信を行う。
【００１８】
各ノードは、ノード間の通信を行うためのプログラム（通信ライブラリと称する）を実行する。例えば、ノード上のプロセスが、通信ライブラリを呼び出し、当該通信ライブラリの機能により、他のノード上のプロセスと通信する。
【００１９】
ノード１０は、通信バッファ２０をメモリ１２に確保する。通信バッファ２０は、ノード１０で実行される通信ライブラリにより利用されるメモリ領域である。すなわち、メモリ１２は、計算用の情報を格納する領域と、通信用の情報を格納する領域（通信バッファ２０）とを含む。
【００２０】
処理部１１は、通信バッファ２０のうち一時的に使用されていない部分バッファ（短期不要バッファ２１と称する）の情報を取得する。例えば、処理部１１は、ノード１０で実行されるプロセスによる通信バッファ２０の使用状況に基づいて、短期不要バッファ２１の情報を取得する。処理部１１は、取得した情報に基づいて、通信バッファ２０の短期不要バッファ２１を特定する。
【００２１】
処理部１１は、メモリ１２の全体の使用量が増加中の場合に、短期不要バッファ２１をページアウトする。ページアウトは、メモリ１２に格納された情報をページと呼ばれる単位で、メモリ１２以外の記憶装置１３に移すことで、メモリ１２の空きを増やすことを示す。ここで、グラフＧ１は、横軸を時間、縦軸をメモリ１２の全体の使用量（メモリ使用量）とし、実線の矢印によりメモリ使用量が時間と共に増加する様子を示している。退避領域１３ａは、短期不要バッファ２１がページアウトされたデータが格納される記憶装置１３上の領域である。
【００２２】
処理部１１は、短期不要バッファ２１の全部をページアウトしてもよいし、短期不要バッファ２１の一部をページアウトしてもよい。例えば、処理部１１は、メモリ１２の使用量増加時に許容される通信バッファ２０のサイズの上限値を取得する。そして、処理部１１は、現状の通信バッファ２０のサイズのうち当該上限値を超過した差分のサイズを、ページアウト可能サイズとしてもよい。上限値は、予め定められてもよいし、メモリ１２の利用状況に応じて計算されてもよい。そして、処理部１１は、当該ページアウト可能サイズが、短期不要バッファ２１のサイズ以上であれば、短期不要バッファ２１の全部をページアウトしてもよい。一方、処理部１１は、当該ページアウト可能サイズが、短期不要バッファ２１のサイズ未満であれば、短期不要バッファ２１の一部をページアウトしてもよい。
【００２３】
処理部１１は、メモリ１２の全体の使用量が減少中の場合に、ページアウトした部分バッファ（退避領域１３ａのデータ）をページインする。ページインは、記憶装置１３にページアウトした情報（ページ）をメモリ１２に戻して、当該情報に基づく処理（図１の例の場合は、通信ライブラリによるノード間通信の処理）を実行可能にすることを示す。ここで、グラフＧ２は、横軸を時間、縦軸をメモリ１２の全体の使用量（メモリ使用量）とし、実線の矢印によりメモリ使用量が時間と共に低下する様子を示している。
【００２４】
情報処理装置１によれば、計算を実行するノード間の通信を行う通信ライブラリにより使用される通信バッファのうち一時的に使用されていない部分バッファの情報が取得される。通信バッファが属するメモリ１２の全体の使用量が増加中の場合に部分バッファがページアウトされ、メモリ１２の全体の使用量が減少中の場合に部分バッファがページインされる。
【００２５】
これにより、メモリ１２を効率的に利用できる。具体的には次の通りである。
メモリ１２の全体の使用量が増加中の場合、ノード１０により、通信バッファに格納された情報を用いた計算処理が実行され、当該計算処理の負荷が高くなる傾向にあると推定される。この場合、部分バッファを記憶装置１３にページアウトすることで、例えば、ページアウトにより増えたメモリ１２の空き容量を、計算処理に割り当て可能になる。こうして、メモリ１２の全体の使用量が増加中の場合には、部分バッファをページアウトすることでメモリ１２を節約し、メモリ１２の空き領域を計算処理などの他の処理に融通することも可能になる。
【００２６】
一方、メモリ１２の全体の使用量が減少中の場合、ノード１０による計算処理が収束し、当該計算処理の負荷が低くなる傾向にあると推定される。この場合、計算処理によるメモリ１２の所要サイズが低下していくと考えられる。そこで、例えば、処理部１１は、記憶装置１３に格納された部分バッファ（退避領域１３ａのデータ）を、メモリ１２（通信バッファ２０）へページインする。ページインにより通信バッファ２０に当該部分バッファが復元されると、ノード１０は、当該部分バッファを用いた通信処理を行えるようになる。こうして、例えば、計算完了後、通信バッファ全域を利用してノード間通信を行うときに、部分バッファをページイン済の状態にでき、例えば、ノード間通信の開始直前に部分バッファのページインを行うよりも、ノード間通信を高速に開始できる。その結果、情報処理装置１におけるジョブの実行時間を短縮することができる。
【００２７】
なお、処理部１１は、部分バッファのページアウトでは、メモリ１２の全体の使用量が増加に転じる前における通信バッファ２０のうちの通信ライブラリにより使用されていない領域のサイズの履歴に基づいて、ページアウトする部分バッファのサイズを決定してもよい。これにより、例えば、ページアウト対象サイズが大きくなり過ぎないように調整でき、当面利用されないと推定されるサイズを適切に決定できる。
【００２８】
また、処理部１１は、部分バッファの情報の取得では、通信ライブラリを利用する複数のプロセスそれぞれから部分バッファの情報を取得してもよい。そして、処理部１１は、部分バッファのページアウトでは、各プロセスによる通信バッファ２０の使用量の比に応じて、ページアウトする部分バッファのサイズをプロセス毎に決定してもよい。これにより、例えば、ページアウト対象サイズが大きくなり過ぎないようにプロセス毎に調整でき、当面利用されないと推定されるサイズを適切に決定できる。
【００２９】
更に、処理部１１は、複数のプロセスのうちの第１のプロセスに対するページアウトにより生じたメモリ１２の空き領域を、複数のプロセスのうちの第２のプロセスに割り当ててもよい。これにより、複数のプロセスによる計算処理を効率的に実行できる。
【００３０】
［第２の実施の形態］
次に、第２の実施の形態を説明する。
図２は、第２の実施の形態の並列処理装置の例を示す図である。
【００３１】
並列処理装置５０は、計算ノード１００，１００ａ，１００ｂ，１００ｃ，・・・および管理ノード２００を有する。計算ノード１００，１００ａ，１００ｂ，１００ｃ，・・・および管理ノード２００は、並列処理装置５０における管理用のネットワーク５１に接続されている。また、計算ノード１００，１００ａ，１００ｂ，１００ｃ，・・・は、例えば、メッシュ結合またはトーラス結合といった直接網により相互に接続される。あるいは、計算ノード１００，１００ａ，１００ｂ，１００ｃ，・・・は、Ｆａｔ−ｔｒｅｅやｃｒｏｓｓ−ｂａｒなどの間接網により接続されてもよい。例えば、並列処理装置５０は、第１の実施の形態の情報処理装置１の一例である。
【００３２】
計算ノード１００，１００ａ，１００ｂ，１００ｃ，・・・それぞれは、メモリとプロセッサとを備え、管理ノード２００により割り当てられたジョブに応じた複数のプロセスを並列に実行する。各プロセスは、計算の実行および他のプロセスとの通信を交互に繰り返し行うことで、当該ジョブを実行する。計算ノード１００，１００ａ，１００ｂ，１００ｃ，・・・それぞれは、第１の実施の形態のノード１０，１０ａ，１０ｂの一例である。
【００３３】
管理ノード２００は、ユーザによるジョブの入力を受け付け、計算ノード１００，１００ａ，１００ｂ，１００ｃ，・・・に対するジョブの割り当てを行う。また、管理ノード２００は、割り当て先の計算ノードに対するジョブの実行を指示する。
【００３４】
ここで、現在、大規模な演算処理（地震予知や天気予報など）を行うシミュレーションを高速に実行するために、複数個のプロセッサによる並列処理が用いられている。並列処理では、複数のプロセスを同時に実行する際、プロセス間の大量通信が行われ得る。ここで、プロセス間通信には、ＭＰＩ（Message Passing Interface）と呼ばれる通信ライブラリが用いられる。ＭＰＩでは、当面利用されないページも、メモリのバッファ上に占有しており、並列処理装置５０全体として、比較的大きなバッファをメモリに占有する。そこで、各計算ノードは、ＭＰＩにより占有されるメモリ領域を低減し、メモリの利用効率を向上する機能を提供する。
【００３５】
図３は、計算ノードのハードウェア例を示すブロック図である。
計算ノード１００は、ＣＰＵ１１０，１２０、ＲＡＭ１３０、フラッシュメモリ１４０および通信インタフェース１５０を有する。各ハードウェアは計算ノード１００のバスに接続されている。計算ノード１００ａ，１００ｂ，１００ｃ，・・・および管理ノード２００も計算ノード１００と同様のハードウェアを用いて実現できる。
【００３６】
ＣＰＵ１１０は、計算ノード１００の情報処理を制御するプロセッサである。ＣＰＵ１１０は、コア１１１，１１２，１１３，１１４を有する。コア１１１，１１２，１１３，１１４は、演算を実行する。ＣＰＵ１２０もＣＰＵ１１０と同様にコア１２１，１２２，１２３，１２４を有する。計算ノード１００は、複数のプロセスをＣＰＵ１１０，１２０を用いて並列に実行することができる。
【００３７】
ＲＡＭ１３０は、計算ノード１００の主記憶装置である。ＲＡＭ１３０は、ＣＰＵ１１０，１２０が実行するプログラムやＣＰＵ１１０，１２０が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。ＲＡＭ１３０は、ＣＰＵ１１０，１２０によって共有される共有メモリである。ＲＡＭ１３０は、ＣＰＵ１１０，１２０に実行させるプログラムの少なくとも一部を一時的に記憶する。ＲＡＭ１３０は、ＣＰＵ１１０，１２０による処理に用いられる各種データを記憶する。
【００３８】
フラッシュメモリ１４０は、計算ノード１００の補助記憶装置である。フラッシュメモリ１４０は、ＯＳ（Operating System）やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。また、フラッシュメモリ１４０は、ＲＡＭ１３０に対するスワップエリアとして用いられる。なお、計算ノード１００は、フラッシュメモリ１４０に代えて、ＨＤＤ（Hard Disk Drive）などの他の種類の補助記憶装置を備えてもよい。
【００３９】
通信インタフェース１５０は、ネットワーク５１に接続され、ネットワーク５１を介して他の計算ノードや管理ノード２００と通信を行うインタフェースである。通信インタフェース１５０は、ネットワーク５１を介して管理ノード２００からプログラムを受信し、ＲＡＭ１３０やフラッシュメモリ１４０に格納することもある。当該プログラムは、例えば、ＣＰＵ１１０，１２０によって実行される。
【００４０】
図４は、管理ノードのハードウェア例を示すブロック図である。
管理ノード２００は、ＣＰＵ２０１、ＲＡＭ２０２、ＨＤＤ２０３、画像信号処理部２０４、入力信号処理部２０５、媒体リーダ２０６および通信インタフェース２０７を有する。
【００４１】
ＣＰＵ２０１は、プログラムの命令を実行するプロセッサである。ＣＰＵ２０１は、ＨＤＤ２０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ２０２にロードし、プログラムを実行する。なお、ＣＰＵ２０１は複数のプロセッサコアを含んでもよい。また、管理ノード２００は複数のプロセッサを有してもよい。
【００４２】
ＲＡＭ２０２は、ＣＰＵ２０１が実行するプログラムやＣＰＵ２０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。
ＨＤＤ２０３は、ＯＳやミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、管理ノード２００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００４３】
画像信号処理部２０４は、ＣＰＵ２０１からの命令に従って、管理ノード２００に接続されたディスプレイ２１１に画像を出力する。ディスプレイ２１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなど、任意の種類のディスプレイを用いることができる。
【００４４】
入力信号処理部２０５は、管理ノード２００に接続された入力デバイス２１２から入力信号を取得し、ＣＰＵ２０１に出力する。入力デバイス２１２としては、マウスやキーボードなどを用いることができる。また、管理ノード２００に、複数の種類の入力デバイスが接続されていてもよい。
【００４５】
媒体リーダ２０６は、記録媒体２１３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体２１３として、例えば、磁気ディスク、光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤが含まれる。光ディスクには、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）が含まれる。
【００４６】
媒体リーダ２０６は、例えば、記録媒体２１３から読み取ったプログラムやデータを、ＲＡＭ２０２やＨＤＤ２０３などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、ＣＰＵ２０１によって実行される。なお、記録媒体２１３は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体２１３やＨＤＤ２０３を、コンピュータ読み取り可能な記録媒体と言うことがある。
【００４７】
通信インタフェース２０７は、ネットワーク５１に接続され、ネットワーク５１を介して計算ノード１００，１００ａ，１００ｂ，１００ｃ，・・・と通信を行うインタフェースである。通信インタフェース２０７は、ＨＤＤ２０３に格納されたプログラムや、記録媒体２１３に格納されたプログラムを、ネットワーク５１を介して、計算ノード１００，１００ａ，１００ｂ，１００ｃ，・・・に送信することもある。
【００４８】
図５は、計算ノードの機能例を示すブロック図である。
計算ノード１００は、カーネル１６０、ジョブ管理部１７０、プロセス１８０，１８０ａ，１８０ｂおよびメモリ状況管理部１９０を有する。カーネル１６０は、計算ノード１００のＯＳの中枢のプログラムである。プロセス１８０，１８０ａ，１８０ｂは、計算ノード１００が実行するジョブプログラムの実行単位である。ジョブ管理部１７０およびメモリ状況管理部１９０は、ＣＰＵ１１０，１２０により所定のプログラムが実行されることで実現される。
【００４９】
カーネル１６０は、ジョブ管理部１７０により依頼されたプロセスの起動を行う。カーネル１６０は、メモリ管理部１６１を有する。メモリ管理部１６１は、ＲＡＭ１３０におけるメモリ領域の獲得や解放を管理する。ここで、ＲＡＭ１３０は、通信用メモリ１３１および計算用メモリ１３２を有する。通信用メモリ１３１は、ＭＰＩ通信に用いられる通信バッファを提供するメモリ領域である。通信バッファは、プロセス毎に設けられる。計算用メモリ１３２は、各プロセスの計算処理に用いられるメモリ領域である。
【００５０】
ジョブ管理部１７０は、ＣＰＵ１１０，１２０によるジョブの実行を管理する。ジョブ管理部１７０は、ジョブを実行するための複数プロセスの起動をカーネル１６０に依頼する。図５では、３つのプロセスを例示しているが、プロセスの数は２または４以上でもよい。ジョブ管理部１７０は、ジョブの実行に応じて、メモリ状況管理部１９０の有効化および無効化を行う。
【００５１】
プロセス１８０，１８０ａ，１８０ｂは、ジョブに関する計算の実行単位である。プロセス１８０，１８０ａ，１８０ｂは、通信用メモリ１３１および計算用メモリ１３２から処理に利用されるメモリ領域を獲得する。プロセス１８０は通信処理部１８１を有する。
【００５２】
通信処理部１８１は、通信用メモリ１３１を用いてプロセス間通信を行う。プロセス間通信は、計算ノード１００上のプロセス間において行われることもあるし、異なる計算ノード上のプロセス間において行われることもある。通信処理部１８１は、ＭＰＩ通信ライブラリにより実現される。プロセス１８０ａ，１８０ｂも、プロセス１８０と同様に、プロセス間通信を行う通信処理部を有する。
【００５３】
ここで、ＭＰＩ通信には、次の特徴がある。第１に、ジョブ毎の使用メモリ量に上限がある。第２に、プロセス間通信によるメモリ利用完了後も、該当のメモリ領域をすぐには解放せず、再利用するために保持する。第３に、プロセス間通信は、通信用メモリ１３１に確保されたバッファ（通信バッファ）を経由する。第４に、プロセスが所要するメモリ量が不足する場合、ジョブの使用メモリ量の上限内で、どのプロセスにも保持されていない空きメモリを利用する。第５に、当該空きメモリを確保できない場合、プロセスは、他プロセスが保持する空きメモリの解放を要求する。第６に、最終的にＲＡＭ１３０のメモリ量が不足する場合、プロセスは終了する。
【００５４】
メモリ状況管理部１９０は、プロセス１８０，１８０ａ，１８０ｂによるＲＡＭ１３０の利用状況を管理する。メモリ状況管理部１９０は、プロセス１８０，１８０ａ，１８０ｂによるＲＡＭ１３０の利用状況に応じて、通信用メモリ１３１のうち、一時的に利用されていない部分領域のページアウトや、当該部分領域のページインを制御する。例えば、メモリ状況管理部１９０は、該当の部分領域のページアウトやページインを、メモリ管理部１６１に指示することで、当該部分領域のページアウトやページインの実行を制御する。ここで、ページアウトは、該当の部分領域を、通信用メモリ１３１からフラッシュメモリ１４０に移し、通信用メモリ１３１の空き領域を増やす処理である。ページインは、フラッシュメモリ１４０にページアウトされた部分領域を、通信用メモリ１３１に戻す処理である。
【００５５】
なお、計算ノード１００ａ，１００ｂ，１００ｃ，・・・も計算ノード１００と同様の機能を有する。
図６は、ページイン／ページアウトを行う期間の例を示す図である。
【００５６】
グラフＧ１０は、横軸を時間Ｔ、縦軸をＲＡＭ１３０の全体のメモリ使用量Ｍとして、時間Ｔと全体のメモリ使用量Ｍとの関係の例を表す。ここで、ＲＡＭ１３０の全体のメモリ使用量Ｍは、通信用メモリ１３１の使用量と計算用メモリ１３２の使用量との合計である。
【００５７】
メモリ状況管理部１９０は、全体のメモリ使用量Ｍを監視する。メモリ状況管理部１９０は、全体のメモリ使用量Ｍが増加中の期間Ｔ１において、通信用メモリ１３１のうちの一時的に使用されていない部分領域をページアウトするよう制御する。一方、メモリ状況管理部１９０は、全体のメモリ使用量Ｍが減少中の期間Ｔ２において、ページアウトした部分領域をページインするよう制御する。
【００５８】
図７は、ページテーブルの例を示す図である。
メモリ管理部１６１は、ページ４０１の格納先をページテーブル４０２によって管理する。ページテーブル４０２は、ＲＡＭ１０３の所定の領域に格納される。ページテーブル４０２は、ページの識別情報（例えば、プロセス側が認識する仮想メモリ領域におけるページを示す仮想アドレス）と、当該ページの物理フレーム（ＲＡＭ１３０上の物理アドレスまたはフラッシュメモリ１４０上の物理アドレス）とをマッピングする情報である。例えば、ページテーブル４０２は、有効フラグと格納先情報とを含む。有効フラグは、該当のページが、ＲＡＭ１３０上にあるか、フラッシュメモリ１４０上にあるかを示すフラグである。格納先情報は、該当のページのＲＡＭ１３０における格納アドレス、または、フラッシュメモリ１４０における格納アドレスを示すアドレス情報である。メモリ状況管理部１９０は、ページテーブル４０２に基づいて、各ページの格納先を特定することができる。
【００５９】
次に、計算ノード１００の処理手順を説明する。なお、計算ノード１００ａ，１００ｂ，１００ｃ，・・・も計算ノード１００と同様の手順を実行する。
前述のように、ジョブ管理部１７０は、プロセス１８０，１８０ａ，１８０ｂが実行開始される前に、メモリ状況管理部１９０を有効化し、ＲＡＭ１３０の使用状況の監視を開始させる。
【００６０】
図８は、計算ノードの処理例を示すフローチャートである。
メモリ状況管理部１９０は、下記の手順を、例えば所定の周期で繰り返し実行する。
（Ｓ１０）メモリ状況管理部１９０は、プロセス１８０，１８０ａ，１８０ｂによる計算が実行中であるか否かを判定する。実行中である場合、ステップＳ１１に処理が進む。実行中でない場合、処理が終了する。
【００６１】
（Ｓ１１）メモリ状況管理部１９０は、ＲＡＭ１３０の全体のメモリ使用量が増加中であるか否かを判定する。増加中である場合、ステップＳ１２に処理が進む。増加中でない場合、ステップＳ１３に処理が進む。ここで、メモリ状況管理部１９０は、例えば、ＲＡＭ１３０の全体のメモリ使用量が増加中であることを複数回連続して観測した場合に、ＲＡＭ１３０の全体のメモリ使用量が増加中であると判定してもよい。一方、メモリ状況管理部１９０は、全体のメモリ使用量が増加中であることを複数回連続して観測しない場合に、ＲＡＭ１３０の全体のメモリ使用量が増加中でないと判定してもよい。
【００６２】
（Ｓ１２）メモリ状況管理部１９０は、通信用メモリ１３１の一部のページアウトを、メモリ管理部１６１に指示する。例えば、メモリ状況管理部１９０は、プロセス１８０，１８０ａ，１８０ｂそれぞれの通信処理部から、通信用メモリ１３１のうち、一時的に使用していない部分領域の情報を取得する。メモリ状況管理部１９０は、当該部分領域をページアウトさせることで、通信用メモリ１３１の空き容量を増やす。メモリ管理部１６１は、指示に応じて該当の部分領域のページアウトを行い、当該部分領域に対応するページの格納先（フラッシュメモリ１４０のアドレス情報）をページテーブルに記録する。
【００６３】
（Ｓ１３）メモリ状況管理部１９０は、ＲＡＭ１３０の全体のメモリ使用量が減少中であるか否かを判定する。減少中である場合、ステップＳ１４に処理が進む。減少中でない場合、ステップＳ１０に処理が進む。ここで、メモリ状況管理部１９０は、例えば、ＲＡＭ１３０の全体のメモリ使用量が減少中であることを複数回連続して観測した場合に、ＲＡＭ１３０の全体のメモリ使用量が減少中であると判定してもよい。一方、メモリ状況管理部１９０は、全体のメモリ使用量が減少中であることを複数回連続して観測しない場合に、ＲＡＭ１３０の全体のメモリ使用量が減少中でないと判定してもよい。
【００６４】
（Ｓ１４）メモリ状況管理部１９０は、ステップＳ１２でページアウトした部分領域のページインを、メモリ管理部１６１に指示する。例えば、メモリ状況管理部１９０は、ページテーブルを参照することで、ページアウトされたページを特定し、当該ページのページインを、メモリ管理部１６１に指示する。メモリ管理部１６１は、指示に応じて該当の部分領域のページインを行い、当該部分領域に対応するページの格納先（通信用メモリ１３１のアドレス情報）をページテーブルに記録する。そして、ステップＳ１０に処理が進む。
【００６５】
計算ノード１００によれば、ＲＡＭ１３０を効率的に利用できる。ＲＡＭ１３０の全体の使用量が増加中の場合、計算ノード１００により、通信用メモリ１３１および計算用メモリ１３２に格納された情報を用いた計算処理が実行され、当該計算処理の負荷が高くなる傾向にあると推定される。この場合、通信用メモリ１３１のうち、当面使用されない部分領域をフラッシュメモリ１４０にページアウトすることで、例えば、ページアウトにより増えたＲＡＭ１３０の空き容量を、計算処理に割り当て可能になる。また、計算ノード１００は、第１のプロセスに対するページアウトにより生じた通信用メモリ１３１の空き領域を、別のプロセスに割り当ててもよい。
【００６６】
こうして、ＲＡＭ１３０の全体の使用量が増加中の場合には、通信用メモリ１３１の部分領域をページアウトすることでＲＡＭ１３０を節約し、ＲＡＭ１３０の空き領域を計算処理などの他の処理に融通することも可能になる。
【００６７】
一方、ＲＡＭ１３０の全体の使用量が減少中の場合、計算ノード１００による計算処理が収束し、当該計算処理の負荷が低くなる傾向にあると推定される。この場合、計算処理によるＲＡＭ１３０の所要サイズが低下していくと考えられる。そこで、例えば、計算ノード１００は、フラッシュメモリ１４０にページアウトした部分領域を、通信用メモリ１３１へページインする。これにより、通信用メモリ１３１に当該部分領域が復元される。計算ノード１００は、当該部分領域を含む通信用メモリ１３１を用いた通信処理を行えるようになる。こうして、例えば、計算完了後、通信用メモリ１３１全域を利用してノード間通信を行うときに、該当の部分領域をページイン済の状態にでき、例えば、ノード間通信の開始直前にページインを行うよりも、ノード間通信を高速に開始できる。その結果、並列処理装置５０におけるジョブの実行時間を短縮することができる。
【００６８】
ところで、ＲＡＭ１３０の全体の使用量Ｍの増加が、各プロセスの通信処理部による通信処理に起因することもある。すなわち、ＲＡＭ１３０の全体の使用量Ｍが増加する期間においても通信処理部による通信処理により通信用メモリ１３１が利用され得る。したがって、ページアウトを行う場合には、通信用メモリ１３１のうち、一時的に使用されていない部分領域の中から、当面利用されないと推定されるサイズを適切に特定して、ページアウトすることが好ましい。当該部分領域から比較的大きなサイズでページアウトを行うと、その直後に、通信処理により通信用メモリ１３１が所要されたときに、ページインが発生する可能性があり、余計なオーバーヘッドが生じることもあるからである。
【００６９】
そこで、計算ノード１００は、下記に示すように、ページアウトするサイズを適切に調節する機能を提供する。
例えば、メモリ状況管理部１９０は、ＲＡＭ１３０の全体の使用量が増加に転じる前における通信用メモリ１３１のうちの各プロセスの通信処理部により使用されていない領域のサイズの履歴に基づいて、部分領域のうちページアウトするサイズを決定する。また、メモリ状況管理部１９０は、ＭＰＩ通信ライブラリを利用する複数のプロセスそれぞれから一時的に使用されていない部分領域の情報を取得する。そして、メモリ状況管理部１９０は、各プロセスによる通信用メモリ１３１の使用量の比に応じて、部分領域のうちページアウトするサイズをプロセス毎に決定する。このようなページアウト対象サイズの決定処理を、以下ではより具体的に説明する。
【００７０】
なお、以下の説明では、ジョブ単位の通信用メモリ１３１の使用量を、単に「ジョブメモリ使用量」と言うことがある。また、プロセス単位の通信用メモリ１３１の使用量を、単に「プロセスメモリ使用量」と言うことがある。
【００７１】
図９は、ジョブと各プロセスとの通信用メモリの使用量の関係の例を示す図である。
計算ノード１００の各プロセスの通信処理部（ＭＰＩ通信ライブラリ）が使用するメモリ量の和は、各プロセスが属するジョブ単位の通信用メモリ１３１の使用量である。グラフＧ２０は、横軸を時間とし、縦軸を通信用メモリ１３１の使用量（サイズ）としている。サイズの単位は、例えば、ＧＢ（Giga Bytes）である。系列Ｇ２１は、ジョブ単位の通信用メモリ１３１の使用量の変化を示す。系列Ｇ２２は、計算ノード１００で実行されるプロセスＰ１の通信用メモリ１３１の使用量の変化を示す。系列Ｇ２３は、計算ノード１００で実行されるプロセスＰ２の通信用メモリ１３１の使用量の変化を示す。系列Ｇ２４は、計算ノード１００で実行されるプロセスＰ３の通信用メモリ１３１の使用量の変化を示す。計算ノード１００でプロセスＰ１，Ｐ２，Ｐ３が実行される場合、系列Ｇ２２，Ｇ２３，Ｇ２４の和が系列Ｇ２１となる。
【００７２】
各タイミングにおいて、通信用メモリ１３１の使用量が増加中のプロセスもあれば、当該使用量が減少中のプロセスもある。ジョブ単位では、通信用メモリ１３１の使用量が増加し、その後、減少するというサイクルとなる。このため、通信用メモリ１３１の使用量の増加によりＲＡＭ１３０の全体の使用量が増加することもある。また、通信用メモリ１３１の使用量の減少によりＲＡＭ１３０の全体の使用量が減少することもある。
【００７３】
図１０は、メモリ状況管理表の例を示す図である。
メモリ状況管理表１３３は、通信用メモリ１３１の使用状況を示す情報である。メモリ状況管理表１３３は、メモリ状況管理部１９０により生成され、ＲＡＭ１３０に格納される。メモリ状況管理表１３３は、値ｓｕｍ、ｕｓｅｍａｘ、ｕｓｅｍｉｎ、ｕｓｅｉ、ｈｏｌｄｉ、ｕｓｅｔ、ｕｓｅｐｔ、ｈｏｌｄｐｔを含む。
【００７４】
ｓｕｍは、ジョブに割り当てられた通信用メモリの量（固定値）を示す。メモリ状況管理部１９０は、ジョブ開始前に、ジョブ管理部１７０からｓｕｍを取得する。
ｕｓｅｍａｘは、ジョブ単位の通信用メモリ１３１の使用量の直近の極大値を示す。メモリ状況管理部１９０は、極大値を観測すると、ｕｓｅｍａｘを更新する。ｕｓｅｍａｘは、ジョブ単位の通信用メモリ１３１の使用量が増加に転じる前の当該使用量の極大値となる。
【００７５】
ｕｓｅｍｉｎは、ジョブ単位の通信用メモリ１３１の使用量の直近の極小値を示す。メモリ状況管理部１９０は、極小値を観測すると、ｕｓｅｍｉｎを更新する。ｕｓｅｍｉｎは、ジョブ単位の通信用メモリ１３１の使用量が増加に転じる前の当該使用量の極小値となる。
【００７６】
ｕｓｅｉは、ｕｓｅｍａｘからｕｓｅｍｉｎを観測した間の時間Ｔ間隔毎のジョブ単位の通信用メモリ１３１の使用量を示す。タイミング番号ｉ（ｉ＝０，１，２，・・・）は、各観測のタイミングを示す番号である。メモリ状況管理部１９０は、極大値ｕｓｅｍａｘから極小値ｕｓｅｍｉｎを観測する間の各観測のタイミングでｕｓｅｉを記録する。また、時間Ｔは予め設定される周期である。
【００７７】
ｈｏｌｄｉは、ｕｓｅｍａｘからｕｓｅｍｉｎを観測した間の時間Ｔ間隔毎のジョブ単位の通信用メモリ１３１における保持領域（確保されているが利用されていない領域）のサイズの履歴を示す。
【００７８】
ｕｓｅｔは、極小値ｕｓｅｍｉｎの観測後、ｔ回目のジョブメモリ獲得時のジョブ単位の通信用メモリ１３１の使用量を示す。メモリ状況管理部１９０は、当該極小値の観測後、該当のジョブが通信用メモリ１３１の領域を獲得する際に、ｕｓｅｔを更新し、最新のタイミングｔの値のみを保存する。
【００７９】
ｕｓｅｐｔは、極小値ｕｓｅｍｉｎの観測後、ｔ回目のジョブメモリ獲得時のプロセス毎の通信用メモリ１３１の使用量を示す。プロセス番号ｐ（ｐ＝０，１，２，・・・）は、プロセスの識別番号である。メモリ状況管理部１９０は、当該極小値の観測後、該当のジョブが通信用メモリ１３１の領域を獲得する際に、ｕｓｅｐｔを更新し、最新のタイミングｔの値のみを保存する。
【００８０】
ｈｏｌｄｐｔは、極小値ｕｓｅｍｉｎの観測後、ｔ回目のジョブメモリ獲得時のプロセス毎に保持している通信用メモリ１３１の領域（保持メモリ）のうちの空きメモリ量を示す。メモリ状況管理部１９０は、当該極小値の観測後、該当のジョブが通信用メモリ１３１の領域を獲得する際に、ｈｏｌｄｐｔを更新し、最新のタイミングｔの値のみを保持する。
【００８１】
図１１は、通信用メモリの使用量の変化と各変数との関係の例を示す図である。
グラフＧ３０は、横軸を時間、縦軸を通信用メモリ１３１のサイズとし、通信用メモリ１３１の使用量の変化と図１０で示した各変数との関係の例を示している。
【００８２】
グラフＧ３０において、領域Ｒ１１は、ジョブに割り当てられている通信用メモリ１３１の空き領域（ｆｒｅｅ）を示す。領域Ｒ１２は、通信用メモリ１３１のうち各プロセスにより使用されている領域（ｕｓｅ）を示す。領域Ｒ１３，Ｒ１４は、通信用メモリ１３１のうち各プロセスにより使用されていないが保持されている（確保されている）領域（ｈｏｌｄ）を示す。
【００８３】
例えば、該当のジョブに割り当てられている通信用メモリ１３１の上限サイズは、１０．０ＧＢであるとする。すると、ｓｕｍ＝１０．０（ＧＢ）である。
グラフＧ３０の時刻ｔ０から順に追っていくと、当初、通信用メモリ１３１の使用量は徐々に増加するため、メモリ状況管理部１９０は、ｕｓｅｍａｘを更新していく。時刻ｔ９（タイミングＡ）で、使用量が極大値となり、それ以降は、通信用メモリ１３１の使用量は減少に転じる。このため、時刻ｔ９において、メモリ状況管理部１９０は、ｕｓｅｍａｘに当該極大値を設定し、時刻ｔ９の後、ｕｓｅｍｉｎを更新していく。その間、メモリ状況管理部１９０は、ｕｓｅｉおよびｈｏｌｄｉを記録する。
【００８４】
そして、時刻ｔ１５（タイミングＢ）で、使用量が極小値となり、それ以降は、通信用メモリ１３１の使用量は増加に転じる。このため、時刻ｔ１５において、メモリ状況管理部１９０は、ｕｓｅｍｉｎに当該極小値を設定し、それ以降のｕｓｅｉおよびｈｏｌｄｉの記録を停止し、ｕｓｅｔ、ｕｓｅｐｔおよびｈｏｌｄｐｔの記録を開始する。
【００８５】
メモリ状況管理部１９０は、こうして記録したメモリ状況管理表１３３の情報に基づいて、次のように通信用メモリ１３１におけるページアウト対象のサイズを決定する。
メモリ状況管理部１９０は、時刻ｔ１５の直後に通信用メモリ１３１の使用量が増加に転じたことを観測すると、式（１）によりｈｏｌｄａｖｒを計算する。ｈｏｌｄａｖｒは、当該使用量の増加前の極大値と極小値とが観測されたタイミングの間の通信用メモリ１３１の空きメモリ量に基づく、時刻ｔ１５の直後において該当ジョブが保持可能な通信用メモリ１３１の空きメモリ量を示す。ｎは、当該極大値と極小値とが観測されたタイミングの間の通信用メモリ１３１の空きメモリ量を観測したタイミングの総回数を示す。具体的には、ｈｏｌｄａｖｒは、極大値と極小値とが観測されたタイミングの間の通信用メモリ１３１の空きメモリ量の平均値である。
【００８６】
【数１】
2020013306.tif 000003
【００８７】
メモリ状況管理部１９０は、式（２）によりｈｏｌｄｌｉｍｉｔｔを計算する。ｈｏｌｄｌｉｍｉｔｔは、時刻ｔ１５の直後から通信用メモリ１３１の使用量の次の極大値までの各時点ｔにおいて該当ジョブが保持できる空きメモリの最大値を示す。
【００８８】
【数２】
2020013306.tif 000004
【００８９】
メモリ状況管理部１９０は、式（３）により、該当のジョブのプロセス毎に、ｈｏｌｄｌｉｍｉｔｐｔを計算する。ｈｏｌｄｌｉｍｉｔｐｔは、各時点ｔにおいて、該当のプロセスが保持できる空きメモリの最大量を示す。
【００９０】
【数３】
2020013306.tif 000005
【００９１】
メモリ状況管理部１９０は、式（４）により、プロセス毎に、ｓｅｔ＿ｆｒｅｅｐｔを計算する。ｓｅｔ＿ｆｒｅｅｐｔは、該当のプロセスが時点ｔでページアウトすべきメモリ量を示す。
【００９２】
【数４】
2020013306.tif 000006
【００９３】
ここで、ｓｅｔ＿ｆｒｅｅｐｔ＞０のとき、メモリ状況管理部１９０は、該当のプロセスが保持する空きメモリ量のうち、ｓｅｔ＿ｆｒｅｅｐｔのサイズをページアウトする。一方、ｓｅｔ＿ｆｒｅｅｐｔ≦０のとき、メモリ状況管理部１９０は、該当のプロセスが保持する空きメモリ量をページアウトせずにそのまま保持する。なお、ページアウト対象とする部分領域は、例えば、所定のルールによって決定することができる。例えば、プロセスがアドレスの小さい領域から順に使用する場合、メモリ状況管理部１９０は、アドレスの大きい領域を優先的にページアウト対象の部分領域とすることが考えられる。
【００９４】
図１２は、メモリ制御の例を示すシーケンス図である。
ジョブＪ１は、計算ノード１００によって実行されるジョブである。ジョブＪ１は、プロセス１８０，１８０ａ，１８０ｂを含む（ただし、プロセス１８０ｂの図示を省略している）。
【００９５】
（ステップＳＴ１）ジョブ管理部１７０は、ジョブＪ１の実行を開始する前に、メモリ状況管理部１９０を有効化する。メモリ状況管理部１９０は、メモリ状況管理表１３３を初期化する。
【００９６】
（ステップＳＴ２）メモリ状況管理部１９０は、メモリ管理部１６１からＲＡＭ１３０の使用状況の情報を収集し、メモリ状況管理表１３３に記録する。メモリ状況管理部１９０は、メモリ状況管理表１３３に基づいて、メモリ状況管理のアルゴリズム（後述する）を実行する。以降、メモリ状況管理部１９０は、時間Ｔの間隔で、メモリ管理部１６１から情報を収集する。
【００９７】
（ステップＳＴ３）ジョブＪ１の実行が開始されると、プロセス１８０の通信処理部１８１は、ｍｍａｐシステムコールをメモリ管理部１６１に発行することで、通信用メモリ１３１の通信バッファを獲得する（メモリ獲得）。他のプロセスの通信処理部も、同様にして通信バッファを獲得する。
【００９８】
（ステップＳＴ４）メモリ状況管理部１９０は、メモリ管理部１６１からＲＡＭ１３０の使用状況の情報を収集し、メモリ状況管理表１３３に記録する。メモリ状況管理部１９０は、メモリ状況管理表１３３に基づいて、メモリ状況管理のアルゴリズムを実行する。
【００９９】
（ステップＳＴ５）プロセス１８０の通信処理部１８１は、プロセス間通信の完了時にｒｅｇａｉｎ＿ｆｒｅｅ（ａｄｄｒ，ｌｅｎｇｔｈ）インタフェースを呼び出す。これにより、通信処理部１８１は、ａｄｄｒ，ｌｅｎｇｔｈで指定した仮想領域に対してページテーブル４０２によりマッピングされている通信バッファのうちページアウト可能な領域（使用していない領域）があることを、メモリ状況管理部１９０に通知する。ここで、ｒｅｇａｉｎ＿ｆｒｅｅインタフェースは、ＭＰＩ通信ライブラリに新たに追加されるインタフェースである。ａｄｄｒは、ページアウト可能な仮想領域（プロセスが認識する仮想領域）の先頭アドレスを示す。ｌｅｎｇｔｈは、ページアウト可能な仮想領域のサイズを示す。ａｄｄｒおよびｌｅｎｇｔｈの組み合わせによりページアウト可能なページ群が示され、当該ページ群は、ページテーブル４０２により通信用メモリ１３１上のアドレスにマッピングされる。他のプロセスの通信処理部も同様にして、ｒｅｇａｉｎ＿ｆｒｅｅインタフェースによりページアウト可能なページ群を、メモリ状況管理部１９０に通知する。
【０１００】
（ステップＳＴ６）メモリ状況管理部１９０は、メモリ管理部１６１からＲＡＭ１３０の使用状況の情報を収集し、メモリ状況管理表１３３に記録する。メモリ状況管理部１９０は、メモリ状況管理表１３３に基づいて、メモリ状況管理のアルゴリズムを実行する。例えば、メモリ状況管理部１９０は、ｒｅｇａｉｎ＿ｆｒｅｅを用いて通知された領域のうち、ページアウトすべきサイズを決定し、当該領域のページアウトをメモリ管理部１６１に通知する。メモリ管理部１６１は、通知に応じて、当該領域のページアウトを行う。
【０１０１】
（ステップＳＴ７）通信処理部１８１は、次のプロセス間通信の開始前に、ｒｅｇａｉｎ＿ｍａｌｌｏｃ（ａｄｄｒ，ｌｅｎｇｔｈ）インタフェースを呼び出して、ページアウトされている通信バッファの部分領域の再確保を、メモリ状況管理部１９０に通知する。ここで、ｒｅｇａｉｎ＿ｍａｌｌｏｃインタフェースは、ＭＰＩ通信ライブラリに新たに追加されるインタフェースである。ａｄｄｒは、ページアウトされた部分領域のページアウト前の仮想領域の先頭アドレスである。ｌｅｎｇｔｈは、当該部分領域のサイズである。ａｄｄｒおよびｌｅｎｇｔｈの組み合わせによりページイン対象のページ群が示され、当該ページ群は、ページテーブル４０２によりフラッシュメモリ１４０上のアドレスにマッピングされる。ページイン対象のページ群は、他の情報（他のページの識別情報）によりメモリ状況管理部１９０に通知されてもよい。
【０１０２】
メモリ状況管理部１９０は、ｒｅｇａｉｎ＿ｍａｌｌｏｃを用いて通知されたページについて、ページインにより再確保するか、他の空きメモリを新規に獲得するかを判断する。メモリ状況管理部１９０は、判断結果に応じて、該当の部分領域のページインのメモリ管理部１６１への通知、または、他の空きメモリの新規獲得のプロセス１８０への通知を行う。メモリ管理部１６１は、ページインの通知に応じて、該当の部分領域のページインを行う。また、プロセス１８０の通信処理部１８１は、他の空きメモリの新規獲得の通知に応じて、他の空きメモリの獲得（ｍｍａｐシステムコールによる獲得）を行う。他のプロセスの通信処理部も同様にして、ｒｅｇａｉｎ＿ｍａｌｌｏｃインタフェースによりページイン対象の部分領域を、メモリ状況管理部１９０に通知する。
【０１０３】
（ステップＳＴ８）メモリ状況管理部１９０は、メモリ管理部１６１からＲＡＭ１３０の使用状況の情報を収集し、メモリ状況管理表１３３に記録する。メモリ状況管理部１９０は、メモリ状況管理表１３３に基づいて、メモリ状況管理のアルゴリズムを実行する。
【０１０４】
（ステップＳＴ９）通信処理部１８１は、プロセス１８０に関する全ての通信が終了すると、ｍｕｎｍａｐシステムコールをメモリ管理部１６１に発行することで、通信用メモリ１３１の通信バッファを解放する（メモリ解放）。
【０１０５】
（ステップＳＴ１０）メモリ状況管理部１９０は、メモリ管理部１６１からＲＡＭ１３０の使用状況の情報を収集し、メモリ状況管理表１３３に記録する。メモリ状況管理部１９０は、メモリ状況管理表１３３に基づいて、メモリ状況管理のアルゴリズムを実行する。
【０１０６】
（ステップＳＴ１１）ジョブ管理部１７０は、ジョブＪ１の終了時に、メモリ状況管理部１９０を無効化する。
次に、計算ノード１００による処理手順を更に詳細に説明する。まず、ｒｅｇａｉｎ＿ｍａｌｌｏｃによるメモリ獲得時処理の手順を説明する。以下では、プロセス１８０を主に例示して説明するが、他のプロセスに関しても同様の手順となる。
【０１０７】
図１３は、メモリ獲得時処理の例を示すフローチャートである。
（Ｓ２０）メモリ状況管理部１９０は、ｒｅｇａｉｎ＿ｍａｌｌｏｃ（ａｄｄｒ，ｌｅｎｇｔｈ）インタフェースにより、ａｄｄｒ、ｌｅｎｇｔｈの組に応じたアドレス領域の指定を通信処理部１８１から受け付ける。ここで、ｒｅｇａｉｎ＿ｍａｌｌｏｃにより指定されるアドレス領域は、プロセス１８０により認識される仮想領域におけるアドレス領域である。
【０１０８】
（Ｓ２１）メモリ状況管理部１９０は、指定されたアドレス領域が存在するか否かを判定する。当該アドレス領域が存在する場合（すなわち、当該アドレス領域に対応する部分領域がページアウト済の場合）、ステップＳ２２に処理が進む。当該アドレス領域が未だ存在しない場合、ステップＳ２３に処理が進む。
【０１０９】
（Ｓ２２）メモリ状況管理部１９０は、該当のアドレス領域に対応するページのページインをメモリ管理部１６１に指示する。すなわち、メモリ状況管理部１９０は、指定されたアドレス領域に対応するページアウト済の部分領域のフラッシュメモリ１４０上のアドレスをページテーブル４０２に基づいて特定する。そして、メモリ状況管理部１９０は、当該部分領域を通信用メモリ１３１の空き領域にページインするようメモリ管理部１６１に指示し、メモリ管理部１６１にページインを実行させる。そして、ステップＳ２５に処理が進む。
【０１１０】
（Ｓ２３）メモリ状況管理部１９０は、ｒｅｇａｉｎ＿ｍａｌｌｏｃで指定された新領域の獲得をプロセス１８０に指示し、通信処理部１８１によりｍｍａｐシステムコールにより新領域の獲得を試行させる。メモリ状況管理部１９０は、当該新領域の獲得結果を通信処理部１８１から取得する。
【０１１１】
（Ｓ２４）メモリ状況管理部１９０は、新領域の獲得に成功したか否かを判定する。成功した場合、ステップＳ２５に処理が進む。失敗した場合（通信用メモリ１３１に空きがない場合）、ステップＳ２６に処理が進む。なお、失敗した場合には、プロセス１８０の実行を継続できず、プロセス１８０およびプロセス１８０が属するジョブが異常終了することになる。
【０１１２】
（Ｓ２５）メモリ状況管理部１９０は、ｒｅｇａｉｎ＿ｍａｌｌｏｃに応じた通信用メモリ１３１の使用状況の変化を、メモリ状況管理表１３３に記録する。具体的には、ジョブ単位の通信用メモリ１３１の使用量／空き容量や、該当のプロセス単位の通信用メモリ１３１の使用量／空き容量に変化が生じることになる。そして、メモリ獲得時処理が終了する。
【０１１３】
（Ｓ２６）メモリ状況管理部１９０は、異常に対する復帰処理を行う。そして、メモリ獲得時処理が終了する。
ここで、例えば、通信処理部１８１は、ＲＡＭ１３０の全体の使用量が増加している（通信用メモリ１３１の使用量が増加している）ときに、ｒｅｇａｉｎ＿ｍａｌｌｏｃにより新規領域の獲得をメモリ状況管理部１９０に指示することが考えられる。また、例えば、通信処理部１８１は、ＲＡＭ１３０の全体の使用量が減少している（通信用メモリ１３１の使用量が減少している）ときに、ｒｅｇａｉｎ＿ｍａｌｌｏｃによりメモリ状況管理部１９０にページインの指示を行うことが考えられる。
【０１１４】
また、図１３の例では、各プロセスのプロセス間通信のためのメモリ獲得時の手順を示したが、各プロセスにおける計算処理のためのメモリ獲得時にも、各プロセスは、図１３と同様の手順により計算用のメモリ獲得を行える。すなわち、メモリ状況管理部１９０は、通信用メモリ１３１から計算用メモリ１３２へメモリ領域を融通することも可能である。
【０１１５】
次に、プロセス１８０の通信完了時におけるｒｅｇａｉｎ＿ｆｒｅｅに応じた処理手順を説明する。
図１４は、通信完了時処理の例を示すフローチャートである。
【０１１６】
（Ｓ３０）メモリ状況管理部１９０は、通信処理部１８１からｒｅｇａｉｎ＿ｆｒｅｅ（ａｄｄｒ，ｌｅｎｇｔｈ）インタフェースにより、ａｄｄｒ、ｌｅｎｇｔｈの組に応じた空き領域を受け付ける。
【０１１７】
（Ｓ３１）メモリ状況管理部１９０は、プロセス１８０の実行が完了されたか否かを判定する。プロセス１８０の実行が完了された場合、ステップＳ３２に処理が進む。プロセス１８０の実行が完了されていない場合、ステップＳ３３に処理が進む。なお、前者の場合、通信処理部１８１は、ｍｕｎｍａｐシステムコールをメモリ管理部１６１に発行し、通信用メモリ１３１における通信バッファの解放（メモリ解放）を行う。
【０１１８】
（Ｓ３２）メモリ状況管理部１９０は、メモリ管理部１６１によるプロセス１８０に対応するメモリ解放の結果を取得する。
（Ｓ３３）メモリ状況管理部１９０は、ｒｅｇａｉｎ＿ｆｒｅｅまたはメモリ管理部１６１によるメモリ解放の結果に応じて、メモリ状況管理表１３３を更新する。そして、通信完了時の処理が終了する。
【０１１９】
次に、メモリ状況管理部１９０によるメモリ状況管理の手順を説明する。
図１５は、メモリ状況管理の例を示すフローチャートである。
（Ｓ４０）メモリ状況管理部１９０は、ジョブ実行開始時にジョブ管理部１７０により有効化される。
【０１２０】
（Ｓ４１）メモリ状況管理部１９０は、メモリ状況管理表１３３を初期化する。
（Ｓ４２）メモリ状況管理部１９０は、時間Ｔの期間、スリープする。
（Ｓ４３）メモリ状況管理部１９０は、メモリ利用状況収集を実行する。メモリ利用状況収集の処理の詳細は後述される。
【０１２１】
（Ｓ４４）メモリ状況管理部１９０は、該当ジョブの通信用メモリ１３１の使用量が増加中であるか否かを判定する。増加中の場合、ステップＳ４５に処理が進む。増加中でない場合、ステップＳ４６に処理が進む。
【０１２２】
（Ｓ４５）メモリ状況管理部１９０は、ページアウト制御を実行する。ページアウト制御の処理の詳細は後述される。なお、ステップＳ４４で増加中と判定される期間が、最初の増加期間（例えば、図１１の時刻ｔ０〜ｔ９）に相当する場合、メモリ状況管理部１９０は、ステップＳ４５をスキップしてステップＳ４６を実行してよい。
【０１２３】
（Ｓ４６）メモリ状況管理部１９０は、ジョブの実行が完了したか否かを判定する。ジョブの実行が完了した場合、メモリ状況管理部１９０は、ジョブ管理部１７０により無効化され、メモリ状況管理の処理が終了する。ジョブの実行が完了していない場合、ステップＳ４２に処理が進む。
【０１２４】
図１６は、メモリ利用状況収集の例を示すフローチャートである。
メモリ利用状況収集の処理は、ステップＳ４３に相当する。
（Ｓ５０）メモリ状況管理部１９０は、メモリ管理部１６１からＲＡＭ１３０の使用情報を取得する。具体的には、メモリ状況管理部１９０は、メモリ管理部１６１から通信用メモリ１３１のジョブ単位の使用量および空き容量を取得し、また、プロセス単位の使用量および空き容量をプロセス毎に取得する。
【０１２５】
（Ｓ５１）メモリ状況管理部１９０は、ｕｓｅｍａｘ＞ｕｓｅｉであるか否かを判定する。ｕｓｅｍａｘ＞ｕｓｅｉの場合、ステップＳ５３に処理が進む。ｕｓｅｍａｘ≦ｕｓｅｉの場合、ステップＳ５２に処理が進む。ここで、ｉは、今回の収集タイミングを示すタイミング番号である。
【０１２６】
（Ｓ５２）メモリ状況管理部１９０は、メモリ状況管理表１３３のｓｕｍ以外の値をクリアし、ｕｓｅｍａｘ＝ｕｓｅｉをメモリ状況管理表１３３に記録する。そして、メモリ利用状況収集の処理が終了する。
【０１２７】
（Ｓ５３）メモリ状況管理部１９０は、ｕｓｅｍｉｎ＜ｕｓｅｉであるか否かを判定する。ｕｓｅｍｉｎ＜ｕｓｅｉの場合、ステップＳ５５に処理が進む。ｕｓｅｍｉｎ≧ｕｓｅｉの場合、ステップＳ５４に処理が進む。
【０１２８】
（Ｓ５４）メモリ状況管理部１９０は、メモリ状況管理表１３３にｕｓｅｍｉｎ＝ｕｓｅｉおよびｈｏｌｄｉを記録する。そして、メモリ利用状況収集の処理が終了する。
（Ｓ５５）メモリ状況管理部１９０は、メモリ状況管理表１３３にメモリ使用情報を記録する。具体的には、メモリ状況管理部１９０は、ｕｓｅｔ、ｕｓｅｐｔおよびｈｏｌｄｐｔを、メモリ状況管理表１３３に記録する。そして、メモリ利用状況収集の処理が終了する。
【０１２９】
図１７は、ページアウト制御の例を示すフローチャートである。
ページアウト制御の処理は、ステップＳ４５に相当する。
（Ｓ６０）メモリ状況管理部１９０は、メモリ状況管理表１３３の情報を取得する。
【０１３０】
（Ｓ６１）メモリ状況管理部１９０は、式（１）、（２）、（３）に基づいて、各プロセスが保持可能な空きメモリの最大値ｈｏｌｄｌｉｍｉｔｐｔをプロセス毎に計算する。
（Ｓ６２）メモリ状況管理部１９０は、プロセスを１つ選択する。
【０１３１】
（Ｓ６３）メモリ状況管理部１９０は、選択したプロセスの空きメモリ保持量ｈｏｌｄｐｔが最大値ｈｏｌｄｌｉｍｉｔｐｔよりも大きいか（ｈｏｌｄｐｔ＞ｈｏｌｄｌｉｍｉｔｐｔであるか）否かを判定する。ｈｏｌｄｐｔ＞ｈｏｌｄｌｉｍｉｔｐｔの場合、ステップＳ６５に処理が進む。ｈｏｌｄｐｔ≦ｈｏｌｄｌｉｍｉｔｐｔの場合、ステップＳ６４に処理が進む。
【０１３２】
（Ｓ６４）メモリ状況管理部１９０は、該当のプロセスについて、通信用メモリ１３１に保持しているメモリ量を維持する（ページアウトを行わない）。そして、ステップＳ６７に処理が進む。
【０１３３】
（Ｓ６５）メモリ状況管理部１９０は、該当のプロセスについて、式（４）により、ページアウトするメモリ量ｓｅｔ＿ｆｒｅｅｐｔを計算する。
（Ｓ６６）メモリ状況管理部１９０は、該当のプロセスからｒｅｇａｉｎ＿ｆｒｅｅで通知された空き領域のうち、ｓｅｔ＿ｆｒｅｅｐｔに相当するサイズの領域をページアウトするようメモリ管理部１６１に指示する。
【０１３４】
（Ｓ６７）メモリ状況管理部１９０は、該当のジョブの全てのプロセスを選択済であるか否かを判定する。全てのプロセスを選択済の場合、ページアウト制御の処理が終了する。未選択のプロセスがある場合、ステップＳ６２に処理が進む。
【０１３５】
このように、メモリ状況管理部１９０は、一時的に使用されていない部分領域（部分バッファ）をページアウトする際、ＲＡＭ１３０の全体の使用量が増加に転じる前における通信用メモリ１３１のうちのＭＰＩ通信ライブラリにより使用されていない領域のサイズの履歴に基づいて、ページアウトする部分領域のサイズを決定する。
【０１３６】
また、メモリ状況管理部１９０は、ＭＰＩ通信ライブラリを利用する複数のプロセスそれぞれから一時的に使用されていない部分領域（部分バッファ）の情報を取得する。そして、メモリ状況管理部１９０は、部分領域のページアウトの際、各プロセスによる通信用メモリ１３１の使用量の比に応じて（例えば、式（３））、ページアウトする部分領域のサイズをプロセス毎に決定する。
【０１３７】
これにより、ページアウト対象のサイズを適切に決定でき、ページイン／ページアウトが頻発することを抑えながら、ＲＡＭ１３０の利用効率を向上し、ジョブ実行性能を向上することができる。
【０１３８】
図１８は、ジョブの通信用メモリの使用量の変化の例を示す図である。
グラフＧ４０は、横軸を時間、縦軸を通信用メモリ１３１のサイズとし、メモリ状況管理部１９０によるページアウト制御を行う場合の、あるジョブによる通信用メモリ１３１の使用量の変化の例を示している。
【０１３９】
グラフＧ４０において、領域Ｒ２１は、ジョブに割り当てられている通信用メモリ１３１の空き領域（ｆｒｅｅ）を示す。領域Ｒ２２は、通信用メモリ１３１のうちジョブにより使用されている領域（ｕｓｅ）を示す。領域Ｒ２３は、通信用メモリ１３１のうちジョブにより使用されていないが保持されている領域（ｈｏｌｄ）を示す。該当のジョブに割り当てられている通信用メモリ１３１のサイズは、１０．０ＧＢであるとする。
【０１４０】
グラフＧ４０の例によれば、時刻ｔ９でメモリ使用量が極大となった後、時刻ｔ１５でメモリ使用量が極小となっている。この場合、メモリ状況管理部１９０は、時刻ｔ１５の直後に、通信用メモリ１３１のうちの一部の領域をページアウトする。このため、時刻ｔ１５の直後に、通信用メモリ１３１のうちの保持サイズが減少し、空きサイズが増加している。その後、メモリ使用量の次の極大点となる時刻ｔ２１まで、ジョブのメモリ使用量（使用サイズ）は増加するが、保持サイズと使用サイズとの和が上限値（１０．０ＧＢ）よりも小さくなるように抑えられている。
【０１４１】
図１９は、メモリ領域確保の例を示すシーケンス図である。
ここでは、２つのプロセス１８０，１８０ａを例示して、図１８の時刻ｔ１５以降におけるメモリ領域確保の流れの一例を説明する。通信用メモリ１３１のうち、プロセス１８０，１８０ａにより合計で最大５ＧＢを通信バッファとして利用可能であるとする。
【０１４２】
時刻ｔ１５〜ｔ１６の間に、プロセス１８０は、通信用メモリ１３１のうち３ＧＢを利用して通信を行う。この間、通信用メモリ１３１は３ＧＢが利用され、２ＧＢが空きとなる。通信が終わると、プロセス１８０は、当該３ＧＢの領域を保持する。
【０１４３】
時刻ｔ１６〜ｔ１８の間に、プロセス１８０ａは、通信用メモリ１３１のうち４ＧＢを利用して通信を行うとする。例えば、メモリ状況管理部１９０は、プロセス１８０による保持サイズ３ＧＢのうちの２ＧＢをページアウトさせる。すると、通信用メモリ１３１の既存の２ＧＢの空きに加えて、２ＧＢが空きとなり、プロセス１８０ａは、合計で４ＧＢを利用して通信を行う。プロセス１８０の保持サイズは、１ＧＢとなる。
【０１４４】
時刻ｔ１８〜ｔ１９の間に、プロセス１８０ａが通信を終了すると、４ＧＢの領域を保持する。例えば、メモリ状況管理部１９０は、プロセス１８０ａによる保持サイズ４ＧＢのうちの２ＧＢをページアウトさせる。すると、通信用メモリ１３１に新たに２ＧＢの空きができる。この間、プロセス１８０の保持サイズは１ＧＢである。また、プロセス１８０ａの保持サイズは、２ＧＢとなる。
【０１４５】
時刻ｔ１９〜ｔ２１の間に、プロセス１８０は、通信用メモリ１３１のうち３ＧＢを利用して通信を行う。通信用メモリ１３１には、既に２ＧＢの空きがあり、プロセス１８０の保持サイズは１ＧＢである。したがって、プロセス１８０は直ちに３ＧＢの領域を獲得して、通信を行える。なお、時刻ｔ１９〜ｔ２１の間では、プロセス１８０ａの保持サイズは２ＧＢとなる。
【０１４６】
次に、メモリ状況管理部１９０によるページアウト制御を行わない場合の比較例を説明する。
図２０は、ジョブの通信用メモリの使用量の変化の第１の比較例を示す図である。
【０１４７】
図２０（Ａ）は、グラフＧ５０を示している。グラフＧ５０の横軸は時間であり、縦軸は通信用メモリ１３１のサイズである。グラフＧ５０は、ジョブに割り当てられた通信用メモリ１３１のサイズが十分大きい場合のジョブの通信用メモリ１３１の使用量の変化の例を示す。具体的には、ジョブによる使用サイズと保持サイズとの合計の最大値が１１．０ＧＢであるのに対して、通信用メモリ１３１の上限サイズが１２．０ＧＢの場合である。
【０１４８】
例えば、グラフＧ５０によれば、時刻ｔ９でメモリ使用量が極大となり、その後、メモリ使用量は減少に転じて、時刻ｔ１５でメモリ使用量が極小となる。更にその後、メモリ使用量は増加に転じて、時刻ｔ２１でメモリ使用量が再び極大となり、その後メモリ使用量は減少に転じる。
【０１４９】
この場合、通信用メモリ１３１は実際に利用される最大サイズよりも大きな領域をもつので、プロセス間でメモリ領域を融通しなくてもよい。すなわち、各プロセスは所要メモリ領域を自由に獲得し、ジョブ実行性能を確保可能であり、いわば理想的な状態である。しかし、このようにジョブに対して常に十分なサイズの通信用メモリ１３１を割り当てられるとは限らない。
【０１５０】
図２０（Ｂ）は、グラフＧ６０を示している。グラフＧ６０の横軸は時間であり、縦軸は通信用メモリ１３１のサイズである。グラフＧ６０は、ジョブに割り当てられた通信用メモリ１３１のサイズが不足する場合のジョブの通信用メモリ１３１の使用量の変化の例を示す。具体的には、ジョブによる使用サイズと保持サイズとの合計の最大値が１１．０ＧＢであるのに対して、通信用メモリ１３１の上限サイズが１０．０ＧＢの場合である。
【０１５１】
この場合、例えば、時刻ｔ１６のタイミングで、使用サイズと保持サイズとの合計が１０．０ＧＢに達し、当該タイミング以降、通信用メモリ１３１に不足が生じ、ジョブ実行性能が低下する。
【０１５２】
そこで、例えば、カーネル１６０の機能により、各プロセスのメモリ量が不足しないように通信用メモリ１３１の使用量を調整することも考えられる。
図２１は、ジョブの通信用メモリの使用量の変化の第２の比較例を示す図である。
【０１５３】
グラフＧ７０は、通信用メモリ１３１が不足しており、カーネル１６０の機能によるメモリ使用量調整を行う場合のジョブの通信用メモリ１３１の使用量の変化の例を示す。例えば、カーネル１６０は、時刻ｔ１６〜ｔ１７で通信用メモリ１３１の不足を検出すると、時刻ｔ１６〜ｔ１７において、一部のプロセスに対応する領域を解放することで、通信用メモリ１３１の空きを確保する。更に、各プロセスは、時刻ｔ２１〜ｔ２２で保持メモリが不足すると、新たにメモリ領域を獲得して、処理を継続する。このように、カーネル１６０の機能によりメモリ調整を行う場合、時刻ｔ１６〜ｔ１７および時刻ｔ２１〜ｔ２２で遅延が生じる。このため、図２０（Ａ）で例示した場合（時刻ｔ１５〜ｔ２１）よりも、時刻ｔ１５以降の処理サイクルの終了時間（グラフＧ７０の時刻ｔ２３）が遅くなる。次に、グラフＧ７０に対応するメモリ領域確保の比較例を説明する。
【０１５４】
図２２は、メモリ領域確保の比較例を示すシーケンス図である。
ここでは、２つのプロセス１８０，１８０ａを例示して、図２１の時刻ｔ１５以降におけるメモリ領域確保の流れの比較例を説明する。通信用メモリ１３１のうち、プロセス１８０，１８０ａにより合計で最大５ＧＢを通信バッファとして利用可能であるとする。
【０１５５】
時刻ｔ１５〜ｔ１６の間に、プロセス１８０は、通信用メモリ１３１のうち３ＧＢを利用して通信を行う。この間、通信用メモリ１３１は３ＧＢが利用され、２ＧＢが空きとなる。通信が終わると、プロセス１８０は、当該３ＧＢの領域を保持する。
【０１５６】
時刻ｔ１６以降に、プロセス１８０ａは、通信用メモリ１３１のうち４ＧＢを利用して通信を行う予定であるとする。時刻ｔ１６では、通信用メモリ１３１のうち３ＧＢをプロセス１８０が保持し、２ＧＢが空きである。したがって、プロセス１８０ａのために２ＧＢが不足する。このため、時刻ｔ１６〜ｔ１７において、カーネル１６０は、プロセス１８０による保持サイズ３ＧＢの全てを解放させる。すると、通信用メモリ１３１のうちの５ＧＢが空きとなる。時刻ｔ１６〜ｔ１７の解放処理では、カーネル１６０による空きメモリの検索や他プロセスが保持する空きメモリの解放に時間を要する。
【０１５７】
時刻ｔ１７〜ｔ２１の間に、プロセス１８０ａは、通信用メモリ１３１のうち４ＧＢを利用して通信を行う。この間、通信用メモリ１３１は４ＧＢが利用され、１ＧＢが空きとなる。通信が終わると、プロセス１８０ａは、当該４ＧＢの領域を保持する。
【０１５８】
時刻ｔ２１以降に、プロセス１８０は、通信用メモリ１３１のうち３ＧＢを利用して通信を行う予定であるとする。時刻ｔ２１では、通信用メモリ１３１のうち４ＧＢをプロセス１８０ａが保持し、１ＧＢが空きである。したがって、プロセス１８０のために２ＧＢが不足する。このため、時刻ｔ２１〜ｔ２２において、カーネル１６０は、プロセス１８０ａによる保持サイズ４ＧＢの全てを解放させる。すると、通信用メモリ１３１のうちの５ＧＢが空きとなる。プロセス１８０は、時刻ｔ１６〜ｔ１７で空きメモリの解放を要求されたときに、プロセスが保持する空きメモリを全て解放している。このため、時刻ｔ２１〜ｔ２２において、プロセス１８０は、通信用メモリ１３１を再利用するために、カーネル１６０への再申請を要する。そして、当該再申請にも時間を要する。
【０１５９】
時刻ｔ２２〜ｔ２３の間に、プロセス１８０は、通信用メモリ１３１のうち３ＧＢを利用して通信を行う。この間、通信用メモリ１３１は３ＧＢが利用され、２ＧＢが空きとなる。
【０１６０】
このように、図２１，図２２の例では、時刻ｔ１６〜ｔ１７および時刻ｔ２１〜ｔ２２でメモリ領域を解放するために遅延が発生し、ジョブの実行性能が低下する。
一方、図１８，図１９で例示したように、各プロセスの通信処理部により当面使用しない通信バッファの空き領域をメモリ状況管理部１９０に通知し、メモリ状況管理部１９０により空き領域のうち使用可能性が低い部分を定量的にページアウトする。これにより、有限の物理メモリ領域を有効に利用でき、ジョブの実行時間を短縮することができる。例えば、ページアウトを行うことで空きメモリ領域を予め作っておくことで、別プロセスでメモリ領域が所要されたときに、当該別プロセスに対してメモリ領域を迅速に割り当てることができる。図１８によれば、メモリ使用量の２つ目の極大値を取るタイミングが時刻ｔ２１であり、図２１におけるタイミング（時刻ｔ２３）よりも早い。このように、ジョブを高速に実行可能になる。
【０１６１】
なお、第１の実施の形態の情報処理は、処理部１１にプログラムを実行させることで実現できる。また、第２の実施の形態の情報処理は、ＣＰＵ１１０，１２０にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体２１３に記録できる。
【０１６２】
例えば、プログラムを記録した記録媒体２１３を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体２１３に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＲＡＭ１３０やフラッシュメモリ１４０などの記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【０１６３】
１  情報処理装置
１０，１０ａ，１０ｂ  ノード
１１  処理部
１２  メモリ
１３  記憶装置
１３ａ  退避領域
２０  通信バッファ
２１  短期不要バッファ
Ｇ１，Ｇ２  グラフ
【図１】
2020013306.tif 000007
【図２】
2020013306.tif 000008
【図３】
2020013306.tif 000009
【図４】
2020013306.tif 000010
【図５】
2020013306.tif 000011
【図６】
2020013306.tif 000012
【図７】
2020013306.tif 000013
【図８】
2020013306.tif 000014
【図９】
2020013306.tif 000015
【図１０】
2020013306.tif 000016
【図１１】
2020013306.tif 000017
【図１２】
2020013306.tif 000018
【図１３】
2020013306.tif 000019
【図１４】
2020013306.tif 000020
【図１５】
2020013306.tif 000021
【図１６】
2020013306.tif 000022
【図１７】
2020013306.tif 000023
【図１８】
2020013306.tif 000024
【図１９】
2020013306.tif 000025
【図２０】
2020013306.tif 000026
【図２１】
2020013306.tif 000027
【図２２】
2020013306.tif 000028