(57)【要約】【課題】  仮想計算機のゲストＯＳへのデバイスの割り当て方法について、エミュレーションによる割り当てとゲストＯＳから直接操作可能な割り当てとの間で切り替えることが難しいという課題がある。【解決手段】  ＶＭＭ内のゲストＯＳに仮想的なサスペンド割り込みの送信と、ゲストＯＳにサスペンドからの復帰処理を開始させる電源制御通知処理と、ゲストＯＳのサスペンド処理をトラップするゲスト電源処理と、ゲストＯＳのサスペンド中にＶＭＭの論理デバイス定義を更新するＩ／Ｏ構成変更処理と、ゲストＯＳがサスペンドから復帰したときに実行するＩ／Ｏ再構成処理が発行するＩ／Ｏ命令をエミュレートして新しい論理デバイス構成をゲストＯＳに提供するゲストＩ／Ｏエミュレート処理とにより、ゲストＯＳへのデバイス割り当ての切り替えを実現する。【選択図】図３
2008305034.tif 000002
【特許請求の範囲】
【請求項１】
ゲストＯＳのＩ／Ｏ操作を、ゲストＯＳから直接デバイス操作可能なようにデバイスを構成して実行することと、エミュレーションによっても実行することが可能な仮想計算機におけるゲストＯＳへのデバイス割り当ての変更方法であって、
ゲストＯＳからの直接操作可能なように構成したデバイス（直接割り当てデバイス）を、Ｉ／Ｏエミュレーションの下で利用されるデバイスとして再構成する、あるいは、Ｉ／Ｏエミュレーションの下で利用されるデバイス（エミュレータデバイス）を、ゲストＯＳから直接操作可能なように再構成し、
デバイスＯＳを停止してゲストＯＳの実行を中断させる仮想的なサスペンド指示をＶＭＭがゲストＯＳに送り、ゲストＯＳのサスペンド処理が完了した後にＶＭＭがデバイスの割り当て変更処理を実行することを特徴とする、デバイス割り当て変更方法。
【請求項２】
請求項１のデバイス割り当て変更方法であって、
ＶＭＭの電源制御通知処理部を用いて、前記仮想的なサスペンド指示をゲストＯＳに送ることを特徴とするデバイス割り当て変更方法。
【請求項３】
請求項２のデバイス割り当て変更方法であって、
ゲストＯＳがサスペンドから復帰したときに実行するゲストＯＳのＩ／Ｏ再構成処理に関わるＩ／Ｏ命令をトラップして、デバイス割り当て変更後の論理デバイスを構成するようにＶＭＭがＩ／Ｏ命令をエミュレートすることを特徴とするデバイス割り当て変更方法。
【請求項４】
請求項１乃至３のいずれかに記載のデバイス割り当て変更方法であって、
実行中のゲストＯＳに対するデバイス割り当て変更要求として、構成する論理デバイス毎に、論理デバイスに対応付ける物理デバイス、物理デバイスを直接割り当てデバイスとするのかエミュレータデバイスとするのかの指定、対応付けた物理デバイスを再初期化するためのデータを含む変更要求をＶＭＭが受け付け、割り当て変更を実行することを特徴とするデバイス割り当て変更方法。
【請求項５】
請求項４のデバイス割り当て変更方法であって、
変更要求に直接割り当てデバイスとするデバイスが含まれている場合、そのデバイスが他のゲストＯＳに割り当てられているならば、割り当て変更をエラー終了とすることを特徴とするデバイス割り当て変更方法。
【請求項６】
請求項４のデバイス割り当て変更方法であって、
ゲストＯＳに校正変更前とは異なる物理デバイスを割り当てることを特徴とするデバイス割り当て変更方法。
【請求項７】
請求項４のデバイス割り当て変更方法であって、
ＶＭＭがＩ／Ｏエミュレーションによって構成する論理デバイスを、エミュレーション用に割り当てるエミュレータデバイスと同一形式のデバイスとしてゲストＯＳに提供するよう構成することを特徴とするデバイス割り当て変更方法。
【請求項８】
請求項４のデバイス割り当て変更方法であって、
デバイス割り当て変更処理において、割り当て変更処理の対象となった物理デバイスについて、その物理デバイスに対応付けられた論理デバイスの再初期化データを用いてＶＭＭが物理デバイスを再初期化することを特徴とするデバイス割り当て変更方法。
【請求項９】
請求項７のデバイス割り当て変更方法であって、
デバイスの再初期化処理にてイーサーネットアダプタへのＭＡＣアドレスやＩＰアドレスの設定が可能なことを特徴とするデバイス割り当て変更方法。
【請求項１０】
請求項７のデバイス割り当て変更方法であって、
デバイスの再初期化処理にてファイバチャネルアダプタへのポートＩＤの可能なことを特徴とするデバイス割り当て変更方法。
【請求項１１】
請求項１乃至９のいずれかに記載のデバイス割り当て変更方法であって、
前記ゲストＯＳから直接デバイス操作可能とは、ゲストＯＳのＩ／Ｏ操作をエミュレーションなしにＣＰＵで実行可能であることを特徴とするデバイス割り当て変更方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一台の計算機上で仮想計算機や論理分割により複数のゲストオペレーティングシステムを実行する方法に関する。特に、ゲストＯＳへのデバイスの割り当て方法に関する。
【背景技術】
【０００２】
１台の計算機上に仮想的な計算機を構成し、複数のオペレーティングシステム（ＯＳ）を並行して実行する技術が広く普及し始めている。これらを実現する技術としては、仮想計算機方式と論理分割方式（ＬＰＡＲ）の２つがある。これらの技術によって実行するＯＳをゲストＯＳと呼ぶ。
【０００３】
仮想計算機方式は、仮想計算機モニタ(ＶＭＭ)と呼ばれる制御ソフトウェアが、計算機のハードウェアやプロセッサの動作を制御する特別なレジスタ（制御レジスタ）を仮想化し、複数の仮想的な計算機を作り出す。ゲストＯＳは、ＶＭＭが作り出した仮想計算機上で実行する。具体的には、ＶＭＭはゲストＯＳが実行するＩ／Ｏ命令や制御レジスタ操作等のＣＰＵの特権命令をトラップしてエミュレートし、仮想計算機環境を作り出す。仮想計算機方式では、複数のゲストＯＳが１つのＩ／Ｏデバイスを共有できる。これは、ＶＭＭが、ゲストＯＳに見せている仮想的なＩ／Ｏデバイスへのアクセスをトラップして、実際のデバイスへのアクセスに変換して処理（エミュレート）するためである。これによって、計算機に搭載されているＩ／Ｏデバイスへの依存度の低い、柔軟な仮想計算機環境を実現できる。
【０００４】
仮想計算機方式のＩ／Ｏ制御では、ゲストＯＳによるＩ／Ｏ操作はＶＭＭがエミュレートするためオーバーヘッドが発生する。また、仮想計算機のＶＭＭは他の並行実行しているゲストＯＳのＩ／Ｏ操作もエミュレートするため、オーバーヘッドが他のゲストＯＳの処理に依存し、性能予測が難しいという課題がある。
【０００５】
一方、論理分割方式は、ハイパバイザと呼ばれる制御ソフトウェアが計算機資源を論理的に分割することによって、複数の計算機を作り出す。ハイパバイザは、プロセッサや他のハードウェアが参照するテーブルやレジスタを操作して、計算機を論理的に分割する。ゲストＯＳは、ハイパバイザによって論理的に分割された区画（パーティション）内で実行する。ゲストＯＳが実行する命令は、エミュレートされることなくプロセッサで直接実行される。このため、ゲストＯＳは同じ計算機で実行する他のゲストＯＳの影響を受け難く、高性能かつ高信頼な仮想計算機環境を実現できる。一方、論理分割方式はハードウェア資源を分割することによって複数の仮想計算機を作り出すため、Ｉ／Ｏデバイスを複数のゲストＯＳで共有することはできない。論理分割方式においてゲスト間でＩ／Ｏデバイスを共有するには、デバイス側の対応が必要となる。
【０００６】
以上のように、仮想計算機は特権命令のエミュレーションによって、論理分割はハイパバイザによる計算機の分割によって、ゲストＯＳが実行する仮想的な計算機を構成する。
【０００７】
これらの技術は、従来はメインフレームで主に実現されていた。これらを高性能で実現するには、仮想計算機に対応したプロセッサ、ＶＭＭのエミュレーション処理をハードウェアで実行する機構等、特別なハードウェアが必要だったためである。近年のプロセッサの性能向上により、これらの処理をプロセッサで実行しても十分な性能が得られるようになったため、仮想計算機や論路分割方式はメインフレーム以外の一般の計算機にも普及し始めている。
【０００８】
仮想計算機方式には、実行中のゲストＯＳをＶＭＭが実行している他の計算機に移動（マイグレート）できるという特徴がある。移動先のＶＭＭがゲストＯＳの必要とするＩ／Ｏデバイスをエミュレートするよう構成すれば、移動先の計算機上でゲストＯＳを継続して実行できる。
【０００９】
これらの技術を用いて、複数の計算機で実行しているシステムの一台の計算機への統合、計算機の負荷に応じたゲストＯＳのマイグレーションによる負荷バランス、計算機障害時のゲストＯＳのマイグレーションによる高可用化等が実現されている。
【００１０】
また、仮想計算機では、ゲストＯＳから直接Ｉ／Ｏデバイスを操作可能とするハードウェア機構が実現されている。この１つにＩ／Ｏアドレス変換機構がある。通常、Ｉ／ＯデバイスにＤＭＡによるデータ転送を指示する場合、ＯＳはＩ／Ｏデバイスにデータ転送先の物理アドレスを指定する。ＯＳが仮想計算機で実行する場合、ゲストＯＳが指示する物理アドレスはＶＭＭによって仮想化された物理アドレスであり、実際の物理アドレスではない。一方、デバイスから見える物理アドレス空間は実際の物理アドレス空間である。Ｉ／Ｏアドレス変換機構は、デバイスからのＤＭＡ転送の転送先アドレスを、デバイスを使用しているゲストＯＳに対応して変換し、ゲストＯＳに割り当てられている物理メモリ領域にデータが転送されるようにする。ＶＭＭがゲストＯＳの構成やメモリ割り当ての状態に従ってＩ／Ｏアドレス変換機構を設定すれば、ゲストＯＳは実際の物理メモリアドレスを知らなくとも、デバイスに直接Ｉ／Ｏ指示を出すことが可能となる。Ｉ／Ｏアドレス変換機構は、例えば、非特許文献１のように実現される。
【００１１】
加えて、特許文献１では、ゲストＯＳが直接利用しているＩ／ＯデバイスをＶＭＭのエミュレーションによる利用に切り替える、逆にＶＭＭのエミュレートで利用されているＩ／ＯデバイスをゲストＯＳへの直接割り当てに切り替える方式が示されている。
【００１２】
【特許文献１】米国特許 ＵＳ−４，８８７，２０２
【非特許文献１】“AMD I/O Virtualization  Technology (IOMMU) Specification,” pp.14, “2.2.5 Virtual Machine Guest Access to Devices,” [online], 2006年2月掲載、米国AMD社、2006年7月24日検索、インターネット<URL:http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/34434.pdf>
【発明の開示】
【発明が解決しようとする課題】
【００１３】
仮想計算機におけるゲストＯＳへのデバイスの割り当て方法において、エミュレーションによる割り当てと、ゲストＯＳから直接操作可能な直接割り当てとで、ゲストＯＳ実行中に割り当て方法を切り替えることが難しいという課題がある。ゲストに直接割り当てたデバイスに仕掛中のＩ／Ｏ処理がある時に、デバイスのゲストＯＳへの割り当てを変更できない。メインフレームでは、Ｉ／Ｏやデバイスが規格化されているため、標準の命令によってデバイスの活動状態を知ることができるため、デバイスが活動していない間にデバイスの割り当てを変更できる。しかし、メインフレーム以外の通常の計算機では、一般には、デバイスの状態を知ることができない。したがって、割り当ての変更は困難である。
【課題を解決するための手段】
【００１４】
本発明は、ＶＭＭ内に自走されるゲストＯＳに仮想的なサスペンド割り込みの送信と、ゲストＯＳにサスペンドからの復帰処理を開始させる電源制御通知処理、ゲストＯＳのサスペンド処理をトラップするゲスト電源処理、ゲストＯＳのサスペンド中にＶＭＭの論理デバイス定義を更新するＩ／Ｏ構成変更処理、ゲストＯＳがサスペンドから復帰したときに実行するＩ／Ｏ再構成処理が発行するＩ／Ｏ命令をエミュレートして新しい論理デバイス構成をゲストＯＳに提供するゲストＩ／Ｏエミュレート処理とで、ゲストへのデバイス割り当て変更を実現する。
【発明の効果】
【００１５】
本発明によれば、ゲストＯＳに見せるＩ／Ｏデバイスの割り当てを、ゲストＯＳの実行中に変更可能となる。特に、ゲストＯＳが直接利用可能なようにデバイスを割り当てている場合でも、デバイス割り当ての構成を変更可能である。これによって、Ｉ／Ｏデバイスを直接操作可能な直接割り当てと、ＶＭＭのエミュレーションによってＩ／Ｏ操作を実施するエミュレート割り当てとを、ゲストＯＳ実行中に切り替え可能とする。
【発明を実施するための最良の形態】
【００１６】
以下に図面を用いて本発明の実施の形態を説明する。
【実施例１】
【００１７】
図１は、本発明の実施の第一の形態における計算機の構成を示す。第一の実施の形態では、ゲストＯＳに対するＩ／Ｏデバイスの割り当てを、ゲストＯＳから直接アクセス可能な直接モードと、ＶＭＭによるエミュレーションにより複数のゲストＯＳから利用可能とするエミュレートモードとの間で切り替える方法を示す。
【００１８】
本実施の形態では、計算機の電源制御機能を用いてＶＭＭとゲストＯＳ間の連携を実現する。計算機の電源制御は、ＡＣＰＩ(Advanced Configuration and Power Interface)として標準化されており、多くの計算機やＯＳで実装されている。本実施の形態に含まれる電源制御に関わる処理（サスペンド処理）は、ＡＣＰＩに準拠した処理と同等である。
【００１９】
計算機１００は一般的な構成の計算機であり、ＣＰＵ１０１、メモリ１０２、Ｉ／Ｏデバイスが接続するＩ／Ｏバスがバス制御装置１０３によって接続し、Ｉ／Ｏバスにはディスクアダプタ１０４と１０５、ネットワークアダプタ１０６と１０７が接続している。Ｉ／Ｏバスにはキーボード、ディスプレイ等のその他のデバイスも接続しているが、ここには示していない。また、接続するデバイスの数は、ここに示した通りでなくても良い。
【００２０】
ディスクアダプタ１０４と１０５は、ストレージスイッチ１１０を介してストレージ装置１３０に接続している。この間の接続は、例えば、ファイバチャネルのような接続である。ストレージ装置１３０には、計算機１００がディスクアダプタ１０４と１０５を介して参照可能な論理ボリューム１３１ないし１３３が構成されている。ゲストＯＳは、これらの論理ボリュームを参照して実行する。
【００２１】
ネットワークアダプタ１０６と１０７は、ネットワークスイッチ１２０に接続している。この間の接続は、例えば、イーサーネットのような接続である。
【００２２】
ＣＰＵ１０１は、仮想計算機を実現可能な最低限の機能を有するＣＰＵである。ＣＰＵ１０１は、Ｉ／Ｏ操作や制御レジスタアクセスといったすべての命令を実行可能な特権モードと、限定された命令のみを実行可能な非特権モードを持つ。ＣＰＵ１０１が非特権モードで実行中に特権モードでのみ実行が許可される命令を実行するとトラップが発生する。ＣＰＵ１０１は実行モードを特権モードに遷移し、トラップを処理するトラップハンドラに制御を移す。
【００２３】
一般に、ＯＳのカーネルは特権モードで実行し、ＣＰＵ１０１の特権命令を利用して計算機全体を制御する。ユーザモードで実行するプログラムは非特権モードで実行し、計算機資源を利用する場合は特権モードに遷移してカーネルの処理を呼び出す。
【００２４】
仮想計算機環境では、全体の制御を実行するＶＭＭが特権モードで実行し、ＯＳのカーネルはＶＭＭの制御の下、非特権モードで実行する。ＶＭＭは、ＯＳが実行する特権命令をＶＭＭのトラップ処理でエミュレートして、仮想計算機を実現する。
【００２５】
バス制御装置１０３は、Ｉ／ＯデバイスからのＤＭＡによるメモリ１０２へのデータ転送先を、転送元のＩ／Ｏデバイスに合わせて変換するＩ／Ｏアドレス変換装置１０８を備えているとする。これによって、ゲストＯＳは、Ｉ／Ｏデバイスを直接利用可能となる。
【００２６】
図２は、ゲストへのデバイス割り当てモードの違いを模式的に示した図である。
【００２７】
図２（ａ）は、ゲストＯＳにＩ／Ｏデバイスを直接モードで割り当てている状態を示した図である。２つのゲスト２１０と２２０がＶＭＭ２３０の構成した仮想計算機上で実行している。ＶＭＭ２３０は、ディスクアダプタ１０４とネットワークアダプタ１０６をゲスト２１０が、ディスクアダプタ１０５とネットワークアダプタ１０７をゲスト２２０が直接に利用できるようＩ／Ｏアドレス変換装置１０８を設定し、それぞれのゲストＯＳ２１１と２２１を実行する。また、ＶＭＭ２３０は、ゲスト２１０を実行する際に、ゲストＯＳ２１1が発行するアダプタ１０４とアダプタ１０６に対するＩ／Ｏ命令をトラップしないように、ＣＰＵ１０１を構成する。ゲスト２２０を実行する際も同様である。直接割り当てされているデバイスが発生する割り込みは、ＶＭＭ２３０が捕獲し、そのデバイスを割り当てられているゲストＯＳに送信される。
【００２８】
この構成では、ゲストに直接割り当てされているデバイスに対するＩ／Ｏ命令は、ＶＭＭ２３０にトラップされることなく直接ＣＰＵ１０１で実行される。したがって、オーバーヘッドが少なく、他のゲストＯＳに影響されない高信頼なゲストＯＳの実行が可能である。
【００２９】
図２（ｂ）は、一部のデバイスがエミュレートモードで割り当てられている状態を示している。ディスクアダプタ１０４とネットワークアダプタ１０６が、ＶＭＭ２３０のＩ／Ｏエミュレータ２５０によるエミュレーションによって、ゲスト２１０と２４０に共有されている様子を示している。この場合、アダプタ１０４とアダプタ１０６に対するＩ／Ｏ命令をトラップするようＣＰＵ１０１を構成して、ゲスト２１０を実行する。ＶＭＭ２３０はトラップを捕獲し、Ｉ／Ｏエミュレータ２５０にＩ／Ｏ処理を実行させる。この場合のデバイスからの割り込みはＶＭＭ２３０が捕獲し、Ｉ／Ｏエミュレータ２５０が割り込みを処理して関係するゲストＯＳに仮想的な割り込みを配送する。
【００３０】
本発明は、ゲストＯＳをシャットダウンすることなく、図２（ａ）と図２（ｂ）の間の遷移を実現する。以下に、これを実現するためのゲストＯＳおよびＶＭＭの構造について説明する。
【００３１】
図３に、本発明の第一の実施の形態のＶＭＭ２３０とゲストＯＳ２１１の構成を示す。ゲストＯＳ２１１は、ＡＣＰＩ対応のＯＳであるとする。
【００３２】
ゲストＯＳとＶＭＭは、メモリ１０２に格納されたソフトウェアをＣＰＵ１０１が実行することで実現される。
【００３３】
まず、ＶＭＭ２３０の構成について説明する。論理デバイステーブル３０１は、ＶＭＭ２３０が各ゲストに提供する論理的なデバイスの構成情報を保持する。図４に論理デバイステーブルの例を示す。保持する情報は、提供する論理デバイス、その論理デバイスにゲストＯＳが割り当てた論理Ｉ／Ｏアドレス、ＶＭＭ２３０によるＩ／Ｏエミュレート処理の要否、エミュレートする場合に実際のＩ／Ｏ処理を実行させる物理デバイスである。再初期化データについては、後述する。
【００３４】
図４には２つのテーブルを示しているが、それぞれ図２の（ａ）と（ｂ）の構成に対応した論理デバイステーブル３０１を示している。例えば（ａ）においてゲスト１は、論理デバイスとしてディスクアダプタ１とネットワークアダプタ１を要し、それぞれに対してディスクアダプタ１０４とネットワークアダプタ１０６が直接モードで割り当てられていることを示す。一方（ｂ）のゲスト１は、（ａ）と同様に論理デバイスとしてディスクアダプタ１とネットワークアダプタ１を要するが、それぞれに対してディスクアダプタ１０４とネットワークアダプタ１０６をエミュレートモードで割り当て、ＶＭＭ２３０のＩ／Ｏエミュレートで構成することを示す。この場合、ゲストＯＳ２１１がＩ／Ｏアドレス１００番地や２００番地にアクセスしたときにトラップが発生し、ＶＭＭ２３０がＩ／Ｏエミュレート処理を実行する。
【００３５】
ゲストの論理デバイスに対してどの物理デバイスを対応付けるかは、ゲストの構成定義に記述する。ＶＭＭ２３０は、各ゲストの構成定義を読み込んで、論理デバイステーブル３０１を作成する（構成定義の内容は省略）。この構成定義は、システム管理者が作成しても良いし、何らかの管理プログラムによって自動的に割く際された定義であっても良い。構成定義の作成方法は、本発明では論じない。
ＶＭＭ２３０は、論理デバイステーブル３０１の内容にしたがって、ゲストＯＳ２１１が実行するＩ／Ｏ命令をトラップしてエミュレートするかどうかを、ゲスト実行時にＣＰＵ１０１に指示する。具体的には、ＣＰＵ１０１の制御レジスタへの設定や、ＣＰＵ１０１が参照するメモリ１０２内のテーブルの設定を行う。  例えば、図４（ｂ）の例では、ＶＭＭ２３０は、ゲスト１のＩ／Ｏアドレス１００番地と２００番地の参照についてはＩ／Ｏエミュレーションが必要なのでトラップを発生させるようにＣＰＵ１０１を設定し、ゲスト２のＩ／Ｏアドレス３００番地と４００番地の参照についてはＩ／Ｏデバイスを直接操作できるようにトラップを発生させないようにＣＰＵ１０１を設定する。
【００３６】
ゲストＯＳ２１１がエミュレーションの必要なＩ／Ｏデバイスを操作するＩ／Ｏ命令を実行すると、ＣＰＵ１０１はトラップを生成する。このトラップを受けて、ゲストＩ／Ｏエミュレート処理３０２がゲストＯＳ２１１の実行するＩ／Ｏ命令をエミュレートする。ゲストＩ／Ｏエミュレート処理３０２は、各ゲストＯＳのＩ／Ｏ操作によるＩ／Ｏデバイスの状態を保持し、必要に応じて論理デバイステーブル３０１に示された物理デバイスに対して実際のＩ／Ｏ処理を発行して、Ｉ／Ｏ処理を実行する。
【００３７】
Ｉ／Ｏエミュレート処理３０２は、参照されたＩ／Ｏアドレスから対象論理デバイスを特定し、ゲスト電源制御処理３０３とゲストデバイスエミュレート処理３０４に処理を振り分け、Ｉ／Ｏ命令をエミュレートする。
【００３８】
ゲストデバイスエミュレート処理３０４は、ゲストによる論理デバイス操作をエミュレートする。ゲスト電源制御処理３０３は、ゲストＯＳによる仮想計算機の電源断、一時休止（サスペンド）・再開等の処理を実施する。本実施形態に関係する処理については、後述する。
【００３９】
デバイス構成変更処理３０５は、ゲストに見せる論理デバイスの構成を変更する。電源制御通知処理３０６は、デバイス構成を変更する際に、ゲストＯＳ２１１に仮想的なサスペンド要求割り込みを送信する。また、ゲストＯＳ２１１をサスペンド状態から再開させる処理も実施する。
【００４０】
ゲスト管理処理３０７は、ゲスト資源の割り当て、ゲストの起動・停止といった処理を実装している。
【００４１】
次に、ゲストＯＳ２１１の構成について説明する。
電源制御部３２０は、電源制御割り込みハンドラ３２２とサスペンド処理３２１を含む。電源制御割り込みハンドラ３２２は、計算機の電源状態の変更を要求する割り込みを受けて処理する。ここでは、ＶＭＭ２３０の電源制御通知処理３０６が送信する仮想のサスペンド要求割り込みを受信し処理する。
【００４２】
サスペンド処理３２１は、ゲストＯＳ２１１の実行をＩ／Ｏデバイスの電源を切断した状態で中断し、また、その状態からの再開処理を実装する。
【００４３】
Ｉ／Ｏ制御部３１０は、計算機のＩ／Ｏ資源全体を管理する。この場合、ＶＭＭ２３０によって作り出された論理デバイス資源を管理する。Ｉ／Ｏ制御部３１０には、Ｉ／Ｏ構成管理処理３１２、デバイスのオン・オフを実施するデバイス制御処理３１１が含まれる。Ｉ／Ｏ構成管理処理３１２は、計算機に接続されているＩ／Ｏデバイスの列挙、それぞれを操作するためのＩ／Ｏアドレスや割り込みといったＩ／Ｏ資源の割り当て等を実施する。
【００４４】
次に、図２の（ａ）から（ｂ）にＩ／Ｏデバイスの割り当てを変更する手順を説明する。（ａ）の状態から新たにゲスト２４０を実行するとして説明する。
計算機１００の管理者、あるいは、管理プログラムは、ゲスト３（ゲスト２４０）を計算機１００で実行しようと決定すると、ゲスト１（ゲスト２１０）に直接割り当てされているデバイスをエミュレートモードに変更するために、ＶＭＭ２３０のデバイス構成変更処理３０５に構成変更要求を送信する。構成変更要求は、図４（ｂ）のゲスト１の論理デバイス定義情報を含むとする。例えば、図６に示すような情報が構成変更要求に含まれる。デバイスの再初期化データについては後述する。
【００４５】
構成変更処理３０５の処理手順を説明する。図５に処理３０５の処理フローを示す。まず、変更要求にＩ／Ｏデバイスの直接割り当てが含まれる場合、その物理デバイスを、現在利用しているゲストがないか論理デバイステーブル３０１を参照して確認する（ステップ５０１）。存在する場合は、エラーとして処理を終了する。物理デバイスを直接割り当てる場合は、構成変更の前にそのデバイスを使用しているゲストＯＳを停止するか、ゲストＯＳからのデバイスの使用を停止する必要がある。この処理については、本発明では論じない。
【００４６】
そのようなデバイスが存在しない場合は、構成変更処理中であることをメモリ上の予め定めたアドレスに記録し（ステップ５０２）、電源制御通知処理３０６からゲストＯＳ２１１にサスペンド指示を送信する（ステップ５０３）。
【００４７】
指示送信後、ゲストＯＳ２１１がサスペンド要求を処理して、仮想計算機の電源状態をサスペンドとする処理を実行するのを待機する（ステップ５０４）。このサスペンド処理は、電源制御を実施する予め定められたＩ／Ｏアドレスへのアクセスで実現される。ＶＭＭ２３０のゲスト電源制御処理３０３は、構成変更処理中にゲストがこのＩ／Ｏアドレスにアクセスした場合に、構成変更に伴うゲストＯＳ２１１のサスペンド処理が完了したとして、ステップ５０４で待機状態にある処理を再開させる。
【００４８】
ゲストＯＳ２１１がサスペンド状態に遷移できない場合に備えて、ステップ５０４の待機状態は一定時間の後タイムアウトしてもよい。待機がタイムアウトした場合は、構成変更中の記録をクリアし（ステップ５２０）、エラーとして構成変更処理を終了する。
【００４９】
一般に、ゲストＯＳ２１１に物理デバイスを直接モードで割り当てて、ゲストＯＳ２１１から直接操作可能としている場合、ＶＭＭ２３０はそのデバイスの動作状態を知ることができない。一方、本発明においては、ゲストＯＳ２１１のサスペンド処理が完了した時点で、ゲストＯＳ２１１の論理デバイスの処理は停止しており、仕掛中のＩ／Ｏ操作はなくなっていることが保証できる。この例では、ディスクアダプタ１０４とネットワークアダプタ１０６は、この時点で停止している。これによって、この時点で、論理デバイスの構成を変更することが可能となる。
【００５０】
以降のステップ５０５ないし５０８では、論理デバイステーブル３０１を指定の内容に更新する。続いて、ゲストＯＳ２１１が利用する物理デバイスを再初期化する（ステップ５０９）。ゲストＯＳ２１１に割り当てる物理デバイスは、ゲストＯＳ２１１が実行するのに必要なストレージ装置１３０内の論理ボリュームやネットワークに接続可能でなければならない。通常、ストレージやネットワークに接続するための初期化処理はＯＳ起動時に実行され、それ以降の処理はこの初期化処理によって確立された状態に依存している。このため、構成変更処理３０５は、構成変更が発生する物理デバイス毎に、変更要求に含まれる再初期化データと、論理デバイステーブル３０１に記録されている再初期化データとを合わせてＩ／Ｏデバイスの再初期化処理を行い、デバイスを利用するゲストが利用する資源に接続可能な状態にＩ／Ｏデバイスを再初期化する。
【００５１】
例に示した再初期化データは、ネットワークアダプタ１０６については、ゲストＯＳ２１１に提供する仮想的なネットワークアダプタの仮想的なＭＡＣアドレスであり、ディスクアダプタ１０４については、ゲストＯＳ２１１に提供する仮想的なディスクアダプタが備える仮想的なポートＩＤである。これらをそれぞれのアダプタ１０６と１０４に設定する処理を、再初期化処理として実施する。
最後に構成変更中のフラグをクリアし（ステップ５１０）、ゲストＯＳ２１１の実行を再開させる(ステップ５１１)。ＶＭＭ２３０は、サスペンド状態からの復帰処理が格納されている規定のアドレスからゲストＯＳ２１１の実行を再開するように設定し、ゲストＯＳ２１１の実行をスケジュールする。
【００５２】
次に、ＶＭＭ２３０の構成変更処理３０５と連動して実行するゲストＯＳ２１１側の処理について説明する。図７に、ゲストＯＳ２１１で実行する処理のフローを示す。
【００５３】
はじめに、ＶＭＭ２３０が送信したサスペンド要求割り込みの処理を説明する。構成変更処理のステップ５０３にて、ＶＭＭ２３０はサスペンド指示要求を仮想的な割り込みとして送信している。これを受けて、ゲストＯＳの電源制御割り込みハンドラ３２２が実行する（ステップ７０１）。ハンドラ３２２は、ゲストＯＳ２１１の実行を一時中断するために、デバイス制御処理３１１に全デバイスの停止要求を発行する（ステップ７０２）。
【００５４】
デバイス制御処理３１１は要求を受けて、構成されている全てのデバイスのデバイスドライバ３３０に対して、デバイス動作を停止する準備をするよう指示する。デバイスドライバ３３０は、Ｉ／Ｏ操作の受付を延期するよう設定し、仕掛かり中のＩ／Ｏ操作がある場合は完了まで待機して、デバイスを停止可能な状態とする。全てのデバイスが停止可能な状態になったら、デバイス制御処理３１１はデバイスに停止指示を発行する。この例では、デバイス制御処理３１１は、アダプタ１０４と１０６を制御するデバイスドライバに対して、停止準備と停止の指示を発行する。
【００５５】
指示のタイミングによってはデバイスを停止できない場合もある。続くステップ７０３では、デバイス停止処理が成功したか判定する。失敗した場合は、サスペンド処理を終了する。
【００５６】
停止処理が成功した場合は、計算機の電源状態をサスペンド状態に遷移させる（ステップ７０４）。具体的には、ＶＭＭ２３０によって定義された論理的な電源制御用のＩ／Ｏアドレスにアクセスして、仮想計算機の状態をサスペンド状態に遷移させる。このゲストＯＳ２１１のＩ／Ｏ操作はＶＭＭ２３０によってトラップされて、ステップ５０４の待機状態を解除する。これ以降、ゲストＯＳ２１１はサスペンド状態から復帰するまで実行しない。
【００５７】
次に、サスペンド状態からの再開処理について説明する。一般に、サスペンド処理では、サスペンドから復帰してＣＰＵ１０１が実行を再開した後、制御がサスペンド再開処理に移るように設定している。ここでも、サスペンドから復帰するとステップ７１１からの処理が実行されるように設定しているとする。
まず、再開処理は、Ｉ／Ｏ構成管理処理３１２にＩ／Ｏデバイス設定を再構成するように指示する（ステップ７１１）。
【００５８】
Ｉ／Ｏ構成管理処理３１２は、計算機に接続しているＩ／Ｏデバイスを列挙し、それぞれにＩ／Ｏアドレス等のＩ／Ｏ資源を割り付ける（ステップ７１２）。
ＰＣＩバスに接続しているデバイスの再構成を例に説明する。ＰＣＩバスの規約では、規約により定められたＩ／Ｏアドレスにあるレジスタ（コンフィグレーションレジスタ）にアクセスすることにより、ＰＣＩバスに接続している全てのデバイスを列挙し、デバイスの種類、それぞれのデバイスが必要とするＩ／Ｏ資源を取得できる。また、同様に特定のＩ／Ｏアドレスへの書き込みにより、ＰＣＩバスに接続しているデバイスを操作するためのＩ／Ｏアドレスを、デバイスに割り付けることができる。
【００５９】
Ｉ／Ｏ構成管理処理３１２は、ＰＣＩバスのコンフィグレーションレジスタにアクセスして全てのデバイスを列挙する。この際、コンフィグレーションレジスタへのアクセスはＩ／Ｏ命令であるため、ＶＭＭ２３０によってエミュレートされる。ＶＭＭ２３０は、論理デバイステーブル３０１に従って、ゲスト１に定義されている論理デバイスが存在するかのように、コンフィギュレーションレジスタのアクセスをエミュレートする。物理デバイスを直接モードで割り当てる論理デバイスについては、実際の物理デバイスの情報をゲストＯＳに見せる。これによって、ゲストＯＳの論理デバイスアクセスが物理デバイスの直接アクセスとなるように、ゲストＯＳ２１１でのＩ／Ｏ資源の設定が可能となる。
【００６０】
ここでゲストＯＳ２１１に提供する論理デバイスは、計算機１００に実際に接続しているデバイスと同種のデバイスとする。これによって、Ｉ／Ｏデバイスの割り当て方法を変更しても、それを制御するデバイスドライバを変更することなくＩ／Ｏ構成の変更処理だけでゲストＯＳの実行を継続でき、ゲストＯＳを停止させる必要がなくなる。
【００６１】
Ｉ／Ｏ構成管理処理３１２は、全てのデバイスの列挙が完了すると、それぞれのデバイスにＩ／Ｏアドレス等のＩ／Ｏ資源を割り当てる。割り当てるＩ／Ｏ資源は、デバイスが要求するＩ／Ｏアドレスや、接続している他のデバイスの構成を勘案して、Ｉ／Ｏ資源の衝突が発生しないように算出される。
【００６２】
デバイスへのＩ／Ｏアドレスの割り当てもコンフィギュレーションレジスタへのアクセスであるため、ＶＭＭ２３０によってエミュレートされる。ＶＭＭ２３０は、ゲストＯＳ２１１がＩ／Ｏデバイスに割り当てたＩ／ＯアドレスをＩ／Ｏ命令のトラップを通じて求め、論理デバイステーブル３０１に記録する（ステップ７２１）。更に、割り当てられたＩ／Ｏアドレスへのアクセスでトラップを発生するかを判定し、それに合わせてＣＰＵ１０１を構成する（ステップ７２２）。これによって、物理デバイスを直接割り当てられている論理デバイスを参照するＩ／Ｏ命令はＣＰＵ１０１によって直接実行され、エミュレートモードでデバイスが割り当てられている論理デバイスを参照するＩ／Ｏ命令はＶＭＭ２３０によってエミュレートされるようトラップを発生することとなる。この時に、Ｉ／Ｏアドレス変換装置１０８も再設定する。具体的には、直接割り当てとした物理デバイスからのＤＭＡ転送が、デバイスを利用するゲストＯＳに割り当てられているメモリに正しく転送されるように設定する。また、Ｉ／Ｏエミュレートに利用されるデバイスのＤＭＡの転送先がＶＭＭ２３０が管理するメモリ領域となるように設定する。
【００６３】
この例では、論理デバイスのディスクアダプタ１とネットワークアダプタ１に割り当てられている論理Ｉ／Ｏアドレス１００番地と２００番地へのアクセスで、トラップが発生するように設定する。
【００６４】
全てのデバイスの構成処理の終了後、ゲストＯＳは、サスペンド時点の処理から再開する（ステップ７１３）。
【００６５】
以上により、論理デバイスへの物理デバイスの割り当てを、直接割り当てからエミュレート割り当てに変更できる。例では、ゲスト１のデバイスを直接割り当てからエミュレート割り当てに変更できる。
【００６６】
次に、ゲストＯＳの起動処理について説明する。上記の処理から引き続いてゲスト３を起動するとして説明する。ゲスト３を起動するには、ゲスト３の構成定義情報をパラメータとして、ゲスト管理処理３０７にゲストの起動を指示する。これ以降のゲスト起動処理を図８に示す。
【００６７】
まず、与えられたゲストの構成定義情報を読み取り（ステップ８０１）、論理デバイスの構成情報を論理デバイステーブル３０１に設定する（ステップ８０２）。この時点で、テーブル３０１の内容は図４（ｂ）の構成となる。
【００６８】
続いて、テーブル３０１を参照して、ゲスト３の論理デバイスに割り当てる物理デバイスの再初期化処理を実行する（ステップ８０３）。これで、ゲスト３が必要とする資源に物理デバイスからアクセス可能となる。例えば、ディスクアダプタ１０４は、ゲスト１とゲスト３から利用されるので、それぞれで定義されている論理デバイスの再初期化データを用いて、アダプタ１０４を再初期化する。ネットワークアダプタ１０６も同様である。最後に、ゲストＯＳのイメージをロードして、ゲストＯＳを走行可能状態とする（ステップ８０４）。
【００６９】
以上により、ゲスト１に直接利用されていたディスクアダプタ１０４とネットワークアダプタを、ＶＭＭ２３０によるＩ／Ｏエミュレートで利用するようにデバイス割り当てを変更し、そのデバイスをゲスト１とゲスト３にエミュレートモードで割り当て、ゲストＯＳ２１１と２４１を実行させることができる。
【００７０】
ステップ８０４のロード処理は、必ずしも、ゲストＯＳをブートするイメージでなくてともよい。ゲストＯＳの実行中のある一時点の状態を表すイメージをロードして、その時点からのゲストＯＳの実行を再開させるものであっても良い。この場合、ゲストＯＳ再開がサスペンドからの復帰処理と同じ処理を実行するように、ゲスト中断時の状態を構成しておけば良い。
【００７１】
加えて、ある一時点のイメージは他の計算機上で実行していたゲストＯＳのイメージであってもよい。ゲストＯＳに提供する論理デバイスを構成可能な物理デバイスが存在している計算機であれば、そのイメージのゲストＯＳを実行可能である。
【００７２】
ゲストＯＳ間でエミュレート割り当てにより共有している物理デバイスを、ある１つのゲストＯＳが直接利用するようにデバイス割り当てを変更することも可能である。まず、当該の物理デバイスを利用しているゲストＯＳのデバイス構成を変更するか、ゲストＯＳを停止させる必要がある。この後、前述のデバイス構成変更処理３０５によって、ゲストＯＳに物理デバイスを直接割り当てするように構成を設定すればよい。
【００７３】
以上により、ゲストＯＳに提供する論理デバイスへの物理デバイスの割り当てを、ゲストＯＳの実行をシャットダウンすることなく、直接割り当てとエミュレート割り当てで切り替えることが可能となる。
【００７４】
これにより、計算機資源とゲストＯＳの構成が許す限りゲストＯＳに物理デバイスを直接利用可能なように割り付けておき、資源割り当て状況が厳しくなって来たときにデバイスの割り当てを直接からエミュレートモードに切り替えるといった制御が可能となる。
【００７５】
逆に、計算機にＩ／Ｏデバイスを増設して資源割り当て状況に余裕ができたときに、性能が必要なゲストＯＳに物理デバイスを直接割り当てるようデバイス割り当て構成を変更するといった制御も可能となる。
【００７６】
また、他の計算機で実行していたゲストＯＳがマイグレートされてきたときに、デバイス構成を変更して、そのゲストＯＳが実行可能なようにデバイス割り当て構成を変更することも可能となる。逆に、マイグレート元でもデバイス構成を変更することができる。これによって、複数のゲストＯＳから構成されるシステム全体の信頼性・可用性を向上できる。
【実施例２】
【００７７】
次に、本発明の第二の実施の形態について説明する。第一の実施の形態では、ゲストの論理デバイスに対するデバイスの割り当てモードの変更方法について説明した。第二の実施の形態では、ゲストの論理デバイスに割り当てる物理デバイスを変更する方法を示す。
【００７８】
図９は、第二の実施の形態におけるゲストへのデバイスの割り当てを模式的に示した図である。（ａ）は、ゲスト２１０でゲストＯＳ２１１が実行し、デバイスとしてアダプタ１０４と１０６が直接割り当てられていることを示している。アダプタ１０５と１０７は、アダプタ１０４と１０７と同一形式の未使用のデバイスであり、ゲストＯＳ２１１が利用する論理ボリュームやネットワークに接続可能となるように物理的に接続されているとする。
【００７９】
ここで、ネットワークアダプタ１０６に障害が発生したとする。本発明によれば、ゲスト２１０に割り当てたネットワークアダプタ１０６を、未使用のネットワークアダプタ１０７に変更できる。
【００８０】
具体的には、まず、図６と同様の構成変更要求を作成する。構成変更要求の内容は、ネットワークアダプタ１に対応する物理アダプタをネットワークアダプタ１０７、ディスクアダプタ１に対応する物理アダプタをディスクアダプタ１０４とし、それぞれ割当方法を占有とする。再初期化データには、ゲストＯＳ２１１が参照する資源に接続するためのデータを指定する。この構成変更要求の作成方法については、本発明では論じない。
【００８１】
この構成変更要求をもって、ＶＭＭ２３０の構成変更処理３０５に構成変更を要求する。構成変更処理は、第一の実施の形態と同様に構成変更要求を処理する。すなわち、ゲストＯＳ２１１をサスペンドしている間に論理デバイステーブル３０１の内容を更新してデバイスを再初期化し、サスペンド再開後のＩ／Ｏ再構成処理のエミュレート処理で新しいデバイス構成をゲストＯＳ２１１に反映させる。
以上により、ゲストＯＳに割り当てたデバイスを、ゲストＯＳをシャットダウンすることなく別にデバイスに変更することができる。
【００８２】
本実施の形態では、空きデバイスをゲストＯＳに割り当てたが、他のゲストにエミュレートモードで割り当てられているデバイスを割り当てても良い。この場合、ゲストのサスペンドの間の論理デバイステーブル３０１の更新とデバイス再初期化により、デバイスがエミュレートする論理デバイスを新しく追加するよう処理すればよい。
【００８３】
これにより、例えば、不良を発生したデバイスをゲストＯＳへの割り当てから除外して、当該デバイスを交換することが可能となる。これによって、ゲストＯＳをシャットダウンすることなく不良デバイスを交換可能となり、システムの可用性を向上できる。
【産業上の利用可能性】
【００８４】
仮想計算機を利用したシステムの構成の柔軟性を高め、システム全体の信頼性、および、可用性を向上する方法として利用可能である。
【図面の簡単な説明】
【００８５】
【図１】本発明の実施の形態における計算機構成を示す図。
【図２】本発明の実施の形態におけるゲストＯＳへのデバイス割り当てを示す図。
【図３】本発明の実施の形態におけるゲストＯＳとＶＭＭの内部構成を示す図。
【図４】本発明の実施の形態における論理デバイステーブルを示す図。
【図５】本発明の実施の形態におけるデバイス構成変更処理手順を示す処理フロー。
【図６】本発明の実施の形態におけるデバイス構成変更要求の内容を示す図。
【図７】本発明の実施の形態におけるデバイス構成変更処理手順を示す処理フロー。
【図８】本発明の実施の形態におけるゲストＯＳの起動手順を示す処理フロー。
【図９】本発明の第二の実施の形態におけるゲストＯＳへのデバイス割り当てを示す図。
【符号の説明】
【００８６】
１００…計算機、１０１…ＣＰＵ、１０２…メモリ、１０３…バス制御装置、１０４と１０５…ディスクアダプタ、１０６と１０７…ネットワークアダプタ、１０８…Ｉ／Ｏアドレス変換装置、１１０…ストレージスイッチ、１２０…ネットワークスイッチ、１３０…ストレージ装置、１３１ないし１３３…論理ボリューム、２１０、２２０、２４０…ゲスト、２１１、２２１、２４１…ゲストＯＳ、２３０…ＶＭＭ、２５０…Ｉ／Ｏエミュレータ、３０１…論理デバイステーブル、３０２…ゲストＩ／Ｏエミュレート処理、３０３…ゲスト電源処理、３０４…ゲストデバイスエミュレート処理、３０５…デバイス構成変更処理、３０６…電源制御通知処理、３０７…ゲスト管理処理、３１０…Ｉ／Ｏ制御部、３１１…デバイス制御処理、３１２…Ｉ／Ｏ構成管理処理、３２０…電源制御部、３２１…サスペンド処理、３２２…電源制御割り込みハンドラ、３３０…デバイスドライバ、５０１ないし５２０、７０１ないし７２２、８０１ないし８０４…処理ステップ
【図１】
2008305034.tif 000003
【図２】
2008305034.tif 000004
【図３】
2008305034.tif 000005
【図４】
2008305034.tif 000006
【図５】
2008305034.tif 000007
【図６】
2008305034.tif 000008
【図７】
2008305034.tif 000009
【図８】
2008305034.tif 000010
【図９】
2008305034.tif 000011