(57)【要約】  ハイパーバイザ上のゲストＯＳが透過的にＩ／Ｏを利用する構成において、ライブマイグレーション時にＩ／Ｏからのメモリ書き込みを効率的に監視できず、また監視した結果をライブマイグレーションでのメモリ転送に効率的に反映できない。ゲストＯＳのメモリ領域を一定サイズのページごとに分割し、ＣＰＵとＩ／Ｏの間に接続されたＩ／Ｏスイッチで、分割されたページ単位でメモリへの書き込みを監視する。また、ライブマイグレーションにおけるメモリ転送は、メモリへの書き込みを監視しているＩ／Ｏスイッチ経由で行う。Ｉ／Ｏスイッチは転送が必要なｄｉｒｔｙページを識別しているため、ｄｉｒｔｙページだけを効率的に転送できる。
2012063334.tif 000002
【特許請求の範囲】
【請求項１】
電子計算機とＩ／Ｏ装置が接続され、
前記電子計算機のメモリの特定領域をページに分割し、分割されたページごとにメモリ書き込みの有無を記憶するためのｄｉｒｔｙ  ｂｉｔ配列と、
Ｉ／Ｏ装置からの電子計算機のメモリに対するメモリ書き込みを監視するメモリ書き込み監視機構を有し、
前記監視機構によって、前記メモリの特定領域に対するＩ／Ｏ装置からのメモリ書き込みが観測された時に、
メモリ書き込みのアドレスからメモリ書き込みの行われたページを決定し、
前記ｄｉｒｔｙ  ｂｉｔ配列に前記ページに対するメモリ書き込みがあったことを記録する
ことを特徴とするメモリ制御装置。
【請求項２】
前記メモリ制御装置は、さらに、前記電子計算機から他の電子計算機へ
メモリの内容を転送するメモリ複製機構を有し、
ｄｉｒｔｙ  ｂｉｔ配列において転送が必要と記憶されているページのみを、
メモリ複製機構が前記電子計算機から前記他の電子計算機に転送する
ことを特徴とする請求項１記載のメモリ制御装置。
【請求項３】
前記メモリ複製機構が、
前記ｄｉｒｔｙ  ｂｉｔ配列を参照する際に、
ページ毎の、転送が不要という状態かあるいは転送か必要という状態かの情報を読み出し、
前記情報に転送が必要と記憶されている場合、
前記情報を読み出したページについては転送が不要と記憶しなおす
ことを特徴とする請求項２記載のメモリ制御装置。
【請求項４】
前記いずれかの電子計算機が、
前記ｄｉｒｔｙ  ｂｉｔ配列を、
ページ毎に個別に、転送が不要という状態から転送が必要という状態に
変更可能である
ことを特徴とする請求項２記載のメモリ制御装置。
【請求項５】
前記メモリ書き込み監視機構が、
前記ｄｉｒｔｙ  ｂｉｔ配列に前記ページに対するメモリ書き込みがあったことを記録し、
前記メモリ複製機構が、
メモリ書き込みがあったと記録されているページを転送が必要と記憶されているページと判断し、
前記ｄｉｒｔｙ  ｂｉｔ配列において転送が必要と記憶されているページのみを、
転送元電子計算機から転送先電子計算機に転送する
ことを特徴とする請求項１に記載のメモリ制御装置。
【請求項６】
Ｉ／Ｏ装置と、プログラムもしくは前記Ｉ／Ｏ装置からアクセスされているメモリを有する第１の計算機と、前記プログラムの移動先の第２の計算機とに接続されたＩ／Ｏスイッチであって、前記Ｉ／Ｏスイッチは、
複数ページに分割され、前記第１の計算機のメモリ内の前記プログラムがアクセスする特定領域の前記分割されたページごとにメモリ書き込みの有無を記憶するためのｄｉｒｔｙ  ｂｉｔ配列を記憶する記憶手段と、
前記プログラムもしくは前記Ｉ／Ｏ装置からの前記第１の計算機のメモリに対するメモリ書き込みを監視するメモリ書き込み監視手段と、
前記プログラムに関連するメモリの内容を前記第１の計算機から前記第２の計算機にコピーするメモリ複製手段とを有し、
前記メモリ複製手段は、
前記プログラムもしくは前記Ｉ／Ｏ装置の動作中に、前記特定領域の全ページに対して、前記それぞれのページのコピー後に前記ｄｉｒｔｙ  ｂｉｔ配列の対応するｂｉｔをリセットしてから、前記第１の計算機のメモリから前記第２の計算機のメモリにそれぞれのページをコピーするメモリ転送を行い、
前記メモリ書き込み監視手段に基づいて、前記メモリ転送中にメモリ書き込みがあったページに対応する、前記ｄｉｒｔｙ  ｂｉｔ配列のｂｉｔに、メモリ書き込みがあったことを記憶するｄｉｒｔｙ記憶を行い、
前記ｄｉｒｔｙ  ｂｉｔ配列における前記ｄｉｒｔｙ記憶が所定の条件を満たさない場合は、前記ｄｉｒｔｙ  ｂｉｔ配列の各ｂｉｔに基づいて、前記メモリ転送中にメモリ書き込みがあったページに対して、前記メモリ転送及び前記ｄｉｒｔｙ記憶を再度行い、
前記ｄｉｒｔｙ  ｂｉｔ配列における前記ｄｉｒｔｙ記憶が前記所定の条件を満たす場合は、前記プログラムもしくは前記Ｉ／Ｏ装置の動作を停止して、前記ｄｉｒｔｙ  ｂｉｔ配列の各ｂｉｔに基づいて、前記メモリ転送中にメモリ書き込みがあったページに対して前記メモリ転送を行った後で、前記メモリ転送を停止することを特徴とするＩ／Ｏスイッチ。
【請求項７】
Ｉ／Ｏ装置と、プログラムもしくは前記Ｉ／Ｏ装置からアクセスされているメモリを有する第１の計算機と、前記プログラムの移動先の第２の計算機とに接続されたＩ／Ｏスイッチにおけるメモリ制御方法は、
複数ページに分割され、前記第１の計算機のメモリ内の前記プログラムがアクセスする特定領域の前記分割されたページごとにメモリ書き込みの有無を記憶するためのｄｉｒｔｙ  ｂｉｔ配列を記憶部に記憶し、
前記プログラムもしくは前記Ｉ／Ｏ装置の動作中に、前記特定領域の全ページに対して、前記それぞれのページのコピー後に前記ｄｉｒｔｙ  ｂｉｔ配列の対応するｂｉｔをリセットしてから、前記第１の計算機のメモリから前記第２の計算機のメモリにそれぞれのページをコピーするメモリ転送を行い、
前記プログラムもしくは前記Ｉ／Ｏ装置からの前記第１の計算機のメモリに対するメモリ書き込みの監視結果に基づいて、前記メモリ転送中にメモリ書き込みがあったページに対応する、前記ｄｉｒｔｙ  ｂｉｔ配列のｂｉｔに、メモリ書き込みがあったことを記憶するｄｉｒｔｙ記憶を行い、
前記ｄｉｒｔｙ  ｂｉｔ配列における前記ｄｉｒｔｙ記憶が所定の条件を満たさない場合は、前記ｄｉｒｔｙ  ｂｉｔ配列の各ｂｉｔに基づいて、前記メモリ転送中にメモリ書き込みがあったページに対して、前記メモリ転送及び前記ｄｉｒｔｙ記憶を再度行い、
前記ｄｉｒｔｙ  ｂｉｔ配列における前記ｄｉｒｔｙ記憶が前記所定の条件を満たす場合は、前記プログラムもしくは前記Ｉ／Ｏ装置の動作を停止して、前記ｄｉｒｔｙ  ｂｉｔ配列の各ｂｉｔに基づいて、前記メモリ転送中にメモリ書き込みがあったページに対して前記メモリ転送を行った後で、前記メモリ転送を停止することを特徴とするメモリ制御方法。
【請求項８】
前記所定の条件は、予め設定したコピーの所要時間、前記プログラムもしくは前記Ｉ／Ｏ装置の動作を停止して転送すべき新たな書き込みのデータ量、あるいは、それまでの前記メモリ転送及び前記ｄｉｒｔｙ記憶の動作の回数のいずれかであることを特徴とする請求項６記載のＩ／Ｏスイッチ。
【請求項９】
前記所定の条件は、予め設定したコピーの所要時間、前記プログラムもしくは前記Ｉ／Ｏ装置の動作を停止して転送すべき新たな書き込みのデータ量、あるいは、それまでの前記メモリ転送及び前記ｄｉｒｔｙ記憶の動作の回数のいずれかであることを特徴とする請求項７記載のメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ある物理マシンのハイパーバイザ上で動作しているゲストＯＳを、別の物理マシンのハイパーバイザ上に移動させる、ライブマイグレーションと呼ばれる技術に関するものである。
【背景技術】
【０００２】
近年、ハイパーバイザと呼ばれる、１台のコンピュータを複数のコンピュータに見せかけることが出来るソフトウェアが広く利用されている。ハイパーバイザを用いると1台のサーバに複数のサーバを集約することが可能となる。一般にハイパーバイザが動作しているコンピュータを物理マシンと呼ぶ。そしてハイパーバイザによってソフトウェア的に生成されたコンピュータを仮想マシンと呼ぶ。仮想マシンは、その上で動作するオペレーティングシステムやデバイスドライバ、アプリケーションからは、物理マシンと同様に扱われる。仮想マシン上で動作するオペレーティングシステムを特にゲストＯＳと呼ぶ。【０００３】
ハイパーバイザの利用が広がった背景には、ＣＰＵの処理能力の向上やマルチコア化、メモリ容量の増加などによりサーバ1台あたりの処理能力が飛躍的に上昇したことが挙げられる。従来は複数台のサーバが必要とされていたシステムを、ハイパーバイザを用いて1台のサーバに集約することで、サーバのハードウェア費用や電気代といったコストを削減できるというメリットがある。【０００４】
あるサーバのハイパーバイザ上で動作するゲストＯＳを、別のサーバのハイパーバイザ上に移動する技術のことをマイグレーションと呼ぶ。例として、複数の物理マシン上でハイパーバイザが動いており、各ハイパーバイザ上でゲストＯＳが動いているシステムを考える。システム全体での負荷が小さいときに、マイグレーションによりゲストＯＳを移動させ、一台の物理マシンのハイパーバイザ上に集約し、その物理マシン以外の動作を停止させることで、システム全体の消費電力を削減することが可能となる。【０００５】
マイグレーションには二つの種類がある。一つはゲストＯＳの動作を停止させてサーバ間でゲストＯＳの移動を行うマイグレーションであり、もう一つはゲストＯＳが稼動したままサーバ間でゲストＯＳの移動を行うマイグレーションである。特に後者のゲストＯＳが動作したままハイパーバイザ間で移動させる技術のことを、ライブマイグレーションと呼ぶ。ハイパーバイザの利用の増加に伴い、ライブマイグレーションと呼ばれる技術の利用も増加している。例えば、ライブマイグレーションを用いると、ある物理マシンを保守するために停止させるときに、その物理マシンのハイパーバイザ上で動作しているゲストＯＳの動作を止めずに、別の物理マシンのハイパーバイザ上に移動させることが出来る。そのためゲストＯＳ上のサービスがその動作を停止させずに継続することが出来るため、ゲストＯＳを停止させてマイグレーションを行う場合と比べて、システム全体として可用性が向上する。【０００６】
ライブマイグレーションでは仮想マシンの動作中に、あるハイパーバイザから別のハイパーバイザに仮想マシンを移動させるため、ゲストＯＳの稼動時の情報を格納しているメモリの内容も移動させる必要がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】馬場 貴成，對馬 雄次，上原 敬太郎，特開２０１０−３９６８５  複合型計算機及び複合型計算機の制御方法，２０１０
【非特許文献】
【０００８】
【非特許文献１】Ｃ．  Ｃｌａｒｋ，ｅｔ  ａｌ．，Ｌｉｖｅ  Ｍｉｇｒａｔｉｏｎ  ｏｆ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅｓ，Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ２ｎｄ  ＵＳＥＮＩＸ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｎｅｔｗｏｒｋｅｄ  Ｓｙｓｔｅｍｓ  Ｄｅｓｉｇｎ  ａｎｄ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ，２００５．
【非特許文献２】Ｉｎｔｅｌ（Ｒ）  ６４  ａｎｄ  ＩＡ−３２  Ａｒｃｈｉｔｅｃｔｕｒｅｓ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ｍａｎｕａｌ  Ｖｏｌｕｍｅ  ３Ｂ：  Ｓｙｓｔｅｍ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｇｕｉｄｅ，Ｐａｒｔ  ２，Ｃｈａｐｔｅｒ  ２５，Ｓｅｃｔｉｏｎ  ２，２０１０
【非特許文献３】佐藤 充，三吉 貴史，岩松 昇，矢崎 昌朋，堀江 健志，情報処理学会報告Ｖｏｌ．２０１０−ＡＲＣ−１９０  Ｎｏ．１９，直接Ｉ／Ｏ環境下の仮想マシン移動を実現するＰＣＩ  Ｅｘｐｒｅｓｓスイッチ，２０１０
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ライブマイグレーションの動作を示すために、図６、図７を用いる。まず図６はライブマイグレーション前の状態を示している。図６では、サーバ１００とサーバ１１０の２台のサーバがあり、サーバ１００の上でハイパーバイザ１０１が、サーバ１１０の上でハイパーバイザ１１１が動作している。そしてハイパーバイザ１０１上で、ゲストＯＳ１０２が動作している。ハイパーバイザ、ゲストＯＳは、それぞれサーバに搭載されているメモリ上にメモリ領域を割り当てられる。図６の状態ではハイパーバイザ１０１にはメモリ領域１０５が、ゲストＯＳ１０２にはメモリ領域１０６が、メモリ１０４上に割り当てられている。同様にハイパーバイザ１１１には、メモリ１１４上にメモリ領域１１５が割り当てられている。また、サーバ１００とサーバ１１０は同一のネットワーク１２０に接続されており、通信によってデータをやり取りすることが出来る。【００１０】
ライブマイグレーションの開始時に、まずハイパーバイザ１０１はハイパーバイザ１１１と通信を行い、ハイパーバイザ１１１がメモリ領域１１６を確保する。次に、ハイパーバイザ１０１がメモリ領域１０６の内容をハイパーバイザ１１１に転送し、ハイパーバイザ１１１はその内容をメモリ領域１１６に書き込む。このようにして、ゲストＯＳ１０２はサーバ１００上からサーバ１１０に移動し、図７の状態になりライブマイグレーション処理が完結する。このメモリ転送時に発生する問題と解決方法について次に述べる。【００１１】
ライブマイグレーションは仮想マシンの動作中にメモリの内容を転送するため、メモリの内容が転送された後で、仮想マシンの動作によりメモリの内容が書き換えられてしまうという問題が生じる。メモリの内容が転送元と転送先で異なっていると、ゲストＯＳが正しく動作することが出来ない。図８はハイパーバイザ１０１がメモリ領域１０６の内容をメモリ領域１１６に転送している途中で書き込みが行われた場合を示している。ハイパーバイザ１０１はメモリ領域１０６のうち、メモリ領域２００までを転送し終えており、メモリ領域２００の内容は、メモリ領域１１６の一部であるメモリ領域２１０に複製されている。この状態で、ゲストＯＳの動作によりメモリ領域２０２の内容が書き換わると、メモリ領域２００の内容とメモリ領域２１０の内容が食い違うこととなる。【００１２】
このような問題を解決するために、ライブマイグレーションを行うためのハードウェアの支援として、メモリ領域を複数に分割し、分割されたメモリ領域ごとに書き込みを監視する機能が必要となる。分割され、書き込みを監視するメモリ領域の単位をページと呼び、転送中に書き込みが行われた領域をｄｉｒｔｙページと呼ぶ。転送を行うメモリ領域に対する書き込みをページごとに監視し、ｄｉｒｔｙページを転送しなおすことによって、転送元のメモリ領域の内容と転送後のメモリ領域の内容に一貫性を保つことが出来る。【００１３】
図９はサーバ１００からサーバ１１０にメモリ領域１０６の内容を転送するときの動作を示している。まず、転送元サーバ１００上のハイパーバイザ１０１がメモリ書き込みの監視を開始する。次にゲストＯＳが動作している状態でｐｒｅ−ｃｏｐｙと呼ばれるメモリ転送を行う。このｐｒｅ−ｃｏｐｙではメモリ領域１０６全体の転送が行われる。ｐｒｅ−ｃｏｐｙが終了した時点で、ゲストＯＳ１０２はハイパーバイザ１０１によって一旦停止される。そして、ゲストＯＳ１０２が停止している間に、ｐｒｅ−ｃｏｐｙ中に書き込みが行われてｄｉｒｔｙとなっているページを転送先サーバ１１０に転送する、ｓｔｏｐ−ａｎｄ−ｃｏｐｙと呼ばれる操作を行う。ｓｔｏｐ−ａｎｄ−ｃｏｐｙを行っている間、ゲストＯＳは動作しておらず、新たなｄｉｒｔｙページは発生しない。ｓｔｏｐ−ａｎｄ−ｃｏｐｙが終了した後、ハイパーバイザ１１１がゲストＯＳ１０２の動作を再開する。ｓｔｏｐ−ａｎｄ−ｃｏｐｙ操作を行っている時間はゲストＯＳの動作は停止しなければならないため、可能な限り短縮する必要がある。【００１４】
メモリ領域に対する書き込みはゲストＯＳの動作によるＣＰＵからの書き込みとネットワークやファイバーチャネルなどのＩ／Ｏからの書き込みとに分類される。【００１５】
ＣＰＵからの書き込みを監視する方法として非特許文献１、支援するハードウェアの例として非特許文献２がある。また、Ｉ／Ｏからの書き込みを監視する方法として、特許文献１や非特許文献３などが提案されている。これらの方法によって、ライブマイグレーションは可能となっている。【００１６】
さて、Ｉ／Ｏからの書き込みの監視方法について説明する前に、ハイパーバイザとゲストＯＳがＩ／Ｏをどのように扱うかについて述べる。ハイパーバイザの存在するシステムにおいて、Ｉ／Ｏを扱う方法は大きく二つに分類される。一つはＩ／Ｏとハイパーバイザが通信を行い、ゲストＯＳはＩ／Ｏと通信を行うことが出来ない方式である。この方式ではゲストＯＳはハイパーバイザを経由してＩ／Ｏと通信することになる。そしてもう一つの方式は、ゲストＯＳがハイパーバイザを介さずに、Ｉ／Ｏと直接通信を行う方式である。【００１７】
ゲストＯＳがハイパーバイザを経由してＩ／Ｏと通信を行う場合、Ｉ／Ｏからのメモリ書き込みは全てハイパーバイザが認識可能である。そのため、ｐｒｅ−ｃｏｐｙ中のＩ／Ｏからのメモリ書き込みはハイパーバイザによってソフトウェア的に監視することが可能となる。【００１８】
一方で、ゲストＯＳがＩ／Ｏと直接通信を行う場合には、ハイパーバイザがＩ／Ｏからのメモリ書き込みを監視する仕組みが必要となる。特許文献１や非特許文献３はＩ／Ｏからの書き込みを監視する方法を提案している。しかし、Ｉ／Ｏから書き込みのあったページのリストを記憶する手法を採用しており、ｓｔｏｐ−ａｎｄ−ｃｏｐｙ動作でｄｉｒｔｙページを判別するのに、書き込みの数に比例したリソースが必要となるという問題を抱えている。【００１９】
Ｉ／Ｏから書き込みのあったページのリストとしては、例えば図１０に示すように、ｄｉｒｔｙページ番号の連結リスト５００のような構造のリストが考えられる。メモリ書き込みが発生するたびに連結リスト５００にはエントリが１つ作成され、その書き込みによってｄｉｒｔｙとなったページの番号が記憶される。例えば図１０に示す状態では先頭のエントリ５０１でページ番号５のページがｄｉｒｔｙとなったことが記憶されている。同様に、エントリ５０８はページ番号１１のページがｄｉｒｔｙとなっていることを示している。そして新しくメモリ書き込みが発生するとエントリ５０９が新しく作成され、ｄｉｒｔｙとなったページが記憶される。このように、メモリ書き込み１回につき１エントリ作成されるので、ｄｉｒｔｙなページを記憶するのにメモリ書き込みの回数に比例したリソースが必要になる。従って、新たなメモリ書き込みが発生するページの数が少なくてもページ当りの書き込み回数が多いと、リストにエントリされる延べページ数が元のページ数よりも多くなる可能性がある。【００２０】
上述のように、特許文献１、非特許文献３では、Ｉ／Ｏからの書き込みを監視するのに、書き込みのあったページの連結リストを作成しなければならない。このように書き込み監視情報を連結リストに格納する方法では、リストのサイズが書き込みの回数に比例するため、効率的な処理とはいえない。また、ハードウェア上にリストを作成する場合、リストの記憶容量が足りなくなった時点でライブマイグレーションが失敗するという懸念がある。【００２１】
また、ｐｒｅ−ｃｏｐｙ動作中に同じページに対して２回以上書き込みがあった場合、同じページが重複してリストにリンクされてリストのサイズが大きくなり、最後の書き込み以前の書き込みに対する無駄なマイグレーションが行われ、ゲストＯＳの停止時間が長くなる。また、書き込み頻度が多くなると、ｐｒｅ−ｃｏｐｙ中に生成されるｄｉｒｔｙなページが多くなるため、ｓｔｏｐ−ａｎｄ−ｃｏｐｙ動作の時間も長くなり、その分、ゲストＯＳの停止時間が長くなる。【００２２】
そして、特許文献、非特許文献に挙げた技術ではメモリ領域に対する書き込みの監視は行うことが可能であるが、ｓｔｏｐ−ａｎｄ−ｃｏｐｙ動作の速度によってゲストＯＳの停止時間が決まるので、停止時間を短縮するためにはｄｉｒｔｙページの転送処理のさらなる高速化が必要である。即ち、全ページに対するｐｒｅ−ｃｏｐｙ動作中に発生する新たな書き込みが多くなると、その後ｓｔｏｐ−ａｎｄ−ｃｏｐｙ動作を行ってもデータのコピーに時間がかかるため、ゲストＯＳの停止時間が長くなる。【００２３】
本発明の目的は、ゲストＯＳの動作中の新たな書き込みの頻度が高い場合でも、ゲストＯＳの停止時間を短縮できるメモリ制御装置及び方法を提供することにある。
【課題を解決するための手段】
【００２４】
一つ目の課題であるＩ／Ｏからの書き込みを効率的に監視できない問題に対する手段として、ＣＰＵとＩ／Ｏの間にスイッチを接続する。スイッチ内にメモリ書き込みを監視するメモリ監視機構と、メモリ上の各ページがｄｉｒｔｙかどうかを記憶するｄｉｒｔｙ  ｂｉｔ配列とを用意する。メモリ監視機構はＩ／ＯからＣＰＵへのメモリ書き込みを監視し、メモリ書き込みのアドレスからどのページがｄｉｒｔｙになったかを判断し、ｄｉｒｔｙ  ｂｉｔ配列をアップデートする。ｄｉｒｔｙ  ｂｉｔ配列はページごとにｄｉｒｔｙ／非ｄｉｒｔｙを記憶しており、ハイパーバイザから連続領域としてアクセスできるようになっている。【００２５】
また、ｐｒｅ−ｃｏｐｙ中に同じページに対して２回以上書き込みがあった場合でも、ｄｉｒｔｙ  ｂｉｔ配列ではｄｉｒｔｙのままであり、配列のサイズは増えず、かつ、最後の書き込み以前の書き込みに対する無駄なコピーを防止できる。【００２６】
更に、全ページのｐｒｅ−ｃｏｐｙを行った後、そのｐｒｅ−ｃｏｐｙの最中に新たに発生したメモリ書き込みに対して再度ｐｒｅ−ｃｏｐｙを行ない、その再度のｐｒｅ−ｃｏｐｙの最中に新たに発生したメモリ書き込みに対しても同様にｐｒｅ−ｃｏｐｙを行なう、といった動作を、所定の条件が満たされるまで繰り返すことで新たなメモリ書き込みを減らすことにより、ゲストＯＳの動作を停止して行われるｓｔｏｐ−ａｎｄ−ｃｏｐｙ動作におけるデータのコピー時間を短縮できる。ここで、所定の条件として、例えば、ゲストＯＳの動作の停止が可能な時間、ｓｔｏｐ−ａｎｄ−ｃｏｐｙ動作で許容できるコピーデータ量、再度のｐｒｅ−ｃｏｐｙの回数などがある。【００２７】
二つ目の課題である監視情報を転送の際に効率的に用いることが出来ない問題に対して、前述のｄｉｒｔｙ  ｂｉｔ配列が存在するスイッチに二つのサーバを接続し、ｄｉｒｔｙ  ｂｉｔ配列の情報を元にメモリの内容を複製するためのメモリ複製機構をスイッチ内に用意する。メモリ複製機構はｄｉｒｔｙ  ｂｉｔ配列を参照し、ｄｉｒｔｙとなっているページのみ、転送元のサーバから転送先のサーバへメモリの内容を複製する機能を有する。また、ｄｉｒｔｙ  ｂｉｔ配列の機能として、ハイパーバイザからｄｉｒｔｙ  ｂｉｔ配列に書き込む機能、ｄｉｒｔｙ  ｂｉｔの参照時に参照した結果を参照元に返すと同時に非ｄｉｒｔｙとする機能も追加する。
【発明の効果】
【００２８】
一つ目の課題を解決することで、ライブマイグレーションを行う際にＩ／Ｏからの書き込みを効率的に監視することが可能となる。これによってライブマイグレーション中のハイパーバイザによるメモリ書き込み監視処理を軽減し、ｐｒｅ−ｃｏｐｙ中のゲストＯＳの性能低下を最小限に抑えられる。【００２９】
二つ目の課題を解決することで、ライブマイグレーションにおけるメモリ転送に必要な時間を低減することが可能となり、ゲストＯＳのサービスが停止する時間を短縮できる。
【図面の簡単な説明】
【００３０】
【図１】本発明のメモリ書き込み監視部とメモリ書き込み記憶部を備えたＩ／Ｏスイッチを示す図である。
【図２】実施例１においてメモリ書き込みによってページがｄｉｒｔｙとなり、かつｄｉｒｔｙ  ｂｉｔ配列の該当するｂｉｔがｄｉｒｔｙとなることを示す図である。
【図３】メモリ書き込み監視情報を使い、効率的にメモリ複製を行うＩ／Ｏスイッチを示す図である。
【図４】実施例２において、ライブマイグレーション動作の流れを示す図である。
【図５】実施例２において、手順６０２での動作を示す図である。
【図６】ライブマイグレーションを行う前のシステムの状態を示す図である。
【図７】ライブマイグレーションを行う後のシステムの状態を示す図である。
【図８】ライブマイグレーション中に、既に転送が終わった領域にメモリ書き込みが行われた状態を示す図である。
【図９】ライブマイグレーションの一般的な動作を示す図である。
【図１０】ｄｉｒｔｙページを記憶するための連結リスト構造を示す図である。
【図１１】ｐｒｅ−ｃｏｐｙを繰り返した場合のライブマイグレーションの動作を示す図である。
【発明を実施するための形態】
【００３１】
Ｉ／Ｏからの書き込みを効率的に監視するというひとつ目の目的と、監視した結果を効率的にメモリの転送に用いると言う二つ目の目的を、実装に必要なハードウェアが最小限になるように実現した。
【００３２】
以下では、ＣＰＵとＩ／Ｏの間の接続に用いるプロトコルとして、ＰＣＩ  Ｅｘｐｒｅｓｓ、及びＰＣＩ  Ｅｘｐｒｅｓｓ規格の拡張であるＭＲ−ＩＯＶ規格を用いた場合を例として挙げている。本発明を実現する上ではプロトコルはＰＣＩ  Ｅｘｐｒｅｓｓ規格に限定されるわけではないが、ＰＣＩ  Ｅｘｐｒｅｓｓは現在ＣＰＵとＩ／Ｏを接続するプロトコルの大部分を占める標準になっているため、実施例ではこれを用いる。
【実施例１】
【００３３】
一つ目の課題のＩ／Ｏからの書き込みを効率的に監視する手法を実施例１として挙げる。【００３４】
図１はサーバ１００が本発明を適用したＩ／Ｏスイッチ３００経由でＩ／Ｏ３０１、Ｉ／Ｏ３０２と接続されている図である。ゲストＯＳ１０２は主記憶としてメモリ領域１０６を利用しており、メモリ領域１０６にはＩ／Ｏ３０１、Ｉ／Ｏ３０２からメモリ書き込みが行われる。Ｉ／Ｏスイッチ３００はＰＣＩ  Ｅｘｐｒｅｓｓ規格で定まるＳｗｉｔｃｈの機能に加えて、メモリ書き込み監視部３１０、メモリ書き込み記憶部３２０を有する。メモリ書き込み監視部３１０はアドレス比較器３１１、上位アドレス３１２、下位アドレス３１２を備えている。メモリ書き込み記憶部３２０はｄｉｒｔｙ  ｂｉｔ配列３２１を有する。【００３５】
メモリ書き込み監視部３１０は、Ｉ／Ｏ３０１、Ｉ／Ｏ３０２からのメモリ書き込みのアドレスを元に、どのページがｄｉｒｔｙになったかを判別する機能を持つ。メモリ書き込み記憶部３２０は転送対象となるメモリ領域１０６の各ページがｄｉｒｔｙページかどうかを記憶する機能を持つ。ｄｉｒｔｙ  ｂｉｔ配列３２１の各ｂｉｔは、０ならばそのページに書き込みが行われていないこと、１ならば書き込みが行われた結果ｄｉｒｔｙであることを示す。当該ページに再度書き込みが行われた場合、当該ページに対応するｂｉｔは１のままである。【００３６】
以下ではハイパーバイザ１０１がライブマイグレーションのために、メモリ領域１０６へのＩ／Ｏからのメモリ書き込みを監視する場合の動作について述べる。ＣＰＵ１０３からのメモリ書き込み監視も本実施例の動作と並行して行われる。【００３７】
ライブマイグレーションの開始処理として、メモリ１０４の監視のアドレス範囲を設定する。ハイパーバイザ１０１はメモリ領域１０６のアドレスの最大値を上位アドレス３１２に、メモリ領域１０６のアドレスの最小値を下位アドレス３１３に設定する。上位アドレス３１２と下位アドレス３１３との差及び１ページのサイズに基づいて、必要なｂｉｔ数を有するｄｉｒｔｙ  ｂｉｔ配列３２１が生成される。その後、メモリ書き込み監視を有効にし、ｐｒｅ−ｃｏｐｙを開始する。【００３８】
ｐｒｅ−ｃｏｐｙ中にＩ／Ｏ３０１、Ｉ／Ｏ３０２からメモリ書き込みが行われる場合、Ｉ／Ｏスイッチ３００はメモリ書き込み本来の動作としてメモリ領域１０６にメモリ書き込みを転送するのに加えて、アドレス比較器３１１にメモリ書き込みのアドレスを転送する。アドレス比較器３１１は、メモリ書き込みのアドレスが上位アドレス３１２、下位アドレス３１３の範囲内であれば、メモリ領域１０６へのメモリ書き込みであるとみなす。アドレス比較器３１１はメモリの書き込みアドレス、下位アドレス、１ページのサイズを元に、どのページがｄｉｒｔｙになったかを判定し、ｄｉｒｔｙ  ｂｉｔ配列３２１における当該ページに対応するｂｉｔを更新する。具体的にはｄｉｒｔｙになったページの番号＝（メモリ書き込みのアドレス−下位アドレス）／（１ページのサイズ）という計算式で、更新されるべきｂｉｔの位置を得ることが出来る。【００３９】
図２はメモリ領域１０６を８個のページに分割して監視を行う場合を示している。ページ３３１にＩ／Ｏ３０１からメモリ書き込み３３０が行われ、ページ３３１がｄｉｒｔｙとなる場合を示している。Ｉ／Ｏスイッチ３００は、メモリ書き込み３３０をメモリ領域１０６に転送するのに加えて、書き込み先であるページ３３１に対応するｄｉｒｔｙ  ｂｉｔ３３２に１を書く。【００４０】
このようにしてｐｒｅ−ｃｏｐｙ中のＩ／Ｏ３０１、Ｉ／Ｏ３０２からのメモリ書き込みが監視され、ｄｉｒｔｙであるページとそうでないページが識別される。また、既存の手法により、ＣＰＵ１０３からのメモリ書き込みによってｄｉｒｔｙとなったページも識別されている。【００４１】
ｐｒｅ−ｃｏｐｙ動作が終了した時点でゲストＯＳの動作を一旦停止し、ｄｉｒｔｙであるページを転送するｓｔｏｐ−ａｎｄ−ｃｏｏｐｙ動作を開始する。このｓｔｏｐ−ａｎｄ−ｃｏｐｙ動作では、ＣＰＵ１０３からの書き込みによってｄｉｒｔｙとなったページ、Ｉ／Ｏ３０１とＩ／Ｏ３０２からの書き込みによってｄｉｒｔｙとなったページの両方が転送される。これによりライブマイグレーションで必要なゲストＯＳ１０２のメモリ内容の転送を完了することが出来る。【００４２】
ｄｉｒｔｙ  ｂｉｔ配列に必要な大きさは（メモリ領域のサイズ）／（１ページのサイズ）×１ｂｉｔという計算式で求めることが出来る。例えば、ゲストＯＳに割り当てられるメモリ領域のサイズを２ＴＢｙｔｅ、１ページのサイズを２ＭＢｙｔｅとすると、ｄｉｒｔｙ  ｂｉｔの大きさは１Ｍｂｉｔとなる。この大きさはライブマイグレーションを行うゲストＯＳに割り当てられるメモリ領域の最大サイズに比例するが、ｐｒｅ−ｃｏｐｙ動作中に行われたメモリ書き込みの回数には比例しない。【００４３】
即ち、ｐｒｅ−ｃｏｐｙ動作中に同一ページに対して複数回のメモリ書き込みがあっても、ｄｉｒｔｙ  ｂｉｔ配列中の対応するｂｉｔは１のまま、あるいは１が重ね書きされるので、ｄｉｒｔｙ  ｂｉｔ配列の大きさは変わらない。従って、ｄｉｒｔｙ  ｂｉｔ配列によって、前回のコピー以降に当該ページに何度も書き込みが発生しても、書き込みがあったという経緯のみがｄｉｒｔｙ  ｂｉｔとして記憶され、次回のコピーでは、ｄｉｒｔｙ  ｂｉｔ配列を参照して、前回のコピー以降に何度も書き込みがなされた状態にあるｄｉｒｔｙなページが転送される。【００４４】
このようにして、ページごとにｄｉｒｔｙかどうかを記録することで、メモリ書き込み回数に比例しない効率的なメモリ書き込みの監視を実現できた。
【実施例２】
【００４５】
実施例２では、二つ目の課題を解決する手段として挙げた、ｓｔｏｐ−ａｎｄ−ｃｏｐｙ動作を短縮する方法を示す。【００４６】
図３は、本実施例を実施するためのシステム構成を示す。それぞれがＣＰＵとメモリを有する計算機で実現される２つのサーバ１００、１１０とＩ／Ｏ（装置、機器）３０１との間にＩ／Ｏスイッチ４００が設けられている。それぞれのサーバ１００、１１０では、仮想マシンを動作させるためのハイパーバイザ１０１、１１１が動作しており、ハイパーバイザ１０１では仮想マシン上で動作するオペレーティングシステムであるゲストＯＳ１０２が動作している。このゲストＯＳ１０２を移動してハイパーバイザ１１１で動作させるために、ゲストＯＳ１０２がアクセスする、ハイパーバイザ１０１内のメモリ領域１０６の内容を、ゲストＯＳ１０２を動作させながら、ハイパーバイザ１１１のメモリ領域１１６にマイグレーションする。メモリ領域１０６、１１６は、それぞれが同一のサイズを有する複数のページで構成される。【００４７】
Ｉ／Ｏスイッチ４００は、マイグレーションの対象となるメモリのアドレスを判定するアドレス比較器３１１、マイグレーションの対象となるメモリのページに対して書き込みの有無を管理するｄｉｒｔｙ  ｂｉｔ配列４１１を含むメモリ書き込み記憶部４１０、及びｄｉｒｔｙ  ｂｉｔ配列４１１に基づいてハイパーバイザ１０１とハイパーバイザ１１１との間でデータのコピーを行うメモリ複製部４２０を有する。【００４８】
図３はメモリ書き込みを監視した結果を格納するｄｉｒｔｙ  ｂｉｔ配列４１１と、メモリ複製部４２０が連携し、ｄｉｒｔｙであるページのみを転送する仕組みを持つＩ／Ｏスイッチ４００について示す図である。Ｉ／Ｏスイッチ４００は実施例１のＩ／Ｏスイッチ３００に加えて、メモリ複製部４２０を有する。【００４９】
次に各機構の機能について説明する。メモリ書き込み記憶部４１０は、メモリ複製機構の読み出し部４２１と通信を行う機能、ハイパーバイザ１０１、ハイパーバイザ１１１からｄｉｒｔｙ  ｂｉｔ配列４１１を読み書きする機能が追加されている。ｄｉｒｔｙ  ｂｉｔ配列４１１には実施例１に加えて、ハイパーバイザ１０１、メモリ複製部４２０からｄｉｒｔｙ  ｂｉｔを参照された際に、該当するｄｉｒｔｙ  ｂｉｔの内容を読み出して値を読み出し部４２１に返し、かつｄｉｒｔｙ  ｂｉｔを０にするという機能が追加されている。【００５０】
メモリ複製機構４２０はｄｉｒｔｙ  ｂｉｔ配列４１１を読み出し、あるページに対応するｂｉｔが１であった場合、すなわちそのページがｄｉｒｔｙだった場合にのみ、該当するページをサーバ１００からサーバ１１０へ転送する機能を持つ。【００５１】
図４に、図９に基づく動作の流れを示す。手順６００ではハイパーバイザ１０１が転送の初期設定を行う。メモリ領域１０６のアドレスの上限を上位アドレス３１２に、下限を下位アドレス３１３に書き込み、監視領域の設定を行う。その際、データの転送先であるハイパーバイザ１１１のメモリ１１４のメモリ領域１１６の上位アドレスと下位アドレスをメモリ複製部４２０に通知する。そして、ｄｉｒｔｙ  ｂｉｔ配列４１１の各ｂｉｔを全て１にする。これは、ｐｒｅ−ｃｏｐｙ動作で転送が必要なページはメモリ領域１０６全体であり、全てのページが転送を要するｄｉｒｔｙであるのと等価だからである。【００５２】
手順６０１では、ハイパーバイザ１０１がｐｒｅ−ｃｏｐｙ動作の開始と同時に（図９参照）メモリ書き込み監視部３１０に監視を開始させる。これ以降のｐｒｅ−ｃｏｐｙ動作中にＩ／Ｏ３０１からのメモリに対する書き込みで書き込まれたページはｄｉｒｔｙページとなり、ｄｉｒｔｙ  ｂｉｔ配列４１１の該当するｂｉｔが１となる。また、ＣＰＵ１０３からメモリ領域１０６への書き込みも非特許文献１、非特許文献２と同様に監視が開始される。【００５３】
手順６０２では、ハイパーバイザ１０１がメモリ領域１０６の転送をメモリ複製部４２０に指示する。ハイパーバイザ１０１のＣＰＵがメモリ領域をアクセスした場合は、そのアドレス又は対応するｂｉｔをメモリ複製部４２０に通知する。  指示を受けたメモリ複製部４２０がメモリ領域１０６の内容をメモリ領域１１６に自動的に複製を行う。【００５４】
図５にメモリ複製部４２０による１ページ分の複製の動作を示す。あるページを複製する場合、ｄｉｒｔｙ  ｂｉｔ配列４１１のｄｉｒｔｙ  ｂｉｔ４３２が１かどうかを調べ、１であればｄｉｒｔｙ  ｂｉｔ４３２を０にしてからページの複製を開始し、その間に書き込みがあったら、そのページにデータを書き込み、ｄｉｒｔｙ  ｂｉｔ４３２に１を設定する。【００５５】
読み出し部４２１は、ｄｉｒｔｙ  ｂｉｔ配列４１１のｄｉｒｔｙ  ｂｉｔ４３２を読み出す。このときに同時に、読み出されたｄｉｒｔｙ  ｂｉｔ４３２は０となる（リセットされる）。読み出してから、０にする操作を行っている間は、ｄｉｒｔｙ  ｂｉｔ４３２の状態は変化しない。そしてｄｉｒｔｙ  ｂｉｔ配列４１１のｂｉｔから読み出した結果がｄｉｒｔｙであれば該当するページ４３１は転送の対象であることが分かる。これは、転送されるページ４３１は、ｐｒｅ−ｃｏｐｙ動作中に書き込みが行われて転送が必要なｄｉｒｔｙページから、将来的に転送されるページになり、転送された後はページ４３１とページ４４１で内容が一致しｄｉｒｔｙでなくなるということを意味している。ページ４３１は、ｄｉｒｔｙ  ｂｉｔ配列４１１のｂｉｔを読み出した結果ｄｉｒｔｙだったので、読み出し部４２１はページ４３１の内容を読み出す。読み出された内容は書き込み部４２２によって、ページ４４１に書き込まれる。ｐｒｅ−ｃｏｐｙ動作による転送を行っている途中でも、ゲストＯＳ１０２は動作しており、Ｉ／Ｏ３０１からのメモリ書き込みの監視は行われており、Ｉ／Ｏ３０１からのメモリ書き込みが行われたページはｄｉｒｔｙとなる。【００５６】
全てのページについて転送が終了したら、手順６０２から手順６０３に遷移する。メモリ複製部４２０は、ハイパーバイザ１０１にｐｒｅ−ｃｏｐｙ動作による全ページのデータ転送の終了を通知する。【００５７】
手順６０４では、ｐｒｅ−ｃｏｐｙ動作による全てのページのデータの転送中に発生した新たなｄｉｒｔｙなページが存在するかどうかを調べ、ライブマイグレーションを終了するかどうかを決定する。手順６０２、手順６０３で、ｐｒｅ−ｃｏｐｙ動作中にＣＰＵ１０３からの書き込み、Ｉ／Ｏ３０１からの書き込みがなく、ｄｉｒｔｙなページが存在しない場合は、手順６０５に遷移する。ｄｉｒｔｙなページが存在する場合は、手順６０６に遷移する。【００５８】
手順６０５では、メモリ領域１０６の内容とメモリ領域１１６の内容は一致しており、ゲストＯＳ１０２の動作を再開させることが出来る。ハイパーバイザ１０１がハイパーバイザ１１１にメモリ転送の終了を通知し、ハイパーバイザ１１１はゲストＯＳ１０２の動作を再開する。これによってライブマイグレーションの処理が終了する。【００５９】
手順６０６では、ハイパーバイザ１０１が、ｐｒｅ−ｃｏｐｙ動作中の新たな書き込みによるｄｉｒｔｙページの数が十分に少ないかどうか（所定のページ数よりも少ないかどうか）を判断する。転送に要する時間は（ｄｉｒｔｙであるページの数）×（１ページあたりの転送時間）で求まり、この時間がゲストＯＳの停止時間として許容できるならば、ｄｉｒｔｙページの数が十分に少ないことになる。ｄｉｒｔｙページが十分に少なければ手順６０７に遷移する。そうでないならば、ゲストＯＳを動作させたままｄｉｒｔｙページを転送するため手順６０８に遷移する。【００６０】
手順６０７ではハイパーバイザ１０１がゲストＯＳ１０２を停止させる。これによって、ｓｔｏｐ−ａｎｄ−ｃｏｐｙ動作を行うことが可能となる。すなわちメモリ領域１０６にＣＰＵ１０３、Ｉ／Ｏ３０１から書き込みが行われなくなり、次の転送でライブマイグレーションの転送処理が終了することになる。ゲストＯＳ１０２の停止後、手順６０８に遷移する。【００６１】
手順６０８では、メモリ領域１０６の転送中にｄｉｒｔｙとなったページを転送しなおすための設定を行う。ハイパーバイザ１０１は、ＣＰＵ１０３からの書き込みによってｄｉｒｔｙとなっているページに該当するｄｉｒｔｙ  ｂｉｔに１を書き込む。これによって次に行われる手順６０２、手順６０３でＣＰＵ１０３からの書き込みでｄｉｒｔｙとなったページと、Ｉ／Ｏ３０１からの書き込みでｄｉｒｔｙとなったページの両方が転送されることとなる。また、Ｉ／Ｏからのメモリ書き込み監視機構が複数ある場合も、同様にメモリ書き込みによってｄｉｒｔｙとなっているページに該当するｄｉｒｔｙ  ｂｉｔに１を書き込む。【００６２】
ここで、本発明のように、ｐｒｅ−ｃｏｐｙ動作を繰り返すことにより、ｄｉｒｔｙとなるページ数が次第に少なくなることを説明する。【００６３】
Ｎページの全データをコピーするのにＴ(時間)要したとすると、１ページ当りのコピー時間は、Ｔ／Ｎとなる。(Ｎ／Ｔはコピー転送速度) 全データのコピー後にｐｒｅ−ｃｏｐｙ動作を繰り返す場合、コピー時間と新たな書き込み量が以下のようにして計算される。
１）上記の全データのコピーを行っているＴの間に、ｎ１ページ分の新たな書き込みが発生したとすると、これをコピーするにはｔ１＝ｎ１(Ｔ／Ｎ)＝(ｎ１／Ｎ)Tかかる。
２）ｔ１の間に、ｎ２ページ分の新たな書き込みが発生したとすると、これをコピーするにはｔ２＝ｎ２(Ｔ／Ｎ)かかる。ここで、新たな書き込みデータの単位時間当りの発生量は１）と同じであるから、ｎ１／Ｔ＝ｎ２／ｔ１が成り立つ。この関係を用いると、ｔ２＝ｎ２(Ｔ／Ｎ)＝(ｎ１／Ｎ)2Ｔとなる。
３）ｔ２の間に、ｎ３ページ分の新たな書き込みが発生したとすると、これをコピーするにはｔ３＝ｎ３(Ｔ／Ｎ)かかる。新たな書き込みデータの単位時間当りの発生量は１）と同じであるから、ｎ１／Ｔ＝ｎ３／ｔ２が成り立つ。この関係を用いると、ｔ３＝ｎ３(Ｔ／Ｎ)＝(ｎ１／Ｎ)３Ｔとなる。【００６４】
上記のｐｒｅ−ｃｏｐｙ動作を繰り返した場合、各ステップで、コピー転送速度が一定の条件から、Ｎ／Ｔ＝ｎ１／ｔ１＝ｎ２／ｔ２＝・・・＝ｎｋ／ｔｋが成り立ち、新規書き込み発生頻度が一定の条件から、ｎ１／Ｔ＝ｎ２／ｔ１＝・・・＝ｎｋ／ｔｋ−１が成り立つ。２つの条件から、第ｍステップ目のpre-copyを行っているｔｍ(＝(ｎ１／Ｎ)ｍＴ)の間に発生する新たな書き込み(ページ)はｎｍ＋１＝Ｎ(ｎ１／Ｎ)ｍ＋１が得られる。但し、ｎ１／Ｎは全データに対する新たな書き込みの発生割合で、ｎ１／Ｎ＜１である。即ち、ｐｒｅ−ｃｏｐｙ動作を繰り返していくと、新たな書き込みのデータ量（ページ数）が指数関数的に減少してゆき、その新たな書き込みをコピーする時間も指数関数的に減少してゆく。それ故、ｐｒｅ−ｃｏｐｙ動作を繰り返して新たな書き込みのデータ量を減少させた後でｓｔｏｐ−ａｎｄ−ｃｏｐｙ動作を行えば、ゲストＯＳ１０２の動作停止時間を短くできる。新たな書き込みの発生頻度が高い場合でも、ｐｒｅ−ｃｏｐｙ動作を十分な回数繰り返せば、ゲストＯＳ１０２の動作停止時間を短くできる。【００６５】
なお、全ページのコピー後にｍ回のｐｒｅ−ｃｏｐｙ動作を行った場合のコピーの所要時間Ｔtotalは、  Ｔtotal＝Ｔ＋ｔ１＋ｔ２＋ｔ３＋・・・・＋ｔｍ＝Ｔ＋(ｎ１／Ｎ)T＋(ｎ１／Ｎ)2Ｔ＋・・・＋(ｎ１／Ｎ)ｍＴ＝Ｔ(１−(ｎ１／Ｎ)ｍ＋１)／(１−(ｎ１／Ｎ))  で与えられる。このＴtotalによって、コピーの所要時間を見積もることができる。【００６６】
図４の手順６０６における判定処理では、ｐｒｅ−ｃｏｐｙ動作からｓｔｏｐ−ａｎｄ−ｃｏｐｙ動作に切り替える条件として、予め設定したコピーの所要時間、ｓｔｏｐ−ａｎｄ−ｃｏｐｙ動作の際に転送すべき新たな書き込みのデータ量、あるいは、それまでのｐｒｅ−ｃｏｐｙ動作の回数などのいずれかを用いることができる。また、条件の値を推定する場合に、上記の計算結果を利用できる。【００６７】
このようにして、メモリ書き込み監視の結果ｄｉｒｔｙとなっている領域のみを複製することで、メモリ書き込み監視情報を転送時に効率的に利用するメモリ複製の方法を実施できた。【００６８】
ｐｒｅ−ｃｏｐｙ動作を４回行った後で、ｓｔｏｐ−ａｎｄ−ｃｏｐｙ動作を行った場合のコピーされるデータ量の変化を図１１に示す。ｐｒｅ−ｃｏｐｙ動作を１回行った後で、ｓｔｏｐ−ａｎｄ−ｃｏｐｙ動作を行った場合を示す図９と比べると、図１１では、ｓｔｏｐ−ａｎｄ−ｃｏｐｙ動作を行う時点でのコピーされるデータ量が少なくなっていることがわかる。【００６９】
また、ゲストＯＳを動作したままのｐｒｅ−ｃｏｐｙ動作を繰り返すことにより、ｄｉｒｔｙとなったページ数を少なくした後で、ｓｔｏｐ−ａｎｄ−ｃｏｐｙ動作を行うので、その間のゲストＯＳの動作停止時間を短縮できる。【００７０】
本実施例では、ゲストＯＳを動作させながら、ゲストＯＳをハイパーバイザ間で移動させる場合を説明したが、通常のプログラムを、そのプログラムを動作させながら計算機間で移動させる場合にも適用できる。
【符号の説明】
【００７１】
１００  ライブマイグレーションにおける移動元のサーバ
１０１  ライブマイグレーションにおける移動元のハイパーバイザ
１０２  ハイパーバイザ１０１上で動作する、ライブマイグレーションの対象のゲストＯＳ
１０３  サーバ１００に搭載されているＣＰＵ
１０４  サーバ１００に搭載されているメモリ
１０５  メモリ１０４においてハイパーバイザ１０１に割り当てられている領域
１０６  メモリ１０４においてゲストＯＳ１０２に割り当てられている領域
１０７  サーバ１００に搭載されているＩ／Ｏ
１１０  ライブマイグレーションにおける移動先のサーバ
１１１  ライブマイグレーションにおける移動先のハイパーバイザ
１１３  サーバ１１０に搭載されているＣＰＵ
１１４  サーバ１１０に搭載されているメモリ
１１５  メモリ１１４においてハイパーバイザ１１１に割り当てられている領域
１１６  メモリ１１４においてゲストＯＳ１０２に割り当てられる領域
１２０  サーバ１００とサーバ１０１間の通信を行うネットワーク
２００  メモリ領域１０６のうちメモリ領域１１６に複製が終了しているメモリ領域
２０１  メモリ領域１０６のうちメモリ領域１１６に複製が終了していないメモリ領域
２０２  メモリ領域２００のうち複製後に書き込みが行われたメモリ領域
２１０  メモリ領域１１６のうちメモリ領域１０６から複製が行われたメモリ領域
２１１  メモリ領域１１６のうちメモリ領域１０６からの複製が終了していないメモリ領域
３００  サーバ１００とＩ／Ｏ３０１、Ｉ／Ｏ３０２を接続する実施例１の機能を持つＩ／Ｏスイッチ
３１０  Ｉ／Ｏ３０１、Ｉ／Ｏ３０２からの書き込みを監視するメモリ書き込み監視部
３１１  書き込みアドレスが上位アドレス３１２と下位アドレス３１３の間に入っているかを判定する比較器
３２０  ページがｄｉｒｔｙかどうかを記憶するための記憶部
３２１  ページごとにｄｉｒｔｙかどうかを記憶するｄｉｒｔｙ  ｂｉｔ配列
３３０  ページ３３１をｄｉｒｔｙにするメモリ書き込み
３３１  メモリ領域１０６上のメモリ書き込み３３０によってｄｉｒｔｙとなるページ
３３２  ｄｉｒｔｙ  ｂｉｔ配列３２１のページ３３１に対応するｄｉｒｔｙ  ｂｉｔ
４００  実施例２の機能を持つＩ／Ｏスイッチ
４１０  ハイパーバイザ１０２、メモリ複製部４２０からｄｉｒｔｙ  ｂｉｔ配列４１１にアクセス可能なメモリ書き込み記憶部
４１１  ｄｉｒｔｙ  ｂｉｔ読み出し時に読み出した値を返し、かつ０を書き込む機能を持つｄｉｒｔｙ  ｂｉｔ配列
４２０  メモリ１０４から値を読み、メモリ１１４に書き込みを行うメモリ複製部
４２１  ｄｉｒｔｙ  ｂｉｔ配列４１１を読み出し、ｄｉｒｔｙページのみをメモリ領域１０６から読み出す読み出し部
４２２  読み出し部４２１が読み出した内容をメモリ領域１１６に書き込む書き込み部
４３１  メモリ領域１０６上のｄｉｒｔｙとなっているページ
４３２  ページ４３１に対応するｄｉｒｔｙ  ｂｉｔ
４４１  メモリ領域１１６上でページ４３１から内容がコピーされるページ
５００  ｄｉｒｔｙページ番号を記憶するための連結リスト。
【図１】
2012063334.tif 000003
【図２】
2012063334.tif 000004
【図３】
2012063334.tif 000005
【図４】
2012063334.tif 000006
【図５】
2012063334.tif 000007
【図６】
2012063334.tif 000008
【図７】
2012063334.tif 000009
【図８】
2012063334.tif 000010
【図９】
2012063334.tif 000011
【図１０】
2012063334.tif 000012
【図１１】
2012063334.tif 000013
【手続補正書】
【提出日】平成23年5月16日(2011.5.16)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
電子計算機とＩ／Ｏ装置が接続され、
前記電子計算機のメモリの特定領域をページに分割し、前記分割されたページごとにメモリ書き込みの有無を記憶するためのｄｉｒｔｙ  ｂｉｔ配列と、
前記Ｉ／Ｏ装置からの前記電子計算機のメモリに対するメモリ書き込みを監視する第一のメモリ書き込み監視機構と、
ＣＰＵからの前記電子計算機のメモリに対するメモリ書き込みを監視する第二のメモリ書き込み監視機構とを有し、
前記第一のメモリ書き込み監視機構または前記第二のメモリ書き込み監視機構によって、前記メモリの特定領域に対するＩ／Ｏ装置またはＣＰＵからのメモリ書き込みが観測された時に、
前記メモリ書き込みのアドレスから前記メモリ書き込みの行われたページを決定し、
前記ｄｉｒｔｙ  ｂｉｔ配列に前記ページに対するメモリ書き込みがあったことを記録し、
前記ｄｉｒｔｙ  ｂｉｔ配列の各ｂｉｔに基づいて、前記ＣＰＵからメモリ書き込みがあったページ及び前記Ｉ／Ｏからメモリ書き込みがあったページの両方に対して、前記電子計算機のメモリから他の電子計算機のメモリに前記ページをコピーするメモリ転送を行う
ことを特徴とするメモリ制御装置。
【請求項２】
前記メモリ制御装置は、さらに、前記電子計算機から他の電子計算機へメモリの内容を転送するメモリ複製機構を有し、
ｄｉｒｔｙ  ｂｉｔ配列において転送が必要と記憶されているページのみを、
メモリ複製機構が前記電子計算機から前記他の電子計算機に転送する
ことを特徴とする請求項１記載のメモリ制御装置。
【請求項３】
前記メモリ複製機構が、
前記ｄｉｒｔｙ  ｂｉｔ配列を参照する際に、
ページ毎の、転送が不要という状態かあるいは転送か必要という状態かの情報を読み出し、
前記情報に転送が必要と記憶されている場合、
前記情報を読み出したページについては転送が不要と記憶しなおす
ことを特徴とする請求項２記載のメモリ制御装置。
【請求項４】
前記いずれかの電子計算機が、
前記ｄｉｒｔｙ  ｂｉｔ配列を、
ページ毎に個別に、転送が不要という状態から転送が必要という状態に変更可能である
ことを特徴とする請求項２記載のメモリ制御装置。
【請求項５】
メモリ複製機構が、
メモリ書き込みがあったと記録されているページを転送が必要と記憶されているページと判断し、
前記ｄｉｒｔｙ  ｂｉｔ配列において転送が必要と記憶されているページのみを、転送元電子計算機から転送先電子計算機に転送する
ことを特徴とする請求項１に記載のメモリ制御装置。
【請求項６】
Ｉ／Ｏ装置と、ＣＰＵもしくは前記Ｉ／Ｏ装置からアクセスされているメモリを有する第１の計算機と、
第２の計算機とに接続されたＩ／Ｏスイッチであって、
前記第１の計算機及び前記第２の計算機は、ハイパバイザを有し、
前記Ｉ／Ｏスイッチは、
複数ページに分割され、前記Ｉ／Ｏ及び前記第１の計算機のＣＰＵがアクセスする特定領域の前記分割されたページごとにメモリ書き込みの有無を記憶するためのｄｉｒｔｙ  ｂｉｔ配列を記憶する記憶手段と、
前記ＣＰＵもしくは前記Ｉ／Ｏ装置からの前記第１の計算機のメモリに対するメモリ書き込みを監視するメモリ書き込み監視手段と、
メモリの内容を前記第１の計算機から前記第２の計算機にコピーするメモリ複製手段とを有し、
前記第１の計算機のハイパバイザ上で動作するゲストＯＳが、前記第２の計算機のハイパバイザ上に移動されるに際し、
前記メモリ複製手段は、
前記ＣＰＵもしくは前記Ｉ／Ｏ装置の動作中に、前記特定領域の全ページに対して、前記それぞれのページのコピー後に前記ｄｉｒｔｙ  ｂｉｔ配列の対応するｂｉｔをリセットしてから、前記第１の計算機のメモリから前記第２の計算機のメモリにそれぞれのページをコピーするメモリ転送を行い、
前記メモリ書き込み監視手段に基づいて、前記メモリ転送中にメモリ書き込みがあったページに対応する、前記ｄｉｒｔｙ  ｂｉｔ配列のｂｉｔに、メモリ書き込みがあったことを記憶するｄｉｒｔｙ記憶を行い、
前記ｄｉｒｔｙ  ｂｉｔ配列における前記ｄｉｒｔｙ記憶が所定の条件を満たさない場合は、前記ｄｉｒｔｙ  ｂｉｔ配列の各ｂｉｔに基づいて、前記メモリ転送中にメモリ書き込みがあったページに対して、前記メモリ転送及び前記ｄｉｒｔｙ記憶を再度行い、
前記ｄｉｒｔｙ  ｂｉｔ配列における前記ｄｉｒｔｙ記憶が前記所定の条件を満たす場合は、前記ゲストＯＳの動作を停止して、前記ｄｉｒｔｙ  ｂｉｔ配列の各ｂｉｔに基づいて、前記メモリ転送中に前記ＣＰＵからメモリ書き込みがあったページ及び前記Ｉ／Ｏ装置からメモリ書き込みがあったページの両方に対して前記メモリ転送を行った後で、前記メモリ転送を停止することを特徴とするＩ／Ｏスイッチ。
【請求項７】
Ｉ／Ｏ装置と、ＣＰＵもしくは前記Ｉ／Ｏ装置からアクセスされているメモリを有する第１の計算機と、第２の計算機とに接続されたＩ／Ｏスイッチにおけるメモリ制御方法は、
前記第１の計算機及び前記第２の計算機は、ハイパバイザを有し、
前記Ｉ／Ｏスイッチは、
複数ページに分割され、前記Ｉ／Ｏ装置及び前記第１の計算機のＣＰＵがアクセスする特定領域の前記分割されたページごとにメモリ書き込みの有無を記憶するためのｄｉｒｔｙ  ｂｉｔ配列を記憶部に記憶し、
前記第１の計算機のハイパバイザ上で動作するゲストＯＳが、前記第２の計算機のハイパバイザ上に移動されるに際し、
前記ＣＰＵもしくは前記Ｉ／Ｏ装置の動作中に、前記特定領域の全ページに対して、前記それぞれのページのコピー後に前記ｄｉｒｔｙ  ｂｉｔ配列の対応するｂｉｔをリセットしてから、前記第１の計算機のメモリから前記第２の計算機のメモリにそれぞれのページをコピーするメモリ転送を行い、
前記ＣＰＵもしくは前記Ｉ／Ｏ装置からの前記第１の計算機のメモリに対するメモリ書き込みの監視結果に基づいて、前記メモリ転送中にメモリ書き込みがあったページに対応する、前記ｄｉｒｔｙｂｉｔ配列のｂｉｔに、メモリ書き込みがあったことを記憶するｄｉｒｔｙ記憶を行い、
前記ｄｉｒｔｙ  ｂｉｔ配列における前記ｄｉｒｔｙ記憶が所定の条件を満たさない場合は、前記ｄｉｒｔｙ  ｂｉｔ配列の各ｂｉｔに基づいて、前記メモリ転送中にメモリ書き込みがあったページに対して、前記メモリ転送及び前記ｄｉｒｔｙ記憶を再度行い、
前記ｄｉｒｔｙ  ｂｉｔ配列における前記ｄｉｒｔｙ記憶が前記所定の条件を満たす場合は、前記ゲストＯＳの動作を停止して、前記ｄｉｒｔｙ  ｂｉｔ配列の各ｂｉｔに基づいて、前記メモリ転送中に前記ＣＰＵからメモリ書き込みがあったページ及び前記Ｉ／Ｏ装置からメモリ書き込みがあったページの両方に対して前記メモリ転送を行った後で、前記メモリ転送を停止することを特徴とするメモリ制御方法。
【請求項８】
前記所定の条件は、予め設定したコピーの所要時間、前記ゲストＯＳの動作を停止して転送すべき新たな書き込みのデータ量、あるいは、それまでの前記メモリ転送及び前記ｄｉｒｔｙ記憶の動作の回数のいずれかであることを特徴とする請求項６記載のＩ／Ｏスイッチ。
【請求項９】
前記所定の条件は、予め設定したコピーの所要時間、前記ゲストＯＳの動作を停止して転送すべき新たな書き込みのデータ量、あるいは、それまでの前記メモリ転送及び前記ｄｉｒｔｙ記憶の動作の回数のいずれかであることを特徴とする請求項７記載のメモリ制御方法。
【国際調査報告】
2012063334.tif 000014
2012063334.tif 000015