(57)【特許請求の範囲】
【請求項１】
第１のコンピュータ上で起動された仮想計算機を第２のコンピュータへ移動する前記仮想計算機の移動時以外の動作時に、前記仮想計算機と外部との通信を前記第１のコンピュータ上の第１バッファ経由で行い、
前記仮想計算機の移動要求に応答して、前記第１のコンピュータ上の第２バッファを、前記第１のコンピュータの記憶装置内に形成し、
前記仮想計算機の移動時に、前記仮想計算機と前記外部との通信を前記第１のコンピュータ上の前記第２バッファ経由で行う、
処理を前記第１のコンピュータに実行させ、
前記仮想計算機の移動時に行う前記仮想計算機と前記外部との通信は、前記仮想計算機の移動要求に応答して、前記仮想計算機が移動中に受信した前記仮想計算機宛の情報を前記第２バッファへ転送し、前記仮想計算機が停止したことに応答して前記第２バッファ内の情報を前記第２のコンピュータへ転送し、転送後前記第２バッファを削除することを特徴とする、プログラム。
【請求項２】
前記第２のコンピュータは、前記第１のコンピュータ上の前記第１及び第２バッファに対応する第１及び第２バッファを有し、
前記仮想計算機の移動時に行う前記仮想計算機と前記外部との通信は、移動後の仮想計算機への通信経路が更新されるまでは、前記仮想計算機宛の情報を前記移動後の仮想計算機が起動される前記第２のコンピュータ上の前記第２バッファへ転送することを特徴とする、請求項１記載のプログラム。
【請求項３】
移動中の前記仮想計算機からの情報取得要求に応答して、前記第１のコンピュータ上の前記第１バッファが空になった後に前記第１のコンピュータ上の前記第２バッファから情報を読み出して前記移動中の仮想計算機に転送する、
処理を前記第１のコンピュータに実行させることを特徴とする、請求項１又は２記載のプログラム。
【請求項４】
コンピュータであって、
前記コンピュータ上で起動された仮想計算機の移動時以外の動作時に、前記仮想計算機と外部と通信が経由される第１バッファと、
前記仮想計算機の移動要求に応答して、前記仮想計算機の移動時に前記仮想計算機と前記外部との通信が経由される第２バッファを記憶装置内に形成する手段と、
前記仮想計算機の移動要求に応答して、前記仮想計算機が移動中に受信した前記仮想計算機宛の情報を前記第２バッファへ転送し、前記仮想計算機が停止したことに応答して前記第２バッファ内の情報を前記仮想計算機の移動先へ転送し、転送後前記第２バッファを削除する手段を備えたことを特徴とする、コンピュータ。
【請求項５】
第１のコンピュータ上で起動された仮想計算機を第２のコンピュータへ移動する前記仮想計算機の移動時以外の動作時に、前記仮想計算機と外部との通信を前記第１のコンピュータ上の第１バッファ経由で行い、
前記仮想計算機の移動要求に応答して、前記第１のコンピュータ上の第２バッファを、前記第１のコンピュータの記憶装置内に形成し、
前記仮想計算機の移動時に、前記仮想計算機と前記外部との通信を前記第１のコンピュータ上の前記第２バッファ経由で行い、
前記仮想計算機の移動時に行う前記仮想計算機と前記外部との通信は、前記仮想計算機の移動要求に応答して、前記仮想計算機が移動中に受信した前記仮想計算機宛の情報を前記第２バッファへ転送し、前記仮想計算機が停止したことに応答して前記第２バッファ内の情報を前記第２のコンピュータへ転送し、転送後前記第２バッファを削除することを特徴とする、仮想計算機移動方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想計算機移動方法、コンピュータ及びプログラムに関する。
【背景技術】
【０００２】
複数のサーバがネットワークを介して接続されたシステムにおいて、例えば移動元のサーバ内で起動された仮想計算機を移動先のサーバへ移動することがある。仮想計算機の移動処理では、移動する仮想計算機で使用している移動元のサーバ内のメモリの内容が移動先のサーバ内のメモリへ転送される。移動元のサーバ内のメモリの内容を移動先のサーバ内のメモリへ転送中であっても、移動処理の対象となる仮想計算機での処理は継続しており、例えば未転送のメモリの内容量が所定値以下になると移動処理の対象となる仮想計算機を停止する。移動元のサーバ内のメモリの内容が全て移動先のサーバ内のメモリへ転送されると、移動先のサーバ内のメモリの内容を使用して移動先のサーバ内で仮想計算機を稼働させる。
【０００３】
一方、仮想計算機の移動時に仮想計算機を停止した後に移動元のサーバが受信したパケットは、全て移動元のサーバ内のハイパーバイザ（Hypervisor）で廃棄される。又、仮想計算機を移動先のサーバへ移動した後も、ネットワーク構成が変更されて移動後の仮想計算機への通信経路が移動先のサーバに更新されるまでは、パケットは移動元のサーバへ送信され続ける。このため、ネットワーク構成が変更されて移動後の仮想計算機への通信経路が移動先のサーバに更新されるまでは、移動元のサーバが受信したパケットは、全て移動元のサーバ内のハイパーバイザで廃棄される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−１５３５４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来、仮想計算機の移動時には、移動元で仮想計算機が停止した後、移動先の仮想計算機への通信経路が更新されてネットワーク構成が変更されるまでは、パケットが移動元の仮想計算機が起動されたサーバへ送信され続けられるため廃棄されてしまうという問題があった。
【０００６】
そこで、本発明は、仮想計算機の移動時に仮想計算機で送受信するパケットの廃棄を防止する仮想計算機移動方法、コンピュータ及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一観点によれば、第１のコンピュータ上で起動された仮想計算機を第２のコンピュータへ移動する前記仮想計算機の移動時以外の動作時に、前記仮想計算機と外部との通信を前記第１のコンピュータ上の第１バッファ経由で行い、前記仮想計算機の移動要求に応答して、前記第１のコンピュータ上の第２バッファを、前記第１のコンピュータの記憶装置内に形成し、前記仮想計算機の移動時に、前記仮想計算機と前記外部との通信を前記第１のコンピュータ上の前記第２バッファ経由で行い、前記仮想計算機の移動時に行う前記仮想計算機と前記外部との通信は、前記仮想計算機の移動要求に応答して、前記仮想計算機が移動中に受信した前記仮想計算機宛の情報を前記第２バッファへ転送し、前記仮想計算機が停止したことに応答して前記第２バッファ内の情報を前記第２のコンピュータへ転送し、転送後前記第２バッファを削除する仮想計算機移動方法が提供される。
【０００８】
本発明の一観点によれば、コンピュータであって、前記コンピュータ上で起動された仮想計算機の移動時以外の動作時に、前記仮想計算機と外部と通信が経由される第１バッファと、前記仮想計算機の移動要求に応答して、前記仮想計算機の移動時に前記仮想計算機と前記外部との通信が経由される第２バッファを記憶装置内に形成する手段と、前記仮想計算機の移動要求に応答して、前記仮想計算機が移動中に受信した前記仮想計算機宛の情報を前記第２バッファへ転送し、前記仮想計算機が停止したことに応答して前記第２バッファ内の情報を前記仮想計算機の移動先へ転送し、転送後前記第２バッファを削除する手段を備えたコンピュータが提供される。
【０００９】
本発明の一観点によれば、第１のコンピュータ上で起動された仮想計算機を第２のコンピュータへ移動する前記仮想計算機の移動時以外の動作時に、前記仮想計算機と外部との通信を前記第１のコンピュータ上の第１バッファ経由で行い、前記仮想計算機の移動要求に応答して、前記第１のコンピュータ上の第２バッファを、前記第１のコンピュータの記憶装置内に形成し、前記仮想計算機の移動時に、前記仮想計算機と前記外部との通信を前記第１のコンピュータ上の前記第２バッファ経由で行う、処理を前記第１のコンピュータに実行させ、前記仮想計算機の移動時に行う前記仮想計算機と前記外部との通信は、前記仮想計算機の移動要求に応答して、前記仮想計算機が移動中に受信した前記仮想計算機宛の情報を前記第２バッファへ転送し、前記仮想計算機が停止したことに応答して前記第２バッファ内の情報を前記第２のコンピュータへ転送し、転送後前記第２バッファを削除するプログラムが提供される。
【発明の効果】
【００１０】
開示の仮想計算機移動方法、コンピュータ及びプログラムによれば、仮想計算機の移動時に仮想計算機で送受信するパケットの廃棄を防止することができる。
【図面の簡単な説明】
【００１１】
【図１】複数のサーバがネットワークを介して接続されたシステムの一例を示すブロック図である。
【図２】サーバのハードウェア構成の一例を示すブロック図である。
【図３】移動元のサーバの一例を示すブロック図である。
【図４】移動元のサーバにおける仮想計算機の移動要求時の処理を説明するフローチャートである。
【図５】移動元のサーバにおける仮想スイッチの処理を説明するフローチャートである。
【図６】移動元のサーバにおける仮想計算機からのパケット取得時の仮想スイッチの処理を説明するフローチャートである。
【図７】移動元のサーバにおける仮想計算機からのパケット受信時の処理を説明するフローチャートである。
【図８】移動元のサーバにおける仮想計算機の停止検出時の仮想スイッチの処理を説明するフローチャートである。
【図９】移動先のサーバの一例を示すブロック図である。
【図１０】移動先のサーバにおける仮想計算機の移動検出時の仮想スイッチの処理を説明するフローチャートである。
【図１１】移動先のサーバにおける移動用バッファに関連する処理を説明するフローチャートである。
【図１２】移動先のサーバにおける仮想計算機からのパケット取得時の仮想スイッチの処理を説明するフローチャートである。
【図１３】移動先のサーバにおける仮想計算機からのパケット受信時の仮想スイッチの処理を説明するフローチャートである。
【図１４】仮想計算機からPCIExpressデバイスへのアクセスを説明するブロック図である。
【発明を実施するための形態】
【００１２】
開示の仮想計算機移動方法、コンピュータ及びプログラムでは、物理計算機（又は、コンピュータ）上で起動された仮想計算機を移動する場合に、移動元及び移動先の物理計算機のハイパーバイザで仮想計算機移動用のバッファを形成し、仮想計算機と外部との通信を移動用のバッファ経由で行う。移動元の物理計算機の仮想計算機を移動するために仮想計算機を停止した後に、仮想計算機が移動中に受信され移動用のバッファ内に格納された仮想計算機宛の情報の移動先の物理計算機への送信を開始すると共に、ネットワーク構成が変更されて移動後の仮想計算機への通信経路が移動先の物理計算機に更新されるまでは、移動元の物理計算機の仮想計算機へ送信されてきた情報を移動先の物理計算機の移動用のバッファへ転送することで、仮想計算機を移動中に送信されてくる情報の廃棄を防止する。
【００１３】
以下に、開示の仮想計算機移動方法、コンピュータ及びプログラムの各実施例を図面と共に説明する。
【実施例】
【００１４】
図１は、複数のサーバがネットワークを介して接続されたシステムの一例を示すブロック図である。図１に示すシステム１は、複数のサーバ２−１〜２−Ｎ（Ｎは２以上の自然数）がネットワーク３を介して接続された構造を有する。各サーバ２−１〜２−Ｎは、プロセッサ、記憶装置等を含む周知の構成を有する汎用コンピュータ等の物理計算機により形成可能である。ネットワーク３は、有線ネットワーク、無線ネットワーク、或いは、有線ネットワークと無線ネットワークの組む合わせで形成可能である。
【００１５】
図２は、サーバのハードウェア構成の一例を示すブロック図である。図２において、サーバ２−ｉ（ｉ＝１〜Ｎ）は、ＣＰＵ（Central Processing Unit）２１、インタフェース（Ｉ／Ｆ）２２、記憶装置２３、キーボードやマウス等を含む入力装置２４、及び表示装置２５がバス２６を介して接続された構造を有する。ＣＰＵ２１は、サーバ２−ｉ全体の制御を司ると共に、ハイパーバイザにより仮想計算機を形成する機能を有する。つまり、仮想計算機は、サーバ２−１上で起動される。Ｉ／Ｆ２２は、サーバ２−ｉから送信されるコマンド（又は、要求）やデータをネットワーク３へ出力すると共に、ネットワーク３から受信したコマンドやデータをサーバ２−ｉに入力する機能を有する。記憶装置２３は、ＣＰＵ２１が実行するハイパーバイザを含む各種プログラム、ＣＰＵ２１が実行する演算の中間データを含む各種データを格納する。入力装置２４は、ＣＰＵ２１に各種コマンドを入力したりデータを入力するのに用いられる。表示装置２５は、ユーザに操作を促す画面やＣＰＵ２１が実行した演算結果等を表示するのに用いられる。
【００１６】
記憶装置２３は、コンピュータ読み取り可能な記憶媒体により形成可能である。コンピュータ読み取り可能な記憶媒体は、一例として、磁気記録媒体、光記録媒体、光磁気記録媒体、ディスクを記録媒体として用いるディスク装置、ＲＯＭ（Read Only Memory）等を含む半導体記憶装置等を含む。
【００１７】
尚、サーバ２−１〜２−Ｎのハードウェア構成は、全て同じである必要はない。又、図２においてＣＰＵ２１に相当する部分を、並列接続された複数のＣＰＵで形成したマルチプロセッサの構造を採用しても良い。
【００１８】
一実施例では、移動元及び移動先のサーバのハイパーバイザで仮想計算機移動用の入出力バッファを形成し、仮想計算機移動要求を受信後は仮想計算機移動用の入出力バッファを使用し外部との通信を行う。
【００１９】
仮想計算機への情報入力処理は、例えば次のように行われる。移動元サーバでは、仮想計算機の停止に応答して、仮想計算機移動要求の受信後に受信され移動用の入出力バッファ内に格納された情報の移動先のサーバへの送信を開始し、移動元のサーバが移動先のサーバに移動した仮想計算機からの移動完了通知を受信するまでは移動用の入出力バッファを保持して受信した情報を移動先に転送し、最後に転送終了通知を移動先サーバへ送信する。一方、移動先サーバでは、移動元のハイパーバイザから送信されてきた通常動作時用の入出力バッファ内の情報を移動用の入出力バッファに格納し、移動された仮想計算機が稼働（又は、起動）或いは再稼働（再起動）されたことに応答して転送終了通知を受信するまで、移動用入力バッファから仮想計算機に情報を送信し、転送終了通知の受信後は通常動作時用の入出力バッファを使用する。
【００２０】
又、仮想計算機からの情報出力処理は、例えば次のように行われる。移動元のサーバでは、仮想計算機移動要求を実行後、移動用の出力バッファで仮想計算機からの情報を受信して移動元のサーバの外部と通信を行う。仮想計算機の停止に応答して、移動用の入出力バッファ内の情報を移動先のサーバへ送信する。移動元のサーバにおいて移動用の入出力バッファ内に不完全な情報がなくなると、不完全な情報がない旨の通知（又は、メッセージ）を移動先のサーバへ送信する。移動先のサーバでは、移動元のハイパーバイザから送信されてきた出力バッファ内の情報を移動用の出力バッファに格納する。仮想計算機の稼働後に仮想計算機から送信されてくる情報の一部と移動用の出力バッファ内の情報で完全な情報（例えば、パケット）を構成し、移動先のサーバの外部へ送信する。不完全な情報がない旨の通知を受信した後は、移動先のサーバでは移動用の出力バッファではなく通常動作時用の出力バッファを使用する。
【００２１】
これにより、仮想計算機を移動させる場合には、移動中に仮想計算機宛、或いは、仮想計算機発の情報の破棄（例えば、パケット落ち）が発生する不都合を解消することができ、例えばミッションクリティカルな業務でも仮想計算機の移動を実現できるので、仮想計算機の適用範囲を広げることが可能となる。
【００２２】
図３は、移動元のサーバの一例を示すブロック図である。この例では、説明の便宜上、サーバ２−１が移動元のサーバであり、後述するサーバ２−２が移動先のサーバであるものとする。図３において、移動元のサーバ２−１は、仮想計算機（ＶＭ：Virtual Machine）３１−１〜３１−Ｍ（Ｍは１以上の自然数）及び仮想スイッチ（ＳＷ：SWitch）３２−１を有する。ＶＭ３１−１〜３１−Ｍ及び仮想ＳＷ３２−１は、夫々ハイパーバイザにより形成されて制御される。仮想ＳＷ３２−１は、セレクタ３２１−１、バッファ３２２−１、ＶＭ移動用バッファ３２３−１、及びディストリビュータ３２４−１を有し、ソフトウェア処理によりパケットを切り替える機能を有する。セレクタ３２１−１はＶＭ３１−１〜３１−Ｍからの情報をバッファ３２２−１又は移動用バッファ３２３−１に選択的に出力する。ディストリビュータ３２４−１は、ネットワーク３から受信した情報をバッファ３２２−１又は移動用バッファ３２３−１に選択的に出力する。バッファ３２２−１は、受信バッファ及び送信バッファを有する。移動用バッファ３２３−１は、移動用受信バッファ及び移動用送信バッファを有する。バッファ３２２−１，３２３−１は、いずれも入力バッファ及び出力バッファを有する入出力バッファである。
【００２３】
この例では、記憶装置２３に格納されているＶＭ３１−１〜３１−Ｍを形成するメモリ内容、及び、ＶＭ３１−１〜３１−Ｍに対して送受信されるデータは、夫々パケット形式でサーバ２−１内及びサーバ２−１，２−２間を転送されるものとする。
【００２４】
尚、図９と共に後述するように、移動先のサーバは移動元のサーバと同様の基本構成を有する。
【００２５】
図４は、移動元のサーバ２−１におけるＶＭ３１−１の移動要求時の処理を説明するフローチャートである。図４の処理は、入力装置２４からＶＭ３１−１のＶＭ移動要求が入力されると開始される。ステップＳ１では、ＶＭ移動処理を開始する。ステップＳ２では、通常動作時用のバッファ（第１バッファ）３２２−１が取得済みであることを示す通常バッファ取得済みフラグを初期化すると共に、ハイパーバイザにより移動用バッファ（第２バッファ）３２３−１を記憶装置２３内に作成（又は、形成）する。ステップＳ２の後、ＶＭ移動処理の完了を待つＶＭ移動完了待ちの状態となる。
【００２６】
サーバ２−１のＶＭを移動中でない通常動作時は、バッファ３２２−１の受信バッファと送信バッファを介して通信を行っているが、ＶＭ移動要求を受信すると、ＶＭ移動処理を開始すると共に、移動用バッファ３２３−１の移動用送信バッファ及び移動用受信バッファを移動するＶＭ毎にサーバ２−１の記憶装置２３内に作成する。
【００２７】
図５は、移動元のサーバ２−１における仮想スイッチ３２−１の処理を説明するフローチャートである。図５の処理は、ネットワーク３からパケットを受信すると開始される。ステップＳ３では、受信したパケットの宛先が移動中のＶＭ３１−１であるか否かを判定する。ステップＳ３の判定結果がＮＯであると、ステップＳ４では、ディストリビュータ３２４−１を制御して受信したパケットをバッファ３２２−１の受信バッファに格納する。一方、ステップＳ３の判定結果がＹＥＳであると、ステップＳ５では、ディストリビュータ３２４−１を制御して受信したパケットを移動用バッファ３２３−１の移動用受信バッファに格納する。ステップＳ４又はＳ５の後、ネットワーク３からのパケットの受信を待つパケット受信待ちの状態となる。
【００２８】
このように、ＶＭ宛のパケットを受信した仮想ＳＷ３２−１は、パケットの宛先であるＶＭが移動中の場合はパケットを移動用バッファ３２３−１に格納し、移動中でない場合はパケットをバッファ３２２−１に格納するようにディストリビュータ３２４−１を制御する。
【００２９】
図６は、移動元のサーバ２−１におけるＶＭからのパケット取得時の仮想スイッチ３２−１の処理を説明するフローチャートである。図６の処理は、ＶＭ３１−１〜３１−Ｍからパケット取得要求があると開始される。ステップＳ１１では、パケット取得要求の要求元が移動中のＶＭであるか否かを判定する。要求元が例えばＶＭ３１−ＭでありステップＳ１１の判定結果がＮＯであると、ステップＳ１２では、バッファ３２２−１の受信バッファに格納されたパケットをセレクタ３２１−１を介して要求元のＶＭ３１−Ｍへ送信する。一方、要求元が例えばＶＭ３１−１でありステップＳ１１の判定結果がＹＥＳであると、処理はステップＳ１３へ進む。
【００３０】
ステップＳ１３では、通常バッファ取得済みフラグが設定されているか否かを判定する。ステップＳ１３の判定結果がＹＥＳであると、処理は後述するステップＳ１７へ進む。ステップＳ１３の判定結果がＮＯであると、ステップＳ１４では、バッファ３２２−１の受信バッファに要求元のＶＭ３１−１宛のパケットが格納されているか否かを判定する。ステップＳ１４の判定結果がＹＥＳであると、ステップＳ１５では、バッファ３２２−１の受信バッファに格納されたパケットを取得し、セレクタ３２１−１を介して要求元のＶＭ３１−１へ送信する。ステップＳ１４の判定結果がＮＯであると、ステップＳ１６では、通常バッファ取得済みフラグを設定し、処理はステップＳ１７へ進む。ステップＳ１７では、移動用バッファ３２３−１の受信バッファに格納されたパケットを取得し、セレクタ３２１−１を介して要求元のＶＭ３１−１へ送信する。ステップＳ１２，Ｓ１５，Ｓ１７のいずれかの後、ＶＭからのパケット取得要求を待つパケット要求待ちの状態となる。
【００３１】
このように、ＶＭからパケット取得要求を受けた仮想ＳＷ３２−１は、要求元のＶＭを移動中でない場合はパケットをバッファ３２２−１から読み出す。要求元のＶＭを移動中の場合はバッファ３２２−１に要求元のＶＭ宛のパケットが格納されているか否かを確認し、要求元のＶＭ宛のパケットがバッファ３２２−１に格納されている場合はパケットをバッファ３２２−１から読み出す。一方、要求元のＶＭ宛のパケットがバッファ３２２−１に格納されていない場合は、通常バッファ取得済フラグを設定してそれ以後はパケットを移動用バッファ３２３−１から取得するようにする。
【００３２】
図７は、移動元のサーバ２−１におけるＶＭからのパケット受信時の処理を説明するフローチャートである。図７の処理は、ＶＭからパケットを受信すると開始される。ステップＳ２１は、パケットの送信元のＶＭは移動中であるか否かを判定する。送信元が例えばＶＭ３１−１でありステップＳ２１の判定結果がＹＥＳであると、ステップＳ２２では、セレクタ３２１−１を制御して受信したパケットを移動用バッファ３２３−１の移動用送信バッファへ送信する。一方、送信元が例えばＶＭ３１−ＭでありステップＳ２１の判定結果がＮＯであると、ステップＳ２３では、セレクタ３２１−１を制御して受信したパケットをバッファ３２２−１の送信バッファへ送信する。ステップＳ２２又はＳ２３の後、ＶＭからのパケットの受信を待つパケット受信待ちの状態となる。
【００３３】
このように、ＶＭからのパケット送信においても、図７に示すように移動中のＶＭからのパケットは移動用バッファ３２３−１の移動用送信バッファに格納し、移動中でないＶＭからのパケットはバッファ３２２−１の送信バッファに格納し、ＶＭからのパケットを移動元のサーバ２−１の外部（この例ではネットワーク３）へ送信する。
【００３４】
図８は、移動元のサーバ２−１におけるＶＭの停止検出時の仮想スイッチ３２−１の処理を説明するフローチャートである。移動元のサーバ２−１内の移動用バッファ３２３−１の格納内容（即ち、パケット）を移動先のサーバ２−１内の移動用バッファ３２３−２へ転送中であっても、移動処理の対象となるＶＭ３１−１での処理は継続しており、例えば未転送の移動用バッファ３２３−１の内容量（即ち、パケット量）が所定値以下になると移動処理の対象となるＶＭ３１−１を停止する。言うまでもなく、この所定値は０（ゼロ）であっても良い。図８の処理は、この例ではＶＭ３１−１の停止を検出すると開始される。ステップＳ３１，Ｓ３４は、並行して実行される。ステップＳ３１では、移動するＶＭ３１−１を識別する情報（例えば、ＵＵＩＤ（Universally Unique IDentifier）、ＭＡＣ（Media Access Control）アドレス等）と移動用バッファ３２３−１の移動用送信バッファに格納されたパケットを例えば移動先のサーバ２−２へ送信する。ステップＳ３２では、移動用バッファ３２３−１の移動用送信バッファが空であるか否かを判定し、判定結果がＮＯであると処理はステップＳ３１へ戻る。ステップＳ３２の判定結果がＹＥＳであると、ステップＳ３２では、移動用送信バッファからの転送終了通知を移動先のサーバ２−２へ送信し、移動用バッファ３２３−１の移動用送信バッファを削除する。移動用送信バッファの削除とは、移動用送信バッファの格納内容を全て削除すること、或いは、移動用バッファ３２３−１内に作成された移動用送信バッファ自体を削除することを意味する。
【００３５】
移動用バッファ３２３−１（又は、バッファ３２２−１）の内容を移動先のサーバ２−２に転送する際、移動用バッファ３２３−１（又は、３２２−１）の記憶容量にも依存するが、例えば記憶容量が１ＧＢであり転送速度が１Ｇｂｐｓであるとすると、最速でも転送に１０秒程度かかる。又、移動用バッファ３２３−１の内容を移動先のサーバ２−２へ転送中でも、ＶＭ３１−１での処理は継続しており、移動元のサーバ２−１でＶＭ３１−１を停止し、移動先のサーバ２−２でＶＭ３１−１をＶＭ１３１−１として再稼働するまでには、例えば１秒程度の時間ＶＭ１３１−１（即ち、移動されたＶＭ３１−１）の処理が中断時間となる。更に、ＶＭ３１−１を移動することにより移動先のＶＭ１３１−１への通信経路を変えるまでに例えば数十秒かかる。本実施例では、これらの期間に移動元のサーバ２−１へ転送されたパケットが廃棄されることを防止する。
【００３６】
一方、ステップＳ３４では、移動するＶＭ３１−１を識別する情報（例えば、ＵＵＩＤ（Universally Unique IDentifier）、ＭＡＣ（Media Access Control）アドレス等）と移動用バッファ３２３−１の移動用受信バッファに格納されたパケットを例えば移動先のサーバ２−２へ送信する。ステップＳ３５では、移動用バッファ３２３−１の移動用受信バッファが空であるか否かを判定し、判定結果がＮＯであると処理はステップＳ３４へ戻る。ステップＳ３５の判定結果がＹＥＳであると、ステップＳ３６では、移動先のサーバ２−２から移動完了通知を受けたか否かを判定し、判定結果がＮＯであると処理はステップＳ３５へ戻る。ステップＳ３６の判定結果がＹＥＳであると、ステップＳ３７では、移動用受信バッファが空であるか否かを判定し、判定結果がＮＯであると処理はステップＳ３４へ戻る。ステップＳ３７の判定結果がＹＥＳであると、ステップＳ３８では、移動用受信バッファからの転送終了通知を移動先のサーバ２−２へ送信し、移動用バッファ３２３−１の移動用受信バッファを削除する。移動用受信バッファの削除とは、移動用受信バッファの格納内容を全て削除すること、或いは、移動用バッファ３２３−１内に作成された移動用受信バッファ自体を削除することを意味する。ステップＳ３３，Ｓ３８の後、処理は終了する。
【００３７】
ＶＭ３１−１の移動時にＶＭ３１−１の停止を検出した場合、移動元のサーバ２−１のハイパーバイザにおいて移動用バッファ３２３−１の移動用送信バッファと移動用受信バッファの格納内容を移動先のサーバ２−２のハイパーバイザへ送信開始する。ＶＭ３１−１を停止したことにより、移動元のサーバ２−１の移動用送信バッファには新たにパケットが送信されることはないので、移動用送信バッファが空になると移動先のサーバ２−２に対して移動用送信バッファからの転送終了通知を送信する。
【００３８】
移動元のサーバ２−１の移動用受信バッファも移動先のサーバ２−２に対して送信を開始するが、移動先でＶＭ３１−１が例えばＶＭ１３１−１として再稼働してネットワーク３の経路が切り替わるまでは移動元のサーバ２−１にパケットが送信される可能性がある。つまり、ネットワーク構成が変更されて移動後のＶＭ１３１−１（即ち、移動したＶＭ３１−１）への通信経路が移動先のサーバ２−２に更新されるまでは、パケットが移動元のサーバ２−１へ送信される可能性がある。そこで、送信元のサーバ２−１の移動用受信バッファが空になった後も、移動先のサーバ２−２からの移動完了通知を受信し、移動元のサーバ２−１の移動用送信バッファが空になるまでは送信処理を継続する。最終的には、移動元のサーバ２−１の移動用送信バッファ及び移動用受信バッファの両方を削除する。
【００３９】
尚、移動完了通知は、例えば周知のＧＡＲＰ（Generic Attribute Registration Protocol）により行うことが可能である。
【００４０】
図９は、移動先のサーバの一例を示すブロック図である。この例では、説明の便宜上、サーバ２−２が移動先のサーバであるものとする。図４において、移動先のサーバ２−２は、仮想計算機（ＶＭ：Virtual Machine）１３１−１〜１３１−Ｌ（Ｌは１以上の自然数）及び仮想スイッチ（ＳＷ：SWitch）３２−２を有する。つまり、ＶＭ１３１−１〜１３１−Ｌはサーバ２−２上で起動される。ＶＭ１３１−１〜１３１−Ｌ及び仮想ＳＷ３２−２は、夫々ハイパーバイザにより形成されて制御される。仮想ＳＷ３２−２は、セレクタ３２１−２、バッファ３２２−２、ＶＭ移動用バッファ３２３−２、及びディストリビュータ３２４−２を有し、ソフトウェア処理によりパケットを切り替える機能を有する。セレクタ３２１−２はＶＭ１３１−１〜１３１−Ｍからの情報をバッファ３２２−２又は移動用バッファ３２３−２に選択的に出力する。ディストリビュータ３２４−２は、ネットワーク３から受信した情報をバッファ３２２−２又は移動用バッファ３２３−２に選択的に出力する。バッファ３２２−２は、受信バッファ及び送信バッファを有する。移動用バッファ３２３−２は、移動用受信バッファ及び移動用送信バッファを有する。バッファ３２２−２，３２３−２は、いずれも入力バッファ及び出力バッファを有する入出力バッファである。
【００４１】
図１０は、移動先のサーバ２−２におけるＶＭ３１−１の移動検出時の仮想スイッチ３２−２の処理を説明するフローチャートである。図１０の処理は、移動先のサーバ２−２において例えば移動元のサーバ２−１から移動するＶＭ３１−１を識別する情報を受信してＶＭ３１−１の移動が検出されると開始される。ＶＭを識別する情報から、当該情報で識別されるＶＭが移動対象であるか否かは、例えばＶＭを識別する情報に移動対象であることを示す属性情報等を含めることで判別可能である。ステップＳ６１では、移動先のサーバ２−２の記憶装置２３内に移動用受信バッファ及び移動用送信バッファを含む移動用バッファ３２３−２を作成（又は、形成）する。これにより、移動用バッファ３２３−２がパケットの受信を待つ移動用バッファ受信待ちの状態となる。
【００４２】
図１１は、移動先のサーバ２−２における移動用バッファ３２３−２に関連する処理を説明するフローチャートである。図１１の処理は、移動先のサーバ２−２の移動用バッファ３２３−２がパケットを受信すると開始される。ステップＳ６２では、移動元のＶＭ１３１−１のパケットを移動用バッファ３２３−２へ送信する。ステップＳ６３では、移動先のサーバ２−２が外部のサーバ、この例では移動元のサーバ２−１からの転送終了通知を受信したか否かを判定する。ステップＳ６３の判定結果がＮＯであると、移動用バッファ３２３−２がパケットの受信を待つ移動用バッファ受信待ちの状態となる。一方、ステップＳ６３の判定結果がＹＥＳであると、移動元のＶＭ３１−１の移動用バッファ３２３−２への送信が完了した移動用バッファ送信完了の状態となる。
【００４３】
図１２は、移動先のサーバ２−２におけるＶＭからのパケット取得時の仮想スイッチ３２−２の処理を説明するフローチャートである。図１２の処理は、移動先のサーバ２−２において、移動対象のＶＭ３１−１が例えばＶＭ１３１−１としてサーバ２−２に移動後に再稼働された後に、移動先のサーバ２−２のＶＭ１３１−１〜１３１Ｌからパケット取得要求があると開始される。ステップＳ４１では、移動先のサーバ２−２の移動用バッファ３２３−２が使用中であるか否かを判定する。ステップＳ４１の判定結果がＮＯであると、ステップＳ４２では、バッファ３２２−２からパケットを読み出して要求元のＶＭへ送信する。一方、ステップＳ４１の判定結果がＹＥＳであると、ステップＳ４３では、移動用バッファ３２３−２からパケットを取得して要求元のＶＭへ送信する。ステップＳ４４では、移動用バッファ３２３−２に要求元のＶＭ宛のパケットが格納されているか否かを判定する。
【００４４】
ステップＳ４４の判定結果がＮＯであると、ステップＳ４５では、移動用バッファ３２３−２への転送終了通知を受信しているか否かを判定する。ステップＳ４５の判定結果がＹＥＳであると、ステップＳ４６では、移動用バッファ３２３−２を削除する。ステップＳ４２，Ｓ４６の後、或いは、ステップＳ４４の判定結果がＹＥＳ、或いは、ステップＳ４５の判定結果がＮＯであると、ＶＭ１３１−１〜１３１Ｌからのパケット取得要求を待つパケット要求待ちの状態となる。
【００４５】
移動先のサーバ２−２において移動対象のＶＭ３１−１が例えばＶＭ１３１−１として再稼働されると、ＶＭ１３１−１からパケットを取得する場合、移動用バッファ３２３−２の移動用受信バッファが使用中のであれば移動用バッファ３２３−２からパケットを取得してＶＭ１３１−１へ送信する。このとき、移動用受信バッファにパケットがなく、移動用受信バッファへの転送終了通知を受信していると、移動用受信バッファを未使用とし削除する。移動用受信バッファが未使用の場合、バッファ３２２−２の受信バッファからパケットを取得してＶＭ１３１−１へ送信する。
【００４６】
図１３は、移動先のサーバ２−２におけるＶＭ３１−１からのパケット受信時の仮想スイッチ３２−２の処理を説明するフローチャートである。図１３の処理は、移動先のサーバ２−２において、移動対象のＶＭ３１−１が例えばＶＭ１３１−１としてサーバ２−２に移動後に再稼働された後に、移動先のサーバ２−２のＶＭ１３１−１〜１３１Ｌからパケット送信要求があると開始される。ステップＳ５１では、移動先のサーバ２−２の移動用バッファ３２３−２の移動用送信バッファが使用中であるか否かを判定する。ステップＳ５１の判定結果がＮＯであると、ステップＳ５２では、要求元の例えばＶＭ１３１−１からのパケットをバッファ３２２−２の送信バッファへ送信する。ステップＳ５３では、バッファ３２２−２の送信バッファに格納されたパケットをサーバ２−２の外部の送信先へ送信する。
【００４７】
一方、ステップＳ５１の判定結果がＹＥＳであると、ステップＳ５４では、要求元の例えばＶＭ１３１−１からのパケットを移動用バッファ３２３−２の移動用送信バッファへ送信する。ステップＳ５５では、移動用バッファ３２３−２の移動用送信バッファに格納されたパケットをサーバ２−２の外部の送信先へ送信する。ステップＳ５６では、移動用バッファ３２３−２の移動用送信バッファが空で、且つ、外部の送信先から受信完了通知を受信しているか否かを判定する。ステップＳ５６の判定結果がＹＥＳであると、ステップＳ５７では、移動用バッファ３２３−２の移動用送信バッファを削除する。
【００４８】
ステップＳ５３，Ｓ５７の後、或いは、ステップＳ５６の判定結果がＮＯであると、ＶＭ１３１−１からのパケット送信要求を待つパケット送信要求待ちの状態となる。
【００４９】
移動先のサーバ２−２において、移動用バッファ３２３−２の移動用送信バッファを使用しない場合はバッファ３２２−２にパケットを送信することでサーバ２−２の外部にパケットを送信する。しかし、移動用バッファ３２３−２の移動用送信バッファを使用している場合は、移動用送信バッファにパケットを送信してからサーバ２−２の外部にパケットを送信する。パケットの送信後に移動用バッファ３２３−２の移動用送信バッファが空になり、受信完了通知を受信している場合には、この移動用送信バッファを未使用として削除する。
【００５０】
従って、一実施例における仮想計算機移動方法によれば、各ＶＭのハイパーバイザによりＶＭ移動用入出力バッファを形成し、ＶＭの移動中の通信はＶＭ移動用入出力バッファを介して行う。具体的には、各サーバのハイパーバイザによりＶＭ移動用入出力バッファをＶＭ移動要求に応答してＶＭ毎に作成する。各サーバの外部から当該サーバ内のＶＭへ送信されてくる情報は、ＶＭ移動用入力バッファが存在する場合は当該ＶＭ移動用入力バッファに格納し、ＶＭ移動用入力バッファが存在しない場合は通常動作時用の入力バッファに格納する。各サーバ内におけるＶＭからの情報取得では、通常動作時用の入力バッファに要求される情報が格納されていない場合にはＶＭ移動用入力バッファから取得する。各サーバのＶＭから当該サーバの外部への情報の送信は、通常動作時用の出力バッファに送信するべき情報の未構成情報が存在する場合には通常動作時用の出力バッファに格納する。一方、通常動作時用の出力バッファにＶＭからの送信するべき情報が格納されていない場合にはＶＭ移動用出力バッファに格納し、ＶＭ移動用出力バッファから当該サーバの外部へ出力する。
【００５１】
サーバにおいてＶＭの移動を検出した場合、ハイパーバイザにより移動中のＶＭ専用のＶＭ移動用入出力バッファを作成し、当該ＶＭ移動用入出力バッファの使用フラグを使用中に設定する。この使用フラグが使用中に設定されている場合は、移動中のＶＭの通信はＶＭ移動用入出力バッファを介して行う。
【００５２】
移動元のサーバで移動するＶＭの停止を検出した場合、ＶＭを識別する情報（例えば、ＵＵＩＤ（Universally Unique IDentifier）、ＭＡＣ（Media Access Control）アドレス等）とＶＭ移動用入出力バッファに格納された情報の移動先のサーバへの転送を開始する。移動元のサーバでＶＭ移動用入出力バッファが空になると、移動先のサーバに対してＶＭを識別する情報を持つ転送終了通知（又は、メッセージ）を送信し、移動先のサーバにＶＭ移動の完了を通知する。
【００５３】
移動元のサーバのＶＭ宛の情報がなくなったことを判断するために、移動元のサーバは移動先のサーバから例えばＧＡＲＰに従った移動完了通知を受信することで、移動元のサーバへの通信がなくなったと判断すると共に、移動元のサーバのＶＭ移動用入力バッファが空となった場合に転送終了通知を送信する。
【００５４】
移動先のサーバで移動されたＶＭが再稼働されると、移動先のサーバにおいて通信が再開する。移動先のサーバのＶＭ移動用入出力バッファの使用フラグが使用中に設定されている場合はＶＭ移動用入出力バッファを介して通信を行い、使用フラグが未使用に設定されている場合は通常動作時用の入出力バッファを介して通信を行う。移動先のサーバのＶＭ移動用出力バッファに未送信、且つ、未構成の情報が格納されている場合は、再稼働されたＶＭからの情報を加えてパケットを構成して移動先のサーバの外部へ送信する。パケット送信後、移動先のサーバのＶＭ移動用出力バッファが空になった場合は、ＶＭ移動用出力バッファの使用フラグを未使用に設定してその使用を停止し、ＶＭからの情報は通常動作時用のバッファを介して送信する。つまり、ＶＭ移動用出力バッファに未送信、且つ、未構成の情報が格納されていない場合は、ＶＭ移動用出力バッファの使用フラグを未使用に設定してその使用を停止し、以後はＶＭからの情報は通常動作時用のバッファ経由で送信する。
【００５５】
移動先のサーバでＶＭが入力バッファから情報を取得する場合、ＶＭ移動用入力バッファの使用フラグが使用中に設定されている場合はＶＭ移動用入力バッファから情報を取得し、使用フラグが未使用に設定されている場合は通常動作時用の入力バッファから情報を取得する。ＶＭ移動用入力バッファの使用フラグは、移動元のサーバから転送終了通知を受信し、且つ、移動先のサーバのＶＭ移動用入力バッファが空になった場合に未使用に設定し、以後は通常動作時用の入力バッファを使用する。
【００５６】
従って、ＶＭの移動時に移動元のサーバが受信するパケットの廃棄を防止することが可能となる。
【００５７】
図１４は、仮想計算機からPCI（Peripheral Component Interconnect）Expressデバイスへのアクセスを説明するブロック図である。図１４中、図３と同一部分には同一符号を付し、その説明は省略する。サーバ５０は、汎用コンピュータ等の物理計算機５１で形成されており、仮想計算機（ＶＭ）システム５２及びPCI Expressデバイス５３を有する。PCI Expressデバイス５３は、例えば図１と同様のネットワーク３に接続されている。ＶＭシステム５２には、ＶＭ３１−１〜３１−Ｍ、及び、仮想PCI Expressデバイス３２０−１が含まれる。
【００５８】
図１４の例では、各ＶＭ３１−１〜３１−ＭからPCI Expressデバイス５３にアクセスする場合、サーバ５０のハイパーバイザによりPCI Expressデバイス５３に対応する仮想PCI Expressデバイス３２０−１を形成する。PCI Expressデバイス３２０−１の構造は、図３に示す仮想ＳＷ３２−１と同じである。更に、ハイパーバイザにより仮想PCI Expressデバイス３２０−１内にバッファ３２２−１及び移動用バッファ３２３−１を形成する。ＶＭ３１−１〜３１−ＭのいずれかのＶＭの移動を検出すると、図３と共に説明した例の場合と同様に、移動用バッファ３２３−１を使用する。
【００５９】
以上の実施例を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
第１のコンピュータ上で起動された仮想計算機を第２のコンピュータへ移動する仮想計算機移動方法であって、
前記仮想計算機の移動時以外の動作時に、前記仮想計算機と外部との通信を第１バッファ経由で行う第１の工程と、
前記仮想計算機の移動時に、前記仮想計算機と前記外部との通信を第２バッファ経由で行う第２の工程を含み、
前記第２の工程は、前記仮想計算機の移動要求に応答して、前記仮想計算機が移動中に受信した前記仮想計算機宛の情報を前記第２バッファへ転送し、前記仮想計算機が停止したことに応答して前記第２バッファ内の情報を前記第２のコンピュータへ転送することを特徴とする、仮想計算機移動方法。
（付記２）
前記第２の工程は、移動後の仮想計算機への通信経路が更新されるまでは、前記仮想計算機宛の情報を前記移動後の仮想計算機が起動される前記第２のコンピュータの第２バッファへ転送することを特徴とする、付記１記載の仮想計算機移動方法。
（付記３）
前記第２の工程は、前記第１のコンピュータが前記第２のコンピュータに移動した仮想計算機からの移動完了通知を受信するまで、前記第１のコンピュータの前記第２バッファ内の情報を前記第２のコンピュータに転送し、当該第２バッファ内の情報の転送が終了すると転送終了通知を前記第２のコンピュータへ送信することを特徴とする、付記２記載の仮想計算機移動方法。
（付記４）
前記仮想計算機からの情報取得要求に応答して、前記第１バッファが空になった後に前記第２バッファから情報を読み出して前記仮想計算機に転送する工程を更に含むことを特徴とする、付記１乃至３のいずれか１項記載の仮想計算機移動方法。
（付記５）
前記仮想計算機の移動時に、前記第１のコンピュータのハイパーバイザで前記第２バッファを形成する工程を更に含むことを特徴とする、付記１乃至４のいずれか１項記載の仮想計算機移動方法。
（付記６）
コンピュータであって、
前記コンピュータ上で起動された仮想計算機の移動時以外の動作時に、前記仮想計算機と外部と通信が経由される第１バッファと、
前記仮想計算機の移動時に、前記仮想計算機と前記外部との通信が経由される第２バッファと、
前記仮想計算機の移動要求に応答して、前記仮想計算機が移動中に受信した前記仮想計算機宛の情報を前記第２バッファへ転送し、前記仮想計算機が停止したことに応答して前記第２バッファ内の情報を前記仮想計算機の移動先へ転送する手段を備えたことを特徴とする、コンピュータ。
（付記７）
前記手段は、移動後の仮想計算機への通信経路が更新されるまでは、前記仮想計算機宛の情報を前記移動先の第２バッファへ転送することを特徴とする、付記６記載のコンピュータ。
（付記８）
前記手段は、前記コンピュータが前記移動先の仮想計算機からの移動完了通知を受信するまで、前記コンピュータの前記第２バッファ内の情報を前記移動先に転送し、当該第２バッファ内の情報の転送が終了すると転送終了通知を前記移動先へ送信することを特徴とする、付記７記載のコンピュータ。
（付記９）
前記仮想計算機からの情報取得要求に応答して、前記第１バッファが空になった後に前記第２バッファから情報を読み出して前記仮想計算機に転送する手段を更に備えたことを特徴とする、付記６乃至８のいずれか１項記載のコンピュータ。
（付記１０）
前記仮想計算機の移動時に、前記第１のコンピュータのハイパーバイザで前記第２バッファを形成する手段を更に備えたことを特徴とする、付記６乃至９のいずれか１項記載のコンピュータ。
（付記１１）
第１のコンピュータ上で起動された仮想計算機を第２のコンピュータへ移動する処理を前記第１のコンピュータに実行させるプログラムであって、
前記仮想計算機の移動時以外の動作時に、前記仮想計算機と外部との通信を第１バッファ経由で行う第１の手順と、
前記仮想計算機の移動時に、前記仮想計算機と前記外部との通信を第２バッファ経由で行う第２の手順
を前記第１のコンピュータに実行させ、
前記第２の手順は、前記仮想計算機の移動要求に応答して、前記仮想計算機が移動中に受信した前記仮想計算機宛の情報を前記第２バッファへ転送し、前記仮想計算機が停止したことに応答して前記第２バッファ内の情報を前記第２のコンピュータへ転送することを特徴とする、プログラム。
（付記１２）
前記第２の手順は、移動後の仮想計算機への通信経路が更新されるまでは、前記仮想計算機宛の情報を前記移動後の仮想計算機が起動される前記第２のコンピュータの第２バッファへ転送することを特徴とする、付記１１記載のプログラム。
（付記１３）
前記第２の手順は、前記第１のコンピュータが前記第２のコンピュータに移動した仮想計算機からの移動完了通知を受信するまで、前記第１のコンピュータの前記第２バッファ内の情報を前記第２のコンピュータに転送し、当該第２バッファ内の情報の転送が終了すると転送終了通知を前記第２のコンピュータへ送信することを特徴とする、付記１２記載のプログラム。
（付記１４）
前記仮想計算機からの情報取得要求に応答して、前記第１バッファが空になった後に前記第２バッファから情報を読み出して前記仮想計算機に転送する手順
を更に前記第１のコンピュータに実行させることを特徴とする、付記１１乃至１３のいずれか１項記載のプログラム。
（付記１５）
前記仮想計算機の移動時に、前記第１のコンピュータのハイパーバイザで前記第２バッファを形成する手順
を更に前記第１のコンピュータに実行させることを特徴とする、付記１１乃至１４のいずれか１項記載のプログラム。
【００６０】
以上、開示の仮想計算機移動方法、コンピュータ及びプログラムを実施例により説明したが、本発明は上記実施例に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能であることは言うまでもない。
【符号の説明】
【００６１】
２−１〜２−Ｎ      サーバ
３      ネットワーク
２１      ＣＰＵ
２３      記憶装置
３１−１〜３１−Ｍ，１３１−１〜１３１−Ｌ      仮想計算機
３２−１，３２−２      仮想スイッチ
３２１−１，３２１−２      セレクタ
３２２−１，３２２−２      バッファ
３２３−１，３２３−２      移動用バッファ
３２４−１，３２４−２      ディストリビュータ
【図１】
0005594049.tif 000002
【図２】
0005594049.tif 000003
【図３】
0005594049.tif 000004
【図４】
0005594049.tif 000005
【図５】
0005594049.tif 000006
【図６】
0005594049.tif 000007
【図７】
0005594049.tif 000008
【図８】
0005594049.tif 000009
【図９】
0005594049.tif 000010
【図１０】
0005594049.tif 000011
【図１１】
0005594049.tif 000012
【図１２】
0005594049.tif 000013
【図１３】
0005594049.tif 000014
【図１４】
0005594049.tif 000015