(57)【要約】【課題】物理サーバ及び論理サーバ間でＩＯカードを共有する計算機システムを提供する。【解決手段】物理サーバ又は論理サーバが、ＩＯカードを専有、又は、共有して使用可能に予め設定され、ＩＯハブは、ＩＯカードに対応する物理ＭＭＩＯアドレスに対して、物理サーバ又は論理サーバの各々に固有な仮想ＭＭＩＯアドレスを割り当て、割り当てられた仮想ＭＭＩＯアドレスと、物理ＭＭＩＯアドレス並びに物理サーバ又は論理サーバに固有のサーバ識別子と、の関係を示す割り当て情報を保持し、物理サーバ又は論理サーバからＩＯカードへのアクセス要求が送信されたときに、割り当て情報を参照して、アクセス要求からサーバ識別子を抽出して、アクセス要求元の物理サーバ又は論理サーバを識別する【選択図】図１
2008021252.tif 000002
【特許請求の範囲】
【請求項１】
一つ以上のプロセッサとメモリとノースブリッジとから構成される一つ以上のノードと、
一つ以上のＩＯカードと一つ以上のＩＯカードを接続するＩＯブリッジとを接続するＩＯハブと、
前記ノードと前記ＩＯハブとを相互接続するスイッチと、を備える計算機システムであって、
一又は複数のノードによって稼働する物理サーバと、論理的に分割された前記物理サーバによって稼働する論理サーバと、を備え、
前記物理サーバ又は前記論理サーバが、前記スイッチを介して前記ＩＯハブに接続された前記ＩＯカードを専有又は共有して使用可能に予め設定され、
前記ＩＯハブは、
前記ＩＯカードに対応する物理ＭＭＩＯアドレスに、前記物理サーバ又は前記論理サーバの各々に固有な仮想ＭＭＩＯアドレスを割り当て、
前記割り当てられた仮想ＭＭＩＯアドレスと、前記物理ＭＭＩＯアドレスと、前記物理サーバ又は前記論理サーバに固有のサーバ識別子と、の関係を示す割り当て情報を保持し、
前記物理サーバ又は前記論理サーバから前記ＩＯカードへのアクセス要求を受信した場合は、前記割り当て情報を参照して、前記アクセス要求から前記サーバ識別子を抽出し、
前記抽出されたサーバ識別子に基づいて、前記アクセス要求元の前記物理サーバ又は前記論理サーバを識別することを特徴とする計算機システム。
【請求項２】
前記ＩＯハブは、
前記物理サーバ又は前記論理サーバから前記ＩＯカードへのアクセス要求を受信した場合は、前記サーバ識別子を前記受信したアクセス要求と共に前記ＩＯカードに送信し、
前記ＩＯカードから前記アクセス要求に対応するＤＭＡ要求を受信した場合は、前記ＤＭＡ要求に含まれる前記サーバ識別子を抽出して、前記抽出されたサーバ識別子に基づいて、前記ＤＭＡ要求先の前記物理サーバ又は前記論理サーバを識別することを特徴とする請求項１に記載の計算機システム。
【請求項３】
前記ＩＯハブは、
前記ＤＭＡ要求に含まれるＤＭＡアドレスを、前記識別されたＤＭＡ要求先の前記物理サーバ又は前記論理サーバに対応したアドレスに変換して、
前記変換されたアドレスに基づいて、前記ＩＯカードから送信されたＤＭＡ要求を前記識別された前記物理サーバ又は前記論理サーバのメモリ空間に転送することを特徴とする請求項２に記載の計算機システム。
【請求項４】
前記ＩＯハブは、
前記物理サーバ又は前記論理サーバから前記ＩＯカードへのアクセス要求を受信した場合は、前記アクセス要求に含まれるＤＭＡアドレスの上位ビットに前記サーバ識別子を埋め込んで前記ＩＯカードに送信し、
前記ＩＯカードから前記アクセス要求に対応するＤＭＡ要求を受信した場合は、前記ＤＭＡ要求に含まれるＤＭＡアドレスの上位ビットに埋め込まれた前記サーバ識別子を抽出して、前記抽出されたサーバ識別子に基づいて、前記ＤＭＡ要求先の前記物理サーバ又は前記論理サーバを識別することを特徴とする請求項２に記載の計算機システム。
【請求項５】
一つ以上のプロセッサとメモリとノードコントローラとから構成される一つ以上のノードと、
一つ以上のＩＯカードと、一つ以上のＩＯカードを接続するＩＯブリッジと、を備え、
前記ノードコントローラが前記ノード間及び前記ノードと前記ＩＯカードとを相互接続する計算機システムであって、
前記ノードで稼働する物理サーバと、前記物理サーバ上で稼働するハイパバイザによって前記ノードで稼働される複数の論理サーバと、を備え、
前記物理サーバ又は前記論理サーバが、前記スイッチを介して、前記ＩＯハブに接続された前記ＩＯカードを専有又は共有して使用可能に予め設定され、
前記ノードコントローラは、
前記ＩＯカードに対応する物理ＭＭＩＯアドレスに、前記物理サーバと、前記論理サーバの各々に固有な仮想ＭＭＩＯアドレスを割り当て、
前記割り当てられた仮想ＭＭＩＯアドレスと、前記物理ＭＭＩＯアドレス、前記物理サーバ又は前記論理サーバに固有のサーバ識別子と、の関係を示す割り当て情報を保持し、
前記物理サーバ又は前記論理サーバから前記ＩＯカードへのアクセス要求を受信した場合は、前記割り当て情報を参照して、前記アクセス要求から前記サーバ識別子を抽出し、
前記抽出されたサーバ識別子に基づいて、前記アクセス要求元の前記物理サーバ又は前記論理サーバを識別することを特徴とする計算機システム。
【請求項６】
前記ノードコントローラは、
前記物理サーバ又は前記論理サーバから前記ＩＯカードへのアクセス要求を受信した場合は、前記サーバ識別子を前記受信したアクセス要求と共に前記ＩＯカードに送信し、
前記ＩＯカードから前記アクセス要求に対応するＤＭＡ要求を受信した場合は、前記ＤＭＡ要求に含まれる前記サーバ識別子を抽出して、前記抽出されたサーバ識別子に基づいて、前記ＤＭＡ要求先の前記物理サーバ又は前記論理サーバを識別することを特徴とする請求項５に記載の計算機システム。
【請求項７】
前記ノードコントローラは、
前記ＤＭＡ要求に含まれるＤＭＡアドレスを、前記識別されたＤＭＡ要求先の前記物理サーバ又は前記論理サーバに対応したアドレスに変換して、
前記変換されたアドレスに基づいて、前記ＩＯカードから送信されたＤＭＡ要求を前記識別された前記物理サーバ又は前記論理サーバのメモリ空間に転送することを特徴とする請求項６に記載の計算機システム。
【請求項８】
前記ノードコントローラは、
前記物理サーバ又は前記論理サーバから前記ＩＯカードへのアクセス要求を受信した場合は、前記アクセス要求に含まれるＤＭＡアドレスの上位ビットに前記サーバ識別子を埋め込んで前記ＩＯカードに送信し、
前記ＩＯカードから前記アクセス要求に対応するＤＭＡ要求を受信した場合は、前記ＤＭＡ要求に含まれるＤＭＡアドレスの上位ビットに埋め込まれた前記サーバ識別子を抽出して、前記抽出されたサーバ識別子に基づいて、前記ＤＭＡ要求先の前記物理サーバ又は前記論理サーバを識別することを特徴とする請求項６に記載の計算機システム。
【請求項９】
一つのノード上で稼働する物理サーバ又は前記物理サーバを分割した一以上の論理区画上で稼働する論理サーバによって共有されるＩＯカードのＭＭＩＯアドレスの割当方法であって、
前記ＩＯカードの物理ＭＭＩＯアドレスと前記物理ＭＭＩＯアドレスの物理ＭＭＩＯアドレス領域とを取得する手順と、
前記取得したＭＭＩＯアドレス領域に、前記ＩＯカードを共有する前記論理サーバの最大数を乗じた値を、仮想ＭＭＩＯアドレス領域として設定する手順と、
前記仮想ＭＭＩＯアドレス領域の未使用の領域における、使用済みのＭＭＩＯ領域の次の領域の開始アドレスを、前記ＩＯカードを共有する前記論理サーバが使用する仮想ＭＭＩＯアドレスとして決定し、前記決定された仮想ＭＭＩＯアドレスを前記論理サーバに割り当てる手順と、
前記割り当てられた仮想ＭＭＩＯアドレスと、前記物理ＭＭＩＯアドレスと、前記論理サーバ又は前記論理サーバに固有のサーバ識別子と、の関係を示す割り当て情報を作成する手順と、を備えることを特徴とするＭＭＩＯアドレスの割当方法。
【請求項１０】
前記ＩＯカードはＰＣＩ規格に準拠したインターフェースを備え、
前記ＩＯカードが使用するＰＣＩコンフィグレーション空間のバス番号、デバイス番号及びファンクション番号を、前記ＩＯカードを共有する前記論理サーバの最大数分確保することを要求する手順と、
前記ＰＣＩコンフィグレーション空間への要求に基づいて、前記ＩＯカードを共有する前記論理サーバの最大数を乗じた値を、仮想ＭＭＩＯアドレス領域として設定する手順と、を備えることを特徴とする請求項９に記載のＭＭＩＯアドレスの割当方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のサーバを統合した計算機システムに関し、特に、物理サーバ及び論理サーバ間でＩＯカードを共有する計算機システムに関する。
【背景技術】
【０００２】
近年の計算機性能の向上、特に、プロセッサのマルチコア化技術の進行によって、従来、複数のサーバに分散していた処理を、一つのサーバに集約してコストを削減する手法が多く用いられている。サーバへの集約には、サーバ分割を用いて、複数のオペレーティングシステムを１台のサーバ上で稼動させる方法が有効である。
【０００３】
サーバ分割には、プロセッサやメモリを含むノード単位でＯＳを割り当てる物理分割方式と、物理的なプロセッサやメモリを仮想化して計算機中に任意の数の論理的な区画を生成する論理分割方式とがある。これらは、それぞれメリット及びデメリットがある。
【０００４】
物理分割方式は、サーバの物理資源以上には分割できないため、統合できるサーバの数に制限がある。しかし、各サーバはハードウェア資源を専有するため、高い性能が出せる。
【０００５】
一方、論理分割方式は、ハイパバイザや仮想化ソフトウェアと呼ばれるファームウェアによって実現される。論理分割方式では各オペレーティングシステム（ゲストＯＳと呼ばれる）は、ハイパバイザが提供する論理プロセッサ上で実行される。ハイパバイザによって複数の論理プロセッサが物理プロセッサにマッピングされることによって、ノードよりも細かい単位に区画を分割できる。さらに、プロセッサに関しては、複数の論理区画間で一つの物理プロセッサを時分割で切り替えながら実行することもできる。これによって、物理プロセッサの数よりも多くの論理区画を生成し同時に実行することが可能になる。しかし、論理分割方式では仮想化ソフトウェアが介在するために、オーバヘッドを生じ、物理分割方式と比べると性能が劣る。
【０００６】
このように、両方の方式にはそれぞれメリット及びデメリットがあるため、両者を目的に合わせて適宜柔軟に組み合わせられることが望ましい。
【０００７】
また、これらサーバの物理分割方式及び論理分割方式を用いたサーバ統合に関して、以下のような課題がある。
【０００８】
まず第１の課題は、サーバ毎にＩＯカードが必要となり、統合の数が搭載可能ＩＯカード数によって制限されることである。そして、第２の課題は、サーバ統合によってシステム全体の性能が落ちる場合があることである。
【０００９】
これらの課題を解決する次のような従来技術が知られている。
【００１０】
論理分割方式におけるサーバ上でのＩＯ性能低下の防止を目的として、ＩＯカードからの直接ＤＭＡ（Direct Memory Access）を可能にするために、論理サーバに見せるゲストＤＭＡアドレスから主記憶上のホストＤＭＡアドレスへの変換テーブルを持つことで、論理サーバ環境下での直接ＤＭＡを実現する技術が知られている（特許文献１参照）。
【００１１】
また、同様の技術として、プロセッサがメモリにアクセスする際に仮想アドレスを物理アドレスに変換するＴＬＢという仕掛けをＩＯデバイス側にも拡張し、ＩＯデバイス毎に異なるページ変換のエントリを入れることによって、同一のゲストＤＭＡアドレスに対して異なるホストＤＭＡアドレスへの変換を可能とする技術も知られている（非特許文献１参照）。
【００１２】
一方、論理分割方式には、一つのコンピュータを任意の論理区画に分割するサーバ仮想化ソフトウェアが知られている（特許文献２参照）。サーバ仮想化ソフトウェアは、論理サーバ（ゲスト）からのＩＯアクセスの際に、必ずホストＯＳを介してＩＯアクセスを行うことで、複数論理サーバからのＩＯカードの共有が可能になる。これによって、論理サーバ間で必要なＩＯカード数を減らすことができる。
【特許文献１】特開２００４−２２０２１８号公報
【特許文献２】米国特許第６，４９６，８４７号明細書
【非特許文献１】インテル、Intel Virtualization Technology for Directed I/O Architecture Specification、［online］、［２００６年７月６日検索］、インターネット＜URL：http://www.intel.com/technology/computing/vptech/＞
【発明の開示】
【発明が解決しようとする課題】
【００１３】
前述の従来技術では、前述の２つの課題のそれぞれには解決できるが、両方の課題を同時に解決することはできない。
【００１４】
特許文献１では、ＩＯカードと論理サーバとの関係が１対１であることが前提となっており、ＤＭＡリクエストの発行元ＩＯカードから論理サーバを識別しているため、ＩＯカードを共有するような方式では対応できない。
【００１５】
一方、特許文献２のように、ホストＯＳ経由でＩＯにアクセスする方式では、ＩＯからのＤＭＡ転送に対して、ホストＯＳとゲストＯＳ間でメモリコピーが必要となるため、オーバヘッド増加による性能低下が避けられない。
【００１６】
本発明は、このような問題点を鑑みてなされたものであり、複数の物理サーバ及び論理サーバ間でＩＯカードが共有されている場合にも直接ＤＭＡ転送を可能とし、性能低下を抑えながらＩＯカード共有を実現する計算機システムを提供することを目的とする。
【課題を解決するための手段】
【００１７】
本発明の一実施態様によれば、１つ以上のプロセッサとメモリとノースブリッジから構成される一つ以上のノードと、一つ以上のＩＯカード及び一つ以上のＩＯカードを接続するＩＯブリッジを接続するＩＯカードと、ノードとＩＯカードと相互接続するスイッチとを備える計算機システムであって、ノードで稼働する物理サーバと、物理サーバ上で稼働するハイパバイザによって構成された論理サーバと、を備え、物理サーバ又は論理サーバが、ＩＯカードを専有、又は、共有して使用可能に予め設定され、ＩＯハブは、ＩＯカードに対応する物理ＭＭＩＯアドレスに対して、物理サーバ又は論理サーバの各々に固有な仮想ＭＭＩＯアドレスを割り当て、割り当てられた仮想ＭＭＩＯアドレスと、物理ＭＭＩＯアドレス並びに物理サーバ又は論理サーバに固有のサーバ識別子と、の関係を示す割り当て情報を保持し、物理サーバ又は論理サーバからＩＯカードへのアクセス要求が送信されたときに、割り当て情報を参照して、アクセス要求からサーバ識別子を抽出して、アクセス要求元の物理サーバ又は論理サーバを識別することを特徴とする。
【発明の効果】
【００１８】
本発明によると、複数の物理サーバ及び論理サーバ間でのＩＯカードの共有が可能となる。これによって、搭載ＩＯカード数によって制限されていたサーバ統合の台数制限を廃し、より柔軟なサーバ構成とハードウェア資源の有効活用が図れる。
【００１９】
また、ＩＯカードの共有を行った場合にも、ＩＯカードからのＤＭＡ転送を可能にする。これにより、物理サーバ・論理サーバ間でＩＯカードを共有した場合にも、性能低下の影響を少なくできる。
【発明を実施するための最良の形態】
【００２０】
以下に、本発明の実施の形態を添付の図面に基づいて説明する。
【００２１】
まず、本発明の実施の形態の概要を説明する。
【００２２】
本発明の実施の形態の計算機システムは、複数の物理サーバと複数のＩＯハブとが、スイッチによって接続されて構成される。なお、物理サーバは、ハイパバイザによって複数の論理サーバが構成されていてもよい。これら物理サーバや論理サーバは、それぞれにオペレーティングシステム：Operating System、以下、「ＯＳ」と呼ぶ）が稼動し、このＯＳ上でアプリケーションが稼働している。なお、以下、物理サーバや論理サーバ上で稼動するＯＳ及びアプリケーションを「ゲスト」と呼ぶ。
【００２３】
ＩＯハブは、ＩＯカードやＩＯブリッジが接続される。ＩＯブリッジは、複数のＩＯカードを接続することができる。ＩＯハブは、ＩＯカードのＭＭＩＯ領域に対するアクセスを監視し、二以上のゲストから同一のＩＯカードへのアクセスがあった場合に、このアクセスを調停する機能を有するＩＯプロセッサを備える。ＩＯプロセッサはＩＯハブ内に備えられた専用のプロセッサとメモリとによって構成される。なお、計算機システムの物理サーバ又は論理サーバの一部の資源によって、ＩＯプロセッサが実現されてもよい。
【００２４】
計算機システムには、サービスプロセッサ（以下、「ＳＶＰ」と呼ぶ）が、物理サーバ及びＩＯカードと通信可能に接続されている。ＳＶＰは、管理者やユーザからの指示に基づいて、物理サーバ及び論理サーバと、それら物理サーバ及び論理サーバが使用するＩＯカードとの間のマッピングを設定する。なお、ＳＶＰは、管理者又はユーザによる設定を受け付ける設定コンソールを備える。
【００２５】
次に本発明の動作の概要を説明する。
【００２６】
まず、計算機システムの初期化時に、ＯＳ、ファームウェア又はハイパバイザによって、物理サーバ及び論理サーバが使用するＩＯカードに対応するＭＭＩＯ領域をメモリ空間上に確保する。本発明では、ハイパバイザ又はファームウェアが、複数のゲストから共有される可能性のあるＩＯカードに対して、仮想ＭＭＩＯ領域を確保する。各ゲストに対しては、この仮想ＭＭＩＯ領域を見せる。ゲストは、この仮想ＭＭＩＯ領域に対してアクセスすることで、割り当てられたＩＯカードにアクセスできる。仮想ＭＭＩＯ領域は、ＩＯカードを共有するゲストの数に応じて分割され、異なるゲストは必ず異なる仮想ＭＭＩＯアドレスとなるように割り当てる。
【００２７】
ＩＯハブは、仮想ＭＭＩＯアドレスと実際のＩＯカードのＭＭＩＯアドレスである物理ＭＭＩＯアドレスと、ゲストを識別するためのゲスト識別子と、の変換表を持つ。
【００２８】
この後、ゲストからＩＯカードに対してのアクセスが実行される。この場合、ゲストは、仮想ＭＭＩＯアドレスに対してアクセスを発行する。ＩＯハブは、変換表を参照して、この仮想ＭＭＩＯアドレスを、物理ＭＭＩＯアドレスとゲスト識別子とに変換する。これによって、ＩＯハブは、ゲストを識別することができる。
【００２９】
次に、ゲストに共有されたＩＯカードからのＤＭＡ転送に対応するために、ゲスト識別子を用いて、次のような処理を実行する。
【００３０】
ＩＯプロセッサは、ＩＯカード固有のＭＭＩＯ領域に対する書き込みをトラップする。トラップされたＭＭＩＯ領域に対する書き込みは、ＩＯプロセッサが使う専用のメモリ領域（ＩＯＰメモリ）にリダイレクトされ、書き込まれる。また、この書き込みのうち、ＤＭＡアドレスの設定に関するアクセスは、設定される物理アドレスの上位ビットにゲスト識別子を埋め込むことによって、後のＤＭＡアクセスの要求元ゲストを識別することが可能となる。
【００３１】
ＩＯプロセッサは、コマンドレジスタに対するアクセスをトラップすると、リダイレクトされたメモリ領域の内容を対応する物理ＭＭＩＯ領域に転送する。この結果、実際のＩＯカードに対するアクセスが実行され、ＤＭＡのリクエストが設定される。
【００３２】
このＤＭＡリクエストの設定を受けて、ＩＯカードは、ＤＭＡ転送を開始する。このとき、ＩＯハブは、ＤＭＡ転送のアドレスの上位ビットからゲスト識別子を抽出し、ゲスト変換表を参照して、ゲスト物理アドレスからホスト物理アドレスへと変換することで、ＩＯカードからゲストへの直接のＤＭＡを可能とする。
【００３３】
図１は本発明の第１の実施の形態の計算機システムの一例の構成ブロック図である。
【００３４】
図１に示す計算機システムは、一以上の物理サーバ３００と物理サーバ３００によって構成される一以上の論理サーバ３１０とがスイッチ６００によって接続されている。
【００３５】
物理サーバ３００は、一以上のノード２００によって構成される。ノード２００は、一以上のＣＰＵ１００とメモリ１２０とノースブリッジ１１０とを備える。ＣＰＵ１００とメモリ１２０とは、ノースブリッジ１１０によって接続される。
【００３６】
なお、ＣＰＵ１００がノースブリッジ１１０に相当する機能を備え、ＣＰＵ１００とメモリ１２０とが直接接続された構成としてもよい。いずれであっても以下の説明には相違を生じない。また、一つのＣＰＵ１００内に複数のＣＰＵコアを含むマルチコアＣＰＵであっても同様である。
【００３７】
また、複数のノード２００によって一つの物理サーバ２００を構成することもできる。この場合は、複数のノード２００間はスイッチ６００によって接続され、複数のノード２００の各ＣＰＵ１００によってＳＭＰ（Symmetric Multiple Processor；対称型マルチプロセッサ）を構成する。
【００３８】
また、一つの物理サーバ３００上でハイパバイザ５００が稼動し、ハイパバイザ５００の処理によって物理サーバ３００の資源を分割して、一つの物理サーバ３００に複数の論理サーバ３１０を稼働することができる。これら複数の論理サーバ３１０それぞれにＯＳ４００が稼動する。各論理サーバ３１０は、物理サーバ３００が稼働するノード２００の計算機資源、すなわちＣＰＵ１００やメモリ１２０の一部を専有する。又は、時分割によって計算機資源を共有する。
【００３９】
スイッチ６００は、一つ以上のＩＯハブ７００が接続される。ＩＯハブ７００は、一つ以上のＩＯバス８５０を介して、複数のＩＯカード８００が接続される。また、ＩＯハブ７００は、ＩＯブリッジ８１０を介してより多くのＩＯカード８００を接続することもできる。
【００４０】
ＩＯカード８００は、物理サーバ３００や論理サーバ３１０のメモリアドレス空間に直接アクセスするＤＭＡ（Direct Memory Access）コントローラ（ＤＭＡ  ＣＴＬ）８０３を備える。そして、Ｉ／Ｏカード８００は、ＤＭＡ  ＣＴＬ８０３によってＤＭＡを実行する物理サーバ３００又は論理サーバ３１０のＭＭＩＯ（Memory Mapped I/O）のベースアドレスを指定するベースアドレスレジスタ（ＡＤＤ  ＲＥＧ）８０１と、Ｉ／Ｏカード８００に対する要求を指定するコマンドレジスタ（ＣＭＤ  ＲＥＧ）８０２と、を備える。ＤＭＡ  ＣＴＬ８０３は、ＡＤＤ  ＲＥＧ８０１に書き込まれたアドレスに対して、ＣＭＤ  ＲＥＧ８０２に書き込まれたコマンドに対応する動作を実行する。なお、Ｉ／Ｏカード８００は、ＰＣＩ規格に準拠した図示しないレジスタ（コンフィグレーションレジスタ、レイテンシタイマレジスタ等）を有する。
【００４１】
なお、ＩＯバス８５０はＰＣＩ−ＥｘｐｒｅｓｓのようにＩＯカード８００と１対１で接続するリンクであってもよいし、ＰＣＩバスのように複数のＩＯカード８００が一つのバスで接続するリンクであってもよい。いずれであっても以下の説明には相違を生じない。
【００４２】
スイッチ６００は、物理サーバ３００又は論理サーバ３１０から、任意のＩＯカード８００へのアクセスを可能とする柔軟性を提供する。
【００４３】
ＩＯハブ７００は、ＩＯカード共有機構７５０とＩＯプロセッサ７１０を備える。
【００４４】
スイッチ６００は、計算機システム全体の構成を管理するＳＶＰ９００を接続する。ＳＶＰ９００は、管理用ネットワーク９２０を介して設定コンソール９１０に接続される。システム構成管理者は、設定コンソール９１０を用いて計算機システム全体の構成、より具体的には、物理サーバ３００及び論理サーバ３１０の配置や分割、物理サーバ３００又は論理サーバ３１０に対するＩＯカードの割り当て等を設定する。
【００４５】
図１に示した例では、二つのノード２００（ノード２００Ａ、ノード２００Ｂ）が、ＳＭＰを構成して一つの物理サーバ３００Ａを構成する。この物理サーバ３００Ａ上で、ＯＳ４００Ａが稼動する。
【００４６】
また、ノード２００Ｃが、１つの物理サーバ３００Ａを構成する。この物理サーバ３００Ｃ上でハイパバイザ５００Ｃが稼動する。このハイパバイザ５００Ｃは、論理サーバを構築する。これによって、物理サーバ３００Ｃは、２つの論理サーバ３１０Ｃ１と、３１０Ｃ２と、に分割される。論理サーバ３１０Ｃ１は、ＯＳ４００Ｃ１が稼働し、論理サーバ３１０Ｃ２はＯＳ４００Ｃ２が稼動する。
【００４７】
スイッチ６００は、二つのＩＯハブ７００（ＩＯハブ７００Ａ及びＩＯハブ７００Ｂ）を接続する。ＩＯハブ７００Ａは、一つ以上のＩＯバス８５０を介して複数のＩＯカード８００を接続する。ＩＯバス８５０ＡにはＩＯカード８００Ａが接続され、ＩＯバス８５０ＢにはＩＯカード８００Ｂが接続される。また、ＩＯバス８５０Ｃは、ＩＯブリッジ８１０を介して、二つのＩＯカード８００Ｃ及び８００Ｄを接続する。
【００４８】
図２は、ＩＯプロセッサ７１０の構成ブロック図である。
【００４９】
ＩＯプロセッサ７１０は、ＩＯアクセスを監視したり、ＩＯアクセスの変換処理を実行する。
【００５０】
ＩＯプロセッサ７１０は、ＩＯＰ  ＣＰＵ７１１とＩＯＰメモリ７１２とＩＯＰノースブリッジ７１３とを備える。このＩＯＰ  ＣＰＵ７１１とＩＯＰメモリ７１２とが、ＩＯＰノースブリッジ７１３によって接続される。
【００５１】
なお、前述の図１の例では、ＩＯプロセッサ７１０はＩＯハブ７００の中に備えられていたが、ＩＯプロセッサをＩＯハブ７００とは異なる構成として、独立にスイッチ６００を介して接続されていてもよい。また、物理サーバ３００又は論理サーバ３１０の一部が、ＩＯプロセッサ７１０に相当する機能を提供してもよい。
【００５２】
図３は、ＩＯカード共有機構７５０の機能ブロック図である。
【００５３】
ＩＯカード共有機構７５０は、ＭＭＩＯライトデコーダ７５１とＤＭＡリクエストデコーダ７５２とＭＭＩＯイニシャライザ７６０とＩＯカード共有設定７４０とを備える。
【００５４】
ＭＭＩＯライトデコーダ７５１は、スイッチ６００から転送されたＭＭＩＯライトシステムＴｘ１１００を受信すると、これをＩＯプロセッサ７１０に対するメモリ書き込みや割り込みに変換する。また、ＭＭＩＯライトシステムＴｘ１１００に含まれるフィールドを加工してＭＭＩＯライトＰＣＩＴｘ１１１０を生成し、生成したＭＭＩＯライトＰＣＩＴｘ１１１０をＩＯバス８５０に発行する。
【００５５】
ＤＭＡリクエストデコーダ７５２は、ＩＯバス８５０から転送されたＤＭＡリクエストＰＣＩＴｘ１１２０を受信すると、発行元のゲストを識別し、ＤＭＡリクエストＰＣＩＴｘ１１２０に含まれるＤＭＡアドレスを変換してＤＭＡリクエストシステムＴｘ１１３０を生成し、生成したＤＭＡリクエストシステムＴｘ１１３０をスイッチ６００に発行する。
【００５６】
ＭＭＩＯイニシャライザ７６０は、ハイパバイザ又はゲストから発行され、スイッチ６００から転送されたＩＯ数え上げ要求１１４０を受信すると、ＩＯカードにＩＯ数え上げ要求１１４１を発行する。そして、ＩＯカード８００からＩＯ数え上げ応答１１４２を受信すると、このＩＯ数え上げ応答１１４２の内容及びＩＯカード共有設定７４０の内容を参照して、ＩＯ数え上げ要求１１４０に対するＩＯ数え上げ応答１１４３を生成する。そして、生成されたＩＯ数え上げ応答１１４３を、要求の発行元に発行する。
【００５７】
ＩＯカード共有設定７４０は、ＩＯハブ８５０に接続された各ＩＯカード８００について、共有又は専有が設定されたテーブルを保持する。サービスプロセッサ９００は、ＩＯカード共有設定７４０のテーブルを参照又は更新する。
【００５８】
図４はＩＯカード共有設定７４０の一例の説明図である。
【００５９】
ＩＯカード共有設定７４０は、物理カードＩＤフィールド、ＩＯカード種別フィールド、ＩＯカード共有属性フィールドを含むエントリによって構成される。このエントリは、ＩＯカード８００毎に設定される。
【００６０】
物理カードＩＤフィールドは、ＩＯカード８００の識別子である物理ＩＯカードＩＤ７４１を格納する。ＩＯカード種別フィールドは、ＩＯカード８００の種別を示す識別子であるＩＯカード種別７４２を格納する。ＩＯカード共有属性フィールドは、物理サーバ又は論理サーバ毎に、当該ＩＯカード８００がそのサーバに共有される、専有される、又は、アクセスが禁止される、ことを示す識別子である属性７４３を格納する。
【００６１】
図４の例では、物理ＩＯカードＩＤ７４１が「１」であるＩＯカード８００は、ＩＯカード種別７４２が「ＦＣ  ＨＢＡ」であることが示されている。このＩＯカード８００は、サーバ１及びサーバ２に共有されているが、サーバＮはアクセスが禁止されている。さらに、サーバ１は、当該ＩＯカードを使用中であり、サーバ２は当該ＩＯカードを未使用であることが示されている。
【００６２】
図５乃至図９は、ＩＯハブ７００が送受信する各Ｔｘの詳細な内容を示す。
【００６３】
図５は、ＭＭＩＯライトシステムＴｘ１１００の一例を示す説明図である。
【００６４】
ＭＭＩＯライトシステムＴｘ１１００は、アクセス種別フィールド、宛先ノードフィールド、発行元ノードフィールド、ＴｘＩＤフィールド、仮想ＭＭＩＯアドレスフィールド及びライトデータフィールドを含む。
【００６５】
アクセス種別フィールドは、当該Ｔｘのアクセス種別１１０６を格納する。アクセス種別１１０６は、例えば、アクセス先がメモリであるかＩＯであるか、そのアクセスはリードであるかライトであるか等を示す識別子である。ＭＭＩＯライトシステムＴｘ１１００では、ＭＭＩＯ領域に対するライトであることを示すアクセス種別１１０６を格納する。
【００６６】
宛先ノードフィールド及び発行元ノードフィールドは、当該Ｔｘの宛先ノード１１０１及び発行元ノード１１０２を格納する。これらは、スイッチ６００がルーティングのために使用する。ＩＯハブ７００が受信するＭＭＩＯライトシステムＴｘ１１００では、宛先ノード１１０１はＩＯハブ７００を示す識別子である。
【００６７】
ＴｘＩＤフィールドは、発行元ノードが各トランザクションを一意に識別可能な識別子であるＴｘＩＤ１１０３を格納する。
【００６８】
仮想ＭＭＩＯアドレスフィールドは、仮想ＭＭＩＯアドレス１１０４を格納する。この仮想ＭＭＩＯアドレス１１０４は、ＭＭＩＯライトシステムＴｘ１１００の発行元のゲスト毎に割り当てられているアクセス対象のＩＯカードの仮想ＭＭＩＯアドレスである。なお、通常はＭＭＩＯアドレス毎に異なるレジスタが割り当てられる。
【００６９】
ライトデータフィールドは、ＭＭＩＯシステムライトＴｘ１１００の指示によって書き込まれるライトデータ１１０５を格納する。
【００７０】
図６は、ＭＭＩＯライトＰＣＩＴｘ１１１０の一例の説明図である。
【００７１】
ＭＭＩＯライトＰＣＩＴｘ１１１０は、アクセス種別フィールド、ＴｘＩＤフィールド、物理ＭＭＩＯアドレスフィールド及びライトデータフィールドを含む。
【００７２】
アクセス種別フィールドは、ＭＭＩＯライトＰＣＩＴｘであること、及び、ライト又はリードであることを示すアクセス種別１１１１を格納する。
【００７３】
ＴｘＩＤ１１１２は、発行元ノード（この場合はＩＯハブ７００）がトランザクションを一意に識別可能な識別子であるＴｘＩＤ１１１２を格納する。
【００７４】
物理ＭＭＩＯアドレスフィールドは、アクセス対象のＩＯカード８００の計算機システム上での実際のＭＭＩＯアドレス１１１３（物理ＭＭＩＯアドレス１１１３）を格納する。
【００７５】
ライトデータフィールドは、ＭＭＩＯライトＰＣＩＴｘ１１１０の指示によって書き込まれるライトデータ１１１４を格納する。
【００７６】
図７はＤＭＡリクエストＰＣＩＴｘ１１２０の一例の説明図である。
【００７７】
ＤＭＡリクエストＰＣＩＴｘ１１２０は、アクセス種別フィールド、ＴｘＩＤフィールド、ゲスト修飾ＤＭＡアドレスフィールド及びライトデータフィールドを含む。
【００７８】
アクセス種別フィールドは、ＤＭＡリクエストＰＣＩＴｘであること、及び、ライト又はリードであることを示すアクセス種別１１２１を格納する。
【００７９】
ＴｘＩＤフィールドは、発行元ノード（この場合はＩＯカード又はＩＯデバイス）がトランザクションを一意に識別可能な識別子であるＴｘＩＤ１１２２を格納する。
【００８０】
ゲスト修飾ＤＭＡアドレスフィールドは、ゲスト識別子とＤＡＭアドレスとを含むゲスト修飾ＤＭＡアドレス１１２３を格納する。このゲスト修飾ＤＭＡアドレス１１２３は、図８で詳述する。
【００８１】
ライトデータフィールドは、ＤＭＡリクエストＰＣＩＴｘがライトトランザクションの場合にのみ、ＤＭＡリクエストＰＣＩＴｘの指示によって書き込まれるライトデータ１１２４を格納する。
【００８２】
図８は、ゲスト修飾ＤＭＡアドレス１１２３の説明図である。
【００８３】
ゲストＤＭＡアドレス１１１５は、ゲストが認識しているＤＭＡ転送先、又は、転送元の主記憶アドレスである。
【００８４】
ＰＣＩトランザクションのアドレス空間は６４ビットあり、通常、実際に搭載される物理メモリの空間よりも遥かに大きい。このため、ゲストＤＭＡアドレスは、実際に使用されているアドレス使用部１１１７の他に、上位に未使用のアドレス未使用部１１１６を含む。
【００８５】
そこで、このアドレス未使用部１１１６の一部又は全部に、ゲスト識別子１１２５を埋め込むことによって、ゲスト修飾ＤＭＡアドレスを生成する。これを受け取ったＤＭＡリクエストデコーダ７５２は、ゲスト修飾ＤＭＡアドレスに埋め込まれたゲスト識別子１１２５を参照することによって、アクセス対象のゲストを知ることができる。
【００８６】
図９は、ＤＭＡリクエストシステムＴｘ１１３０の一例の説明図である。
【００８７】
ＤＭＡリクエストシステムＴｘ１１３０は、アクセス種別フィールド、宛先ノードフィールド、発行元ノードフィールド、ＴｘＩＤフィールド、ホストＤＭＡアドレスフィールド及びライトデータフィールドを含む。
【００８８】
アクセス種別フィールドは、アクセス対象がメモリであるＤＭＡリクエストシステムＴｘであること、及び、ライト又はリードであることを示すアクセス種別１１３６を格納する。
【００８９】
宛先ノードフィールドは、当該Ｔｘの宛先であるメモリが存在する宛先ノード１１３１を格納する。
【００９０】
発行元ノードフィールドは、当該Ｔｘの発行元ノード１１３２を格納する。なお、ＤＭＡリクエストシステムＴｃ１１３０では、発行元ノード１１３２は、ＩＯハブ７００である。
【００９１】
ＴｘＩＤフィールドは、発行元において一意にトランザクションを識別可能な識別子であるＴｘＩＤ１１３３を格納する。
【００９２】
ホストＤＭＡアドレスフィールドは、実際にＤＭＡを実行するメモリの物理アドレスであるホストＤＭＡアドレス１１３４を格納する。
【００９３】
ライトデータフィールドは、当該Ｔｘがライトトランザクションの場合に、ライトデータ１１３５を格納する。
【００９４】
次に、ＩＯカード共有機構７５０の動作を説明する。
【００９５】
図１０は、ＭＭＩＯイニシャライザ７６０の初期化処理の概要を示す説明図である。
【００９６】
ＭＭＩＯイニシャライザ７６０は、ＭＭＩＯ領域割り当て表１２３０を備える。このＭＭＩＯ割り当て表１２３０は、ＩＯカード共有設定７４０に従って初期化される。
【００９７】
ＭＭＩＯイニシャライザ７６０は、ゲストからＩＯ数え上げ要求１１４０を受信すると、該当するＩＯカード８００を物理初期化が必要であるか否かを判定する。物理初期化が必要である場合は、ＩＯ数え上げ要求１１４１を、対象のＩＯカードに発行する。
【００９８】
また、ＭＭＩＯイニシャライザ７６０は、ＭＭＩＯ領域割り当て表１２３０を参照して、要求元ゲストに割り当てる仮想ＭＭＩＯアドレスを決定する。そして、決定した仮想ＭＭＩＯアドレスをＭＭＩＯライトデコーダ７５１が備えるＭＭＩＯアドレス変換表７２０に登録し、要求元のゲストにＩＯ数え上げ応答１１４３として返送する。
【００９９】
図１１は、ＭＭＩＯ領域割り当て表１２３０の一例の説明図である。
【０１００】
ＭＭＩＯ領域割り当て表２３０は、物理ＩＯカードＩＤフィールド、開始ＭＭＩＯアドレスフィールド、アドレス範囲フィールド、最大共有ゲスト数フィールド及び使用状態フィールドを含む一以上のエントリを備える。
【０１０１】
物理カードＩＤフィールドは、物理ＩＯカードＩＤ７４１を格納する。物理ＩＯカードＩＤ７４１は、ＩＯカード共有設定７４０の物理カードＩＤ７４１の値と同一である。
【０１０２】
開始ＭＭＩＯアドレスフィールドは、当該ＩＯカードのＭＭＩＯアドレスの先頭アドレスである開始ＭＭＩＯアドレス１２３１を格納する。アドレス範囲フィールドは、当該ＩＯカードが使用するＭＭＩＯ領域のアドレス範囲１２３３を格納する。
【０１０３】
最大共有ゲスト数フィールドは、当該ＩＯカードを共有可能な最大のゲスト数である共有可能最大ゲスト数１２３４を格納する。
【０１０４】
使用状態フィールドは、当該ＩＯカードの使用状態１２３５を格納する。使用状態１２３５とは、共有されるゲスト毎のビットマップとして示され、通常使用である場合はビットを１に、未使用である場合はビットを０に、それぞれ設定する。
【０１０５】
図１２は、ＭＭＩＯアドレス変換表７２０の一例の説明図である。
【０１０６】
ＭＭＩＯアドレス変換表７２０は、仮想ＭＭＩＯアドレスフィールド、物理ＭＭＩＯアドレスフィールド、ゲスト識別子フィールド及びＩＯＰメモリアドレスフィールドを含む一以上のエントリによって構成される。
【０１０７】
仮想ＭＭＩＯアドレスフィールドは、ゲストに割り当てられた仮想ＭＭＩＯアドレス１１０４を格納する。物理ＭＭＩＯアドレスフィールドは、仮想ＭＭＩＯアドレス１１０４に対応する物理ＭＭＩＯアドレス１１１３を格納する。ゲスト識別子フィールドは、仮想ＭＭＩＯアドレスを使用するゲストのゲスト識別子１１２５を格納する。ＩＯＰメモリアドレスフィールドは、ゲストに割り当てたＩＯＰメモリ７１２のＩＯＰメモリアドレス１２００を格納する。
【０１０８】
ＩＯカード共有機構７５０は、このＭＭＩＯアドレス変換表７２０を参照することによって、仮想ＭＭＩＯアドレス１１０４と、物理ＭＭＩＯアドレス１１１３、ゲスト識別子１１２５及びＩＯＰメモリアドレス１２００と、を相互に変換できる。
【０１０９】
次に、ＭＭＩＯイニシャライザ７６０の初期化処理の動作を具体的に説明する
図１３乃至図１５は、ＭＭＩＯイニシャライザ７６０の初期化処理のフローチャートである。
【０１１０】
まず、ＭＭＩＯイニシャライザ７６０は、スイッチ６００を介してＩＯ数え上げ要求１１４０を受信する（ステップＳ１５００）。
【０１１１】
このＩＯ数え上げ要求１１４０は、一般的に、ゲストからＰＣＩコンフィグレーション空間に対する読み出し要求として送信される。
【０１１２】
具体的には、ゲストは、ＰＣＩコンフィグレーション空間に、バス番号、デバイス番号及びファンクション番号を与える。これに対して、ＭＭＩＯイニシャライザ７６０は、対応するデバイスが存在するか否かを返す。後述するように、デバイス番号に対応するＩＯカード８００が存在する場合は、当該デバイスのＭＭＩＯ領域のベースアドレスとサイズ（領域）を返す。デバイス番号に対応するデバイスが存在しない場合は、全てのビットが１の値（マスターアボート）を返す。
【０１１３】
次に、ＭＭＩＯイニシャライザ７６０は、物理初期化が必要か否かを判定する（ステップＳ１５１０）。なお、物理初期化は、リセットの直後又はＩＯ構成が変わった後などに、各物理ＩＯデバイスに対して一度だけ実行される。物理初期化が必要でない場合は、ステップＳ１５２０に進む。物理初期化が必要な場合は、サブステップＳ１６１０に進む。なお、サブステップＳ１６１０の処理の詳細は図１５で後述する。
【０１１４】
ステップＳ１５２０では、要求元ゲストが対象ＩＯにアクセス可能か否かを判定する。ＭＭＩＯイニシャライザ７６０は、ＩＯカード共有設定７４０を参照して、当該ＩＯカードに対応する要求元ゲストのＩＯカード共有属性を取得する。ＩＯカード共有属性が「禁止」である場合は、当該要求元ゲストはアクセスできない。要求元ゲストがアクセスできない場合はステップＳ１５３０に進む。要求元ゲストがアクセス可能な場合はステップＳ１５４０に進む。
【０１１５】
ステップ１５３０では、ＭＭＩＯイニシャライザ７６０は、対象ＩＯカードが存在しない旨のＩＯ数え上げ応答１１４３（マスターアボート）を要求元ゲストに送信する。
【０１１６】
ステップ１５４０では、対象ＩＯカードは共有可能であるか否かを判定する。ＭＭＩＯイニシャライザ７６０は、要求元ゲストのＩＯカード共有属性が共有可能であり、かつ、未使用であることを示している場合は、サブステップＳ１５６０に進む。要求元ゲストのＩＯカード共有属性が共有可能でない場合は、ステップＳ１５５０に進む。
【０１１７】
ステップ１５５０では、共有可能でない要求元のＩＯカードに対して、物理ＩＯカードの情報を応答する。ＭＭＩＯイニシャライザ７６０は、ＭＭＩＯ領域割り当て表１２３０から、当該ＩＯカードの開始ＭＭＩＯアドレスとアドレス範囲とを取得し、これらをＩＯ数え上げ応答１１４３として要求元ゲストに送信する。
【０１１８】
サブステップ１５６０では、共有可能なＩＯカードに対して仮想ＭＭＩＯアドレス割り当てを行うサブステップである。なお、サブステップ１５６０の処理の詳細は図１４で後述する。
【０１１９】
図１４は、図１３のサブステップＳ１５６０の仮想ＭＭＩＯ割り当て処理のフローチャートである。
【０１２０】
まず、ＭＭＩＯイニシャライザ７６０は、ＭＭＩＯ領域割り当て表１２３０を参照して、ＩＯカード８００の使用状態１２３５を取得する。そして使用状態１２３５の中から、未使用のインデックス（ビット）を検索する。未使用のインデックスが検索されたら、使用状態の当該領域を使用中に変更する（ステップＳ１５７０）。
【０１２１】
次に、ＭＭＩＯイニシャライザ７６０は、ＭＭＩＯ領域割り当て表１２３０を参照して、対象のＩＯカードの開始ＭＭＩＯアドレス１２３２を取得する。そして、取得した開始ＭＭＩＯアドレス１２３２を元に、仮想ＭＭＩＯアドレス１１０４を算出する（ステップＳ１５８０）。
【０１２２】
具体的には、アドレス範囲１２３３と、空き領域のオフセットに１を加算した値とを乗じた値を算出し、算出された値と取得した開始ＭＭＩＯアドレス１２３２とを加算した値を仮想ＭＭＩＯアドレス１１０４とする。すなわち、次の計算式によって仮想ＭＭＩＯアドレス１１０４を算出する。
仮想ＭＭＩＯアドレス＝開始ＭＭＩＯアドレス＋（アドレス範囲×（空き領域のオフセット＋１））
この計算式によって、仮想ＭＭＩＯアドレスが算出される。
【０１２３】
次に、ＭＭＩＯイニシャライザ７６０は、ステップＳ１５８０で算出された仮想ＭＭＩＯアドレス１１０４を、ＭＭＩＯアドレス変換表７２０に登録する。ＭＭＩＯイニシャライザ７６０は、ＭＭＩＯアドレス変換表７２０に新たなエントリを作成する。そして、仮想ＭＭＩＯアドレスフィールドに算出された仮想ＭＭＩＯアドレス１１０４を登録する。また、物理ＭＭＩＯアドレスフィールドにＩＯカードの物理ＭＭＩＯアドレス１１１３を登録する。また、ゲスト識別子フィールドに、要求元ゲストのゲスト識別子１１２５を登録する。また、ＩＯＰメモリ７１２上にアドレス範囲１２３３分の領域を確保し、そのアドレスをＩＯＰメモリアドレスフィールドのＩＯＰメモリアドレス１２００に登録する（ステップＳ１５９０）。
【０１２４】
これによって、移行は、ＭＭＩＯライトデコーダ７５１のＭＭＩＯアドレス変換表７２０を参照することによって、仮想ＭＭＩＯアドレス１１０４から物理ＭＭＩＯアドレス１１１３への変換とゲスト識別子１１２５の抽出とが可能となる。
【０１２５】
次に、ＭＭＩＯイニシャライザ７６０は、ステップＳ１５８０で算出した仮想ＭＭＩＯアドレス１１０４とアドレス範囲１２３３とを、ＩＯ数え上げ応答１１４３として要求元ゲストに送信する（ステップＳ１６００）。その後、仮想ＭＭＩＯアドレス割り当て処理を終了する。
【０１２６】
図１５は、図１４のサブステップＳ１６１０の、物理初期化処理のフローチャートである。
【０１２７】
まず、ＭＭＩＯイニシャライザ７６０は、ＩＯバス８５０に対してＩＯ数え上げ要求１１４１を発行する（ステップＳ１６２０）。
【０１２８】
次に、ＭＭＩＯイニシャライザ７６０は、ＩＯバス８５０からＩＯバス数え上げ応答１１４２を受信する（ステップＳ１６３０）。
【０１２９】
ＭＭＩＯイニシャライザ７６０は、ＩＯバス数え上げ応答１１４２に基づいて、当該ＩＯカードが存在するか否かを判定する。ＩＯカードが存在しない場合は、ステップＳ１６５０進む。ＩＯカードが存在する場合は、ステップＳ１６６０に進む。
【０１３０】
ステップＳ１６５０では、ＭＭＩＯイニシャライザ７６０は、当該ＩＯは存在しない旨のＩＯ数え上げ応答１１４３（マスターアボート）を要求元のゲストに送信する。その後、物理初期化処理を終了する。
【０１３１】
ステップ１６６０では、ＭＭＩＯイニシャライザ７６０は、ＩＯカード共有設定７４０を参照して、当該ＩＯカードの最大共有ゲスト数を取得する。
【０１３２】
次に、ＭＭＩＯイニシャライザ７６０は、最大共有ゲスト数が１かどうかを判定する（ステップＳ１６７０）。共有最大ゲスト数が１である場合は、ステップＳ１６８０に進む。共有最大ゲスト数が２以上の場合は、ステップＳ１６９０に進む。
【０１３３】
最大共有ゲスト数が１の場合は、当該ＩＯカードは共有されない、すなわち、要求ゲストのみが専有することができる。従って、ステップ１６８０では、ＭＭＩＯイニシャライザ７６０は、ステップＳ１６３０で受信したＩＯ数え上げ応答１１４２に含まれる情報をそのままＩＯ数え上げ情報１１４３として要求元ゲストに送信する。その後、物理初期化を終了する。
【０１３４】
ステップ１６９０では、ＭＭＩＯイニシャライザ７６０は、ＭＭＩＯ領域割り当て表１２３０に、新たにエントリを登録する。このエントリに、ＩＯ数え上げ応答１１４２に含まれるＭＭＩＯ開始アドレス１２３２、アドレス範囲１２３３及びステップ１６６０で求めた最大共有ゲスト数１２３４を登録する。そして、使用状態１２３５を、全て未使用を示すビットマップに初期化する。
【０１３５】
次に、ＭＭＩＯイニシャライザ７６０は、ＩＯ数え上げ応答１１４３を送信する（ステップＳ１７００）。このＩＯ数え上げ応答１１４３は、ＭＭＩＯ開始アドレス１２３２とアドレス領域１２３３とが含まれる。アドレス領域１２３３は、アドレス範囲１２３３に、最大共有ゲスト数１２３４に１を加算した値を乗算した値である。すなわち、以下の計算式によってアドレス領域１２３３を計算する。
アドレス領域＝アドレス範囲×（最大共有ゲスト数＋１）
その後、物理初期化処理を終了する。
【０１３６】
以上の処理によって、物理ＭＭＩＯ領域の直後に、最大共有ゲスト数分の仮想ＭＭＩＯ領域が予約される。
【０１３７】
図１６は、仮想ＭＭＩＯアドレスと物理ＭＭＩＯアドレスとの関係を示す説明図である。
【０１３８】
なお図１６では、ＭＭＩＯ開始アドレス１２３２が“Ａ”、アドレス範囲１２３３が“Ｒ”に、それぞれ設定されている場合を示す。
【０１３９】
このとき、物理ＭＭＩＯアドレス１１１３の開始アドレスはＡに設定されているので、ゲスト１に割り当てられる仮想ＭＭＩＯアドレス１１０４−Ｂは、開始アドレスＡにＲを加算したアドレス（Ａ＋Ｒ）に設定される。また、ゲスト２に割り当てられる仮想ＭＭＩＯアドレス１１０４−Ｃは、Ａ＋ＲにさらにＲを加算した値（Ａ＋２Ｒ）に設定されえる。
【０１４０】
このように、アドレス範囲毎に仮想ＭＭＩＯアドレスを割り当てることによって、それぞれのゲストが用いる仮想ＭＭＩＯアドレスが重ならないようにマップされる。従って、各ゲストに割り当てられた仮想ＭＭＩＯアドレスは、各ゲストに対する一意のアドレスとなるように割り当てられる。
【０１４１】
図１７はＩＯＰメモリ７１２のアドレスマップの説明図である。
【０１４２】
なお図１７では、ゲスト１に対してＩＯＰメモリアドレス１２００−Ｐが、ゲスト２に対してＩＯＰメモリアドレス１２００−Ｑが、それぞれ割り当てられている場合を示す。
【０１４３】
これらのメモリアドレスは、それぞれの領域が重ならないようにＩＯＰメモリ７１２上に確保される。このＩＯＰメモリ７１２は、実際のＭＭＩＯ領域への書き込みを一時的に保持するために使用される。
【０１４４】
次に、ゲストからのＭＭＩＯライト要求時の動作を説明する。
【０１４５】
図１８は、ＭＭＩＯライトの処理を示す説明図である。
【０１４６】
なお、図１８は、図１３乃至図１５で前述した初期化設定が終了した後、ゲストからＩＯカード８００に対するアクセス要求がされた場合の動作を示す。
【０１４７】
ＩＯカード８００の制御レジスタは、メモリ空間上のＭＭＩＯ領域としてマップされている。従って、ゲストのＩＯカード８００に対する要求は、ＭＭＩＯ領域への書き込みとして実行される。
【０１４８】
このＭＭＩＯ領域への書き込みは、スイッチ６００を介して、ＭＭＩＯライトシステムＴｘ１１００として発行される。このＭＭＩＯライトシステムＴｘ１１００は、対象となるＩＯカード８００を含むＭＭＩＯライトデコーダ７５１によってトラップされる。
【０１４９】
ＭＭＩＯライトデコーダ７５１は、ＭＭＩＯライトデコーダ７５１を受信すると、ＭＭＩＯライトシステムＴｘ１１００の内容を参照して、ゲストからのアクセス要求はアクセス対象のＩＯカード８００の、どのレジスタに対してのアクセスであるかを判断する。また、このとき、ＭＭＩＯライトレコーダ７５０は、ＭＭＩＯアドレス変換表７２０を参照して、物理ＭＭＩＯアドレス１１１３とゲスト識別子１１２５、ＩＯＰメモリアドレス１２００を取得する。
【０１５０】
なお、ホストからのアクセス要求がコマンドレジスタ（ＣＭＤ  ＲＥＧ）に対するものであった場合は、ＭＭＩＯライトレコーダ７５０は、ＩＯプロセッサ７１０のＩＯＰ  ＣＰＵ７１１に割り込みを送信する。コマンドレジスタ（ＣＭＤ  ＲＥＧ）でない場合は、ＩＯＰメモリ７２１上の、ＭＭＩＯライトシステムＴｘ１１００を受けたＩＯＰメモリアドレス１２００をベースとする領域に、当該データを書き込む。
【０１５１】
割り込みを受けたＩＯＰ  ＣＰＵ７１１は、対応するＩＯＰメモリアドレス１２００から始まる領域を読み出して、物理ＩＯカード８００上の物理ＭＭＩＯアドレス１１１３にコピーする。この時、アドレスレジスタに対応する領域のデータをコピーする場合は、ＭＭＩＯライトデコーダ７５１は、ゲストＤＭＡアドレス１１１５の上位のアドレス未使用部１１１６にゲスト識別子１１２５を埋め込んでゲスト修飾ＤＭＡアドレス１１２３を生成し、生成されたゲスト修飾ＤＭＡアドレス１１２３を含むＭＭＩＯライトＰＣＩＴｘ１１１０を生成して、ＩＯバス８５０に発行する。
【０１５２】
以上の動作によって、同時に複数のゲストが同一のＩＯカード８００をアクセスした場合でも、実際のＩＯカード８００へのアクセスはＩＯプロセッサ７１０によって調停される。また、ゲストを識別するゲスト識別子１１２５がゲストＤＭＡアドレスに埋め込まれているため、後にＩＯバス８５０からＤＭＡリクエストが到着した場合にも、要求元のゲストを識別することが可能となる。
【０１５３】
図１９は、ＤＭＡリクエストデコーダ７５２の処理を示す説明図である。
【０１５４】
ＤＭＡリクエストデコーダ７５２は、ＤＭＡアドレス変換表７３０とアドレスデコーダ７５３とを含む。
【０１５５】
ＤＭＡリクエストデコーダ７５２は、ＩＯバス８５０からＤＭＡリクエストＰＣＩＴｘ１１２０を受信すると、まず、ＤＭＡリクエストＰＣＩＴｘ１１２０から、ゲストＤＭＡアドレス１１１５とゲスト識別子１１２５とを抽出する。
【０１５６】
次に、ＤＭＡリクエストデコーダ７５２は、ＤＭＡアドレス変換表７３０を参照して、抽出したゲスト識別子からゲストＤＭＡアドレス１１１５とホストＤＭＡアドレス１１３４との変換表へのポインタ７３１を取得する。そして、取得したポインタ７３１が示す表を参照して、ゲストＤＭＡアドレス１１１５に対応するホストＤＭＡアドレス１１３４を取得する。
【０１５７】
また、ＤＭＡリクエストデコーダ７５２は、変換されたホストＤＭＡアドレス１１３４を、アドレスデコーダ７５３を用いてデコードし、宛先ノード１１３１を取得する。
【０１５８】
ＤＭＡリクエストデコーダ７５２は、取得した宛先ノード１１３１とホストＤＭＡアドレス１１３４とを、ＤＭＡリクエストシステムＴｘ１１３０に含め、スイッチ６００に発行する。
【０１５９】
なお、ＤＭＡアドレス変換表７３０のポインタ７３１がＮＵＬＬであった場合は、ＤＭＡリクエストデコーダ７５２は、ゲストＤＭＡアドレス１１１５をそのままホストＤＭＡアドレス１１３４とする。
【０１６０】
以上の一連の動作により、複数のゲストからＩＯカードが共有されている場合に、アクセス元のゲストを識別し、識別したゲスト識別子をゲストＤＭＡアドレスに埋め込み、ＤＭＡリクエストからゲスト識別子を抽出することで、ゲストＤＭＡアドレスを適切にホストＤＭＡアドレスへと変換し、直接ゲストのメモリ空間上へとＤＭＡ転送することができる。
【０１６１】
図２０は、ＤＭＡアドレス変換表７３０の一例の説明図である。
【０１６２】
ＤＭＡアドレス変換表７３０は、図２０に示すように、ゲスト識別子１１２５とポインタ７３１との対応表７３０１と、ゲストＤＭＡアドレス１１１５とホストＤＭＡアドレス１１３４との対応表７３０２とを含む二段階の表として構成される。
【０１６３】
ポインタ７３１は、ゲスト識別子に対応する対応表７３１２がどれであるかを示すポインタを含む。
【０１６４】
なお、ＤＭＡアドレス変換表７３０は、ハイパバイザ５００がＩＯカード共有設定７４０を用いて生成する。なお、ハイパバイザ５００がなく、ゲストが物理サーバ３００上で直接動作する場合は、ＤＭＡアドレスの変換は必要ないため、当該ゲストに関するポインタ７３１にＮＵＬＬを設定する。
【０１６５】
以上のように、本発明の第１の実施の形態の計算機システムは、各ＩＯカードの物理ＭＭＩＯアドレスに対応した仮想ＭＭＩＯアドレスを、それぞれのゲストに割り当てることによって、複数の物理サーバ又は論理サーバ間でのＩＯカードを共有することが可能となる。これによって、搭載ＩＯカード数によって制限されていたサーバ統合の台数制限を廃し、より柔軟なサーバ構成とハードウェア資源の有効活用が図れる。
【０１６６】
特に、ＩＯハブは、物理ＭＭＩＯアドレスと、仮想ＭＭＩＯアドレス及びゲスト識別子とを相互に変換するので、ＩＯカードの共有を実現しつつ、ＩＯカードからのＤＭＡ転送を可能にする。これによって、物理サーバ及び論理サーバ間でＩＯカード８００を共有した場合にも、性能低下の影響を少なくできる。
【０１６７】
また、ＩＯブリッジによって接続されたＩＯカード８００でも、要求元のゲストを識別することができ、ＤＭＡ転送を可能にする。
【０１６８】
次に第１の実施の形態の第１の変形例を説明する。
【０１６９】
前述したように、第１の実施の形態では、ＭＭＩＯライトデコーダ７５１は、ＩＯカード８００のＭＭＩＯ領域のコマンドレジスタやアドレスレジスタに対する書き込みを直接トラップする。しかし、近年、ＩＯカードの高速化に伴い、主記憶アクセスに比べて遅いＭＭＩＯ領域へのアクセスの回数をなるべく減らすために、複数のコマンドを１回のＭＭＩＯアクセスにより起動できるコマンドチェイン方式が用いられる。
【０１７０】
そこで、第１の変形例では、ＩＯカード８００がコマンドチェイン方式を用いる場合のＭＭＩＯライトデコーダ７５１及びＩＯプロセッサ７１０の動作を示す。
【０１７１】
図２１は、コマンドチェイン方式におけるゲストＭＭＩＯ領域１２２０とゲストメモリ領域１３００とを示す説明図である。
【０１７２】
コマンドチェイン方式では、ゲストメモリ領域１３００の一部のドライバ用メモリ領域１３０５に、コマンドチェイン１３１０用のメモリ領域を備える。ゲストからのＩＯカード８００に対するコマンドは、このコマンドチェイン１３１０用のメモリに書き込まれる。
【０１７３】
ホストからのＩＯカード８００へのアクセス要求は、一旦ゲストメモリ１３００のコマンドチェイン１３１０に格納される。そして、実際のＩＯカード８００へのアクセス要求の起動は、ＭＭＩＯ領域上のコマンドチェインテイルポインタ１３３０への書き込みを契機とする。ＩＯカード８００は、コマンドチェインヘッドポインタ１３２０で示される素ドレスと、コマンドチェインテイルポインタ１３３０で示されるアドレスとの間に格納されたコマンドチェイン１３１０をＩＯカード８００上のレジスタに転送する。これによって、コマンドチェインによって指示されるコマンドがまとめて実行される。
【０１７４】
ＭＭＩＯライトデコーダ７５１は、コマンドチェインテイルポインタ１３３０への書き込みをトラップすると、ＩＯプロセッサ７１０上のＩＯＰ  ＣＰＵ７１１へと割り込みを発行する。割り込みを受けたＩＯＰ  ＣＰＵ７１１は、ＩＯＰメモリ７１２上にコマンドチェイン１３１０をコピーする。この時に、ＤＭＡアドレスに対応するレジスタに、ゲスト識別子１１２５を埋め込むことによって、ＤＭＡリクエスト時にゲストの識別ができるようにしておく。ゲストメモリ領域１３００からＩＯＰメモリ７１２へとコマンドチェイン１３１０のコピーが終わると、ＩＯＰ  ＣＰＵ７１１は、実際の物理ＭＭＩＯ上のコマンドチェインテイル１３３０ポインタに対して、ＩＯＰメモリ７１２上のコマンドチェインの末尾のアドレスを書き込む。これによって、ＩＯカード８００のコマンドを起動する。
【０１７５】
このように、本発明の第１の実施例の第１の変形例による計算機ステムは、コマンドチェインを用いるＩＯカード８００に対しても適用できる。
【０１７６】
次に、第１の実施の形態の第２の変形例を説明する。
【０１７７】
第１の実施携帯では、ＩＯプロセッサ７１０は、独立したプロセッサ（ＩＯＰ  ＣＰＵ７１１）とメモリ（ＩＯＰメモリ７１２）として構成した。第２の変形例では、これらをノードに備えたＣＰＵ１００及びメモリ１２０の資源の一部を用いる。より具体的には、サーバのリソースの一部をＩＯ処理専用として割り当ててもよいし、ハイパバイザ５００を用いて、ＣＰＵ１００を時分割してＩＯ処理として割り当ててもよい。なお、論理分割された一部のリソースをＩＯ処理に用いる形態を、ＩＯパーティション方式と呼ぶ。
【０１７８】
ＭＭＩＯライトデコーダ７５１は、ＩＯプロセッサ７１０に対する直接的なパスの代わりに、ＩＯ処理用のメモリのベースアドレス、ノードＩＤ及び割り込みを発行するＣＰＵのＩＤを設定するためのレジスタを備える。
【０１７９】
ＭＭＩＯライトデコーダ７５１は、前述したＩＯプロセッサ７１０のＩＯＰ  ＣＰＵ７１１への割り込みの発行や、ＩＯＰメモリ７１２への書き込みが必要なケースでは、上記レジスタの値に従ってシステムＴｘを生成し、スイッチ６００を経由してＩＯ処理を実行するノードに転送する。
【０１８０】
次に本発明の第２の実施の形態について説明する。
【０１８１】
第２の実施形態では、前述した第１の実施形態におけるＩＯハブ７００とスイッチ６００とを集約した機能を持つノードコントローラ１０００を備える計算機システムである。
【０１８２】
図２２は、第２の実施の形態の計算機システムの構成ブロック図である。
【０１８３】
なお、前述した第１の実施の形態と同一の構成には同一の符号を付し、その説明は省略する。
【０１８４】
ノードコントローラ１０００（ノードコントローラ１００Ａ）は、スイッチ６００、ＩＯハブ７００、ノースブリッジ１１０を一つの昨日モジュールとして集約されたものである。
【０１８５】
このノードコントローラ１０００は、１つのノード２１０Ａに備えられる。
【０１８６】
ＩＯハブ７００は、前述の第１の実施の形態と同様に、ＩＯバス８５０を介してＩＯカード８００やＩＯブリッジ８１０を接続する。ＩＯハブ７００は、前述のようにＩＯカード共有機構７５０を備え、ＩＯカード８００を共有する。一方、スイッチ６００は、他のノード２１０のスイッチ６００とノード間リンク１０１０を介して相互に接続し、計算機システム全体の任意のノードにトランザクションを転送する。なお、これらの処理は前述した第１の実施の形態と同様である。
【０１８７】
なお、第２の実施の形態では、ＩＯプロセッサ７１０は、ＩＯハブ７００に備えるよりも、前述の第１の実施例の第２の変形例と同様に、ノードの２１０に備える一部のＣＰＵ１００やメモリ１２０をＩＯ処理用とする方が望ましい。この場合、使用するＣＰＵ１００やメモリ１２０は、ＩＯハブ７００と同一ノード２１０Ａのものであってもよいし、異なるノード２１０Ａにあってもよい。
【産業上の利用可能性】
【０１８８】
以上のように、本発明は複数のサーバから構成される計算機システム及びそのチップセットに対して適用できる。
【図面の簡単な説明】
【０１８９】
【図１】本発明の第１の実施の形態の計算機システムの構成ブロック図である。
【図２】本発明の第１の実施の形態のＩＯプロセッサの構成ブロック図である。
【図３】本発明の第１の実施の形態のＩＯカード共有機構の機能ブロック図である。
【図４】本発明の第１の実施の形態のＩＯカード共有設定の一例の説明図である。
【図５】本発明の第１の実施の形態のＭＭＩＯライトシステムＴｘの一例の説明図である。
【図６】本発明の第１の実施の形態のＭＭＩＯライトＰＣＩＴｘの一例の説明図である。
【図７】本発明の第１の実施の形態のＤＭＡリクエストＰＣＩＴｘの一例の説明図である。
【図８】本発明の第１の実施の形態のゲスト修飾ＤＭＡアドレスの説明図である。
【図９】本発明の第１の実施の形態のＤＭＡリクエストシステムＴｘの一例の説明図である。
【図１０】本発明の第１の実施の形態のＭＭＩＯイニシャライザの初期化処理の概要を示す説明図である。
【図１１】本発明の第１の実施の形態のＭＭＩＯ領域割り当て表の一例の説明図である。
【図１２】本発明の第１の実施の形態のＭＭＩＯアドレス変換表の一例の説明図である。
【図１３】本発明の第１の実施の形態のＭＭＩＯイニシャライザの初期化処理のフローチャートである。
【図１４】本発明の第１の実施の形態の仮想ＭＭＩＯ割り当て処理のフローチャートである。
【図１５】本発明の第１の実施の形態の物理初期化処理のフローチャートである。
【図１６】本発明の第１の実施の形態の仮想ＭＭＩＯアドレスと物理ＭＭＩＯアドレスとの関係を示す説明図である。
【図１７】本発明の第１の実施の形態のＩＯＰメモリのアドレスマップの説明図である。
【図１８】本発明の第１の実施の形態のＭＭＩＯライトの処理を示す説明図である。
【図１９】本発明の第１の実施の形態のＤＭＡリクエストデコーダの処理を示す説明図である。
【図２０】本発明の第１の実施の形態のＤＭＡアドレス変換表の一例の説明図である。
【図２１】本発明の第１の実施の形態の変形例のコマンドチェイン方式におけるゲストＭＭＩＯ領域とゲストメモリ領域とを示す説明図である。
【図２２】本発明の第２の実施の形態の計算機システムの構成ブロック図である。
【符号の説明】
【０１９０】
１００    ＣＰＵ
１１０    ノースブリッジ
１２０    メモリ
２００、２１０    ノード
３００    物理サーバ
３１０    論理サーバ
４００    ＯＳ
５００    ハイパバイザ
６００    スイッチ
７００    ＩＯハブ
７１０    ＩＯプロセッサ
７２０    ＭＭＩＯアドレス変換表
７３０    ＤＭＡアドレス変換表
７５０    ＩＯカード共有機構
８００    ＩＯカード
８１０    ＩＯブリッジ
８５０    ＩＯバス
９００    サービスプロセッサ
９１０    設定コンソール
１０００    ノードコントローラ
【図１】
2008021252.tif 000003
【図２】
2008021252.tif 000004
【図３】
2008021252.tif 000005
【図４】
2008021252.tif 000006
【図５】
2008021252.tif 000007
【図６】
2008021252.tif 000008
【図７】
2008021252.tif 000009
【図８】
2008021252.tif 000010
【図９】
2008021252.tif 000011
【図１０】
2008021252.tif 000012
【図１１】
2008021252.tif 000013
【図１２】
2008021252.tif 000014
【図１３】
2008021252.tif 000015
【図１４】
2008021252.tif 000016
【図１５】
2008021252.tif 000017
【図１６】
2008021252.tif 000018
【図１７】
2008021252.tif 000019
【図１８】
2008021252.tif 000020
【図１９】
2008021252.tif 000021
【図２０】
2008021252.tif 000022
【図２１】
2008021252.tif 000023
【図２２】
2008021252.tif 000024