(57)【要約】【課題】ＰＦの異常発生時に，異常発生前の構成情報を引き継いた状態で物理デバイスの切り替えを行うことができる。【解決手段】物理マシンに設けられた第１及び第２の物理デバイスのリソースをそれぞれ割り当てることにより仮想マシンに作成された第１及び第２の仮想デバイスを，それぞれ制御する第１及び第２の制御部と，第２の制御部からアクセス可能であり，第１の制御部が第１の仮想デバイスを制御するための第１の構成情報と同期した第２の構成情報を記憶する記憶部と，第１の物理デバイスの状態が所定の状態になった場合であって第２の制御部が記憶部から第２の構成情報を取得した後に，第１の制御部から第２の制御部への切り替えを行う第１の切り替え部と，を有する。【選択図】図７
2015201008.tif 000002
【特許請求の範囲】
【請求項１】
物理マシンに設けられた第１及び第２の物理デバイスのリソースをそれぞれ割り当てることにより仮想マシンに作成された第１及び第２の仮想デバイスを，それぞれ制御する第１及び第２の制御部と，
前記第２の制御部からアクセス可能であり，前記第１の制御部が前記第１の仮想デバイスを制御するための第１の構成情報と同期した第２の構成情報を記憶する記憶部と，
前記第１の物理デバイスの状態が所定の状態になった場合，前記第２の制御部が前記記憶部から前記第２の構成情報を取得した後に，前記第１の制御部から前記第２の制御部への切り替えを行う第１の切り替え部と，を有する
情報処置装置。
【請求項２】
請求項１において，
前記第１の制御部は，前記第１の物理デバイスの状態を監視しており，
前記第１の切り替え部は，前記第１の物理デバイスが前記所定の状態になったことを前記第１の制御部が検知したときに，前記第１の制御部から前記第２の制御部への切り替えを行う情報処理装置。
【請求項３】
請求項２において，
前記所定の状態は，通常状態とは異なる状態である情報処理装置。
【請求項４】
請求項１において，さらに，
前記第１の仮想デバイスの制御を行う第３の制御部を有し，
前記第１の切り替え部は，前記第１の制御部から前記第２の制御部への切り替えを行う前に，前記第１の仮想デバイスの停止を前記第３の制御部に指示する情報処理装置。
【請求項５】
請求項４において，さらに，
前記第２の仮想デバイスの制御を行う第４の制御部を有し，
前記第１の切り替え部は，前記第１の制御部から前記第２の制御部への切り替えを行った後に，前記第２の仮想デバイスの起動を前記第４の制御部に指示する情報処理装置。
【請求項６】
請求項４または５において，さらに，
前記第１の切り替え部から前記第３の制御部または前記第４の制御部への指示を中継する中継部を有する情報処理装置。
【請求項７】
請求項１において，
前記記憶部は，前記第２の物理デバイスに設けられている情報処理装置。
【請求項８】
請求項１において，
前記物理デバイスは，ＰＣＩ−ＳＩＧ規格に基づくＳｉｎｇｌｅ Ｒｏｏｔ Ｉ／Ｏ Ｖｉｒｔｕａｌｉｚａｔｉｏｎデバイスである情報処理装置。
【請求項９】
物理マシンに設けられた第１及び第２の物理デバイスのリソースをそれぞれ割り当てることにより仮想マシンに作成した第１及び第２の仮想デバイスを制御する第１及び第２の制御部の切り替えを行う情報処理プログラムであって，
前記第１の制御部が前記第１の仮想デバイスを制御するための第１の構成情報と同期した第２の構成情報を，前記第２の制御部からアクセス可能である記憶部に記憶し，
前記第１の物理デバイスの状態が所定の状態になった場合，前記第２の制御部が前記記憶部から前記第２の構成情報を取得した後に，前記第１の制御部から前記第２の制御部への切り替えを行う，
処理をコンピュータに実行させる情報処理プログラム。
【請求項１０】
物理マシンに設けられた第１及び第２の物理デバイスのリソースをそれぞれ割り当てることにより仮想マシンに作成した第１及び第２の仮想デバイスを，それぞれ制御する第１及び第２の制御部を有する情報処理装置における情報処理方法であって，
前記第１の制御部が前記第１の仮想デバイスを制御するための第１の構成情報と同期した第２の構成情報を，前記第２の制御部からアクセス可能である記憶部に記憶する記憶工程と，
前記第１の物理デバイスの状態が所定の状態になった場合，前記第２の制御部が前記記憶部から前記第２の構成情報を取得した後に，前記第１の制御部から前記第２の制御部への切り替えを行う切り替え工程と，を有する
情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，情報処理装置，情報処理プログラム及び情報処理方法に関する。
【背景技術】
【０００２】
近年，物理マシン（以下，ＶＭホストとも呼ぶ）の性能向上に伴い，複数の仮想マシン（以下，ＶＭとも呼ぶ）を１つの物理マシンに集約する仮想化技術の研究が進められている。この仮想化技術は，例えば，仮想化ソフトウエア（以下，ハイパーバイザとも呼ぶ）が物理マシンを複数の仮想マシンに割り当てて，各仮想マシンにインストールされたアプリケーションプログラム（以下，アプリケーションとも呼ぶ）によるサービスの提供を可能にする。
【０００３】
仮想マシンによるサービスを提供する事業者が仮想マシンを作成する際に，Ｉ／Ｏ仮想化が行われる場合がある。このＩ／Ｏ仮想化は，例えば，物理マシンが有する物理的なデバイスを複数の仮想マシンで共有することにより，仮想マシンが使用するＩ／Ｏを仮想化する技術である。
【０００４】
Ｉ／Ｏ仮想化の技術として，ＰＣＩ Ｓｐｅｃｉａｌ Ｉｎｔｅｒｅｓｔ Ｇｒｏｕｐ（以下，ＰＣＩ−ＳＩＧと称する）で策定されているＳｉｎｇｌｅ Ｒｏｏｔ Ｉ／Ｏ Ｖｉｒｔｕａｌｉｚａｔｉｏｎ（以下，ＳＲ−ＩＯＶと称する）がある。このＳＲ−ＩＯＶでは，物理的なＩ／Ｏデバイス（以下，物理デバイスとも呼ぶ）と同様のファンクションであるＰｈｙｓｉｃａｌ Ｆｕｎｃｔｉｏｎ（以下，ＰＦと称する）に加え，仮想的なファンクションであるＶｉｒｔｕａｌ Ｆｕｎｃｔｉｏｎ（以下，ＶＦと称する）を物理デバイスに実装する。これによって，ＶＦを各仮想マシンに割り当て，各仮想マシンの仮想的なＩ／Ｏデバイス（以下，仮想デバイスとも呼ぶ）として機能させることができる。そのため，一つの物理デバイスを，複数の仮想デバイスとして仮想マシンを含むシステムに認識させることができる。ＳＲ−ＩＯＶを使用することができる物理デバイスとしては，例えば，Ｐｅｒｉｐｈｅｒａｌ Ｃｏｍｐｏｎｅｎｔ Ｉｎｔｅｒｃｏｎｎｅｃｔ Ｅｘｐｒｅｓｓデバイス（以下，ＰＣＩｅデバイスと称する）が該当する（例えば，特許文献１，２参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−１５２７８６号公報
【特許文献２】特開２０１０−１０８２１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
物理的なデバイスにおいてＳＲ−ＩＯＶを使用した場合，例えば，管理用のソフトウエア（以下，管理ソフトウエアとも呼ぶ）をいずれかの仮想マシンにインストールして，ＰＦ及びＶＦを管理することが必要になる。この管理ソフトウエアは，ＶＦのＭＡＣアドレス等からなる構成情報を有し，この構成情報をＶＦに送信することにより，ＰＦ及びＶＦの管理を行うものである。
【０００７】
ここで，管理ソフトウエアがＶＦと構成情報の送受信を行う場合，一般的にＶＦの制御を行うＰＦを経由して構成情報の送受信が行われる。そのため，ＰＦまたはＰＦを実装した物理デバイスに異常が発生した場合，管理ソフトウエアとＶＦ間における構成情報のやり取りができなくなり，ＶＦにも異常が発生する場合がある。
【０００８】
これに対し，ＰＦ及びＶＦの構成を冗長化することにより，運用系のＰＦ及びＶＦに異常が発生した場合に，待機系のＰＦ及びＶＦに切り替えて運用を継続する方法が考えられる。しかしながら，ＶＦの構成情報が記憶されている場所は実装方法によって異なる。そのため，切り替え先（待機系）のＶＦは，異常が発生したＰＦが制御していたＶＦの構成情報を取得できない場合があった。
【０００９】
そこで，一つの実施の形態の目的は，物理デバイスの異常発生時に，異常発生前の構成情報を引き継いた状態で物理デバイスの切り替えを行うことができる情報処理装置，情報処理プログラム及び情報処理方法を提供することにある。
【課題を解決するための手段】
【００１０】
実施の形態の一つの側面によれば，物理マシンに設けられた第１及び第２の物理デバイスのリソースをそれぞれ割り当てることにより仮想マシンに作成された第１及び第２の仮想デバイスを，それぞれ制御する第１及び第２の制御部と，
前記第２の制御部からアクセス可能であり，前記第１の制御部が前記第１の仮想デバイスを制御するための第１の構成情報と同期した第２の構成情報を記憶する記憶部と，
前記第１の物理デバイスの状態が所定の状態になった場合，前記第２の制御部が前記記憶部から前記第２の構成情報を取得した後に，前記第１の制御部から前記第２の制御部への切り替えを行う第１の切り替え部と，を有する。
【発明の効果】
【００１１】
一つの側面によれば，ＰＦの異常発生時に，異常発生前の構成情報を引き継いた状態で物理デバイスの切り替えを行うことができる。
【図面の簡単な説明】
【００１２】
【図１】情報処理システムの全体構成を示す図である。
【図２】ＶＭホストのハードウエア構成を示す図である。
【図３】図２で示したI／Ｏユニットのハードウエア構成の詳細を示す図である。
【図４】図２で示したＶＭホストの機能ブロック図である。
【図５】ＳＲ−ＩＯＶを使用したＶＭホストを説明する図である。
【図６】ＳＲ−ＩＯＶを使用したＶＭホストを説明する図である。
【図７】第１の実施の形態における仮想Ｉ／Ｏ切り替え処理の概略を説明するシーケンスチャート図である。
【図８】第１の実施の形態における仮想Ｉ／Ｏ切り替え処理の概略を説明する図である。
【図９】第１の実施の形態における仮想Ｉ／Ｏ切り替え処理の詳細を説明するフローチャート図である。
【図１０】第１の実施の形態における仮想Ｉ／Ｏ切り替え処理の詳細を説明するフローチャート図である。
【図１１】第１の実施の形態における仮想Ｉ／Ｏ切り替え処理の詳細を説明するフローチャート図である。
【図１２】第１の実施の形態における仮想Ｉ／Ｏ切り替え処理の詳細を説明する図である。
【図１３】第１の実施の形態における送受信中継部を説明する図である。
【図１４】第１の実施の形態における管理テーブルを説明する図である。
【図１５】第２の実施の形態における仮想Ｉ／Ｏ切り替え処理を説明するフローチャート図である。
【図１６】第２の実施の形態における仮想Ｉ／Ｏ切り替え処理を説明する図である。
【発明を実施するための形態】
【００１３】
［情報処理システムの構成］
図１は，情報処理システムの全体構成を示す図である。図１に示す情報処理システム１０において，管理サーバ１と，ＶＭホスト２（以下、情報処理装置２とも呼ぶ）とがデータセンタ６内に設けられている。そして，データセンタ６には，インターネットやイントラネット等のネットワークを介して，利用者端末７が接続可能になっている。
【００１４】
ＶＭホスト２は，図１の例においては複数の物理マシンから構成されており，各物理マシンはＣＰＵとメモリ（ＤＲＡＭ）とハードディスク（ＨＤＤ）等の大容量メモリとネットワークとを有する。ＶＭホスト２のリソースは，複数の仮想マシン３に割り当てられる。
【００１５】
管理サーバ１は，仮想マシン３と通信可能であり，ＶＭホスト２内に作成された仮想マシン３の管理を行うものである。管理サーバ１は，例えば，仮想マシン３によって作成されてもよい。
【００１６】
仮想マシン３は，例えば，そのインフラをネットワーク経由で利用者に提供するもの（以下，クラウドサービスとも呼ぶ）である。
【００１７】
クラウドサービスは，コンピュータシステムを構築し稼働させるための基盤，即ち，仮想マシン３やネットワーク等のインフラストラクチャそのものを，ネットワーク経由で提供するサービスである。また，利用者は，例えば，利用者端末７からポータルサイト５にアクセスして，仮想マシンに必要な仕様，例えばＣＰＵのクロック周波数，メモリの容量（ＧＢ），ハードディスクの容量（ＭＢ／ｓｅｃ，ＩＯＰＳ），及びネットワークの通信帯域幅（Ｇｂｐｓ）を選択し，それらについてクラウド利用契約を締結する。また，利用者端末７は，例えば，仮想マシン３の稼働状態を監視や，仮想マシン３に対する操作等を可能にする。
【００１８】
仮想化ソフトウエア４は，管理サーバ１からの指示に応じて，ＶＭホスト２のＣＰＵ，メモリ，ハードディスク，ネットワークを割り当てることにより，仮想マシン３を動作させる基盤ソフトウエアである。仮想化ソフトウエア４は，例えば，ＶＭホスト２で動作する。
【００１９】
仮想マシン３は，ＶＭホスト２のリソースが割り当てられることに加えて，例えば，ＯＳ，ミドルウエア，アプリケーション，データベース等を有するイメージファイルをそのハードディスク内に有する。そして，仮想マシン３は，例えば，起動時にイメージファイルをハードディスクからメモリに書き込み，所望のサービスに対応する動作を行う。
【００２０】
図２は，ＶＭホストのハードウエア構成を示す図である。ＶＭホスト２は，プロセッサであるＣＰＵ（プロセッサ）２０１と，メモリ２０２と，記憶媒体２０３と，外部インターフェース（Ｉ／Ｏユニット）２０４，２０５と，を有する。各部は，バス２０６を介して互いに接続される。記憶媒体２０３は，例えば，記憶媒体２０３内のプログラム格納領域（図示しない）に，仮想化されたＩ／Ｏを切り替える処理（以下，仮想Ｉ／Ｏ切り替え処理とも呼ぶ）を行うためのプログラム２１０を記憶する。ＣＰＵ２０１は，図２に示すように，プログラム２１０の実行時に，プログラム２１０を記憶媒体２０３からメモリ２０２にロードし，プログラム２１０を実行して仮想Ｉ／Ｏの切り替え処理を行う。また，記憶媒体２０３及びＩ／Ｏユニット２０５は，例えば，仮想Ｉ／Ｏの切り替え処理を行う際に用いられる情報を記憶する情報格納領域２２０，２３０をそれぞれ有する。
【００２１】
なお，図２の例において，ＶＭホスト２のＩ／Ｏユニットは，Ｉ／Ｏユニット２０４（以下，第１の物理デバイス２０４とも呼ぶ）とＩ／Ｏユニット２０５（以下，第２の物理デバイス２０５とも呼ぶ）とによって冗長に構成されている。ＶＭホスト２は，例えば，通常時においては，Ｉ／Ｏユニット２０４を用いて外部（例えば，管理サーバ１）と通信を行う。そして，Ｉ／Ｏユニット２０４に異常が発生した場合に，Ｉ／Ｏユニット２０５を使用して外部と通信を行う。そのため，この場合，ＶＭホスト２は，Ｉ／Ｏユニット２０４からＩ／Ｏユニット２０５への切り替えを行う。これにより，ＶＭホスト２は，Ｉ／Ｏユニットに異常が生じた場合においても，仮想マシン３等を停止することなく，外部との通信を継続することが可能になる。 
【００２２】
図３は，図２で示したI／Ｏユニットのハードウエア構成の詳細を示す図である。Ｉ／Ｏユニット２０５は，図３の例においては，ＤＭＡコントローラ２０５１と，ＤＭＡ用メモリ２０５２と，制御用チップ２０５３と，ＶＭホスト２の内部（例えば，メモリ２０２）との通信を行う内部向け通信ユニット２０５４と，ＶＭホスト２の外部（例えば，管理サーバ１）との通信を行う外部向け通信ユニット２０５５と，情報格納領域２３０（構成情報用メモリ２３０）とを有する。各部は，バス２０５７を介して互いに接続される。
【００２３】
ＤＭＡ用メモリ２０５２は，例えば，内部向け通信ユニット２０５４がメモリ２０２から受信したデータを，外部向け通信ユニット２０５５が送信するまで一時的に記憶する。また，ＤＭＡ用メモリ２０５２は，例えば，外部向け通信ユニット２０５５が管理サーバ１から受信したデータを，内部向け通信ユニット２０５４がメモリ２０２に送信（記憶）するまで一時的に記憶する。なお，図２の例におけるＩ／Ｏユニット２０４は，情報格納領域２３０を有しない点のみにおいてＩ／Ｏユニット２０５と構成が異なる。情報格納領域２３０については後述する。
【００２４】
ＤＭＡコントローラ２０５１は，図２及び図３の例においては，例えば，ＣＰＵ２０１がメモリ２０２とＶＭホスト２の外部（管理サーバ１等）との間の通信に介在する頻度を抑制するように制御するものである。具体的に，ＤＭＡコントローラ２０５１は，例えば，ＣＰＵ２０１からの制御に基づいて，外部向け通信ユニット２０５５が受信したデータをメモリ２０２に送信するように制御する。また，ＤＭＡコントローラ２０５１は，例えば，ＣＰＵ２０１からの制御に基づいて，メモリ２０２に記憶されたデータをＶＭホスト２の外部に送信するように制御する。そして，メモリ２０２への送信が完了したときに，ＣＰＵ２０１に通知を行う。すなわち，ＣＰＵ２０１は，ＤＭＡコントローラ２０５１への制御を行うことにより，メモリ２０２とＶＭホスト２の外部との間の通信を実行させることが可能になる。そのため，外部向けユニット２０５５とメモリ２０２との間でデータの送受信が発生する度に介在する必要がなくなる。これにより，ＣＰＵ２０１は，通信の発生による負荷の増大を抑制することができる。
【００２５】
制御用チップ２０５３は，例えば，外部向け通信ユニット２０５５が受信したデータのメモリ２０２への送信，またはメモリ２０２に記憶されたデータのＶＭホスト２の外部への送信が終了したときに，その旨をＣＰＵ２０１に通知する。これにより，ＣＰＵ２０１は，ＤＭＡコントローラ２０５１によってデータがメモリ２０２に記憶されたことを検知することができる。また，制御用チップ２０５３は，例えば，ＶＦに対するＰＦのリソースの割り当てを制御する。このＰＦのリソースの割り当てについては後述する。
【００２６】
図４は，図２で示したＶＭホストの機能ブロック図である。ＶＭホスト２のＣＰＵ２０１は，プログラム２１０を実行することにより，例えば，管理ソフトウエア２１１（以下，構成情報管理部２１１とも呼ぶ）と，運用系物理デバイス制御部２１２（以下，第１の制御部２１２またはＰＦドライバ２１２とも呼ぶ）と，運用系仮想デバイス制御部２１３（第３の制御部２１３またはＶＦドライバ２１３とも呼ぶ）として機能する。また，ＶＭホスト２のＣＰＵ２０１は，プログラム２１０を実行することにより，例えば，待機系物理デバイス制御部２１４（以下，第２の制御部２１４またはＰＦドライバ２１４とも呼ぶ）と，待機系仮想デバイス制御部２１５（以下，第４の制御部２１５またはＶＦドライバ２１５とも呼ぶ）として機能する。また，ＶＭホスト２のＣＰＵ２０１は，プログラム２１０を実行することにより，例えば，物理デバイス切り替え部２１６（以下，第１の切り替え部とも呼ぶ）と，仮想デバイス切り替え部２１７（以下，第２の切り替え部とも呼ぶ）と，送受信中継部２１８（以下，中継部２１８とも呼ぶ）として機能する。
【００２７】
また，図４において，情報格納領域２２０には，例えば，構成情報２２１（以下，第１の構成情報２２１とも呼ぶ）が記憶されている。また，情報格納領域２３０（以下，記憶部２３０とも呼ぶ）には，例えば，バックアップ用構成情報２３１（以下，第２の構成情報２３１または構成情報２３１とも呼ぶ）が記憶されている。
【００２８】
構成情報管理部２１１は，例えば，ＶＦの構成情報２２１を情報格納領域２２０に記憶する。構成情報２２１は，ＶＦが仮想マシンにおける仮想デバイスの機能を実現するために必要な情報である。具体的に，構成情報２２１は，例えば，ＶＦによって実現される仮想デバイスに割り振られるＭＡＣアドレス，ＶＬＡＮ（Ｖｉｒｔｕａｌ ＬＡＮ）のＩＤ（識別情報）及びＭＴＵ（Ｍａｘｉｍｕｍ Ｔｒａｎｓｍｉｓｓｉｏｎ Ｕｎｉｔ）を含む情報である。なお，ＰＦは，物理的なデバイスであるＩ／Ｏユニット２０４，２０５が有するＭＡＣアドレス等に基づいて通信を行うことが可能である。すなわち，ＰＦは，Ｉ／Ｏユニット２０４，２０５の物理ＮＩＣとして機能することが可能であるため，構成情報管理部２１１と構成情報の送受信を行うことなく仮想デバイスの機能を実現することができる。
【００２９】
また，構成情報管理部２１１は，構成情報２２１を情報格納領域２３０に記憶する。具体的に，例えば，構成情報管理部２１１は，構成情報２２１を情報格納領域２２０に記憶したときに，情報格納領域２３０にも記憶するものであってよい。これにより，情報格納領域２２０に記憶された構成情報２２１の内容と，情報格納領域２３０に記憶されたバックアップ用構成情報２３１の内容とが常に同期するように記憶することができる。
【００３０】
なお，構成情報２２１は，例えば，仮想マシンを含むシステム構築時においてユーザによって登録されるものであってよい。また，構成情報２２１は，仮想マシンを含むシステムの構築後，このシステムによって自動的に設定されるものであってもよい。
【００３１】
第１の制御部２１２は，ＰＦが実装された物理デバイス（以下，第１の物理デバイスとも呼ぶ）を制御することにより，そのＰＦを関連付けられたＶＦの機能によって実現する仮想デバイス（以下，第１の仮想デバイスとも呼ぶ）を制御する。第１の制御部２１２は，例えば，ＰＦを制御するために仮想マシン上で動作するドライバであってよい。具体的に，第１の制御部２１２は，例えば，ユーザやＯＳから受けた指示に基づいてＶＦの制御（新たなＶＦへのリソースの割り当てやリソースの解放等）を行う。
【００３２】
第３の制御部２１３は，仮想マシンがＶＦによって実現した仮想デバイスの機能を利用することにより，外部（他の仮想マシンを含む）との通信が可能になるように制御する。第３の制御部２１３は，例えば，ＶＦによる仮想デバイスを制御するために仮想マシン上で動作するドライバである。
【００３３】
第２の制御部２１４は，ＰＦが実装された第１の物理デバイスとは異なる物理デバイス（以下，第２の物理デバイスとも呼ぶ）を制御することにより，そのＰＦと関連付けられたＶＦの機能によって実現する仮想デバイス（以下，第２の仮想デバイスとも呼ぶ）を制御する。第２の制御部２１４は，第１の制御部２１２と同様に，例えば，ＰＦを制御するために仮想マシン上で動作するドライバである。具体的に，第２の制御部２１４は，ユーザやＯＳから受けた指示に基づいてＶＦの制御を行う。
【００３４】
第４の制御部２１５は，仮想マシンがＶＦによって実現した仮想デバイスの機能を利用することにより，外部（他の仮想マシンを含む）との通信が可能になるように制御する。第４の制御部２１５は，例えば，ＶＦによる仮想デバイスを制御するために仮想マシン上で動作するドライバである。
【００３５】
物理デバイス切り替え部２１６は，第１の制御部２１２と第２の制御部２１４との間で切り替えを行う。物理デバイス切り替え部２１６は，第１の制御部２１２と第２の制御部２１４との間で切り替えを行うことにより，仮想マシンが利用している仮想デバイスも切り替えられるものであってよい。
【００３６】
仮想デバイス切り替え部２１７は，物理デバイス切り替え部２１６からの指示に応答して，第３の制御部２１３と第４の制御部２１５との間で切り替えを行う。
【００３７】
送受信中継部２１８は，第１の制御部２１２または第２の制御部２１４と，第３の制御部２１３または第４の制御部２１５との間における指示の中継を行う。
【００３８】
なお，ＰＦは，例えば，物理デバイス２０５の一部にそれぞれ実装された機能であり，そのＰＦに関連付けられたＶＦの制御を行う。そして，ＶＦは，ＰＦのリソースの一部を割り当てた機能であり，ＰＦの制御によって仮想マシンに仮想デバイスの機能を提供する。また，ＰＦは，ＰＦ自身としても仮想マシンに仮想デバイスの機能を提供することができる。具体的に，ＰＦは，例えば，図３において説明したＤＭＡコントローラ２０５１と，ＤＭＡ用メモリ２０５２と，制御用チップ２０５３と，内部向けユニット２０５４と，外部向けユニット２０５５とを有している。そして，ＰＦは，これらのリソースまたは機能の一部をＶＦに割り当てる。すなわち，ＰＦ及びＶＦは，上記のリソースまたは機能を共有することによって，仮想マシンに仮想デバイスの機能を提供する。
【００３９】
また，ＰＦ及びＶＦは，ＰＦとＶＦ間の通信を行うために，例えば，各ＶＦに専用メモリ及び専用の制御部を設けるものであってよい。具体的に，例えば，ＰＦがＶＦにデータを送信する場合，ＰＦは，送信を行うＶＦが有する専用メモリに送信するデータを記憶させる。そして，ＰＦは，データの記憶が完了したときに，専用の制御部によって割り込みを発生させることにより，ＰＦがＶＦにデータの送信を行ったことを通知する。これにより，ＰＦからＶＦへの通信が完了するものであってよい。
【００４０】
［ＳＲ−ＩＯＶを使用したＶＭホストの構成例］
次に，ＳＲ−ＩＯＶを使用した場合のＶＭホストの構成例について説明する。図５及び図６は，ＳＲ−ＩＯＶを使用したＶＭホストを説明する図である。
【００４１】
図５の例におけるＶＭホスト２は，仮想マシン３Ａ及び仮想マシン３Ｃを作成している。また，図５の例においては，ＶＭホスト２は，物理デバイス２０４を有している。そして，仮想マシン３Ａは，構成情報２２１を管理する構成情報管理部２１１及びＰＦドライバ２１２を有する。また，仮想マシン３Ｃは，ＶＦドライバ２１３及びＶＦドライバ２１５を有する。さらに，図５において，物理デバイス２０４は，ＰＣＩ−ＳＩＧ規格に基づくＳＲ−ＩＯＶに対応しており，ＰＦ２５１，ＶＦ２５２及びＶＦ２５３を有している。なお，図５の例において，ＰＦ２５１は，ＶＦ２５２，２５３を制御しているものとする。
【００４２】
図５の例において，構成情報管理部２１１が構成情報２２１をＶＦドライバ２１３，２１５に送信することにより，ＰＦ２５１，ＶＦ２５２，２５３は，それぞれ仮想デバイス２７１，２７２，２７３の機能を実現することが可能になる。そして，仮想マシン３Ａは，仮想デバイス２７１を利用することにより，外部（仮想マシン３Ｃを含む）と通信を行うことが可能になる。また，仮想マシン３Ｃは，仮想デバイス２７２または仮想デバイス２７３を利用することにより，外部（仮想マシン３Ａを含む）と通信を行うことが可能になる。
【００４３】
図６は，構成情報管理部２１１がＶＦドライバ２１３に構成情報２２１を送信する場合の例である。構成情報管理部２１１は，ＰＦドライバ２１２に対し，ＰＦ２５１が制御するＶＦ２５２，２５３の構成情報２２１を予め送信する（Ｓ１０１）。
【００４４】
その後，ＶＦドライバ２１３は，例えば，仮想デバイス２７２の作成時や仮想デバイス２７２の利用開始時（以下，活性化時とも呼ぶ）に，ＰＦドライバ２１２に構成情報２２１の送信を要求する（Ｓ１０２）。この構成情報２２１の送信要求は，図６の例においては，ＶＦ２５２及びＰＦ２５１を経由してＰＦドライバ２１２に通知される（Ｓ１０３，Ｓ１０４）。そして，構成情報２２１の送信要求を受信したＰＦドライバ２１２は，ＰＦ２５１及びＶＦ２５２を経由してＶＦドライバ２１３に構成情報２２１を送信する（Ｓ１０５，Ｓ１０６，Ｓ１０７）。これにより，ＶＦドライバ２１３は，受信した構成情報２２１に基づいて仮想デバイス２７２の設定や利用の開始をすることが可能になる。
【００４５】
ここで，例えば，物理デバイス２０４内のＰＦ２５１に異常が発生し，ＰＦドライバ２１２とＶＦドライバ２１３，２１５との間で，構成情報２２１を送受信ができなくなる場合がある。この場合，ＶＦドライバ２１３，２１５では構成情報２２１の取得エラーが発生し，構成情報２２１の送信要求がハングする等の予期しない異常動作を引き起こす場合がある。すなわち，図６の構成では，ＰＦ２５１の異常発生によって，仮想マシン３Ａに作成された仮想デバイス２７１の制御ができなくなるだけでなく，仮想マシン３Ｃに作成された仮想デバイス２７２，２７３の制御もできなくなる場合がある。
【００４６】
そこで，本実施の形態では，切り替え前の物理デバイスに基づいて作成された仮想デバイスを制御する構成情報を，切り替え後の物理デバイスを制御するＰＦドライバからアクセス可能にすることにより，構成情報に基づいて切り替え後のＰＦドライバが切り替え後の仮想デバイスを制御できる。
【００４７】
［第１の実施の形態］
最初に第１の実施の形態について説明する。図７は，第１の実施の形態における仮想Ｉ／Ｏ切り替え処理の概略を説明するシーケンスチャート図である。また，図８は，第１の実施の形態における仮想Ｉ／Ｏ切り替え処理の概略を説明する図である。図８を参照しながら，図７の仮想Ｉ／Ｏ切り替え処理の概要を説明する。
【００４８】
［図８のＶＭホストの構成］
初めに，図８の例におけるＶＭホスト２の構成について説明する。図８の例におけるＶＭホスト２は，図５の例と同様に，仮想マシン３Ａ及び仮想マシン３Ｃを作成している。また，図８の例においては，ＶＭホスト２は，物理デバイス２０４及び物理デバイス２０５を有している。そして，仮想マシン３Ａは，図８の例においては，ＰＦドライバ２１２及びＰＦドライバ２１４を有し，さらに，仮想マシン３Ａは，ＰＦドライバ２１２とＰＦドライバ２１４とを切り替えるＰＦ切り替え部２１６を有している。また，仮想マシン３Ｃは，ＶＦドライバ２１３及びＶＦドライバ２１５を有する。
【００４９】
図８の例において，物理デバイス２０４及び物理デバイス２０５は，ＳＲ−ＩＯＶに対応している。そして，物理デバイス２０４は，ＰＦ２５１及びＶＦ２５２を有し，物理デバイス２０５は，ＰＦ２６１及びＶＦ２６２を有している。さらに，図８の例において，ＰＦ２５１はＶＦ２５２を制御し，ＰＦ２６１はＶＦ２６２を制御している。また，図８の例において，物理デバイス２０５は，その一部に記憶部２３０を実装している。この記憶部２３０は，例えば，フラッシュメモリ等によるものであってよい。なお，以下，運用中のＰＦドライバ２１２からＰＦドライバ２１４に切り替える場合について説明するが，運用中のＰＦドライバ２１４からＰＦドライバ２１２に切り替える場合も同様に行うことが可能である。また，図８の例において，仮想マシン３Ａの構成情報管理部２１１については記載を省略している。
【００５０】
図８の例において，構成情報管理部２１１がＶＦドライバ２１３，２１５に構成情報２２１を送信することにより，ＰＦ２５１，２６１，ＶＦ２５２，２６２による仮想デバイス２７１，２７２，２８１，２８２の機能がそれぞれ実現される。これにより，仮想マシン３Ａは，仮想デバイス２７１または仮想デバイス２８１を利用して，仮想マシン３Ａや外部（管理サーバ１等）と通信を行うことが可能になる。また，仮想マシン３Ｃは，仮想デバイス２７２または仮想デバイス２８２を利用して，仮想マシン３Ｃや外部と通信を行うことが可能になる。以下，図８を参照しながら，図７の仮想Ｉ／Ｏ切り替え処理の概略を説明する。
【００５１】
［図７のＳ１からＳ３］
初めに，構成情報管理部２１１は，ＶＦを制御するための構成情報２２１を物理デバイス２０５に設けられた記憶部２３０に記憶する（Ｓ１）。構成情報管理部２１１は，例えば，構成情報２２１を情報格納領域２２０に記憶するときに，構成情報２２１と同じ内容の構成情報２３１を記憶部２３０に記憶する。これにより，構成情報２２１と構成情報２３１とを同期させることが可能になる。
【００５２】
そして，ＰＦドライバ２１２は，ＰＦ２５１が所定の状態になったとき，その旨をＰＦ切り替え部２１６に通知する（Ｓ２，Ｓ３）。所定の状態は，例えば，ＰＦ２５１（物理デバイス２０４）が通常状態とは異なる状態，すなわち異常状態である。そして，ＰＦドライバ２１２は，例えば，ＰＦ２５１と通信ができなくなった場合に，ＰＦ２５１に異常が発生したと判断するものであってよい。また，ＰＦドライバ２１２は，たとえば，ＰＦ２５１との通信に要する時間が予め定めた閾値（例えば，５秒）を超えた場合に，ＰＦ２５１に異常が発生したものと判断するものであってもよい。なお，ＰＦ切り替え部２１６が運用中のＰＦ２５１（物理デバイス２０４）の状態を監視しており，ＰＦ２５１が所定の状態になったことをＰＦ切り替え部２１６が検知するものであってもよい。
【００５３】
［図７のＳ４］
次に，ＰＦ切り替え部２１６は，ＰＦドライバ２１２からＰＦ２５１に異常が発生した旨の通知を受けたときに（Ｓ３），ＰＦドライバ２１２から待機系のＰＦドライバであるＰＦドライバ２１４への切り替えを開始することを通知する（Ｓ４）。
【００５４】
すなわち，ＰＦで発生した異常によってＰＦドライバとＰＦとの間の通信ができなくなった場合，ＰＦが制御するＶＦとＰＦドライバとの間の通信もできなくなり，ＶＦは，ＰＦドライバから構成情報を受信することができなくなる。そして，ＰＦで発生した異常によって，ＰＦが制御するＶＦによって作成された仮想デバイスにも異常が発生する可能性が生じ，仮想マシンはこの仮想デバイスを使用することができなくなる。そのため，本実施の形態においては，ＰＦドライバがＰＦの異常を検知した場合，異常が発生したＰＦドライバ（ＰＦ）から待機系のＰＦドライバ（ＰＦ）に切り替え，切り替え先のＰＦが制御するＶＦによって仮想デバイスを作成する。これにより，仮想マシンは，ＰＦに異常が発生した場合においても仮想デバイスによるＩ／Ｏ機能を継続して利用することが可能になる。
【００５５】
［図７のＳ５からＳ８］
ＰＦドライバ２１４がＰＦ切り替え部２１６から切り替えを開始する旨の通知を受信した後（Ｓ４），ＰＦドライバ２１４は，物理デバイス２０５に構成情報２３１の取得要求を送信して，構成情報２３１を取得する（Ｓ５，Ｓ６）。そして，ＰＦ切り替え部２１６がＰＦドライバ２１４から構成情報２３１を受信した旨の通知を受信した後（Ｓ６），ＰＦ切り替え部２１６は，ＰＦドライバ２１２からＰＦドライバ２１４への切り替えを行う（Ｓ７，Ｓ８）。具体的に，図８の例においては，ＰＦ切り替え部２１６が制御を行うＰＦドライバをＰＦドライバ２１２からＰＦドライバ２１４に切り替える。これにより，ＰＦ切り替え部２１６が制御するＰＦ及びＶＦは，物理デバイス２０４に実装されているＰＦ２５１及びＰＦ２５２から，物理デバイス２０５に実装されているＰＦ２６１及びＶＦ２６２に切り替わる。そして，図８の例において，仮想マシン３Ｃの仮想Ｉ／Ｏ機能を実現する仮想デバイスは，仮想デバイス２７２から仮想デバイス２８２に切り替わる。
【００５６】
すなわち，ＰＦの異常発生により待機系のＰＦに切り替えを行った場合，切り替え先のＰＦは，異常が発生したＰＦのＰＦドライバにアクセスできない場合がある。この場合，切り替え後のＰＦドライバは，異常が発生したＰＦがＶＦを制御するために用いていた構成情報を取得することができなくなり，切り替え前の仮想デバイスが実現していた仮想Ｉ／Ｏ機能を引き継ぐことができなくなる。そのため，Ｓ１において説明したように，ＰＦドライバは，ＶＦを制御するための構成情報を，運用中のＰＦの状態によらず，予め切り替え後のＰＦドライバがアクセスできる場所に記憶しておく。これにより，切り替え後のＰＦドライバは，異常が発生したＰＦがＶＦを制御するために用いていた構成情報を取得することが可能になる。そして，切り替え後のＰＦドライバは，切り替え前の仮想デバイスが仮想マシンに提供していた仮想Ｉ／Ｏ機能を，継続して仮想マシンに提供することが可能になる。  
【００５７】
このように，第１の実施の形態によれば，ＶＭホスト２は，物理デバイス２０５２０５のリソースをそれぞれ割り当てることにより仮想マシン３Ｃに作成された仮想デバイス２７２，２８２を，それぞれ制御するＰＦドライバ２１２，２１４を有する。そして，ＶＭホスト２は，ＰＦドライバ２１４からアクセス可能であり，ＰＦドライバ２１２が仮想デバイス２７２を制御するための構成情報２２１と同期した構成情報２３１を記憶する記憶部２３０を有する。さらに，ＶＭホスト２は，物理デバイス２０４の状態が異常状態になった場合であって，ＰＦドライバ２１４が記憶部２３０から構成情報２３１を取得した後に，ＰＦドライバ２１２からＰＦドライバ２１４への切り替えを行うＰＦ切り替え部２１６を有する。これにより，ＰＦ２５１（物理デバイス２０４）に異常が発生し，ＰＦドライバ２１２とＶＦ２５２との間の通信ができなくなった場合においても，待機系のＰＦドライバであるＰＦドライバ２１４は，ＶＦ２５２の構成情報２３１を取得することが可能になる。そのため，仮想マシン３Ｃは，ＰＦドライバ等の切り替えを行うために仮想マシン３Ｃ自体を停止させることなく，ＶＦによって実現される仮想デバイスによる仮想Ｉ／Ｏ機能を継続して利用することが可能になる。
【００５８】
[第１の実施の形態の詳細]
次に，第１の実施の形態の詳細について説明する。図９から図１１は，第１の実施の形態における仮想Ｉ／Ｏ切り替え処理の詳細を説明するフローチャート図である。また，図１２は，第１の実施の形態における仮想Ｉ／Ｏ切り替え処理の詳細を説明する図である。図１２を参照しながら，図９から図１１の仮想Ｉ／Ｏ切り替え処理の詳細を説明する。
【００５９】
［図１２のＶＭホストの構成］
図１２の例におけるＶＭホスト２は，図８の例におけるＶＭホスト２と異なり，ＶＦドライバ２１３とＶＦドライバ２１５との間で切り替えを行うＶＦ切り替え部２１７を有する。そして，ＰＦ切り替え部２１６からＶＦ切り替え部２１７への指示（ＰＦ切り替え部２１６とＶＦ切り替え部２１７との間の通信）を中継する送受信中継部２１８を有する。その他の構成については，図８に示すＶＭホスト２と同じ構成であるため説明を省略する。
【００６０】
［ＰＦ切り替え部における仮想Ｉ／Ｏ切り替え処理］
初めに，図９を参照して，ＰＦ切り替え部２１６において実行される仮想Ｉ／Ｏ切り替え処理について説明する。
【００６１】
仮想Ｉ／Ｏ切り替え処理のバックグラウンドにおいて，構成情報管理部２１１は，構成情報２２１を記憶部２３０に記憶する（Ｓ１０）。
【００６２】
そして，ＰＦドライバ２１２がＰＦ２５１の異常発生を検知した場合（Ｓ１１のＹＥＳ），ＰＦ切り替え部２１６は，ＰＦドライバ２１２に異常発生を検知したＰＦ２５１の停止を指示する（Ｓ１２）。次に，ＰＦドライバ２１２からＰＦ停止完了通知を受信したとき（Ｓ１３のＹＥＳ），ＰＦ切り替え部２１６は，停止したＰＦ２５１が制御していたＶＦ２５２の停止を，送受信中継部２１８を経由してＶＦ切り替え部２１７に指示する（Ｓ１４）。
【００６３】
図１２の例において，ＰＦ切り替え部２１６が位置する仮想マシン３ＡとＶＦドライバ２１３が位置する仮想マシン３Ｃとは，別の仮想マシンであり，ＯＳレベルで独立している。そのため，ＰＦドライバ２１２からＰＦドライバ２１４への切り替えを行う際には，例えば，ＰＦ切り替え部２１６によるＰＦドライバの切り替えとＶＦ切り替え部２１７によるＶＦドライバの切り替えとを連携して行う必要がある。そこで，本実施の形態においては，ＰＦ切り替え部２１６とＶＦ切り替え部２１７との間に送受信中継部２１８を設ける。そして，送受信中継部２１８は，ＰＦ切り替え部２１６とＶＦ切り替え部２１７との間で行われる通信の中継を行う。以下，送受信中継部２１８の動作の具体例について説明する。
【００６４】
図１３は，第１の実施の形態における送受信中継部を説明する図である。図１３の例における仮想マシン３Ａ，仮想マシン３Ｃ及び送受信中継部２１８は，例えば，仮想マシン３Ａとハイパーバイザ４との間における通信用インターフェースによって通信を行う。この通信用インターフェースは，例えば，図１３に示すように，コマンドコード及びオプションパラメータを含む情報の送受信を行うためのものである。具体的に，図１３の例においては，ＰＦ切り替え部２１６が，ＰＦ２５１が制御していたＶＦ２５２の停止をＶＦ切り替え部２１７に指示する場合について説明を行う。
【００６５】
この場合，図１３の例に示すように，仮想マシン３ＡのＰＦ切り替え部２１６は，例えば，コマンドコードが「切り替え開始」であり，オプションパラメータが「仮想マシン３Ｃ」である情報を含む指示を，通信用インターフェースによって送受信中継部２１８に向けて送信する。そして，送受信中継部２１８は，上記の指示をＰＦ切り替え部２１６から受信したときに，仮想マシン３ＣのＶＦ切り替え部２１７に向けた指示を作成する。具体的に，送受信中継部２１８は，例えば，コマンドコードが「ＶＦの停止」である情報を含む指示を作成し，通信用インターフェースによって仮想マシン３ＣのＶＦ切り替え部２１７に送信する。これにより，ＶＦ切り替え部２１７は，ＰＦ切り替え部２１６からの指示に基づいてＶＦの停止を行うことが可能になる。
【００６６】
すなわち，本実施の形態においては，ＰＦ切り替え部２１６とＶＦ切り替え部２１７との間の通信を行う場合，送受信中継部２１８を経由して行う。これにより，ＰＦ切り替え部２１６及びＶＦ切り替え部２１７が担う機能をハイパーバイザ４に持たせる必要がなくなる。そのため，ハイパーバイザ４の処理負担を軽減させ，さらに，ＶＭホスト２におけるＣＰＵ２０１等のリソースの負担を軽減させることができる。
【００６７】
また，ＰＦ切り替え部２１６及びＶＦ切り替え部２１７は，送受信中継部２１８からの通信があったことをトリガとして，それぞれの処理のタイミングを応じた処理を開始する。これにより，ＰＦ切り替え部２１６及び切り替え部２１７は，互いに連携しながら処理を行うことが可能になる。
【００６８】
図９に戻り，ＶＦ切り替え部２１７からＶＦの停止完了通知を受信したとき（Ｓ１５のＹＥＳ），ＰＦ切り替え部２１６は，記憶部２３０に記憶した構成情報２３１の取得をＰＦドライバ２１４に指示する（Ｓ１６）。そして，ＰＦドライバ２１４から構成情報を取得した旨の通知を受信したとき（Ｓ１７のＹＥＳ），ＰＦ切り替え部２１６は，ＰＦドライバ２１４に切り替え先のＰＦであるＰＦ２６１の起動を指示する。また，異常が発生したＰＦ２５１が制御するＶＦが複数ある場合，ＰＦ切り替え部２１６は，全てのＶＦに関する停止完了通知を受信したときに（Ｓ１５のＹＥＳ），記憶部２３０に記憶した構成情報２３１の取得をＰＦドライバ２１４に指示する（Ｓ１６）。
【００６９】
なお，図１２の例において，切り替え前のＰＦドライバ２１２が制御するＶＦ２５２の構成情報２３１を記憶する記憶部２３０は，物理デバイス２０５に設けられている。そのため，例えば，構成情報２３１をハイパーバイザ４に記憶させる必要がなくなる。これにより，構成情報２３１を記憶することによるハイパーバイザ４の負担増大を抑制することができる。また，図１２の例においては，構成情報２３１をハードウエアの一部である物理デバイス２０５に記憶させている。そのため，仮想マシンにおけるソフトウエア等の構成の違いに応じて，構成情報２３１を記憶する記憶部２３０の位置を変更する必要がない。  
【００７０】
図９に戻り，ＰＦドライバ２１４からＰＦ２６１の起動が完了した旨の通知を受信したとき（Ｓ１９のＹＥＳ），ＰＦ切り替え部２１６は，起動したＰＦ２６１が制御するＶＦ２６２の起動を，送受信中継部２１８を経由してＶＦ切り替え部２１７に指示する（Ｓ２０）。そして，ＶＦ切り替え部２１７からＶＦ２６２の起動が完了した旨の通知を受信したとき，仮想Ｉ／Ｏ切り替え処理は完了する（Ｓ２１のＹＥＳ）。なお，ＰＦまたはＶＦの切り替えを行ったときに，ＰＦ切り替え部２１６またはＶＦ切り替え部２１７は，切り替えと同時に，切り替え元のＰＦドライバまたはＶＦドライバとの間の通信インターフェースを停止（非活性化）するものであってもよい。また，必要がある場合には，切り替えと同時に，切り替え先のＰＦドライバまたはＶＦドライバとの間の通信インターフェースを起動（活性化）するものであってもよい。
【００７１】
［管理テーブル］
図１２に示すように，例えば，ＰＦ２５１に異常が発生した場合，仮想マシン３Ｃは仮想デバイス２７２を利用することができなくなる。そのため，ＰＦ切り替え部２１６は，異常が発生したＰＦ２５１に代えて，仮想マシン３Ｃに仮想デバイスの機能を実現することができるＶＦを制御するＰＦに切り替えを行う必要がある。そこで，ＰＦ切り替え部２１６は，ＰＦ切り替え部２１６が切り替え先のＰＦを決定するための管理テーブルを予め有しておくものであってよい。これにより，ＰＦ切り替え部２１６がＰＦ２１５に異常が発生した旨の通知を受信した際に（Ｓ１３のＹＥＳ），容易に切り替え先のＰＦを決定することが可能になる。
【００７２】
図１４は，第１の実施の形態における管理テーブルを説明する図である。図１４の管理テーブルは，図１２の例におけるＰＦ及びＶＦに対応している。管理テーブルは，例えば，ＰＦ／ＶＦ名と，物理デバイス名と，仮想マシン名と，切り替え部名との情報を有している。図１４の例においては，ＰＦ２５１は，位置する物理デバイスが物理デバイス２０４であり，位置する仮想マシンが仮想マシン３Ａであり，切り替え制御される切り替え部がＰＦ切り替え部２１６であることを示している。また，ＶＦ２５２は，位置する物理デバイスが物理デバイス２０４であり，位置する仮想マシンが仮想マシン３Ｃであり，切り替え制御される切り替え部がＶＦ切り替え部２１７であることを示している。また，ＰＦ２６１は，位置する物理デバイスが物理デバイス２０５であり，位置する仮想マシンが仮想マシン３Ａであり，切り替え制御される切り替え部がＰＦ切り替え部２１６であることを示している。また，ＶＦ２６２は，位置する物理デバイスが物理デバイス２０５であり，位置する仮想マシンが仮想マシン３Ｃであり，切り替え制御される切り替え部がＶＦ切り替え部２１７であることを示している。
【００７３】
具体的に，例えば，図１４の例においてＰＦ２５１に異常が発生した場合，ＰＦ切り替え部２１６は管理テーブルを参照する。そして，初めに，異常が発生したＰＦと同じ物理デバイスに位置しているＶＦを特定する。すなわち，ＰＦ２５１の異常発生により，影響が出ると可能性があるＶＦを特定する。図１４の例においては，異常が発生したＰＦ２５１と同じ物理デバイスである物理デバイス２０４に位置しているＶＦは，ＶＦ２５２である。
【００７４】
次に，ＰＦ切り替え部２１６は，特定したＶＦ２５２が実現した仮想デバイスを利用している仮想マシンを特定する。すなわち，ＰＦ２５１の異常発生により，影響が出ると可能性がある仮想マシンを特定する。図１４の例において，ＶＦ２５２が実現した仮想デバイスを利用している仮想マシンは，仮想マシン３Ｃである。
【００７５】
そして，ＰＦ切り替え部２１６は，仮想マシン３Ｃに仮想デバイスの機能を提供することが可能なＶＦを特定する。すなわち，異常が発生したＰＦ２５１が制御していたＶＦ２５２に代わり，仮想マシン３Ｃに仮想デバイスの機能を提供することが可能なＶＦを特定する。図１４の例において，仮想マシン３Ｃに仮想デバイスの機能を提供することが可能なＶＦは，ＶＦ２６２である。
【００７６】
次に，ＰＦ切り替え部２１６は，ＶＦ２６２を制御しているＰＦを特定する。すなわち，ＰＦ切り替え部２１６は，異常が発生したＰＦ２５１からＶＦ２６２を制御しているＰＦに切り替えを行うことができるか否かの確認を行う。図１４の例において，ＶＦ２６２を制御しているＰＦはＰＦ２６１であり，ＰＦ２６１を制御するＰＦドライバはＰＦドライバ２１４である。そのため，ＰＦ切り替え部２１６は，異常が発生したＰＦ２５１を制御するＰＦドライバ２１２からＰＦドライバ２１４に切り替えることによって，仮想マシン３Ｃへの仮想デバイスの機能の提供を継続することができると判断する。
【００７７】
なお，ＰＦ切り替え部２１６は，例えば，ＰＦドライバの優先度を予め定めておくものであってもよい。これにより，ＰＦ切り替え部２１６は，切り替えることができるＰＦドライバが複数存在した場合に，切り替え先のＰＦドライバを容易に決定することができる。一方，ＰＦ切り替え部２１６は，管理テーブルを確認した結果，切り替えることができるＰＦドライバが存在しない場合，例えば，その旨を事業者に通知するためにエラーを出力するものであってよい。
【００７８】
［ＶＦ切り替え部における仮想Ｉ／Ｏ切り替え処理］
次に，図１０を参照して，ＶＦ切り替え部２１７において実行される仮想Ｉ／Ｏ切り替え処理について説明する。
【００７９】
ＶＦ切り替え部２１７がＶＦ２５２の停止指示通知を受信したとき（Ｓ３１のＹＥＳ），ＶＦ切り替え部２１７は，停止を指示されたＶＦ２５２を停止する（Ｓ３２）。具体的に，ＶＦ切り替え部２１７は，例えば，ＶＦドライバ２１３にＶＦ２５２を停止する旨を指示し，この指示を受信したＶＦドライバ２１３がＶＦ２５２の停止を行う。そして，例えば，ＶＦ切り替え部２１７がＶＦドライバ２１３からＶＦ２５２が停止した旨の通知を受信したとき（Ｓ３３のＹＥＳ），ＶＦ切り替え部２１７は，ＶＦ２５２の停止が完了した旨を，送受信中継部２１８を経由してＰＦ切り替え部２１６に通知する（Ｓ３４）。
【００８０】
すなわち，ＰＦに異常が発生した場合，ＰＦの切り替えを行う前に，異常が発生したＰＦが制御していたＶＦの停止を行う。これにより，異常が発生したＰＦが制御していたＶＦにおいてエラーが発生するのを防止し，例えば，ユーザのサービスに影響を及ぼすことを防止することが可能になる。
【００８１】
次に，ＶＦ切り替え部２１７がＶＦ２６２の起動指示通知を受信したとき（Ｓ３５のＹＥＳ），ＶＦ切り替え部２１７は，起動を指示されたＶＦ２６２を起動する（Ｓ３６）。具体的に，ＶＦ切り替え部２１７は，例えば，ＶＦドライバ２１４にＶＦ２６２を起動する旨を指示し，この指示を受信したＶＦドライバ２１４がＶＦ２６２の起動を行う。そして，例えば，ＶＦ切り替え部２１７がＶＦドライバ２１４からＶＦ２６２が起動した旨の通知を受信したとき（Ｓ３７のＹＥＳ），ＶＦ切り替え部２１７は，ＶＦ２６２の起動が完了した旨を，送受信中継部２１８を経由してＰＦ切り替え部２１６に通知する（Ｓ３８）。
【００８２】
［送受信中継部における仮想Ｉ／Ｏ切り替え処理］
次に，図１１を参照して，送受信中継部２１８において実行される仮想Ｉ／Ｏ切り替え処理について説明する。
【００８３】
送受信中継部２１８がＶＦ２５２の停止指示通知を受信したとき（Ｓ４１のＹＥＳ），送受信中継部２１８は，停止を指示されたＶＦ２５２の停止をＶＦ切り替え部２１７に指示する（Ｓ４２）。そして，送受信中継部２１８がＶＦ２５２の停止完了通知を受信したとき（Ｓ４３のＹＥＳ），送受信中継部２１８は，停止を指示されたＶＦ２５２の停止が完了した旨をＰＦ切り替え部２１６に通知する（Ｓ４４）。
【００８４】
次に，送受信中継部２１８がＶＦ２６２の起動指示通知を受信したとき（Ｓ４５のＹＥＳ），送受信中継部２１８は，起動を指示されたＶＦ２６２の起動をＶＦ切り替え部２１７に指示する（Ｓ４６）。そして，送受信中継部２１８がＶＦ２６２の起動完了通知を受信したとき（Ｓ４７のＹＥＳ），送受信中継部２１８は，起動を指示されたＶＦ２６２の起動が完了した旨をＰＦ切り替え部２１６に通知する（Ｓ４８）。
【００８５】
[第２の実施の形態]
次に，第２の実施の形態について説明する。図１５は，第２の実施の形態における仮想Ｉ／Ｏ切り替え処理を説明するフローチャート図である。また，図１６は，第２の実施の形態における仮想Ｉ／Ｏ切り替え処理を説明する図である。図１６を参照しながら，図１５の仮想Ｉ／Ｏ切り替え処理の詳細を説明する。なお，ＶＦ切り替え部２１７及び送受信中継部２１８における仮想Ｉ／Ｏ切り替え処理は，第１の実施の形態における処理と同じであるため，ここでは説明を省略する。
【００８６】
［図１６のＶＭホストの構成］
図１６の例におけるＶＭホスト２は，図１２の例におけるＶＭホスト２と異なり，ＰＦドライバ２１２とＰＦドライバ２１４がそれぞれ位置する仮想マシンが異なる。具体的に，仮想マシン３ＡにはＰＦドライバ２１２が位置し，仮想マシン３ＢにはＰＦドライバ２１４が位置する。そのため，図１６の例においては，ＰＦ切り替え部は２つに分割されており，仮想マシン３ＡにはＰＦ切り替え部２１６Ａ（以下，第１のＰＦ切り替え部２１６Ａとも呼ぶ）が位置し，仮想マシン３ＢにはＰＦ切り替え部２１６Ｂ（以下，第２のＰＦ切り替え部２１６Ｂとも呼ぶ）が位置している。その他の構成については，図１２に示すＶＭホスト２と同じ構成であるため説明を省略する。
【００８７】
［ＰＦ切り替え部における仮想Ｉ／Ｏ切り替え処理］
仮想Ｉ／Ｏ切り替え処理のバックグラウンドにおいて，第１の実施の形態と同様に，構成情報管理部２１１は，構成情報２２１を記憶部２３０に記憶する（Ｓ５０）。
【００８８】
そして，ＰＦドライバ２１２がＰＦ２５１の異常発生を検知した場合（Ｓ５１のＹＥＳ），ＰＦ切り替え部２１６は，ＰＦドライバ２１２に異常発生を検知したＰＦ２５１の停止を指示する（Ｓ５２）。
【００８９】
次に，ＰＦドライバ２１２からＰＦ停止完了通知を受信したとき（Ｓ５３のＹＥＳ），ＰＦドライバ２１２は，ＰＦの切り替えが開始することをＰＦドライバ２１４に送信する（Ｓ５４）。そして，例えば，ＰＦ切り替え部２１６Ｂは，停止したＰＦ２５１が制御していたＶＦ２５２の停止を，送受信中継部２１８を経由してＶＦ切り替え部２１７に指示する（Ｓ５４）。
【００９０】
すなわち，図１６の例において，ＰＦ切り替え部２１６Ａが位置している仮想マシンとＰＦ切り替え部２１６Ｂが位置している仮想マシンとは異なっている。そのため，ＰＦ切り替え部２１６Ｂに仮想Ｉ／Ｏ切り替え処理を実行させるためには，ＰＦ切り替え部２１６ＡからＰＦ切り替え部２１６ＢにＰＦの切り替えが開始する旨を通知する必要がある。
【００９１】
なお，仮想マシン３Ａと仮想マシン３Ｂとの間の通信が，セキュリティの観点等により認められていない場合がある。このような場合には，例えば，ＰＦ切り替え部２１６Ａ及びＰＦ切り替え部２１６Ｂのみが使用することができる専用回線を用意し，この専用回線によって，ＰＦ切り替え部２１６ＡとＰＦ切り替え部２１６Ｂとの通信を行うものであってよい。
【００９２】
また，例えば，ＰＦドライバ２１２によって制御されるＰＦ２５１が運用中である場合，ＰＦ切り替え部２１６Ｂは，上記の専用回線を用いてＰＦ切り替え部２１６ＡやＰＦドライバ２１２の動作を監視するものであってもよい。そして，ＰＦ切り替え部２１６Ａ等の動作に異常があった場合に，ＰＦドライバ２１２を経由してＰＦ２５１を停止させ，ＰＦドライバ２１４を介してＰＦ２６１を起動させる等の処理を行う（Ｓ５２，Ｓ５９）。これにより，ＰＦ切り替え部２１６Ｂ側主導によるＰＦの切り替えを行うものであってもよい。
【００９３】
次に，ＶＦ切り替え部２１７からＶＦの停止完了通知を受信したとき（Ｓ５６のＹＥＳ），例えば，ＰＦ切り替え部２１６Ｂは，記憶部２３０に記憶した構成情報２３１の取得をＰＦドライバ２１４に指示する（Ｓ５７）。そして，ＰＦドライバ２１４から構成情報を取得した旨の通知を受信したとき（Ｓ５８のＹＥＳ），例えば，ＰＦ切り替え部２１６Ｂは，ＰＦドライバ２１４に切り替え先のＰＦであるＰＦ２６１の起動を指示する。これにより，ＰＦの切り替えが完了する。
【００９４】
さらに，ＰＦドライバ２１４からＰＦ２６１の起動が完了した旨の通知を受信したとき（Ｓ６０のＹＥＳ），ＰＦ切り替え部２１６Ｂは，起動したＰＦ２６１が制御するＶＦ２６２の起動を，送受信中継部２１８を経由してＶＦ切り替え部２１７に指示する（Ｓ６１）。そして，ＶＦ切り替え部２１７からＶＦ２６２の起動が完了した旨の通知を受信したとき，仮想Ｉ／Ｏ切り替え処理は完了する（Ｓ６２のＹＥＳ）。
【００９５】
このように，第２の実施の形態においては，ＰＦ切り替え部２１６Ａ及びＰＦ切り替え部２１６Ｂが位置している仮想マシンが異なる場合に，ＰＦ切り替え部２１６ＡからＰＦ切り替え部２１６ＢにＰＦの切り替えを開始する旨の通知をＰＦの切り替えを行う前に行う。これにより，ＰＦ切り替え部２１６Ａ及びＰＦ切り替え部２１６Ｂが位置している仮想マシンが異なる場合においても，第１の実施の形態と同様にＰＦの切り替えを行うことが可能になる。
【００９６】
以上の実施の形態をまとめると，以下の付記のとおりである。
【００９７】
（付記１）
物理マシンに設けられた第１及び第２の物理デバイスのリソースをそれぞれ割り当てることにより仮想マシンに作成された第１及び第２の仮想デバイスを，それぞれ制御する第１及び第２の制御部と，
前記第２の制御部からアクセス可能であり，前記第１の制御部が前記第１の仮想デバイスを制御するための第１の構成情報と同期した第２の構成情報を記憶する記憶部と，
前記第１の物理デバイスの状態が所定の状態になった場合，前記第２の制御部が前記記憶部から前記第２の構成情報を取得した後に，前記第１の制御部から前記第２の制御部への切り替えを行う第１の切り替え部と，を有する
情報処置装置。
【００９８】
（付記２）
付記１において，
前記第１の制御部は，前記第１の物理デバイスの状態を監視しており，
前記第１の切り替え部は，前記第１の物理デバイスが前記所定の状態になったことを前記第１の制御部が検知したときに，前記第１の制御部から前記第２の制御部への切り替えを行う情報処理装置。
【００９９】
（付記３）
付記１において，
前記第２の制御部は，前記第２の物理デバイスの状態を監視しており，
前記第１の切り替え部は，前記第２の物理デバイスが前記所定の状態になったことを前記第２の制御部が検知したときに，前記第２の制御部から前記第１の制御部への切り替えを行う情報処理装置。
【０１００】
（付記４）
付記２または３において，
前記所定の状態は，通常状態とは異なる状態である情報処理装置。
【０１０１】
（付記５）
付記１において，さらに，
前記第１の仮想デバイスの制御を行う第３の制御部を有し，
前記第１の切り替え部は，前記第１の制御部から前記第２の制御部への切り替えを行う前に，前記第１の仮想デバイスの停止を前記第３の制御部に指示する情報処理装置。
【０１０２】
（付記６）
付記５において，さらに，
前記第２の仮想デバイスの制御を行う第４の制御部を有し，
前記第１の切り替え部は，前記第１の制御部から前記第２の制御部への切り替えを行った後に，前記第２の仮想デバイスの起動を前記第４の制御部に指示する情報処理装置。
【０１０３】
（付記７）
付記５または６において，さらに，
前記第１の切り替え部からの指示に基づいて，前記第３の制御部または前記第４の制御部へ指示を行う第２の切り替え部を有する情報処理装置。
【０１０４】
（付記８）
付記５または６において，さらに，
前記第１の切り替え部から前記第３の制御部または前記第４の制御部への指示を中継する中継部を有する情報処理装置。
【０１０５】
（付記９）
付記１において，
前記第１の切り替え部は，前記第１の制御部を有する第１の仮想マシンに設けられた第３の切り替え部と，前記第２の制御部を有する第２の仮想マシンに設けられた第４の切り替え部とを含み，
前記第３の切り替え部は，前記第１の物理デバイスが所定の状態になったことを前記第１の制御部が検知したときに，前記第１の制御部から前記第２の制御部への切り替えを行い，
前記第４の切り替え部は，前記第２の物理デバイスが所定の状態になったことを前記第２の制御部が検知したときに，前記第２の制御部から前記第１の制御部への切り替えを行う情報処理装置。
【０１０６】
（付記１０）
付記１において，
前記記憶部は，前記第２の物理デバイスに設けられている情報処理装置。
【０１０７】
（付記１１）
付記１において，
前記物理デバイスは，ＰＣＩ−ＳＩＧ規格に基づくＳｉｎｇｌｅ Ｒｏｏｔ Ｉ／Ｏ Ｖｉｒｔｕａｌｉｚａｔｉｏｎデバイスである情報処理装置。
【０１０８】
（付記１２）
物理マシンに設けられた第１及び第２の物理デバイスのリソースをそれぞれ割り当てることにより仮想マシンに作成した第１及び第２の仮想デバイスを制御する第１及び第２の制御部の切り替えを行う情報処理プログラムであって，
前記第１の制御部が前記第１の仮想デバイスを制御するための第１の構成情報と同期した第２の構成情報を，前記第２の制御部からアクセス可能である記憶部に記憶し，
前記第１の物理デバイスの状態が所定の状態になった場合，前記第２の制御部が前記記憶部から前記第２の構成情報を取得した後に，前記第１の制御部から前記第２の制御部への切り替えを行う，
処理をコンピュータに実行させる情報処理プログラム。
【０１０９】
（付記１３）
物理マシンに設けられた第１及び第２の物理デバイスのリソースをそれぞれ割り当てることにより仮想マシンに作成した第１及び第２の仮想デバイスを，それぞれ制御する第１及び第２の制御部を有する情報処理装置における情報処理方法であって，
前記第１の制御部が前記第１の仮想デバイスを制御するための第１の構成情報と同期した第２の構成情報を，前記第２の制御部からアクセス可能である記憶部に記憶する記憶工程と，
前記第１の物理デバイスの状態が所定の状態になった場合，前記第２の制御部が前記記憶部から前記第２の構成情報を取得した後に，前記第１の制御部から前記第２の制御部への切り替えを行う切り替え工程と，を有する
情報処理方法。
【符号の説明】
【０１１０】
１：管理サーバ              ２：ＶＭホスト
３：仮想マシン              ３Ａ：仮想マシン
３Ｂ：仮想マシン            ３Ｃ：仮想マシン
４：仮想化ソフトウエア      ２１６：ＰＦ切り替え部
２１７：ＶＦ切り替え部      ２２１：構成情報
２３０：記憶部              ２３１：構成情報
【図１】
2015201008.tif 000003
【図２】
2015201008.tif 000004
【図３】
2015201008.tif 000005
【図４】
2015201008.tif 000006
【図５】
2015201008.tif 000007
【図６】
2015201008.tif 000008
【図７】
2015201008.tif 000009
【図８】
2015201008.tif 000010
【図９】
2015201008.tif 000011
【図１０】
2015201008.tif 000012
【図１１】
2015201008.tif 000013
【図１２】
2015201008.tif 000014
【図１３】
2015201008.tif 000015
【図１４】
2015201008.tif 000016
【図１５】
2015201008.tif 000017
【図１６】
2015201008.tif 000018