以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
図1は、第1の実施の形態の情報処理装置を示す図である。
情報処理装置1は、複数のノードを有する。複数のノードは、ノード10,10a,10bを含む。各ノードは、所定のネットワークにより相互に接続される。ノード10は、処理部11、メモリ12および記憶装置13を有する。
処理部11は、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などを含み得る。処理部11はプログラムを実行するプロセッサでもよい。ここでいう「プロセッサ」には、複数のプロセッサの集合(マルチプロセッサ)が含まれ得る。メモリ12は、RAM(Random Access Memory)などの揮発性記憶装置であり、ノード10の主記憶装置である。記憶装置13は、フラッシュメモリなどの不揮発性記憶装置であり、ノード10の補助記憶装置である。
ノード10a,10bもノード10と同様に、処理部、メモリおよび記憶装置を有する。以下では、主にノード10について説明するが、ノード10a,10bもノード10と同様の処理を行う。
ノード10は、計算に利用する情報を格納するためのメモリ領域をメモリ12に確保する。例えば、ある計算に関するジョブが情報処理装置1に入力されると、ノード10,10a,10bそれぞれに対して、当該ジョブに属するプロセスと呼ばれる処理単位が割り当てられる。各ノードは、計算に伴い、自身の計算結果を他のノードに提供するための通信を行う。
各ノードは、ノード間の通信を行うためのプログラム(通信ライブラリと称する)を実行する。例えば、ノード上のプロセスが、通信ライブラリを呼び出し、当該通信ライブラリの機能により、他のノード上のプロセスと通信する。
ノード10は、通信バッファ20をメモリ12に確保する。通信バッファ20は、ノード10で実行される通信ライブラリにより利用されるメモリ領域である。すなわち、メモリ12は、計算用の情報を格納する領域と、通信用の情報を格納する領域(通信バッファ20)とを含む。
処理部11は、通信バッファ20のうち一時的に使用されていない部分バッファ(短期不要バッファ21と称する)の情報を取得する。例えば、処理部11は、ノード10で実行されるプロセスによる通信バッファ20の使用状況に基づいて、短期不要バッファ21の情報を取得する。処理部11は、取得した情報に基づいて、通信バッファ20の短期不要バッファ21を特定する。
処理部11は、メモリ12の全体の使用量が増加中の場合に、短期不要バッファ21をページアウトする。ページアウトは、メモリ12に格納された情報をページと呼ばれる単位で、メモリ12以外の記憶装置13に移すことで、メモリ12の空きを増やすことを示す。ここで、グラフG1は、横軸を時間、縦軸をメモリ12の全体の使用量(メモリ使用量)とし、実線の矢印によりメモリ使用量が時間と共に増加する様子を示している。退避領域13aは、短期不要バッファ21がページアウトされたデータが格納される記憶装置13上の領域である。
処理部11は、短期不要バッファ21の全部をページアウトしてもよいし、短期不要バッファ21の一部をページアウトしてもよい。例えば、処理部11は、メモリ12の使用量増加時に許容される通信バッファ20のサイズの上限値を取得する。そして、処理部11は、現状の通信バッファ20のサイズのうち当該上限値を超過した差分のサイズを、ページアウト可能サイズとしてもよい。上限値は、予め定められてもよいし、メモリ12の利用状況に応じて計算されてもよい。そして、処理部11は、当該ページアウト可能サイズが、短期不要バッファ21のサイズ以上であれば、短期不要バッファ21の全部をページアウトしてもよい。一方、処理部11は、当該ページアウト可能サイズが、短期不要バッファ21のサイズ未満であれば、短期不要バッファ21の一部をページアウトしてもよい。
処理部11は、メモリ12の全体の使用量が減少中の場合に、ページアウトした部分バッファ(退避領域13aのデータ)をページインする。ページインは、記憶装置13にページアウトした情報(ページ)をメモリ12に戻して、当該情報に基づく処理(図1の例の場合は、通信ライブラリによるノード間通信の処理)を実行可能にすることを示す。ここで、グラフG2は、横軸を時間、縦軸をメモリ12の全体の使用量(メモリ使用量)とし、実線の矢印によりメモリ使用量が時間と共に低下する様子を示している。
情報処理装置1によれば、計算を実行するノード間の通信を行う通信ライブラリにより使用される通信バッファのうち一時的に使用されていない部分バッファの情報が取得される。通信バッファが属するメモリ12の全体の使用量が増加中の場合に部分バッファがページアウトされ、メモリ12の全体の使用量が減少中の場合に部分バッファがページインされる。
これにより、メモリ12を効率的に利用できる。具体的には次の通りである。
メモリ12の全体の使用量が増加中の場合、ノード10により、通信バッファに格納された情報を用いた計算処理が実行され、当該計算処理の負荷が高くなる傾向にあると推定される。この場合、部分バッファを記憶装置13にページアウトすることで、例えば、ページアウトにより増えたメモリ12の空き容量を、計算処理に割り当て可能になる。こうして、メモリ12の全体の使用量が増加中の場合には、部分バッファをページアウトすることでメモリ12を節約し、メモリ12の空き領域を計算処理などの他の処理に融通することも可能になる。
一方、メモリ12の全体の使用量が減少中の場合、ノード10による計算処理が収束し、当該計算処理の負荷が低くなる傾向にあると推定される。この場合、計算処理によるメモリ12の所要サイズが低下していくと考えられる。そこで、例えば、処理部11は、記憶装置13に格納された部分バッファ(退避領域13aのデータ)を、メモリ12(通信バッファ20)へページインする。ページインにより通信バッファ20に当該部分バッファが復元されると、ノード10は、当該部分バッファを用いた通信処理を行えるようになる。こうして、例えば、計算完了後、通信バッファ全域を利用してノード間通信を行うときに、部分バッファをページイン済の状態にでき、例えば、ノード間通信の開始直前に部分バッファのページインを行うよりも、ノード間通信を高速に開始できる。その結果、情報処理装置1におけるジョブの実行時間を短縮することができる。
なお、処理部11は、部分バッファのページアウトでは、メモリ12の全体の使用量が増加に転じる前における通信バッファ20のうちの通信ライブラリにより使用されていない領域のサイズの履歴に基づいて、ページアウトする部分バッファのサイズを決定してもよい。これにより、例えば、ページアウト対象サイズが大きくなり過ぎないように調整でき、当面利用されないと推定されるサイズを適切に決定できる。
また、処理部11は、部分バッファの情報の取得では、通信ライブラリを利用する複数のプロセスそれぞれから部分バッファの情報を取得してもよい。そして、処理部11は、部分バッファのページアウトでは、各プロセスによる通信バッファ20の使用量の比に応じて、ページアウトする部分バッファのサイズをプロセス毎に決定してもよい。これにより、例えば、ページアウト対象サイズが大きくなり過ぎないようにプロセス毎に調整でき、当面利用されないと推定されるサイズを適切に決定できる。
更に、処理部11は、複数のプロセスのうちの第1のプロセスに対するページアウトにより生じたメモリ12の空き領域を、複数のプロセスのうちの第2のプロセスに割り当ててもよい。これにより、複数のプロセスによる計算処理を効率的に実行できる。
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の並列処理装置の例を示す図である。
並列処理装置50は、計算ノード100,100a,100b,100c,・・・および管理ノード200を有する。計算ノード100,100a,100b,100c,・・・および管理ノード200は、並列処理装置50における管理用のネットワーク51に接続されている。また、計算ノード100,100a,100b,100c,・・・は、例えば、メッシュ結合またはトーラス結合といった直接網により相互に接続される。あるいは、計算ノード100,100a,100b,100c,・・・は、Fat−treeやcross−barなどの間接網により接続されてもよい。例えば、並列処理装置50は、第1の実施の形態の情報処理装置1の一例である。
計算ノード100,100a,100b,100c,・・・それぞれは、メモリとプロセッサとを備え、管理ノード200により割り当てられたジョブに応じた複数のプロセスを並列に実行する。各プロセスは、計算の実行および他のプロセスとの通信を交互に繰り返し行うことで、当該ジョブを実行する。計算ノード100,100a,100b,100c,・・・それぞれは、第1の実施の形態のノード10,10a,10bの一例である。
管理ノード200は、ユーザによるジョブの入力を受け付け、計算ノード100,100a,100b,100c,・・・に対するジョブの割り当てを行う。また、管理ノード200は、割り当て先の計算ノードに対するジョブの実行を指示する。
ここで、現在、大規模な演算処理(地震予知や天気予報など)を行うシミュレーションを高速に実行するために、複数個のプロセッサによる並列処理が用いられている。並列処理では、複数のプロセスを同時に実行する際、プロセス間の大量通信が行われ得る。ここで、プロセス間通信には、MPI(Message Passing Interface)と呼ばれる通信ライブラリが用いられる。MPIでは、当面利用されないページも、メモリのバッファ上に占有しており、並列処理装置50全体として、比較的大きなバッファをメモリに占有する。そこで、各計算ノードは、MPIにより占有されるメモリ領域を低減し、メモリの利用効率を向上する機能を提供する。
図3は、計算ノードのハードウェア例を示すブロック図である。
計算ノード100は、CPU110,120、RAM130、フラッシュメモリ140および通信インタフェース150を有する。各ハードウェアは計算ノード100のバスに接続されている。計算ノード100a,100b,100c,・・・および管理ノード200も計算ノード100と同様のハードウェアを用いて実現できる。
CPU110は、計算ノード100の情報処理を制御するプロセッサである。CPU110は、コア111,112,113,114を有する。コア111,112,113,114は、演算を実行する。CPU120もCPU110と同様にコア121,122,123,124を有する。計算ノード100は、複数のプロセスをCPU110,120を用いて並列に実行することができる。
RAM130は、計算ノード100の主記憶装置である。RAM130は、CPU110,120が実行するプログラムやCPU110,120が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。RAM130は、CPU110,120によって共有される共有メモリである。RAM130は、CPU110,120に実行させるプログラムの少なくとも一部を一時的に記憶する。RAM130は、CPU110,120による処理に用いられる各種データを記憶する。
フラッシュメモリ140は、計算ノード100の補助記憶装置である。フラッシュメモリ140は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。また、フラッシュメモリ140は、RAM130に対するスワップエリアとして用いられる。なお、計算ノード100は、フラッシュメモリ140に代えて、HDD(Hard Disk Drive)などの他の種類の補助記憶装置を備えてもよい。
通信インタフェース150は、ネットワーク51に接続され、ネットワーク51を介して他の計算ノードや管理ノード200と通信を行うインタフェースである。通信インタフェース150は、ネットワーク51を介して管理ノード200からプログラムを受信し、RAM130やフラッシュメモリ140に格納することもある。当該プログラムは、例えば、CPU110,120によって実行される。
図4は、管理ノードのハードウェア例を示すブロック図である。
管理ノード200は、CPU201、RAM202、HDD203、画像信号処理部204、入力信号処理部205、媒体リーダ206および通信インタフェース207を有する。
CPU201は、プログラムの命令を実行するプロセッサである。CPU201は、HDD203に記憶されたプログラムやデータの少なくとも一部をRAM202にロードし、プログラムを実行する。なお、CPU201は複数のプロセッサコアを含んでもよい。また、管理ノード200は複数のプロセッサを有してもよい。
RAM202は、CPU201が実行するプログラムやCPU201が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。
HDD203は、OSやミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、管理ノード200は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
画像信号処理部204は、CPU201からの命令に従って、管理ノード200に接続されたディスプレイ211に画像を出力する。ディスプレイ211としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなど、任意の種類のディスプレイを用いることができる。
入力信号処理部205は、管理ノード200に接続された入力デバイス212から入力信号を取得し、CPU201に出力する。入力デバイス212としては、マウスやキーボードなどを用いることができる。また、管理ノード200に、複数の種類の入力デバイスが接続されていてもよい。
媒体リーダ206は、記録媒体213に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体213として、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
媒体リーダ206は、例えば、記録媒体213から読み取ったプログラムやデータを、RAM202やHDD203などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU201によって実行される。なお、記録媒体213は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体213やHDD203を、コンピュータ読み取り可能な記録媒体と言うことがある。
通信インタフェース207は、ネットワーク51に接続され、ネットワーク51を介して計算ノード100,100a,100b,100c,・・・と通信を行うインタフェースである。通信インタフェース207は、HDD203に格納されたプログラムや、記録媒体213に格納されたプログラムを、ネットワーク51を介して、計算ノード100,100a,100b,100c,・・・に送信することもある。
図5は、計算ノードの機能例を示すブロック図である。
計算ノード100は、カーネル160、ジョブ管理部170、プロセス180,180a,180bおよびメモリ状況管理部190を有する。カーネル160は、計算ノード100のOSの中枢のプログラムである。プロセス180,180a,180bは、計算ノード100が実行するジョブプログラムの実行単位である。ジョブ管理部170およびメモリ状況管理部190は、CPU110,120により所定のプログラムが実行されることで実現される。
カーネル160は、ジョブ管理部170により依頼されたプロセスの起動を行う。カーネル160は、メモリ管理部161を有する。メモリ管理部161は、RAM130におけるメモリ領域の獲得や解放を管理する。ここで、RAM130は、通信用メモリ131および計算用メモリ132を有する。通信用メモリ131は、MPI通信に用いられる通信バッファを提供するメモリ領域である。通信バッファは、プロセス毎に設けられる。計算用メモリ132は、各プロセスの計算処理に用いられるメモリ領域である。
ジョブ管理部170は、CPU110,120によるジョブの実行を管理する。ジョブ管理部170は、ジョブを実行するための複数プロセスの起動をカーネル160に依頼する。図5では、3つのプロセスを例示しているが、プロセスの数は2または4以上でもよい。ジョブ管理部170は、ジョブの実行に応じて、メモリ状況管理部190の有効化および無効化を行う。
プロセス180,180a,180bは、ジョブに関する計算の実行単位である。プロセス180,180a,180bは、通信用メモリ131および計算用メモリ132から処理に利用されるメモリ領域を獲得する。プロセス180は通信処理部181を有する。
通信処理部181は、通信用メモリ131を用いてプロセス間通信を行う。プロセス間通信は、計算ノード100上のプロセス間において行われることもあるし、異なる計算ノード上のプロセス間において行われることもある。通信処理部181は、MPI通信ライブラリにより実現される。プロセス180a,180bも、プロセス180と同様に、プロセス間通信を行う通信処理部を有する。
ここで、MPI通信には、次の特徴がある。第1に、ジョブ毎の使用メモリ量に上限がある。第2に、プロセス間通信によるメモリ利用完了後も、該当のメモリ領域をすぐには解放せず、再利用するために保持する。第3に、プロセス間通信は、通信用メモリ131に確保されたバッファ(通信バッファ)を経由する。第4に、プロセスが所要するメモリ量が不足する場合、ジョブの使用メモリ量の上限内で、どのプロセスにも保持されていない空きメモリを利用する。第5に、当該空きメモリを確保できない場合、プロセスは、他プロセスが保持する空きメモリの解放を要求する。第6に、最終的にRAM130のメモリ量が不足する場合、プロセスは終了する。
メモリ状況管理部190は、プロセス180,180a,180bによるRAM130の利用状況を管理する。メモリ状況管理部190は、プロセス180,180a,180bによるRAM130の利用状況に応じて、通信用メモリ131のうち、一時的に利用されていない部分領域のページアウトや、当該部分領域のページインを制御する。例えば、メモリ状況管理部190は、該当の部分領域のページアウトやページインを、メモリ管理部161に指示することで、当該部分領域のページアウトやページインの実行を制御する。ここで、ページアウトは、該当の部分領域を、通信用メモリ131からフラッシュメモリ140に移し、通信用メモリ131の空き領域を増やす処理である。ページインは、フラッシュメモリ140にページアウトされた部分領域を、通信用メモリ131に戻す処理である。
なお、計算ノード100a,100b,100c,・・・も計算ノード100と同様の機能を有する。
図6は、ページイン/ページアウトを行う期間の例を示す図である。
グラフG10は、横軸を時間T、縦軸をRAM130の全体のメモリ使用量Mとして、時間Tと全体のメモリ使用量Mとの関係の例を表す。ここで、RAM130の全体のメモリ使用量Mは、通信用メモリ131の使用量と計算用メモリ132の使用量との合計である。
メモリ状況管理部190は、全体のメモリ使用量Mを監視する。メモリ状況管理部190は、全体のメモリ使用量Mが増加中の期間T1において、通信用メモリ131のうちの一時的に使用されていない部分領域をページアウトするよう制御する。一方、メモリ状況管理部190は、全体のメモリ使用量Mが減少中の期間T2において、ページアウトした部分領域をページインするよう制御する。
図7は、ページテーブルの例を示す図である。
メモリ管理部161は、ページ401の格納先をページテーブル402によって管理する。ページテーブル402は、RAM103の所定の領域に格納される。ページテーブル402は、ページの識別情報(例えば、プロセス側が認識する仮想メモリ領域におけるページを示す仮想アドレス)と、当該ページの物理フレーム(RAM130上の物理アドレスまたはフラッシュメモリ140上の物理アドレス)とをマッピングする情報である。例えば、ページテーブル402は、有効フラグと格納先情報とを含む。有効フラグは、該当のページが、RAM130上にあるか、フラッシュメモリ140上にあるかを示すフラグである。格納先情報は、該当のページのRAM130における格納アドレス、または、フラッシュメモリ140における格納アドレスを示すアドレス情報である。メモリ状況管理部190は、ページテーブル402に基づいて、各ページの格納先を特定することができる。
次に、計算ノード100の処理手順を説明する。なお、計算ノード100a,100b,100c,・・・も計算ノード100と同様の手順を実行する。
前述のように、ジョブ管理部170は、プロセス180,180a,180bが実行開始される前に、メモリ状況管理部190を有効化し、RAM130の使用状況の監視を開始させる。
図8は、計算ノードの処理例を示すフローチャートである。
メモリ状況管理部190は、下記の手順を、例えば所定の周期で繰り返し実行する。
(S10)メモリ状況管理部190は、プロセス180,180a,180bによる計算が実行中であるか否かを判定する。実行中である場合、ステップS11に処理が進む。実行中でない場合、処理が終了する。
(S11)メモリ状況管理部190は、RAM130の全体のメモリ使用量が増加中であるか否かを判定する。増加中である場合、ステップS12に処理が進む。増加中でない場合、ステップS13に処理が進む。ここで、メモリ状況管理部190は、例えば、RAM130の全体のメモリ使用量が増加中であることを複数回連続して観測した場合に、RAM130の全体のメモリ使用量が増加中であると判定してもよい。一方、メモリ状況管理部190は、全体のメモリ使用量が増加中であることを複数回連続して観測しない場合に、RAM130の全体のメモリ使用量が増加中でないと判定してもよい。
(S12)メモリ状況管理部190は、通信用メモリ131の一部のページアウトを、メモリ管理部161に指示する。例えば、メモリ状況管理部190は、プロセス180,180a,180bそれぞれの通信処理部から、通信用メモリ131のうち、一時的に使用していない部分領域の情報を取得する。メモリ状況管理部190は、当該部分領域をページアウトさせることで、通信用メモリ131の空き容量を増やす。メモリ管理部161は、指示に応じて該当の部分領域のページアウトを行い、当該部分領域に対応するページの格納先(フラッシュメモリ140のアドレス情報)をページテーブルに記録する。
(S13)メモリ状況管理部190は、RAM130の全体のメモリ使用量が減少中であるか否かを判定する。減少中である場合、ステップS14に処理が進む。減少中でない場合、ステップS10に処理が進む。ここで、メモリ状況管理部190は、例えば、RAM130の全体のメモリ使用量が減少中であることを複数回連続して観測した場合に、RAM130の全体のメモリ使用量が減少中であると判定してもよい。一方、メモリ状況管理部190は、全体のメモリ使用量が減少中であることを複数回連続して観測しない場合に、RAM130の全体のメモリ使用量が減少中でないと判定してもよい。
(S14)メモリ状況管理部190は、ステップS12でページアウトした部分領域のページインを、メモリ管理部161に指示する。例えば、メモリ状況管理部190は、ページテーブルを参照することで、ページアウトされたページを特定し、当該ページのページインを、メモリ管理部161に指示する。メモリ管理部161は、指示に応じて該当の部分領域のページインを行い、当該部分領域に対応するページの格納先(通信用メモリ131のアドレス情報)をページテーブルに記録する。そして、ステップS10に処理が進む。
計算ノード100によれば、RAM130を効率的に利用できる。RAM130の全体の使用量が増加中の場合、計算ノード100により、通信用メモリ131および計算用メモリ132に格納された情報を用いた計算処理が実行され、当該計算処理の負荷が高くなる傾向にあると推定される。この場合、通信用メモリ131のうち、当面使用されない部分領域をフラッシュメモリ140にページアウトすることで、例えば、ページアウトにより増えたRAM130の空き容量を、計算処理に割り当て可能になる。また、計算ノード100は、第1のプロセスに対するページアウトにより生じた通信用メモリ131の空き領域を、別のプロセスに割り当ててもよい。
こうして、RAM130の全体の使用量が増加中の場合には、通信用メモリ131の部分領域をページアウトすることでRAM130を節約し、RAM130の空き領域を計算処理などの他の処理に融通することも可能になる。
一方、RAM130の全体の使用量が減少中の場合、計算ノード100による計算処理が収束し、当該計算処理の負荷が低くなる傾向にあると推定される。この場合、計算処理によるRAM130の所要サイズが低下していくと考えられる。そこで、例えば、計算ノード100は、フラッシュメモリ140にページアウトした部分領域を、通信用メモリ131へページインする。これにより、通信用メモリ131に当該部分領域が復元される。計算ノード100は、当該部分領域を含む通信用メモリ131を用いた通信処理を行えるようになる。こうして、例えば、計算完了後、通信用メモリ131全域を利用してノード間通信を行うときに、該当の部分領域をページイン済の状態にでき、例えば、ノード間通信の開始直前にページインを行うよりも、ノード間通信を高速に開始できる。その結果、並列処理装置50におけるジョブの実行時間を短縮することができる。
ところで、RAM130の全体の使用量Mの増加が、各プロセスの通信処理部による通信処理に起因することもある。すなわち、RAM130の全体の使用量Mが増加する期間においても通信処理部による通信処理により通信用メモリ131が利用され得る。したがって、ページアウトを行う場合には、通信用メモリ131のうち、一時的に使用されていない部分領域の中から、当面利用されないと推定されるサイズを適切に特定して、ページアウトすることが好ましい。当該部分領域から比較的大きなサイズでページアウトを行うと、その直後に、通信処理により通信用メモリ131が所要されたときに、ページインが発生する可能性があり、余計なオーバーヘッドが生じることもあるからである。
そこで、計算ノード100は、下記に示すように、ページアウトするサイズを適切に調節する機能を提供する。
例えば、メモリ状況管理部190は、RAM130の全体の使用量が増加に転じる前における通信用メモリ131のうちの各プロセスの通信処理部により使用されていない領域のサイズの履歴に基づいて、部分領域のうちページアウトするサイズを決定する。また、メモリ状況管理部190は、MPI通信ライブラリを利用する複数のプロセスそれぞれから一時的に使用されていない部分領域の情報を取得する。そして、メモリ状況管理部190は、各プロセスによる通信用メモリ131の使用量の比に応じて、部分領域のうちページアウトするサイズをプロセス毎に決定する。このようなページアウト対象サイズの決定処理を、以下ではより具体的に説明する。
なお、以下の説明では、ジョブ単位の通信用メモリ131の使用量を、単に「ジョブメモリ使用量」と言うことがある。また、プロセス単位の通信用メモリ131の使用量を、単に「プロセスメモリ使用量」と言うことがある。
図9は、ジョブと各プロセスとの通信用メモリの使用量の関係の例を示す図である。
計算ノード100の各プロセスの通信処理部(MPI通信ライブラリ)が使用するメモリ量の和は、各プロセスが属するジョブ単位の通信用メモリ131の使用量である。グラフG20は、横軸を時間とし、縦軸を通信用メモリ131の使用量(サイズ)としている。サイズの単位は、例えば、GB(Giga Bytes)である。系列G21は、ジョブ単位の通信用メモリ131の使用量の変化を示す。系列G22は、計算ノード100で実行されるプロセスP1の通信用メモリ131の使用量の変化を示す。系列G23は、計算ノード100で実行されるプロセスP2の通信用メモリ131の使用量の変化を示す。系列G24は、計算ノード100で実行されるプロセスP3の通信用メモリ131の使用量の変化を示す。計算ノード100でプロセスP1,P2,P3が実行される場合、系列G22,G23,G24の和が系列G21となる。
各タイミングにおいて、通信用メモリ131の使用量が増加中のプロセスもあれば、当該使用量が減少中のプロセスもある。ジョブ単位では、通信用メモリ131の使用量が増加し、その後、減少するというサイクルとなる。このため、通信用メモリ131の使用量の増加によりRAM130の全体の使用量が増加することもある。また、通信用メモリ131の使用量の減少によりRAM130の全体の使用量が減少することもある。
図10は、メモリ状況管理表の例を示す図である。
メモリ状況管理表133は、通信用メモリ131の使用状況を示す情報である。メモリ状況管理表133は、メモリ状況管理部190により生成され、RAM130に格納される。メモリ状況管理表133は、値sum、usemax、usemin、usei、holdi、uset、usept、holdptを含む。
sumは、ジョブに割り当てられた通信用メモリの量(固定値)を示す。メモリ状況管理部190は、ジョブ開始前に、ジョブ管理部170からsumを取得する。
usemaxは、ジョブ単位の通信用メモリ131の使用量の直近の極大値を示す。メモリ状況管理部190は、極大値を観測すると、usemaxを更新する。usemaxは、ジョブ単位の通信用メモリ131の使用量が増加に転じる前の当該使用量の極大値となる。
useminは、ジョブ単位の通信用メモリ131の使用量の直近の極小値を示す。メモリ状況管理部190は、極小値を観測すると、useminを更新する。useminは、ジョブ単位の通信用メモリ131の使用量が増加に転じる前の当該使用量の極小値となる。
useiは、usemaxからuseminを観測した間の時間T間隔毎のジョブ単位の通信用メモリ131の使用量を示す。タイミング番号i(i=0,1,2,・・・)は、各観測のタイミングを示す番号である。メモリ状況管理部190は、極大値usemaxから極小値useminを観測する間の各観測のタイミングでuseiを記録する。また、時間Tは予め設定される周期である。
holdiは、usemaxからuseminを観測した間の時間T間隔毎のジョブ単位の通信用メモリ131における保持領域(確保されているが利用されていない領域)のサイズの履歴を示す。
usetは、極小値useminの観測後、t回目のジョブメモリ獲得時のジョブ単位の通信用メモリ131の使用量を示す。メモリ状況管理部190は、当該極小値の観測後、該当のジョブが通信用メモリ131の領域を獲得する際に、usetを更新し、最新のタイミングtの値のみを保存する。
useptは、極小値useminの観測後、t回目のジョブメモリ獲得時のプロセス毎の通信用メモリ131の使用量を示す。プロセス番号p(p=0,1,2,・・・)は、プロセスの識別番号である。メモリ状況管理部190は、当該極小値の観測後、該当のジョブが通信用メモリ131の領域を獲得する際に、useptを更新し、最新のタイミングtの値のみを保存する。
holdptは、極小値useminの観測後、t回目のジョブメモリ獲得時のプロセス毎に保持している通信用メモリ131の領域(保持メモリ)のうちの空きメモリ量を示す。メモリ状況管理部190は、当該極小値の観測後、該当のジョブが通信用メモリ131の領域を獲得する際に、holdptを更新し、最新のタイミングtの値のみを保持する。
図11は、通信用メモリの使用量の変化と各変数との関係の例を示す図である。
グラフG30は、横軸を時間、縦軸を通信用メモリ131のサイズとし、通信用メモリ131の使用量の変化と図10で示した各変数との関係の例を示している。
グラフG30において、領域R11は、ジョブに割り当てられている通信用メモリ131の空き領域(free)を示す。領域R12は、通信用メモリ131のうち各プロセスにより使用されている領域(use)を示す。領域R13,R14は、通信用メモリ131のうち各プロセスにより使用されていないが保持されている(確保されている)領域(hold)を示す。
例えば、該当のジョブに割り当てられている通信用メモリ131の上限サイズは、10.0GBであるとする。すると、sum=10.0(GB)である。
グラフG30の時刻t0から順に追っていくと、当初、通信用メモリ131の使用量は徐々に増加するため、メモリ状況管理部190は、usemaxを更新していく。時刻t9(タイミングA)で、使用量が極大値となり、それ以降は、通信用メモリ131の使用量は減少に転じる。このため、時刻t9において、メモリ状況管理部190は、usemaxに当該極大値を設定し、時刻t9の後、useminを更新していく。その間、メモリ状況管理部190は、useiおよびholdiを記録する。
そして、時刻t15(タイミングB)で、使用量が極小値となり、それ以降は、通信用メモリ131の使用量は増加に転じる。このため、時刻t15において、メモリ状況管理部190は、useminに当該極小値を設定し、それ以降のuseiおよびholdiの記録を停止し、uset、useptおよびholdptの記録を開始する。
メモリ状況管理部190は、こうして記録したメモリ状況管理表133の情報に基づいて、次のように通信用メモリ131におけるページアウト対象のサイズを決定する。
メモリ状況管理部190は、時刻t15の直後に通信用メモリ131の使用量が増加に転じたことを観測すると、式(1)によりholdavrを計算する。holdavrは、当該使用量の増加前の極大値と極小値とが観測されたタイミングの間の通信用メモリ131の空きメモリ量に基づく、時刻t15の直後において該当ジョブが保持可能な通信用メモリ131の空きメモリ量を示す。nは、当該極大値と極小値とが観測されたタイミングの間の通信用メモリ131の空きメモリ量を観測したタイミングの総回数を示す。具体的には、holdavrは、極大値と極小値とが観測されたタイミングの間の通信用メモリ131の空きメモリ量の平均値である。
メモリ状況管理部190は、式(2)によりholdlimittを計算する。holdlimittは、時刻t15の直後から通信用メモリ131の使用量の次の極大値までの各時点tにおいて該当ジョブが保持できる空きメモリの最大値を示す。
メモリ状況管理部190は、式(3)により、該当のジョブのプロセス毎に、holdlimitptを計算する。holdlimitptは、各時点tにおいて、該当のプロセスが保持できる空きメモリの最大量を示す。
メモリ状況管理部190は、式(4)により、プロセス毎に、set_freeptを計算する。set_freeptは、該当のプロセスが時点tでページアウトすべきメモリ量を示す。
ここで、set_freept>0のとき、メモリ状況管理部190は、該当のプロセスが保持する空きメモリ量のうち、set_freeptのサイズをページアウトする。一方、set_freept≦0のとき、メモリ状況管理部190は、該当のプロセスが保持する空きメモリ量をページアウトせずにそのまま保持する。なお、ページアウト対象とする部分領域は、例えば、所定のルールによって決定することができる。例えば、プロセスがアドレスの小さい領域から順に使用する場合、メモリ状況管理部190は、アドレスの大きい領域を優先的にページアウト対象の部分領域とすることが考えられる。
図12は、メモリ制御の例を示すシーケンス図である。
ジョブJ1は、計算ノード100によって実行されるジョブである。ジョブJ1は、プロセス180,180a,180bを含む(ただし、プロセス180bの図示を省略している)。
(ステップST1)ジョブ管理部170は、ジョブJ1の実行を開始する前に、メモリ状況管理部190を有効化する。メモリ状況管理部190は、メモリ状況管理表133を初期化する。
(ステップST2)メモリ状況管理部190は、メモリ管理部161からRAM130の使用状況の情報を収集し、メモリ状況管理表133に記録する。メモリ状況管理部190は、メモリ状況管理表133に基づいて、メモリ状況管理のアルゴリズム(後述する)を実行する。以降、メモリ状況管理部190は、時間Tの間隔で、メモリ管理部161から情報を収集する。
(ステップST3)ジョブJ1の実行が開始されると、プロセス180の通信処理部181は、mmapシステムコールをメモリ管理部161に発行することで、通信用メモリ131の通信バッファを獲得する(メモリ獲得)。他のプロセスの通信処理部も、同様にして通信バッファを獲得する。
(ステップST4)メモリ状況管理部190は、メモリ管理部161からRAM130の使用状況の情報を収集し、メモリ状況管理表133に記録する。メモリ状況管理部190は、メモリ状況管理表133に基づいて、メモリ状況管理のアルゴリズムを実行する。
(ステップST5)プロセス180の通信処理部181は、プロセス間通信の完了時にregain_free(addr,length)インタフェースを呼び出す。これにより、通信処理部181は、addr,lengthで指定した仮想領域に対してページテーブル402によりマッピングされている通信バッファのうちページアウト可能な領域(使用していない領域)があることを、メモリ状況管理部190に通知する。ここで、regain_freeインタフェースは、MPI通信ライブラリに新たに追加されるインタフェースである。addrは、ページアウト可能な仮想領域(プロセスが認識する仮想領域)の先頭アドレスを示す。lengthは、ページアウト可能な仮想領域のサイズを示す。addrおよびlengthの組み合わせによりページアウト可能なページ群が示され、当該ページ群は、ページテーブル402により通信用メモリ131上のアドレスにマッピングされる。他のプロセスの通信処理部も同様にして、regain_freeインタフェースによりページアウト可能なページ群を、メモリ状況管理部190に通知する。
(ステップST6)メモリ状況管理部190は、メモリ管理部161からRAM130の使用状況の情報を収集し、メモリ状況管理表133に記録する。メモリ状況管理部190は、メモリ状況管理表133に基づいて、メモリ状況管理のアルゴリズムを実行する。例えば、メモリ状況管理部190は、regain_freeを用いて通知された領域のうち、ページアウトすべきサイズを決定し、当該領域のページアウトをメモリ管理部161に通知する。メモリ管理部161は、通知に応じて、当該領域のページアウトを行う。
(ステップST7)通信処理部181は、次のプロセス間通信の開始前に、regain_malloc(addr,length)インタフェースを呼び出して、ページアウトされている通信バッファの部分領域の再確保を、メモリ状況管理部190に通知する。ここで、regain_mallocインタフェースは、MPI通信ライブラリに新たに追加されるインタフェースである。addrは、ページアウトされた部分領域のページアウト前の仮想領域の先頭アドレスである。lengthは、当該部分領域のサイズである。addrおよびlengthの組み合わせによりページイン対象のページ群が示され、当該ページ群は、ページテーブル402によりフラッシュメモリ140上のアドレスにマッピングされる。ページイン対象のページ群は、他の情報(他のページの識別情報)によりメモリ状況管理部190に通知されてもよい。
メモリ状況管理部190は、regain_mallocを用いて通知されたページについて、ページインにより再確保するか、他の空きメモリを新規に獲得するかを判断する。メモリ状況管理部190は、判断結果に応じて、該当の部分領域のページインのメモリ管理部161への通知、または、他の空きメモリの新規獲得のプロセス180への通知を行う。メモリ管理部161は、ページインの通知に応じて、該当の部分領域のページインを行う。また、プロセス180の通信処理部181は、他の空きメモリの新規獲得の通知に応じて、他の空きメモリの獲得(mmapシステムコールによる獲得)を行う。他のプロセスの通信処理部も同様にして、regain_mallocインタフェースによりページイン対象の部分領域を、メモリ状況管理部190に通知する。
(ステップST8)メモリ状況管理部190は、メモリ管理部161からRAM130の使用状況の情報を収集し、メモリ状況管理表133に記録する。メモリ状況管理部190は、メモリ状況管理表133に基づいて、メモリ状況管理のアルゴリズムを実行する。
(ステップST9)通信処理部181は、プロセス180に関する全ての通信が終了すると、munmapシステムコールをメモリ管理部161に発行することで、通信用メモリ131の通信バッファを解放する(メモリ解放)。
(ステップST10)メモリ状況管理部190は、メモリ管理部161からRAM130の使用状況の情報を収集し、メモリ状況管理表133に記録する。メモリ状況管理部190は、メモリ状況管理表133に基づいて、メモリ状況管理のアルゴリズムを実行する。
(ステップST11)ジョブ管理部170は、ジョブJ1の終了時に、メモリ状況管理部190を無効化する。
次に、計算ノード100による処理手順を更に詳細に説明する。まず、regain_mallocによるメモリ獲得時処理の手順を説明する。以下では、プロセス180を主に例示して説明するが、他のプロセスに関しても同様の手順となる。
図13は、メモリ獲得時処理の例を示すフローチャートである。
(S20)メモリ状況管理部190は、regain_malloc(addr,length)インタフェースにより、addr、lengthの組に応じたアドレス領域の指定を通信処理部181から受け付ける。ここで、regain_mallocにより指定されるアドレス領域は、プロセス180により認識される仮想領域におけるアドレス領域である。
(S21)メモリ状況管理部190は、指定されたアドレス領域が存在するか否かを判定する。当該アドレス領域が存在する場合(すなわち、当該アドレス領域に対応する部分領域がページアウト済の場合)、ステップS22に処理が進む。当該アドレス領域が未だ存在しない場合、ステップS23に処理が進む。
(S22)メモリ状況管理部190は、該当のアドレス領域に対応するページのページインをメモリ管理部161に指示する。すなわち、メモリ状況管理部190は、指定されたアドレス領域に対応するページアウト済の部分領域のフラッシュメモリ140上のアドレスをページテーブル402に基づいて特定する。そして、メモリ状況管理部190は、当該部分領域を通信用メモリ131の空き領域にページインするようメモリ管理部161に指示し、メモリ管理部161にページインを実行させる。そして、ステップS25に処理が進む。
(S23)メモリ状況管理部190は、regain_mallocで指定された新領域の獲得をプロセス180に指示し、通信処理部181によりmmapシステムコールにより新領域の獲得を試行させる。メモリ状況管理部190は、当該新領域の獲得結果を通信処理部181から取得する。
(S24)メモリ状況管理部190は、新領域の獲得に成功したか否かを判定する。成功した場合、ステップS25に処理が進む。失敗した場合(通信用メモリ131に空きがない場合)、ステップS26に処理が進む。なお、失敗した場合には、プロセス180の実行を継続できず、プロセス180およびプロセス180が属するジョブが異常終了することになる。
(S25)メモリ状況管理部190は、regain_mallocに応じた通信用メモリ131の使用状況の変化を、メモリ状況管理表133に記録する。具体的には、ジョブ単位の通信用メモリ131の使用量/空き容量や、該当のプロセス単位の通信用メモリ131の使用量/空き容量に変化が生じることになる。そして、メモリ獲得時処理が終了する。
(S26)メモリ状況管理部190は、異常に対する復帰処理を行う。そして、メモリ獲得時処理が終了する。
ここで、例えば、通信処理部181は、RAM130の全体の使用量が増加している(通信用メモリ131の使用量が増加している)ときに、regain_mallocにより新規領域の獲得をメモリ状況管理部190に指示することが考えられる。また、例えば、通信処理部181は、RAM130の全体の使用量が減少している(通信用メモリ131の使用量が減少している)ときに、regain_mallocによりメモリ状況管理部190にページインの指示を行うことが考えられる。
また、図13の例では、各プロセスのプロセス間通信のためのメモリ獲得時の手順を示したが、各プロセスにおける計算処理のためのメモリ獲得時にも、各プロセスは、図13と同様の手順により計算用のメモリ獲得を行える。すなわち、メモリ状況管理部190は、通信用メモリ131から計算用メモリ132へメモリ領域を融通することも可能である。
次に、プロセス180の通信完了時におけるregain_freeに応じた処理手順を説明する。
図14は、通信完了時処理の例を示すフローチャートである。
(S30)メモリ状況管理部190は、通信処理部181からregain_free(addr,length)インタフェースにより、addr、lengthの組に応じた空き領域を受け付ける。
(S31)メモリ状況管理部190は、プロセス180の実行が完了されたか否かを判定する。プロセス180の実行が完了された場合、ステップS32に処理が進む。プロセス180の実行が完了されていない場合、ステップS33に処理が進む。なお、前者の場合、通信処理部181は、munmapシステムコールをメモリ管理部161に発行し、通信用メモリ131における通信バッファの解放(メモリ解放)を行う。
(S32)メモリ状況管理部190は、メモリ管理部161によるプロセス180に対応するメモリ解放の結果を取得する。
(S33)メモリ状況管理部190は、regain_freeまたはメモリ管理部161によるメモリ解放の結果に応じて、メモリ状況管理表133を更新する。そして、通信完了時の処理が終了する。
次に、メモリ状況管理部190によるメモリ状況管理の手順を説明する。
図15は、メモリ状況管理の例を示すフローチャートである。
(S40)メモリ状況管理部190は、ジョブ実行開始時にジョブ管理部170により有効化される。
(S41)メモリ状況管理部190は、メモリ状況管理表133を初期化する。
(S42)メモリ状況管理部190は、時間Tの期間、スリープする。
(S43)メモリ状況管理部190は、メモリ利用状況収集を実行する。メモリ利用状況収集の処理の詳細は後述される。
(S44)メモリ状況管理部190は、該当ジョブの通信用メモリ131の使用量が増加中であるか否かを判定する。増加中の場合、ステップS45に処理が進む。増加中でない場合、ステップS46に処理が進む。
(S45)メモリ状況管理部190は、ページアウト制御を実行する。ページアウト制御の処理の詳細は後述される。なお、ステップS44で増加中と判定される期間が、最初の増加期間(例えば、図11の時刻t0〜t9)に相当する場合、メモリ状況管理部190は、ステップS45をスキップしてステップS46を実行してよい。
(S46)メモリ状況管理部190は、ジョブの実行が完了したか否かを判定する。ジョブの実行が完了した場合、メモリ状況管理部190は、ジョブ管理部170により無効化され、メモリ状況管理の処理が終了する。ジョブの実行が完了していない場合、ステップS42に処理が進む。
図16は、メモリ利用状況収集の例を示すフローチャートである。
メモリ利用状況収集の処理は、ステップS43に相当する。
(S50)メモリ状況管理部190は、メモリ管理部161からRAM130の使用情報を取得する。具体的には、メモリ状況管理部190は、メモリ管理部161から通信用メモリ131のジョブ単位の使用量および空き容量を取得し、また、プロセス単位の使用量および空き容量をプロセス毎に取得する。
(S51)メモリ状況管理部190は、usemax>useiであるか否かを判定する。usemax>useiの場合、ステップS53に処理が進む。usemax≦useiの場合、ステップS52に処理が進む。ここで、iは、今回の収集タイミングを示すタイミング番号である。
(S52)メモリ状況管理部190は、メモリ状況管理表133のsum以外の値をクリアし、usemax=useiをメモリ状況管理表133に記録する。そして、メモリ利用状況収集の処理が終了する。
(S53)メモリ状況管理部190は、usemin<useiであるか否かを判定する。usemin<useiの場合、ステップS55に処理が進む。usemin≧useiの場合、ステップS54に処理が進む。
(S54)メモリ状況管理部190は、メモリ状況管理表133にusemin=useiおよびholdiを記録する。そして、メモリ利用状況収集の処理が終了する。
(S55)メモリ状況管理部190は、メモリ状況管理表133にメモリ使用情報を記録する。具体的には、メモリ状況管理部190は、uset、useptおよびholdptを、メモリ状況管理表133に記録する。そして、メモリ利用状況収集の処理が終了する。
図17は、ページアウト制御の例を示すフローチャートである。
ページアウト制御の処理は、ステップS45に相当する。
(S60)メモリ状況管理部190は、メモリ状況管理表133の情報を取得する。
(S61)メモリ状況管理部190は、式(1)、(2)、(3)に基づいて、各プロセスが保持可能な空きメモリの最大値holdlimitptをプロセス毎に計算する。
(S62)メモリ状況管理部190は、プロセスを1つ選択する。
(S63)メモリ状況管理部190は、選択したプロセスの空きメモリ保持量holdptが最大値holdlimitptよりも大きいか(holdpt>holdlimitptであるか)否かを判定する。holdpt>holdlimitptの場合、ステップS65に処理が進む。holdpt≦holdlimitptの場合、ステップS64に処理が進む。
(S64)メモリ状況管理部190は、該当のプロセスについて、通信用メモリ131に保持しているメモリ量を維持する(ページアウトを行わない)。そして、ステップS67に処理が進む。
(S65)メモリ状況管理部190は、該当のプロセスについて、式(4)により、ページアウトするメモリ量set_freeptを計算する。
(S66)メモリ状況管理部190は、該当のプロセスからregain_freeで通知された空き領域のうち、set_freeptに相当するサイズの領域をページアウトするようメモリ管理部161に指示する。
(S67)メモリ状況管理部190は、該当のジョブの全てのプロセスを選択済であるか否かを判定する。全てのプロセスを選択済の場合、ページアウト制御の処理が終了する。未選択のプロセスがある場合、ステップS62に処理が進む。
このように、メモリ状況管理部190は、一時的に使用されていない部分領域(部分バッファ)をページアウトする際、RAM130の全体の使用量が増加に転じる前における通信用メモリ131のうちのMPI通信ライブラリにより使用されていない領域のサイズの履歴に基づいて、ページアウトする部分領域のサイズを決定する。
また、メモリ状況管理部190は、MPI通信ライブラリを利用する複数のプロセスそれぞれから一時的に使用されていない部分領域(部分バッファ)の情報を取得する。そして、メモリ状況管理部190は、部分領域のページアウトの際、各プロセスによる通信用メモリ131の使用量の比に応じて(例えば、式(3))、ページアウトする部分領域のサイズをプロセス毎に決定する。
これにより、ページアウト対象のサイズを適切に決定でき、ページイン/ページアウトが頻発することを抑えながら、RAM130の利用効率を向上し、ジョブ実行性能を向上することができる。
図18は、ジョブの通信用メモリの使用量の変化の例を示す図である。
グラフG40は、横軸を時間、縦軸を通信用メモリ131のサイズとし、メモリ状況管理部190によるページアウト制御を行う場合の、あるジョブによる通信用メモリ131の使用量の変化の例を示している。
グラフG40において、領域R21は、ジョブに割り当てられている通信用メモリ131の空き領域(free)を示す。領域R22は、通信用メモリ131のうちジョブにより使用されている領域(use)を示す。領域R23は、通信用メモリ131のうちジョブにより使用されていないが保持されている領域(hold)を示す。該当のジョブに割り当てられている通信用メモリ131のサイズは、10.0GBであるとする。
グラフG40の例によれば、時刻t9でメモリ使用量が極大となった後、時刻t15でメモリ使用量が極小となっている。この場合、メモリ状況管理部190は、時刻t15の直後に、通信用メモリ131のうちの一部の領域をページアウトする。このため、時刻t15の直後に、通信用メモリ131のうちの保持サイズが減少し、空きサイズが増加している。その後、メモリ使用量の次の極大点となる時刻t21まで、ジョブのメモリ使用量(使用サイズ)は増加するが、保持サイズと使用サイズとの和が上限値(10.0GB)よりも小さくなるように抑えられている。
図19は、メモリ領域確保の例を示すシーケンス図である。
ここでは、2つのプロセス180,180aを例示して、図18の時刻t15以降におけるメモリ領域確保の流れの一例を説明する。通信用メモリ131のうち、プロセス180,180aにより合計で最大5GBを通信バッファとして利用可能であるとする。
時刻t15〜t16の間に、プロセス180は、通信用メモリ131のうち3GBを利用して通信を行う。この間、通信用メモリ131は3GBが利用され、2GBが空きとなる。通信が終わると、プロセス180は、当該3GBの領域を保持する。
時刻t16〜t18の間に、プロセス180aは、通信用メモリ131のうち4GBを利用して通信を行うとする。例えば、メモリ状況管理部190は、プロセス180による保持サイズ3GBのうちの2GBをページアウトさせる。すると、通信用メモリ131の既存の2GBの空きに加えて、2GBが空きとなり、プロセス180aは、合計で4GBを利用して通信を行う。プロセス180の保持サイズは、1GBとなる。
時刻t18〜t19の間に、プロセス180aが通信を終了すると、4GBの領域を保持する。例えば、メモリ状況管理部190は、プロセス180aによる保持サイズ4GBのうちの2GBをページアウトさせる。すると、通信用メモリ131に新たに2GBの空きができる。この間、プロセス180の保持サイズは1GBである。また、プロセス180aの保持サイズは、2GBとなる。
時刻t19〜t21の間に、プロセス180は、通信用メモリ131のうち3GBを利用して通信を行う。通信用メモリ131には、既に2GBの空きがあり、プロセス180の保持サイズは1GBである。したがって、プロセス180は直ちに3GBの領域を獲得して、通信を行える。なお、時刻t19〜t21の間では、プロセス180aの保持サイズは2GBとなる。
次に、メモリ状況管理部190によるページアウト制御を行わない場合の比較例を説明する。
図20は、ジョブの通信用メモリの使用量の変化の第1の比較例を示す図である。
図20(A)は、グラフG50を示している。グラフG50の横軸は時間であり、縦軸は通信用メモリ131のサイズである。グラフG50は、ジョブに割り当てられた通信用メモリ131のサイズが十分大きい場合のジョブの通信用メモリ131の使用量の変化の例を示す。具体的には、ジョブによる使用サイズと保持サイズとの合計の最大値が11.0GBであるのに対して、通信用メモリ131の上限サイズが12.0GBの場合である。
例えば、グラフG50によれば、時刻t9でメモリ使用量が極大となり、その後、メモリ使用量は減少に転じて、時刻t15でメモリ使用量が極小となる。更にその後、メモリ使用量は増加に転じて、時刻t21でメモリ使用量が再び極大となり、その後メモリ使用量は減少に転じる。
この場合、通信用メモリ131は実際に利用される最大サイズよりも大きな領域をもつので、プロセス間でメモリ領域を融通しなくてもよい。すなわち、各プロセスは所要メモリ領域を自由に獲得し、ジョブ実行性能を確保可能であり、いわば理想的な状態である。しかし、このようにジョブに対して常に十分なサイズの通信用メモリ131を割り当てられるとは限らない。
図20(B)は、グラフG60を示している。グラフG60の横軸は時間であり、縦軸は通信用メモリ131のサイズである。グラフG60は、ジョブに割り当てられた通信用メモリ131のサイズが不足する場合のジョブの通信用メモリ131の使用量の変化の例を示す。具体的には、ジョブによる使用サイズと保持サイズとの合計の最大値が11.0GBであるのに対して、通信用メモリ131の上限サイズが10.0GBの場合である。
この場合、例えば、時刻t16のタイミングで、使用サイズと保持サイズとの合計が10.0GBに達し、当該タイミング以降、通信用メモリ131に不足が生じ、ジョブ実行性能が低下する。
そこで、例えば、カーネル160の機能により、各プロセスのメモリ量が不足しないように通信用メモリ131の使用量を調整することも考えられる。
図21は、ジョブの通信用メモリの使用量の変化の第2の比較例を示す図である。
グラフG70は、通信用メモリ131が不足しており、カーネル160の機能によるメモリ使用量調整を行う場合のジョブの通信用メモリ131の使用量の変化の例を示す。例えば、カーネル160は、時刻t16〜t17で通信用メモリ131の不足を検出すると、時刻t16〜t17において、一部のプロセスに対応する領域を解放することで、通信用メモリ131の空きを確保する。更に、各プロセスは、時刻t21〜t22で保持メモリが不足すると、新たにメモリ領域を獲得して、処理を継続する。このように、カーネル160の機能によりメモリ調整を行う場合、時刻t16〜t17および時刻t21〜t22で遅延が生じる。このため、図20(A)で例示した場合(時刻t15〜t21)よりも、時刻t15以降の処理サイクルの終了時間(グラフG70の時刻t23)が遅くなる。次に、グラフG70に対応するメモリ領域確保の比較例を説明する。
図22は、メモリ領域確保の比較例を示すシーケンス図である。
ここでは、2つのプロセス180,180aを例示して、図21の時刻t15以降におけるメモリ領域確保の流れの比較例を説明する。通信用メモリ131のうち、プロセス180,180aにより合計で最大5GBを通信バッファとして利用可能であるとする。
時刻t15〜t16の間に、プロセス180は、通信用メモリ131のうち3GBを利用して通信を行う。この間、通信用メモリ131は3GBが利用され、2GBが空きとなる。通信が終わると、プロセス180は、当該3GBの領域を保持する。
時刻t16以降に、プロセス180aは、通信用メモリ131のうち4GBを利用して通信を行う予定であるとする。時刻t16では、通信用メモリ131のうち3GBをプロセス180が保持し、2GBが空きである。したがって、プロセス180aのために2GBが不足する。このため、時刻t16〜t17において、カーネル160は、プロセス180による保持サイズ3GBの全てを解放させる。すると、通信用メモリ131のうちの5GBが空きとなる。時刻t16〜t17の解放処理では、カーネル160による空きメモリの検索や他プロセスが保持する空きメモリの解放に時間を要する。
時刻t17〜t21の間に、プロセス180aは、通信用メモリ131のうち4GBを利用して通信を行う。この間、通信用メモリ131は4GBが利用され、1GBが空きとなる。通信が終わると、プロセス180aは、当該4GBの領域を保持する。
時刻t21以降に、プロセス180は、通信用メモリ131のうち3GBを利用して通信を行う予定であるとする。時刻t21では、通信用メモリ131のうち4GBをプロセス180aが保持し、1GBが空きである。したがって、プロセス180のために2GBが不足する。このため、時刻t21〜t22において、カーネル160は、プロセス180aによる保持サイズ4GBの全てを解放させる。すると、通信用メモリ131のうちの5GBが空きとなる。プロセス180は、時刻t16〜t17で空きメモリの解放を要求されたときに、プロセスが保持する空きメモリを全て解放している。このため、時刻t21〜t22において、プロセス180は、通信用メモリ131を再利用するために、カーネル160への再申請を要する。そして、当該再申請にも時間を要する。
時刻t22〜t23の間に、プロセス180は、通信用メモリ131のうち3GBを利用して通信を行う。この間、通信用メモリ131は3GBが利用され、2GBが空きとなる。
このように、図21,図22の例では、時刻t16〜t17および時刻t21〜t22でメモリ領域を解放するために遅延が発生し、ジョブの実行性能が低下する。
一方、図18,図19で例示したように、各プロセスの通信処理部により当面使用しない通信バッファの空き領域をメモリ状況管理部190に通知し、メモリ状況管理部190により空き領域のうち使用可能性が低い部分を定量的にページアウトする。これにより、有限の物理メモリ領域を有効に利用でき、ジョブの実行時間を短縮することができる。例えば、ページアウトを行うことで空きメモリ領域を予め作っておくことで、別プロセスでメモリ領域が所要されたときに、当該別プロセスに対してメモリ領域を迅速に割り当てることができる。図18によれば、メモリ使用量の2つ目の極大値を取るタイミングが時刻t21であり、図21におけるタイミング(時刻t23)よりも早い。このように、ジョブを高速に実行可能になる。
なお、第1の実施の形態の情報処理は、処理部11にプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、CPU110,120にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体213に記録できる。
例えば、プログラムを記録した記録媒体213を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体213に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM130やフラッシュメモリ140などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。