(57)【特許請求の範囲】
【請求項１】
それぞれ記憶領域と対応づけられ相互の記憶領域にアクセス可能な複数のノードを含む仮想マシンを稼働させる情報処理装置であって、
前記仮想マシンを他の情報処理装置に移動する場合に、前記複数のノードをノード単位で他のノードに対応づけられた記憶領域へのアクセス回数が少ない順に前記他の情報処理装置に移動し、一のノードが前記他の情報処理装置に移動された後、前記移動されたノードに対応づけられた記憶領域を解放する制御部を備え、
前記制御部は、前記仮想マシンの前記複数のノードのうち、前記他の情報処理装置に移動されていないノードが、前記移動されたノードの記憶領域にアクセスした場合に、前記移動されていないノードの動作を停止する、
情報処理装置。
【請求項２】
それぞれ記憶領域と対応づけられ相互の記憶領域にアクセス可能な複数のノードを含む仮想マシンを稼働させる情報処理装置であって、
前記仮想マシンを他の情報処理装置に移動する場合に、前記複数のノードをノード単位で前記他の情報処理装置に移動し、一のノードが前記他の情報処理装置に移動された後、前記移動されたノードに対応づけられた記憶領域を解放する制御部を備え、
前記制御部は、
前記仮想マシンの前記複数のノードのうち、前記他の情報処理装置に移動されていないノードが、前記移動されたノードの記憶領域にアクセスした場合に、前記移動されていないノードの動作を停止し、
前記情報処理装置が複数の仮想マシンを稼働させる場合に、前記複数の仮想マシンのうち、他の仮想マシンよりもオペレーティングシステムに対する処理の呼出しが少ない仮想マシンを、前記他の情報処理装置に移動する仮想マシンとして選択する、
情報処理装置。
【請求項３】
それぞれ記憶領域と対応づけられ相互の記憶領域にアクセス可能な複数のノードを含む仮想マシンを稼働させる第１の情報処理装置は、
前記仮想マシンを第２の情報処理装置に移動する場合に、前記複数のノードをノード単位で他のノードに対応づけられた記憶領域へのアクセス回数が少ない順に、前記第２の情
報処理装置に移動し、一のノードが前記第２の情報処理装置に移動された後、前記移動されたノードに対応づけられた記憶領域を解放し、
前記第２の情報処理装置は、
前記移動されたノードの移動を受け付けた後、前記移動されたノードの動作を開始し、
前記移動されたノードが前記第１の情報処理装置から移動されていないノードに対応づけられた記憶領域にアクセスした場合に、前記移動されていないノードの移動が完了するまで、前記移動されたノードの動作を停止する、
仮想マシン移動方法。
【請求項４】
それぞれ記憶領域と対応づけられ相互の記憶領域にアクセス可能な複数のノードを含む仮想マシンを稼働させる第１の情報処理装置は、
前記仮想マシンを第２の情報処理装置に移動する場合に、前記複数のノードをノード単位で前記第２の情報処理装置に移動し、一のノードが前記第２の情報処理装置に移動された後、前記移動されたノードに対応づけられた記憶領域を解放し、
前記第１の情報処理装置が複数の仮想マシンを稼働させる場合に、前記複数の仮想マシンのうち、他の仮想マシンよりもオペレーティングシステムに対する処理の呼出しが少ない仮想マシンを、前記第２の情報処理装置に移動する仮想マシンとして選択し、
前記第２の情報処理装置は、
前記移動されたノードの移動を受け付けた後、前記移動されたノードの動作を開始し、
前記移動されたノードが前記第１の情報処理装置から移動されていないノードに対応づけられた記憶領域にアクセスした場合に、前記移動されていないノードの移動が完了するまで、前記移動されたノードの動作を停止する、
仮想マシン移動方法。
【請求項５】
情報処理装置に、
それぞれ記憶領域と対応づけられ相互の記憶領域にアクセス可能な複数のノードを含む仮想マシンを、他の情報処理装置に移動させる場合に、前記複数のノードをノード単位で他のノードに対応づけられた記憶領域へのアクセス回数が少ない順に前記他の情報処理装置に移動し、一のノードが前記他の情報処理装置に移動された後、前記移動されたノードに対応づけられた記憶領域を解放させ、
前記仮想マシンの前記複数のノードのうち、前記他の情報処理装置に移動されていないノードが、前記移動されたノードの記憶領域にアクセスした場合に、前記移動されていないノードの動作を停止させる、
仮想マシン制御プログラム。
【請求項６】
情報処理装置に、
それぞれ記憶領域と対応づけられ相互の記憶領域にアクセス可能な複数のノードを含む仮想マシンを、他の情報処理装置に移動させる場合に、前記複数のノードをノード単位で前記他の情報処理装置に移動し、一のノードが前記他の情報処理装置に移動された後、前記移動されたノードに対応づけられた記憶領域を解放させ、
前記仮想マシンの前記複数のノードのうち、前記他の情報処理装置に移動されていないノードが、前記移動されたノードの記憶領域にアクセスした場合に、前記移動されていないノードの動作を停止させ、
前記情報処理装置が複数の仮想マシンを稼働させる場合に、前記複数の仮想マシンのうち、他の仮想マシンよりもオペレーティングシステムに対する処理の呼出しが少ない仮想マシンを、前記他の情報処理装置に移動する仮想マシンとして選択させる、
仮想マシン制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、仮想マシン移動方法、および仮想マシン制御プログラムに関する。
【背景技術】
【０００２】
ユーザが利用するサービスやアプリケーションをネットワーク上で提供するクラウドシステムにおいて、物理サーバが、さまざまな仮想マシン（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ、ＶＭ）を稼働させる場合がある。仮想マシンを稼働させる場合に、各仮想マシンの動作は、利用されるサービスやアプリケーションによって異なるため予測が困難である。したがって、仮想マシンのＣｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＣＰＵ）、メモリ等の資源の見積もりは難しい。
【０００３】
物理サーバは、メモリ資源が枯渇すると、スラッシングの発生により性能が低下する。スラッシングは、仮想記憶環境において、物理メモリの不足により、物理メモリと仮想メモリ（二次記憶装置、外部記憶装置、補助記憶装置等）間の入出力が頻発し、ＣＰＵが外部の処理を受け付けない状態に陥ることをいう。
【０００４】
物理サーバは、メモリ資源が枯渇すると、所定の仮想マシンを他の物理サーバに移動する。他の物理サーバへの仮想マシンの移動が完了すると、移動された仮想マシンが移動元の物理サーバで利用していたメモリは解放される。移動元の物理サーバは、解放されたメモリを再利用することができる。また、移動先の他の物理サーバは、仮想マシンの移動が完了すると、動作を開始することができる。以下、物理サーバは、情報処理装置とも呼ばれる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２０１２−５２１６１０号公報
【特許文献２】特開２００９−５９１２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来の方法では、他の物理サーバへの仮想マシンの移動が完了するまでの間、移動元の物理サーバ上のメモリは解放されないため、メモリ不足は解消しない。メモリ資源の枯渇は物理サーバの性能低下を招くため、仮想マシンが利用しているメモリの一部が移動すれば、移動した部分のメモリは、解放されることが望ましい。また、移動先の他の物理サーバは、仮想マシンの移動が完了するのを待たずに、移動された部分から動作を開始させることが望ましい。
【０００７】
しかしながら、仮想マシンが利用しているメモリの一部が移動された後、移動元の物理サーバ上の仮想マシンが移動されたメモリにアクセスすると、当該仮想マシンの処理の続行が困難となる。また、仮想マシンが利用しているメモリの一部が移動された後、移動先の物理サーバ上で仮想マシンの動作を開始させると、移動先の物理サーバ上の仮想マシンが、移動されていないメモリにアクセスした場合に、当該仮想マシンの処理の続行が困難となる。
【０００８】
そこで、開示の実施形態の１つの側面は、仮想マシンの他の物理サーバへの移動に際して、移動先の物理サーバ上で移動された仮想マシンの動作を早期に開始させ、仮想マシン
の処理をなるべく続行させることにある。
【課題を解決するための手段】
【０００９】
１つの態様では、それぞれ記憶領域と対応づけられ相互の記憶領域にアクセス可能な複数のノードを含む仮想マシンを稼働させる情報処理装置は、他の情報処理装置から、他の情報処理装置で稼働する仮想マシンの移動を受け付ける場合に、複数のノードはノード単位で移動され、一のノードが移動された後、移動されたノードの動作を開始し、移動されたノードが他の情報処理装置から移動されていないノードに対応づけられた記憶領域にアクセスした場合に、移動されていないノードの移動が完了するまで、移動されたノードの動作を停止する制御部と、を備える。
【発明の効果】
【００１０】
１つの側面では、本情報処理装置は、仮想マシンの他の物理サーバへの移動に際して、移動先の物理サーバ上で移動された仮想マシンの動作を早期に開始させ、仮想マシンの処理をなるべく続行させることができる。
【図面の簡単な説明】
【００１１】
【図１】仮想マシンの移動完了後にメモリを解放する処理を例示する図である。
【図２】Ｎｏｎ−Ｕｎｉｆｏｒｍ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ（ＮＵＭＡ）環境が構築された情報処理装置を例示する図である。
【図３】ＮＵＭＡノードの構成を定義する距離テーブルの一例を示す図である。
【図４】情報処理装置の装置構成の一例を示す図である。
【図５】仮想マシン上のＮＵＭＡノードと物理サーバ上のＮＵＭＡノードとの対応関係を例示する図である。
【図６】仮想マシン上のＮＵＭＡノードの構成を定義する仮想距離テーブルの一例を示す図である。
【図７】物理サーバ上の資源と仮想マシン上の資源との対応関係を定義する資源対応テーブルの一例を示す図である。
【図８】移動先物理サーバで空の仮想マシンを生成する処理を例示する図である。
【図９】仮想マシンをＮＵＭＡノード単位で移動する処理を例示する図である。
【図１０】ＮＵＭＡノードの停止および開始処理を例示する図である。
【図１１】他のＮＵＭＡノードを移動する処理を例示する図である。
【図１２】他のＮＵＭＡノードの停止および開始処理を例示する図である。
【図１３】移動元の物理サーバで仮想ＣＰＵを停止する処理を例示する図である。
【図１４】仮想マシンの移動処理の例を示すフローチャートである。
【図１５】仮想マシンの移動処理の詳細を例示するフローチャートである。
【図１６】仮想ＣＰＵの動作制御処理の例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、図面に基づいて、本発明の実施の形態を説明する。以下の実施形態の構成は例示であり、本発明は実施形態の構成に限定されない。
【００１３】
〔比較例〕
図１は、仮想マシンの移動完了後にメモリを解放する処理を例示する図である。物理サーバ１Ａは、仮想マシン２Ａおよび２Ｂを稼働させる。仮想マシン２Ａでメモリ不足が生じると、物理サーバ１Ａは、仮想マシン２Ｂを物理サーバ１Ｂに移動する（Ｐ１）。なお、仮想マシン２Ｂを物理サーバ１Ｂに移動するとは、仮想マシン２Ｂを稼働させるコンピュータを物理サーバ１Ｂに変更することである。以下の説明では、仮想マシンは動作中であることが想定されるが、移動対象の仮想マシンは動作中のものに限られない。
【００１４】
物理サーバ１Ａは、仮想マシン２Ｂの物理サーバ１Ｂへの移動が完了すると、移動前に仮想マシン２Ｂが利用していたメモリを解放する（Ｐ２）。仮想マシン２Ａは、仮想マシン２Ｂが利用していたページを再利用する（Ｐ３）。ページは、一定サイズのメモリブロックである。
【００１５】
図１の例では、物理サーバ１Ａで仮想マシン２Ｂが利用していたメモリは、仮想マシン２Ｂの物理サーバ１Ｂへの移動が完了するまで解放されない。このため、仮想マシン２Ａのメモリ不足は、仮想マシン２Ｂの物理サーバ１Ｂへの移動が完了するまで解消されない。なお、物理サーバ１Ａおよび物理サーバ１Ｂは、総称して物理サーバ１とも呼ばれる。また、仮想マシン２Ａおよび仮想マシン２Ｂは、総称して仮想マシン２とも呼ばれる。
【００１６】
＜仮想マシンの移動方法＞
図１の例を用いて、仮想マシンの移動方法の１つであるライブマイグレーション（Ｌｉｖｅ  Ｍｉｇｒａｔｉｏｎ）が説明される。ライブマイグレーションでは、移動元の物理サーバ１Ａは、仮想マシン２Ｂを、動作状態のまま移動先の物理サーバ１Ｂに移動する。
【００１７】
具体的には、物理サーバ１Ａは、まず、仮想マシン２Ｂが利用しているメモリ上の複数のページを、移動先の物理サーバ１Ｂに転送する。各ページの転送が完了すると、物理サーバ１Ａは、転送中に更新されたページを、物理サーバ１Ｂに再送信する。物理サーバ１Ａは、再送中に更新されたページを、物理サーバ１Ｂに再送信する。物理サーバ１Ａは、再送信を繰り返し、更新されたページのサイズが所定の閾値以下となったら、仮想マシン２Ｂを停止する。最後に、物理サーバ１Ａは、更新されたページを物理サーバ１Ｂに再送信しメモリの転送を終了する。移動先の物理サーバ１Ｂは、仮想マシン２Ｂを稼働させる。移動元の物理サーバ１Ａは、移動が完了した仮想マシン２Ｂを消去し、仮想マシン２Ｂが利用していたメモリを解放する。
【００１８】
仮想マシン２Ｂの移動完了後にメモリを解放するのではなく、一部のページが物理サーバ１Ｂに転送された時点でメモリを解放すると、仮想マシン２Ｂは、転送されたページへのアクセスにより停止される場合が生じる。ページの転送順によっては、仮想マシン２Ｂが停止する場合が増えるため、一部のページの転送によりメモリを解放することは、パフォーマンスの低下につながる。
【００１９】
〔実施形態〕
実施形態において、物理サーバ１は、仮想マシン２を動作状態のまま、移動先の物理サーバ１に移動する。移動元の物理サーバ１は、仮想マシン２のメモリの一部が移動先の物理サーバ１に転送されると、転送が完了したメモリを解放する。具体的には、物理サーバ１は、仮想マシン２を、ＣＰＵとメモリの組からなる複数のＮＵＭＡノードで構成する。物理サーバ１は、仮想マシン２を、ＮＵＭＡノード単位で移動先の物理サーバ１に移動する。物理サーバ１は、ＮＵＭＡノードの移動が完了するごとに、当該ＮＵＭＡノードのメモリを解放する。物理サーバ１は、「情報処理装置」の一例である。
【００２０】
＜ＮＵＭＡノード＞
図２は、ＮＵＭＡ環境が構築された情報処理装置１（物理サーバ１）を例示する図である。ＮＵＭＡ環境が構築された情報処理装置１は、ＮＵＭＡ型計算機とも呼ばれる。ＮＵＭＡ環境は、ＣＰＵとメモリの組からなる複数のＮＵＭＡノードを含む。
【００２１】
図２の例において、情報処理装置１は、ＮＵＭＡノード３ＡおよびＮＵＭＡノード３Ｂを含む。ＮＵＭＡノード３Ａは、ＣＰＵ４Ａおよびメモリ５Ａを含む。ＣＰＵ４Ａはマルチコアプロセッサであり、４つのコアａ、コアｂ、コアｃおよびコアｄを備える。メモリ５Ａは、一定サイズのメモリブロックであるページ１およびページ２を含む。同様に、Ｎ
ＵＭＡノード３Ｂは、ＣＰＵ４Ｂおよびメモリ５Ｂを含む。ＣＰＵ４Ｂはマルチコアプロセッサであり、４つのコアｅ、コアｆ、コアｇおよびコアｈを備える。メモリ５Ｂは、一定サイズのメモリブロックであるページ３およびページ４を含む。
【００２２】
ＮＵＭＡノード３ＡおよびＮＵＭＡノード３Ｂは、総称してＮＵＭＡノード３とも呼ばれる。ＣＰＵ４ＡおよびＣＰＵ４Ｂは、総称してＣＰＵ４とも呼ばれる。メモリ５Ａおよびメモリ５Ｂは、総称してメモリ５とも呼ばれる。
【００２３】
情報処理装置１は、複数のプロセス６を実行する。Ｌｉｎｕｘ（登録商標）等の近代的オペレーティングシステム（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ、ＯＳ）は、ＮＵＭＡ環境において、情報処理装置１上で実行されるプロセス６が使用するメモリを、ＮＵＭＡノード３内に閉じるように確保する。例えば、図２において、ＮＵＭＡノード３Ａ内のメモリ５Ａを使用するプロセス６がＮＵＭＡノード３Ｂ内のメモリ５Ｂにアクセスする頻度は、メモリ５Ａにアクセスする頻度よりも低くなる。
【００２４】
図３は、ＮＵＭＡノード３の構成を定義する距離テーブル１０の一例を示す図である。距離テーブル１０は、ＯＳの起動時に設定ファイル等から読み込まれる。ＯＳは、距離テーブル１０に基づいて、各プロセス６にＣＰＵ４およびメモリ５を割り当てる。図３は、図２に示すＮＵＭＡノード３の構成を定義する例を示している。距離テーブル１０は、ＮＵＭＡ  ＩＤ、ページ、ＣＰＵコアの項目を含む。
【００２５】
ＮＵＭＡ  ＩＤの項目は、ＮＵＭＡノード３の識別子を示す。図３の距離テーブル１０は、ＮＵＭＡ  ＩＤが“Ｘ”および“Ｙ”の２つのＮＵＭＡノード３を定義する。図２のＮＵＭＡノード３ＡのＮＵＭＡ  ＩＤは“Ｘ”、ＮＵＭＡノード３ＢのＮＵＭＡ  ＩＤは“Ｙ”として定義される。
【００２６】
ページの項目は、ＮＵＭＡノード３のメモリ５に含まれるページを示す。ＮＵＭＡ  ＩＤが“Ｘ”であるＮＵＭＡノード３Ａに含まれるページとして、ページ“１”およびページ“２”が定義される。また、ＮＵＭＡ  ＩＤが“Ｙ”であるＮＵＭＡノード３Ｂに含まれるページとして、ページ“３”およびページ“４”が定義される。各ページは、メモリ上のアドレスの範囲により指定される。例えば、ページ“１”〜“４”は、それぞれ０ｘ００００−０ｘ１０００、０ｘ１０００−０ｘ２０００、０ｘ２０００−０ｘ３０００、０ｘ３０００−０ｘ４０００のアドレスの範囲のメモリブロックである。
【００２７】
ＣＰＵコアの項目は、ＮＵＭＡノード３に含まれるＣＰＵ４が備えるコアを示す。ＮＵＭＡノード３ＡのＣＰＵ４Ａが備えるコアとして、４つのＣＰＵコアａ、コアｂ、コアｃおよびコアｄが定義される。また、ＮＵＭＡノード３ＢのＣＰＵ４Ｂが備えるコアとして、４つのコアｅ、コアｆ、コアｇおよびコアｈが定義される。
【００２８】
＜装置構成＞
図４は、情報処理装置１の装置構成の一例を示す図である。情報処理装置１（物理サーバ１）は、複数のＮＵＭＡノード３およびハイパーバイザ７を含み、複数の仮想マシン２を稼働させる。図４の例では、情報処理装置１は、２つのＮＵＭＡノード３およびハイパーバイザ７を含み、４つの仮想マシン２を稼働させる。
【００２９】
各ＮＵＭＡノード３は、それぞれＣＰＵ４およびメモリ５を備える。ＣＰＵ４は、様々なコンピュータプログラムをメモリ５にロードして実行することによって、様々な処理を実行する。また、ＣＰＵ４は、複数のコアを含むマルチコアのプロセッサ、複数のＣＰＵを組み合わせたマルチプロセッサであってもよい。ＣＰＵ４は、距離テーブル１０により、各ＮＵＭＡノード３と対応づけられる。
【００３０】
メモリ５は、ＣＰＵ４に、様々なコンピュータプログラムをロードするための記憶領域、及びプログラムを実行するための作業領域を提供する。また、メモリ５は、データを保持するためのバッファとして用いられる。メモリ５は、例えば、Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ（ＲＯＭ）、Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＲＡＭ）等の半導体メモリである。メモリ５は、一定サイズのメモリブロックであるページ単位で管理される。メモリ５は、距離テーブル１０により、各ＮＵＭＡノード３と対応づけられる。
【００３１】
ハイパーバイザ７は、情報処理装置１を仮想化し、複数の仮想マシン２を並列に実行できるようにするソフトウェアである。ハイパーバイザ７は、情報処理装置１のＯＳから、仮想的なＮＵＭＡノードの構成を定義する距離テーブル１０を受け取り、各仮想マシン２において仮想的なＮＵＭＡ環境を構築することができる。情報処理装置１のＣＰＵ４は、コンピュータプログラムにより、ハイパーバイザ７の処理を実行する。ハイパーバイザ７は、「制御部」の一例である。
【００３２】
各仮想マシン２は、複数の仮想ＮＵＭＡノード３０（以下、単にＮＵＭＡノード３０とも呼ばれる）を含む。各ＮＵＭＡノード３０は、それぞれ仮想ＣＰＵ４０およびメモリ５０を備える。ＮＵＭＡノード３０は、「ノード」の一例である。
【００３３】
仮想ＣＰＵ４０は、ＣＰＵ４が備える1以上のＣＰＵコアが割り当てられて、プログラ
ムを実行する。また、仮想ＣＰＵ４０には、所定の時間間隔によるタイムスライスにより、ＣＰＵコアが割り当てられてもよい。
【００３４】
メモリ５０は、メモリ５のページが割り当てられ、自身のＮＵＭＡノード３０に含まれる仮想ＣＰＵ４０に、プログラムをロードするための記憶領域、及びプログラムを実行するための作業領域を提供する。メモリ５０は、「記憶領域」の一例である。
【００３５】
＜仮想ＮＵＭＡ環境＞
図５から７は、情報処理装置１において、仮想マシン２におけるＮＵＭＡ環境（以下、仮想ＮＵＭＡ環境とも呼ばれる）の構築について説明する。
【００３６】
図５は、仮想マシン２上のＮＵＭＡノード３０と物理サーバ１上のＮＵＭＡノード３との対応関係を例示する図である。図５の例では、情報処理装置１は、２つのＮＵＭＡノード３Ａ、３Ｂおよびハイパーバイザ７を含み、複数の仮想マシン２Ａ、２Ｂ等を稼働させる。ハイパーバイザ７は、図４のハイパーバイザ７と同一であるため、その説明は省略される。
【００３７】
ＮＵＭＡノード３Ａは、ＣＰＵ４Ａおよびメモリ５Ａを含む。ＣＰＵ４Ａはマルチコアプロセッサであり、４つのコアａ、コアｂ、コアｃおよびコアｄを備える。メモリ５Ａは、一定サイズのメモリブロックであるページ１およびページ２を含む。同様に、ＮＵＭＡノード３Ｂは、ＣＰＵ４Ｂおよびメモリ５Ｂを含む。ＣＰＵ４Ｂはマルチコアプロセッサであり、４つのコアｅ、コアｆ、コアｇおよびコアｈを備える。メモリ５Ｂは、一定サイズのメモリブロックであるページ３およびページ４を含む。
【００３８】
仮想マシン２Ａは、２つのＮＵＭＡノード３０Ａ、３０Ｂを含む。ＮＵＭＡノード３０Ａは、仮想ＣＰＵ４０Ａおよびメモリ５０Ａを含む。仮想ＣＰＵ４０Ａは、２つのコアａ０およびコアｂ０を備える。メモリ５０Ａは、ページ１０を含む。同様に、ＮＵＭＡノード３０Ｂは、仮想ＣＰＵ４０Ｂおよびメモリ５０Ｂを含む。仮想ＣＰＵ４０Ｂは、２つのコアｃ０およびコアｄ０を備える。メモリ５０Ｂは、ページ２０を含む。
【００３９】
図６は、仮想マシン２Ａ上のＮＵＭＡノード３０の構成を定義する仮想距離テーブル１１の一例を示す図である。仮想距離テーブル１１は、ハイパーバイザ７の起動時に設定ファイル等から読み込まれる。ハイパーバイザ７は、起動時にＯＳから仮想距離テーブル１１の情報を受け取ってもよい。仮想距離テーブル１１で定義される仮想マシン２Ａ上のＮＵＭＡノード３０の構成は、ユーザにより設定されてもよい。
【００４０】
ハイパーバイザ７は、仮想マシン２ごとに仮想距離テーブル１１を保持する。仮想マシン２のＯＳは、仮想距離テーブル１１に基づいて、プロセス６に仮想ＣＰＵ４０Ａ、４０Ｂおよびメモリ５０Ａ、５０Ｂを割り当てる。図６は、図５に示す仮想マシン２Ａに含まれるＮＵＭＡノード３０Ａ、３０Ｂの構成を定義する例を示している。仮想距離テーブル１１は、ＮＵＭＡ  ＩＤ、ページ、仮想ＣＰＵコアの項目を含む。
【００４１】
ＮＵＭＡ  ＩＤの項目は、ＮＵＭＡノード３０の識別子を示す。図６の仮想距離テーブル１１は、ＮＵＭＡ  ＩＤが“Ｘ０”および“Ｘ１”の２つのＮＵＭＡノード３０を定義する。すなわち、図５のＮＵＭＡノード３０ＡのＮＵＭＡ  ＩＤは“Ｘ０”、ＮＵＭＡノード３０ＢのＮＵＭＡ  ＩＤは“Ｘ１”として定義される。
【００４２】
ページの項目は、ＮＵＭＡノード３０のメモリ５０に含まれるページを示す。ＮＵＭＡ
ＩＤが“Ｘ０”であるＮＵＭＡノード３０Ａに含まれるページとして、ページ“１０”が定義される。また、ＮＵＭＡ  ＩＤが“Ｘ１”であるＮＵＭＡノード３０Ｂに含まれるページとして、ページ“２０”が定義される。各ページは、メモリ上のアドレスの範囲により指定されてもよい。例えば、ページ“１０”および“２０”は、それぞれ０ｘ００００−０ｘ１０００、０ｘ１０００−０ｘ２０００のアドレスの範囲のメモリブロックである。
【００４３】
仮想ＣＰＵコアの項目は、ＮＵＭＡノード３０に含まれる仮想ＣＰＵ４０が備えるコアを示す。ＮＵＭＡノード３０Ａの仮想ＣＰＵ４０Ａが備えるコアとして、２つのＣＰＵコアａ０およびコアｂ０が定義される。また、ＮＵＭＡノード３０Ｂの仮想ＣＰＵ４０Ｂが備えるコアとして、２つのコアｃ０およびコアｄ０が定義される。
【００４４】
図７は、物理サーバ１上の資源と仮想マシン２上の資源との対応関係を定義する資源対応テーブル１２の一例を示す図である。資源対応テーブル１２は、ハイパーバイザ７の起動時に設定ファイル等から読み込まれる。ハイパーバイザ７は、起動時にＯＳから資源対応テーブル１２の情報を受け取ってもよい。資源対応テーブル１２で定義される物理サーバ１上の資源と仮想マシン２上の資源との対応関係は、ユーザにより設定されてもよい。
【００４５】
ハイパーバイザ７は、仮想マシン２ごとに資源対応テーブル１２を保持する。ハイパーバイザ７は、資源対応テーブル１２に基づいて、物理サーバ１上の資源を仮想マシン２に割り当てる。図７は、図５に示す物理サーバ１上の資源と仮想マシン２Ａ上の資源との対応関係を定義する例を示している。資源対応テーブル１２は、資源、物理サーバ、仮想マシンの項目を含む。
【００４６】
資源の項目は、物理サーバ１と仮想マシン２との対応関係が定義される資源を示す。図７の例では、ページおよびＣＰＵコアの資源について、物理サーバ１と仮想マシン２との対応関係が定義される。
【００４７】
物理サーバの項目は、物理サーバ１上における資源（ページまたはＣＰＵコア）の識別子を示す。また、仮想マシンの項目は、仮想マシン２上における資源（ページまたはＣＰＵコア）の識別子を示す。
【００４８】
図５および図７の例では、物理サーバ１のページ“１”、“２”は、それぞれ仮想マシン２Ａのページ“１０”、“２０”に割り当てられる。なお、物理サーバ１のページ“１”、“２”は、ＮＵＭＡノード３Ａに含まれるメモリ５Ａ内のページである。また、仮想マシン２Ａのページ“１０”は、ＮＵＭＡノード３０Ａに含まれるメモリ５０Ａ内のページである。仮想マシン２Ａのページ“２０”は、ＮＵＭＡノード３０Ｂに含まれるメモリ５０Ｂ内のページである。
【００４９】
物理サーバ１のＣＰＵコアａ、ｂ、ｃ、ｄは、それぞれ仮想マシン２ＡのＣＰＵコアａ０、ｂ０、ｃ０、ｄ０に割り当てられる。なお、物理サーバ１のＣＰＵコアａ、ｂ、ｃ、ｄは、ＮＵＭＡノード３Ａに含まれるＣＰＵ４Ａが備えるＣＰＵコアである。また、仮想マシン２ＡのＣＰＵコアａ０、ｂ０は、ＮＵＭＡノード３０Ａに含まれる仮想ＣＰＵ４０Ａが備えるＣＰＵコアである。仮想マシン２ＡのＣＰＵコアｃ０、ｄ０は、ＮＵＭＡノード３０Ｂに含まれる仮想ＣＰＵ４０Ｂが備えるＣＰＵコアである。
【００５０】
＜ＮＵＭＡノードの移動＞
図８から図１２は、仮想マシン２を、移動元物理サーバ１Ａ（以下、物理サーバ１Ａとも呼ばれる）から移動先物理サーバ１Ｂ（以下、物理サーバ１Ｂとも呼ばれる）に移動する処理を説明する。仮想マシン２は、ＮＵＭＡノード単位で、物理サーバ１Ａから物理サーバ１Ｂに移動される。
【００５１】
図８から図１２において、物理サーバ１Ａ上で稼働する移動対象の仮想マシン２は、２つのＮＵＭＡノード３０ＡおよびＮＵＭＡノード３０Ｂを含む。ＮＵＭＡノード３０Ａは、仮想ＣＰＵ４０Ａおよびメモリ５０Ａを含む。仮想ＣＰＵ４０Ａは、２つのＣＰＵコアを備える。メモリ５０Ａは、ＮＵＭＡノード３０Ａに対応づけられたページを含む。同様に、ＮＵＭＡノード３０Ｂは、仮想ＣＰＵ４０Ｂおよびメモリ５０Ｂを含む。仮想ＣＰＵ４０Ｂは、２つのＣＰＵコアを備える。メモリ５０Ｂは、ＮＵＭＡノード３０Ｂに対応づけられたページを含む。
【００５２】
なお、仮想ＣＰＵ４０Ａおよび仮想ＣＰＵ４０Ｂが動作中である場合には、それぞれに含まれるＣＰＵコアは黒丸で示される。また、仮想ＣＰＵ４０Ａおよび仮想ＣＰＵ４０Ｂが停止中である場合には、それぞれに含まれるＣＰＵコアは白丸で示される。
【００５３】
ＮＵＭＡノード３０ＡおよびＮＵＭＡノード３０Ｂは、総称してＮＵＭＡノード３０とも呼ばれる。仮想ＣＰＵ４０Ａおよび仮想ＣＰＵ４０Ｂは、総称して仮想ＣＰＵ４０とも呼ばれる。メモリ５０Ａおよびメモリ５０Ｂは、総称してメモリ５０とも呼ばれる。
【００５４】
図８から図１２において、物理サーバ１Ａおよび物理サーバ１Ｂは、それぞれハイパーバイザ７Ａ(図示せず)およびハイパーバイザ７Ｂ(図示せず)を含む。ハイパーバイザ７Ａおよびハイパーバイザ７Ｂは、仮想マシン２の移動を制御する。
【００５５】
ハイパーバイザ７Ａおよびハイパーバイザ７Ｂは、それぞれページ状態テーブル１３Ａおよびページ状態テーブル１３Ｂを備える。ページ状態テーブル１３Ａは、物理サーバ１Ａのハイパーバイザ７Ａによって更新される。ページ状態テーブル１３Ｂは、物理サーバ１Ｂのハイパーバイザ７Ｂによって更新される。
【００５６】
ページ状態テーブル１３Ａおよびページ状態テーブル１３Ｂは、同一のデータ構造を有し、総称してページ状態テーブル１３と呼ばれる。ページ状態テーブル１３は、移動対象の仮想マシン２のＮＵＭＡノード３０Ａ及び３０Ｂ内に含まれるページの転送状態を管理するテーブルである。
【００５７】
ページ状態テーブル１３は、ＮＵＭＡ  ＩＤ、ページ、転送状態の項目を含む。ＮＵＭＡ  ＩＤの項目は、ＮＵＭＡノード３０の識別子を示す。図８から図１２において、物理サーバ１ＡのＮＵＭＡ  ＩＤは“Ｘ０”、物理サーバ１ＢのＮＵＭＡ  ＩＤは“Ｘ１”である。
【００５８】
ページの項目は、ＮＵＭＡノード３０のメモリ５０に含まれるページのページ番号を示す。転送状態の項目は、ページを含むＮＵＭＡノード３０が物理サーバ１Ｂに移動されたか否かを示す。ＮＵＭＡノード３０の物理サーバ１Ｂへの移動が完了していない状態（移動中の状態も含む）は“未”、移動済の状態は“済”で示される。すなわち、転送状態の項目は、ＮＵＭＡノード３０内の各ページが転送された時点で更新されるのではなく、ＮＵＭＡノード単位で物理サーバ１Ｂへの移動が完了した時点で、“済”に更新される。
【００５９】
図８は、移動先物理サーバ１Ｂで空の仮想マシン２を生成する処理を例示する図である。物理サーバ１Ｂのハイパーバイザ７Ｂは、物理サーバ１Ａから移動される仮想マシン２を稼働させるための空の仮想マシン２を生成する。物理サーバ１Ｂで生成される空の仮想マシン２は、物理サーバ１Ａ上で稼働する仮想マシン２と同じＮＵＭＡノード３０の構成により構築される。
【００６０】
物理サーバ１Ａにおける仮想ＣＰＵ４０Ａおよび仮想ＣＰＵ４０Ｂは、動作中である。一方、物理サーバ１Ｂにおける仮想ＣＰＵ４０Ａおよび仮想ＣＰＵ４０Ｂは、停止状態である。
【００６１】
物理サーバ１Ａにおけるメモリ５０Ａは、ページ[１２３]および[２５６]を含む。また、物理サーバ１Ａにおけるメモリ５０Ｂは、ページ[５３２]および[７２１]を含む。一方、物理サーバ１Ｂにおけるメモリ５０Ａおよび５０Ｂは、ページが割り当てられておらず、空の状態である。
【００６２】
ページ状態テーブル１３Ａは、ページ[１２３]および[２５６]を含むＮＵＭＡノード３０Ａの物理サーバ１Ｂへの移動が完了していない状態であり、当該ページの転送状態が“未”であることを示す。また、ページ状態テーブル１３Ａは、ページ[５３２]および[７
２１]を含むＮＵＭＡノード３０Ｂの物理サーバ１Ｂへの移動も完了していない状態であ
り、当該ページの転送状態が“未”であることを示す。ページ状態テーブル１３Ｂは、ページ状態テーブル１３Ａと同一であるため、その説明は省略される。
【００６３】
図９は、仮想マシン２をＮＵＭＡノード単位で移動する処理を例示する図である。図９の例は、ページ[１２３]および[２５６]を含むメモリ５０Ａを備えるＮＵＭＡノード３０Ａが、物理サーバ１Ｂに移動中である状態を示す。
【００６４】
図８と同様に、物理サーバ１Ａにおける仮想ＣＰＵ４０Ａおよび仮想ＣＰＵ４０Ｂは、動作中である。一方、物理サーバ１Ｂにおける仮想ＣＰＵ４０Ａおよび仮想ＣＰＵ４０Ｂは、停止状態である。
【００６５】
物理サーバ１Ａにおけるメモリ５０Ａは、ページ[１２３]および[２５６]を含む。また、物理サーバ１Ａにおけるメモリ５０Ｂは、ページ[５３２]および[７２１]を含む。また、物理サーバ１Ｂにおけるメモリ５０Ａは、転送中のページ[１２３]および[２５６]を含む。物理サーバ１Ｂにおけるメモリ５０Ｂは、ページが割り当てられておらず、空の状態である。
【００６６】
ページ状態テーブル１３Ａは、ページ[１２３]および[２５６]が物理サーバ１Ｂに転送中（ＮＵＭＡノード３０Ａが物理サーバ１Ｂに移動中）であり、当該ページの転送状態が
“未”であることを示す。また、ページ状態テーブル１３Ａは、ページ[５３２]および[
７２１]を含むＮＵＭＡノード３０Ｂの物理サーバ１Ｂへの移動が完了していない状態で
あり、当該ページの転送状態が“未”であることを示す。ページ状態テーブル１３Ｂは、ページ状態テーブル１３Ａと同一であるため、その説明は省略される。
【００６７】
図１０は、ＮＵＭＡノード３０Ａの停止および開始処理を例示する図である。図１０の例は、ＮＵＭＡノード３０Ａの物理サーバ１Ｂへの移動が完了した状態を示す。物理サーバ１Ａのハイパーバイザ７Ａは、ＮＵＭＡノード３０Ａの物理サーバ１Ｂへの移動が完了すると、物理サーバ１Ａ上のＮＵＭＡノード３０Ａの動作を停止する。また、ハイパーバイザ７Ａは、ＮＵＭＡノード３０Ａのメモリ５０Ａを解放する。さらに、物理サーバ１Ｂのハイパーバイザ７Ｂは、物理サーバ１Ｂ上のＮＵＭＡノード３０Ａの動作を開始する。
【００６８】
物理サーバ１Ａにおける仮想ＣＰＵ４０Ａは停止状態となり、物理サーバ１Ｂにおける仮想ＣＰＵ４０Ａは動作中となる。一方、物理サーバ１Ａにおける仮想ＣＰＵ４０Ｂは動作中で、物理サーバ１Ｂにおける仮想ＣＰＵ４０Ｂは停止状態のままである。
【００６９】
物理サーバ１Ａにおけるメモリ５０Ａは解放されている。物理サーバ１Ａにおけるメモリ５０Ｂは、ページ[５３２]および[７２１]を含む。また、物理サーバ１Ｂにおけるメモリ５０Ａは、物理サーバ１Ａから転送されたページ[１２３]および[２５６]を含む。物理サーバ１Ｂにおけるメモリ５０Ｂは、ページが割り当てられておらず、空の状態である。
【００７０】
ページ状態テーブル１３Ａは、ページ[１２３]および[２５６]が物理サーバ１Ｂに転送済（ＮＵＭＡノード３０Ａは物理サーバ１Ｂに移動完了）であり、当該ページの転送状態が“済”であることを示す。また、ページ状態テーブル１３Ａは、ページ[５３２]および[７２１]を含むＮＵＭＡノード３０Ｂの物理サーバ１Ｂへの移動が完了していない状態であり、当該ページの転送状態が“未”であることを示す。ページ状態テーブル１３Ｂは、ページ状態テーブル１３Ａと同一であるため、その説明は省略される。
【００７１】
図１１は、他のＮＵＭＡノードを移動する処理を例示する図である。図１１の例は、ページ[５３２]および[７２１]を含むメモリ５０Ｂを備えるＮＵＭＡノード３０Ｂが、物理サーバ１Ｂに転送中である状態を示す。
【００７２】
物理サーバ１Ａにおける仮想ＣＰＵ４０Ａは停止状態、仮想ＣＰＵ４０Ｂは動作中である。また、物理サーバ１Ｂにおける仮想ＣＰＵ４０Ａは動作中、仮想ＣＰＵ４０Ｂは停止状態である。
【００７３】
物理サーバ１Ａにおけるメモリ５０Ａは解放されている。物理サーバ１Ａにおけるメモリ５０Ｂは、ページ[５３２]および[７２１]を含む。また、物理サーバ１Ｂにおけるメモリ５０Ａは、物理サーバ１Ａから転送されたページ[１２３]および[２５６]を含む。物理サーバ１Ｂにおけるメモリ５０Ｂは、転送中のページ[５３２]および[７２１]を含む。
【００７４】
ページ状態テーブル１３Ａは、ページ[１２３]および[２５６]が物理サーバ１Ｂに転送済（ＮＵＭＡノード３０Ａは物理サーバ１Ｂに移動完了）であり、当該ページの転送状態が“済”であることを示す。ページ状態テーブル１３Ａは、ページ[５３２]および[７２
１]が物理サーバ１Ｂに転送中（ＮＵＭＡノード３０Ｂは物理サーバ１Ｂに移動中）であ
り、当該ページの転送状態が“未”であることを示す。ページ状態テーブル１３Ｂは、ページ状態テーブル１３Ａと同一であるため、その説明は省略される。
【００７５】
図１２は、他のＮＵＭＡノード３０Ｂの停止および開始処理を例示する図である。図１２の例は、ＮＵＭＡノード３０Ｂの物理サーバ１Ｂへの移動が完了した状態を示す。物理
サーバ１Ａのハイパーバイザ７Ａは、ＮＵＭＡノード３０Ｂの物理サーバ１Ｂへの移動が完了すると、物理サーバ１Ａ上のＮＵＭＡノード３０Ｂの動作を停止する。また、ハイパーバイザ７Ａは、ＮＵＭＡノード３０Ｂのメモリ５０Ｂを解放する。さらに、物理サーバ１Ｂのハイパーバイザ７Ｂは、物理サーバ１Ｂ上のＮＵＭＡノード３０Ｂの動作を開始する。
【００７６】
物理サーバ１Ａにおける仮想ＣＰＵ４０Ｂは停止状態となり、物理サーバ１Ｂにおける仮想ＣＰＵ４０Ｂは動作中となる。一方、物理サーバ１Ａにおける仮想ＣＰＵ４０Ａは停止状態で、物理サーバ１Ｂにおける仮想ＣＰＵ４０Ａは動作中のままである。
【００７７】
物理サーバ１Ａにおけるメモリ５０Ａおよびメモリ５０Ｂは解放されている。一方、物理サーバ１Ｂにおけるメモリ５０Ａは、ページ[１２３]および[２５６]を含む。また、物理サーバ１Ｂにおけるメモリ５０Ｂは、ページ[５３２]および[７２１]を含む。
【００７８】
ページ状態テーブル１３Ａは、ページ[１２３]および[２５６]が物理サーバ１Ｂに転送済（ＮＵＭＡノード３０Ａは物理サーバ１Ｂに移動完了）であり、当該ページの転送状態が“済”であることを示す。また、ページ状態テーブル１３Ａは、ページ[５３２]および[７２１]も物理サーバ１Ｂに転送済（ＮＵＭＡノード３０Ｂは物理サーバ１Ｂに移動完了）であり、当該ページの転送状態が“済”であることを示す。ページ状態テーブル１３Ｂは、ページ状態テーブル１３Ａと同一であるため、その説明は省略される。
【００７９】
＜仮想ＣＰＵの動作制御＞
図１３は、移動元の物理サーバ１Ａで仮想ＣＰＵ４０Ｂを停止する処理を例示する図である。図１３の例は、図１０における物理サーバ１Ａ上の仮想マシン２と同じ状態を示している。すなわち、図１３の例は、物理サーバ１Ｂに対し、ＮＵＭＡノード３０Ａの移動が完了した状態を示す。ＮＵＭＡノード３０Ａのメモリ５０Ａは、解放されている。
【００８０】
動作中のプロセス６は、既に解放されたメモリ５０Ａに含まれるページにアクセスする場合がある。ハイパーバイザ７Ａは、ページ状態テーブル１３Ａを参照し、アクセスしたページの転送状態が“済”、すなわち、アクセスしたページを含むＮＵＭＡノード３０Ａが移動先物理サーバ１Ｂに移動済である場合、当該プロセス６を実行する仮想ＣＰＵ４０Ｂを停止する。
【００８１】
一方、移動先の物理サーバ１Ｂにおいても、ハイパーバイザ７Ｂは、仮想ＣＰＵ４０の動作を制御する。図１０において、ＮＵＭＡノード３０Ａは物理サーバ１Ｂに移動されているが、ＮＵＭＡノード３０Ｂは物理サーバ１Ｂに移動されていない。物理サーバ１Ｂ上で実行されるプロセス６は、ＮＵＭＡノード３０Ｂのメモリ５０Ｂに含まれるページにアクセスする場合がある。ハイパーバイザ７Ｂは、ページ状態テーブル１３Ｂを参照し、アクセスしたページの転送状態が“未”、すなわち、アクセスしたページを含むＮＵＭＡノード３０Ｂが移動元物理サーバ１Ａから移動されていない場合、当該プロセス６を実行する仮想ＣＰＵ４０Ａを停止する。
【００８２】
＜処理の流れ＞
【００８３】
図１４から図１６は、仮想マシン２の移動処理を説明する。仮想マシン２の移動処理は、図８から図１２において、仮想マシン２を、物理サーバ１Ａから物理サーバ１Ｂに移動する例を用いて説明される。
【００８４】
図１４は、仮想マシン２の移動処理の例を示すフローチャートである。図１４に示される処理は、例えば、物理サーバ１ＡがＣＰＵ４またはメモリ５の使用状況を監視し、負荷
が検出されることにより開始される。また、図１４に示される処理は、ユーザの指示により開始されてもよい。
【００８５】
ＯＰ１では、物理サーバ１ＡのＣＰＵ４は、メモリ不足により仮想マシン２を他の物理サーバ１に移動するか否かを判定する。仮想マシン２を他の物理サーバ１に移動する場合には（ＯＰ１：Ｙｅｓ）、処理がＯＰ２に進む。仮想マシン２を他の物理サーバ１に移動しない場合には（ＯＰ１：Ｎｏ）、処理が終了する。
【００８６】
ＯＰ２では、物理サーバ１ＡのＣＰＵ４は、物理サーバ１上で稼働している複数の仮想マシン２から、移動対象の仮想マシン２を選択する。ＣＰＵ４は、移動対象の仮想マシン２として、例えば、システムコールの発行数が他の仮想マシン２よりも少ない仮想マシン２を選択することができる。当該仮想マシン２に含まれるＮＵＭＡノード３０は、自身のＮＵＭＡノード３０に対応づけられたメモリ５０以外のグローバルなメモリ領域へのアクセス回数が、他の仮想マシン２に含まれるＮＵＭＡノード３０よりも少ないためである。ＯＰ２の処理は、「他の仮想マシンよりもオペレーティングシステムに対する処理の呼出しが少ない仮想マシンを、前記他の情報処理装置に移動する仮想マシンとして選択する」処理の一例である。
【００８７】
ＯＰ３では、物理サーバ１Ａおよび物理サーバ１ＢのＣＰＵ４は、ＯＰ２で選択された仮想マシン２を物理サーバ１Ａから物理サーバ１Ｂに移動する処理を実行し、処理が終了する。
【００８８】
図１５は、仮想マシン２の移動処理の詳細を例示するフローチャートである。図１５に示される処理は、図１４のＯＰ３の処理の詳細を例示する。仮想マシン２は、ＮＵＭＡノード単位で物理サーバ１Ａから物理サーバ１Ｂに移動される。図１５に示される処理は、物理サーバ１ＡのＣＰＵ４が移動対象の仮想マシン２を選択することにより開始される。
【００８９】
なお、図１５に示される処理は、物理サーバ１Ａまたは物理サーバ１ＢのＣＰＵ４が実行主体であるが、物理サーバ１Ａのハイパーバイザ７Ａまたは物理サーバ１Ｂのハイパーバイザ７Ｂを動作主体として説明される。
【００９０】
ＯＰ１０では、ハイパーバイザ７Ａは、物理サーバ１Ｂに移動されたＮＵＭＡノード３０の数を計数する変数Ｋを、Ｋ＝０に初期化する。ＯＰ１１では、ハイパーバイザ７Ａは、仮想マシン２に含まれるＮＵＭＡノード３０の物理サーバ１Ｂへの移動が完了したか否かを判定する。仮想マシン２に含まれるＮＵＭＡノード３０の物理サーバ１Ｂへの移動が完了した場合には（ＯＰ１１：Ｙｅｓ）、処理が終了する。仮想マシン２に含まれるＮＵＭＡノード３０の物理サーバ１Ｂへの移動が完了していない場合には（ＯＰ１１：Ｎｏ）、処理がＯＰ１２に進む。
【００９１】
ＯＰ１２では、ハイパーバイザ７Ａは、仮想マシン２に含まれるＮＵＭＡノード３０の中から、移動対象のＮＵＭＡノード３０を選択する。なお、ハイパーバイザ７Ａは、ＮＵＭＡノード３０を跨ぐページアクセス回数が、他のＮＵＭＡノード３０より少ないＮＵＭＡノード３０から順に、移動対象のＮＵＭＡノード３０として選択し、物理サーバ１Ｂに移動する。ＮＵＭＡノード３０を跨ぐページアクセスは、自身のＮＵＭＡノード３０以外のＮＵＭＡノード３０のメモリ５０またはグローバルなメモリ領域に含まれるページへのアクセスである。
【００９２】
ＮＵＭＡノード３０を跨ぐページアクセス回数が、他のＮＵＭＡノード３０より少ないＮＵＭＡノード３０は、物理メモリの使用量またはシステムコールの発行数に基づいて選択することができる。すなわち、物理メモリの使用量が少ないほど、他のＮＵＭＡノード
のメモリの使用は少なく、ＮＵＭＡノード３０を跨ぐページアクセス回数は少なくなる。また、システムコールの発行数が少ないほど、グローバルなメモリ領域へのアクセスは少なく、ＮＵＭＡノード３０を跨ぐページアクセス回数は少なくなる。
【００９３】
ＯＰ１３では、ハイパーバイザ７Ａは、ＯＰ１２で選択したＮＵＭＡノード３０を、物理サーバ１Ｂに移動する。ハイパーバイザ７Ａは、例えば、ライブマイグレーションにより、ＮＵＭＡノード３０を物理サーバ１Ｂに移動してもよい。
【００９４】
ＯＰ１２およびＯＰ１３の処理は、「前記仮想マシンの前記複数のノードを、他のノードに対応づけられた記憶領域へのアクセス回数が少ない順に、前記他の情報処理装置に移動する」処理の一例である。
【００９５】
ＯＰ１４では、ハイパーバイザ７Ａは、ページ状態テーブル１３Ａにおいて、移動したＮＵＭＡノード３０のメモリ５０に含まれるページの転送状態を“済”に更新する。また、ハイパーバイザ７Ｂは、ページ状態テーブル１３Ｂにおいて、移動したＮＵＭＡノード３０のメモリ５０に含まれるページの転送状態を“済”に更新する。
【００９６】
ＯＰ１５では、ハイパーバイザ７Ａは、移動元の物理サーバ１Ａにおいて、移動されたＮＵＭＡノード３０のメモリ５０を解放する。ＯＰ１５の処理は、「一のノードが前記第２の情報処理装置に移動された後、前記移動されたノードに対応づけられた記憶領域を解放」する処理の一例である。
【００９７】
ＯＰ１６では、ハイパーバイザ７Ａは、移動元の物理サーバ１Ａにおいて、移動されたＮＵＭＡノード３０の動作を停止する。ＯＰ１６の処理は、「前記他の情報処理装置に移動されていないノードが、前記移動されたノードの記憶領域にアクセスした場合に、前記移動されていないノードの動作を停止する」処理の一例である。
【００９８】
ＯＰ１７では、ハイパーバイザ７Ｂは、移動先の物理サーバ１Ｂにおいて、移動されたＮＵＭＡノード３０の動作を開始する。ＯＰ１７の処理は、は、「一のノードが移動された後、前記移動されたノード（３０）の動作を開始」する処理の一例である。また、ＯＰ１７の処理は、「前記移動されたノードの移動を受け付けた後、前記移動されたノードの動作を開始」する処理の一例である。
【００９９】
ＯＰ１８では、ハイパーバイザ７Ｂは、移動先の物理サーバ１Ｂにおいて、停止させたＮＵＭＡノード３０の動作を再開する。なお、ハイパーバイザ７Ｂが停止させたＮＵＭＡノード３０は、物理サーバ１Ｂに移動済のＮＵＭＡノード３０で、移動されていないＮＵＭＡノード３０に含まれるメモリ５０にアクセスすることにより、ハイパーバイザ７Ｂが動作を停止させたＮＵＭＡノード３０である。ＮＵＭＡノード３０の移行が完了するごとに、移動先の物理サーバ１Ｂにおいて停止させたＮＵＭＡノード３０の動作が再開され、移動先の物理サーバ１Ｂは、仮想マシン２の処理の続行が可能となる。
【０１００】
ＯＰ１９では、ハイパーバイザ７Ａは、物理サーバ１Ｂに移動されたＮＵＭＡノード３０の数を計数する変数Ｋを１増やし、処理がＯＰ１１に戻る。ＯＰ１７およびＯＰ１８の処理は、物理サーバ１Ｂのハイパーバイザ７Ｂであるため、ハイパーバイザ７Ａは、ＯＰ１６の処理の後、ＯＰ１７と並行してＯＰ１９の処理を実行してもよい。
【０１０１】
図１６は、仮想ＣＰＵ４０の動作制御処理の例を示すフローチャートである。図１６に示される処理は、物理サーバ１Ａまたは物理サーバ１Ｂにおいてページフォルトが発生することにより開始される。
【０１０２】
ページフォルトは、移動元の物理サーバ１Ａで実行されるプロセス６が、物理サーバ１Ｂに移動済のＮＵＭＡノード３０に含まれていたメモリ５０で、既に解放されたメモリ領域にアクセスした場合に発生する。また、ページフォルトは、移動先の物理サーバ１Ｂで実行されるプロセス６が、物理サーバ１Ａからの移動が完了していないＮＵＭＡノード３０に含まれるメモリ５０にアクセスした場合に発生する。その他、通常のページフォルトが発生する。
【０１０３】
図１６に示される処理は、物理サーバ１Ａまたは物理サーバ１ＢのＣＰＵ４が実行主体であるが、物理サーバ１Ａのハイパーバイザ７Ａまたは物理サーバ１Ｂのハイパーバイザ７Ｂを動作主体として説明される。
【０１０４】
ＯＰ２０では、ハイパーバイザ７Ａは、自身のＮＵＭＡノード３０が移動元の物理サーバ１Ａにあり、自身のＮＵＭＡノード３０がアクセスしたページを含むＮＵＭＡノード３０が物理サーバ１Ｂに移動済であるか否かを判定する。自身のＮＵＭＡノード３０がアクセスしたページを含むＮＵＭＡノード３０が物理サーバ１Ｂに移動済である場合には（ＯＰ２０：Ｙｅｓ）、処理がＯＰ２３に進む。自身のＮＵＭＡノード３０がアクセスしたページを含むＮＵＭＡノード３０が物理サーバ１Ｂに移動されていない場合には（ＯＰ２０：Ｎｏ）、処理がＯＰ２１に進む。
【０１０５】
ＯＰ２１では、ハイパーバイザ７Ｂは、自身のＮＵＭＡノード３０が移動先の物理サーバ１Ｂにあり、自身のＮＵＭＡノード３０がアクセスしたページを含むＮＵＭＡノード３０が物理サーバ１Ａから移動済であるか否かを判定する。自身のＮＵＭＡノード３０がアクセスしたページを含むＮＵＭＡノード３０が物理サーバ１Ａから移動済である場合には（ＯＰ２１：Ｙｅｓ）、処理がＯＰ２２に進む。自身のＮＵＭＡノード３０がアクセスしたページを含むＮＵＭＡノード３０が物理サーバ１Ａから移動されていない場合には（ＯＰ２１：Ｎｏ）、処理がＯＰ２３に進む。
【０１０６】
ＯＰ２２では、自身のＮＵＭＡノード３０が存在する物理サーバ１のＣＰＵ４は、ＯＳに実装されているページフォルトハンドラの処理を実行し処理が終了する。ＯＰ２３では、自身のＮＵＭＡノード３０が存在する物理サーバ１のハイパーバイザ７は、自身のＮＵＭＡノード３０の仮想ＣＰＵ４０を停止し、処理が終了する。ＯＰ２３の処理は、「前記移動されたノードが前記第１の情報処理装置から移動されていないノードに対応づけられた記憶領域にアクセスした場合に、前記移動されていないノードの移動が完了するまで、前記移動されたノードの動作を停止する」処理の一例である。
【０１０７】
＜実施形態の作用効果＞
物理サーバ１は、仮想マシン２をＮＵＭＡノード単位で、移動先の物理サーバ１に移動する。物理サーバ１は、ＮＵＭＡノード３０の移動が完了した時点で、移動したＮＵＭＡノード３０に対応づけられたメモリ５０を解放する。これにより、物理サーバ１は、移動したＮＵＭＡノード３０で利用していたメモリ５０を、迅速に解放することができる。したがって、物理サーバ１は、迅速にメモリ不足を解消することができる。また、移動先の物理サーバ１は、移動された仮想マシン２の動作を早期に開始させ、仮想マシン２の処理をなるべく続行させることができる。
【０１０８】
物理サーバ１は、移動先の物理サーバ１に移動されていないＮＵＭＡノード３０が、移動先の物理サーバ１に移動済のＮＵＭＡノード３０のメモリ５０にアクセスした場合、当該移動されていないＮＵＭＡノード３０の動作を停止する。これにより、物理サーバ１は、仮想マシン２を動作状態のまま移動先の物理サーバに移動しても、移動元および移動先の物理サーバ間のデータの不整合を回避することができる。
【０１０９】
物理サーバ１は、仮想マシン２に含まれる複数のＮＵＭＡノード３０を、他のＮＵＭＡノード３０に含まれるメモリ５０へのアクセス回数が少ない順に、移動先の物理サーバ１に移動する。ＮＵＭＡノード３０を跨ぐページアクセスが、他のＮＵＭＡノード３０より少ないＮＵＭＡノード３０から順に移動されるため、ハイパーバイザ７が仮想ＣＰＵ４０の動作を停止する場合が減少する。これにより、物理サーバ１は、仮想マシン２を迅速に移動先の物理サーバ１に移動することができる。
【０１１０】
物理サーバ１は、複数の仮想マシン２を稼働させる場合、他の仮想マシン２よりもシステムコールの発行数が少ない仮想マシン２を移動先の物理サーバ１に移動する。ＮＵＭＡノード３０を跨ぐページアクセスが減ることで、ハイパーバイザ７が仮想ＣＰＵ４０の動作を停止する場合が減少する。これにより、物理サーバ１は、仮想マシン２を迅速に移動先の物理サーバ１に移動することができる。
【０１１１】
移動先の物理サーバ１は、移動元の物理サーバ１から仮想マシン２の移動を受け付ける場合、ＮＵＭＡノード単位で移動を受け付ける。移動先の物理サーバ１は、移動されたＮＵＭＡノード３０が、移動元の物理サーバ１から移動されていないＮＵＭＡノード３０に含まれるメモリ５０にアクセスした場合、当該移動されたＮＵＭＡノード３０の動作を停止する。移動先の物理サーバ１は、移動されていないＮＵＭＡノード３０の移動が完了すると、当該停止したＮＵＭＡノード３０の動作を再開する。これにより、移動先の物理サーバ１は、移動された仮想マシンの動作を早期に開始させ、仮想マシンの処理をなるべく続行することができる。
【０１１２】
＜記録媒体＞
コンピュータその他の機械、装置（以下、コンピュータ等）に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
【０１１３】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスクやＲＯＭ等がある。さらに、Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ（ＳＳＤ）はコンピュータ等から取り外し可能な記録媒体としても、コンピュータ等に固定された記録媒体としても利用可能である。
【符号の説明】
【０１１４】
１、１Ａ、１Ｂ        情報処理装置、物理サーバ
２、２Ａ、２Ｂ        仮想マシン
３、３Ａ、３Ｂ        ＮＵＭＡノード
３０、３０Ａ、３０Ｂ    仮想ＮＵＭＡノード
４、４Ａ、４Ｂ        ＣＰＵ
４０、４０Ａ、４０Ｂ    仮想ＣＰＵ
５、５Ａ、５Ｂ、５０、５０Ａ、５０Ｂ    メモリ
６                    プロセス
７                    ハイパーバイザ
１０                  距離テーブル
１１                  仮想距離テーブル
１２                  資源対応テーブル
１３、１３Ａ、１３Ｂ    ページ状態テーブル
【図１】
0006645275.tif 000002
【図２】
0006645275.tif 000003
【図３】
0006645275.tif 000004
【図４】
0006645275.tif 000005
【図５】
0006645275.tif 000006
【図６】
0006645275.tif 000007
【図７】
0006645275.tif 000008
【図８】
0006645275.tif 000009
【図９】
0006645275.tif 000010
【図１０】
0006645275.tif 000011
【図１１】
0006645275.tif 000012
【図１２】
0006645275.tif 000013
【図１３】
0006645275.tif 000014
【図１４】
0006645275.tif 000015
【図１５】
0006645275.tif 000016
【図１６】
0006645275.tif 000017