(57)【要約】【課題】  仮想マシンのイメージ転送を高速化すると共に、転送に係る負荷を低減する。【解決手段】  本発明は、仮想マシンを動作している物理マシンから他の物理マシンに仮想マシンのイメージを転送する際に、転送側の物理マシンの転送プログラムのメモリの一部に仮想マシンのメモリ空間を対応付けることにより、仮想マシンのメモリイメージを転送前に予めメモリに割り当ておき、転送時には割り当てを行うことなく、割り当てられた仮想マシンのメモリイメージをメモリから読み出して他の物理マシンに転送する。【選択図】  図１
2011039790.tif 000002
【特許請求の範囲】
【請求項１】
現在動作している仮想マシンのイメージを他の物理マシンに転送する仮想マシンイメージ転送装置であって、
転送プログラムのメモリの一部に、前記仮想マシンのメモリ空間を対応付けることにより、該仮想マシンのメモリイメージを転送前に予めメモリに割り当てておく割当手段と、
前記割当手段で既に割り当てられている前記仮想マシンのメモリイメージを前記メモリから読み出して前記他の物理マシンに転送する転送手段と、
を有することを特徴とする仮想マシンイメージ転送装置。
【請求項２】
前記割当手段は、
前記仮想マシンのメモリ空間においてイベントの発生により変更されたメモリアドレスの差分情報を取得する手段を含み、
前記転送手段は、
差分のある次の位置のメモリイメージを前記他の物理マシンに転送し、全ての差分について転送後に、ＣＰＵの実行状態を転送する手段を含む
請求項１記載の仮想マシンイメージ転送装置。
【請求項３】
前記仮想マシンのメモリイメージは、
全て、または、一部のメモリイメージを含む
請求項１または２記載の仮想マシンイメージ転送装置。
【請求項４】
前記メモリイメージは、
前記仮想マシンの実行状態を含む
請求項３記載の仮想マシンイメージ転送装置。
【請求項５】
現在動作している仮想マシンのイメージを他の物理マシンに転送する仮想マシンイメージ転送方法であって、
前記仮想マシンを動作している物理マシンは、
転送プログラムのメモリの一部に、前記仮想マシンのメモリ空間を対応付けることにより、前記仮想マシンのメモリイメージを転送前に該メモリに予め割り当ておく割当ステップと、
前記割当ステップで既に割り当てられている前記仮想マシンのメモリイメージを前記メモリから読み出して前記他の物理マシンに転送する転送ステップと、
を行うことを特徴とする仮想マシンイメージ転送方法。
【請求項６】
前記割当ステップにおいて、
前記仮想マシンのメモリ空間においてイベントの発生により変更されたメモリアドレスの差分情報を取得し、
前記転送ステップにおいて、
差分のある次の位置のメモリイメージを前記他の物理マシンに転送し、全ての差分について転送後に、ＣＰＵの実行状態を転送する
請求項５記載の仮想マシンイメージ転送方法。
【請求項７】
前記仮想マシンのメモリイメージは、
全て、または、一部のメモリイメージを含む
請求項５または６記載の仮想マシンイメージ転送方法。
【請求項８】
前記メモリイメージは、
前記仮想マシンの実行状態を含む
請求項７記載の仮想マシンイメージ転送方法。
【請求項９】
請求項1乃至４のいずれか１項に記載の仮想マシンイメージ転送装置を構成する各手段としてコンピュータを機能させるための仮想マシンイメージ転送プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想マシンイメージ転送装置及び方法及びプログラムに係り、特に、複数の物理マシンの間で仮想マシンのイメージを転送するシステムにおいて、負荷の低減や転送効率の向上、転送処理の高速化を行うための仮想マシンイメージ転送装置及び方法及びプログラムに関する。
【背景技術】
【０００２】
従来、仮想マシン上においてその複製を短時間に作成する技術として、複製先で必要になったページを必要になる毎に転送するデマンドページングという手法がある（例えば、特許文献１参照）。
【０００３】
また、ライブマイグレーションという仮想マシンを停止せずにそのイメージを転送する手法がある。この手法では、今回のターンの転送中に変更された箇所については覚えておき、次のターンの転送で前回の転送との差分を転送する。これにより、仮想マシンを停止せずにイメージの転送を行うことができる（例えば、非特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−１３３８９４号公報
【非特許文献】
【０００５】
【非特許文献１】Christopher Clark, Keir Fraser, Steven Hand, Jacob Corm Hansen, Eric Jul, Christian Limpach, Ian Pratt, and Andrew Warfield. Live migration of virtual machines.  Proceedings of the 2nd conference on Symposium on Networked Systems Design & Implementation, volume 2, pp. 273-286, 2005
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記従来の手法には、以下のような問題がある。
【０００７】
仮想マシンのイメージ転送を行う際の仮想マシンの停止時間を小さくする方法にデマンドページングを用いる方法やライブマイグレーションという手法を使うと、仮想マシンの停止時間は最小化されるが、転送にかかる時間はその分増大する。前者の単純な実装では対象となる全てのメモリがアクセスされるまで完全なイメージのコピーは作成されない。また、後者の手法ではイベントが発生する度に差分転送を行うため、一気に全て転送するのに比べて転送にかかる時間が増加する。
【０００８】
例えば、仮想マシンのフォールトトラレントを確保するための現在の状態のスナップショットを定期的に転送先に送信する場合、上記の方法ではスナップショットの転送が完了するまでに長い時間がかかり、転送先で処理を再開する場合に大幅に後戻りをしなくてはならない可能性がある。仮想マシンを停止して転送する場合でも、単純な方法ではスナップショットを送る度に仮想マシンのメモリを転送プログラムに割り当てて転送するため、ページ数に応じた多大な割り当て時間がかかり、転送時間が増大する。
【０００９】
また、仮想マシンのイメージ転送では、仮想マシンのメモリイメージ転送プログラムに割り当てるという処理が必要である。この処理は転送プログラムから仮想マシンモニタという仮想マシンを管理している上位のプログラムにメモリの割り当てを依頼する処理であり、プログラムの切り替え（コンテキストスイッチ）を伴う。よって、メモリの割り当て処理はコンテキストスイッチそのものと上位のプログラムの処理とが必要となり、ＣＰＵ負荷の大きい処理である。従来、これをひとまとまりのページ毎に逐次的に行っていたため、転送の際にページ数に応じた負荷がかかっていた。
【００１０】
例えば、大きなメモリ容量を持つ仮想マシンのスナップショットを定期的に送る場合にはその度にコンテキストスイッチが発生し、大きなＣＰＵ負荷がかかっていた。
【００１１】
本発明は、上記の点に鑑みなされたもので、仮想マシンのイメージを従来よりも短い時間で転送することが可能な仮想マシンイメージ転送装置及び方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
図１は、本発明の原理構成図である。
【００１３】
本発明（請求項１）は、現在動作している仮想マシンのイメージを他の物理マシンに転送する仮想マシンイメージ転送装置であって、
転送プログラムのメモリ１５０の一部に仮想マシン１０のメモリ空間を対応付けることにより、仮想マシン１０のメモリイメージを転送前に予めメモリ１５０に割り当てておく割当手段１１０と、
割当手段１１０で予め割り当てられている仮想マシンのメモリイメージをメモリ１５０から読み出して他の物理マシンに転送する転送手段１３０と、を有する。
【００１４】
また、本発明（請求項２）は、請求項１の割当手段１１０が、仮想マシンのメモリ空間においてイベントの発生により変更されたメモリアドレスの差分情報を取得する手段を含み、
転送手段１３０が、差分のある次の位置のメモリイメージを他の物理マシンに転送し、全ての差分について転送後に、ＣＰＵの実行状態を転送する手段を含む。
【００１５】
また、本発明（請求項３）は、請求項１または２の仮想マシンのメモリイメージとして、全て、または、一部のメモリイメージを含む。
【００１６】
また、本発明（請求項４）は、請求項３のメモリイメージとして、仮想マシンの実行状態を含む。
【００１７】
図２は、本発明の原理を説明するための図である。
【００１８】
本発明（請求項５）は、現在動作している仮想マシンのイメージを他の物理マシンに転送する仮想マシンイメージ転送方法であって、
仮想マシンを動作している物理マシンは、
転送プログラムのメモリの一部に仮想マシンのメモリ空間を対応付けることにより、仮想マシンのメモリイメージを転送前に予めメモリに割り当てておく割当ステップ（ステップ１）と、
割当ステップで予め割り当てられている仮想マシンのメモリイメージをメモリから読み出して他の物理マシンに転送する転送ステップ（ステップ２）と、を行う。
【００１９】
また、本発明（請求項６）は、請求項５の割当ステップにおいて、
仮想マシンのメモリ空間においてイベントの発生により変更されたメモリアドレスの差分情報を取得し（ステップ１１）、
転送ステップにおいて、
差分のある次の位置のメモリイメージを他の物理マシンに転送し（ステップ１２，１３）、
全ての差分について転送後に、ＣＰＵの実行状態を転送する（ステップ１３）。
【００２０】
また、本発明（請求項７）は、請求項５または６の仮想マシンのメモリイメージとして、全て、または、一部のメモリイメージを含む。
【００２１】
また、本発明（請求項８）は、請求項７のメモリイメージとして、仮想マシンの実行状態を含む。
【００２２】
本発明（請求項９）は、請求項1乃至４のいずれか１項に記載の仮想マシンイメージ転送装置を構成する各手段としてコンピュータを機能させるための仮想マシンイメージ転送プログラムである。
【発明の効果】
【００２３】
上記のように本発明によれば、仮想マシンのイメージの転送を予め割り当てておいたメモリから行うことで、割り当てのために時間を費やすことなく転送を行うことができる。これにより、仮想マシンのイメージを従来よりも短い時間で転送できる。従来は割り当てを逐次的に行っていたためにこの処理に長い時間が生じていた。
【００２４】
また、本発明では、仮想マシンのイメージの転送を予め割り当てておいたメモリから行うことで、スナップショットを送信するたびに転送プログラムから操作できるメモリに仮想マシンイメージを割り当てる必要がなくなり、送信時のメモリ割り付け負荷が削減できる。例えば、複数の仮想マシンのスナップショットを転送する場合でも負荷が低くなったため、ＣＰＵの負荷を気にすることなく送信できる。
【図面の簡単な説明】
【００２５】
【図１】本発明の原理構成図である。
【図２】本発明の原理を説明するための図である。
【図３】転送モデルの例である。
【図４】本発明のシステム構成図である。
【図５】本発明の一実施の形態における仮想マシンイメージ転送装置の構成図である。
【図６】本発明の一実施の形態における転送処理のフローチャートである。
【図７】本発明の一実施の形態における受信処理のフローチャートである。
【図８】本発明の一実施の形態における受信時の配列を示す図である。
【図９】本発明の一実施の形態における送受信メッセージのシーケンス図である。
【発明を実施するための形態】
【００２６】
以下、図面と共に本発明の実施の形態を説明する。
【００２７】
本発明は、転送する仮想マシンのイメージを予め転送プログラムに割り当てておき、転送時に逐次的に割り当てを行うことを避けるものである。これにより、スナップショットの転送時間を短縮し、転送にかかる負荷を低減するものである。
【００２８】
図３は、転送モデルを示す。
【００２９】
仮想マシンのイメージの転送は、仮想マシン下で仮想マシンの管理や調停を行っている仮想マシンモニタ、仮想マシンそのもの、そして、仮想マシンのイメージを送信するプログラム（転送プログラム）、受信するプログラム（受信プログラム）により実現されている。
【００３０】
この際、転送プログラムは同図に示すような手順でイメージの同期を行う。
【００３１】
まず、手順１にあるように、前回から今回の転送までに変化したイメージの箇所を得る。
【００３２】
次に、手順２にあるように、変化したイメージの箇所のみ転送プログラムから操作できるメモリに割り当てを行い、手順３にあるように、割り当てられたメモリを転送する。この一連の作業は転送プログラムがＯＳや仮想マシンモニタに処理を依頼する手順２と手順３の割り当てと転送の箇所で多大な時間がかかる。これらの手順は転送プログラムから仮想マシンモニタに処理を依頼して行うが、この間の通信を行うために転送プログラムから仮想マシンモニタとその逆へのコンテキストスイッチというその他の処理に比べて大きな時間を使う。
【００３３】
本発明では、仮想マシンの全てのイメージを転送プログラムから参照できるメモリ領域に割り当てておき、スナップショットを送るたびに発生していた手順２の負荷を削減するものである。以下では、割当処理や転送処理を行うＯＳや仮想マシンモニタを仮想マシンイメージ転送装置として説明する。
【００３４】
図４は、本発明のシステム構成を示す。同図に示すシステムは、転送側のホストコンピュータ１（物理マシン）と受信側のホストコンピュータ２（物理マシン）を示しているが、これらは同一のホストコンピュータであってもよい。転送側のホストコンピュータ１は、仮想マシン１０のメモリ１１のイメージを読み出し、受信側のホストコンピュータ２は、仮想マシン２０のメモリに転送内容のイメージを書き出す。ここで、仮想マシンのイメージとは、全てのメモリのイメージ、または、一部のメモリのイメージ、または、仮想マシンの実行状態を指す。
【００３５】
図５は、本発明の一実施の形態における仮想マシンイメージ転送装置の構成を示す。
【００３６】
仮想マシンイメージ転送装置１００は、割当部１１０、イメージ取得部１２０、転送部１３０、受信部１４０、転送プログラム用メモリ（メモリ）１５０から構成される。
【００３７】
以下に、上記の構成における動作を説明する。
【００３８】
図６は、本発明の一実施の形態における転送処理のフローチャートである。
【００３９】
ステップ１０１）  メモリ割当部１１０は、メモリ１５０上の領域にｎを仮想マシン１０のメモリ１１の一番地（先頭）として設定する。
【００４０】
ステップ１０２）  ｎ番地目のメモリを割り付ける。これは、当該仮想マシンイメージ転送装置１００のメモリ１５０の一部に、仮想マシン１０のメモリ１１の空間を対応付けることを指す。
【００４１】
ステップ１０３）  ｎをひとつ増やす（ｎ←ｎ＋１）。
【００４２】
ステップ１０４）  ｎが仮想マシン１０のメモリ１１の最後の番地よりも大きいかを判定し、大きい場合はステップ２２０に移行し、そうでない場合はステップ１０２に戻る。
【００４３】
ステップ１０５）  イベント発生を待機し、イベントが発生したらステップ１０６に移行する。
【００４４】
ステップ１０６）  イメージ取得部１２０は、仮想マシン１０のメモリアドレスのビットマップを参照し、前回からの差分情報を取得する。
【００４５】
ステップ１０７）  イメージ取得部１２０は、ビットマップから差分のある次のメモリの位置を探索し、メモリ１５０のその位置の番地にｍを代入する。
【００４６】
ステップ１０８）  数値ｍを転送部１３０から受信側の物理マシンに転送する。
【００４７】
ステップ１０９）  さらに、転送部１３０は、メモリ１５０上に予め割り付けられている仮想マシンの番地ｍを参照し、ｍ番地のイメージを読み出して受信側の物理マシンに転送する。
【００４８】
ステップ１１０）  全ての差分を受信側の物理マシンに転送した場合はステップ１１１に移行し、残りの差分情報がある場合はステップ１０７に戻る。
【００４９】
ステップ１１１）  転送部１３０は、メモリ送信完了を示す「０」（ｍ＝０）を受信側に送信する。
【００５０】
ステップ１１２）  転送部１３０は、ＣＰＵ等の実行状態を受信側の物理マシンに送信する。
【００５１】
ステップ１１３）  受信側から応答「ａｃｋ」を受信した場合は、ステップ１０５に移行して、次のイベント発生を待機する。受信しない場合は、受信側からの応答を待機する。
【００５２】
従来は、ステップ１０９の直前に、ステップ１０２に相当する処理を行っていたが、本発明では、ステップ１０１〜１０４の処理を行うことにより、ステップ１０９の直前でステップ１０２に相当する処理を実行することを避ける。このため、仮想マシンを現在動作している物理マシンから他の物理マシンに転送する際にかかる時間を短縮することができると共に、当該転送の際にかかる負荷を軽減させることができる。
【００５３】
次に、受信側の物理マシン処理を示す。なお、受信側の物理マシンの構成は、図５に示す仮想マシンイメージ転送装置と同様の構成であるとする。
【００５４】
図７は、本発明の一実施の形態に受信処理のフローチャートである。
【００５５】
ステップ２０１）  受信部１４０は、送信側の仮想マシンイメージ転送装置1００からメモリ番地ｍを受信する。
【００５６】
ステップ２０２）  ｍ＝０であるかを判定し、０以外であれば、ステップ２０３に移行し、０であれば、ステップ２０５に移行する。なお、「ｍ＝０」とは、送信側がステップ１１１において「０」をｍに代入して送信した場合（メモリ送信完了）を指す。
【００５７】
ステップ２０３）  受信部１４０は、受信したｍを割当部１１０を介してメモリ１５０の配列Ａの末尾に追加する。ここで、配列Ａとは、図８に示すように、メモリの番地を記憶しておくための配列であり、後述する配列Ｂは、仮想マシンのメモリの参照単位（例えば、４キロバイト）のデータを格納する配列である。
【００５８】
ステップ２０４）  受信部１４０は、送信側の仮想マシンイメージ転送装置1００からｍ番地目のメモリイメージを受信し、割当部１１０を介して配列Ｂの末尾に追加し、ステップ２０１に戻る。
【００５９】
ステップ２０５）  ステップ２０２において、受信したメモリ番地がｍ＝０である場合は、送信側の仮想マシンイメージ転送装置1００からＣＰＵ等の実行状態を受信する。
【００６０】
ステップ２０６）  転送部１３０は、応答として「ａｃｋ」を送信側の仮想マシンイメージ転送装置1００に送信する。
【００６１】
ステップ２０７）  メモリ１５０の配列Ａが空であるかを判定し、空でない場合は、ステップ２０８に移行し、空である場合はステップ２１２に移行する。
【００６２】
ステップ２０８）  割当部１１０は、メモリ１５０上の配列Ａの末尾の値を削除し、その値にｎを代入する。
【００６３】
ステップ２０９）  割当部１１０は、仮想マシン２０のｎ番地を物理マシンのメモリ１５０に割り付け、割り付けられたメモリ１５０のアドレスをＣに代入する。但し、Ｃは、仮想マシンのｎ番地にあるメモリイメージに対応付けられたメモリ１５０への参照(インデックス)である。
【００６４】
ステップ２１０）  配列Ｂの末尾のデータを削除し、Ｃの指すメモリ領域に書き込む。
【００６５】
ステップ２１１）  Ｃを解放し、ステップ２０７の処理に移行する。
【００６６】
ステップ２１２）  割当部１１０は、ステップ２０５で受信したＣＰＵなどの実行状態を仮想マシン２０上に反映する。
【００６７】
上記の図６、図７に示すフローチャートにおけるメッセージシーケンスを図９に示す。図９のシーケンスにおいて、図６、図７の処理に対応するメッセージには図６、図７と同様のステップ番号を付す。
【００６８】
なお、上記の実施の形態において、当該仮想マシンイメージ転送装置はホストコンピュータのＣＰＵであり、各部はそれぞれプログラムまたはプログラムのサブルーチンとして機能する。
【００６９】
また、上記のプログラムをハードディスクや、フレキシブルディスク・ＣＤ−ＲＯＭ等の可搬記憶媒体に格納し、コンピュータにインストールする、または、配布することが可能である。
【００７０】
なお、本発明は、上記の実施の形態に限定されることなく、特許請求の範囲内において種々変更・応用が可能である。
【産業上の利用可能性】
【００７１】
本発明は、他の物理マシンに対して仮想マシンのイメージ転送を行う技術に適用可能である。
【符号の説明】
【００７２】
１  転送側ホストコンピュータ
２  受信側ホストコンピュータ
１０、２０  仮想マシン
１１  メモリ
１００  仮想マシンイメージ転送装置（物理マシン）
１１０  割当手段、割当部
１２０  イメージ取得部
１３０  転送手段、転送部
１４０  受信部
１５０  メモリ
【図１】
2011039790.tif 000003
【図２】
2011039790.tif 000004
【図３】
2011039790.tif 000005
【図４】
2011039790.tif 000006
【図５】
2011039790.tif 000007
【図６】
2011039790.tif 000008
【図７】
2011039790.tif 000009
【図８】
2011039790.tif 000010
【図９】
2011039790.tif 000011