(57)【要約】【課題】仮想計算機の動的なＩ／Ｏデバイスの変更を可能にしながらも、基板の回路構成が複雑になるのを回避する。【解決手段】ＣＰＵ１ａ、１ｂ及びメモリ５と、Ｉ／Ｏデバイス＃０〜＃３を接続するＰＣＩバス７と、ＰＣＩバス７を制御するサウスブリッジ６と、を含む物理計算機を複数のＬＰＡＲに分割して物理計算機の資源の割当を制御するハイパバイザと、ハイパバイザからの指令に基づいてＩ／Ｏデバイスと複数のＬＰＡＲの対応関係を設定するＩ／Ｏデバイス割り当て部により、Ｉ／Ｏデバイスから受け付けた処理要求（ＤＭＡ転送または割込処理）を、Ｉ／Ｏデバイス割り当て部に設定された複数のＬＰＡＲへそれぞれ並列的に発行する並列処理発行部とを備える。【選択図】図１
2005309553.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵと、主記憶と、Ｉ／Ｏデバイスを接続するＩ／Ｏバスと、Ｉ／Ｏバスを制御するＩ／Ｏ制御部と、を含む物理計算機を複数の論理区画に分割し、各論理区画上でそれぞれＯＳを動作させ、各論理区画に対する物理計算機の資源の割当を制御するファームウェアと、
を備えた計算機であって、
前記ファームウェアからの指令に基づいて前記Ｉ／Ｏデバイスと複数の論理区画の対応関係を設定するＩ／Ｏデバイス割り当て部と、
前記Ｉ／Ｏデバイスからの処理要求を受け付ける処理要求受付部と、
前記受け付けた処理要求を、前記Ｉ／Ｏデバイス割り当て部に設定された複数の論理区画へそれぞれ並列的に発行する並列処理発行部と、
を備えたことを特徴とする計算機。
【請求項２】
前記処理要求は、ＤＭＡ転送であって、
前記Ｉ／Ｏデバイス割り当て部は、Ｉ／Ｏデバイス毎に前記複数の論理区画のＤＭＡ転送先を前記対応関係として設定し、
前記並列処理発行部は、前記ＤＭＡ転送を要求したＩ／Ｏデバイスに設定された前記複数の論理区画のＤＭＡ転送先へ、それぞれ要求されたＤＭＡ転送を並列的に実行することを特徴とする請求項１に記載の計算機。
【請求項３】
前記Ｉ／Ｏ制御部は、前記Ｉ／Ｏデバイス割り当て部と、処理要求受付部と、並列処理発行部とを含んで構成され、前記Ｉ／ＯデバイスからのＤＭＡ転送を複数の論理区画へ並列的に実行することを特徴とする請求項２に記載の計算機。
【請求項４】
前記Ｉ／Ｏデバイス割り当て部は、Ｉ／Ｏデバイス毎に前記複数の論理区画を設定するとともに、各論理区画の主記憶に対応するＤＭＡ転送先を設定するレジスタを備えたことを特徴とする請求項３に記載の計算機。
【請求項５】
前記Ｉ／Ｏデバイスは、前記論理区画に対してＤＭＡ転送を要求するとともに、前記処理要求受付部と、前記Ｉ／Ｏデバイス割り当て部と、並列処理発行部とを内包し、当該Ｉ／Ｏデバイスに設定された前記複数の論理区画のＤＭＡ転送先へ、それぞれ要求されたＤＭＡ転送を並列的に実行することを特徴とする請求項２に記載の計算機。
【請求項６】
前記処理要求は、割込処理であって、
前記Ｉ／Ｏデバイス割り当て部は、Ｉ／Ｏデバイス毎に前記複数の論理区画毎のＣＰＵを前記対応関係として設定し、
前記並列処理発行部は、前記割込処理を要求したＩ／Ｏデバイスに設定された前記複数の論理区画のＣＰＵへ、それぞれ要求された割込処理を並列的に発行することを特徴とする請求項１に記載の計算機。
【請求項７】
前記Ｉ／Ｏ制御部は、前記Ｉ／Ｏデバイス割り当て部と、処理要求受付部と、並列処理発行部とを含んで構成され、前記Ｉ／Ｏデバイスからの割込処理を複数の論理区画へ並列的に発行することを特徴とする請求項６に記載の計算機。
【請求項８】
前記Ｉ／Ｏデバイス割り当て部は、Ｉ／Ｏデバイス毎に前記複数の論理区画を設定するとともに、各論理区画に対応するＣＰＵを設定するレジスタを備えたことを特徴とする請求項７に記載の計算機。
【請求項９】
前記Ｉ／Ｏデバイスは、前記論理区画に対して割込処理を要求するとともに、前記処理要求受付部と、前記Ｉ／Ｏデバイス割り当て部と、並列処理発行部とを内包し、当該Ｉ／Ｏデバイスに設定された前記複数の論理区画のＣＰＵへ、それぞれ割込処理を並列的に発行することを特徴とする請求項６に記載の計算機。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想計算機システムに関し、複数の論理区画とＩ／Ｏデバイスの割当を動的に変更する技術に関する。
【背景技術】
【０００２】
サーバ台数の増加と共に運用に関する複雑さが増加しており運用コストが問題化しており、運用コストを低減する技術として複数サーバを１台にまとめるサーバ統合が注目を集めている。サーバ統合を実現する技術として、一つのコンピュータを任意の割合で論理的に分割する仮想計算機が知られており、ハイパバイザなどのファームウェア（またはミドルウェア）により、物理計算機を複数の論理区画（ＬＰＡＲ：Logical PARtition）に分割し、各ＬＰＡＲに対して計算機資源（ＣＰＵ、主記憶、Ｉ／Ｏ）を割当て、各ＬＰＡＲ上でそれぞれＯＳを動作させるもので、ＣＰＵを時分割で利用するため柔軟なサーバ統合が可能となる。
【０００３】
このような仮想計算機において、Ｉ／Ｏデバイスと各論理区画上のＯＳとの間でＤＭＡ（Direct  Memory  Access）によりデータの転送を行うものが知られている（例えば、特許文献１）。
【特許文献１】特開２００２−３１８７０１号
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、上記仮想計算機をオープン系サーバ（例えば、ブレードサーバ、ＰＣサーバ）で実現する場合、オープン系サーバは実装可能なＩ／Ｏデバイスの数が少ないため、複数の論理区画（論理区画上のＯＳ）でＩ／Ｏデバイスを共有する必要がある。Ｉ／Ｏデバイスを共有する際には、Ｉ／Ｏデバイスと各論理区画上のＯＳとの間でＤＭＡ転送を行ったり、Ｉ／ＯデバイスからのＩ／Ｏ割り込みを、共有しているＯＳにそれぞれ伝達する必要が生じる。
【０００５】
しかしながら、上記従来例では、Ｉ／Ｏデバイスに割り当てられた論理区画を超えてＤＭＡ転送を禁止しているため、Ｉ／Ｏデバイスは常にひとつの論理区画に対してしか通知を行うことができないため、複数のＯＳで一つのＩ／Ｏデバイスを共有することができず、各ＯＳに割り当てるＩ／Ｏデバイスが不足するという問題があった。
【０００６】
そこで本発明は、上記問題点に鑑みてなされたもので、複数の論理区画上のＯＳで一つのＩ／Ｏデバイスを共有可能にし、オープン系サーバで仮想計算機を実現することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、ＣＰＵ及び主記憶と、Ｉ／Ｏデバイスを接続するＩ／Ｏバスと、Ｉ／Ｏバスを制御するＩ／Ｏ制御部と、を含む物理計算機を複数の論理区画に分割し、各論理区画上でそれぞれＯＳを動作させ、各論理区画に対する物理計算機の資源の割当を制御するファームウェア（ハイパバイザ）とを備えた計算機において、ファームウェアからの指令に基づいて前記Ｉ／Ｏデバイスと複数の論理区画の対応関係を設定するＩ／Ｏデバイス割り当て部により、Ｉ／Ｏデバイスから受け付けた処理要求（ＤＭＡ転送または割込処理）を、Ｉ／Ｏデバイス割り当て部に設定された複数の論理区画へそれぞれ並列的に発行する並列処理発行部とを備える。
【発明の効果】
【０００８】
したがって、本発明は、Ｉ／Ｏデバイス毎に複数の論理区画の対応関係を設定しておくことで、Ｉ／Ｏデバイスからの処理要求を複数の論理区画へ並列的に発行することが可能となる。これにより、複数の論理区画でひとつのＩ／Ｏデバイスを共有する際に、Ｉ／Ｏデバイスの処理要求を必要とする論理区画のみへ発行することができるので、Ｉ／Ｏデバイスの少ないオープン系サーバにおいても仮想計算機を実現することができる。
【発明を実施するための最良の形態】
【０００９】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【００１０】
図１は、本発明の仮想計算機システムを動作させる物理計算機（オープン系サーバ）１００の構成を示す。ＣＰＵ１ａ、１ｂは、フロントサイドバス２を介してノースブリッジ３に接続される。
【００１１】
ノースブリッジ３には、メモリバス４を介してメモリ（主記憶）５が接続されるとともに、バス８を介してサウスブリッジ６が接続される。サウスブリッジ６にはＰＣＩバス７及び図示しないレガシーデバイスやディスクインタフェースが接続され、それぞれＣＰＵ１ａ、１ｂからアクセス可能となっている。なお、サウスブリッジ６は、ＰＣＩバス９等のＩ／Ｏバスを制御するコントローラであり、ノースブリッジ３はメモリ５を制御するコントローラであればよい。
【００１２】
ＰＣＩバス（Ｉ／Ｏバス）７は、図示しないデータバス、アドレスバス、割り込み信号などの信号線で構成されて、ＰＣＩスロット♯０〜♯３（図中１０〜１３）により共有される。
【００１３】
各ＰＣＩスロット♯０〜＃３には、それぞれＩ／Ｏデバイス＃０〜＃２（図中２０〜２２）が接続されている。
【００１４】
なお、物理計算機１００を構成するＣＰＵは１つでも良いし、２つ以上であっても良い。ＣＰＵが２つ以上の場合、各ＣＰＵ１ａ、１ｂはメモリ５を共有する密結合型マルチプロセッサであるとする。
【００１５】
ここで、物理計算機１００上で仮想計算機を実現するソフトウェアについて、図２を参照しながら詳述する。
【００１６】
物理計算機１００上でハイパバイザ（ファームウェアまたはミドルウェア）２００が稼動しており、ハイパバイザ２００は物理計算機１００を２つ以上の論理区画（ＬＰＡＲ：Ｌｏｇｉｃａｌ  ＰＡＲｔｉｔｉｏｎ）ＬＰＡＲ０（２１０）〜ＬＰＡＲｍ（２１ｍ）に分割し、計算機資源の割り当てを管理する。
【００１７】
ＬＰＡＲ０〜ＬＰＡＲｍのそれぞれでＯＳ０（２２０）〜ＯＳｍ（２２ｍ）を動作させ、各ＯＳ上でそれぞれアプリケーション０（２３０）〜アプリケーションｍ（２３ｍ）を動作させる。
【００１８】
ハイパバイザ２００は、各ＬＰＡＲ（２１０〜２１ｍ）に対して物理計算機１００のＣＰＵ１ａ、１ｂ、メモリ５、ＰＣＩスロット♯０〜♯３のＩ／Ｏデバイス＃０〜＃２（計算機資源）を割当てる。ハイパバイザ２００は、一つのＩ／Ｏデバイスに対して複数のＯＳ（２２０〜２２ｍ）を割り当てることができ、換言すればＩ／Ｏデバイス＃０〜＃３は複数のＬＰＡＲ０〜ｍで共有可能に構成される。
【００１９】
さらに、ハイパバイザ２００は、各Ｉ／Ｏデバイス＃０〜＃３と各ＯＳ０〜ｍ（２２０〜２２ｍ）の間でＤＭＡ転送を行う際には、後述するように、各ＯＳ０〜ＯＳｍの起動時にサウスブリッジ６に対してＤＭＡ転送の設定を行う。
【００２０】
このＤＭＡ転送は、Ｉ／Ｏデバイス＃０〜＃３からのＤＭＡ転送要求に応じて、サウスブリッジ６がノースブリッジ３を介してメモリ５の所定の領域に書き込むことで実現される。
【００２１】
ここで、本実施形態では、複数のＯＳで一つのＩ／Ｏデバイスを共有し、サウスブリッジ６がＤＭＡ転送を制御する場合について、以下に説明する。なお、以下の説明では、２つのＬＰＡＲ０、ＬＰＡＲ１で一つのＩ／Ｏデバイス＃０を共有する場合について説明するが、２つ以上のＯＳで他のＩ／Ｏデバイスを共有する場合も同様である。
【００２２】
図３は、サウスブリッジ６のうちＤＭＡ制御部６２を中心としたシステム図であり、サウスブリッジ６は、ＣＰＵ側のノースブリッジ３とサウスブリッジ６を接続するインターフェース６１と、ＰＣＩバス７に接続されるＰＣＩバスインターフェース６０と、図１に示したＩ／Ｏデバイス＃０〜＃３からのＤＭＡ転送要求に応じて、メモリ５へデータを書き込むＤＭＡ制御部６２を備える。
【００２３】
ここで、ＤＭＡ制御部６２には、ハイパバイザ２００からの指令によって一つのＩ／Ｏデバイスから複数のＯＳ（ＬＰＡＲ）へＤＭＡ転送を振り分ける（並列化する）並列制御部６３が設けられる。
【００２４】
並列制御部６３には、Ｉ／Ｏデバイス＃０〜＃３の共有を設定するデバイスレジスタ６１０と、Ｉ／Ｏデバイス毎に設けられて、共有するＬＰＡＲと、各ＬＰＡＲのＤＭＡバッファアドレスを示す並列転送レジスタ６２０を備え、共有されているＩ／ＯデバイスからＤＭＡ転送要求があると、並列転送レジスタ６２０が指し示すメモリ５の複数のアドレスへＤＭＡ転送を行う。
【００２５】
デバイスレジスタ６１０は、図４で示すように、Ｉ／Ｏデバイス＃０〜＃３の数だけ設定されており、デバイス番号６１１に対応して、複数のＬＰＡＲへの並列的なＤＭＡ転送を行うか否かを示す並列化フラグ６１２と、Ｉ／Ｏデバイスの発行元ＩＤから構成される。並列化フラグＦｐは１であれば、ＤＭＡ転送を並列的に行うことを示し、０であれば並列化を行わないことを示す。また、発行元ＩＤはＩ／ＯデバイスのＰＣＩバス７上のＩＤを示し、PCI Local Bus Specification Rev. 2.2等で規定されるバス番号、デバイス番号、ファンクション番号から構成される情報である。
【００２６】
次に、並列転送レジスタ６２０は、図５で示すように、Ｉ／Ｏデバイス＃０〜＃３毎に独立したレジスタで構成され、ハイパバイザ２００が設定するＬＰＡＲ番号６２１に対応して、共有の有無を示す共有フラグ６２２と、転送先のアドレスオフセット値６２３が、ＬＰＡＲ番号６２４毎に設定される。
【００２７】
図５において、６２０はＩ／Ｏデバイス＃０の並列転送レジスタ６２０の一例を示し、ＬＰＡＲ０とＬＰＡＲ１が共有フラグを１にセットしていることから、Ｉ／Ｏデバイス＃０が２つのＬＰＡＲ０、１で共有されていることを示している。そして、転送先のアドレスオフセット値６２３は、ＬＰＡＲ０のＩ／Ｏデバイス＃０のＤＭＡバッファアドレスが後述するようにＣ−Ａ’であり、ＬＰＡＲ１のＩ／Ｏデバイス＃０のＤＭＡバッファアドレスがＣ−Ｂ’−Ｌ１stであることを示している。なお、Ｌ１stはＬＰＡＲ１の開始物理アドレスを指す。また、ＬＰＡＲ０の開始物理アドレスは０ｈであり、論理アドレス区間と物理アドレス空間は一致する。
【００２８】
次に、Ｉ／Ｏデバイス＃０は、図６で示すように、ＰＣＩバスインターフェース２０１、デバイスインターフェース２０２、Ｉ／Ｏデバイス本体２０３及びＤＭＡコントローラ２０４から構成される。例えば、Ｉ／Ｏデバイス＃０がＮＩＣ（Network  Interface  Card）の場合、受信が発生するとＤＭＡコントローラ２０４は、受信データを転送するＤＭＡトランザクションをサウスブリッジ６に対して発行する。
【００２９】
このＤＭＡトランザクション３００は、例えば、図７で示すように構成され、ヘッダ３０１には要求の内容（図中ＴＹＰＥ）３０２と、転送先アドレス３０３、発行元ＩＤ３０４で構成され、ヘッダ３０１に続いてデータ３０５が結合される。
【００３０】
なお、転送先アドレス３０３は、物理計算機１００の起動時に、ハイパバイザ２００が設定したハイパバイザ用のＤＭＡバッファのアドレス（図中Ｃ）が設定される。この転送先アドレス３０３は、ＤＭＡコントローラ２０４の図示しないＤＭＡレジスタに設定される。また、発行元ＩＤ３０４は、上記デバイスレジスタ６１０の発行元ＩＤ６１３と同一である。
【００３１】
ここで、メモリ５に設定されたＬＰＡＲ０のＯＳ０のメモリ空間と、ＬＰＡＲ１のＯＳ１のメモリ空間及びハイパバイザ用ＤＭＡバッファの関係について、図８を参照しながら説明する。
【００３２】
メモリ５の物理アドレスは、０〜１０ＧＢまであり、このうち、０〜４ＧＢのアドレス空間（領域）がＯＳ０に割り当てられ、４ＧＢ〜８ＧＢのアドレス空間がＯＳ１に割り当てられ、さらに、８ＧＢ以上の物理アドレスＣから２ＭＢのアドレス空間がハイパバイザ用ＤＭＡバッファ５０に割り当てられている。
【００３３】
そして、ＬＰＡＲ０のＯＳ０に割り当てられた物理アドレス空間は、０〜４ＧＢの論理アドレス空間５ＡとしてＯＳ０が利用し、ＯＳ０の起動時に論理アドレスＡから２ＭＢのアドレス空間にＯＳ０用のＤＭＡバッファ５１が確保される。このＤＭＡバッファ５１は、Ｉ／Ｏデバイス＃０に対応付けられている。
【００３４】
一方、ＬＰＡＲ１のＯＳ１に割り当てられた４〜８ＧＢの物理アドレス空間は、０〜４ＧＢの論理アドレス空間５ＢとしてＯＳ１が利用し、ＯＳ１の起動時に論理アドレスＢから２ＭＢのアドレス空間にＯＳ１用のＤＭＡバッファ５２が確保される。このＤＭＡバッファ５２は、Ｉ／Ｏデバイス＃０に対応付けられている。
【００３５】
ここで、物理アドレスを管理するハイパバイザ２００は、各ＯＳ０、１が確保したＤＭＡバッファ５１、５２から、各ＯＳ用のＤＭＡバッファ５１、５２の物理アドレスＡ’、Ｂ’を管理している。
【００３６】
次に、ＬＰＡＲ０、１のＯＳ０、１でＩ／Ｏデバイス＃０を共有し、ＤＭＡ転送を行う例を説明する。
【００３７】
ＯＳ０、１がそれぞれ起動すると、上述のようにＤＭＡバッファ５１、５２を確保し、各ＯＳ０、１はハイパバイザ２００にＩ／Ｏデバイス＃０の割り当てと、ＤＭＡ転送を要求する。
【００３８】
ハイパバイザ２００は、複数のＯＳがＩ／Ｏデバイス＃０のＤＭＡ転送を要求したことから、図４のデバイスレジスタ６１０のデバイス番号０（Ｉ／Ｏデバイス＃０）の並列化フラグを１にセットするとともに、Ｉ／Ｏデバイス＃０のＰＣＩバスインターフェース２０１から発行元ＩＤを読み込んで、デバイスレジスタ６１０の発行元ＩＤにセットする。なお、物理計算機１００の起動時には、上述したようにＩ／Ｏデバイス＃０のＤＭＡ転送先アドレスとして、ハイパバイザ用ＤＭＡバッファ５０のアドレスＣがＤＭＡコントローラ２０４にセットされている。
【００３９】
次に、ハイパバイザ２００は、Ｉ／Ｏデバイス＃０とＯＳ０、１の間で並列的なＤＭＡ転送を行うため、Ｉ／Ｏデバイス＃０の並列転送レジスタ６２０のＬＰＡＲ０とＬＰＡＲ１の共有フラグをそれぞれ１にセットする。そして、ハイパバイザ２００は、ハイパバイザ用ＤＭＡバッファアドレスＣと、ＯＳ０用ＤＭＡバッファ５１の物理アドレスＡ’のオフセット（Ｃ−Ａ’＝Ｃ−Ａ）を並列転送レジスタ６２０の転送先アドレスオフセット値６２３にセットする。
【００４０】
同様にハイパバイザ２００は、ハイパバイザ用ＤＭＡバッファアドレスＣと、ＯＳ１用ＤＭＡバッファ５２の物理アドレスＢ’のオフセット（Ｃ−Ｂ’＝Ｃ−Ｂ−Ｌ１st）をＩ／Ｏデバイス＃０の並列転送レジスタ６２０の転送先アドレスオフセット値６２３にセットする。
【００４１】
起動が完了して、Ｉ／Ｏデバイス＃０からＤＭＡトランザクション３００が発生すると、Ｉ／Ｏデバイス＃０からサウスブリッジ６に対して、上記図７のようなＴＹＰＥ（＝ＭＷｒ＝メモリ書き込み要求）のヘッダ３０１及びデータ３０５が送られる。
【００４２】
ＤＭＡ制御部６２は、ヘッダ３０１から発行元ＩＤ３０４を抽出して、デバイスレジスタ６１０の発行元ＩＤと比較してＤＭＡ転送元がＩ／Ｏデバイス＃０であることを判定する。同時に並列化フラグが１であるかを判定し、１の場合には後述のように並列転送を行い、０の場合には並列転送を行わずＤＭＡトランザクション３００のヘッダ３０１に記載された転送先アドレス（すなわちハイパバイザ用ＤＭＡバッファアドレス）３０３に転送を行う。
【００４３】
並列化フラグが１であれば、ＤＭＡ制御部６２は、並列転送レジスタ６２０のＩ／Ｏデバイス＃０を参照して、共有フラグが１にセットされているＬＰＡＲを検索する。そして、図５においては、ＬＰＡＲ０に共有フラグがセットされているので、転送先アドレスオフセット値（Ｃ−Ａ’）を読み込み、このオフセット値をＤＭＡトランザクション３００から抽出した転送先アドレス３０３（＝Ｃ）から減算する。ＤＭＡトランザクション３００の転送先アドレスは上記したようにハイパバイザ用ＤＭＡバッファアドレスＣとなっているので、求められるアドレスは、Ｃ−（Ｃ−Ａ’）＝Ａ’となって、ＬＰＡＲ０の物理アドレス空間に対応するＤＭＡバッファ５１’のアドレスＡ’が得られる（図８参照）。
【００４４】
ＤＭＡ制御部６２は、ＤＭＡトランザクション３００のデータ３０５を、メモリ５の物理アドレスＡ’に転送し、ＯＳ０のＤＭＡバッファ５１にデータを書き込む。
【００４５】
ＤＭＡ制御部６２は、さらに並列転送レジスタ６２０を検索し、ＬＰＡＲ１に共有フラグがセットされているので、転送先アドレスオフセット値（Ｃ−Ｂ’）を読み込み、このオフセット値をＤＭＡトランザクション３００から抽出した転送先アドレス３０３（＝Ｃ）から減算する。上記と同様に、ＤＭＡトランザクション３００の転送先アドレスは上記したようにハイパバイザ用ＤＭＡバッファアドレスＣとなっているので、求められるアドレスは、Ｃ−（Ｃ−Ｂ’）＝Ｂ’となって、ＬＰＡＲ１の物理アドレス空間に対応するＤＭＡバッファ５２’のアドレスＢ’が得られる。
【００４６】
ＤＭＡ制御部６２は、ＤＭＡトランザクション３００のデータ３０５を、メモリ５の物理アドレスＢ’に転送し、ＯＳ１のＤＭＡバッファ５２にデータを書き込む。
【００４７】
こうして、ＤＭＡ制御部６２は、並列転送レジスタ６２０の共有フラグがセットされているＬＰＡＲに対して、ＤＭＡトランザクション３００が指し示すアドレスからオフセット値を差し引いた物理アドレスへ、順次データを転送することで、一つのＩ／Ｏデバイス＃０からのＤＭＡ転送要求を複数のＬＰＡＲへ並列的に書き込むことが可能となる。
【００４８】
したがって、Ｉ／Ｏデバイスの数が少ないオープン系サーバにおいても、Ｉ／Ｏデバイスを共有することで、複数のＬＰＡＲを備えた仮想計算機を実現することが可能となって、サーバの台数を低減することができるのである。
【００４９】
また、ＰＣＩバス７のＩ／Ｏデバイス＃０〜＃３のＤＭＡトランザクション３００を、サウスブリッジ６で並列化するので、ＰＣＩバス７のデータトラフィックの増大を回避しながらＤＭＡ転送の並列化を図って複数のＯＳによるＩ／Ｏデバイスの共有が可能となる。
【００５０】
なお、上記実施形態においては、並列制御部６３をサウスブリッジ６に設けた一例を示したが、図示はしないがノースブリッジ３に設けても良い。
【００５１】
＜変形例１＞
上記第１の実施形態では、サウスブリッジ６に並列制御部６３を設けたが、図６に示したＩ／Ｏデバイス＃０〜＃３のＤＭＡコントローラ２０４に並列転送レジスタ６２０を設けて、Ｉ／Ｏデバイス＃０〜＃３からのＤＭＡトランザクション３００を並列化しても良い。
【００５２】
この場合、Ｉ／Ｏデバイス＃０〜＃３毎に並列転送レジスタ６２０を設け、サウスブリッジ６は従来と同様のＤＭＡ制御部６２を備えるだけでよい。そして、ハイパバイザ２００が各Ｉ／Ｏデバイス＃０〜＃３の並列転送レジスタ６２０にアクセスし、共有フラグ６２２とオフセット値６２３を設定する。
【００５３】
Ｉ／Ｏデバイス＃０〜＃３でＤＭＡ転送が発生すると、各Ｉ／Ｏデバイス＃０〜＃３の並列転送レジスタ６２０のオフセット値６２３に応じて、複数のＯＳへＤＭＡ転送が行われる。
【００５４】
したがって、前記第１の実施形態と同様に、複数のＯＳ（ＬＰＡＲ）によるＩ／Ｏデバイス＃０〜＃３の共有を実現することができる。なお、この場合では、Ｉ／Ｏデバイス側に並列転送レジスタ６２０を設けるので、デバイスレジスタ６１０は不要となり、構成を簡易にすることができる。
【００５５】
＜第２実施形態＞
図９〜図１４は第２の実施形態を示し、前記第１実施形態のサウスブリッジ６にＩ／Ｏデバイス＃０〜＃３からのＩ／Ｏ割込（外部割込）を、Ｉ／Ｏデバイスを共有する複数のＬＰＡＲ上のＯＳに通知する割込制御部６４を設けた一例を示す。
【００５６】
図９は、前記第１実施形態に示したサウスブリッジ６のうち、Ｉ／Ｏデバイス＃０〜＃３からの割込要求（割込信号）を複数のＯＳ（ＣＰＵ１ａ，１ｂ）へ通知する割込制御部６４を中心としたシステム図である。
【００５７】
サウスブリッジ６は、ＣＰＵ側のノースブリッジ３とサウスブリッジ６を接続するインターフェース６１と、ＰＣＩバス７に接続されるＰＣＩバスインターフェース６０と、図１に示したＩ／Ｏデバイス＃０〜＃３からのＩ／Ｏ割込に応じて、ＣＰＵ１ａ、１ｂにそれぞれ割込を通知する割込制御部６４を備える。
【００５８】
また、Ｉ／Ｏデバイス＃０〜＃３には、図１０で示すように、ＰＣＩバスインターフェース２０１、デバイスインターフェース２０２、Ｉ／Ｏデバイス本体２０３、ＤＭＡコントローラ２０４、割込コントローラ２０５から構成される。例えば、Ｉ／Ｏデバイス＃０がＮＩＣ（Network  Interface  Card）の場合、受信が発生すると割込コントローラ２０５は、Ｉ／Ｏ割込を通知する割込信号をサウスブリッジ６に対して発行する。
【００５９】
なお、その他の構成は前記第１実施形態と同様であるので、重複した説明を省略する。
【００６０】
ここで、サウスブリッジ６の割込制御部６４には、ハイパバイザ２００からの指令によって一つのＩ／Ｏデバイスから複数のＯＳ（ＣＰＵ）へＩ／Ｏ割込を振り分ける（並列化する）ための並列割込レジスタ６４０が設けられる。
【００６１】
次に、並列割込レジスタ６４０は、図１１で示すように、Ｉ／Ｏデバイス＃０〜＃３毎に独立したレジスタで構成され、ハイパバイザ２００が設定するＬＰＡＲ番号６４１に対応して、共有の有無を示す共有フラグ６４２と、割込通知の宛先を示すＣＰＵ識別子６４３、ＣＰＵからの割込処理完了通知を示すＥＯＩ（End  Of  Interrupt）フラグ６４４を格納する領域が、ＬＰＡＲ番号６４１毎に設定される。
【００６２】
図１１において、６４０はＩ／Ｏデバイス＃０の並列割込レジスタ６４０の一例を示し、ＬＰＡＲ０とＬＰＡＲ１の共有フラグ６４２が「１」にセットされていることから、Ｉ／Ｏデバイス＃０は２つのＬＰＡＲ０、１で共有されていることを示している。
【００６３】
そして、ＬＰＡＲ０にＣＰＵ１ａ（図１のＣＰＵ＃０）が割り当てられ、ＬＰＡＲ１にＣＰＵ１ｂ（図１のＣＰＵ＃１）が割り当てられている場合、並列割込レジスタ６４０にはＬＰＡＲ０のＣＰＵ識別子６４３には、図１に示した＃０が設定され、ＬＰＡＲ１のＣＰＵ識別子６４３には、図１に示した＃１が設定される。
【００６４】
さらに、現在割込処理完了通知が発生していないことから、ＬＰＡＲ０、１のＥＯＩフラグ６４４には「０」がセットされ、ＬＰＡＲに割り当てられたＣＰＵから割込処理完了通知が通知されると、ＥＯＩフラグ６４４は１に変更される。なお、ＥＯＩフラグ６４４はＩ／Ｏ割込が発生する度に、割込制御部６４によって「０」にリセットされる。
【００６５】
次に、ＬＰＡＲ０、１のＯＳ０、１でＩ／Ｏデバイス＃０を共有し、サウスブリッジ６がＩ／Ｏ割込を並列化して通知する例を説明する。
【００６６】
まず、物理計算機１００で実行されるハイパバイザ２００が、ＬＰＡＲ上でＯＳを起動するたびに実行する並列割込の設定処理について、図１２のフローチャートを参照しながら説明する。
【００６７】
ハイパバイザ２００は、ＯＳを起動させるＬＰＡＲ及びＣＰＵを決定し（Ｓ１）、このＯＳ（ＬＰＡＲ）に割り当てるＩ／Ｏデバイスを選択する（Ｓ２）。次に、選択したＩ／Ｏデバイス＃０〜＃３に対応する並列割込レジスタ６４０をサウスブリッジ６から読み込み（Ｓ３）、共有フラグを参照して他のＬＰＡＲと共有するか否かを判定する（Ｓ４）。なお、この判定は、前記第１実施形態のようにサウスブリッジ６に設けたデバイスレジスタ６１０の並列化フラグ６１２を参照しても良い。
【００６８】
共有しない場合には、そのままＳ６に進んでＯＳ（ゲストＯＳ）を起動する。共有する場合には、ＯＳを起動するＬＰＡＲに対応する共有フラグ６４２を「１」にセットするともに、共有するＬＰＡＲの共有フラグも「１」にセットする。そして、各ＬＰＡＲに割り当てられたＣＰＵの識別子６４３を設定する（Ｓ５）。
【００６９】
こうして、サウスブリッジ６の並列割込レジスタ６４０設定が完了すると、ゲストＯＳの起動を開始する（Ｓ６）。
【００７０】
なお、Ｉ／Ｏデバイス＃０〜＃３の割込コントローラ２０５は、物理計算機１００の起動時に初期化され、割込番号が割込コントローラ２０５に設定される。
【００７１】
次に、Ｉ／Ｏ割込からＩ／Ｏデバイス＃への完了通知までを図１３のタイムチャートを参照しながら説明する。
【００７２】
Ｉ／Ｏ割込が発生すると、Ｉ／Ｏデバイスはサウスブリッジ６の割込制御部６４へ割込番号に対応する割込信号を送出する（ｔ１）。
【００７３】
サウスブリッジ６の割込制御部６４は、Ｉ／Ｏデバイスからの割込信号を受け付けると、割込識別子からＩ／Ｏデバイスを特定する。そして、特定したＩ／Ｏデバイスに対応する並列割込レジスタ６４０の共有フラグ６４２を参照して、共有されているか否かを判定する。共有されていない場合には、所定のＣＰＵ（例えば、ＣＰＵ１ａ）にＩ／Ｏ割込を通知する。
【００７４】
一方、共有されている場合には、並列割込レジスタ６４０に設定された宛先のＣＰＵ識別子６４３の全てについて、Ｉ／Ｏ割込を通知する（ｔ２）。図１１の例では、ＬＰＡＲ０、１のＣＰＵ１ａ、１ｂ（＃０、＃１）についてＩ／Ｏ割込が通知される。このとき、割込制御部６４はＬＰＡＲ０、１のＥＯＩフラグ６４４をそれぞれ「０」にリセットする。
【００７５】
この通知を受けたＣＰＵ＃０、＃１はそれぞれ割込処理を開始する（ｔ３）。例えば、ＣＰＵ＃０が先に割込処理を完了すると、ＣＰＵ＃０は割込処理完了通知（ＥＯＩ＃０）をサウスブリッジ６の割込制御部６４に通知する（ｔ４）。この通知を受けた割込制御部６４は、並列割込レジスタ６４０のＥＯＩフラグ６４４のうち、通知を受けたＣＰＵの識別子を有するＥＯＩフラグを「１」にセットする（ｔ５）。
【００７６】
この時点でＣＰＵ＃１は割込処理を実行中であり、ＣＰＵ＃１に対応するＥＯＩフラグ６４４は「０」であるため、割込制御部６４はＩ／Ｏ割込の発行元のＩ／Ｏデバイスへの完了通知を保留する。
【００７７】
ＣＰＵ＃１は割込処理が完了すると、割込処理完了通知（ＥＯＩ＃１）をサウスブリッジ６の割込制御部６４に通知する（ｔ６）。この通知を受けた割込制御部６４は、並列割込レジスタ６４０のＥＯＩフラグ６４４のうち、通知を受けたＣＰＵ＃１のＥＯＩフラグを「１」にセットする（ｔ５）。
【００７８】
この時点では、図１１に示した並列割込レジスタ６４０に共有フラグ６４２がセットされたＬＰＡＲについて、全てＥＯＩフラグが「１」となったことから、割込制御部６４は全てのＣＰＵ（またはＯＳ）での割込処理が完了したと判定して、発行元のＩ／Ｏデバイスに対して割込処理完了通知ＥＯＩを送信する。
【００７９】
なお、上記割込制御部６４における、各ＣＰＵの割込処理完了通知の判定は、図１３で示すようなハードウェアで構成することができる。
【００８０】
図１３において、加算器６５１は並列割込レジスタ６４０のＥＯＩフラグ６４４の値を加算した結果を出力し、加算器６５２は並列割込レジスタ６４０の共有フラグ６４２の値を加算した結果を出力する。ゲート６５３は、加算器６５１と６５２の値が一致したときにＯＮを出力する。
【００８１】
一方、ゲート６５４は、共有フラグ６４２のいずれかが「１」であればＯＮを出力する。ゲート６５５は、ゲート６５４とゲート６５３の信号が共にＯＮであれば、割込処理完了通知ＥＯＩをＩ／Ｏデバイスに送信する。
【００８２】
したがって、共有フラグ６４２がセットされたＬＰＡＲは、全てのＬＰＡＲのＥＯＩフラグ６４４が「１」になって、割込制御部６４は初めてＩ／Ｏデバイスに対して割込処理完了通知ＥＯＩを送るのである。なお、ゲート６５４は、共有フラグ６４２及びＥＯＩフラグ６４４が全て０のときに割込制御部６４がＥＯＩを送信するのを防ぐものである。
【００８３】
こうして、割込制御部６４は、並列割込レジスタ６４０の共有フラグ６４２がセットされているＬＰＡＲのＣＰＵ（またはＯＳ）に対して、Ｉ／Ｏ割込を並列的に通知することが可能となって、一つのＩ／Ｏデバイスを複数のＬＰＡＲで共有することができる。
【００８４】
したがって、Ｉ／Ｏデバイスの数が少ないオープン系サーバ（ブレードやＰＣサーバ）においても、Ｉ／Ｏデバイスを共有することで、複数のＬＰＡＲを備えた仮想計算機を実現することが可能となって、サーバの台数を低減することができるのである。
【００８５】
なお、上記第２実施形態においては、割込制御部６４をサウスブリッジ６に設けた一例を示したが、図示はしないがノースブリッジ３に設けても良い。
【００８６】
＜変形例２＞
上記第２の実施形態では、サウスブリッジ６に割込制御部６４を設けたが、図１０に示したＩ／Ｏデバイス＃０〜＃３の割込コントローラ２０５に並列割込レジスタ６４０を設けて、Ｉ／Ｏデバイス＃０〜＃３からの割込信号を並列化しても良い。
【００８７】
この場合、Ｉ／Ｏデバイス＃０〜＃３毎に並列割込レジスタ６４０を設け、サウスブリッジ６は従来と同様の割込制御部６４を備えるだけでよい。そして、ハイパバイザ２００が各Ｉ／Ｏデバイス＃０〜＃３の並列割込レジスタ６４０にアクセスし、共有フラグ６４２と宛先ＣＰＵ識別子６４３及びＥＯＩフラグ６４４を設定する。
【００８８】
Ｉ／Ｏデバイス＃０〜＃３でＩ／Ｏ割込が発生すると、各Ｉ／Ｏデバイス＃０〜＃３の並列割込レジスタ６４０の宛先ＣＰＵに応じて、複数のＯＳ（ＣＰＵ）へＩ／Ｏ割込が通知される。
【００８９】
そして、各ＣＰＵで割込処理が完了する度に、ＥＯＩフラグ６４４が順次「１」となり、並列割込レジスタ６４０の共有フラグ６４２がセットされた全てのＬＰＡＲのＥＯＩフラグ６４４が１になると、割込コントローラ２０５からＩ／Ｏデバイスに対して割込処理完了通知ＥＯＩが行われる。
【００９０】
したがって、前記第２の実施形態と同様に、複数のＯＳ（ＬＰＡＲ）によるＩ／Ｏデバイス＃０〜＃３の共有を実現することができる。
【００９１】
なお、上記各実施形態においては、フロントサイドバス２を共有バスとしたが、ポイントｔｏポイントのクロスバー型のバスとしても良く、同様にノースブリッジ３とサウスブリッジ６をクロスバー型のバスで接続することができる。さらに、ノースブリッジ３にメモリバス４を接続したが、ＣＰＵ１ａ、１ｂにメモリバスを接続する構成としても良い。
【００９２】
また、上記実施形態においては、ひとつのＰＣＩバスを備えた物理計算機１００を一例としたが、図示はしないが複数のＩ／Ｏバスを備えた物理計算機に適用することができ、さらに、異なるＩ／Ｏバスを複数備えた物理計算機に適用することも可能である。
【産業上の利用可能性】
【００９３】
以上のように、本発明ではＩ／ＯデバイスからのＤＭＡ転送またはＩ／Ｏ割込を、複数のＬＰＡＲへ並列的に転送できるので、Ｉ／Ｏデバイスを共有する仮想計算機を実現するのに最適な物理計算機（サーバまたはパーソナルコンピュータ）を提供することができる。
【図面の簡単な説明】
【００９４】
【図１】物理計算機の構成を示すシステム図。
【図２】物理計算機で稼動する仮想計算機のソフトウェア構成を示すシステム図。
【図３】ＤＭＡ制御部を中心とするサウスブリッジのシステム図。
【図４】デバイスレジスタの一例を示す説明図。
【図５】並列転送レジスタの一例を示す説明図。
【図６】Ｉ／Ｏデバイスの一例を示すシステム図。
【図７】ＤＭＡトランザクションの一例を示す説明図。
【図８】物理アドレス空間と各ＬＰＡＲの論理アドレス空間とＤＭＡバッファの関係を示す説明図。
【図９】第２の実施形態を示し、割込制御部を中心とするサウスブリッジのシステム図。
【図１０】同じく、Ｉ／Ｏデバイスの一例を示すシステム図。
【図１１】同じく、並列割込レジスタの一例を示す説明図。
【図１２】同じく、ハイパバイザで行われる共有設定処理の一例を示すフローチャート。
【図１３】同じく、Ｉ／Ｏデバイスから割込処理の処理の流れを示すタイムチャート。
【図１４】同じく、割込処理完了通知のハードウェア構成の一例を示すシステム図。
【符号の説明】
【００９５】
１ａ，１ｂ  ＣＰＵ
５  メモリ
６  サウスブリッジ
７  ＰＣＩバス
６２  ＤＭＡ制御部
６３  並列制御部
６４  割込制御部
１００  物理計算機
２００  ハイパバイザ
【図１】
2005309553.tif 000003
【図２】
2005309553.tif 000004
【図３】
2005309553.tif 000005
【図４】
2005309553.tif 000006
【図５】
2005309553.tif 000007
【図６】
2005309553.tif 000008
【図７】
2005309553.tif 000009
【図８】
2005309553.tif 000010
【図９】
2005309553.tif 000011
【図１０】
2005309553.tif 000012
【図１１】
2005309553.tif 000013
【図１２】
2005309553.tif 000014
【図１３】
2005309553.tif 000015
【図１４】
2005309553.tif 000016