(57)【特許請求の範囲】
【請求項１】
処理部と記憶部と、物理ルートポートと物理ブリッジと物理デバイスとからなる物理デバイスツリーを備えた計算機システムであって、
前記記憶部上に、複数の独立に動作可能な仮想計算機と、当該仮想計算機を管理するハイパバイザが記憶され、
前記物理ブリッジは配下の前記物理デバイスの障害情報を記録する物理レジスタを備え、
前記仮想計算機は、仮想処理部、仮想記憶部、及び仮想ルートポートと仮想ブリッジと仮想デバイスからなる仮想デバイスツリーを有し、
前記仮想ブリッジ及び前記仮想ルートポートは配下の前記仮想デバイスの障害情報を記録する仮想レジスタを備え、
前記ハイパバイザ内に、
前記物理デバイスと前記仮想デバイスの対応関係を格納する対応表と、
前記仮想デバイスから前記仮想ルートポートに至る経路に存在する仮想ブリッジ群の情報を格納する仮想ブリッジ表と、
前記対応表と前記仮想ブリッジ表を用いて、前記物理デバイスで発生した障害情報を、前記物理デバイスに対応する前記仮想デバイスから前記仮想ルートポートに至る経路上の全ての前記仮想ブリッジ及び前記仮想ルートポートの仮想レジスタに格納する割り込み処理プログラムを備える、
ことを特徴とする計算機システム。
【請求項２】
請求項１に記載の計算機システムであって、
前記仮想デバイス各々と、前記物理デバイス各々は互いに対応している、
ことを特徴とする計算機システム。
【請求項３】
請求項１に記載の計算機システムであって、
前記ハイパバイザは、前記物理デバイスから割り込みがあがった際に、前記割り込み処理プログラムを起動することにより、前記割り込みの発信元の物理デバイスを特定し、特定した前記発信元の物理デバイスが対応する前記仮想計算機の前記仮想ブリッジに障害情報を記録し、前記仮想計算機に対して仮想的な割り込みを上げ、当該仮想計算機が割り込み処理を行う、
ことを特徴とする計算機システム。
【請求項４】
請求項２に記載の計算機システムであって、
前記ハイパバイザは、前記物理デバイスから割り込みがあがった際に、前記割り込み処理プログラムを起動することにより、前記割り込みの発信元の物理デバイスを特定し、特定した前記発信元の物理デバイスが対応する前記仮想計算機の前記仮想ブリッジに障害情報を記録し、前記仮想計算機に対して仮想的な割り込みを上げ、当該仮想計算機が割り込み処理を行う、
ことを特徴とする計算機システム。
【請求項５】
請求項３に記載の計算機システムであって、
前記仮想ブリッジの前記仮想レジスタに記録される前記仮想デバイスの障害情報は、障害の発生した前記仮想デバイスを特定する情報である、
ことを特徴とする計算機システム。
【請求項６】
請求項５に記載の計算機システムであって、
前記仮想計算機は前記割り込み処理として、障害の発生した前記仮想デバイスの障害理由を特定し、特定した前記障害に対処するための処理を行う、
ことを特徴とする計算機システム。
【請求項７】
処理部と、記憶部と、物理ルートポートと物理ブリッジと物理デバイスからなる物理デバイスツリーを備えた計算機システムの制御方法であって、
前記記憶部上に、複数の独立に動作可能な仮想計算機と、当該仮想計算機を管理するためのハイパバイザを記憶し、
前記仮想計算機は、仮想処理部、仮想記憶部、及び仮想ルートポートと仮想ブリッジと仮想デバイスからなる仮想デバイスツリーを有し、
前記物理ブリッジに、配下の前記物理デバイスの障害情報を記録するための物理レジスタを設け、
前記仮想ブリッジ及び前記仮想ルートポートに、配下の前記仮想デバイスの障害情報を記録する仮想レジスタを設け、
前記ハイパバイザ内に、
前記物理デバイスと前記仮想デバイスの対応関係を格納する対応表と、
前記仮想デバイスから前記仮想ルートポートに至る経路に存在する仮想ブリッジ群の情報を格納する仮想ブリッジ表と、
前記対応表と前記仮想ブリッジ表を用いて、前記物理デバイスで発生した障害情報を、前記物理デバイスに対応する前記仮想デバイスから前記仮想ルートポートに至る経路上の全ての前記仮想ブリッジ及び前記仮想ルートポートの仮想レジスタに格納する割り込み処理プログラムを備えておき、
前記物理デバイスの一つから前記ハイパバイザに割り込みがあがった際に、前記ハイパバイザは前記割り込み処理プログラムを起動する、
ことを特徴とする計算機システムの制御方法。
【請求項８】
請求項７に記載の計算機システムの制御方法であって、
前記仮想デバイス各々と前記物理デバイス各々は互いに対応している、
ことを特徴とする計算機システムの制御方法。
【請求項９】
請求項７に記載の計算機システムの制御方法であって、
前記ハイパバイザは、前記割り込み処理プログラムを起動することにより、前記割り込みの発信元の物理デバイスを特定し、特定した前記発信元の物理デバイスが対応する前記仮想計算機の前記仮想ブリッジに障害情報を記録し、前記仮想計算機に対して仮想的な割り込みを上げ、
当該仮想計算機が前記仮想的な割り込みに対応した割り込み処理を行う、
ことを特徴とする計算機システムの制御方法。
【請求項１０】
請求項８に記載の計算機システムの制御方法であって、
前記ハイパバイザは、前記割り込み処理プログラムを起動することにより、前記割り込みの発信元の物理デバイスを特定し、特定した前記発信元の物理デバイスが対応する前記仮想計算機の前記仮想ブリッジに障害情報を記録し、前記仮想計算機に対して仮想的な割り込みを上げ、
当該仮想計算機が前記仮想的な割り込みに対応した割り込み処理を行う、
ことを特徴とする計算機システムの制御方法。
【請求項１１】
請求項９に記載の計算機システムの制御方法であって、
前記仮想ブリッジの前記仮想レジスタに記録される前記仮想デバイスの障害情報は、障害の発生した前記仮想デバイスを特定する情報である、
ことを特徴とする計算機システムの制御方法。
【請求項１２】
請求項１１に記載の計算機システムの制御方法であって、
前記仮想計算機は、前記割り込み処理として、障害の発生した前記仮想デバイスの障害理由を特定し、特定した前記障害に対処するための処理を行う、
ことを特徴とする計算機システムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想化した計算機システムに係り、特に仮想化した計算機システムにおける障害耐性向上技術に関する。
【背景技術】
【０００２】
本技術分野の背景技術として、例えばPCI-spec AER（Advanced Error Reporting：非特許文献１参照）がある。この技術では、IO(Input/Output)デバイスに障害が発生すると、途中経由する複数のPCI ブリッジに障害が発生したIOデバイスを特定する情報であるBus/Device/Function (BDF)を残したうえで、OSに割り込みを伝達する。割り込みを受けたOSは、これらPCI ブリッジに残されたBDFを辿ることでIOデバイスを特定し、デバイスドライバと協調動作することで、リセットによる回復を行い、障害処理後にPCI ブリッジの障害情報を削除する。
【０００３】
一方サーバ仮想化分野では、DMA(Direct Memory Access)アドレス変換機構という技術(特許文献1)がある。この技術は、ハイパバイザ上で動作するゲストOSが、IOデバイスを直接操作することが可能となり、高速なIOデバイス操作を実現できる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開2004-220218号公報
【非特許文献】
【０００５】
【非特許文献１】PCI Express Base 2.1 Specification, Section 7.10
【発明の概要】
【発明が解決しようとする課題】
【０００６】
仮想化環境では上述のAERに対応した仮想計算機にPCI Passthrough(又は、デバイス・パススルーと称す)を用いてIOデバイスを使用させ、仮想計算機がIOデバイスの回復を行う仕組みが求められる。この仕組みでは、IOデバイスに障害が発生した場合に仮想計算機がIOデバイスを特定し、また仮想計算機上のデバイスドライバによってリセットによる回復を行う。
【０００７】
前述したようにAERにおいては、IOデバイスに障害が発生すると、途中にある複数のPCI ブリッジにも同時に障害情報が残る。逆に、IOデバイスに障害が発生していない状態では、PCI ブリッジに障害情報は存在しない。すなわち仮想計算機から見た場合に、デバイスと途中のPCI ブリッジが共に障害情報を持っているか、共に障害情報を持っていないか、どちらかの状態にあることが求められる。つまり仮想計算機から見て、デバイスのみが障害情報を持っている、もしくはPCI ブリッジのみが障害情報を持っている状態があってはならない。
【０００８】
本発明の目的は、上記の課題を解決し、仮想計算機から見えるデバイスの障害情報において、不整合が発生しない計算機システム、及びその制御方法を提供することにある。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、本発明においては、処理部、記憶部、及び物理ブリッジとデバイスを有する物理デバイスツリーを備えた計算機システムであって、記憶部に、複数の独立に動作可能な仮想計算機と、これら仮想計算機を管理するためのハイパバイザがあり、物理ブリッジはデバイスを特定する情報を記録するための記憶領域を備え、仮想計算機は、仮想処理部、仮想記憶部、及び仮想ブリッジと仮想デバイスを有する仮想デバイスツリーを備え、仮想ブリッジはデバイスを特定する情報を記録するための仮想記憶領域を持ち、ハイパバイザは仮想ブリッジ内に記録された情報を変更する仮想ブリッジ変更プログラムを備える仮想計算機システムを提供する。
【００１０】
また、上記の目的を達成するため、本発明においては、処理部と、記憶部と、物理ブリッジとデバイスからなる物理デバイスツリーを備えた計算機システムの制御方法であって、記憶部上に、複数の独立に動作可能な仮想計算機と、当該仮想計算機を管理するためのハイパバイザを記憶し、仮想計算機は、仮想処理部、仮想記憶部、及び仮想ブリッジと仮想デバイスからなる仮想デバイスツリーを有し、物理ブリッジに、デバイスを特定する情報を記録するための記憶領域を設け、仮想ブリッジに、仮想デバイスを特定する情報を記録する領域である仮想記憶領域を設け、仮想デバイス各々に、デバイスが少なくとも一つを対応させ、ハイパバイザ上に、仮想ブリッジの仮想記憶領域内の情報を変更する仮想ブリッジ変更プログラムを備えておき、デバイスの一つからハイパバイザに割り込みがあがった際に、ハイパバイザは仮想ブリッジ変更プログラムを起動する仮想計算機システムの制御方法を提供する。
【発明の効果】
【００１１】
本発明により、仮想PCIツリー内で、仮想ブリッジと仮想デバイスの保持している情報に整合性がとることが可能な計算機システムを提供することができる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施例に係る仮想計算機システム構成の一例を示す図である。
【図２】第１の実施例に係る、仮想PCIツリー構成の一例を示す図である。
【図３】第１の実施例に係る、仮想主記憶構成の一例を示す図である。
【図４】第１の実施例に係る、物理デバイス仮想デバイス対応表の一構成例を示す図である。
【図５】第１の実施例に係る、仮想ブリッジ表の一構成例を示す図である。
【図６】第１の実施例に係る、制御方法全体フローチャートの一例を示す図である。
【図７】第１の実施例に係る、割り込み発生時の制御方法フローチャートの一例を示す図である。
【図８】第１の実施例に係る、PCIツリーエミュレーション制御方法フローチャートの一例を示す図である。
【図９】第１の実施例に係る、仮想ブリッジエミュレーション制御方法フローチャートの一例を示す図である。
【図１０】第１の実施例に係る、仮想デバイスエミュレーション制御方法フローチャートの一例を示す図である。
【図１１】第１の実施例に係る、割り込み発生時のOS処理フローチャートの一例を示す図である。
【図１２】第２の実施例に係る、割り込み発生時のOS処理フローチャートの一例を示す図である。
【図１３】第２の実施例に係る、PCIツリーの動作例フローチャートの一例を示す図である。
【図１４】第１の実施例に係る、レジスタ構成の一例を示す図である。
【図１５】第１の実施例に係る、仮想レジスタ構成の一例を示す図である。
【図１６】第３の実施例に係る、仮想PCIツリーの内部構成を示す図である。
【発明を実施するための形態】
【００１３】
以下、本発明の各種の実施例を図面に従い説明する。
【実施例１】
【００１４】
本実施例では、図１〜図１１に従い、仮想環境下でAER（Advanced Error Reporting）に対応する計算機システムの一構成例を説明する。
【００１５】
図１は、本実施例の計算機システムを構築する際の典型的な物理サーバ構成の例を示している。物理サーバｂ1上には、処理部として機能する1つまたは複数の中央処理部(Central Processing Unit：CPU)ｂ20と、記憶部（メモリ）である主記憶 ｂ30と、物理デバイスツリーであるPCIツリー ｂ40がある。
【００１６】
物理PCIツリー ｂ40は、ルートポート(Root Port) ｂ41、ブリッジ(Bridge) ｂ42、デバイス ｂ43からなっており、デバイス ｂ43はディスプレイ ｂ50、ネットワーク ｂ51、外部記憶 ｂ52の機器と接続されている。デバイス ｂ43が接続されている機器は、ディスプレイ ｂ50、ネットワーク ｂ51、外部記憶 ｂ52に限らなくても良く、接続されていない機器があっても良く、また同一の機器を複数接続していても良い。例えば、複数のデバイス ｂ43がネットワーク ｂ51に接続しており、ディスプレイ ｂ50に接続しているIOデバイスが存在しない構成があっても良い。デバイスｂ43は、一つのブリッジ ｂ42もしくはRoot Port ｂ41と接続されており、複数のブリッジ ｂ42に接続されていたり、ブリッジ ｂ42とRoot Port ｂ41の両方に接続されていることは無い。また、Root Port ｂ41から各デバイスｂ43に対して接続されている経路は、高々一つしかない。また、Root Port ｂ41と各ブリッジ ｂ42、デバイス ｂ43はそれぞれ、データを読み書きすることができる領域であるレジスタｂ45を持つ。レジスタｂ45には、後述するように障害記録領域がある。レジスタｂ45の全ての領域に対して読み書きできる必要はなく、例えば読むことはできるが書き込むことができない領域があってもよい。
【００１７】
各ブリッジ ｂ42、Root Port ｂ41、デバイスｂ43は、それぞれ異なる値である物理BDF(Bus/Device/Function)を持つ。逆に、異なる物理BDFの値を持つものであれば、異なるブリッジ ｂ42、Root Port ｂ41、デバイス ｂ43とみなす。例えば、Root Port ｂ41と複数のブリッジ ｂ42が物理的に分断できない形式で実装されたPCIツリーの機器がありうるが、その場合はRoot Port ｂ41とブリッジ ｂ42は異なるものとみなす。また物理的に分断できないが複数のBDF値を持ったデバイス ｂ43がありうるが、その場合は複数のデバイスとみなすものとする。便宜的に以下では全て、Root Port ｂ41、ブリッジ ｂ42、デバイス ｂ43をBDFで区別をするが、それぞれを特定できるものであれば、別の区別方法があってもよい。その場合、以下BDFの部分を特定できる値として読みかえる。また、以下では各デバイスｂ43や各ブリッジ ｂ42から接続関係上、よりRoot Port ｂ41に近い方向を上、Root Port ｂ41から遠い方向を下と呼ぶものとする。すなわち、Root Port ｂ41が一番上にあり、各デバイスから下に辿ることはできない。
【００１８】
主記憶 ｂ30の中には、仮想計算機 ｂ31-1から仮想計算機 ｂ31-n及び、Hypervisor ｂ32の情報が格納されている。仮想計算機内 ｂ31-1から仮想計算機 ｂ31-nには、それぞれ少なくとも仮想CPU ｂ33、仮想主記憶ｂ34、仮想PCIツリー ｂ35の情報を格納しているが、それ以外の情報を格納していても良い。また、主記憶 ｂ30内のどこに情報が配置されていても良い。仮想PCIツリー ｂ35の内部に格納されている情報については、図２を用いて、仮想主記憶34の内部に格納されている情報については、図３を用いてそれぞれ後述する。
【００１９】
Hypervisor ｂ32内には物理デバイス仮想デバイス対応表ｂ36、仮想ブリッジ表ｂ37、起動プログラムｂ38、仮想ブリッジ変更プログラムとして機能する割り込み処理プログラムｂ39、PCIツリーエミュレーションｂ310が格納されている。Hyervisorｂ32の中には、これ以外の情報が含まれていても良い。物理デバイス仮想デバイス対応表ｂ36の詳細については図４を、仮想ブリッジ表ｂ37の詳細については図５を用いて後述する。
【００２０】
図２は、実施例１における仮想PCIツリーｂ35の一例の詳細を示している。この仮想PCIツリーｂ35-1〜ｂ35-nはそれぞれ、上述した仮想計算機ｂ31-1〜ｂ31-nに対応している。図示の関係上、図２では仮想PCIツリーB35-1の内部のみ図示したが、仮想PCIツリーB35-2〜B35-nも仮想計算機ｂ31-2〜ｂ31-nに対応する、同様なツリー構成を備えている。以下、仮想PCIツリーB35-1を、代表例とし、仮想PCIツリーB35として説明する。
【００２１】
図２において、仮想PCIツリーｂ35は、仮想Root Port ｂ61と、仮想ブリッジ ｂ62、仮想デバイスｂ63から構成されている。仮想Root Portｂ61及び各仮想ブリッジ ｂ62には、仮想レジスタｂ65を持つ。仮想レジスタｂ65の内部については、図１５を用いて後述する。仮想デバイスｂ63は、仮想ブリッジ ｂ62を介して仮想Root Port ｂ61と接続されているが、仮想デバイスｂ63が直接仮想Root Port ｂ61と接続されていても良い。ただし、仮想デバイスから仮想Root Port ｂ61に対して辿ることのできる経路は高々一通りしかない。一つの仮想デバイスｂ63は、それぞれ一つのデバイスｂ43と対応しているが、具体的な対応方法については、図４を用いて後述する。
【００２２】
図２に示す通り、各仮想計算機ｂ31-1〜ｂ31-nの中にある仮想PCIツリーｂ35-1〜ｂ35-nは、それぞれ異なる仮想ブリッジ ｂ62、仮想Root Port ｂ61、仮想デバイスｂ63から構成されている。各仮想計算機ｂ31-1〜ｂ31-nの中にある仮想PCIツリーｂ35において、各仮想Root Port ｂ61、仮想ブリッジ ｂ62、仮想デバイスｂ63はそれぞれ異なる値である仮想BDFを持つ。以下では仮想PCIツリー内部において、接続関係上より仮想Root Port ｂ61に近い方向を上、仮想Root Port ｂ61から遠い方向を下と呼ぶものとする。すなわち、各仮想PCIツリーにおいて、仮想Root Port ｂ41が一番上にあり、各仮想デバイスｂ63から下に辿ることはできない。
【００２３】
図３は、本実施例における図１の仮想主記憶ｂ34の詳細を示す図である。仮想主記憶ｂ34の中には、少なくとも仮想計算機ｂ31を制御するためのOS ｂ70がある。OS ｂ70は、仮想化されていない環境で動作するものであっても良いし、そうでなくても良い。OS ｂ70の中には、少なくともOSカーネルｂ71と、デバイスドライバ ｂ73-1〜デバイスドライバ ｂ73-nがある。OSカーネルｂ71内には、Hypervisor ｂ32がOS70に対して仮想的に割り込みを上げた際に、その割り込み要因を特定し、割り込みを処理するための割り込みエンドポイントｂ72がある。デバイスドライバ ｂ73-1〜デバイスドライバ ｂ73-nは、基本的に仮想デバイス ｂ63の種類によって異なるものを使用するが、同一のデバイスドライバを用いて複数の仮想デバイス ｂ63を操作してもよい。また、一つの仮想デバイス ｂ63の操作のために、デバイスドライバ ｂ73-1〜ｂ73-nのうち複数を使用してもよい。
【００２４】
図１４は、本実施例におけるレジスタ ｂ45の一構成を示す図である。各レジスタｂ45内部には、少なくとも障害記録領域ｂ44が存在している。障害記録領域の形式は、例えばAERのようにデバイス非依存な形式で書かれてもよいし、デバイス依存性を持った形式であってもよい。
【００２５】
図１５は、同様に本実施例における仮想レジスタｂ65の一構成を示す図である。各仮想レジスタｂ65内部には、少なくとも仮想障害記録領域ｂ64が存在している。仮想障害記録領域の形式は、例えばAERのようにデバイス非依存な形式で書かれてもよいし、デバイス依存性を持った形式であってもよい。
【００２６】
図４は本実施例における物理デバイス仮想デバイス対応表 ｂ36の実装例であり、図５は仮想ブリッジ構成表ｂ37の実装例である。まず、物理デバイス仮想デバイス対応表ｂ36と仮想ブリッジ構成表ｂ37で共通に使用される要素について、簡単に述べる。
【００２７】
物理デバイス仮想デバイス対応表ｂ36内の仮想計算機番号c12及び、仮想ブリッジ構成表ｂ37内の仮想計算機番号c21は、どちらも仮想計算機ｂ31-1からｂ31-nのうち一つを指定するものである。これらは、仮想計算機ｂ31-1からｂ31-nのうち一つを特定できるものであればどのような形式の情報でも良い。仮想計算機名を示すための文字列や、整数値などを用いて表現することが一般的であると考えられるが、例えば仮想計算機が個別に所有しているIPアドレスなどの他の値を用いても良い。
【００２８】
次に、物理デバイス仮想デバイス対応表ｂ36内の直上仮想ブリッジ ID c14、仮想ブリッジ構成表ｂ37内の仮想ブリッジ ID c22、直上仮想ブリッジ ID c23について述べる。これらはどれも、仮想PCIツリーｂ35内の仮想ブリッジ ｂ62もしくは仮想Root Port ｂ61を各仮想計算機ｂ31-1からｂ31-nの中で一意に特定する情報である。すなわち、仮想ブリッジ構成表ｂ37内の仮想ブリッジ ID c22は、仮想計算機番号c12で指定された仮想計算機ｂ31-1からｂ31-nの中で、仮想ブリッジ ｂ62もしくは仮想Root Port ｂ61を一意に特定する情報である。また、仮想ブリッジ構成表ｂ37内の仮想ブリッジ ID c22、直上仮想ブリッジ ID c23は、仮想計算機番号c21で指定された仮想計算機ｂ31-1からｂ31-nの中で、仮想ブリッジ ｂ62もしくは仮想Root Port ｂ61を一意に特定する情報である。
【００２９】
これらは便宜上、仮想ブリッジ ｂ62もしくは仮想Root Port ｂ61を同一に管理しているが、仮想ブリッジ ｂ62の場合と仮想Root Port ｂ61を別の表で管理するような実装であっても良い。これらの値の形式は、仮想計算機ｂ31-1からｂ31-nの中で、仮想ブリッジ ｂ62もしくは仮想Root Port ｂ61を一意に特定するものであればどんな形式の情報でも構わないが、例えば主記憶領域ｂ30内のアドレス値等を使用することが考えられる。
【００３０】
次に、図４の物理デバイス仮想デバイス対応表、又はテーブルの詳細を述べる。
物理デバイス仮想デバイス対応表ｂ36は、例えばデバイスを特定する情報である物理BDF c11、仮想計算機番号c12、仮想デバイスを特定する情報である仮想BDF c13、直上仮想ブリッジ ID c14等を持つ。物理デバイス仮想デバイス対応表 ｂ36の各行は、PCIツリーｂ40の中にある、物理デバイスｂ43のうち一つを表している。一つの物理デバイスｂ43は、仮想計算機ｂ31-1からｂ31-nの中にある仮想PCIツリーｂ35のうち、高々一つの仮想PCIツリーｂ35内の仮想デバイスｂ63に対応している。すなわち、本実施例において、一つの物理デバイスｂ43に対応する仮想デバイスｂ63は、複数の仮想計算機の中に同時に存在したり、あるいは一つの仮想計算機の中の二つの仮想デバイスｂ63に対応することは無い。
【００３１】
物理BDF c11は、Hypervisorが各デバイス ｂ43を特定するために使用する情報の例として使用するものであるため、物理デバイス仮想デバイス対応表 ｂ36の中で一意の値を持つものになっているが、Hypervisorから見てデバイス ｂ43を特定できるものであれば、別の値を使用しても良い。
【００３２】
仮想計算機番号 c12は、そのデバイスｂ43を使用している仮想計算機ｂ31-1からｂ31-nのうち一つを表現するものである。値の形式については前述した。
【００３３】
仮想BDF c13は、仮想計算機番号c12で指定された仮想計算機ｂ31-1からｂ31-nにおいて、どのように見えているかを指定するものである。この仮想BDF値は、後述するように仮想ブリッジ ｂ62や仮想Root Port ｂ61内の仮想障害記録領域ｂ64に記録されるものであるため、仮想障害記録領域ｂ64に記録できるものであれば、他の形式でも構わない。
【００３４】
直上仮想ブリッジ ID c14は、対応する仮想デバイスｂ63が、どの仮想ブリッジ ｂ62に接続されているかを表現する値である。本値の形式については、前述した。
【００３５】
図５は、上述の通り仮想ブリッジ構成表、又はテーブルの実装例である。
仮想ブリッジ構成表ｂ37は、例えば仮想計算機を特定する情報である仮想計算機番号c21、仮想ブリッジを特定する情報である仮想ブリッジ ID c22、仮想ブリッジ各々の直ぐ上に位置する仮想ブリッジを特定する情報である直上仮想ブリッジ ID c23等を持つ。仮想ブリッジ表 ｂ37の各行は、仮想計算機番号c21と仮想ブリッジ ID c22の両方が同じになる事は無い。
【００３６】
仮想計算機番号 ｂ21は、各仮想ブリッジ ｂ62または仮想Root Port ｂ61が、どの仮想計算機ｂ31-1からｂ31-nに所属しているかを示すものである。本値の形式については前述した。
【００３７】
仮想ブリッジ ID ｂ22は、各仮想計算機番号ｂ21で指定された仮想計算機ｂ31-1からｂ31-nの内部にある、仮想PCIツリーｂ35の中の仮想ブリッジ ｂ62または、仮想Root Port ｂ61を一意に特定する番号を記録するものである。本値の形式については前述した。
【００３８】
直上仮想ブリッジ ID ｂ23は、仮想計算機番号ｂ21と仮想ブリッジ ID ｂ22で指定された仮想ブリッジ ｂ62または仮想Root Port ｂ61から見て、一つRoot Portに近い仮想ブリッジ ｂ62または仮想Root Port ｂ61を指定するものである。仮に、仮想ブリッジ ID ｂ22で指定されているものが、仮想Root Port ｂ61であった場合、より仮想Root Port ｂ61に近い仮想ブリッジ ｂ62や仮想Root Port ｂ61は存在しないため、本値には存在しないことを意味する値を入れる。
【００３９】
図６を用いて、本実施例の計算機システムの動作例の概要を示す。
本計算機システムの動作は、物理計算機ｂ1が起動することで開始する(a101)。具体的な物理計算機ｂ1の起動方法は、例えば計算機システムの電源スイッチを入れることや、実際の起動後に仮想計算機システムの動作を開始させるためのプログラムを明示的に記述する方法などがあるが、本実施例の要部と関係ないので、ここでは詳述しない。
【００４０】
手続きa101で起動された物理サーバはHypervisor ｂ32を初期化し、Hypervisor ｂ32を起動させる(a102)。Hypervisor ｂ32の初期化としては、主記憶を確保することと、Hypervisorに対してデバイスｂ43等から割り込みがあった場合に、仮想ブリッジ変更プログラムとして機能する割り込み処理プログラムｂ39が起動されるように、CPU ｂ2に対して命令を設定することが主な目的であるが、その他の処理をしても良い。例えば特定のCPU ｂ2には、Hypervisorが動作するためのモードが存在するため、初期化処理の段階でHypervisor ｂ32が動作するためのモードに切り替えることなどがありうる。
【００４１】
手続きa102で初期化されたHypervisor ｂ32は、起動プログラムｂ38を用いて仮想計算機 ｂ31-1から仮想計算機 ｂ31-nのメモリを確保する(a103)。ただし、必ずしもHypervisor ｂ32が起動プログラムｂ38を用いて確保する必要はなく、Hypervisor ｂ32起動時に物理計算機が自動的に仮想計算機のメモリを確保する方法等も考えられる。また、必ずしも仮想計算機 ｂ31-1から仮想計算機 ｂ31-nの全てのメモリを確保する必要はなく、実際に起動するモノだけを確保すればよい。
【００４２】
次にHypervisor ｂ32は手続きa103でメモリを確保した仮想計算機 ｂ31-1から仮想計算機 ｂ31-nを起動する(a104)。メモリを確保した仮想計算機 ｂ31-1から仮想計算機 ｂ31-nの全てを起動する必要はなく、いくつかだけ起動しても良い。
【００４３】
手続きa104によって仮想計算機 ｂ31-1から仮想計算機 ｂ31-nが起動すると、仮想計算機内の仮想主記憶内でOS ｂ70が起動する(a105)。OS ｂ70は仮想主記憶内を、自身が動作できるように初期化を行うが、初期化の一部はHypervisor ｂ32が行っても良い。この場合、例えば手続きa102において、仮想計算機 ｂ31-1から仮想計算機 ｂ31-nの初期化を行い、主記憶を確保する際に設定を行うことも考えられる。仮想計算機 ｂ31-1から仮想計算機 ｂ31-n内で、OS ｂ70が動作を始めると、二つの契機でHypervisor ｂ32が呼び出される。一つはHypervisor ｂ32に対してデバイスｂ43等から割り込みが発生した際であり、もうひとつは仮想計算機 ｂ31-1〜 ｂ31-nから仮想PCIツリーにアクセスが行われた際である。
【００４４】
手続きa105で、Hypervisor ｂ32にデバイスｂ43等から割り込みが発生した場合、Hypervisor ｂ32内の割り込み処理プログラムｂ39が割り込みに対応する処理を行う(ｂ106)。この割り込み対応の処理の具体的な手続きについては、図７を用いて後述する。
【００４５】
手続きa105で、仮想計算機 ｂ31-1から仮想計算機 ｂ31-nから仮想PCIツリーにアクセスが行われた場合、HypervisorはPCIツリーエミュレーション ｂ310を起動する。PCIツリーエミュレーション ｂ310の詳細な動作については、図８〜図１０を用いて後述する。
【００４６】
図１３を用いて、本実施例の計算機システムにおいて、物理デバイスに障害が発生した際に想定される、物理PCIツリーｂ40の動作例について説明する。
本動作は、図１に示したデバイスｂ43の一つに障害が発生したことを契機として開始される(a801)。デバイス ｂ43に障害が発生すると、障害の発生したデバイス ｂ43は、自身の内部に障害内容を記録する(a802)。障害内容のフォーマットは、AERのようなデバイスに依存しないものであっても、デバイス個別のフォーマットによって保存されていても良い。
【００４７】
障害の発生したデバイスｂ43は、デバイスがブリッジ ｂ42に接続されている場合は接続されているブリッジ ｂ42に、Root Port ｂ41に接続されている場合にはRoot Port ｂ41に障害を伝達する(a803)。
【００４８】
手続きa803で障害を伝達されたブリッジ ｂ42もしくはRoot Port ｂ41は、自身の内部に障害情報を記録する余地があるかどうかをチェックする(a804)。これは、複数のデバイス ｂ43に同時もしくは近い時期に障害が発生したことを想定している。複数のデバイスから障害が発生した場合、上述のAERではそのうち最初の一つのみを記録する仕様になっているため、すでに他のデバイスで障害が発生していれば、障害を記録する余地は無い。なお、複数のデバイスの障害情報を記録できるような仕様の場合は、すでに障害情報があっても障害情報を記録できることもある。
【００４９】
手続きa804で障害情報を記録できる余地が無かった場合、処理を終了する(a808)。AERでは、単に終了するだけであるが、Hypervisorに対して割り込みをあげても良い。手続きa804で障害情報を記録できる余地があった場合、手続きa803で障害を伝達されたブリッジ ｂ42もしくはRoot Port ｂ41は自身に障害情報を書き込む(a805)。この場合、障害情報として書き込むものには、例えばHypervisor ｂ32がデバイス ｂ43を管理する際に用いる番号である、バス・デバイス・ファンクション（BDF）番号などがありうる。また、デバイス ｂ43に発生した障害要因を書き込むことなどがあっても良い。
【００５０】
次に手続きa805で障害情報をブリッジ ｂ42に記録したか、Root Port ｂ41に記録したかを判定する(a806)。
【００５１】
手続きa806において、障害情報を記録したのがRoot Port ｂ41であった場合、Root Port ｂ41はHypervisor ｂ32に割り込みを上げて、処理を終了する。Hypervisor ｂ32に割り込みが上がると、割り込み処理プログラムｂ39が起動されるが、その場合の動作例については図７を用いて後述する。
【００５２】
手続きa806において、障害情報を記録したのがRoot Port ｂ41ではなくブリッジ ｂ42であった場合、さらにその上にあるブリッジ ｂ42もしくはRoot Port ｂ41に障害情報を伝達する(a809)。障害情報を伝達されたブリッジ ｂ42もしくはRoot Port ｂ41は、再び手続きa804に戻り、障害情報を記録する余地があるかどうかを判定する。
【００５３】
図７を用いて、本実施例の、上述した物理PCIツリー動作例において、Hypervisor ｂ32に割り込みが発生した際の、仮想ブリッジ変更プログラムである割り込み処理プログラム ｂ39の動作例を説明する。以下、図７の説明においては、各手続きである処理ステップは、特に断りが無い限り割り込み処理プログラムが主体となって行う。
【００５４】
本動作は、Hypervisor ｂ32に対してデバイスｂ43等から割り込みが発生したことを契機として開始される(a201)。Hypervisor ｂ32に対してデバイスｂ43等から割り込みが発生すると、割り込み処理プログラムｂ39が起動され、割り込み処理プログラムｂ39はその割り込みがデバイス障害であるかどうかを判定する(a202)。デバイス障害であるかどうかの判定方法については、例えば割り込み要因として考えられるものを全て調べ、デバイス障害以外の割り込み要因でなかった場合に、デバイス障害であると判定する方法がある。また、割り込み処理プログラムｂ39を複数用意しておき、割り込み要因によって複数の割り込み処理プログラムｂ39を切り替える方法などもある。
【００５５】
図７の手続きa202で割り込み要因がデバイス障害ではないと判定した場合、割り込み処理プログラムｂ39は従来の割り込み処理を行う(a209)。従来の割り込み処理は、例えばCPU ｂ2のタイマ割り込みを契機として行われる処理や、ネットワークｂ51からのデータの送受信を契機として行われる処理などがあるが、本明細書では詳述しない。
【００５６】
手続きa202で割り込み要因がデバイス障害であると判定された場合、割り込み処理プログラムｂ39は障害が発生したデバイスｂ43を一つ選択する(a203)。ここで一つ選択としたのは、複数のデバイスに同時、もしくは非常に近い時期に障害が発生した場合のことを想定している。これは、一つのデバイスの障害が他のデバイスに物理サーバ1内の電子回路を通じて波及するケースがある場合、あるいは物理サーバ1の外部で接続されている複数のデバイスｂ43があった場合に、物理サーバ1の外部を通じて障害が波及する場合などがあるためであり、ケースとしては非常に多い。
【００５７】
障害が発生したデバイスｂ43を一つ選択する方法はいくつかあり、例えばHypervisor ｂ32からみてバス・デバイス・ファンクション(BDF)番号の小さいものから順に調べて障害デバイスを探索する方法や、あるいはRoot Port ｂ41内にある、障害記録領域ｂ44に記録されているデバイスｂ43を優先的に選択し、そのデバイスｂ43に障害が発生していないことを確認してからHypervisor ｂ32からみて番号の小さいBDF番号を持つデバイスｂ43から順に調べる方法などが考えられる。ここで、障害記録領域ｂ44に記録されているデバイスｂ43を優先的に選択する方法は、先に述べたように一つのデバイス ｂ43の障害が他のデバイス ｂ43に波及するケースでは、大本のデバイス ｂ43の障害を先に処理することが重要になることがあるためである。
【００５８】
手続きa203で選択された障害の発生したデバイスｂ43、もしくは本手続き内で選択された仮想ブリッジ ｂ62、本手続き内で選択された仮想Root Port ｂ61について、物理デバイス仮想デバイス対応表ｂ36と、仮想ブリッジ表ｂ37を用いて、一つ上にある仮想ブリッジ ｂ62または仮想Root Port ｂ61に障害情報を記入する(a204)。
【００５９】
まずデバイスｂ43の一つ上にある、仮想ブリッジ ｂ62または仮想Root Port ｂ61を調べる方法について述べる。図４の物理デバイス仮想デバイス対応表ｂ36を用い、デバイスｂ43の物理BDFと、物理BDF c11が等しい行を選択する。選択された行中の仮想計算機番号 c12と直上仮想ブリッジ ID c14の組み合わせで指定されている仮想ブリッジ ｂ62または仮想Root Port ｂ61が一つ上にある仮想ブリッジ ｂ62または仮想Root Port ｂ61である。以上がデバイスｂ43の一つ上にある仮想ブリッジ ｂ62または仮想Root Port ｂ61を特定する方法である。
【００６０】
次に、本手続き内で選択された仮想ブリッジ ｂ62または仮想Root Port ｂ61を元に、一つ上にある仮想ブリッジ ｂ62または仮想Root Port ｂ61を選択する方法について述べる。便宜上、本手続き内で選択された仮想ブリッジ ｂ62または仮想Root Port ｂ61を元仮想ブリッジと呼ぶものとする。元仮想ブリッジの仮想計算機番号と、仮想ブリッジ IDが、図５の仮想ブリッジ表ｂ37内の、仮想計算機番号c21と仮想ブリッジ ID c22の組み合わせと等しい行を選択する。仮想計算機番号c21と直上仮想ブリッジ ID c23の組み合わせで指定される、仮想ブリッジ ｂ62または仮想Root Port ｂ61が一つ上にある仮想ブリッジ ｂ62または仮想Root Port ｂ61である。
【００６１】
以上によって選択された仮想ブリッジ ｂ62または仮想Root Port ｂ61内の仮想障害記録領域ｂ64に障害情報を書き込む。
【００６２】
続いて図７の手続きa205において、手続きa204で障害が書き込まれたのが、仮想ブリッジ ｂ62内の仮想障害記録領域ｂ64であったかどうかを判定する。障害を書きこまれたのが仮想ブリッジ ｂ62内の仮想障害記録領域ｂ64であった場合は、手続きa203に戻り、より上位の仮想ブリッジ内の仮想障害記録領域ｂ64に障害を書き込む。
【００６３】
手続きa205で、障害を書きこまれたのが仮想Root Port ｂ61であった場合は、仮想Root Port ｂ61が存在する仮想PCIツリー ｂ35内を持つ仮想計算機ｂ31-1〜ｂ31-nに対して割り込みを上げる(a206)。仮想計算機ｂ31-1からｂ31-nに割り込みが挙げられた場合、仮想計算機内ｂ31-1からｂ31-nのOS ｂ70が受理し、割り込み処理を行う。OSが行う処理については、図１１を用いて後述する。
【００６４】
手続きa206の手続き完了後、ブリッジ ｂ42及びRoot Port ｂ41の障害情報を削除する(a207)。この手続きは、次に別の障害が発生した際に、障害情報が物理ブリッジに残るようにするために必要なものである。この手続きを行うのは一度で良いが、時期はいつでも良く、例えば手続きa203の直前やa206の直前などでも良い。
【００６５】
手続きa207の後に、障害処理を行っていないデバイスが無いかどうかを調べる(a208)。仮にまだ、障害処理を終えていないデバイスがあった場合、手続きa203に戻り、再度障害処理を行う。
【００６６】
手続きa208において、全ての障害処理が完了した場合、また手続き209で他の割り込み処理が完了した場合、再度デバイスｂ43等から割り込みが発生することが可能になるように、割り込み完了処理を行う(a209)。具体的には、CPUや仮想Root Port内にある、再割り込み禁止ビットを解除する処理を行う。この再割り込み禁止ビットは、割り込み処理中に同一の割り込みが入らないことを保証するために、ハードウェア的に実装されているものである。仮に、このような実装が無かった場合は、本手続きは行わなくても良い。
【００６７】
手続きa209が完了した場合、全ての割り込み処理が終了されるので、通常の処理に戻る(a210、a211)。
【００６８】
図８を用いて、本実施例のPCIツリーエミュレーション処理についての詳細を述べる。本手続きは、図６中の手続きa107に該当するものであり、図１のHypervisor ｂ32内のPCIツリーエミュレーション ｂ310が行う動作である。以下、本図の説明中の各手続きは、特に断りが無い場合はPCIツリーエミュレーション ｂ310の動作である。
【００６９】
PCIツリーエミュレーション処理の契機は、仮想計算機ｂ31-1〜ｂ31-nが仮想PCIツリーｂ35を操作することである(a301)。具体的な仮想PCIツリーｂ35に対する操作としては、仮想Root Port ｂ61、仮想ブリッジ ｂ62、仮想デバイスｂ63内部のレジスタｂ45の読み書きである。
【００７０】
まず、手続きa301により、起動されたPCIツリーエミュレーションは、まずそのエミュレーションの対象が、仮想ブリッジ ｂ62もしくは仮想Root Port ｂ61であるかどうかを判定する(a302)。
【００７１】
手続き302の判定で、仮想ブリッジ ｂ62もしくは仮想Root Port ｂ61に対する操作であった場合、仮想ブリッジエミュレーション処理を行う(a303)。本操作の詳細は、図9を用いて後述する。
【００７２】
手続き302の判定で、仮想ブリッジ ｂ62でも仮想Root Port ｂ61でもないものに対する操作、すなわち仮想デバイス ｂ63に対する操作であった場合、仮想デバイスエミュレーション処理を行う(a304)。本操作の詳細は、図10を用いて後述する。手続きa303もしくは手続きa304が完了すると、本手続きは終了する。
【００７３】
図9を用いて仮想ブリッジエミュレーション処理についての詳細を述べる。本処理は、図8中の手続きa303に該当するものであり、仮想ブリッジ ｂ62もしくは仮想Root Port ｂ61内部のレジスタｂ45に対する操作が行われた際に起動される(a401)。本処理は、Hypervisor ｂ32内のPCIツリーエミュレーション ｂ310が行う動作である。
【００７４】
仮想ブリッジエミュレーション処理が開始すると、まずその操作がデータの読み込みであるかどうかを判定する(a402)。仮想ブリッジ ｂ62もしくは仮想Root Port ｂ61に対する操作は、仮想レジスタｂ65の読み込み、もしくは書き込みである。
【００７５】
手続きa402で、仮想ブリッジ ｂ62もしくは仮想Root Port ｂ61に対する読み込みであると判断した場合、PCIツリーエミュレーション ｂ310は仮想ブリッジ内にあるレジスタの値を読み込み、OSに渡す(a403)。OSに対してデータを渡すための方法は、例えば仮想CPUや仮想主記憶の特定位置に値を設定するなどの方法がある。
【００７６】
手続きa402で、仮想ブリッジ ｂ62もしくは仮想Root Port ｂ61に対する読み込みで無いと判断した場合、言い換えると仮想ブリッジ ｂ62もしくは仮想Root Port ｂ61に対する書き込みであると判断した場合、PCIツリーエミュレーション ｂ310は仮想ブリッジ内にある仮想レジスタｂ65に値を設定する(a404)。手続きa403もしくは手続きa404でOSに処理を戻した段階で、本ブリッジエミュレーション処理は終了となる。
【００７７】
図10を用いて、仮想デバイスエミュレーション処理についての詳細を述べる。本処理は、図8中の手続きa304に該当するものであり、仮想デバイスｂ63内部のレジスタｂ45に対する操作が行われた際に起動される(a501)。本処理は、図１のHypervisor ｂ32内のPCIツリーエミュレーション ｂ310が行う動作である。
【００７８】
仮想デバイスエミュレーション処理が開始すると、PCIツリーエミュレーション ｂ310は図４の物理デバイス仮想デバイス対応表を用い、操作対象の仮想デバイスｂ63が、どのデバイスｂ43に対応するかを判定する(a502)。具体的には、操作対象となっている仮想デバイスｂ63を使用している仮想計算機ｂ31-1からｂ31-nを指定している値を仮想計算機番号c12から、その仮想計算機ｂ31-1からｂ31-nにおける仮想デバイスｂ63のBDF値を仮想BDF c13から調べ、該当行の物理BDF c11値を調べることで物理デバイスｂ43を特定する。
【００７９】
次にその操作がデータの読み込みであるかどうかを判定する(a503)。仮想デバイスｂ61に対する操作は、仮想レジスタｂ65の読み込みまたは書き込みである。
【００８０】
手続きa503で操作が仮想デバイスｂ63内のレジスタｂ65に対する読み込みであった場合、PCIツリーエミュレーション ｂ310は手続きa502で調べたデバイスa43内のレジスタｂ45に対して読み込みを行う(a504)。例えば、仮想デバイスｂ63内の仮想レジスタｂ65のアドレスαに対する読み込みであれば、これをデバイスｂ43内のレジスタｂ45のアドレスαに対する読み込みを行う。
【００８１】
手続きa504で読み込んだ値に対して、PCIツリーエミュレーションｂ310は場合によって値を変更する(a505)。これは例えば、あるレジスタｂ45の値を仮想計算機に直接見せたくない場合等において、隠すことができる処理である。ただし、全てのレジスタをそのまま見せるケースでは、この処理は省略可能であり、手続きa503で読まれた値をそのまま使用する。
【００８２】
PCIツリーエミュレーションｂ310は、手続きa505において変更された値を、本手続きの起動のきっかけとなった仮想計算機ｂ31-1からｂ31-n内のOS ｂ70に対して渡す(a506)。
【００８３】
手続きa503で操作が仮想デバイスｂ63内のレジスタｂ65に対する読み込みでなかった場合、言い換えると仮想デバイスｂ63内のレジスタｂ65に対する書き込みであった場合、PCIツリーエミュレーション ｂ310は手続きa502で調べたデバイスa43内のレジスタｂ45に対して書き込み値の変更を行う(a507)。本手続きは、例えばデバイスｂ43内のレジスタｂ45の値を変更したくない場合などに行われる。仮に変更する必要がない場合、本手続きは行わず、そのままの値を使用する。
【００８４】
手続きa507が終了すると、手続きa502で調べたデバイスa43内のレジスタｂ45に対して、手続きa507で変更された値を書き込む(a508)。例えば仮想デバイスｂ63内の仮想レジスタｂ６５のアドレスαに対してβを書き込むという処理であり、手続きa507でβをβ’に変更した場合であれば、デバイスｂ43内のレジスタｂ45のアドレスαに対してβ’を書き込む処理を行う。
【００８５】
手続きa508が終了すると、PCIツリーエミュレーションｂ310は本手続きの起動のきっかけとなった仮想計算機ｂ31-1からｂ31-n内の仮想主記憶ｂ34中のOS ｂ70に処理を戻す(a509)。
【００８６】
手続きa506もしくは手続きa509が完了すると、本仮想デバイスエミュレーションの処理は終了する(a510)。
【００８７】
図11は、本実施例の計算機システムにおいて、図３に示した、仮想計算機31-1から31-nのそれぞれの仮想主記憶ｂ34中にあるOS ｂ70に割り込みが発生した際に、OS ｂ70内部がどのような動作を行うかについて示すものであり、図7中の手続きa206でOS ｂ70に対して割り込みを入れた際の動作である。
【００８８】
本動作は、OS ｂ70に割り込みが発生したことを契機とし、割り込みエンドポイント ｂ72が起動する(a601)。一般的に、OSは割り込みが入った場合に起動するプログラムを選択することが出来る。
【００８９】
次に、割り込みエンドポイントｂ70は、割り込みがデバイス障害であるかどうかを判定する(a602)。デバイス障害である場合に、特別な割り込みエンドポイントｂ70を起動するOSの場合は、本割り込みがデバイス障害であることが自明であるため本手続きを行わなくても良い。
【００９０】
手続きa602で、割り込み要因がデバイス障害でない場合、OSは従来の割り込み処理を行う(a608)。他の割り込みとしては、例えばタイマ割り込み等があり得るため、その処理を行うが、本明細書では詳述しない。
【００９１】
手続きa602で、割り込み要因がデバイス障害であると判定された場合、OSは仮想Root Port ｂ61に残ったデバイス障害情報を読み取り、障害の発生した仮想デバイスｂ63を特定し、図３に示したデバイスドライバｂ73-1からｂ73-nに処理を渡す(a603)。
【００９２】
直前の手続きで障害の発生した仮想デバイスｂ63の処理を任されたデバイスドライバｂ73-1〜ｂ73-nは、障害処理を行う(a604)。障害処理の例としては、レジスタ値のリセット等が考えられる。なお、障害処理の方式は各デバイスおよびデバイスドライバに依存しているため、ここでは詳述しない。
【００９３】
直前の手続きで障害処理を行った仮想デバイスｂ63、仮想ブリッジ ｂ62、もしくは仮想Root Port ｂ61の直上仮想ブリッジの存在を調べる(a605)。本手続きは、図７の手続きa204における、直上仮想ブリッジを調べる操作と同等であるが、仮想計算機の場合には直接仮想PCIツリーｂ35が見えているため、必ずしも物理デバイス仮想デバイス対応表 ｂ36や、仮想ブリッジ表ｂ37を使用する必要はないが、a204の手続きと同様に、使用してもよい。
【００９４】
手続きa605で、直上に仮想ブリッジ ｂ62もしくは仮想Root Port ｂ61が存在した場合、存在した仮想ブリッジ ｂ62もしくは仮想Root Port ｂ61から障害情報を削除し、その配下に障害情報を持つ仮想ブリッジ ｂ62もしくは仮想デバイスｂ63が存在しないかどうかを調べる(a606)。複数の障害が発生した場合、最初の一つのみを記録するため、本手続きは必要である。
【００９５】
手続きa606で調査した結果、他の障害情報があるかどうかを判定する(a607)。他の障害情報があれば、その障害の発生している仮想デバイスｂ63の処理をa604に戻って行う。他の障害情報がない場合、手続きa605に戻り、さらに直上の仮想ブリッジ ｂ62もしくは仮想Root Port ｂ61を調査する。
【００９６】
手続きa608で他の割り込みを処理し終えた場合、手続きa605において、直上に仮想ブリッジや仮想Root Portが存在しない場合には、本手続きは終了する(a609)。終了時に、例えばHypervisor ｂ32に対して処理が終わったことを通知する、あるいは割り込み処理終了ビットを仮想Root Portに立てる、等の処理を行ってもよい。
【００９７】
以上が、実施例１に係る計算機システムであり、この構成・動作により、仮想PCIツリー内で、仮想ブリッジと仮想デバイスの保持している情報に、整合性がとれた計算機システムを提供することが可能となる。
【実施例２】
【００９８】
第２の実施例は、基本的な構成については実施例1と同様であるが、仮想計算機31-1〜31-n上のOS ｂ70に割り込みが発生した場合の動作が異なる計算機システムに関する。
【００９９】
図１２は、本実施例において、OS ｂ70に割り込みが発生した場合の動作を示すフローチャートである。
【０１００】
本手続きでは、図３の仮想主記憶ｂ34中のOS ｂ70に割り込みが発生した場合、実施例１と同様、OS ｂ70内の割り込みエンドポイント62が起動する(a701)。
【０１０１】
また、起動した割り込みエンドポイントプログラムｂ72は、割り込みがデバイス障害に由来するかどうかを判定する(a702)。デバイス障害かどうかを判定する方法は、例えば割り込み番号を変える、あるいは仮想Root Port ｂ62の状態を読むなどの方法が考えられる。通常、割り込み番号を用いてデバイス障害かどうかを判定するケースであれば、割り込みエンドポイントプログラムの中の、デバイス障害処理プログラムが自動的に読み込まれるため、明示的な条件分岐が必要ない場合もある。
【０１０２】
手続きa702で割り込みが障害情報ではなかった場合、OS ｂ60は従来の割り込み処理を行う(a708)。従来の割り込み処理には、例えば通信やタイマ処理などがあるが、本実施例においては直接関係しないので説明を省略する。
【０１０３】
手続きa702で割り込みが障害情報であった場合、本実施例においては、任意のデバイスｂ63を一つ選択する(a703)。ここでデバイスを選択する方法としては複数考えられるが、例えば仮想計算機上のOSがPCIデバイスを特定する値である、仮想Bus/Device/Function(BDF)の値が最も小さいものから順に調べる方法、逆に仮想Bus・Device/Function(BDF)の値が最も大きいものから順に調べる方法等がありうる。
【０１０４】
次に手続きa703で選択されたデバイスｂ63に、障害情報があるかどうかを調べる(a704)。障害情報があるかを調べる方法にはいくつかあるが、例えばデバイス内のレジスタｂ65の値を読む、等の方法がある。OS ｂ70がデバイス障害を調べる手法を用いていない際には、常にデバイス障害であると判定しても良い。
【０１０５】
手続きa704で障害と判定された場合、デバイスドライバｂ73に処理を委譲し、仮想デバイスｂ63のリセットを行う(a705)。デバイスドライバｂ73が仮想デバイスのリセットを行っても回復できない場合が存在するが、その場合は仮想デバイスｂ63の操作を止める。仮想デバイスの操作を止める方法にはいくつかあり、OS60に通知を行う、デバイス自体の電源を止める等が考えられるが、本発明では扱わないため省略する。
【０１０６】
手続きa704で障害と判定されなかった場合、あるいはa705でデバイスドライバによるリセット処理が行われた場合、まだ手続きa703で処理を行っていないデバイスがあるかどうかを判定する(a706)。判定方法にはいくつかありうるが、例えば手続きa703で仮想Bus/Device/Function(BDF)の値が小さいものから探索している場合であれば、より大きな仮想BDFの値が大きなものが存在しないことを確認すればよい。仮想BDFは、16ｂitの値であるため、高々65536回の探索を行えばよい。まだ手続きa703で処理を行っていないデバイスがあれば、a703の手続きに戻り、処理を続行する。
【０１０７】
手続きa706において、全てのデバイスの探索を行っていた場合、仮想ブリッジ及び仮想Root Portにある、全ての障害情報を削除する(a707)。
【０１０８】
以上が、実施例２に係る計算機システムの処理フローであり、この構成・動作により、仮想PCIツリー内で、仮想ブリッジと仮想デバイスの保持している情報に、整合性がとれた計算機システムを提供することが可能となる。
【実施例３】
【０１０９】
本実施例は、実施例1におけるPCIツリーｂ40の内部構成が異なる計算機システムに関する実施例である。基本的な動作は実施例1と同様であるため、図１６を用いて図１に示したPCIツリーｂ40の異なる構成についてのみ記述する。便宜上、図１６中のPCIツリーをｂ４０’と呼び、図1中のPCIツリーｂ40と区別する。
【０１１０】
図１６内のPCIツリーｂ４０’は図1内のPCIツリーｂ40と同様に、Root Port ｂ41、ブリッジ ｂ42、デバイスｂ43を持つ。しかし、PCIツリーｂ４０’は、デバイスｂ43の代わりにマルチデバイスｂ46を持つことがある。マルチデバイスｂ46は、内部に複数のデバイスｂ43を持っている。また、マルチデバイスｂ46内の複数のデバイスｂ43は、それぞれ異なる目的で使用されていてもよく、例えばマルチデバイスｂ46はネットワークｂ51と外部記憶ｂ52の両方に同時に接続されているものがあってもよい。あるいは、マルチデバイスｂ46内の複数のデバイスｂ43が両方とも外部記憶ｂ52と接続されていてもよい。マルチデバイスｂ46内のデバイスｂ43は、それぞれ異なるレジスタを持っており、個別に読み書きすることができる。また、マルチデバイスｂ46内のデバイスｂ43は、それぞれ異なるBDFを持っているため、Hypervisorはマルチデバイスｂ46内のデバイスｂ43である場合も、あるいはブリッジ ｂ42に直接接続されているデバイスｂ43である場合も同様の動作をすることができる。なお、本実施例の計算機システムの場合、仮想PCIツリーも同様に、PCIツリーｂ４０’に対応する仮想PCIツリー構成となるので、ここでは説明を省略した。
【０１１１】
このことより、図1中のPCIツリーｂ40の代わりに図１６中のPCIツリーｂ４０’を用いても、上述した第１、第２実施例同様の手続きが実行でき、整合性がとれた計算機システムを提供することが可能となる。
【０１１２】
なお、本発明は上記した各種の実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明のより良い理解のために詳細に説明したのであり、必ずしも説明の全ての構成を備えるものに限定されものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることが可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【符号の説明】
【０１１３】
ｂ1  物理サーバ
ｂ20  CPU
ｂ30  主記憶
ｂ31  仮想計算機
ｂ32  Hypervisor
ｂ33  仮想CPU
ｂ34  仮想主記憶
ｂ35  仮想PCIツリー
ｂ36  物理デバイス仮想デバイス対応表
ｂ37  仮想ブリッジ表
ｂ38  起動プログラム
ｂ39  割り込み処理プログラム
ｂ310  PCIツリーエミュレーション
ｂ40  PCIツリー
ｂ41  Root Port
ｂ42  ブリッジ
ｂ43  デバイス
ｂ44  障害記録領域
ｂ45  レジスタ
ｂ50  ディスプレイ
ｂ51  ネットワーク
ｂ52  外部記憶
ｂ61  Root Port
ｂ62  ブリッジ
ｂ63  デバイス
ｂ64  障害記録領域
ｂ65  仮想レジスタ
ｂ70  OS
ｂ71  OSカーネル
ｂ72  割り込みエンドポイント
ｂ73  デバイスドライバ
【図１】
0005639913.tif 000002
【図２】
0005639913.tif 000003
【図３】
0005639913.tif 000004
【図４】
0005639913.tif 000005
【図５】
0005639913.tif 000006
【図６】
0005639913.tif 000007
【図７】
0005639913.tif 000008
【図８】
0005639913.tif 000009
【図９】
0005639913.tif 000010
【図１０】
0005639913.tif 000011
【図１１】
0005639913.tif 000012
【図１２】
0005639913.tif 000013
【図１３】
0005639913.tif 000014
【図１４】
0005639913.tif 000015
【図１５】
0005639913.tif 000016
【図１６】
0005639913.tif 000017