(57)【特許請求の範囲】
【請求項１】
仮想マシンの移行元のコンピュータと移行先のコンピュータとを含む仮想マシン移行システムであって、
前記移行元のコンピュータは、
前記仮想マシンが直接Ｉ／Ｏによって使用している機器に対するＭＭＩＯ領域のホスト物理アドレス情報を前記移行先のコンピュータに通知する通知部と、
前記機器を当該コンピュータに接続させている切替器に当該機器の接続先を前記移行先のコンピュータに切り替えさせる切替制御部とを有し、
前記移行先のコンピュータは、
前記切替器によって当該コンピュータに接続された機器に対して、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係るＭＭＩＯ領域を割り当てる接続部を有する仮想マシン移行システム。
【請求項２】
機器ごとにＭＭＩＯ領域に関してゲスト物理アドレスとホスト物理アドレスとの一致の要否を示す情報を記憶する機器情報記憶部を有し、
前記接続部は、前記切替器によって当該コンピュータに接続された機器に関して前記機器情報記憶部に記憶されている情報が、前記ホスト物理アドレスと前記ゲスト物理アドレスとの一致が必要であることを示す場合に、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係るＭＭＩＯ領域を当該機器に対して割り当てる請求項１記載の仮想マシン移行システム。
【請求項３】
前記接続部は、移行対象とされている複数の仮想マシンのうちの第一の仮想マシンに関して前記移行元のコンピュータより通知されたホスト物理アドレス情報を予約情報記憶部に記録し、第二の仮想マシンに関して前記移行元のコンピュータ又は他の移行元のコンピュータより通知されたホスト物理アドレス情報に係る領域が、前記予約情報記憶部に記録されているホスト物理アドレス情報に係る領域と重複する部分を有する場合は、前記第二の仮想マシンに関する前記ホスト物理アドレス情報を前記予約情報記憶部に記録せず、前記予約情報記憶部に記録されているホスト物理アドレス情報に係るＭＭＩＯ領域を割り当てる請求項１又は２記載の仮想マシン移行システム。
【請求項４】
前記接続部は、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係る領域と重複する部分を有するＭＭＩＯ領域が前記移行先のコンピュータにおいて使用されている場合は、当該ＭＭＩＯ領域を当該ホスト物理アドレス情報に係る領域と重複しない領域に移動させる請求項１乃至３いずれか一項記載の仮想マシン移行システム。
【請求項５】
前記接続部は、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係る領域と重複する部分を有するＭＭＩＯ領域が前記移行先のコンピュータにおいて使用されている場合は、前記移行先のコンピュータにおいて当該ＭＭＩＯ領域に係る機器を使用している仮想マシンを他のコンピュータに移行させる請求項１乃至３いずれか一項記載の仮想マシン移行システム。
【請求項６】
仮想マシンの移行をコンピュータに実行させる仮想マシン移行プログラムであって、
前記コンピュータが移行元の場合に、
前記仮想マシンが直接Ｉ／Ｏによって使用している機器に対するＭＭＩＯ領域のホスト物理アドレス情報を移行先のコンピュータに通知し、
前記機器を当該コンピュータに接続させている切替器に当該機器の接続先を前記移行先のコンピュータに切り替えさせる処理を当該コンピュータに実行させ、
前記コンピュータが移行先の場合に、
前記切替器によって当該コンピュータに接続された機器に対して、移行元のコンピュータより通知されたホスト物理アドレス情報に係るＭＭＩＯ領域を割り当てる処理を当該コンピュータに実行させる仮想マシン移行プログラム。
【請求項７】
仮想マシンの移行元のコンピュータと移行先のコンピュータとを含む仮想マシン移行システムが実行する仮想マシン移行方法であって、
前記移行元のコンピュータが、
前記仮想マシンが直接Ｉ／Ｏによって使用している機器に対するＭＭＩＯ領域のホスト物理アドレス情報を前記移行先のコンピュータに通知し、
前記機器を当該コンピュータに接続させている切替器に当該機器の接続先を前記移行先のコンピュータに切り替えさせる処理を実行し、
前記移行先のコンピュータが、
前記切替器によって当該コンピュータに接続された機器に対して、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係るＭＭＩＯ領域を割り当てる処理を実行する仮想マシン移行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想マシン移行システム、仮想マシン移行プログラム、及び仮想マシン移行方法に関し、特に仮想マシンを異なるホストコンピュータに移行させる仮想マシン移行システム、仮想マシン移行プログラム、及び仮想マシン移行方法に関する。
【背景技術】
【０００２】
仮想化技術におけるＩ／Ｏ性能を向上させる手段として、ＰＣＩ（Peripheral Component Interconnect）デバイスを仮想マシンに対して直接割り当てる直接Ｉ／Ｏ（Ｄｉｒｅｃｔ  Ｉ／Ｏ）と呼ばれる技術がハードウェア機能として実装されてきている（例えば、特許文献１、非特許文献１参照）。
【０００３】
仮想マシンには、ホストコンピュータのメモリの一部が仮想マシンのメモリ空間として割り当てられる。仮想マシンが認識している物理アドレス（ＧＰＡ：Guest-Physical Address）と、ホストコンピュータにおける物理アドレス（ＨＰＡ：Host-Physical Address）とは異なっており、仮想マシンからＰＣＩデバイスに直接アクセスするには、ＧＰＡ及びＨＰＡ間の変換が実行される必要がある。
【０００４】
直接Ｉ／Ｏは、ＧＰＡ及びＨＰＡ間のアドレス変換（ＤＭＡ  Ｒｅｍａｐｐｉｎｇ：ＤＭＡリマッピング）を行うハードウェア（直接Ｉ／Ｏハードウェア）を用いて、仮想マシンとＰＣＩデバイス間で直接ＤＭＡ（Direct Memory Access）転送を行う。ＰＣＩデバイスの設定を行うＰＣＩコンフィグレーション空間や、デバイス割り込みの伝達等は、仮想化ソフトウェアによってエミュレーションされて仮想マシンに提供される。その結果、仮想マシンは、実際のＰＣＩデバイスを、仮想マシンに直接接続しているかのように扱うことができる。
【０００５】
図１は、ＤＭＡリマッピングによるＤＭＡ転送を示す図である。同図において、ホスト物理アドレス空間ｓ１は、ホストコンピュータの物理アドレス空間である。ゲスト物理アドレス空間ｓ２は、当該ホストコンピュータ上で動作する仮想マシンの物理アドレス空間である。
【０００６】
ＭＭＩＯ領域ａ１は、ホストコンピュータに接続されたＰＣＩデバイスｖ１に対するメモリマップドＩ／Ｏのためにホスト物理アドレス空間ｓ１内に割り当てられたメモリ領域である。ＭＭＩＯ領域ａ２は、ＰＣＩデバイスｖ１に対するメモリマップドＩ／Ｏのためにゲスト物理アドレス空間ｓ２内に割り当てられたメモリ領域である。
【０００７】
仮想マシン上において、ＰＣＩデバイスへのアクセス（ＤＭＡ転送）が行われる場合、ＭＭＩＯ領域ａ２内のアドレスに対してアクセスが行われる。ＭＭＩＯ領域ａ２内のアドレスは、ＤＡＭリマッピングにより、ＭＭＩＯ領域ａ１内のアドレスに変換される。その結果、ＰＣＩデバイスｖ１へのアクセスが実現される。
【０００８】
他方において、仮想化技術において、或るホストコンピュータで稼働中の仮想マシンを、稼働状態のまま他のホストコンピュータに移行する、ライブマイグレーションと呼ばれる技術がある。ライブマイグレーションは、例えば、運用管理上の負荷分散や障害対策等において用いられている。ライブマイグレーションでは、仮想マシンの移行前後において、仮想マシン内におけるＣＰＵやハードウェアレジスタの状態、メモリ内容、Ｉ／Ｏ転送の状態等の全てが一致していなければならない。
【０００９】
通常、仮想マシンが移行元のホストコンピュータで使用していたＰＣＩデバイスそのものを移行先のホストコンピュータで使用することはできない。移行元のホストコンピュータで使用されていたＰＣＩデバイスは、移行先のホストコンピュータには接続されていないからである。したがって、直接Ｉ／ＯによりＰＣＩデバイスを使用している仮想マシンを、ライブマイグレーションにより移行することはできない。
【００１０】
但し、ＰＣＩスイッチを用いることにより、複数のホストコンピュータから一つのＰＣＩデバイスへの接続を共有することができる。ここでいう、「共有」とは、必ずしも同時に使用できるということではない。ＰＣＩスイッチ内の接続関係の切り替えにより、物理的な配線を変更することなく、ＰＣＩデバイスの接続先のホストコンピュータを変更可能であることをいう。なお、ＰＣＩスイッチを用いたＰＣＩデバイスの共有に関しては、ＭＲ−ＩＯＶ（Multi Root I/O Virtualization）という規格がＰＣＩ−ＳＩＧによって策定されている。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００９−２５９１０８号公報
【非特許文献】
【００１２】
【非特許文献１】「Intel (R) Virtualization Technology for Directed I/O ArchitectureSpecification Rev 1.2」、［online］、２００８年９月、［平成２２年９月２２日検索］、インターネット（ＵＲＬ：http://download.intel.com/technology/computing/vptech/Intel(r)_VT_for_Direct_IO.pdf）
【発明の概要】
【発明が解決しようとする課題】
【００１３】
ＰＣＩスイッチを用いれば、仮想マシンの移行元及び移行先のホストコンピュータから同一のＰＣＩデバイスを共有することができる。したがって、ＰＣＩスイッチに接続したホストコンピュータ間で、直接Ｉ／Ｏを使用している仮想マシンをライブマイグレーションすることが可能であると考えられる。
【００１４】
しかし、必ずしも全てのＰＣＩデバイスについて、直接Ｉ／Ｏによる動作が保証されているわけではない。例えば、一部のホストアダプタやグラフィックスカード等では、直接Ｉ／Ｏが正常に機能しないことが確認されている。直接Ｉ／Ｏにおいて、ＤＭＡ転送時のＧＰＡ及びＨＰＡ間の変換は、ハードウェアによって行われる。ハードウェアによる当該変換が無効となるような処理が行われた場合、ＰＣＩデバイスが正常に動作しない場合がある。例えば、仮想マシン上から、ＰＣＩデバイスのデバイスドライバが、ＰＣＩデバイス上のファームウェアから得たＰＣＩデバイスのアドレス（ＨＰＡ）に対してアクセスしようとした場合等である。この場合、ＤＭＡアドレス変換が働かず、ＰＣＩデバイスが正常に動作しない場合もある。
【００１５】
このようなＰＣＩデバイスに関しては、ＤＭＡアドレス変換が働かない場合でも、正しいアドレスにアクセス可能となるように、ＰＣＩコンフィグレーション空間を構成する必要がある。そこで、ＰＣＩデバイスのホストコンピュータにおけるＭＭＩＯ領域の物理アドレス（ＨＰＡ）と、仮想マシン上におけるＭＭＩＯ領域の物理アドレス（ＧＰＡ）とを一致させることで、直接Ｉ／Ｏを利用した場合でも正常に動作することが確認されている。
【００１６】
図２は、ＨＰＡとＧＰＡとが一致した状態を示す図である。図２中、図１と同一部分には同一符号を付し、その説明は省略する。
【００１７】
同図では、ホスト物理アドレス空間ｓ１におけるＭＭＩＯ領域ａ１の位置と、ゲスト物理アドレス空間ｓ２におけるＭＭＩＯ領域ａ２の位置とが一致している。同図において、当該位置の一致は、二つのＭＭＩＯ領域のアドレスの一致を示す。
【００１８】
ＨＰＡとＧＰＡとを一致させた状態でＰＣＩデバイスを使用している仮想マシンをライブマイグレーションする場合、当該状態が移行先でも維持されれば、当該仮想マシンは、移行先においても当該ＰＣＩデバイスの使用が可能であると考えられる。
【００１９】
しかしながら、ホストコンピュータ上でＰＣＩデバイスのＭＭＩＯ領域がどの物理アドレスに割り当てられるかは、ホストコンピュータのファームウェア（ＢＩＯＳ（Basic Input/Output System）等）やホストコンピュータのＯＳ（Operating System）によってコンフィグレーション時に決定される。ＰＣＩデバイスのＭＭＩＯ領域の物理アドレスは、ホストコンピュータの種別やホストコンピュータのデバイス構成等によって変わる値である。ＰＣＩスイッチによって、あるＰＣＩデバイスを複数のホストコンピュータから参照可能な場合であっても、それぞれのホストコンピュータ上において該ＰＣＩデバイスのＭＭＩＯ領域の物理アドレスが一致するとは限らない。すなわち、ＰＣＩスイッチからのＰＣＩデバイスのホットプラグを検出した移行先のホストコンピュータでは、ホストの空き領域に当該ＰＣＩデバイスのＭＭＩＯ領域が設定される。当該ＭＭＩＯ領域のホスト物理アドレスが移行元のホストで該ＰＣＩデバイスに割り当てられていたＭＭＩＯ領域のホスト物理アドレスと一致する保証はない。
【００２０】
本発明は、上記の点に鑑みてなされたものであって、仮想マシンが移行元において直接Ｉ／Ｏによって使用していた機器について移行先においても使用の継続を可能とすることのできる仮想マシン移行システム、仮想マシン移行プログラム、及び仮想マシン移行方法の提供を目的とする。
【課題を解決するための手段】
【００２１】
そこで上記課題を解決するため、仮想マシンの移行元のコンピュータと移行先のコンピュータとを含む仮想マシン移行システムであって、前記移行元のコンピュータは、前記仮想マシンが直接Ｉ／Ｏによって使用している機器に対するＭＭＩＯ領域のホスト物理アドレス情報を前記移行先のコンピュータに通知する通知部と、前記機器を当該コンピュータに接続させている切替器に当該機器の接続先を前記移行先のコンピュータに切り替えさせる切替制御部とを有し、前記移行先のコンピュータは、前記切替器によって当該コンピュータに接続された機器に対して、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係るＭＭＩＯ領域を割り当てる接続部を有する。
【発明の効果】
【００２２】
仮想マシンが移行元において直接Ｉ／Ｏによって使用していた機器について移行先においても使用の継続を可能とすることができる。
【図面の簡単な説明】
【００２３】
【図１】ＤＭＡリマッピングによるＤＭＡ転送を示す図である。
【図２】ＨＰＡとＧＰＡとが一致した状態を示す図である。
【図３】本発明の実施の形態におけるシステム構成例を示す図である。
【図４】本発明の実施の形態におけるホストコンピュータのハードウェア構成例を示す図である。
【図５】本発明の実施の形態におけるＰＣＩスイッチを説明するための図である。
【図６】本発明の実施の形態におけるホストコンピュータのソフトウェア構成例を示す図である。
【図７】本発明の実施の形態におけるＶＭマネージャの機能構成を説明するための図である。
【図８】本実施の形態における仮想マシンの移行処理の処理手順の概要を説明するためのシーケンス図である。
【図９】第一の実施の形態において移行元のホストコンピュータが実行するＰＣＩデバイスの切断前処理の処理手順の一例を説明するためのフローチャートである。
【図１０】直接Ｉ／Ｏデバイス一覧テーブルの構成例を示す図である。
【図１１】デバイス属性テーブルの構成例を示す図である。
【図１２】ベースアドレスレジスタの構成例を示す図である。
【図１３】第一の実施の形態において移行先のホストコンピュータが実行するＰＣＩデバイスの接続前処理の処理手順の一例を説明するためのフローチャートである。
【図１４】接続予約テーブルの構成例を示す図である。
【図１５】第一の実施の形態において移行元のホストコンピュータが実行するＰＣＩデバイスの接続先の切替処理の処理手順の一例を説明するためのフローチャートである。
【図１６】第一の実施の形態において移行先のホストコンピュータが実行するＰＣＩデバイスの接続処理の処理手順の一例を説明するためのフローチャートである。
【図１７】第二の実施の形態において移行先のホストコンピュータが実行するＰＣＩデバイスの接続前処理の処理手順の一例を説明するためのフローチャートである。
【図１８】第二の実施の形態における重複するＭＭＩＯ領域の解放処理の処理手順の一例を説明するためのフローチャートである。
【図１９】第三の実施の形態における重複するＭＭＩＯ領域の解放処理の処理手順の一例を説明するためのフローチャートである。
【図２０】第四の実施の形態における重複するＭＭＩＯ領域の解放処理の処理手順の一例を説明するためのフローチャートである。
【図２１】第五の実施の形態における重複するＭＭＩＯ領域の解放処理の処理手順の一例を説明するためのフローチャートである。
【図２２】第六の実施の形態において移行元のホストコンピュータが実行するＰＣＩデバイスの切断前処理の処理手順の一例を説明するためのフローチャートである。
【図２３】仮想マシン稼働優先度テーブルの構成例を示す図である。
【図２４】第六の実施の形態における重複するＭＭＩＯ領域の解放処理の処理手順の一例を説明するためのフローチャートである。
【図２５】稼動優先度に応じたＭＭＩＯ領域の解放処理の処理手順の一例を説明するためのフローチャートである。
【発明を実施するための形態】
【００２４】
以下、図面に基づいて本発明の実施の形態を説明する。図３は、本発明の実施の形態におけるシステム構成例を示す図である。同図において、ホストコンピュータ１０ａ及びホストコンピュータ１０ｂ（以下、両者を区別しない場合、「ホストコンピュータ１０」という。）は、ＬＡＮ（Local Area Network）等のネットワーク３０（有線又は無線の別は問わない。）を介して通信可能に接続されている。
【００２５】
各ホストコンピュータ１０は、仮想マシンの動作環境を有するコンピュータである。本実施の形態において、ホストコンピュータ１０ａにおいて動作中の仮想マシンは、ホストコンピュータ１０ｂにライブマイグレーションされる。ライブマイグレーションとは、稼働状態の仮想マシンをそのままホストコンピュータ間を移行させることをいう。以下、ライブマイグレーションを、単に「移行」という。
【００２６】
ネットワーク３０には、更に、ＰＣＩスイッチ２０が接続されている。ＰＣＩスイッチ２０は、各ホストコンピュータ１０から、同一のＰＣＩ（Peripheral Component Interconnect）デバイスを共有させるための機器である。本実施の形態において、ＰＣＩスイッチ２０は、切替器の一例である。同図では、ＰＣＩスイッチ２０の下流側のポートにＰＣＩデバイスｄが所定のケーブルを介して接続されている。また、ＰＣＩスイッチ２０の上流側のポートは、各ホストコンピュータ１０におけるＰＣＩスロットと所定のケーブルを介して接続されている。したがって、同図の状態において、ＰＣＩスイッチ２０は、ＰＣＩデバイスｄを、ホストコンピュータ１０ａ及び１０ｂに共有させることができる。「共有」とは、必ずしも同時に使用できるということではない。ＰＣＩスイッチ内の接続関係の切り替えにより、物理的な配線を変更することなく、ＰＣＩデバイスｄの接続先のホストコンピュータを変更可能であることをいう。なお、ＰＣＩスイッチ２０は、ＭＲ−ＩＯＶ（Multi Root I/O Virtualization）という規格に準拠したものであってもよい。
【００２７】
ＰＣＩスイッチ２０が、ネットワーク３０に接続されているのは、本実施の形態において、ＰＣＩスイッチ２０は、ホストコンピュータ１０との間で、情報通信を実行するからである。例えば、ＰＣＩデバイスｄの接続先のホストコンピュータ１０の切り替え指示等が、ネットワーク３０を介してＰＣＩスイッチ２０に転送される。なお、本実施の形態において、ＰＣＩデバイスｄは、ホストコンピュータ１０において動作する仮想マシンが直接Ｉ／Ｏによって使用する機器の一例である。
【００２８】
図４は、本発明の実施の形態におけるホストコンピュータのハードウェア構成例を示す図である。図４のホストコンピュータ１０は、それぞれバスBで相互に接続されているドライブ装置１００、補助記憶装置１０２、メモリ装置１０３、ＣＰＵ１０４、インタフェース装置１０５、及び直接Ｉ／Ｏハードウェア１０６等を有する。
【００２９】
ホストコンピュータ１０での処理を実現するプログラムは、ＣＤ−ＲＯＭ等の記録媒体１０１によって提供される。プログラムを記録した記録媒体１０１がドライブ装置１００にセットされると、プログラムが記録媒体１０１からドライブ装置１００を介して補助記憶装置１０２にインストールされる。但し、プログラムのインストールは必ずしも記録媒体１０１より行われなくてもよい。ネットワークを介して他のコンピュータよりダウンロードされてもよい。補助記憶装置１０２は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【００３０】
メモリ装置１０３は、プログラムの起動指示があった場合に、補助記憶装置１０２からプログラムを読み出して格納する。ＣＰＵ１０４は、メモリ装置１０３に格納されたプログラムに従ってホストコンピュータ１０に係る機能を実行する。インタフェース装置１０５は、ネットワークに接続するためのインタフェースとして用いられる。
【００３１】
直接Ｉ／Ｏハードウェア１０６は、直接Ｉ／Ｏ（Ｄｉｒｅｃｔ  Ｉ／Ｏ）を実現するためのハードウェアである。例えば、直接Ｉ／Ｏハードウェア１０６は、ホストコンピュータ１０における物理アドレス（ＨＰＡ：Host-Physical Address）と、仮想マシンが認識している物理アドレス（ＧＰＡ：Guest-Physical Address）との間のアドレス変換（ＤＭＡリマッピング）を行う。すなわち、ホストコンピュータ１０は、直接Ｉ／Ｏハードウェア１０６を用いて、仮想マシンとＰＣＩデバイスｄとの間で直接的にＤＭＡ（Direct Memory Access）（ダイレクトＤＭＡ）を行うことが可能である。以下、ＨＰＡを、「ホスト物理アドレス」といい、ＧＰＡを「ゲスト物理アドレス」という。
【００３２】
なお、記録媒体１０１の一例としては、ＣＤ−ＲＯＭ、ＤＶＤディスク、又はＵＳＢメモリ等の可搬型の記録媒体が挙げられる。また、補助記憶装置１０２の一例としては、ＨＤＤ（Hard Disk Drive）又はフラッシュメモリ等が挙げられる。記録媒体１０１及び補助記憶装置１０２のいずれについても、コンピュータ読み取り可能な記録媒体に相当する。
【００３３】
図５は、本発明の実施の形態におけるＰＣＩスイッチを説明するための図である。同図において、ＰＣＩスイッチ２０は、複数のアップストリーム（上流）ポート（１〜８）と、複数のダウンストリーム（下流）ポート（１〜８）とを有する。ダウンストリームポートは、ＰＣＩデバイスｄに接続されるポートである。アップストリームポートは、ホストコンピュータ１０に接続されるポートである。
【００３４】
ＰＣＩスイッチ２０は、ダウンストリームポートとアップストリームポートとの接続関係を変更可能な回路を内蔵する。ＰＣＩスイッチ２０は、ダウンストリームポートとアップストリームポートとの接続関係を変更することにより、ダウンストリームポートに接続されたＰＣＩデバイスｄの接続先のホストコンピュータ１０を切り替える。
【００３５】
図６は、本発明の実施の形態におけるホストコンピュータのソフトウェア構成例を示す図である。
【００３６】
同図に示されるように、各ホストコンピュータ１０では、ＶＭ（Virtual Machine）マネージャ及び１以上の仮想マシン１２等のソフトウェアが動作する。各ソフトウェアは、ホストコンピュータ１０にインストールされたプログラムがＣＰＵ１０４に実行させる処理により具現化される。
【００３７】
ＶＭマネージャ１１は、仮想マシンモニタ又はハイパーバイザ等とも呼ばれるソフトウェアである。ＶＭマネージャ１１は、仮想マシン１２の定義ファイルに基づいて仮想マシン１２を起動させ、仮想マシン１２の稼働状態を管理又は監視する。仮想マシン１２の定義ファイルとは、仮想マシン１２に関する構成情報が記述されているファイルである。本実施の形態において、仮想マシン１２の移行処理は、ＶＭマネージャ１１によって行われる。
【００３８】
仮想マシン１２は、仮想的なコンピュータである。一つの仮想マシン１２は、一台の物理的なコンピュータとほぼ同様に扱われる。例えば、同図に示されるように、各仮想マシン１２上では、それぞれ独立してＯＳ（Operating System）が動作可能である。仮想マシン１２上で動作するＯＳをゲストＯＳ１２１という。各ゲストＯＳ１２１上では通常のコンピュータ上で動作するＯＳ上と同様に、各種のソフトウェアが動作可能である。同図において、各種のソフトウェアは、アプリとして示されている。アプリは、アプリケーションプログラムの略である。
【００３９】
図４において説明したように、ホストコンピュータ１０では、直接Ｉ／Ｏハードウェア１０６によって直接Ｉ／Ｏが実現される。したがって、各仮想マシン１２には、ＰＣＩデバイスｄが直接割り当てられる。よって、各仮想マシン１２には、当該仮想マシン１２が使用するＰＣＩデバイスｄに依存したデバイスドライバ１２２がインストールされうる。
【００４０】
例えば、同図において、デバイスドライバ１２２ａは、ＰＣＩデバイスｄ１に依存した（対応した）デバイスドライバである。デバイスドライバ１２２ｂは、ＰＣＩデバイスｄドライバ２に依存したデバイスドライバ１２２である。デバイスドライバ１２２ｃ、デバイスドライバ１２２ｄは、それぞれ、ＰＣＩデバイスｄ３、ＰＣＩデバイスｄ４に対応したデバイスドライバ１２２である。各デバイスドライバ１２２と、各ＰＣＩデバイスｄとを結ぶ破線は、それぞれの対応関係を示す。各仮想マシン１２は、直接Ｉ／Ｏによって、ゲストＯＳ１２１にインストールされたデバイスドライバ１２２を利用して、各ＰＣＩデバイスｄを直接駆動させることができる。
【００４１】
図７は、本発明の実施の形態におけるＶＭマネージャの機能構成を説明するための図である。同図において、ＶＭマネージャ１１は、直接Ｉ／Ｏ機能部１３、ＰＣＩコンフィグレーション管理部１４、移行元処理部１５、及び移行先処理部１６等を有する。
【００４２】
直接Ｉ／Ｏ機能部１３は、直接Ｉ／Ｏハードウェア１０６を用いて、直接Ｉ／Ｏを実現する部分である。同図において、直接Ｉ／Ｏ機能部１３は、ＰＣＩコンフィグレーション空間エミュレーション部１３１及びＩ／Ｏアドレス変換部１３２等を含む。ＰＣＩコンフィグレーション空間エミュレーション部１３１は、ＰＣＩデバイスｄが仮想マシン１２に直接接続しているように見せるためのエミュレーションを行う。Ｉ／Ｏアドレス変換部１３２は、仮想マシン１２の起動時において、ホストコンピュータ１０のホスト物理アドレスと当該仮想マシン１２のゲスト物理アドレスとのアドレス変換のために必要な情報を直接Ｉ／Ｏハードウェア１０６に対して設定する。
【００４３】
ＰＣＩコンフィグレーション管理部１４は、ホストコンピュータ１０のメモリ装置１０３内に生成されるＰＣＩコンフィグレーション空間１７を管理する。ＰＣＩコンフィグレーション管理部１４は、ＰＣＩコンフィグレーション空間エミュレーション部１３１からの要求に応じて、ＰＣＩデバイスｄの制御を行う。なお、ＰＣＩコンフィグレーション空間１７とは、ＰＣＩデバイスｄ内のＰＣＩデバイスレジスタを透過的に操作させるためのメモリ空間である。例えば、ＰＣＩコンフィグレーション空間１７の内容が書き換えられると、非図示のファームウェアによって、ＰＣＩデバイスｄ内のＰＣＩコンフィグレーションレジスタの内容が書き換えられる。
【００４４】
移行元処理部１５及び移行先処理部１６は、対となって仮想マシン１２の移行を行う。移行元処理部１５は、主に、仮想マシン１２の移行元のホストコンピュータ１０において機能する。移行先処理部１６は、主に、仮想マシン１２の移行先のホストコンピュータ１０において機能する。
【００４５】
移行元処理部１５は、通知部１５１、移行送信部１５２、及び切替制御部１５３等を含む。通知部１５１は、主として、移行対象の仮想マシン１２が、移行前に使用していたＰＣＩデバイスｄを、移行後においても継続して使用可能とするための情報を、移行先のホストコンピュータ１０に通知（転送）する。例えば、通知部１５１は、移行対象の仮想マシン１２に対する、移行元のホストコンピュータ１０におけるＭＭＩＯ領域のホスト物理アドレス情報等を移行先のホストコンピュータ１０に転送する。移行送信部１５２は、移行対象の仮想マシン１２のメモリイメージ等を移行先のホストコンピュータ１０に転送する。切替制御部１５３は、移行対象の仮想マシン１２が使用していたＰＣＩデバイスｄの接続先について、移行元のホストコンピュータ１０から移行先のホストコンピュータ１０への切り替えをＰＣＩスイッチ２０に指示する。
【００４６】
移行先処理部１６は、接続部１６１及び移行受信部１６２等を含む。接続部１６１は、移行対象の仮想マシン１２が、移行元において使用していたＰＣＩデバイスｄを、移行先において使用可能とするための処理を実行する。例えば、接続部１６１は、移行元の通知部１５１より転送されるＭＭＩＯ領域のホスト物理アドレス情報に基づいて、移行先のホストコンピュータ１０において、当該ホスト物理アドレス情報に係るＭＭＩＯ領域を確保する。移行受信部１６２は、移行元のホストコンピュータ１０の移行送信部１５２より転送されるメモリイメージ等を受信し、受信されたメモリイメージに基づいて移行先のホストコンピュータ１０において仮想マシン１２を起動させる。
【００４７】
ＰＣＩスイッチ２０は、接続管理部２１及びデバイス属性テーブル２２等を有する。接続管理部２１は、ＰＣＩデバイスｄとホストコンピュータ１０との接続を管理する。接続管理部２１は、例えば、切替制御部１５３からの指示に応じ、ＰＣＩデバイスｄの接続先のホストコンピュータ１０を切り替える。但し、厳密には、接続管理部２１が管理するのは、ダウンストリームポートと、アップストリームポートとの接続である。
【００４８】
デバイス属性テーブル２２は、主に、ダウンストリームポートに接続されているＰＣＩデバイスｄの属性情報を管理する。属性情報には、当該ＰＣＩデバイスｄが直接Ｉ／Ｏによって仮想マシン１２より使用された場合に、ＭＭＩＯ領域に関してホスト物理アドレスとゲスト物理アドレスの一致が必要であるか否かを示す項目も含まれる。ＰＣＩデバイスｄの中には、直接Ｉ／Ｏによって使用される場合に、ＭＭＩＯ領域に関して、ホスト物理アドレスとゲスト物理アドレスとが一致していないと正常に動作しないものがあるからである。
【００４９】
以下、ホストコンピュータ１０が実行する処理手順について説明する。図８は、第一の形態における仮想マシンの移行処理の処理手順の概要を説明するためのシーケンス図である。同図において、ホストコンピュータ１０ａは、仮想マシン１２の移行元である。ホストコンピュータ１０ｂは、仮想マシン１２の移行先である。
【００５０】
例えば、ユーザにより入力される、仮想マシン１２の移行指示に応じ、ホストコンピュータ１０ａの移行元処理部１５の通知部１５１は、移行の開始通知をネットワーク３０を介して移行先のホストコンピュータ１０ｂの移行先処理部１６に送信する（Ｓ１１０）。移行の開始通知では、移行対象の仮想マシン１２の概要も通知される。例えば、当該仮想マシン１２の使用メモリ量や当該仮想マシン１２の定義ファイルに記録されている情報等が通知される。移行先のホストコンピュータ１０ｂの移行先処理部１６の移行受信部１６２は、移行の開始通知の受信に応じ、当該開始通知に伴って通知された情報に基づいて、空の仮想マシン１２をメモリ空間に生成する。
【００５１】
なお、仮想マシン１２の移行指示は、ＧＵＩ（Graphical User Interface）を介して入力されてもよいし、コンソール画面においてコマンドラインが入力されることにより行われてもよい。いずれの場合であっても、移行対象の仮想マシン１２及び移行先のホストコンピュータ１０が指定される。なお、当該移行指示の入力場所は、ホストコンピュータ１０ａであってもよいし、ホストコンピュータ１０ａとネットワークを介して接続される非図示のコンピュータであってもよい。
【００５２】
続いて、通知部１５１は、移行対象の仮想マシン１２が使用しているＰＣＩデバイスｄの切断の前処理を実行する（Ｓ１２０）。当該前処理において、通知部１５１は、当該ＰＣＩデバイスｄの属性情報の取得要求をＰＣＩスイッチ２０の接続管理部２１に送信する（Ｓ１２１）。接続管理部２１は、当該ＰＣＩデバイスｄの属性情報をデバイス属性テーブル２２より取得し、通知部１５１に返信する（Ｓ１２２）。通知部１５１は、当該属性情報と、当該ＰＣＩデバイスｄのＭＭＩＯ領域のホスト物理アドレス情報とを指定して、接続前処理の実行要求をネットワーク３０を介してホストコンピュータ１０ｂの移行先処理部１６に送信する（Ｓ１２３）。移行先処理部１６の接続部１６１は、ＰＣＩデバイスｄの接続前処理を実行する（Ｓ１３０）。ＰＣＩデバイスｄの接続前処理とは、仮想マシン１２の移行先において、ＰＣＩデバイスｄを接続するための準備処理である。ＰＣＩデバイスｄの接続前処理の詳細については後述される。接続前処理が完了すると、接続部１６１は、通知部１５１に応答を返信する（Ｓ１３１）。
【００５３】
続いて、移行元処理部１５の移行送信部１５２は、移行対象である稼働中の仮想マシン１２のメモリイメージをネットワーク３０を介して移行先処理部１６に転送する（Ｓ１４１）。移行先処理部１６の移行受信部１６２は、受信されるメモリイメージを、ステップＳ１１０において生成されている空の仮想マシン１２内に書き込む（Ｓ１４２）。ステップＳ１４１及びＳ１４２は、複数回繰り返される。また、移行送信部１５２は、移行対象の仮想マシンのメモリイメージに関して、転送中に変更された部分をホストコンピュータ１０ａのメモリ装置１０３を用いて記憶しておく。移行対象の仮想マシン１２は稼働中であるため、メモリイメージの転送中において、当該メモリイメージの一部が更新される可能性があるからである。
【００５４】
転送されるべきメモリイメージの残量が所定以下になると、移行送信部１５２は、移行対象の仮想マシン１２を停止させる（Ｓ１５０）。移行送信部１５２は、停止させた仮想マシン１２に関して、直接Ｉ／Ｏに関する設定を解除する。直接Ｉ／Ｏに関する設定の解除とは、直接Ｉ／Ｏハードウェア１０６に設定されている、当該仮想マシン１２のゲスト物理アドレスと、ホストコンピュータ１０ａのホスト物理アドレスとの変換用のテーブル（以下、「アドレス変換テーブル」という。）を解放することをいう。例えば、移行送信部１５２は、Ｉ／Ｏアドレス変換部１３２に対して、停止された仮想マシン１２のＶＭＩＤを指定して直接Ｉ／Ｏの設定の解除を要求する。Ｉ／Ｏアドレス変換部１３２は、指定されたＶＭＩＤに関するアドレス変換テーブルの解放を直接Ｉ／Ｏハードウェア１０６に実行させる。
【００５５】
続いて、移行元処理部１５の切替制御部１５３は、移行対象の仮想マシン１２が使用していたＰＣＩデバイスｄに関する接続先の切替処理を実行する（Ｓ１６０）。具体的には、切替制御部１５３は、移行対象の仮想マシン１２が使用していたＰＣＩデバイスｄに関して、ネットワーク３０を介して、切断要求をＰＣＩスイッチ２０の接続管理部２１に送信する（Ｓ１６１）。当該切断要求に応じ、接続管理部２１は、当該ＰＣＩデバイスｄについて、ホストコンピュータ１０ａとの接続を切断する（Ｓ１６２）。続いて、接続管理部２１は、ＰＣＩデバイスｄが切断（アンプラグ）されたことを示す通知（切断通知）をホストコンピュータ１０ａに送信する（Ｓ１６３）。当該切断通知は、ＰＣＩデバイスｄのアップストリームポートと、ホストコンピュータ１０ａとを接続するケーブルを介して転送される。したがって、ホストコンピュータ１０ａでは、当該ケーブルが接続されているＰＣＩスロットを介して当該切断通知が受信される。当該切断通知に応じ、ホストコンピュータ１０ａでは、当該ＰＣＩデバイスｄに対するＰＣＩデバイスｄコンフィグレーション空間の解放等が行われる。
【００５６】
続いて、切替制御部１５３は、当該ＰＣＩデバイスｄに関して、ネットワーク３０を介して、ホストコンピュータ１０ｂへの接続要求をＰＣＩスイッチ２０の接続管理部２１に送信する（Ｓ１６４）。当該接続要求に応じ、接続管理部２１は、当該ＰＣＩデバイスｄをホストコンピュータ１０ｂに接続する。接続管理部２１は、当該ＰＣＩデバイスｄが接続（ホットプラグ）されたことを示す通知（接続通知）をホストコンピュータ１０ｂに送信する（Ｓ１６５）。当該接続通知は、ＰＣＩデバイスｄのアップストリームポートと、ホストコンピュータ１０ｂとを接続するケーブルを介して転送される。したがって、ホストコンピュータ１０ｂでは、当該ケーブルが接続されているＰＣＩスロットを介して当該接続通知が受信される。当該接続通知に応じ、移行先処理部１６の接続部１６１は、ＰＣＩデバイスｄの接続処理を実行する（Ｓ１６６）。続いて、接続管理部２１は、接続処理の成否を示す応答を切替制御部１５３に返信する（Ｓ１６７）。
【００５７】
続いて、移行元処理部１５の移行送信部１５２は、残りのメモリイメージや、ＣＰＵ１０４のレジスタの内容等を移行先処理部１６に転送する（Ｓ１７１）。残りのメモリイメージには、ステップＳ１４１において転送されていない部分のメモリイメージや、ステップＳ１４１において転送されたメモリイメージに関してその後に更新された部分等が含まれる。移行先処理部１６の移行受信部１６２は、受信されたデータによって、既にメモリ空間に書き込まれている仮想マシン１２のメモリイメージ等を更新する（Ｓ１７２）。
【００５８】
続いて、移行受信部１６２は、更新されたメモリイメージに基づいて、移行された仮想マシン１２に関して直接Ｉ／Ｏの設定を行い、当該仮想マシン１２をホストコンピュータ１０ｂにおいて起動させる（Ｓ１８１）。直接Ｉ／Ｏの設定とは、対象となる仮想マシン１２に対するアドレス変換用テーブルを作成し、直接Ｉ／Ｏハードウェア１０６に設定することをいう。仮想マシン１２が正常に起動されると、移行受信部１６２は、移行の完了通知を移行元処理部１５に送信する（Ｓ１８２）。
【００５９】
なお、ステップＳ１４１、Ｓ１４２、Ｓ１５０、及びＳ１７１〜Ｓ１８２等は、仮想マシン１２のライブマイグレーションに関する公知技術に従って行われてもよい。
【００６０】
続いて、ステップＳ１２０の詳細について説明する。図９は、第一の実施の形態において移行元のホストコンピュータが実行するＰＣＩデバイスの切断前処理の処理手順の一例を説明するためのフローチャートである。同図において、括弧内のステップ番号は、図８において対応するステップのステップ番号に相当する。
【００６１】
ステップＳ２０１において、通知部１５１は、移行対象の仮想マシン１２が直接Ｉ／Ｏによって使用中のＰＣＩデバイスｄ（以下、「移行デバイス」という。）の有無を確認する。より詳しくは、通知部１５１は、移行対象の仮想マシン１２の識別子（以下、「ＶＭＩＤ」という。）を指定して、当該ＶＭＩＤに係る仮想マシン１２が直接Ｉ／Ｏによって使用しているＰＣＩデバイスｄの一覧を問い合わせる。Ｉ／Ｏアドレス変換部１３２は、当該問い合わせに応じ、自らがメモリ装置１０３を用いて管理する直接Ｉ／Ｏデバイス一覧テーブルｔ１より、指定されたＶＭＩＤに対応するレコードを抽出する。
【００６２】
図１０は、直接Ｉ／Ｏデバイス一覧テーブルの構成例を示す図である。同図に示されるように、直接Ｉ／Ｏデバイス一覧テーブルｔ１は、ホストコンピュータ１０ａにおいて、直接Ｉ／Ｏによって使用されているＰＣＩデバイスｄごとに、ＢＤＦ番号、ＶＭＩＤ、ＰＣＩスロット番号、及びアップストリームポート番号等を記憶する。
【００６３】
ＢＤＦ番号は、ホストコンピュータ１０ａにおける、各ＰＣＩデバイスｄの識別情報である。「Ｂ」は、「Ｂｕｓ」を示し、「Ｄ」は、「Ｄｅｖｉｃｅ」を示し、「Ｆ」は、「Ｆｕｎｃｔｉｏｎ」を示す。同一のＰＣＩデバイスｄであっても、ＢＤＦ番号は、ホストコンピュータ１０ごとに異なりうる。
【００６４】
ＶＭＩＤは、ＢＤＦ番号に係るＰＣＩデバイスｄを直接Ｉ／Ｏによって使用している仮想マシン１２の識別子（仮想マシンＩＤ）である。ＰＣＩスロット番号は、ＶＭＩＤに係る仮想マシン１２においてＢＤＦ番号に係るＰＣＩデバイスｄが接続されている、仮想的なＰＣＩスロットの識別子である。アップストリームポート番号は、ＢＤＦ番号に係るＰＣＩデバイスｄが、ＰＣＩスイッチ２０において接続されているアップストリームポートの番号である。
【００６５】
上記したステップＳ２０１において、Ｉ／Ｏアドレス変換部１３２は、通知部１５１からの問い合わせに指定されたＶＭＩＤを含むレコードを直接Ｉ／Ｏデバイス一覧テーブルｔ１より抽出し、通知部１５１に出力する。当該レコードの一覧は、移行デバイスに係るレコードの一覧である。なお、該当するレコードが複数有る場合、ステップＳ２０２以降は、レコードごとに（すなわち、移行デバイスごとに）実行される。本実施の形態では、便宜上、移行デバイスは、一つであるとして説明する。
【００６６】
続いて、通知部１５１は、抽出されたレコードより、アップストリームポート番号を取得する（Ｓ２０２）。なお、ＢＤＦ番号とアップストリームポート番号との対応付けは、アドレス変換部によって（直接Ｉ／Ｏデバイス一覧テーブルｔ１において）管理されていなくてもよい。この場合、ステップＳ２０２では、抽出されたレコードよりＢＤＦ番号が取得されればよい。通知部１５１は、当該ＢＤＦ番号に対応するアップストリームポート番号を、別途管理されているＢＤＦ番号とアップストリームポート番号との対応表より取得すればよい。
【００６７】
続いて、通知部１５１は、取得されたアップストリームポート番号を指定して、当該アップストリームポート番号に対応するＰＣＩデバイスｄの属性情報の取得をＰＣＩスイッチ２０の接続管理部２１に要求する（Ｓ２０３）。
【００６８】
当該要求を受信した接続管理部２１は、デバイス属性テーブル２２より、指定されたアップストリームポート番号に対応するＰＣＩデバイスｄの属性情報を取得する。接続管理部２１は、取得された属性情報を通知部１５１に返信する。
【００６９】
図１１は、デバイス属性テーブルの構成例を示す図である。同図に示されるように、デバイス属性テーブル２２は、ＰＣＩスイッチ２０のダウンストリームポートごとに、ダウンストリームポート番号、アップストリームポート番号、ベンダＩＤ、デバイスＩＤ、及びアドレス一致要否フラグ等を記憶する。
【００７０】
ダウンストリームポート番号は、ダウンストリームポートの、ＰＣＩスイッチ２０におけるポート番号である。アップストリームポート番号は、ダウンストリームポート番号に係るダウンストリームポートに接続されているアップストリームポートのポート番号である。すなわち、ダウンストリームポート番号とアップストリームポート番号との組によって、ＰＣＩスイッチ２０における、ダウンストリームポートとアップストリームポートとの接続関係が示される。
【００７１】
ベンダＩＤは、ダウンストリームポート番号に係るダウンストリームポートに接続されているＰＣＩデバイスｄのベンダの識別子である。デバイスＩＤは、ダウンストリームポート番号に係るダウンストリームポートに接続されているＰＣＩデバイスｄの識別子である。
【００７２】
アドレス一致要否フラグは、ダウンストリームポート番号に接続されているＰＣＩデバイスｄについて、ＭＭＩＯ領域に関してホスト物理アドレスとゲスト物理アドレスとが一致している必要があるか否かを示す情報である。「ｆａｌｓｅ」は、一致が不要であることを示す。「ｔｒｕｅ」は、一致が必要であることを示す。
【００７３】
なお、ベンダＩＤ及びデバイスＩＤは、例えば、ＰＣＩスイッチ２０のダウンストリームポートに対してＰＣＩデバイスｄが接続された際に、接続管理部２１が当該ＰＣＩデバイスｄより取得する。アドレス一致要否フラグは、例えば、ＰＣＩスイッチ２０の管理画面を介して設定される。ＰＣＩスイッチ２０の管理画面は、例えば、ＰＣＩスイッチ２０とネットワーク３０を介して接続されるコンピュータにおいて表示される画面である。
【００７４】
また、アップストリームポート番号は、前記管理画面を介して設定されることもあれば、後述されるように、仮想マシン１２の移行処理の過程において、切替制御部１５３からの指示に応じて更新されることもある。
【００７５】
上記したステップＳ２０３において、接続管理部２１は、通知部１５１からの要求に指定されたアップストリームポート番号に対応するダウンストリームポート番号及びアドレス一致要否フラグ等を通知部１５１に返信する。
【００７６】
続いて、通知部１５１は、移行デバイスに関して取得されたアドレス一致要否フラグの値は「ｔｒｕｅ」であるか否かを判定する（Ｓ２０４）。すなわち、移行デバイスは、直接Ｉ／Ｏによって使用される場合に、ＭＭＩＯ領域に関してゲスト物理アドレスとホスト物理アドレスとの一致が必要であるか否かが判定される。
【００７７】
移行デバイスのアドレス一致要否フラグが「ｔｒｕｅ」である場合（Ｓ２０４でＹｅｓ）、通知部１５１は、移行デバイスのＭＭＩＯ領域のホスト物理アドレス情報を取得する（Ｓ２０５）。より詳しくは、通知部１５１は、移行デバイスのＢＤＦ番号を指定して、ＰＣＩコンフィグレーション空間１７の取得をＰＣＩコンフィグレーション管理部１４に要求する。ＰＣＩコンフィグレーション管理部１４は、指定されたＢＤＦ番号に対応するＰＣＩコンフィグレーション空間１７を通知部１５１に返却する。すなわち、ＰＣＩコンフィグレーション管理部１４は、ＢＤＦ番号に関連付けてＰＣＩコンフィグレーション空間１７を管理している。通知部１５１は、返却されたＰＣＩコンフィグレーション空間１７の一部として含まれているベースアドレスレジスタより、移行デバイスに対するＭＭＩＯ領域のホスト物理アドレス情報（以下、「ＭＭＩＯ領域情報」という。）を取得する。
【００７８】
図１２は、ベースアドレスレジスタの構成例を示す図である。同図に示されるように、ベースアドレスレジスタは、ベースアドレスフィールド、プリフェッチ可能フィールド、タイプフィールド、及びメモリ空間インジケータフィールド等を含む。
【００７９】
ベースアドレスフィールドには、ＭＭＩＯ領域のホスト物理アドレス空間における開始アドレスとサイズとが記録されている。したがって、ステップＳ２０５では、ベースアドレスレジスタのベースアドレスフィールドより、ＭＭＩＯ領域の開始アドレス及びサイズがＭＭＩＯ領域情報として取得される。
【００８０】
なお、プリフェッチ可能フィールド、タイプフィールド、及びメモリ空間インジケータフィールドの説明は省略する。
【００８１】
ステップＳ２０４でＮｏの場合又はステップＳ２０５に続いて、通知部１５１は、移行先のホストコンピュータ１０ｂの移行先処理部１６に、移行デバイスに関する接続前処理の実行要求を送信する（Ｓ２０７）。当該要求には、ＰＣＩスイッチ２０において移行デバイスが接続されているダウンストリームポートのダウンストリームポート番号が指定される。当該ダウンストリームポート番号は、ステップＳ２０３において取得された値である。また、移行デバイスのアドレス一致要否フラグが「ｔｒｕｅ」である場合、移行デバイスのＭＭＩＯ領域情報（ＭＭＩＯ領域の開始アドレス及びサイズ）も当該要求に指定される。
【００８２】
なお、本実施の形態では、接続前処理の実行要求にＭＭＩＯ領域情報が指定されることで、移行デバイスのＭＭＩＯ領域に関してゲスト物理アドレスとホスト物理アドレスとの一致が必要であることが移行先に通知される。但し、接続前処理の実行要求に、常に、移行デバイスのＭＭＩＯ領域情報が指定されてもよい。この場合、接続前処理の実行要求に移行デバイスに対するアドレス一致要否フラグが指定されることにより、移行デバイスのＭＭＩＯ領域に関してゲスト物理アドレスとホスト物理アドレスとの一致が必要であることが移行先に通知されてもよい。または、アドレス一致要否フラグが指定されなくてもよい。移行先において、ダウンストリームポート番号に基づいて、移行デバイスのアドレス一致要否フラグを取得することが可能だからである。すなわち、移行デバイスのＭＭＩＯ領域のゲスト物理アドレスとホスト物理アドレスとの一致の要否は、必ずしも移行元から移行先に対して明示的に通知されなくてもよい。
【００８３】
続いて、通知部１５１は、移行先処理部１６からの応答に基づいて、移行先のホストコンピュータ１０ｂにおける、接続前処理の成否を判定する（Ｓ２０８）。接続前処理が成功したことを示す応答が受信された場合（Ｓ２０８でＹｅｓ）、通知部１５１は、移行デバイスの切断前処理は成功したと判定する。接続前処理が失敗したことを示す応答が受信された場合（Ｓ２０８でＮｏ）、通知部１５１は、移行デバイスの切断前処理は失敗したと判定する。この場合、仮想マシン１２の移行処理は中止される。
【００８４】
続いて、図８のステップＳ１３０の詳細について説明する。図１３は、第一の実施の形態において移行先のホストコンピュータが実行するＰＣＩデバイスの接続前処理の処理手順の一例を説明するためのフローチャートである。同図において、括弧内のステップ番号は、図８において対応するステップのステップ番号に相当する。
【００８５】
ステップＳ２２１において、移行先のホストコンピュータ１０ｂの移行先処理部１６の接続部１６１は、移行元のホストコンピュータ１０ａの通知部１５１より送信された接続前処理の実行要求に移行デバイスのＭＭＩＯ領域情報が含まれているか否かを判定する。すなわち、これから接続予定である移行デバイスのＭＭＩＯ領域に関して、ゲスト物理アドレスとホスト物理アドレスとの一致の要否が判定される。
【００８６】
続いて、接続部１６１は、ホストコンピュータ１０ｂに接続されている全てのＰＣＩデバイスｄのＭＭＩＯ領域情報を取得する（Ｓ２２２）。より詳しくは、接続部１６１は、当該全てのＰＣＩデバイスｄのそれぞれのＢＤＦ番号に対するＰＣＩコンフィグレーション空間１７をＰＣＩコンフィグレーション管理部１４に要求する。ＰＣＩコンフィグレーション管理部１４は、指定されたＢＤＦ番号に対するＰＣＩコンフィグレーション空間１７を接続部１６１に返却する。接続部１６１は、返却されたＰＣＩコンフィグレーション空間１７に含まれているベースアドレスレジスタより、ホストコンピュータ１０ｂに接続されている各ＰＣＩデバイスｄのＭＭＩＯ領域情報を取得する。なお、この段階において、移行デバイスは、未だ移行先のホストコンピュータ１０ｂに接続されていない。したがって、当該全てのＰＣＩデバイスｄには、移行デバイスは含まれない。
【００８７】
続いて、接続部１６１は、移行デバイスのＭＭＩＯ領域と、ホストコンピュータ１０ｂにおいて既に接続されているＰＣＩデバイスｄのＭＭＩＯ領域との重複の有無を判定する（Ｓ２２３）。当該判定は、接続前処理の実行要求に含まれていた移行デバイスのＭＭＩＯ領域情報と、ステップＳ２２３において取得されたＭＭＩＯ領域情報とを用いて行われる。なお、本実施の形態において、「ＭＭＩＯ領域の重複」とは、ＭＭＩＯ領域の少なくとも一部が重複していることをいう。すなわち、比較対象のＭＭＩＯ領域において重複している部分が有ることをいう。
【００８８】
比較されたＭＭＩＯ領域の間に重複が検出されなかった場合（Ｓ２２４でＮｏ）、接続部１６１は、接続予約テーブルｔ２より、ホストコンピュータ１０ｂに対して接続が予約されている全てのＰＣＩデバイスｄのＭＭＩＯ領域情報を取得する（Ｓ２２５）。ホストコンピュータ１０ｂに対して接続が予約されているＰＣＩデバイスｄとは、現時点において接続されていないが、本実施の形態において注目されている移行デバイスのように、仮想マシン１２の移行に伴って接続されることが予定されているＰＣＩデバイスｄをいう。
【００８９】
図１４は、接続予約テーブルの構成例を示す図である。同図に示されるように、接続予約テーブルｔ２は、接続が予約されているＰＣＩデバイスｄごとに、ダウンストリームポート番号、開始アドレス、及びサイズ等を記憶する。ダウンストリームポート番号は、ＰＣＩスイッチ２０において、当該ＰＣＩデバイスｄが接続されているダウンストリームポートのポート番号である。開始アドレスは、当該ＰＣＩデバイスｄの、移行先のホストコンピュータ１０においけるＭＭＩＯ領域の開始アドレス（ホスト物理アドレス）である。サイズは、当該ＭＭＩＯ領域のサイズである。なお、接続予約テーブルｔ２は、例えば、ホストコンピュータ１０ｂのメモリ装置１０３内に生成される。また、本実施の形態において、接続予約テーブルｔ２は、予約情報記憶部の一例である。
【００９０】
上記したステップＳ２２５では、接続予約テーブルｔ２に記録されている全てのレコードの開始アドレス及びサイズが、ＭＭＩＯ領域情報として取得される。
【００９１】
続いて、接続部１６１は、移行デバイスのＭＭＩＯ領域と、ホストコンピュータ１０ｂに接続が予約されているＭＭＩＯ領域との間の重複の有無を判定する（Ｓ２２６）。当該判定は、接続前処理の実行要求に含まれていた移行デバイスのＭＭＩＯ領域情報と、ステップＳ２２５において取得されたＭＭＩＯ領域情報とを用いて行われる。
【００９２】
すなわち、一つのホストコンピュータ１０に対して一つのホストコンピュータ１０上又は複数のホストコンピュータ１０上の複数の仮想マシン１２について移行が並列的に行われる可能性もある。したがって、移行デバイスについて、現時点において当該ホストコンピュータ１０に接続されているＰＣＩデバイスｄとの間でＭＭＩＯ領域の重複が検出されない場合であっても、並行して移行されている他の移行デバイスとの間でＭＭＩＯ領域の重複が発生する場合がある。ステップＳ２２６は、斯かる重複の発生を回避するための判定である。
【００９３】
移行デバイスと予約されているＰＣＩデバイスｄとの間にＭＭＩＯ領域の重複が検出されない場合（Ｓ２２６でＮｏ）、又はステップＳ２２１でＮｏの場合、接続部１６１は、移行デバイスの情報を接続予約テーブルｔ２に追加する（Ｓ２２７）。具体的には、移行デバイスに関するダウンストリームポート番号を含むレコードが接続予約テーブルｔ２に追加される。また、接続前処理の実行要求に移行デバイスのＭＭＩＯ領域情報が含まれている場合は、移行デバイスの開始アドレス及びサイズが当該レコードに記録される。その結果、移行デバイスの接続が、移行先のホストコンピュータ１０ｂにおいて予約される。
【００９４】
続いて、接続部１６１は、移行デバイスの接続前処理は成功したことを示す応答を移行元のホストコンピュータ１０ａの通知部１５１に返信する（Ｓ２２８）。
【００９５】
一方、Ｓ２２４でＹｅｓ又はＳ２２６でＹｅｓの場合、接続部１６１は、移行デバイスの接続前処理は失敗したことを示す応答を移行元のホストコンピュータ１０ａの通知部１５１に返信する（Ｓ２２９）。Ｓ２２４でＹｅｓ又はＳ２２６でＹｅｓの場合とは、移行デバイスのＭＭＩＯ領域と、ホストコンピュータ１０ｂに既に接続されている又は接続が予約されているＰＣＩデバイスｄのＭＭＩＯ領域との間に重複が検出された場合である。
【００９６】
続いて、図９のステップＳ１６０の詳細について説明する。図１５は、第一の実施の形態において移行元のホストコンピュータが実行するＰＣＩデバイスの接続先の切替処理の処理手順の一例を説明するためのフローチャートである。同図において、括弧内のステップ番号は、図８において対応するステップのステップ番号に相当する。
【００９７】
ステップＳ２４１において、切替制御部１５３は、移行デバイスのダウンストリームポート番号を指定して、移行デバイスの切断要求をＰＣＩスイッチ２０の接続管理部２１に送信する。当該ダウンストリームポート番号は、図９のステップＳ２０３において取得されているものが使用されればよい。当該切断要求に応じて、ＰＣＩスイッチ２０では、指定されたダウンストリームポート番号に係るダウンストリームポートと、当該ダウンストリームポートに接続されていたアップストリームポートとの接続が切断（解除）される。当該アップストリームポートに接続されているのは移行元のホストコンピュータ１０ａである。したがって、移行デバイスとホストコンピュータ１０ａとの接続が切断される。その結果、デバイス属性テーブル２２において、当該ダウンストリームポート番号に対するアップストリームポート番号が消去される。
【００９８】
続いて、切替制御部１５３は、接続管理部２１からの応答に基づいて、切断の成否を判定する（Ｓ２４２）。切断に成功した場合（Ｓ２４２でＹｅｓ）、切替制御部１５３は、移行デバイスについて、移行先のホストコンピュータ１０ｂへの接続要求をＰＣＩスイッチ２０の接続管理部２１に送信する（Ｓ２４３）。当該接続要求には、移行デバイスのダウンストリームポート番号と、ホストコンピュータ１０ｂが接続しているＰＣＩスイッチ２０のアップストリームポートのポート番号とが指定される。当該アップストリームポート番号は、ホストコンピュータ１０ａにおいて既知であるとする。例えば、当該アップストリームポート番号は、管理者等によってホストコンピュータ１０ａに予め設定されている。
【００９９】
当該該接続要求に応じ、ＰＣＩスイッチ２０では、指定されたダウンストリームポート番号に係るダウンストリームポートと指定されたアップストリームポート番号に係るアップストリームポートとが接続される。当該アップストリームポートに接続されているのは移行先のホストコンピュータ１０ｂである。したがって、移行デバイスとホストコンピュータ１０ｂとが接続される。その結果、デバイス属性テーブル２２において、当該ダウンストリームポート番号に対して当該アップストリームポート番号が記録される。
【０１００】
続いて、切替制御部１５３は、接続管理部２１からの応答に基づいて、接続の成否を判定する（Ｓ２４４）。接続に失敗した場合（Ｓ２４４でＮｏ）、移行処理は中止される。
【０１０１】
続いて、図８のステップＳ１６６の詳細について説明する。図１６は、第一の実施の形態において移行先のホストコンピュータが実行するＰＣＩデバイスの接続処理の処理手順の一例を説明するためのフローチャートである。
【０１０２】
ＰＣＩデバイスｄの接続通知に応じ、移行先処理部１６の接続部１６１は、ＰＣＩスイッチ２０の接続管理部２１に対して、当該接続通知に係るＰＣＩデバイスｄのダウンストリームポート番号を取得する（Ｓ２５１）。続いて、接続部１６１は、取得されたダウンストリームポート番号が、接続予約テーブルｔ２（図１４）に登録されているか否かを判定する（Ｓ２５２）。すなわち、接続通知に係るＰＣＩデバイスｄが、移行デバイスであるか否かが判定される。ＰＣＩスイッチ２０からのＰＣＩデバイスｄの接続通知は、必ずしも仮想マシン１２の移行が実行される場合にのみ通知されるとは限らないからである。また、複数のＰＣＩデバイスｄが移行対象とされている場合、いずれの予約に係るＰＣＩデバイスｄの接続通知であるかが区別される必要があるからである。
【０１０３】
当該ダウンストリームポート番号が、接続予約テーブルｔ２に登録されている場合（Ｓ２５２でＹｅｓ）、接続部１６１は、当該ダウンストリームポート番号をキーとしてＭＭＩＯ領域情報を接続予約テーブルｔ２より取得する（Ｓ２５３）。すなわち、接続予約テーブルｔ２において、当該ダウンストリームポート番号に対して関連付けられている開始アドレス及びサイズが取得される（Ｓ２５３）。
【０１０４】
続いて、接続部１６１は、接続通知に係る移行デバイスに対するＰＣＩコンフィグレーション空間１７のベースアドレスレジスタに対して、ステップＳ２５３で取得されたＭＭＩＯ領域情報を書き込む（Ｓ２５４）。接続通知に係る移行デバイスに対するＰＣＩコンフィグレーション空間１７は、当該移行デバイスのＢＤＦ番号に基づいて、ＰＣＩコンフィグレーション管理部１４より取得される。当該ＢＤＦ番号は、ホストコンピュータ１０ｂにおいて接続通知が受信されたＰＣＩスロット等に基づいて特定される。
【０１０５】
なお、接続通知に係る移行デバイスに対するＰＣＩコンフィグレーション空間１７は、接続通知に応じて、ホストコンピュータ１０ｂのＢＩＯＳ（Basic Input/Output System）等のファームウェア等によって生成される。当該ＰＣＩコンフィグレーション空間１７が生成された際のベースアドレスレジスタの値は、例えば、ホストコンピュータ１０ｂに接続されている他のＰＣＩデバイスｄのＭＭＩＯ領域との重複が回避されるように自動的に設定される。ステップＳ２５４では、自動的に設定されていた値が、ステップＳ２５３で取得されたＭＭＩＯ領域情報（開始アドレス及びサイズ）によって更新される。すなわち、移行デバイスに対して、移行先のホストコンピュータ１０ｂにおいて、移行元と同じホスト物理アドレスのＭＭＩＯ領域が割り当てられる。このことは、移行デバイスのＭＭＩＯ領域に関して、移行対象の仮想マシン１２のゲスト物理アドレスとホストコンピュータ１０ｂにおけるホスト物理アドレスとが一致することを意味する。移行デバイスに対するＭＭＩＯ領域のゲスト物理アドレスは、移行前の値が維持されたまま当該仮想マシン１２の移行が行われるからである。
【０１０６】
なお、ＰＣＩコンフィグレーション空間１７のベースアドレスレジスタの内容の書き換えに応じ、ホストコンピュータ１０ｂのバスブリッジによって、当該ＰＣＩコンフィグレーション空間１７に係るＰＣＩデバイスｄのＭＭＩＯ領域の実際の移動が行われる。
【０１０７】
続いて、接続部１６１は、ステップＳ２５１において取得されたダウンストリームポート番号に係るレコードを接続予約テーブルｔ２より削除する（Ｓ２５５）。予約されていたＭＭＩＯ領域は、実際に割り当てられたからである。なお、当該ダウンストリームポート番号に係るレコードは、移行デバイスに係るレコードである。
【０１０８】
一方、ステップＳ２５１において取得されたダウンストリームポート番号が、接続予約テーブルｔ２に登録されていない場合（Ｓ２５２でＮｏ）、ステップＳ２５３以降の処理は実行されない。接続通知に係るＰＣＩデバイスｄは、仮想マシン１２の移行に伴って接続先が切り替えられたものではないからである。
【０１０９】
上述したように、第一の実施の形態によれば、仮想マシン１２の移行元のホストコンピュータ１０ａより移行先のホストコンピュータ１０ｂに、当該仮想マシン１２が使用しているＰＣＩデバイスｄのＭＭＩＯ領域のホスト物理アドレス情報が通知される。ホストコンピュータ１０ｂは、通知されたホスト物理アドレス情報を、当該ＰＣＩデバイスｄに対して割り当てる。したがって、当該ＰＣＩデバイスｄのＭＭＩＯ領域について、移行先においてもゲスト物理アドレスとホスト物理アドレスとを一致させることができる。その結果、移行対象の仮想マシン１２は、ホストコンピュータ１０ａにおいて直接Ｉ／Ｏによって使用していたＰＣＩデバイスｄについて、移行先においても使用を継続することができる。
【０１１０】
なお、ＰＣＩデバイスｄごとのアドレス一致要否フラグは、必ずしもスイッチ２０において記憶されていなくてもよい、他のコンピュータにおいて記憶されていてもよい。例えば、各ホストコンピュータ１０において記憶されていてもよいし、いずれか一台のホストコンピュータ１０において記憶されていてもよい。または、各ホストコンピュータ１０を管理する管理サーバにおいて記憶されていてもよい。いずれの場合であっても、ＰＣＩデバイスｄごとにアドレス一致要否フラグを記憶しているコンピュータが、本実施の形態において、機器情報記憶部の一例となる。
【０１１１】
次に、第二の実施の形態について説明する。第二の実施の形態では、第一の実施の形態と異なる点について説明する。したがって、特に言及されない点については、第一の実施の形態と同様でよい。第二の実施の形態では、移行先のホストコンピュータ１０ｂが実行するＰＣＩデバイスｄの接続前処理の一部が、第一の実施の形態と異なる。
【０１１２】
図１７は、第二の実施の形態において移行先のホストコンピュータが実行するＰＣＩデバイスの接続前処理の処理手順の一例を説明するためのフローチャートである。図１７中、図１３と同一部分には同一符号を付し、その説明は省略する。図１７では、ステップＳ２３０及びＳ２３１が追加されている。移行デバイスのＭＭＩＯ領域と、ホストコンピュータ１０ｂに既に接続されているＭＭＩＯ領域との間に重複が検出された場合に（Ｓ２２４でＹｅｓ）、ステップＳ２３０が実行される。
【０１１３】
ステップＳ２３０において、接続部１６１は、ホストコンピュータ１０ｂに既に接続されているＭＭＩＯ領域に関して、解放処理を実行する。すなわち、当該ＭＭＩＯ領域を、移行デバイスのための空き領域とするための処理が実行される。当該ＭＭＩＯ領域の解放に成功した場合（Ｓ２３１でＹｅｓ）、ステップＳ２２５以降が実行される。当該ＭＭＩＯ領域の解放に失敗した場合（Ｓ２３１でＮｏ）、ステップＳ２２９が実行される。
【０１１４】
続いて、ステップＳ２３０の詳細について説明する。図１８は、第二の実施の形態における重複するＭＭＩＯ領域の解放処理の処理手順の一例を説明するためのフローチャートである。
【０１１５】
ステップＳ３１０において、接続部１６１は、ホストコンピュータ１０ｂに既に接続されているＰＣＩデバイスｄのうち、そのＭＭＩＯ領域が移行デバイスのＭＭＩＯ領域と重複するＰＣＩデバイスｄを特定する。当該ＰＣＩデバイスｄの特定は、ホストコンピュータ１０ｂに既に接続されている各ＰＣＩデバイスｄのＭＭＩＯ領域情報と、移行デバイスのＭＭＩＯ領域情報とを比較又は照合することにより行えばよい。
【０１１６】
続いて、接続部１６１は、ステップＳ３１０において特定された各ＰＣＩデバイスｄの中で、ホストコンピュータ１０ｂ上の仮想マシン１２より直接Ｉ／Ｏによって使用されているものが有るか否かを確認する（Ｓ３３０）。当該確認は、当該各ＰＣＩデバイスｄのＢＤＦ番号が、ホストコンピュータ１０ｂの直接Ｉ／Ｏデバイス一覧テーブルｔ１に登録されているか否かに基づいて行われる。直接Ｉ／Ｏデバイス一覧テーブルｔ１にＢＤＦ番号が登録されているＰＣＩデバイスｄは、仮想マシン１２より直接Ｉ／Ｏによって使用されているＰＣＩデバイスｄである。
【０１１７】
仮想マシン１２から直接Ｉ／Ｏによって使用されているＰＣＩデバイスｄが有る場合（Ｓ３５０でＹｅｓ）、接続部１６１は、重複するＭＭＩＯ領域の解放処理は失敗と判定する。直接Ｉ／Ｏによって使用されているＰＣＩデバイスｄのＭＭＩＯ領域のホスト物理アドレスを移動させる場合、ゲスト物理アドレスも移動させる必要がある。直接Ｉ／Ｏによって使用されているＰＣＩデバイスｄは、そのＭＭＩＯ領域のホスト物理アドレスとゲスト物理アドレスとが一致していなければ、正常に動作しない可能性が有るからである。しかし、仮想マシン１２が認識しているゲスト物理アドレスを移動させるのは困難である。したがって、接続部１６１は、解放処理は失敗と判定する。
【０１１８】
一方、仮想マシン１２から直接Ｉ／Ｏによって使用されているＰＣＩデバイスｄが無い場合（Ｓ３５０でＮｏ）、接続部１６１は、重複するＭＭＩＯ領域を移動可能な空きメモリ領域の有無を判定する。すなわち、移行デバイスのＭＭＩＯ領域と重複する全てのＭＭＩＯ領域に関して、相互に重複せずに、かつ、移行デバイスのＭＭＩＯ領域及び接続予約テーブルｔ２に登録されているＭＭＩＯ領域と重複しないメモリ領域の有無が判定される。
【０１１９】
斯かる空きメモリ領域が有る場合（Ｓ３６５でＹｅｓ）、接続部１６１は、移行デバイスのＭＭＩＯ領域と重複するＭＭＩＯ領域について、変更先のホスト物理アドレスを決定する（Ｓ３７０）。変更先のホスト物理アドレスは、各ＭＭＩＯ領域に関して相互に重複が無く、かつ、移行デバイスのＭＭＩＯ領域及び接続予約テーブルｔ２に登録されているＭＭＩＯ領域と重複しない値が選択されるように決定されればよい。
【０１２０】
続いて、接続部１６１は、移行デバイスのＭＭＩＯ領域と重複するＭＭＩＯ領域のホスト物理アドレスを、ステップＳ３７０において決定された値に変更する（Ｓ３９０）。具体的には、接続部１６１は、各ＭＭＩＯ領域に係るＰＣＩデバイスｄのＰＣＩコンフィグレーション空間１７をＰＣＩコンフィグレーション管理部１４より取得する。接続部１６１は、取得されたＰＣＩコンフィグレーション空間１７のベースアドレスレジスタの値を、ステップＳ３７０において決定された値に変更する。その結果、移行デバイスのＭＭＩＯ領域と重複していたＭＭＩＯ領域は、移行デバイスのＭＭＩＯ領域と重複しないメモリ領域に移動される。
【０１２１】
上述したように、第二の実施の形態によれば、移行先において、移行デバイスのＭＭＩＯ領域と重複するＭＭＩＯ領域が使用されている場合であっても、所定の場合において、重複するＭＭＩＯ領域を解放することができる。その結果、移行デバイスのＭＭＩＯ領域に関して、移行後において、ホスト物理アドレスとゲスト物理アドレスとを一致させることができる可能性を高めることができる。したがって、直接Ｉ／ＯによってＰＣＩデバイスｄを使用している仮想マシン１２の移行処理の成功の可能性を高めることができる。
【０１２２】
次に、第三の実施の形態について説明する。第三の実施の形態では、第二の実施の形態と異なる点について説明する。したがって、特に言及されない点については、第二の実施の形態と同様でよい。第三の実施の形態では、重複するＭＭＩＯ領域の解放処理の一部が、第二の実施の形態と異なる。
【０１２３】
図１９は、第三の実施の形態における重複するＭＭＩＯ領域の解放処理の処理手順の一例を説明するためのフローチャートである。図１９中、図１８と同一ステップには同一ステップ番号を付し、その説明は適宜省略する。
【０１２４】
図１９では、ステップＳ３７０の後にステップＳ３８０が実行される。ステップＳ３８０において、接続部１６１は、移行デバイスとＭＭＩＯ領域が重複するＰＣＩデバイスｄを直接Ｉ／Ｏによって使用している仮想マシン１２を一時的に停止させる。接続部１６１は、一時停止中に、当該仮想マシン１２の直接Ｉ／Ｏに関する設定を解除する。例えば、接続部１６１は、Ｉ／Ｏアドレス変換部１３２に対して、当該仮想マシン１２のＶＭＩＤを指定して直接Ｉ／Ｏの設定の解除を要求する。Ｉ／Ｏアドレス変換部１３２は、指定されたＶＭＩＤに関するアドレス変換テーブルの解放を直接Ｉ／Ｏハードウェア１０６に実行させる。なお、当該仮想マシン１２のＶＭＩＤは、移行デバイスとＭＭＩＯ領域が重複するＰＣＩデバイスｄのＢＤＦ番号に対して、直接Ｉ／Ｏデバイス一覧テーブルｔ１において関連付けられているＶＭＩＤである。
【０１２５】
続いて、接続部１６１は、移行デバイスのＭＭＩＯ領域と重複するＭＭＩＯ領域のホスト物理アドレスを、ステップＳ３７０において決定された値に変更する（Ｓ３９０）。すなわち、各ＭＭＩＯ領域に係るＰＣＩデバイスｄのＰＣＩコンフィグレーション空間１７のベースアドレスレジスタの値が、ステップＳ３７０において決定された値に変更される。なお、仮想マシン１２が一時停止された場合であっても、当該仮想マシン１２が使用していたＰＣＩデバイスｄのＰＣＩコンフィグレーション空間１７は解放されずに残っている。ＰＣＩコンフィグレーション空間１７は、ホストコンピュータ１０に対するＰＣＩデバイスｄの接続に応じて生成されるものであり、そのライフサイクルは、基本的に仮想マシン１２のライフサイクルには依存しないからである。したがって、ステップＳ３９０では、ステップＳ３８０において一時停止された仮想マシン１２が使用していたＰＣＩデバイスｄのＭＭＩＯ領域のホスト物理アドレスも変更される。
【０１２６】
続いて、接続部１６１は、ステップＳ３８０において一時停止させた仮想マシン１２がある場合、当該仮想マシン１２に関して直接Ｉ／Ｏの設定を行い、当該仮想マシン１２を再開させる（Ｓ３９５）。
【０１２７】
上述したように、第三の実施の形態によれば、移行デバイスとＭＭＩＯ領域が重複するＰＣＩデバイスｄの中に、直接Ｉ／Ｏによって仮想マシン１２より使用されているＰＣＩデバイスｄが有る場合であっても、重複するＭＭＩＯ領域を解放することができる。その結果、移行デバイスのＭＭＩＯ領域に関して、移行後において、ホスト物理アドレスとゲスト物理アドレスとを一致させることができる可能性を高めることができる。したがって、直接Ｉ／ＯによってＰＣＩデバイスｄを使用している仮想マシン１２の移行処理の実行の可能性を高めることができる。
【０１２８】
但し、第三の実施の形態では、直接Ｉ／Ｏによって仮想マシン１２より使用されているＰＣＩデバイスｄは、そのＭＭＩＯ領域に関してゲスト物理アドレスとホスト物理アドレスとの一致が必要とされないものであるという前提が必要とされる。そこで、斯かる前提を解消可能とした例として、第四の実施の形態を説明する。第四の実施の形態では、第三の実施の形態と異なる点について説明する。したがって、特に言及されない点については、第三の実施の形態と同様でよい。第四の実施の形態では、重複するＭＭＩＯ領域の解放処理の一部が、第三の実施の形態と異なる。
【０１２９】
図２０は、第四の実施の形態における重複するＭＭＩＯ領域の解放処理の処理手順の一例を説明するためのフローチャートである。図２０中、図１９と同一ステップには同一ステップ番号を付し、その説明は適宜省略する。
【０１３０】
図２０では、ステップＳ３５０の後に、ステップＳ３５１〜Ｓ３５５が実行される。
【０１３１】
ステップＳ３５１において、接続部１６１は、移行デバイスとＭＭＩＯ領域が重複するＰＣＩデバイスｄであって、直接Ｉ／Ｏによって移行先の仮想マシン１２より使用されているＰＣＩデバイスｄのアップストリームポート番号を取得する。当該アップストリームポート番号は、該当するＰＣＩデバイスｄのＢＤＦ番号をキーとして、直接Ｉ／Ｏデバイス一覧テーブルｔ１より取得されればよい。
【０１３２】
続いて、接続部１６１は、取得されたアップストリームポート番号を指定して、当該アップストリームポート番号に対応するＰＣＩデバイスｄのダウンストリームポート番号及びアドレス一致要否フラグの取得をＰＣＩスイッチ２０の接続管理部２１に要求する（Ｓ２０３）。当該要求を受信した接続管理部２１は、デバイス属性テーブル２２より、指定されたアップストリームポート番号に対応するＰＣＩデバイスｄのダウンストリームポート番号及びアドレス一致要否フラグを取得する。接続管理部２１は、取得されたダウンストリームポート番号及びアドレス一致要否フラグを接続部１６１に返信する。
【０１３３】
続いて、接続部１６１は、取得されたアドレス一致要否フラグに基づいて、移行デバイスとＭＭＩＯ領域が重複する各ＰＣＩデバイスｄのＭＭＩＯ領域について、ゲスト物理アドレスとホスト物理アドレスとの一致の要否を判定する（Ｓ３５３）。
【０１３４】
ゲスト物理アドレスとホスト物理アドレスとの一致が必要であるＰＣＩデバイスｄが有る場合（Ｓ３５３でＹｅｓ）、接続部１６１は、当該ＰＣＩデバイスｄを使用している仮想マシン１２について、他のホストコンピュータ１０への移行処理を起動させる（Ｓ３５４）。ステップＳ３５４では、例えば、該当する仮想マシン１２について、図８において説明した処理が実行される。したがって、当該仮想マシン１２が直接Ｉ／Ｏによって使用しているＰＣＩデバイスｄのＭＭＩＯ領域は、当該仮想マシン１２の移行に伴って解放される。また、移行先において、当該ＰＣＩデバイスｄのＭＭＩＯ領域のゲスト物理アドレスとホスト物理アドレスとは、一致されるように設定が行われうる。
【０１３５】
なお、該当する仮想マシン１２は、当該ＰＣＩデバイスｄのＢＤＦ番号に対して、直接Ｉ／Ｏデバイス一覧テーブルｔ１において対応付けられているＶＭＩＤに係る仮想マシン１２である。また、移行先のホストコンピュータ１０は、予め設定されていてもよいし、負荷状況等に基づいて自動的に決定されてもよい。
【０１３６】
ステップＳ３５４における移行処理が終了すると、接続部１６１は、当該移行処理の成否を判定する（Ｓ３５５）。当該移行処理が成功した場合（Ｓ３５５でＹｅｓ）、接続部１６１は、重複するＭＭＩＯ領域の解放処理は成功であると判定する。当該移行処理が失敗した場合（Ｓ３５５でＮｏ）、接続部１６１は、重複するＭＭＩＯ領域の解放処理は失敗であると判定する。
【０１３７】
なお、ゲスト物理アドレスとホスト物理アドレスとの一致が不要であるＰＣＩデバイスｄであって、かつ、ステップＳ３５４において移行の対象とされる仮想マシン１２からは使用されていないＰＣＩデバイスｄについては（Ｓ３５３でＮｏ）、ステップＳ３６５以降が実行される。
【０１３８】
上述したように、第四の実施の形態によれば、移行デバイスとＭＭＩＯ領域が重複するＰＣＩデバイスｄを使用する仮想マシン１２は、他のホストコンピュータ１０に移行される。したがって、当該重複するＭＭＩＯ領域を、移行デバイスに対して使用可能なように解放することができる。
【０１３９】
また、ゲスト物理アドレスとホスト物理アドレスとの一致の要否は、アドレス一致要否フラグに基づいて、ＰＣＩデバイスｄごとに判定される。したがって、ＭＭＩＯ領域の解放のために他のホストコンピュータ１０に移行される仮想マシン１２を、必要なものに限定することができる。
【０１４０】
次に、第五の実施の形態について説明する。第五の実施の形態では、第四の実施の形態と異なる点について説明する。したがって、特に言及されない点については、第四の実施の形態と同様でよい。第五の実施の形態では、重複するＭＭＩＯ領域の解放処理の一部が、第四の実施の形態と異なる。
【０１４１】
図２１は、第五の実施の形態における重複するＭＭＩＯ領域の解放処理の処理手順の一例を説明するためのフローチャートである。図２１中、図２０と同一ステップには同一ステップ番号を付し、その説明は適宜省略する。
【０１４２】
図２１では、図２０のステップＳ３５４及びＳ３５５の代わりに、ステップＳ３５６及びＳ３５７が実行される。
【０１４３】
ゲスト物理アドレスとホスト物理アドレスとの一致が必要であるＰＣＩデバイスｄが有る場合（Ｓ３５３でＹｅｓ）、接続部１６１は、当該ＰＣＩデバイスｄを使用している仮想マシン１２を終了（シャットダウン）させる（Ｓ３５６）。すなわち、該当する仮想マシン１２に関して稼動状態が停止される。
【０１４４】
続いて、接続部１６１は、終了させた仮想マシン１２が使用していたＰＣＩデバイスｄのＭＭＩＯ領域のホスト物理アドレスを、移行デバイスのＭＭＩＯ領域と重複しない値に変更する（Ｓ３５７）。より詳しくは、接続部１６１は、終了させた仮想マシン１２のＶＭＩＤに対応付けられているＢＤＦ番号を直接Ｉ／Ｏデバイス一覧テーブルｔ１より取得する。接続部１６１は、取得されたＢＤＦ番号を指定して、ＰＣＩコンフィグレーション管理部１４よりＰＣＩコンフィグレーション空間１７を取得する。接続部１６１は、取得されたＰＣＩコンフィグレーション空間１７のベースアドレスレジスタの値を、移行デバイスのＭＭＩＯ領域と重複しない値に変更する。
【０１４５】
なお、ゲスト物理アドレスとホスト物理アドレスとの一致が不要であるＰＣＩデバイスｄであって、かつ、ステップＳ３５６において終了の対象とされる仮想マシン１２からは使用されていないＰＣＩデバイスｄについては（Ｓ３５３でＮｏ）、ステップＳ３６５以降が実行される。
【０１４６】
上述したように、第五の実施の形態によれば、移行デバイスとＭＭＩＯ領域が重複するＰＣＩデバイスｄを使用している仮想マシンは、終了される。したがって、当該重複するＭＭＩＯ領域を、移行デバイスに対して使用可能なように解放することができる。
【０１４７】
また、ゲスト物理アドレスとホスト物理アドレスとの一致の要否は、アドレス一致要否フラグに基づいて、ＰＣＩデバイスｄごとに判定される。したがって、ＭＭＩＯ領域の解放のために終了される仮想マシン１２を、必要なものに限定することができる。
【０１４８】
次に、第六の実施の形態について説明する。第六の実施の形態では、第五の実施の形態と異なる点について説明する。したがって、特に言及されない点については、第五の実施の形態と同様でよい。
【０１４９】
第六の実施の形態では、図８のステップＳ１２０において実行される、切断前処理の処理手順の一部が、第五の実施の形態と異なる。
【０１５０】
図２２は、第六の実施の形態において移行元のホストコンピュータが実行するＰＣＩデバイスの切断前処理の処理手順の一例を説明するためのフローチャートである。図２２中、図９と同一ステップには、同一ステップ番号を付し、その説明は適宜省略する。
【０１５１】
図２２では、ステップＳ２０５の後にステップＳ２０６が追加されている。また、ステップＳ２０７がステップＳ２０７ａに置き換えられている。
【０１５２】
ステップＳ２０６において、通知部１５１は、移行元のホストコンピュータ１０ａにおける仮想マシン稼働優先度テーブルｔ３より、移行対象の仮想マシン１２の稼働優先度を取得する。
【０１５３】
図２３は、仮想マシン稼働優先度テーブルの構成例を示す図である。同図（１）に示されるように、仮想マシン稼働優先度テーブルｔ３には、ＶＭＩＤ及び稼動優先度が記録されている。ＶＭＩＤは、仮想マシン１２の識別子である。稼動優先度は、移行デバイスのＭＭＩＯ領域と重複するＭＭＩＯ領域に係るＰＣＩデバイスｄを移行先において使用している仮想マシン１２の扱いを示す指標である。稼動優先度は、また、移行デバイスのＭＭＩＯ領域と重複するＭＭＩＯ領域が検出された場合の、仮想マシン１２間の優劣関係を示す指標である。
【０１５４】
本実施の形態において、稼動優先度は、０〜―５の値を取り得る。各値の意味は、同図（２）に示されている。すなわち、「０」は、終了及び移行の双方が不可能である（許可されない）ことを示す。「−１」〜「−４」は、移行は可能であるが、終了（シャットダウン）は不可能であることを示す。「−５」は、移行及び終了の双方共に可能であることを示す。
【０１５５】
なお、仮想マシン稼動優先度テーブルｔ３は、例えば、各ホストコンピュータ１０のメモリ装置１０３に生成される。各ホストコンピュータ１０の稼動優先度テーブルｔ３には、当該ホストコンピュータ１０において稼働中の仮想マシン１２の稼動優先度が記録される。但し、仮想マシン稼働優先度テーブルｔ３は、一つのテーブルとして独立していなくてもよい。例えば、各仮想マシン１２の定義ファイル内に当該仮想マシン１２の稼動優先度が記録されていてもよい。
【０１５６】
なお、本実施の形態において、仮想マシン稼働優先度テーブル１２は、優先度記憶部の一例である。
【０１５７】
続いて、通知部１５１は、移行先のホストコンピュータ１０ｂの移行先処理部１６に、移行デバイスに関する接続前処理の実行要求を送信する（Ｓ２０７ａ）。第六の実施の形態では、当該要求に、移行デバイスに係るダウンストリームポート番号及びＭＭＩＯ領域情報に加えて、移行対象の仮想マシン１２の稼働優先度が指定される。したがって、第六の実施の形態では、移行デバイスに関する接続前処理の実行要求において、移行対象の仮想マシン１２の稼働優先度が、移行先のホストコンピュータ１０ｂに通知される。
【０１５８】
第六の実施の形態では、また、重複するＭＭＩＯ領域の解放処理の一部が、第五の実施の形態と異なる。
【０１５９】
図２４は、第六の実施の形態における重複するＭＭＩＯ領域の解放処理の処理手順の一例を説明するためのフローチャートである。図２４中、図２１と同一ステップには同一ステップ番号を付し、その説明は適宜省略する。
【０１６０】
図２４では、図２１のステップＳ３５６及びＳ３５７の代わりに、ステップＳ３５８〜Ｓ３６０が実行される。
【０１６１】
ゲスト物理アドレスとホスト物理アドレスとの一致が必要であるＰＣＩデバイスｄが有る場合（Ｓ３５３でＹｅｓ）、接続部１６１は、当該ＰＣＩデバイスｄを使用している仮想マシン１２の稼動優先度を、ホストコンピュータ１０ｂにおける仮想マシン稼働優先度テーブルｔ３より取得する（Ｓ３５８）。なお、該当する仮想マシン１２は、当該ＰＣＩデバイスｄのＢＤＦ番号に対して、直接Ｉ／Ｏデバイス一覧テーブルｔ１において対応付けられているＶＭＩＤに係る仮想マシン１２である。
【０１６２】
続いて、接続部１６１は、稼動優先度に応じたＭＭＩＯ領域の解放処理を実行する（Ｓ３５９）。当該解放処理によってＭＭＩＯ領域の重複が解消された場合（Ｓ３６０でＹｅｓ）、接続部１６１は、重複するＭＭＩＯ領域の解放処理は成功したと判定する。当該解放処理によってＭＭＩＯ領域の重複が解消されなかった場合（Ｓ３６０でＮｏ）、接続部１６１は、重複するＭＭＩＯ領域の解放処理は失敗したと判定する。
【０１６３】
なお、ゲスト物理アドレスとホスト物理アドレスとの一致が不要であるＰＣＩデバイスｄであって、かつ、ステップＳ３５８の対象とされる仮想マシン１２からは使用されていないＰＣＩデバイスｄについては（Ｓ３５３でＮｏ）、ステップＳ３６５以降が実行される。
【０１６４】
続いて、ステップＳ３５９の詳細について説明する。図２５は、稼動優先度に応じたＭＭＩＯ領域の解放処理の処理手順の一例を説明するためのフローチャートである。なお、同図では、ステップＳ３５８において稼動優先度が取得された、移行先のホストコンピュータ１０ｂで稼働中の仮想マシン１２を、「競合仮想マシン１２」という。
【０１６５】
ステップＳ４０１において、接続部１６１は、移行対象の仮想マシン１２の稼動優先度と、競合仮想マシン１２の稼動優先度とを比較する。競合仮想マシン１２が複数有る場合、それぞれの稼動優先度について、移行対象の仮想マシン１２の稼動優先度との比較が行われる。なお、移行対象の仮想マシン１２の稼動優先度は、移行先のホストコンピュータ１０ｂにおいて、接続前処理の実行要求に伴って受信されたものである。但し、移行対象の仮想マシン１２の稼動優先度は、ステップＳ４０１のタイミング等で、移行先のホストコンピュータ１０ａより取得されてもよい。
【０１６６】
移行対象の仮想マシン１２の稼動優先度以上の稼動優先度を有する競合仮想マシン１２が一つでも存在する場合（Ｓ４０２でＮｏ）、接続部１６１は、ＭＭＩＯ領域の重複の解消はできないと判定する。
【０１６７】
一方、全ての競合仮想マシン１２の稼動優先度が、移行対象の仮想マシン１２の稼動優先度未満である場合（Ｓ４０２でＹｅｓ）、接続部１６１は、各競合仮想マシン１２について、他のホストコンピュータ１０への移行処理を起動させる（Ｓ４０３）。ステップＳ４０３では、例えば、各競合仮想マシン１２について、図８において説明した処理が実行される。したがって、競合仮想マシン１２が直接Ｉ／Ｏによって使用しているＰＣＩデバイスｄのＭＭＩＯ領域は、当該競合仮想マシン１２の移行に伴って解放される。
【０１６８】
ステップＳ４０３における移行処理が終了すると、接続部１６１は、当該移行処理の成否を判定する（Ｓ４０４）。全ての競合仮想マシン１２について当該移行処理が成功した場合（Ｓ４０４でＹｅｓ）、接続部１６１は、ＭＭＩＯ領域の重複は解消されたと判定する。
【０１６９】
少なくとも一つの競合仮想マシン１２について当該移行処理が失敗した場合（Ｓ４０４でＮｏ）、接続部１６１は、移行処理に失敗した各競合仮想マシン１２の稼動優先度は「−５」であるか否かを判定する（Ｓ４０５）。すなわち、当該各競合仮想マシン１２の終了（シャットダウン）の可否が判定される。
【０１７０】
少なくとも一つの競合仮想マシン１２について、稼動優先度が−４以上である場合（Ｓ４０５でＮｏ）、接続部１６１は、ＭＭＩＯ領域の重複の解消はできないと判定する。当該競合仮想マシン１２は、終了させることができず、移行デバイスのＭＭＩＯ領域と重複するＭＭＩＯ領域を解放することができないからである。
【０１７１】
一方、全ての競合仮想マシン１２の稼動優先度が「−５」である場合（Ｓ４０５でＹｅｓ）、接続部１６１は、当該競合マシンを終了させる（Ｓ４０６）。続いて、接続部１６１は、終了させた競合仮想マシン１２が使用していたＰＣＩデバイスｄのＭＭＩＯ領域のホスト物理アドレスを、移行デバイスのＭＭＩＯ領域と重複しない値に変更する（Ｓ４０７）。より詳しくは、接続部１６１は、終了させた競合仮想マシン１２のＶＭＩＤに対応付けられているＢＤＦ番号を直接Ｉ／Ｏデバイス一覧テーブルｔ１より取得する。接続部１６１は、取得されたＢＤＦ番号を指定して、ＰＣＩコンフィグレーション管理部１４よりＰＣＩコンフィグレーション空間１７を取得する。接続部１６１は、取得されたＰＣＩコンフィグレーション空間１７のベースアドレスレジスタの値を、移行デバイスのＭＭＩＯ領域と重複しない値に変更する。
【０１７２】
上述したように、第六の実施の形態によれば、移行デバイスのＭＭＩＯ領域と重複するＭＭＩＯ領域に係るＰＣＩデバイスｄを使用する仮想マシン１２の扱いを、移行対象の仮想マシン１２との優先度の比較等に基づいて変化させることができる。したがって、該当する仮想マシン１２が強制的に移行される場合や、強制的に終了される場合に比べて、各仮想マシン１２の重要度に応じた制御を行うことが可能となる。
【０１７３】
ところで、移行デバイスとのＭＭＩＯ領域との重複を回避するために、移行が行われるうる全てのホストコンピュータ１０間において、予め、各ＭＭＩＯ領域が重複しないようにＰＣＩコンフィグレーション空間を設定しておくことも考えられる。
【０１７４】
しかしながら、グラフィックスカード等のように、ＭＭＩＯ領域を大量（例えば２５６ＭＢ〜１ＧＢ）に使用するＰＣＩデバイスｄも有る。したがって、各ホストコンピュータ１０のそれぞれに斯かるＰＣＩデバイスｄが接続されている場合、各ＰＣＩデバイスｄのＭＭＩＯ領域が重複しないようにすると、いずれかのＰＣＩデバイスｄに関して割当可能な領域な無くなってしまう可能性がある。
【０１７５】
一方、本実施の形態によれば、ＭＭＩＯ領域の重複は、動的に解消される。したがって、上記のような不都合の発生を回避することもできる。
【０１７６】
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【０１７７】
以上の説明に関し、更に以下の項を開示する。
（付記１）
仮想マシンの移行元のコンピュータと移行先のコンピュータとを含む仮想マシン移行システムであって、
前記移行元のコンピュータは、
前記仮想マシンが直接Ｉ／Ｏによって使用している機器に対するＭＭＩＯ領域のホスト物理アドレス情報を前記移行先のコンピュータに通知する通知部と、
前記機器を当該コンピュータに接続させている切替器に当該機器の接続先を前記移行先のコンピュータに切り替えさせる切替制御部とを有し、
前記移行先のコンピュータは、
前記切替器によって当該コンピュータに接続された機器に対して、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係るＭＭＩＯ領域を割り当てる接続部を有する仮想マシン移行システム。
（付記２）
機器ごとにＭＭＩＯ領域に関してゲスト物理アドレスとホスト物理アドレスとの一致の要否を示す情報を記憶する機器情報記憶部を有し、
前記接続部は、前記切替器によって当該コンピュータに接続された機器に関して前記機器情報記憶部に記憶されている情報が、前記ホスト物理アドレスと前記ゲスト物理アドレスとの一致が必要であることを示す場合に、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係るＭＭＩＯ領域を当該機器に対して割り当てる付記１記載の仮想マシン移行システム。
（付記３）
前記接続部は、移行対象とされている複数の仮想マシンのうちの第一の仮想マシンに関して前記移行元のコンピュータより通知されたホスト物理アドレス情報を予約情報記憶部に記録し、第二の仮想マシンに関して前記移行元のコンピュータ又は他の移行元のコンピュータより通知されたホスト物理アドレス情報に係る領域が、前記予約情報記憶部に記録されているホスト物理アドレス情報に係る領域と重複する部分を有する場合は、前記第二の仮想マシンに関する前記ホスト物理アドレス情報を前記予約情報記憶部に記録せず、前記予約情報記憶部に記録されているホスト物理アドレス情報に係るＭＭＩＯ領域を割り当てる付記１又は２記載の仮想マシン移行システム。
（付記４）
前記接続部は、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係る領域と重複する部分を有するＭＭＩＯ領域が前記移行先のコンピュータにおいて使用されている場合は、当該ＭＭＩＯ領域を当該ホスト物理アドレス情報に係る領域と重複しない領域に移動させる付記１乃至３いずれか一項記載の仮想マシン移行システム。
（付記５）
前記接続部は、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係る領域と重複する部分を有するＭＭＩＯ領域が前記移行先のコンピュータにおいて使用されている場合は、前記移行先のコンピュータにおいて当該ＭＭＩＯ領域に係る機器を使用している仮想マシンを他のコンピュータに移行させる付記１乃至３いずれか一項記載の仮想マシン移行システム。
（付記６）
前記接続部は、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係る領域と重複する部分を有するＭＭＩＯ領域が前記移行先のコンピュータにおいて使用されている場合は、前記移行先のコンピュータにおいて当該ＭＭＩＯ領域に係る機器を使用している仮想マシンを終了させる付記１乃至３いずれか一項記載の仮想マシン移行システム。
（付記７）
仮想マシンごとに優先度を記憶する優先度記憶部を有し、
前記接続部は、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係る領域と重複する部分を有するＭＭＩＯ領域が前記移行先のコンピュータにおいて使用されている場合は、前記移行先のコンピュータにおいて当該ＭＭＩＯ領域に係る機器を使用している第二の仮想マシンの前記優先度が、移行対象の仮想マシンの前記優先度より低いときは前記第二の仮想マシンを移行又は終了させる付記１乃至３いずれか一項記載の仮想マシン移行システム。
（付記８）
仮想マシンの移行をコンピュータに実行させる仮想マシン移行プログラムであって、
前記コンピュータが移行元の場合に、
前記仮想マシンが直接Ｉ／Ｏによって使用している機器に対するＭＭＩＯ領域のホスト物理アドレス情報を移行先のコンピュータに通知し、
前記機器を当該コンピュータに接続させている切替器に当該機器の接続先を前記移行先のコンピュータに切り替えさせる処理を当該コンピュータに実行させ、
前記コンピュータが移行先の場合に、
前記切替器によって当該コンピュータに接続された機器に対して、移行元のコンピュータより通知されたホスト物理アドレス情報に係るＭＭＩＯ領域を割り当てる処理を当該コンピュータに実行させる仮想マシン移行プログラム。
（付記９）
前記ＭＭＩＯ領域を割り当てる処理は、機器ごとにＭＭＩＯ領域に関してゲスト物理アドレスとホスト物理アドレスとの一致の要否を示す情報を記憶する機器情報記憶部において前記切替器によって当該コンピュータに接続された機器に関して記憶されている情報が、前記ホスト物理アドレスと前記ゲスト物理アドレスとの一致が必要であることを示す場合に、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係るＭＭＩＯ領域を当該機器に対して割り当てる付記８記載の仮想マシン移行プログラム。
（付記１０）
前記ＭＭＩＯ領域を割り当てる処理は、移行対象とされている複数の仮想マシンのうちの第一の仮想マシンに関して前記移行元のコンピュータより通知されたホスト物理アドレス情報を予約情報記憶部に記録し、第二の仮想マシンに関して前記移行元のコンピュータ又は他の移行元のコンピュータより通知されたホスト物理アドレス情報に係る領域が、前記予約情報記憶部に記録されているホスト物理アドレス情報に係る領域と重複する部分を有する場合は、前記第二の仮想マシンに関する前記ホスト物理アドレス情報を前記予約情報記憶部に記録せず、前記予約情報記憶部に記録されているホスト物理アドレス情報に係るＭＭＩＯ領域を割り当てる付記８又は９記載の仮想マシン移行プログラム。
（付記１１）
前記ＭＭＩＯ領域を割り当てる処理は、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係る領域と重複する部分を有するＭＭＩＯ領域が当該コンピュータにおいて使用されている場合は、当該ＭＭＩＯ領域を当該ホスト物理アドレス情報に係る領域と重複しない領域に移動させる付記８乃至１０いずれか一項記載の仮想マシン移行プログラム。
（付記１２）
前記ＭＭＩＯ領域を割り当てる処理は、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係る領域と重複する部分を有するＭＭＩＯ領域が当該コンピュータにおいて使用されている場合は、当該コンピュータにおいて当該ＭＭＩＯ領域に係る機器を使用している仮想マシンを他のコンピュータに移行させる付記８乃至１０いずれか一項記載の仮想マシン移行プログラム。
（付記１３）
前記ＭＭＩＯ領域を割り当てる処理は、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係る領域と重複する部分を有するＭＭＩＯ領域が当該コンピュータにおいて使用されている場合は、当該コンピュータにおいて当該ＭＭＩＯ領域に係る機器を使用している仮想マシンを終了させる付記８乃至１０いずれか一項記載の仮想マシン移行プログラム。
（付記１４）
前記ＭＭＩＯ領域を割り当てる処理は、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係る領域と重複する部分を有するＭＭＩＯ領域が当該コンピュータにおいて使用されている場合は、当該コンピュータにおいて当該ＭＭＩＯ領域に係る機器を使用している第二の仮想マシンに関して優先度記憶部に記憶されている優先度が、移行対象の仮想マシンに関して前記優先度記憶部に記憶されている優先度より低いときは前記第二の仮想マシンを移行又は終了させる付記８乃至１０いずれか一項記載の仮想マシン移行プログラム。
（付記１５）
仮想マシンの移行元のコンピュータと移行先のコンピュータとを含む仮想マシン移行システムが実行する仮想マシン移行方法であって、
前記移行元のコンピュータが、
前記仮想マシンが直接Ｉ／Ｏによって使用している機器に対するＭＭＩＯ領域のホスト物理アドレス情報を前記移行先のコンピュータに通知し、
前記機器を当該コンピュータに接続させている切替器に当該機器の接続先を前記移行先のコンピュータに切り替えさせる処理を実行し、
前記移行先のコンピュータが、
前記切替器によって当該コンピュータに接続された機器に対して、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係るＭＭＩＯ領域を割り当てる処理を実行する仮想マシン移行方法。
（付記１６）
前記ＭＭＩＯ領域を割り当てる処理は、機器ごとにＭＭＩＯ領域に関してゲスト物理アドレスとホスト物理アドレスとの一致の要否を示す情報を記憶する機器情報記憶部において前記切替器によって当該コンピュータに接続された機器に関して記憶されている情報が、前記ホスト物理アドレスと前記ゲスト物理アドレスとの一致が必要であることを示す場合に、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係るＭＭＩＯ領域を当該機器に対して割り当てる付記１４記載の仮想マシン移行方法。
（付記１７）
前記ＭＭＩＯ領域を割り当てる処理は、移行対象とされている複数の仮想マシンのうちの第一の仮想マシンに関して前記移行元のコンピュータより通知されたホスト物理アドレス情報を予約情報記憶部に記録し、第二の仮想マシンに関して前記移行元のコンピュータ又は他の移行元のコンピュータより通知されたホスト物理アドレス情報に係る領域が、前記予約情報記憶部に記録されているホスト物理アドレス情報に係る領域と重複する部分を有する場合は、前記第二の仮想マシンに関する前記ホスト物理アドレス情報を前記予約情報記憶部に記録せず、前記予約情報記憶部に記録されているホスト物理アドレス情報に係るＭＭＩＯ領域を割り当てる付記１５又は１６記載の仮想マシン移行方法。
（付記１８）
前記ＭＭＩＯ領域を割り当てる処理は、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係る領域と重複する部分を有するＭＭＩＯ領域が前記移行先のコンピュータにおいて使用されている場合は、当該ＭＭＩＯ領域を当該ホスト物理アドレス情報に係る領域と重複しない領域に移動させる付記１５乃至１７いずれか一項記載の仮想マシン移行方法。
（付記１９）
前記ＭＭＩＯ領域を割り当てる処理は、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係る領域と重複する部分を有するＭＭＩＯ領域が前記移行先のコンピュータにおいて使用されている場合は、前記移行先のコンピュータにおいて当該ＭＭＩＯ領域に係る機器を使用している仮想マシンを他のコンピュータに移行させる付記１５乃至１７いずれか一項記載の仮想マシン移行方法。
（付記２０）
前記ＭＭＩＯ領域を割り当てる処理は、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係る領域と重複する部分を有するＭＭＩＯ領域が前記移行先のコンピュータにおいて使用されている場合は、前記移行先のコンピュータにおいて当該ＭＭＩＯ領域に係る機器を使用している仮想マシンを終了させる付記１５乃至１７いずれか一項記載の仮想マシン移行方法。
（付記２１）
前記ＭＭＩＯ領域を割り当てる処理は、前記移行元のコンピュータより通知されたホスト物理アドレス情報に係る領域と重複する部分を有するＭＭＩＯ領域が当該コンピュータにおいて使用されている場合は、当該コンピュータにおいて当該ＭＭＩＯ領域に係る機器を使用している第二の仮想マシンに関して優先度記憶部に記憶されている優先度が、移行対象の仮想マシンに関して前記優先度記憶部に記憶されている優先度より低いときは前記第二の仮想マシンを移行又は終了させる付記１５乃至１７いずれか一項記載の仮想マシン移行方法。
【符号の説明】
【０１７８】
１０ａ、１０ｂ  ホストコンピュータ
１１          ＶＭマネージャ
１２          仮想マシン
１３          直接Ｉ／Ｏ機能部
１４          ＰＣＩコンフィグレーション管理部
１５          移行元処理部
１６          移行先処理部
２０          ＰＣＩスイッチ
２１          接続管理部
２２          デバイス属性テーブル
３０          ネットワーク
１００        ドライブ装置
１０１        記録媒体
１０２        補助記憶装置
１０３        メモリ装置
１０４        ＣＰＵ
１０５        インタフェース装置
１０６        直接Ｉ／Ｏハードウェア
１２１        ゲストＯＳ
１２２        デバイスドライバ
１３１        ＰＣＩコンフィグレーション空間エミュレーション部
１３２        Ｉ／Ｏアドレス変換部
１５１        通知部
１５２        移行送信部
１５３        切替制御部
１６１        接続部
１６２        移行受信部
Ｂ            バス
ｄ            ＰＣＩデバイス
【図１】
0005541117.tif 000002
【図２】
0005541117.tif 000003
【図３】
0005541117.tif 000004
【図４】
0005541117.tif 000005
【図５】
0005541117.tif 000006
【図６】
0005541117.tif 000007
【図７】
0005541117.tif 000008
【図８】
0005541117.tif 000009
【図９】
0005541117.tif 000010
【図１０】
0005541117.tif 000011
【図１１】
0005541117.tif 000012
【図１２】
0005541117.tif 000013
【図１３】
0005541117.tif 000014
【図１４】
0005541117.tif 000015
【図１５】
0005541117.tif 000016
【図１６】
0005541117.tif 000017
【図１７】
0005541117.tif 000018
【図１８】
0005541117.tif 000019
【図１９】
0005541117.tif 000020
【図２０】
0005541117.tif 000021
【図２１】
0005541117.tif 000022
【図２２】
0005541117.tif 000023
【図２３】
0005541117.tif 000024
【図２４】
0005541117.tif 000025
【図２５】
0005541117.tif 000026