(57)【要約】【課題】実行中のプロセスのマイグレーションの際のプロセスの停止時間を短縮する。【解決手段】第１ノードは、対象プロセスに割り当てられた記憶領域のうち、直近の所定期間内に対象プロセスによりアクセスされた第１領域を示すアクセス領域情報を記憶する。第１ノードは、移行指示を受信した場合、対象プロセスを停止し、停止時点の対象プロセスの状態を示す状態情報を第２ノードへ送信し、アクセス領域情報に基づいて、第１領域に格納された第１データを第２ノードへ送信する。第２ノードは、第１ノードから状態情報と第１データとを受信し、状態情報に基づいて対象プロセスを生成し、第１データを用いて対象プロセスを再開する。【選択図】図１
2017033375.tif 000002
【特許請求の範囲】
【請求項１】
プロセスを実行する処理実行単位であるノードのうち、第１ノードで実行中の対象プロセスを第２ノードに移行する並列計算システムであって、
前記第１ノードは、
前記対象プロセスに割り当てられた記憶領域のうち、直近の所定期間内に前記対象プロセスによりアクセスされた第１領域を示すアクセス領域情報を記憶する記憶部と、
前記対象プロセスの移行指示を受信した場合、前記対象プロセスを停止する停止制御部と、
停止時点の前記対象プロセスの状態を示す状態情報を送信し、前記アクセス領域情報に基づいて、前記第１領域に格納された第１データを送信する送信部と、
を備え、
前記第２ノードは、
前記状態情報と前記第１データとを受信する受信部と、
前記状態情報に基づいて前記対象プロセスを生成し、前記第１データを用いて、前記対象プロセスを再開する再開制御部と、
を備える
ことを特徴とする並列計算システム。
【請求項２】
前記送信部は、前記第１データの送信の完了後に、前記記憶領域のうちの前記第１領域以外の第２領域に格納された第２データを送信し、
前記受信部は、前記対象プロセスの実行中に、前記第２データを受信する
ことを特徴とする請求項１に記載の並列計算システム。
【請求項３】
前記アクセス領域情報は、前記対象プロセスを実行する中央演算処理装置に搭載されたメモリ管理ユニットにより、前記対象プロセスのページテーブルに記録された情報である
ことを特徴とする請求項１または２に記載の並列計算システム。
【請求項４】
前記第２ノードは、さらに、
前記対象プロセスにより、前記第２領域のうちデータの受信が完了していない領域に対するアクセスが発生した場合、前記対象プロセスを休眠させる休眠制御部と、
前記受信が完了していない領域のデータを受信した場合、休眠された前記対象プロセスを起床させる起床制御部と、
を有することを特徴とする請求項２に記載の並列計算システム。
【請求項５】
プロセスを実行する処理実行単位であるノードのうち、第１ノードで実行中の対象プロセスを停止し、
停止時点の前記対象プロセスの状態を示す状態情報を前記第１ノードから第２ノードに転送し、
前記第１ノードの記憶領域であって、前記対象プロセスに割り当てられた該記憶領域のうち、直近の所定期間内に前記対象プロセスによりアクセスされた第１領域を示すアクセス領域情報を記憶する記憶部に記憶された前記アクセス領域情報に基づいて、前記第１領域に格納された第１データを前記第１ノードから前記第２ノードに転送し、
前記第２ノードにおいて、転送された前記状態情報に基づいて対象プロセスを生成し、転送された前記第１データを用いて、前記対象プロセスを再開する、
処理をコンピュータが実行することを特徴とするマイグレーション方法。
【請求項６】
コンピュータに、
実行中の対象プロセスの移行指示を受信した場合、前記対象プロセスを停止し、
停止時点の前記対象プロセスの状態を示す状態情報を送信し、前記対象プロセスに割り当てられた記憶領域のうち、直近の所定期間内に前記対象プロセスによりアクセスされた第１領域を示すアクセス領域情報を記憶する記憶部に格納された前記アクセス領域情報に基づいて、前記第１領域に格納された第１データを送信する、
処理を実行させることを特徴とするマイグレーションプログラム。
【請求項７】
コンピュータに、
実行中の対象プロセスの移行指示を受信した場合に前記対象プロセスを停止するノードから、停止時点の前記対象プロセスの状態を示す状態情報と、前記対象プロセスに割り当てられた前記ノードの記憶領域のうち、直近の所定期間内に前記対象プロセスによりアクセスされた第１領域に格納されていた第１データとを受信し、
前記状態情報に基づいて前記対象プロセスを生成し、前記第１データを用いて、前記対象プロセスを再開する、
処理を実行させることを特徴とするマイグレーションプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列計算システム、マイグレーション方法、及びマイグレーションプログラムに関する。
【背景技術】
【０００２】
プロセスやソフトウェアなどをあるノードから他のノードへ移行する技術は、マイグレーションと呼ばれる。マイグレーションの一形態として、移行対象のプロセスやソフトウェアの停止時間を無視できるほど短くすることで、サービスを停止させずに移行を行うライブマイグレーションがある。ライブマイグレーションは、具体的には例えば、サーバ上のプロセスのノード間での移行やハイパーバイザ上の仮想機械（Virtual Machine（VM）)を移行する際に利用される。プロセスは、プログラムの実行単位である。ノードは、プロセスを実行する処理実行単位である。
【０００３】
例えば、ライブマイグレーションにより負荷の高いノードから負荷の低いノードへプロセスを移行することで、ノード間の負荷分散を行うことができる。また、例えば、メンテナンス等のためにノードの停止が発生する場合には、停止するノード上で稼動しているプロセスをライブマイグレーションにより他のノードへ退避させることで、プロセスの可用性を高めることができる。
【０００４】
マイグレーションに関して、以下の第１〜３の技術がある（例えば、特許文献１〜３参照）。
【０００５】
第１の技術において、マイグレーションの前に、第１仮想計算機は、第１仮想計算機に専用の第１専用メモリ内にオペレーティング・システムおよびアプリケーションを有する。第１仮想計算機の通信キューは、第１および第２コンピュータまたは第１および第２Logical Partitioning（ＬＰＡＲ）によって共用される共用メモリに常駐する。オペレーティング・システムおよびアプリケーションは、第１専用メモリから共用メモリにコピーされた後、共用メモリから第２コンピュータまたは第２ＬＰＡＲ内の第１仮想計算機に専用の第２専用メモリにコピーされる。第１仮想計算機は、第２コンピュータまたは第２ＬＰＡＲ内でレジュームされる。
【０００６】
第２の技術に係る装置は、論理パーティションのページの状態を自動的に追跡することによって論理的にパーティションされた環境でのファームウエア・マイグレーションを促進する。複数のページ状態に対応する複数個のエントリを有するテーブルを用いて論理パーティションのマイグレーションをプロセスは促進する。テーブル・エントリは論理パーティションがマイグレートする際に個々のページの状態を記録し、維持する。
【０００７】
第３の技術に係る装置は、Central Processing Unit（ＣＰＵ）とInput / Output（Ｉ／Ｏ）の間にスイッチを接続する。スイッチ内にメモリ書き込みを監視するメモリ監視機構と、メモリ上の各ページがdirtyかどうかを記憶するdirty bit配列とを用意する。メモリ監視機構はＩ／ＯからＣＰＵへのメモリ書き込みを監視し、メモリ書き込みのアドレスからどのページがdirtyになったかを判断し、dirty bit配列をアップデートする。dirty bit配列はページごとにdirty／非dirtyを記憶しており、ハイパーパイザから連続領域としてアクセスできる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００５−３２７２７９号公報
【特許文献２】特開２００８−２６９６００号公報
【特許文献３】国際公開第２０１２／０６３３３４号
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ライブマイグレーションにおいては、移行対象のプロセスに割り当てられたメモリの内容が移行元ノードから移行先ノードへ転送される。このような転送が移行対象のプロセスの動作中に行われると、転送中に転送対象のメモリの内容が書き換えられる虞がある。この場合、転送元と転送先とでメモリの内容が異なることとなるため、転送先においてプロセスを正常に継続実行できない。そのため、ライブマイグレーションにおいては、移行プロセスを停止させてからメモリの転送が行われ、メモリの転送完了後に移行先ノードでプロセスが再開される。
【００１０】
移行対象のプロセスが大量のメモリ空間を使用する場合、メモリの内容の転送には多くの時間がかかる。マイグレーションにおいて、メモリの内容の転送中は移行対象のプロセスが停止される。そのため、転送時間が長くなるとプロセスの停止時間も長くなる。
【００１１】
そこで、１つの側面では、本発明は、実行中のプロセスのマイグレーションの際のプロセスの停止時間を短縮することを目的とする。
【課題を解決するための手段】
【００１２】
一態様による並列計算システムは、第１ノード及び第２ノードを含む。並列計算システムは、プロセスを実行する処理実行単位であるノードのうち、第１ノードで実行中の対象プロセスを第２ノードに移行する。第１ノードは、記憶部、停止制御部、及び送信部を含む。記憶部は、対象プロセスに割り当てられた記憶領域のうち、直近の所定期間内に対象プロセスによりアクセスされた第１領域を示すアクセス領域情報を記憶する。停止制御部は、対象プロセスの移行指示を受信した場合、対象プロセスを停止する。送信部は、停止時点の対象プロセスの状態を示す状態情報を第２ノードへ送信し、アクセス領域情報に基づいて、第１領域に格納された第１データを第２ノードへ送信する。第２ノードは、受信部、及び再開制御部を含む。受信部は、第１ノードから状態情報と第１データとを受信する。再開制御部は、状態情報に基づいて対象プロセスを生成し、第１データを用いて対象プロセスを再開する。
【発明の効果】
【００１３】
一態様によれば、実行中のプロセスのマイグレーションの際のプロセスの停止時間を短縮することができる。
【図面の簡単な説明】
【００１４】
【図１】実施形態に係る並列計算システムの機能ブロック図の一例を示す。
【図２】実施形態に係る情報処理システムの構成の一例を示す。
【図３】実施形態に係る移行元ノードの構成の一例を示す。
【図４】実施形態に係るページテーブルの構成の一例を示す。
【図５】実施形態に係る移行先ノードの構成の一例を示す。
【図６】送信制御部による、移行元ノードのマイグレーション処理の詳細を図解したフローチャートの一例である。
【図７】受信制御部による、移行先ノードのマイグレーション処理の詳細を図解したフローチャートの一例である。
【図８】移行先ノードにおけるページフォルトハンドラの詳細を図解したフローチャートの一例である。
【図９】実施形態に係る移行元ノード及び移行先ノードのハードウェア構成の一例を示す。
【発明を実施するための形態】
【００１５】
図１は、実施形態に係る並列計算システムの機能ブロック図の一例を示す。図１において、並列計算システム１は、第１ノード２及び第２ノード３を含む。並列計算システム１は、第１ノード２で実行中の対象プロセスを第２ノード３に移行する。第１ノード２及び第２ノード３は、プロセスを実行する処理実行単位であるノードの一つである。
【００１６】
第１ノード２は、記憶部４、停止制御部５、及び送信部６を含む。記憶部４は、対象プロセスに割り当てられた記憶領域のうち、直近の所定期間内に対象プロセスによりアクセスされた第１領域を示すアクセス領域情報を記憶する。停止制御部５は、対象プロセスの移行指示を受信した場合、対象プロセスを停止する。送信部６は、停止時点の対象プロセスの状態を示す状態情報を第２ノード３へ送信し、アクセス領域情報に基づいて、第１領域に格納された第１データを第２ノード３へ送信する。
【００１７】
第２ノード３は、受信部７、再開制御部８、休眠制御部９、及び起床制御部１０を含む。受信部７は、第１ノード２から状態情報と第１データとを受信する。再開制御部８は、状態情報に基づいて対象プロセスを生成し、第１データを用いて対象プロセスを再開する。
【００１８】
第２ノード３では、第１領域のデータの転送が完了した時点で、対象プロセスを再開する。これにより、対象プロセスのすべてのメモリ空間のデータの転送が完了してからプロセスを再開する場合に比べ、移行におけるプロセスの停止時間を短縮することができる。特に、例えば科学技術計算におけるように、移行対象プロセスが扱うメモリ空間量が多い一方で、短い時間の間はプロセスの実行に使用されるメモリ空間量が少ない場合は、プロセスの停止時間の短縮効果は大きくなる。これは、対象プロセスの全メモリ空間に対して第１領域の占める割合が小さくなるためである。
【００１９】
送信部６は、第１データの送信の完了後に、記憶領域のうちの第１領域以外の第２領域に格納された第２データを第２ノード３へ送信する。受信部７は、対象プロセスの実行中に、第１ノード２から第２データを受信する。
【００２０】
第２ノード３は対象プロセスを再開した後に、第２データを受信する。これにより、第２ノード３は、第２データの受信と、対象プロセスの実行とを並行して行うことができる。これにより、対象プロセスのすべてのメモリ空間のデータの転送が完了してからプロセスを再開する場合に比べ、移行におけるプロセスの停止時間を短縮することができ、効率的なデータの転送が可能となる。
【００２１】
アクセス領域情報は、対象プロセスを実行する中央演算処理装置（ＣＰＵ）に搭載されたメモリ管理ユニットにより、対象プロセスのページテーブルに記録された情報である。このように構成することで、第１領域を特定するための情報を記録するために特別なソフトウェア等を組み込むことなく、メモリ管理ユニットのハードウェアにより実現することができる。また、対象プロセスのメモリ空間は、すべてメモリ管理ユニットを介してアクセスされるものであるので、データ領域を含むプロセスのメモリ空間の全てを対象として第１領域の特定が可能となる。
【００２２】
休眠制御部９は、対象プロセスにより、第２領域のうちデータの受信が完了していない領域に対するアクセスが発生した場合、対象プロセスを休眠させる。起床制御部１０は、受信が完了していない領域のデータを受信した場合、休眠された対象プロセスを起床させる。このように構成することで、未転送領域に対するアクセスが発生した場合に、再開された移行対象プロセスがエラー等で異常終了することを防ぐことができる。
【００２３】
（情報処理システムの構成）
図２は、実施形態に係る情報処理システムの構成の一例を示す。図２において、情報処理システム１５は、移行元ノード１６と移行先ノード１７を含む。移行元ノード１６と移行先ノード１７は、相互にデータの送受信が可能になるように接続される。実施形態では、マイグレーションにより、移行元ノード１６で動作中の移行対象プロセスが、移行先ノード１７に移行される。
【００２４】
情報処理システム１５では、例えば、移行対象のプロセスを含む複数のプロセスが動作し、それらのプロセスの各々が演算処理とプロセス間通信処理とを繰り返しながら並列に処理を進めるものであってもよい。情報処理システムは、例えば、並列計算機であってもよく、移行元ノード１６と移行先ノード１７を含む多数のノードを含んでもよい。
【００２５】
各ノードは、例えば、情報処理装置であってもよい。もしくは、各ノードは、例えば、同一または異なる物理サーバ上で稼動するハイパーバイザやＬＰＡＲ上に作成された仮想マシンであってもよい。
【００２６】
情報処理システム１５は、並列計算システム１の一例である。移行元ノード１６は、第１ノード２の一例である。移行先ノード１７は、第２ノード３の一例である。
【００２７】
（移行元ノードの構成）
図３は、実施形態に係る移行元ノードの構成の一例を示す。図３において、移行元ノード１６は、ＣＰＵ２１、メモリ２２、記憶装置２３、及び、通信インターフェース２４を含む。
【００２８】
ＣＰＵ２１は、演算部３１と、メモリ管理ユニット（Memory Management Unit（ＭＭＵ））３２を含む。
【００２９】
演算部３１は、ＣＰＵ２１の中核部分（コア）であり、演算処理を行う。演算部３１は、処理部４１及び送信制御部４２を含む。送信制御部４２は、停止制御部５及び送信部６の一例である。
【００３０】
処理部４１は、Operating System（ＯＳ）や移行対象のプロセスを実行する。ＯＳは、プロセスのメモリ管理を仮想メモリ方式により行う。仮想メモリ方式では、プロセスには、物理的なメモリ領域（物理メモリ領域）とは別の仮想的なメモリ領域（仮想メモリ領域）が割り当てられる。プロセスは、自身に割り当てられた仮想メモリ領域を認識してメモリアクセスを行う。物理メモリ領域、仮想メモリ領域は、それぞれ所定のサイズ毎に、物理ページ、仮想ページに分割される。物理ページ、仮想ページには、それぞれ、物理アドレス、仮想アドレスが割り当てられる。仮想アドレスの所定の範囲は仮想アドレス空間と呼ばれる。各プロセスに割り当てられる仮想アドレス空間は、他のプロセスの仮想アドレス空間に対して独立している。仮想ページは、物理ページに対応付けられる（マッピングされる）。
【００３１】
送信制御部４２は、移行元ノード１６におけるプロセスのマイグレーション処理を実行する。具体的には、送信制御部４２は、マイグレーション対象のプロセスに関する情報を移行先ノードに転送する処理を行う。マイグレーション処理の詳細は後ほど説明する。
【００３２】
ＭＭＵ３２は、演算部３１からのメモリアクセスに関する処理を行う。ＭＭＵ３２は、仮想メモリによるメモリ管理のための機能の一部を提供する。ＭＭＵ３２の機能の一部または全部は、ハードウェアにより実現される。
【００３３】
ＭＭＵ３２は、アクセス制御部４３とキャッシュ４４を含む。
アクセス制御部４３は、仮想アドレスを、その仮想アドレスにマッピングされた物理アドレスに変換する。アドレス変換は、仮想アドレスと物理アドレスのマッピングを示す情報を含むページテーブルに基づいて行われる。具体的には、アクセス制御部４３は、処理部４１からアクセス対象の仮想アドレスが入力されると、入力された仮想アドレスをページテーブルに基づいて物理アドレスに変換し、物理アドレスを処理部４１に返す。アクセス制御部４３から返された物理アドレスを用いて、処理部４１は実メモリにアクセスする。また、アクセス制御部４３は、メモリアクセスが発生した場合に、アクセスされた仮想ページを識別する情報をページテーブルに記録する。
【００３４】
キャッシュ４４は、アクセス制御部４３によるアドレス変換の高速化を図るための記憶装置である。アドレス変換ではページテーブルが使用されるが、このページテーブルの全体はメモリ２２に格納されている。キャッシュ４４は、ページテーブルの一部（サブセット）を記憶し、アクセス制御部４３は、ＭＭＵ３２上のキャッシュ４４に格納されたページテーブルのサブセットにアクセスすることで、アドレス変換の高速化を図る。キャッシュ４４は、具体的には例えば、Translation Lookaside Buffer（ＴＬＢ）である。
【００３５】
メモリ２２は、ページテーブル４５、プロセスのコンテキスト情報４６、及び各プロセスに割り当てられた物理ページ４７を記憶する。メモリ２２は、記憶部４の一例である。
【００３６】
ページテーブル４５は、仮想アドレスと物理アドレスの対応付け（マッピング）を示す情報を含む。ページテーブル４５は、ＭＭＵ３２によるアドレス変換において用いられる。ページテーブル４５の詳細は後ほど説明する。
【００３７】
コンテキスト情報４６は、プロセスの状態を示す情報である。マイグレーションにおいては、コンテキスト情報４６は、移行先ノード１７において、移行対象プロセスの停止時点の状態を再現するために用いられる。具体的には、コンテキスト情報４６は、プロセスが使用するレジスタの情報やファイル記述子の情報等を含む。尚、コンテキスト情報４６は、ＯＳにより動的に管理される。
【００３８】
物理ページ４７は、仮想ページにマッピングされる所定のサイズの物理記憶領域である。
【００３９】
記憶装置２３は、種々のデータを記憶する。記憶装置２３は、スワップ領域を含んでもよい。スワップ領域は、仮想メモリ管理において、メモリ２２上の領域が不足した場合に、データの一部を退避するために使用される領域である。
【００４０】
通信インターフェース２４は、移行先ノード１７に対してデータの送受信を行う。送信制御部４２により移行先ノード１７に送信されるデータは、通信インターフェース２４を介して送信される。
【００４１】
（ページテーブルの構成）
ここで、ページテーブル４５の構成について説明する。図４は、実施形態に係るページテーブルの構成の一例を示す。ページテーブル４５は、仮想アドレスと物理アドレスのマッピングを示す情報を含む。また、ページテーブル４５は、直近の所定期間内に各仮想ページに対するアクセスが発生したか否かを示す情報を含む。尚、ページテーブル４５は、プロセス毎に生成される。
【００４２】
具体的には、ページテーブル４５は、ページテーブルエントリ（Page Table Entry（ＰＴＥ））を含む。ＰＴＥは、それぞれ１つの仮想ページに対応し、仮想ページに割り当てられた物理ページの情報を格納する。図４（Ａ）は、ＰＴＥの構成の一例を示す。図４（Ａ）において、ＰＴＥは、「物理アドレス」、「Ｐ（Present）ビット」、「Ａ（Access）ビット」のデータ項目を含む。
【００４３】
「物理アドレス」は、仮想アドレスにマッピングされた物理アドレスを示す情報を記憶する。具体的には、「物理アドレス」には、物理メモリブロックの開始アドレスが格納される。尚、仮想アドレスは、ＰＴＥの配列のインデックスに対応する。
【００４４】
「Ｐビット」は、「物理アドレス」で示される物理ページが仮想ページに割り当てられているか否かを示す。すなわち、「Ｐビット」は、仮想アドレスと物理アドレスがマッピングされており、且つ、物理アドレスのデータが現在メモリ２２上に存在する（スワップアウトされていない）ことを示す。実施形態では、「Ｐビット」に「1」が設定されている場合、物理ページが割り当てられていることを示すものとする。「Ｐビット」に「0」が設定されている場合、物理ページが割り当てられていないことを示すものとする。「Ｐビット」の値の設定は、演算部３１（ＯＳ）により行われ、アクセス制御部４３による設定は行われない。
【００４５】
「Ａビット」は、「物理アドレス」で示される物理ページにアクセスが行われたか否かを示す。実施形態では、「Ａビット」に「1」が設定されている場合、対応する物理ページにアクセスが行われたことを示すものとする。「Ａビット」に「0」が設定されている場合、対応する物理ページにアクセスが行われていないことを示すものとする。「Ａビット」の値は、対応するページに対するアクセスが発生した場合に、アクセス制御部４３により「1」に設定される。また、「Ａビット」の値は、演算部３１（ＯＳ）により、定期的に「0」に設定される。尚、一度「Ａビット」の値がアクセス制御部４３により「1」に設定されたら、その後、アクセス制御部４３が「Ａビット」の値を「0」に変更することはない。「Ａビット」の情報は、アクセス制御情報の一例である。
【００４６】
尚、ＰＴＥは、物理ページの種々の属性を示す情報を含んでもよい。例えば、ＰＴＥは、物理ページの保護属性や、ページに書き込みが発生したか否かなどを示す情報を含んでもよい。
【００４７】
図４（Ｂ）は、ＰＴＥを含むページテーブル４５の構成の一例を示す。図４（Ｂ）において、ページテーブル４５は、１以上のＰＴＥを配列構造で記憶する。ＰＴＥの配列のインデックスは、仮想ページ番号に対応する。すなわち、ＰＴＥに対応する物理ページ４７は、そのＰＴＥのインデックスで示される仮想ページとマッピングされている。
【００４８】
次に、プロセスがアクセスを行う際に発生する処理について説明する。メモリアクセスの際には、アクセス対象の仮想アドレスがＭＭＵ３２のアクセス制御部４３に入力される。アクセス制御部４３は、入力された仮想アドレスを物理アドレスに変換するとともに、入力された仮想ページにアクセスがあったことを示す情報を記録する。アクセス対象の仮想ページに物理アドレスが割り当てられていない場合には、ページフォルトが発生する。
【００４９】
（アドレス変換）
先ず、ＭＭＵ３２によるアドレス変換処理について説明する。
【００５０】
アクセス制御部４３は、演算部３１からアクセス対象の仮想アドレスが入力されると、その仮想アドレスを物理アドレスに変換する。具体的には、アクセス制御部４３は、先ず、キャッシュ４４に記憶されたページテーブル４５のサブセットから、要求された仮想アドレスに対応するＰＴＥを検索する。その結果、要求された仮想アドレスに対応するＰＴＥが見つからなかった場合、アクセス制御部４３は、メモリ２２上にあるページテーブル４５に対して、対応するＰＴＥの検索を行う（ページテーブルウォークする）。そして、アクセス制御部４３は、検索したＰＴＥを参照して、目的の仮想ページに物理ページが割り当てられているかを確認する。目的の仮想ページに物理ページが割り当てられていると判定した場合、アクセス制御部４３は、ＰＴＥの物理アドレスを演算部３１に返す。一方、目的の仮想ページに物理ページが割り当てられていないと判定した場合、アクセス制御部４３は、演算部３１に対してページフォルトという例外を通知する。
【００５１】
アクセス制御部４３は、ＯＳを介さずに、ハードウェアの処理でページテーブルウォークを行う（ハードウェアページテーブルウォーク）。尚、アクセス制御部４３が検索するメモリ２２上のページテーブル４５の位置は、予めＭＭＵ３２の所定の記憶領域に設定されているものとする。
【００５２】
（アクセスが発生した仮想ページの記録）
次に、仮想ページにアクセスがあったことを示す情報を記録する処理について説明する。
【００５３】
上述したように、アクセス制御部４３は、演算部３１からアクセス対象の仮想アドレスが入力されると、アドレス変換処理を行う。このとき、アクセス制御部４３は、対象の仮想ページがアクセスされたことを示す情報を、対象の仮想ページに対応するＰＴＥの「Ａビット」に記録する（「1」を設定する）。一方、ＰＴＥの「Ａビット」の値は、演算部３１（ＯＳ）により定期的にクリアされる（「0」に設定される）。そのため、各ＰＴＥの「Ａビット」の値は、直近のＯＳによるクリアが行われた時点以降に、そのページがアクセスされたか否かを示す情報となる。したがって、ＰＴＥの「Ａビット」の値を参照することにより、直近の所定期間内にアクセスされたページの特定が可能となる。
【００５４】
（ページフォルトハンドラ）
次に、物理ページが割り当てられていない仮想ページに対するアクセスが行われた場合の処理について説明する。
【００５５】
アクセス制御部４３は、物理ページが割り当てられていない仮想ページに対するアクセスが行われた場合、ページフォルトという例外を発生させる。具体的には、例えば、アクセス制御部４３は、アクセス要求のあった仮想ページに対応するＰＴＥを参照し、そのＰＴＥの「Ｐビット」の値が「0」である場合、ページフォルトを発生させ、演算部３１に通知する。また、アクセス制御部４３は、不正な領域へのアクセスが行われた場合などにも、ページフォルトを発生させる。不正な領域とは、例えば、存在しないはずの異常なアドレスや、他のプロセスが管理する領域である。不正な領域へのアクセスが行われたことの検知は、そのプロセスのページテーブル４５に基づいて行われる。以下の説明では、ページフォルトを発生させたアクセスにおいて、アクセス対象となった仮想ページを、説明の便宜上「対象ページ」と記す。
【００５６】
ページフォルトの発生が通知されると、ＯＳでは、ページフォルトハンドラと呼ばれるソフトウェアが起動される。ページフォルトハンドラは、ページフォルトを解決するための種々の処理（以下、ページフォルト解決処理と記す）を実行する。具体的には、例えば、対象ページに物理アドレスがマッピングされていない場合には、ページフォルトハンドラは新しい物理ページと対象ページのマッピングを行い、ＰＴＥに記録する。また、例えば、対象ページに対応する物理ページがメモリ２２上に存在しない場合には、ページフォルトハンドラは、メモリ２２上で現在使われていないページと記憶装置２３上の当該ページを入れ替える処理（スワップ）を行う。また、例えば、対象ページが不正な領域である場合には、ページフォルトハンドラは、無効なアクセスであるとしてページフォルトを発生させたプログラムを強制終了させる。尚、ページフォルトハンドラはＯＳの機能の一部である。
【００５７】
以上、プロセスがアクセスを行う際に発生する処理について説明した。次に、送信制御部４２による移行元ノード１６のマイグレーション処理について説明する。
【００５８】
（移行元ノードのマイグレーション処理）
マイグレーション処理において、送信制御部は、マイグレーション対象のプロセス（以下、移行対象プロセスと記す）の情報を移行先ノードに転送する。すなわち、送信制御部は、移行対象プロセスのコンテキスト情報４６及びページテーブル４５と、移行対象プロセスに割り当てられた仮想メモリ空間のデータとを転送する。実施形態において、移行対象プロセスのメモリ空間のデータの転送は２段階で行われる。第１段階として、移行対象プロセスにより直近の所定期間内にアクセスされたメモリ領域（以下、第１領域と記す）の転送が行われる。その後、第２段階として、未転送のメモリ領域（以下、第２領域と記す）の転送が行われる。第２領域は、移行対象プロセスに割り当てられた仮想メモリ空間のうち、第１領域以外の領域である。
【００５９】
具体的には、送信制御部４２は、先ず、移行対象のプロセスのマイグレーションを指示する移行元処理要求を受信する。移行元処理要求には、移行対象プロセスを識別する識別情報が含まれる。移行元処理要求を受信すると、送信制御部４２は、移行対象プロセスの通信を停止する。移行対象プロセスの通信を停止することで、通信相手との通信の不整合やエラーの発生を防ぐ。次いで、送信制御部４２は、移行対象プロセスを停止する。移行対象プロセスを停止することで、移行の途中で移行元のメモリの内容が更新されることを防ぐ。
【００６０】
次に、送信制御部４２は、移行対象プロセスのコンテキスト情報４６をメモリ２２から記憶装置２３へ退避する。そして、送信制御部４２は、退避したコンテキスト情報４６を移行先ノード１７に転送する。ここで転送されるコンテキスト情報４６は、移行対象プロセスの停止時点の状態を示すものであり、移行先ノード１７で移行対象プロセスの状態を再現するために使用される。
【００６１】
また、送信制御部４２は、移行対象プロセスのページテーブル４５を移行先ノード１７に転送する。ここで転送されるページテーブル４５は、移行先ノード１７で移行対象プロセスのページテーブル４５を再現するために使用される。
【００６２】
尚、コンテキスト情報４６及びページテーブル４５は、移行対象プロセスが停止された後に転送されるため、転送中にコンテキスト情報４６及びページテーブル４５が変更されることを防ぐ。
【００６３】
そして、送信制御部４２は、移行対象プロセスのメモリ空間のデータを転送する。このとき、送信制御部４２は、先ず第１段階として、第１領域のデータを先に転送するために、送信制御部４２は、ページテーブル４５のＰＴＥの「Ａビット」を参照して、移行対象プロセスのメモリ空間のうちから第１領域を特定する。すなわち、送信制御部４２は、移行対象プロセスのページテーブル４５において、「Ａビット」の値が「1」であるＰＴＥに対応する仮想ページの集合を第１領域として特定する。そして、送信制御部４２は、特定した第１領域のデータを、移行先ノード１７に転送する。
【００６４】
ここで、第１領域の特定は、ページテーブル４５のＰＴＥの「Ａビット」の値に基づいて行われる。上述したように、ページテーブルの「Ａビット」の設定は、ＭＭＵ３２の機能により実現される。したがって、ＭＭＵ３２を介してアクセスされるプロセスのメモリ空間の全てに対して、実施形態を適用することができる。また、第１領域を特定するための情報を記録するために、特別なソフトウェアを組み込むことなく、ＭＭＵ３２のハードウェアの機能を用いて実現することができる。
【００６５】
第１領域のデータの転送が完了したら、送信制御部４２は、第２領域のデータを移行先ノード１７に転送する。すなわち、送信制御部は、移行対象プロセスのページテーブル４５において、「Ａビット」の値が「0」であり、物理アドレスとのマッピングが行われているＰＴＥに対応する仮想ページのデータを転送する。
【００６６】
尚、第１領域及び第２領域のデータの転送においては、そのデータがどの物理ページまたは仮想ページに格納されていたかを示す情報とともに転送される。この情報は、例えば、データが格納されていた物理ページまたは仮想ページのアドレスである。
【００６７】
（移行先ノードの構成）
次に、移行先ノード１７の構成について説明する。図５は、実施形態に係る移行先ノードの構成の一例を示す。図５において、移行先ノード１７は、ＣＰＵ６１、メモリ６２、記憶装置６３、及び、通信インターフェース６４を含む。
【００６８】
ＣＰＵ６１は、演算部７１と、ＭＭＵ７２を含む。演算部７１は、処理部８１及び受信制御部８２を含む。処理部８１は、休眠制御部９の一例である。受信制御部８２は、受信部７、再開制御部８、及び起床制御部１０の一例である。
【００６９】
処理部８１は、移行元ノード１６の処理部４１と同様に、ＯＳや種々のプロセスを実行する。ただし、マイグレーション中にメモリアクセスが発生した場合のページフォルトハンドラの動作は、移行元ノード１６における動作とは異なる。これについては、後ほど詳細に説明する。
【００７０】
受信制御部８２は、移行先ノード１７におけるプロセスのマイグレーション処理を実行する。具体的には、受信制御部８２は、移行対象プロセスに関する情報を移行先ノードから受信し、移行対象プロセスを再開する処理を行う。このマイグレーション処理の詳細は後ほど説明する。
【００７１】
ＭＭＵ７２は、移行元ノード１６のＭＭＵ３２と同様である。ＭＭＵ７２は、アクセス制御部８３、及びキャッシュ８４を含む。アクセス制御部８３、キャッシュ８４は、それぞれ、アクセス制御部４３、キャッシュ４４と同様である。
【００７２】
メモリ６２は、ページテーブル８５、各プロセスのコンテキスト情報８６、及び各プロセスに割り当てられた物理ページ８７を記憶する。
【００７３】
ページテーブル８５の構成は、図４を参照して説明したものと同様である。
コンテキスト情報８６は、移行元ノード１６のコンテキスト情報４６と同様に、プロセスの状態を示す情報である。ただし、コンテキスト情報８６は、さらに、転送状態情報８８を含む。
【００７４】
転送状態情報８８は、マイグレーション中のプロセスのアクセス制御において用いられる制御情報である。転送状態情報８８は、移行対象プロセスのメモリ空間のデータが転送中であるか否かを示す。言い換えると、転送状態情報８８は、マイグレーションにおいて、移行対象プロセスのメモリ空間の全てのデータの転送が完了したか否かを示す。実施形態では、転送状態情報８８の値が「転送中」である場合には、移行対象プロセスのメモリ空間の何れかのデータの転送が完了していないことを示すものとする。また、転送状態情報８８の値が「転送完了」である場合には、移行対象プロセスのメモリ空間のすべてのデータの転送が完了していることを示すものとする。転送状態情報の値に応じて、ページフォルトハンドラは、ページフォルトが発生した場合に実行する処理を変更する。この処理の詳細については、後ほど説明する。
【００７５】
物理ページ８７は、仮想ページにマッピングされる所定のサイズの物理記憶領域である。
【００７６】
記憶装置６３は、種々のデータを記憶する。記憶装置６３は、スワップ領域を含んでもよい。
【００７７】
通信インターフェース６４は、移行元ノード１６に対してデータの送受信を行う。移行元ノード１６から転送されたデータは、通信インターフェース６４を介して受信され、メモリ６２または記憶装置６３に格納される。
【００７８】
次に、受信制御部８２による移行先ノード１７のマイグレーション処理について説明する。
【００７９】
（移行先ノードのマイグレーション処理）
受信制御部８２は、移行先ノード１７におけるプロセスのマイグレーション処理を実行する。実施形態のマイグレーション処理では、上述したように、移行元ノード１６から移行対象プロセスのコンテキスト情報４６及びページテーブル４５と、移行対象プロセスに割り当てられた仮想メモリ空間のデータとが転送される。そして、移行対象プロセスのメモリ空間のデータは、２段階で転送される。すなわち、第１段階として第１領域のデータが転送された後、第２段階として第２領域のデータが転送される。
【００８０】
受信制御部８２は、移行元ノード１６からの第１領域のデータの転送が完了した時点で、移行先ノード１７において移行対象プロセスを再開する。このとき、移行対象プロセスは、コンテキスト情報４６及びページテーブル４５に基づいて、移行元ノード１６において停止された時点の移行対象プロセスの状態から再開されるように制御される。そして、受信制御部８２は、第１領域のデータの転送完了後に、第２領域のデータを受信する。すなわち、第２領域のデータの受信は、移行対象プロセスの再開（実行）と並行して行われることとなる。
【００８１】
第１領域は、移行元ノード１６において移行対象プロセスにより直近の所定期間内にアクセスされたメモリ領域である。このような第１領域は、移行対象プロセスの再開後にアクセスされる可能性が高いと考えられる領域である。また第１領域のデータは、移行対象プロセスの移行開始前に使用中であったデータを含む。従って、これらのデータの転送が完了した時点で、移行対象プロセスの再開は可能である。少なくとも再開直後には、移行対象プロセスは正常に稼動する。ただし、プロセスの再開後の任意の時点においては、第２領域へのアクセスが発生する可能性がある。第２領域のデータは、アクセス発生時に未だ転送されていない可能性がある。実施形態では、第２領域の未転送領域に対するアクセスが発生した場合には、プロセスを休眠状態に遷移させ、第２領域のデータの転送の完了を待ってから処理を再開させる。
【００８２】
実施形態の移行先ノード１７は、第１領域のデータの転送が完了した時点で、プロセスを再開する。これは、移行対象プロセスのすべてのメモリ空間のデータの転送が完了してからプロセスを再開する場合に比べ、プロセスの停止時間を短縮することができる。特に、例えばhigh-performance computing（ＨＰＣ）等の分野におけるように、移行対象プロセスのメモリ空間が膨大になる場合には、停止時間の短縮効果は大きくなる。
【００８３】
また、実施形態の移行先ノード１７では、第２領域の未転送領域に対するアクセスが発生した場合には、プロセスを休眠させ、第２領域のデータの転送完了後にプロセスを起床させる。これにより、未転送領域に対するアクセスが発生した場合に、プロセスがエラー等で異常終了することを防ぐ。また、この場合にも、第１領域のデータの転送完了後にプロセスが再開されてから、第２領域の未転送領域に対するアクセスが発生するまでの間は、プロセスの実行と第２領域のデータの転送が並行して行われる。したがって、移行対象プロセスのすべてのメモリ空間のデータの転送が完了してからプロセスを再開する場合に比べ、マイグレーションにおけるプロセスの総停止時間を短縮することができる。
【００８４】
移行先ノード１７のマイグレーション処理を具体的に説明する。受信制御部８２は、先ず、移行元ノード１６から、移行対象ノードのコンテキスト情報４６とページテーブル４５を受信する。このコンテキスト情報４６とページテーブル４５に基づいて、受信制御部８２は、移行対象プロセスと同じ状態のプロセス（以下、対象プロセスと記す）を、移行先ノード１７で生成する。すなわち、受信制御部８２は、新しく対象プロセスを作成し、作成した対象プロセスのコンテキスト情報８６を、受信した移行対象ノードのコンテキスト情報４６に対応するように更新する。また、受信制御部８２は、受信した移行対象プロセスのページテーブル４５に基づいて、対象プロセスのページテーブル８５を初期化する。この初期化により、移行対象プロセスの仮想アドレス空間と同じ仮想アドレス空間が移行先ノード１７の対象プロセスに割り当てられる。尚、この時点では、仮想アドレスに対して、物理アドレスの対応付け（マッピング）はまだ行われない。
【００８５】
次に、受信制御部８２は、移行元ノード１６から移行対象プロセスの第１領域のデータを受信する。そして、受信制御部８２は、受信した第１領域のデータが格納された物理ページを対象プロセスの仮想ページに割り当てる。すなわち、受信制御部８２は、受信したデータをメモリ６２の空き領域に格納してページテーブル８５を更新する。ページテーブル８５の更新では、受信制御部８２は、受信したデータの仮想ページに対して、そのデータを格納した物理ページをマッピングする。これにより、ページテーブル８５の仮想ページと物理ページのマッピングについて、移行元ノード１６と移行先ノード１７とで同じ環境を形成することができる。ページテーブル８５の更新の詳細については、後ほど説明する。
【００８６】
ここで、実施形態の説明では、「データの転送が完了した」とは、受信制御部８２が移行元ノード１６からデータを受信して、そのデータを物理メモリ６２に格納し、上記のようにページテーブル８５を更新したことまでを指すものとする。
【００８７】
第１領域のすべてのデータの転送が完了したら、受信制御部８２は、生成した対象プロセスを実行状態に遷移させる（再開する）。第１領域のすべてのデータの転送が完了したか否かの判定は、受信したページテーブル４５に基づいて行われる。具体的には、受信制御部８２は、ページテーブル４５のアクセスビットが「1」である領域のすべてのデータの転送が完了したか否かを判定する。
【００８８】
対象プロセスを実行状態に遷移させる一方で、受信制御部８２は、並行して第２領域のデータを受信する。そして、受信制御部８２は、受信した第２領域のデータが格納された物理ページを対象プロセスの仮想ページにマッピングする。すなわち、受信制御部８２は、受信したデータをメモリ６２の空き領域に格納してページテーブル８５を更新する。
【００８９】
対象プロセスの実行再開後は、対象プロセスによるメモリアクセスが発生する可能性が生じることとなる。対象プロセスは、既に転送済みの領域に対するアクセスについては目的のデータにアクセスすることができるが、未転送の第２領域に対するアクセスについては目的のデータにアクセスできない。この場合、対象プロセスは休眠状態に遷移させられ、未転送の第２領域のデータの転送が完了した後に、対象プロセスが起床されるように制御される。対象プロセスのメモリアクセスの詳細は、後ほど説明する。
【００９０】
第２領域のデータの転送が完了したら、受信制御部８２は、コンテキスト情報８６の転送状態情報８８の値を、「転送中」から「転送完了」に更新する。そして、受信制御部８２は、対象プロセスが休眠している場合には、対象プロセスを起床させる。
【００９１】
（転送されたデータに対するページテーブルの更新処理）
次に、移行元ノード１６からデータを受信したときのページテーブル８５の更新処理について説明する。
【００９２】
受信制御部８２は、移行元ノード１６からデータを受信すると、受信したデータをメモリ６２の空き領域のうちの物理ページに格納する。そして、受信制御部８２は、データを格納した物理ページを、対象プロセスの仮想ページにマッピングする。ここで、受信制御部８２は、移行元ノード１６におけるページテーブル４５と、移行先ノード１７におけるページテーブル８５とで、仮想ページと物理ページのマッピングが同じになるようにマッピングする。このマッピングは、受信したページテーブル４５、及び、受信したデータが移行元ノード１６においてどの物理ページまたは仮想ページに格納されていたかを示す情報に基づいて行われる。具体的には、例えば、受信制御部８２は、対象プロセスのページテーブル８５のＰＴＥの「物理アドレス」に、受信したデータを格納した物理ページのアドレスを格納する。尚、ＰＴＥの「Ｐビット」及び「Ａビット」については、ページテーブル４５に基づいて、移行元と移行先で同じになるように更新される。例えば、移行元ノード１６において、仮想アドレスＡに物理アドレスＢがマッピングされていたとする。そして、物理アドレスＢに格納されていたデータＣが、移行先ノード１７において物理アドレスＢ´に格納されたとする。この場合、受信制御部８２は、移行先ノード１７において、仮想アドレスＡに物理アドレスＢ´がマッピングされるように、ページテーブル８５のＰＴＥを更新する。
【００９３】
（メモリアクセス時の動作）
次に、移行先ノード１７において、メモリアクセスが発生した場合の動作について説明する。
【００９４】
対象プロセスのメモリアクセスについて、ＭＭＵ７２の動作は、移行元ノード１６のＭＭＵ３２の動作と同じである。すなわち、ＭＭＵ７２は、演算部７１から入力された仮想アドレスに対して、アドレス変換処理を行う。また、ＭＭＵ７２は、物理ページが割り当てられていない仮想ページに対するアクセスが行われた場合等には、ページフォルトを発生させる。
【００９５】
ここで、対象プロセスが実行状態に遷移してから、すべての第２領域のデータの転送が完了するまでの間は、第２領域の仮想ページの中には未転送のページが存在することとなる。ページテーブル８５における仮想ページと物理ページのマッピングは、転送が完了した場合に行われるものであり、未転送のページについてはマッピングが未だ行われていない。ＭＭＵ７２は、マッピングが行われていない仮想ページに対するアクセスが発生した場合には、ページフォルトを発生させて演算部７１に通知する。従って、ＭＭＵ７２は、転送が完了していない第２領域へのアクセスが行われた場合にも、物理ページが割り当てられていない仮想ページに対するアクセスが行われたと判定し、ページフォルトを演算部７１に通知する。
【００９６】
ページフォルトが通知されると、ＯＳにおいてページフォルトハンドラが起動される。移行先ノード１７では、ページフォルトハンドラは、ページフォルトを発生させたアクセスにおけるアクセス対象のページが、第２領域の未転送のページであるか否かを判定する。アクセス対象のページが未転送のページである場合、ページフォルトハンドラは、対象プロセスを休眠状態に遷移させる。ここで休眠させた対象プロセスは、すべての第２領域のデータの転送が完了した後に、受信制御部８２により起こされる。一方、アクセス対象のページが第２領域の未転送のページではない場合、ページフォルトハンドラは、移行元ノード１６と同様に、上述したページフォルト解決処理を実行する。
【００９７】
ページフォルトハンドラの具体的な処理について説明する。
ページフォルトハンドラは、先ず、ページフォルトが発生した対象プロセスについて、すべての第２領域のデータの転送が完了済みであるか否かを判定する。具体的には、ページフォルトハンドラは先ず、コンテキスト情報８６の転送状態情報８８を参照する。転送状態情報８８の値が「転送中」である場合には、ページフォルトハンドラは、移行対象プロセスのメモリ空間の何れかのデータの転送が完了していないと判定する。また、転送状態情報８８の値が「転送完了」である場合には、ページフォルトハンドラは、移行対象プロセスのメモリ空間のすべてのデータの転送が完了済みであると判定する。
【００９８】
すべての第２領域のデータの転送が完了している場合、データが未転送であることが原因で発生するページフォルトは存在しないため、ページフォルトハンドラは、移行元ノード１６と同様のページフォルト解決処理を行う。
【００９９】
一方、いずれかの第２領域のデータの転送が完了していない場合、ページフォルトハンドラは、アクセス対象の仮想ページが、転送対象の仮想ページのうちの未転送のページであるか否かを判定する。具体的には、ページフォルトハンドラは、先ず、移行元ノード１６から受信したページテーブル４５を参照して、アクセス対象の仮想ページが転送対象の仮想ページであるか否かを判定する。転送対象の仮想ページは、第１領域または第２領域の仮想ページである。第１領域または第２領域の仮想ページは、移行元ノード１６から受信したページテーブル４５において、物理ページとのマッピングが行われている仮想ページである。従って、ページフォルトハンドラは、アクセス対象の仮想アドレスが、移行元ノード１６から受信したページテーブル４５において、物理アドレスとのマッピングが行われているか否かを判定することで、アクセス対象の仮想ページが転送対象であるか否かを判定する。アクセス対象の仮想ページが転送対象の仮想ページではないと判定した場合、ページフォルトハンドラは、移行元ノード１６と同様のページフォルト解決処理を行う。
【０１００】
アクセス対象の仮想ページが転送対象の仮想ページであると判定した場合、ページフォルトハンドラは、移行先ノード１７の対象プロセスのページテーブル８５を参照して、アクセス対象の仮想アドレスに物理アドレスがマッピングされているか否かを判定する。転送が完了した仮想アドレスは物理ページとのマッピングが済んでいる。したがって、ページフォルトハンドラは、アクセス対象の仮想アドレスに物理アドレスがマッピングされているかを判定することで、アクセス対象のページが未転送のページであるか否かを判定する。アクセス対象のデータが既に転送が完了しているデータの場合、ページフォルトハンドラは、移行元ノード１６と同様のページフォルト解決処理を行う。
【０１０１】
一方、アクセス対象のページが未転送のページである場合、ページフォルトハンドラは、対象プロセスを休眠状態に遷移させる。休眠された対象プロセスは、未転送ページのデータの転送が完了後に、受信制御部８２により起こされる。
【０１０２】
対象プロセスが再開されると、ページフォルトハンドラは、対象プロセスに対して再度ページフォルトが発生した仮想ページへのアクセスを実行するところから処理を再開させる。
【０１０３】
（移行元ノードのマイグレーション処理のフロー）
図６は、送信制御部による、移行元ノードのマイグレーション処理の詳細を図解したフローチャートの一例である。
【０１０４】
図６において、送信制御部４２は、先ず、移行対象のプロセスのマイグレーションを指示する移行元処理要求を受信する（Ｓ１０１）。マイグレーション要求を受信すると、送信制御部４２は、移行対象プロセスの通信を停止する（Ｓ１０２）。次いで、送信制御部４２は、移行対象プロセスを停止する（Ｓ１０３）。
【０１０５】
次に、送信制御部４２は、移行対象プロセスのコンテキスト情報４６を移行先ノード１７に転送する（Ｓ１０４）。尚、転送されるコンテキスト情報４６は、移行対象プロセスの停止時点の状態を示す情報である。
【０１０６】
次いで、送信制御部４２は、移行対象プロセスのページテーブル４５を移行先ノード１７に転送する（Ｓ１０５）。
【０１０７】
次に、送信制御部４２は、移行対象プロセスに割り当てられたメモリ空間のうち、第１領域を特定する（Ｓ１０６）。すなわち、送信制御部４２は、ページテーブル４５において、「Ａビット」の値が「1」であるＰＴＥの「物理アドレス」で示される物理ページの集合を第１領域として特定する。第２領域は移行対象アドレスのメモリ空間のうち第１領域以外の領域であるので、第１領域が特定されると第２領域も特定されることとなる。尚、送信制御部４２は、ページテーブル４５において、「Ａビット」の値が「0」であるＰＴＥの「物理アドレス」で示される物理ページの集合を第２領域として特定してもよい。尚、第２領域に対応するＰＴＥには、物理アドレスにマッピングが行われていないＰＴＥは含まない。
【０１０８】
次に、送信制御部４２は、特定した第１領域に格納されたデータを移行先ノード１７に転送する（Ｓ１０７）。
【０１０９】
第１領域のすべてのデータの転送が完了したら、送信制御部４２は、第２領域のデータを移行先ノードに転送する（Ｓ１０８）。
【０１１０】
そして処理は終了する。尚、Ｓ１０４、Ｓ１０５の処理は、Ｓ１０３の処理後Ｓ１０７の処理が完了するまでの間に行われるならば、順序が前後してもよい。
【０１１１】
（移行先ノードのマイグレーション処理のフロー）
図７は、受信制御部による、移行先ノードのマイグレーション処理の詳細を図解したフローチャートの一例である。
【０１１２】
図７において、先ず、受信制御部８２は、プロセスのマイグレーションにおける移行先ノードでの処理要求を受信する（Ｓ２０１）。この処理要求を受信すると、受信制御部８２は、新規の対象プロセスを生成し、生成した対象プロセスを停止状態に遷移させる（Ｓ２０２）。対象プロセスの生成とともに、対象プロセスに対応するコンテキスト情報８６とページテーブル８５が生成される。
【０１１３】
次に、受信制御部８２は、移行元ノード１６から移行対象プロセスのコンテキスト情報４６を受信する（Ｓ２０３）。そして、受信制御部８２は、受信したコンテキスト情報４６に基づいて、対象プロセスのコンテキスト情報８６を移行対象プロセスのコンテキスト情報の内容に更新（コピー）する（Ｓ２０４）。これにより、コンテキスト情報について、新規作成した対象プロセスを移行対象プロセスと同じ状態とすることができる。尚、更新において、コンテキスト情報のうち環境依存の情報については、移行先ノードの環境に応じて適宜変更されてもよい。
【０１１４】
次に、受信制御部８２は、移行元ノード１６から移行対象プロセスのページテーブル４５を受信する（Ｓ２０５）。そして、受信制御部８２は、受信したページテーブル４５に基づいて、対象プロセスのページテーブル８５を更新し初期化する（Ｓ２０６）。更新において受信制御部８２は、対象プロセスに移行対象プロセスの仮想アドレス空間と同じ仮想アドレス空間が割り当てられていることを示すように対象プロセスのページテーブル８５を更新する。尚、この時点では、ページテーブル８５において、仮想アドレスに対する物理アドレスの対応付け（マッピング）は行われていない。
【０１１５】
次に、受信制御部８２は、移行元ノード１６から第１領域のデータを受信する（Ｓ２０７）。そして、受信制御部８２は、受信した第１領域のデータに対応する仮想ページの割り当てを行う（Ｓ２０８）。すなわち、受信制御部８２は、受信したデータをメモリ６２の空き物理ページに格納し、その物理ページと受信したデータに対応する仮想ページとをマッピングしてページテーブル８５のＰＴＥに記録する。
【０１１６】
次に、受信制御部８２は、第１領域の全てのデータの転送が完了したか否かを判定する（Ｓ２０９）。具体的には、例えば、受信制御部８２は、先ず、受信したページテーブル４５において「Ａビット」の値が「1」であるすべてのＰＴＥを特定する。そして、受信制御部８２は、特定したＰＴＥに対応する全ての仮想ページのデータについて、ページテーブル８５を参照し、転送が完了したか否かを判定する。尚、転送が完了したか否かは、ページテーブル８５において、第１領域の仮想アドレスと物理アドレスのマッピングが行われているか否かにより判定される。
【０１１７】
第１領域の何れかのデータの転送が完了していないと判定された場合（Ｓ２０９でＮｏ）、処理はＳ２０７に再度遷移する。一方、第１領域のすべてのデータの転送が完了したと判定した場合（Ｓ２０９でＹｅｓ）、受信制御部８２は、対象プロセスのコンテキスト情報８６において、転送状態情報８８の値を「転送中」に変更する（Ｓ２１０）。
【０１１８】
次に、受信制御部８２は、対象プロセスを実行状態に遷移させる（Ｓ２１１）。
次に、受信制御部８２は、移行元ノード１６から第２領域のデータを受信する（Ｓ２１２）。そして、受信制御部８２は、受信した第２領域のデータに対応する仮想ページの割り当てを行う（Ｓ２１３）。すなわち、受信制御部８２は、受信したデータをメモリ６２の空き物理ページに格納し、その物理ページと受信したデータに対応する仮想ページとをマッピングしてページテーブル８５に記録する。
【０１１９】
次に、受信制御部８２は、第２領域の全てのデータの転送が完了したか否かを判定する（Ｓ２１４）。具体的には、例えば、受信制御部８２は、先ず、受信したページテーブル４５において「Ａビット」の値が「0」であり、物理アドレスのマッピングが行われているすべてのＰＴＥを特定する。そして、受信制御部８２は、特定したＰＴＥに対応する全ての仮想ページのデータについて、ページテーブル８５を参照し、転送が完了したか否かを判定する。尚、転送が完了したか否かは、ページテーブル８５において、第２領域の仮想アドレスと物理アドレスのマッピングが行われているか否かにより判定される。
【０１２０】
第２領域の何れかのデータの転送が完了していないと判定された場合（Ｓ２１４でＮｏ）、処理はＳ２１２に再度遷移する。一方、第２領域のすべてのデータの転送が完了したと判定した場合（Ｓ２１４でＹｅｓ）、受信制御部８２は、対象プロセスのコンテキスト情報８６において、転送状態情報８８の値を「転送完了」に変更する（Ｓ２１５）。
【０１２１】
次に、受信制御部８２は、対象プロセスが休眠状態であるか否かを判定する（Ｓ２１６）。対象プロセスが休眠状態ではないと判定された場合には（Ｓ２１６でＮｏ）、処理は終了する。一方、対象プロセスが休眠状態であると判定した場合には（Ｓ２１６でＹｅｓ）、受信制御部８２は、対象プロセスを起床させる（Ｓ２１７）。そして、処理は終了する。
【０１２２】
尚、Ｓ２０３は、Ｓ２０１の後であってＳ２０４の前であれば実行順序は限定されない。Ｓ２０５は、Ｓ２０１の後であってＳ２０６の前であれば実行順序は限定されない。Ｓ２０４は、Ｓ２０２及びＳ２０３の後であってＳ２１１の前であれば実行順序は限定されない。また、Ｓ２０６は、Ｓ２０２及びＳ２０５の後であってＳ２１１の前であれば実行順序は限定されない。また、Ｓ２１０は、Ｓ２０１の後であってＳ２１１の前であれば実行順序は限定されない。
【０１２３】
また、Ｓ２０９において、第１領域のすべてのデータの転送が完了したか否かの判定においては、例えば、以下のように実現してもよい。すなわち、移行元ノード１６が第１領域のデータの送信が完了した場合に、第１領域のデータの送信が完了したことを示す完了情報を送信し、移行先ノード１７は、完了情報に基づいて、第１領域のすべてのデータの転送が完了したことを判定してもよい。Ｓ２１４の第２領域についての判定も同様に実現してもよい。
【０１２４】
（移行先ノードのページフォルトハンドラの処理フロー）
図８は、移行先ノードにおけるページフォルトハンドラの詳細を図解したフローチャートの一例である。
【０１２５】
図８において、先ず、ページフォルトハンドラは、ページフォルトが発生した対象プロセスについて、すべての第２領域のデータの転送が完了済みであるか否かを判定する（Ｓ３０１）。具体的には、ページフォルトハンドラは、コンテキスト情報８６の転送状態情報８８の値が「転送完了」であるか否かを判定する。すべての第２領域のデータの転送が完了済みであると判定した場合（Ｓ３０１でＹｅｓ）、ページフォルトハンドラは、ページフォルト解決処理を行う（Ｓ３０２）。そして処理は終了する。
【０１２６】
一方、第２領域の何れかのデータの転送が完了していないと判定した場合（Ｓ３０１でＮｏ）、ページフォルトハンドラは、アクセス対象の仮想ページが、第２領域の未転送のページであるか否かを判定する（Ｓ３０３）。
【０１２７】
アクセス対象の仮想ページが、第２領域の未転送のページでないと判定された場合（Ｓ３０３でＮｏ）、処理はＳ３０２に遷移する。一方、アクセス対象の仮想ページが、転送対象の仮想ページのうちの未転送のページであると判定した場合（Ｓ３０３でＹｅｓ）、ページフォルトハンドラは、対象プロセスを休眠状態に遷移させる（Ｓ３０４）。対象プロセスが休眠している間は、受信制御部８２により第２領域のデータが受信されて、第２領域のデータに対応する仮想ページの割当処理がなされる（図７のＳ２１３）。ここで休眠させた対象プロセスは、第２領域のすべてのデータの受信が完了した時点で、受信制御部８２により起床される（図７のＳ２１７）。
【０１２８】
対象プロセスが再開されると、ページフォルトハンドラは、対象プロセスに対して再度ページフォルトが発生した仮想ページへのアクセスを実行するように指示する（Ｓ３０５）。そして処理は終了する。
【０１２９】
（ノードのハードウェア構成）
次に、実施形態に係る移行元ノード１６及び移行先ノード１７のハードウェア構成の一例を説明する。図９は、実施形態に係る移行元ノード１６及び移行先ノード１７のハードウェア構成の一例を示す。
【０１３０】
図９において、移行元ノード１６及び移行先ノード１７は、ＣＰＵ９１、メモリ９２、記憶装置９３、読取装置９４、及び通信インターフェース９５を含む。ＣＰＵ９１、メモリ９２、記憶装置９３、読取装置９４、及び通信インターフェース９５はバス９６または通信ネットワーク等を介して接続される。
【０１３１】
ＣＰＵ９１は、ＭＭＵ９７を含む。また、ＣＰＵ９１は、メモリ９２を利用して上述のフローチャートの手順を記述したプログラムを実行することにより、演算部３１、７１の一部または全部の機能を提供する。ＣＰＵ９１は、ＣＰＵ２１、６１の一例である。ＭＭＵ９７は、ＭＭＵ３２、７２の一例である。
【０１３２】
メモリ９２は、例えば半導体メモリであり、Random Access Memory（ＲＡＭ）領域およびRead Only Memory（ＲＯＭ）領域を含んで構成される。メモリ９２は、メモリ２２、６２の一例である。
【０１３３】
記憶装置９３は、例えばハードディスクである。なお、記憶装置９３は、フラッシュメモリ等の半導体メモリであってもよい。また、記憶装置９３は、外部記憶装置であってもよい。記憶装置９３は、記憶装置２３、６３の一例である。
【０１３４】
読取装置９４は、ＣＰＵ９１の指示に従って着脱可能記憶媒体９９にアクセスする。着脱可能記憶媒体９９は、たとえば、半導体デバイス（ＵＳＢメモリ等）、磁気的作用により情報が入出力される媒体（磁気ディスク等）、光学的作用により情報が入出力される媒体（ＣＤ−ＲＯＭ、ＤＶＤ等）などにより実現される。尚、読取装置９４は、移行元ノード１６及び移行先ノード１７に含まれなくてもよい。
【０１３５】
通信インターフェース９５は、ＣＰＵ９１の指示に従って他のノードと通信する。通信インターフェース９５は、通信インターフェース２４、６４の一例である。
【０１３６】
実施形態のプログラムは、例えば、下記の形態で移行元ノード１６及び移行先ノード１７に提供される。
（１）記憶装置９３に予めインストールされている。
（２）着脱可能記憶媒体９９により提供される。
（３）プログラムサーバ（図示せず）から通信インターフェース９５を介して提供される。
【０１３７】
さらに、実施形態１の移行元ノード１６及び移行先ノード１７の一部は、ハードウェアで実現してもよい。或いは、実施形態の移行元ノード１６及び移行先ノード１７は、ソフトウェアおよびハードウェアの組合せで実現してもよい。
【０１３８】
移行元ノード１６と移行先ノード１７のメモリ９２は、共有されてもよい。移行元ノード１６と移行先ノード１７の記憶装置９３は、共有されてもよい。
【０１３９】
また、移行元ノード１６及び移行先ノード１７は、同じ物理サーバ上もしくは異なる物理サーバ上で動作する仮想マシンであってもよい。その場合、移行元ノード１６と移行先ノード１７の間では、ＣＰＵ９１、メモリ９２、記憶装置９３、読取装置９４、及び通信インターフェース９５が共有されてもよい。
【０１４０】
また、実施形態では移行対象はプロセスであるとして説明したが、移行対象はＶＭや種々のソフトウェアでもよい。
【０１４１】
尚、実施形態は、以上に述べた実施の形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で種々の構成または実施形態を取ることができる。
【符号の説明】
【０１４２】
１      並列計算システム
２      第１ノード
３      第２ノード
４      記憶部
５      停止制御部
６      送信部
７      受信部
８      再開制御部
９      休眠制御部
１０    起床制御部
１５    情報処理システム
１６    移行元ノード
１７    移行先ノード
２１    ＣＰＵ
２２    メモリ
２３    記憶装置
２４    通信インターフェース
３１    演算部
３２    ＭＭＵ
４１    処理部
４２    送信制御部
４３    アクセス制御部
４４    キャッシュ
４５    ページテーブル
４６    コンテキスト情報
４７    物理ページ
６１    ＣＰＵ
６２    メモリ
６３    記憶装置
６４    通信インターフェース
７１    演算部
７２    ＭＭＵ
８１    処理部
８２    受信制御部
８３    アクセス制御部
８４    キャッシュ
８５    ページテーブル
８６    コンテキスト情報
８７    物理ページ
８８    転送状態情報
９１    ＣＰＵ
９２    メモリ
９３    記憶装置
９４    読取装置
９５    通信インターフェース
９６    バス
９７    ＭＭＵ
９９    着脱可能記憶媒体
【図１】
2017033375.tif 000003
【図２】
2017033375.tif 000004
【図３】
2017033375.tif 000005
【図４】
2017033375.tif 000006
【図５】
2017033375.tif 000007
【図６】
2017033375.tif 000008
【図７】
2017033375.tif 000009
【図８】
2017033375.tif 000010
【図９】
2017033375.tif 000011
【手続補正書】
【提出日】平成28年6月9日(2016.6.9)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】０００８
【補正方法】変更
【補正の内容】
【０００８】
【特許文献１】特開２００５−３２７２７９号公報
【特許文献２】特開２００８−２６９０００号公報
【特許文献３】国際公開第２０１２／０６３３３４号