(57)【要約】【課題】サーバとＩ／Ｏデバイスとの間のデータ転送を、サーバが有する複数のＩ／Ｏインタフェースに分散させることで、Ｉ／Ｏインタフェースとサーバ内部インターコネクトの混雑を緩和する。【解決手段】サーバ１００内のＣＰＵ１０２Ａ−ＤがＩ／Ｏデバイス１２０Ａ−Ｄに対するロード命令ないしはストア命令を発行したときに、ロード命令ないしはストア命令に起因して発生するパケットないしはトランザクションの宛先アドレスに、ＣＰＵ毎に異なるオフセット値を加算する。また、スイッチ交換部を内蔵するＩ／Ｏスイッチは、サーバが発行したパケットないしはトランザクションの宛先アドレス、ないしは、宛先ＩＤに、Ｉ／Ｏインタフェース毎に異なるオフセット値を減算する。【選択図】図１
2012113604.tif 000002
【特許請求の範囲】
【請求項１】
計算機システムであって、
複数のＩ／Ｏインタフェースと、記憶空間を共有する複数の処理部を有するサーバと、
前記サーバが利用するＩ／Ｏデバイスと、
前記サーバの前記Ｉ／Ｏインタフェースと、前記Ｉ／Ｏデバイスを接続するＩ／Ｏスイッチとを備え、
前記処理部は、
前記処理部が前記Ｉ／Ｏデバイスに対する命令を発行したときに、前記処理部毎に異なるオフセット値を、前記命令に基づき発生するデータの宛先データに加算するアドレス変換機構を有し、
前記Ｉ／Ｏスイッチは、
前記サーバが発行した前記宛先データから、対応する前記オフセット値を減算するオフセット減算部を有する、
ことを特徴とする計算機システム。
【請求項２】
請求項１に記載の計算機システムにおいて、
前記Ｉ／Ｏスイッチは、
前記記憶空間の一部を構成する複数の領域と、前記Ｉ／Ｏインタフェースとの対応関係を記憶する宛先ポートテーブルを有しており、
前記Ｉ／Ｏデバイスが発するデータの宛先データアドレスによって、前記宛先ポートテーブルを参照し、参照結果として得られたＩ／Ｏインタフェース宛に前記データを転送する、
ことを特徴とする計算機システム。
【請求項３】
請求項１に記載の計算機システムにおいて、
前記命令は、前記処理部が前記Ｉ／Ｏデバイスに対して発行するロード命令ないしストア命令である、
ことを特徴とする計算機システム。
【請求項４】
請求項１に記載の計算機システムにおいて、
前記宛先データは、前記サーバが発行したデータの宛先アドレス、ないしは宛先ＩＤ（Ｉｄｅｎｔｉｆｉｅｒ）である、
ことを特徴とする計算機システム。
【請求項５】
請求項１に記載の計算機システムにおいて、
前記サーバは、ＳＭＰ（Ｓｙｍｍｅｔｒｉｃ  Ｍｕｌｔｉｐｌｅ  Ｐｒｏｃｅｓｓｏｒ）サーバである、
ことを特徴とする計算機システム。
【請求項６】
請求項５に記載の計算機システムにおいて、
前記ＳＭＰサーバは複数のブレードを備え、前記ブレード各々は、前記処理部と、前記Ｉ／Ｏインタフェースと、記憶部と、内部インターコネクトを備え、複数の前記処理部と複数の前記記憶部は前記内部インターコネクトにより相互に接続することにより、前記記憶空間として、単一の主記憶空間を形成する、
ことを特徴とする計算機システム。
【請求項７】
複数のＩ／Ｏインタフェースと記憶空間を共有する複数の処理部を有するサーバが利用するＩ／Ｏデバイスと、前記Ｉ／Ｏインタフェースを接続するＩ／Ｏスイッチを備える計算機システムのデータ転送方法であって、
前記処理部は、
前記Ｉ／Ｏデバイスに対する命令を発行したときに、前記命令に基づき発生するデータの宛先データに、処理部毎に異なるオフセット値を与え、
前記Ｉ／Ｏスイッチは、
前記サーバが発行した前記宛先データから、対応する前記オフセット値を除いた後、前記Ｉ／Ｏデバイスに前記データを転送する、
ことを特徴とするデータ転送方法。
【請求項８】
請求項７に記載のデータ転送方法であって、
前記Ｉ／Ｏスイッチは、
前記記憶空間の一部を構成する複数の領域と、前記Ｉ／Ｏインタフェースとの対応関係を記憶し、
前記Ｉ／Ｏデバイスが発するデータの宛先データによって、記憶する前記対応関係を参照し、参照結果として得られたＩ／Ｏインタフェース宛に前記データを転送する、
ことを特徴とするデータ転送方法。
【請求項９】
請求項７に記載のデータ転送方法であって、
前記処理部は、
前記命令として、前記Ｉ／Ｏデバイスに対してロード命令ないしストア命令を発行する、
ことを特徴とするデータ転送方法。
【請求項１０】
請求項７に記載のデータ転送方法であって、
前記宛先データは、前記処理部が発行した前記データの宛先アドレス、ないしは宛先ＩＤである、
ことを特徴とするデータ転送方法。
【請求項１１】
記憶空間を共有する複数の処理部を備えるサーバの複数のＩ／Ｏインタフェースと、Ｉ／Ｏデバイスとを接続するＩ／Ｏスイッチであって、
前記サーバが発行したデータの宛先データから、前記Ｉ／Ｏインタフェース毎に異なるオフセット値を減算するオフセット減算部と、
前記オフセット減算部の出力に接続されるスイッチ交換部と、
前記オフセット減算部と前記スイッチ交換部を制御するＩ／Ｏコントローラを備える、
ことを特徴とするＩ／Ｏスイッチ。
【請求項１２】
請求項１１記載のＩ／Ｏスイッチであって、
前記Ｉ／Ｏコントローラは、
前記オフセット値を記憶するオフセット情報記憶部を備える、
ことを特徴とするＩ／Ｏスイッチ。
【請求項１３】
請求項１１記載のＩ／Ｏスイッチであって、
前記Ｉ／Ｏデバイスが発するデータの宛先データに従い、宛先となる前記サーバの複数の前記Ｉ／Ｏインタフェースの内、宛先となるべきＩ／Ｏインタフェースを検索する宛先検索部を更に備え、
前記スイッチ交換部を介して、検索結果として得られたＩ／Ｏインタフェース宛に前記データを転送する、
ことを特徴とするＩ／Ｏスイッチ。
【請求項１４】
請求項１３記載のＩ／Ｏスイッチであって、
前記Ｉ／Ｏコントローラは、
前記サーバの前記記憶空間の領域を示す情報と、前記Ｉ／Ｏインタフェースとの対応関係を記憶する宛先ポートテーブルを備え、
前記宛先ポート検索部は、
前記宛先ポートテーブルを参照して、前記Ｉ／Ｏインタフェースを検索する、
ことを特徴とするＩ／Ｏスイッチ。
【請求項１５】
請求項１１記載のＩ／Ｏスイッチであって、
前記宛先データは、前記サーバが発行した前記データの宛先アドレス、ないしは宛先ＩＤ（Ｉｄｅｎｔｉｆｉｅｒ）である、
ことを特徴とするＩ／Ｏスイッチ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサと複数のＩ／Ｏインタフェースを備えたサーバ、或いは計算機システムに関し、特にＩ／Ｏインタフェースのデータ転送負荷の分散技術に関する。
【背景技術】
【０００２】
近年、計算機システムの構成の柔軟性を高めるために、サーバとＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）デバイスの間にＩ／Ｏスイッチを介在させる構成が用いられている。これにより、サーバとＩ／Ｏデバイスの間の接続をＩ／Ｏスイッチの設定を変更するのみで切替えることができ、構成変更を迅速かつ柔軟に行うことが出来る。ひいては、計算機システム上で動作するジョブの負荷変動に対してＩ／Ｏを増強する、Ｉ／Ｏデバイスの障害発生時に切替えを実現する、等の計算機システム運用上の利便性を得ることが出来る。
【０００３】
通常、サーバは、プロセッサ(ＣＰＵ、Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、主記憶装置（メモリ）、及び、Ｉ／Ｏデバイスを接続するためのＩ／Ｏインタフェースを提供するＩ／Ｏハブ（ＩＯＨ、Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｈｕｂ）から構成される。
【０００４】
Ｉ／Ｏインタフェースに関する技術は、種々の業界標準技術を含め、非特許文献１、２、３や、特許文献１などに開示されており、例えば、ＰＣＩ−ＳＩＧ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｅｃｔ−Ｓｐｅｃｉａｌ  Ｉｎｔｅｒｅｓｔ  Ｇｒｏｕｐ）のＰＣＩ  Ｅｘｐｒｅｓｓのような、業界標準規格で定められたインタフェースが用いられている（非特許文献１）。そして、近年市販されている装置では、ＩＯＨは１本、ないしは、複数本のＰＣＩ  Ｅｘｐｒｅｓｓを提供している。
【０００５】
Ｉ／Ｏデバイスは、例えばサーバをＥｔｈｅｒｎｅｔ（登録商標）に接続するためのネットワークインタフェースカード（ＮＩＣ、Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）が代表例である。ＮＩＣを始めとするＩ／Ｏデバイスは前述したＩ／Ｏインタフェースを介してサーバと接続される。現在標準的に用いられているのは、１Ｇｂｉｔ  Ｅｔｈｅｒｎｅｔや１０Ｇｂｉｔ  ＥｔｈｅｒｎｅｔのＮＩＣで、サーバとの間はＰＣＩ  Ｅｘｐｒｅｓｓで接続するものが多い。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−７９８１６号公報
【非特許文献】
【０００７】
【非特許文献１】ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂａｓｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｒｅｖｉｓｉｏｎ  ２．０、  ＰＣＩ−ＳＩＧ、  Ｄｅｃｅｍｂｅｒ  ２０、  ２００６．
【非特許文献２】Ｍｕｌｔｉ−Ｒｏｏｔ  Ｉ／Ｏ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ  ａｎｄ  Ｓｈａｒｉｎｇ Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｒｅｖｉｓｉｏｎ  １．０、  ＰＣＩ−ＳＩＧ、  Ｍａｙ  １２、  ２００８．
【非特許文献３】Ｓｉｎｇｌｅ  Ｒｏｏｔ  Ｉ／Ｏ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ  ａｎｄ  Ｓｈａｒｉｎｇ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｒｅｖｉｓｉｏｎ  １．０、  ＰＣＩ−ＳＩＧ、  Ｓｅｐｔｅｍｂｅｒ  １１、  ２００７．
【発明の概要】
【発明が解決しようとする課題】
【０００８】
現在サーバで普及している、上述のＰＣＩ  Ｅｘｐｒｅｓｓに注目して検討すると、ＰＣＩ  Ｅｘｐｒｅｓｓではツリー状のトポロジーを採用していることにより、Ｉ／Ｏスイッチを導入しても構成に制約を受けることが有り、それに対する発明が従来なされてきている。
【０００９】
例えば、単一のＩ／Ｏデバイスを複数のサーバから共有することは非特許文献１で示されているＰＣＩ  Ｅｘｐｒｅｓｓの規格では不可能である。ＰＣＩ  Ｅｘｐｒｅｓｓで接続されるＩ／Ｏデバイスはツリー状のトポロジーではリーフ（末端）に当たるが、リーフからツリーを辿って到達できるのは単一のルート（サーバ）のみである。単一のＩ／Ｏデバイス（リーフ）から複数のサーバ（ルート）に到達することはできないという制約がある。
【００１０】
これに対して、例えば非特許文献２で示すＭＲ−ＩＯＶ（Ｍｕｌｔｉ  Ｒｏｏｔ  Ｉ／Ｏ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ  ａｎｄ  Ｓｈａｒｉｎｇ）と呼ばれる、ＰＣＩ  Ｅｘｐｒｅｓｓの拡張規格がある。このＭＲ−ＩＯＶを実現するためには、Ｉ／Ｏデバイス、Ｉ／Ｏスイッチ、及び、サーバ上で動作するオペレーティングシステム等のシステムソフトウェアに対して新規な機構を必要とする。これにより、複数のサーバで単一のデバイスを共有することが実現されたが、ＭＲ−ＩＯＶに対応したデバイス（ＭＲ−ＩＯＶデバイス）を新規に開発する必要がある。
【００１１】
そこで、特許文献１に示される技術では、非特許文献３で示されるＳＲ−ＩＯＶ（Ｓｉｎｇｌｅ  Ｒｏｏｔ  Ｉ／Ｏ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ  ａｎｄ  Ｓｈａｒｉｎｇ）と呼ばれる、ＰＣＩ  Ｅｘｐｒｅｓｓの拡張規格に準拠したデバイス（ＳＲ−ＩＯＶデバイス）を、複数のサーバで共有する技術を開示している。ＳＲ−ＩＯＶは単一のサーバ上で動作する複数の仮想マシン間で単一のＩ／Ｏデバイスを共有するための技術で、ＭＲ−ＩＯＶデバイスと比較してＳＲ−ＩＯＶデバイスは多く市場に流通している。
【００１２】
しかし、ＳＲ−ＩＯＶデバイスではＭＲ−ＩＯＶデバイスのように複数のサーバから共有されることはできない。そこで、特許文献１ではＩ／Ｏスイッチ内にアドレス変換等の機構を有することで、単一のＳＲ−ＩＯＶデバイスを複数のサーバから共有することを実現している。
【００１３】
また、計算機システムの処理能力を高めるために、ＳＭＰ（Ｓｙｍｍｅｔｒｉｃ  Ｍｕｌｔｉｐｌｅ  Ｐｒｏｃｅｓｓｏｒ）サーバの利用が広まっている。ＳＭＰサーバは複数のＣＰＵを有しており、複数のＣＰＵで単一の主記憶空間を共有することを特徴としたサーバであり、各々のＣＰＵ上で個別のオペレーティングシステム等のシステムソフトウェアを動作させるのではなく、ＳＭＰサーバを構成する複数のＣＰＵに跨って単一のオペレーティングシステムを動作させて用いる。
【００１４】
ＳＭＰサーバでは、複数のＣＰＵを有して処理性能を上げていることから、Ｉ／Ｏ性能もそれに見合うように高める必要があり、ＩＯＨを複数有し、複数のＣＰＵと複数のＩＯＨの間を接続するバスを、高速シリアル伝送によるポイントツーポイント接続にしている場合が多い。
【００１５】
すなわち、複数のＣＰＵを有し、複数のＩＯＨから複数のＩ／Ｏインタフェースが提供されているＳＭＰサーバにおいて、あるＣＰＵから見た時に、当該ＣＰＵに直に接続されているＩＯＨから提供されているＩ／Ｏインタフェース（近いＩ／Ｏインタフェース）と、他のＣＰＵを経由して接続されているＩＯＨから提供されるＩ／Ｏインタフェース（遠いＩ／Ｏインタフェース）の２種類にＩ／Ｏインタフェースが分類できることになる。
【００１６】
ＳＭＰサーバ上では、オペレーティングシステム及びその他のシステムソフトウェアや、アプリケーションソフトウェアを構成する複数のスレッドが複数のＣＰＵ上で分散して動作している。すなわち、スレッド毎に近いＩ／Ｏインタフェースと遠いＩ／Ｏインタフェースが異なる。このような事象は、ＳＭＰサーバを構成する方式の一つであるＮＵＭＡ（Ｎｏｎ  Ｕｎｉｆｏｒｍ  Ｍｅｍｏｒｙ  Ａｒｃｈｉｔｅｃｔｕｒｅ）でもメモリとＣＰＵ間での近い、遠いが発生しているが、Ｉ／Ｏインタフェースに関しても同様の特性が生じている。
【００１７】
特許文献１の発明では、単一のＩ／Ｏデバイスを複数のサーバで共有することを実現していた。しかし、個々のサーバはいずれもツリー状のトポロジーのルートであるため、サーバとＩ／Ｏデバイス間の経路は一経路しか存在しないことになる。すなわち、あるサーバが複数本のＩ／Ｏインタフェースを有していたとしても、ある特定のＩ／Ｏデバイスとの間でデータ転送をする際には、１本のＩ／Ｏインタフェースしか使われない。
【００１８】
しかし、上述のＳＭＰサーバでは、複数のＩ／Ｏインタフェースを持つため、特許文献１に記載のような動作では、ＳＭＰサーバが有するＩ／Ｏ性能を活かすことができない。具体的には、ＳＭＰサーバとＩ／ＯデバイスをＩ／Ｏスイッチを介して接続する時に、ＳＭＰサーバが複数のＩ／Ｏインタフェースを介してＩ／Ｏスイッチと接続されているにもかかわらず、前述したツリー状のトポロジーにより経路を決定するため、ある特定のＩ／Ｏデバイスに対してアクセスする際には、常に同じＩ／Ｏインタフェースが用いられてしまうという問題が発生する。
【００１９】
これにより、特定のＩ／Ｏインタフェースの混雑が発生しやすくなってしまう。また、ＳＭＰサーバ内部で特定のＩ／Ｏインタフェースから転送を行うために、ＣＰＵ間を接続する内部インターコネクトの混雑が著しくなるという問題も生じる。特に内部インターコネクトは、Ｉ／Ｏのみならずキャッシュコヒーレンス等種々の処理を担っているため、内部インターコネクトの混雑はＳＭＰサーバ全体の性能を著しく低下させる要因となる。
【００２０】
そこで、ＰＣＩ  Ｅｘｐｒｅｓｓのようなツリー状のトポロジーによるＩ／Ｏインタフェースを用いながらも、複数のＩ／Ｏインタフェースを有するＳＭＰサーバにおいて、Ｉ／Ｏの負担を各Ｉ／Ｏインタフェースに分散させることが課題となっている。
【００２１】
本発明は、上記したサーバ等のＩ／Ｏインタフェース技術に存在する課題を解決する計算機システム、方法、及びＩ／Ｏスイッチを提供することを目的とする。
【課題を解決するための手段】
【００２２】
上記の目的を達成するため、本発明においては、計算機システムであって、複数のＩ／Ｏインタフェースと、記憶空間を共有する複数の処理部を有するサーバと、サーバが利用するＩ／Ｏデバイスと、サーバのＩ／Ｏインタフェースと、Ｉ／Ｏデバイスを接続するＩ／Ｏスイッチとを備え、処理部は、処理部がＩ／Ｏデバイスに対する命令を発行したときに、処理部毎に異なるオフセット値を、命令に基づき発生するデータの宛先データに加算するアドレス変換機構を有し、Ｉ／Ｏスイッチは、サーバが発行した宛先データから、対応するオフセット値を減算するオフセット減算部を有する構成の計算機システムを提供する。
【００２３】
また、上記の目的を達成するため、本発明においては、複数のＩ／Ｏインタフェースと記憶空間を共有する複数の処理部を有するサーバが利用するＩ／Ｏデバイスと、Ｉ／Ｏインタフェースを接続するＩ／Ｏスイッチを備える計算機システムのデータ転送方法であって、処理部は、Ｉ／Ｏデバイスに対する命令を発行したときに、命令に基づき発生するデータの宛先データに、処理部毎に異なるオフセット値を与え、Ｉ／Ｏスイッチは、サーバが発行した宛先データから、対応するオフセット値を除いた後、Ｉ／Ｏデバイスに前記データを転送するデータ転送方法を提供する。
【００２４】
更に、上記の目的を達成するため、本発明においては、記憶空間を共有する複数の処理部を備えるサーバの複数のＩ／Ｏインタフェースと、Ｉ／Ｏデバイスとを接続するＩ／Ｏスイッチであって、サーバが発行したデータの宛先データから、Ｉ／Ｏインタフェース毎に異なるオフセット値を減算するオフセット減算部と、オフセット減算部の出力に接続されるスイッチ交換部と、オフセット減算部とスイッチ交換部を制御するＩ／Ｏコントローラを備える構成のＩ／Ｏスイッチを提供する。
【００２５】
すなわち、上記の課題を解決するために、本発明の好適な態様においては、複数のＩ／Ｏインタフェース、及び複数のＣＰＵを有するサーバと、サーバが利用する少なくとも１個以上のＩ／Ｏデバイスと、サーバとＩ／Ｏデバイス間を接続するＩ／Ｏスイッチとを備える計算機システムであって、サーバの複数ＣＰＵは単一の主記憶空間を共有するものであり、サーバとＩ／Ｏスイッチは複数のＩ／Ｏインタフェースで接続されており、サーバはアドレス変換手段を有しており、アドレス変換手段は、ＣＰＵがＩ／Ｏデバイスに対するロード命令ないしはストア命令を発行したときに、ＣＰＵ毎に異なるオフセット値をロード命令ないしはストア命令などの命令に起因して発生するパケットないしはトランザクションの宛先アドレスに加算するものであり、Ｉ／Ｏスイッチは、サーバが発行したパケットないしはトランザクションの宛先アドレス、ないしは宛先識別子（Ｉｄｅｎｔｉｆｉｅｒ：ＩＤ）から、Ｉ／Ｏインタフェース毎に対応するオフセット値を減算するオフセット減算部と、オフセット値を記憶するオフセット情報記憶部を有する構成の計算機システムを提供する。
【発明の効果】
【００２６】
本発明は、複数のＩ／Ｏインタフェースを有するサーバ等を用いる計算機システムにおいて、Ｉ／Ｏインタフェース、及び、サーバ内部で用いられている内部インターコネクトの混雑を緩和し、システム全体の性能を向上させる効果を有する。
【図面の簡単な説明】
【００２７】
【図１】第１の実施例に係る計算機システムの全体構成の一例を示すブロック図である。
【図２】第１の実施例に係る計算機システムのＩ／Ｏスイッチにおけるオフセット減算部の構成の一例を示すブロック図である。
【図３】第１の実施例に係る計算機システムのＩ／Ｏスイッチにおける宛先ポート検索部の構成の一例を示すブロック図である。
【図４】第１の実施例に係る計算機システムのＩ／Ｏコントローラが有するオフセット情報の構成の一例を示す概念図である。
【図５】第１の実施例に係る計算機システムのＩ／Ｏコントローラが有する宛先ポートテーブルの構成の一例を示す概念図である。
【図６】第１の実施例に係る計算機システムの主記憶空間の一例を示すメモリマップである。
【図７】第１の実施例に係る計算機システムの主記憶空間のうちＥＣＡＭ空間の一例を示すメモリマップである。
【図８】第１の実施例に係る計算機システムの初期化シーケンスの一例を示すフローチャートである。
【図９】第１の実施例に係る計算機システムのバスツリーの一例を示す概念図である。
【図１０】第１の実施例に係る計算機システム上でデータが転送される経路を示す概念図である。
【図１１】第１の実施例に係る計算機システム上でデータが転送される経路を示す概念図である。
【図１２】第１の実施例に係る計算機システム上でデータが転送される経路を示す概念図である。
【図１３】第１の実施例に係る計算機システム上でデータが転送される経路を示す概念図である。
【図１４】第１の実施例に係る計算機システムの主記憶空間全体の一例を示すメモリマップである。
【図１５】第１の実施例に係る計算機システム上でデータが転送される経路を示す概念図である。
【発明を実施するための形態】
【００２８】
以下、本発明の一実施形態を添付図面に基づいて説明する。なお、実施の形態を説明するための全図において、同一の部材には原則として同一の符号を付し、同一の符号の繰り返しの説明は省略する。なお、本明細書において、サーバとは、処理部であるプロセッサ(ＣＰＵ、Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、記憶部であるメモリ、及び、インタフェース部であるＩ／Ｏハブ（ＩＯＨ）などから構成される計算機である。また、本明細書において、各システムの要素となる機能ブロックを、「機構」、「手段」、或いは「部」と表現する場合がある。例えば、アドレス変換機能を、「アドレス変換機構」、「アドレス変換部」、或いは「アドレス変換手段」と呼ぶ。このアドレス変換機構として、本明細書における計算機システムでは、オペレーティングシステムが用いる第１のアドレス変換機構とハイパーバイザ及びその他のシステムソフトウェアが用いる第２のアドレス変換機構がある。更に、ＣＰＵやＩ／Ｏデバイスが発するパケットないしはトランザクションをデータと、パケットないしはトランザクションの宛先アドレスを宛先アドレスや宛先ＩＤを宛先データと呼ぶ。
【実施例１】
【００２９】
図１は、第１の実施例に係る計算機システムの全体構成を示す図である。図１に示す計算機システムは、ＳＭＰサーバ１００、Ｉ／Ｏスイッチ１１０、Ｉ／Ｏデバイス１２０Ａ〜Ｄ、管理サーバ１３０から構成されている。なお、Ｉ／Ｏスイッチ１１０は、Ｉ／Ｏドロワの形に形成されても良いし、集積回路（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ：ＩＣ）の形で構成しても良い。
【００３０】
ＳＭＰサーバ１００内の構成は種々の態様が考えられるが、本実施例では近年広く利用されているブレードサーバにおいてＳＭＰサーバを実現する技術であるブレード間ＳＭＰを適用したＳＭＰサーバを例示する。ブレード間ＳＭＰはブレードサーバのブレード１０１Ａ〜Ｄ（なお、それぞれのブレードには＃０〜＃３の番号を付与している。例えば、ブレード１０１Ａはブレード＃０である。）の間を内部インターコネクト１０９で接続することで、複数のブレード１０１Ａ〜Ｄを１台のＳＭＰサーバ１００として利用する技術である。内部インターコネクト１０９としては、例えばＩｎｔｅｌ社のＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔや、ＨｙｐｅｒＴｒａｎｓｐｏｒｔが利用される。
【００３１】
ブレード１０１Ａ〜Ｄは何れも同じ内部構成をとる。ブレード１０１Ａ〜Ｄはそれぞれ、ＣＰＵ１０２Ａ〜Ｄ、メモリ１０３Ａ〜Ｄ、内部インターコネクト１０４Ａ〜Ｄ、ＩＯＨ１０５Ａ〜Ｄから構成される。
【００３２】
なお、ブレード内の接続を担う内部インターコネクト１０４Ａ〜Ｄと、ブレード間を接続する内部インターコネクト１０９は一般的に同種のインターコネクト技術が用いられることが多い。ブレード１０１Ａ〜Ｄ各々のＣＰＵ１０２Ａ〜Ｄは少なくとも一個のＣＰＵで構成されている。メモリ１０３Ａ〜Ｄ各々の一部は、ＳＭＰサーバ１００の主記憶メモリとして利用される。
【００３３】
ＩＯＨ１０５Ａ〜ＤはＩ／Ｏインタフェース１１５Ａ〜Ｄ（ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース）を提供する。ＣＰＵ１０２Ａ〜ＤがＩ／Ｏデバイス１２０Ａ〜Ｄとの間でデータ転送を行うために発行したロード命令やストア命令などの命令は、ＩＯＨ１０５Ａ〜ＤがＰＣＩ  Ｅｘｐｒｅｓｓのパケットに変換して、Ｉ／Ｏインタフェース１１５Ａ〜Ｄに出力する。また、Ｉ／Ｏデバイス１２０Ａ〜Ｄから送信されたＰＣＩ  Ｅｘｐｒｅｓｓパケットで指示されるメモリへの書込みや、メモリからの読出しを実現するために、ＩＯＨ１０５Ａ〜Ｄはメモリ１０３Ａ〜Ｄに直接アクセスする（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ：ＤＭＡ）。なお、ＳＭＰサーバ１００においては、単一の主記憶を共有するため、ＩＯＨ１０５Ａ〜Ｄがアクセスすることの可能なメモリは、当該ＩＯＨが存在するブレード上のメモリに限らない。例えばＩＯＨ１０５Ａは、他のブレード上に存在するメモリ１０３Ｃにアクセスすることも可能である。この場合、内部インターコネクト１０４Ａ、１０９、１０４Ｃを経由してアクセスすることになる。
【００３４】
ＳＭＰサーバ１００では、ブレード１０１Ａ〜Ｄに跨って単一のオペレーティングシステム、ハイパーバイザ、ないしは、その他のシステムソフトウェアを動作させ、その上でアプリケーションを動作させることができる。例えば、本実施例においては、ＳＭＰサーバ１００上で単一のハイパーバイザを動作させ、その上で仮想マシン（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ：ＶＭ）を動作させるものとする。そのために、メモリ１０３Ａ〜Ｄ上に分散して、ハイパーバイザのバイナリと、ＶＭイメージのバイナリが配置されている。
【００３５】
Ｉ／Ｏスイッチ１１０は、ＳＭＰサーバ１００とＩ／Ｏデバイス１２０Ａ〜Ｄの接続関係を柔軟に切替えるためのスイッチを提供する。Ｉ／Ｏスイッチ１１０は、ＰＣＩ  Ｅｘｐｒｅｓｓスイッチで構成されるスイッチ交換部１１１、Ｉ／Ｏコントローラ１１２、オフセット減算部１１３Ａ〜Ｄ、宛先ポート検索部１１４Ａ〜Ｄから構成される。
【００３６】
スイッチ交換部１１１はサーバを接続するポート（以降、サーバ側ポートと称する）を複数個有するスイッチである。また、デバイスを接続するポート（以降、デバイス側ポートと称する）を少なくとも１ポート以上有する。
【００３７】
このようなスイッチとしては、例えば、非特許文献２のＭＲ−ＩＯＶ規格に準拠したスイッチがある。また、ＭＲ−ＩＯＶ規格に準拠せずとも、複数のサーバ側ポートを有するスイッチであれば本実施例で利用することができる。
【００３８】
Ｉ／Ｏコントローラ１１２は、Ｉ／Ｏスイッチ１１０内の構成要素、すなわちスイッチ交換部１１１、オフセット減算部１１３Ａ〜Ｄ、宛先ポート検索部１１４Ａ〜Ｄを制御するためのコントローラである。Ｉ／Ｏコントローラ１１２は具体的には、ＣＰＵやメモリをワンチップに集積したマイクロコントローラを利用すれば良い。Ｉ／Ｏコントローラ１１２上には、後で詳述するオフセット情報１５０、及び宛先ポートテーブル１５１が格納されている。
【００３９】
管理サーバ１３０は、図１に示す計算機システム全体を管理するためのサーバである。管理サーバ１３０は、ハードウェアとしてはブレードサーバ等を用いて実現できる。また、管理に要する負荷が軽微であれば、マイクロコントローラを利用して実現することも可能である。
【００４０】
管理サーバ１３０は管理ネットワーク１３１を経由して、ＳＭＰサーバ１００及びＩ／Ｏコントローラ１１２と接続されている。管理サーバはＳＭＰサーバ１００上で動作するハイパーバイザ、及び、Ｉ／Ｏコントローラ１１２と通信を行い、後述する各種パラメータをハイパーバイザ、ないしは、Ｉ／Ｏコントローラ１１２に指定することができる。また、管理サーバ１３０はＳＭＰサーバ１００の構成情報としてブレードの枚数、メモリ容量等を取得することができる。
【００４１】
図１４に本実施例のＳＭＰサーバ１００の主記憶空間を示す。ブレード１０１Ａ〜Ｄが有するメモリ１０３Ａ〜Ｄは、図１４に示す単一の主記憶空間にマップされる。また、ＣＰＵ１０２Ａ〜ＤがＩ／Ｏデバイス１２０Ａ〜Ｄにアクセスする際に用いるＭＭＩＯ（Ｍｅｍｏｒｙ  Ｍａｐｐｅｄ  Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）空間等も配置されている。
【００４２】
ＰＣＩ  Ｅｘｐｒｅｓｓでは、Ｉ／Ｏデバイス１２０Ａ〜Ｄは、図１４に示す主記憶空間の任意のアドレスに対して、メモリの書込み、ないしは、メモリの読出しを要求するパケットを投げることができる。
【００４３】
また、ＰＣＩ  Ｅｘｐｒｅｓｓでは、Ｉ／Ｏデバイス１２０Ａ〜Ｄが有するＭＭＲ(Ｍｅｍｏｒｙ  Ｍａｐｐｅｄ  Ｒｅｇｉｓｔｅｒ）を主記憶空間内にマップすることができ、これをＭＭＩＯ空間と称する。ＣＰＵ１０２Ａ〜ＤはＭＭＩＯ空間に対してロード命令、ないしは、ストア命令を発行することで、ＭＭＲからの読出し、ないしは、ＭＭＲへの書込みを行うことができる。
【００４４】
ＰＣＩ  Ｅｘｐｒｅｓｓのバストポロジーでは、Ｂｕｓ＃（バス番号、８ｂｉｔ）、Ｄｅｖ＃（デバイス番号、５ｂｉｔ）、Ｆｕｎ＃（ファンクション番号、３ｂｉｔ）の３種の番号の組合せ（合計１６ｂｉｔ）で、Ｉ／Ｏデバイスや経路を指定する。なお、Ｄｅｖ＃とＦｕｎ＃に関しては、Ｉ／Ｏデバイス内に複数の機能を有する時の指定に用いられるものである。本実施例においては、Ｉ／Ｏデバイス内の動作は影響しないので、Ｄｅｖ＃とＦｕｎ＃に関しては説明を割愛する。
【００４５】
図９に、図１に示す計算機システムに対して本発明を適用せずに、ＰＣＩ  Ｅｘｐｒｅｓｓ規格にのみ則って利用する場合のバスツリーを示す。図９において、ＳＭＰサーバ１００から４本の線がＩ／Ｏスイッチ１１０に接続されているが、これは図１で示す物理的なコンポーネントとしてはＩ／Ｏインタフェース１１５Ａ〜Ｄと対応している。また、同様にＩ／ＯスイッチからＩ／Ｏデバイスに接続する線は、それぞれ図１のＩ／Ｏインタフェース１２１Ａ〜Ｄ、Ｉ／Ｏデバイスはそれぞれ図１のＩ／Ｏデバイス１２０Ａ〜Ｄに対応している。
【００４６】
ＰＣＩ  Ｅｘｐｒｅｓｓではバスツリーの頂点（ルート）から、深さ優先方向にＢｕｓ＃を付与していく。Ｂｕｓ＃は図９に示すようにＩ／Ｏインタフェースに対して付与されていく。途中経路では単一のＢｕｓ＃に複数のブリッジ（ツリーの中継点）が接続されるが、末端（リーフ）ではブリッジ１個につき1個のＩ／Ｏデバイスしかつなげることが出来ない。そのため、Ｉ／Ｏデバイスが直に接続されるＩ／ＯインタフェースのＢｕｓ＃を、当該Ｉ／Ｏデバイスを識別する識別子として見做すことが出来る。例えば、Ｉ／Ｏインタフェース１２１ＡのＢｕｓ＃はＢｕｓ＃３であるが、Ｉ／Ｏデバイス１２０Ａを示す識別子としてＢｕｓ＃３を用いる。
【００４７】
ＰＣＩ  Ｅｘｐｒｅｓｓでは、ＣＰＵ１０２Ａ〜Ｄから、Ｉ／Ｏデバイス１２０Ａ〜Ｄに対してパケットを発行する時、Ｉ／Ｏデバイス１２０Ａ〜Ｄが有するＭＭＲがマッピングされているＭＭＩＯ空間のアドレスを宛先として指定するＭＭＩＯリクエストと、Ｉ／Ｏデバイス１２０Ａ〜Ｄを示す識別子と、当該デバイス内の４ＫＢ空間（Ｃｏｎｆｉｇｕｒａｔｉｏｎ空間）のアドレスの組合せを宛先として指定するＣｏｎｆｉｇｕｒａｔｉｏｎリクエストの２種類がある。
【００４８】
Ｃｏｎｆｉｇｕｒａｔｉｏｎリクエストは、Ｂｕｓ＃（さらにＩ／Ｏデバイスが複数の機能を有する場合にはＤｅｖ＃、Ｆｕｎ＃も組合せる）とＣｏｎｆｉｇｕｒａｔｉｏｎ空間アドレス（１２ｂｉｔ）の組合せで宛先を表現する。ＣＰＵ１０２Ａ〜ＤからＩ／Ｏデバイス１２０Ａ〜Ｄまでの間は、Ｂｕｓ＃を手掛かりにルーティングを行う。そして、Ｉ／Ｏデバイス１２０Ａ〜Ｄまで到達した後は、単一の機能だけを有するデバイスの場合にはＣｏｎｆｉｇｕｒａｔｉｏｎ空間アドレス、複数の機能を有するデバイスの場合にはＤｅｖ＃、Ｆｕｎ＃、及び、Ｃｏｎｆｉｇｕｒａｔｉｏｎ空間アドレスの組合せで、Ｉ／Ｏデバイス内で最終的に到達すべき箇所が決定される。
【００４９】
Ｂｕｓ＃を手掛かりにしたルーティングは、図９に示すような、Ｂｕｓ＃が深さ優先で付与されたツリー状のトポロジーであれば容易に行うことが出来る。ＳＭＰサーバ１００内では、宛先のＢｕｓ＃を見て、Ｂｕｓ＃１〜６３はＩ／Ｏインタフェース１１５Ａに、Ｂｕｓ＃６５〜１２７はＩ／Ｏインタフェース１１５Ｂに、Ｂｕｓ＃１２９〜１９１はＩ／Ｏインタフェース１１５Ｃに、Ｂｕｓ＃１９３〜２５５はＩ／Ｏインタフェース１１５Ｄに出力する。このように、各ブリッジには、そのブリッジの配下にあるＢｕｓ＃の範囲が記録されており、それを手掛かりにルーティングすることができる。Ｉ／Ｏスイッチ１１０内でも同様にルーティングを行うことで、Ｉ／Ｏデバイス１２０Ａ〜Ｄに到達することができる。
【００５０】
なお、ＣｏｎｆｉｇｕｒａｔｉｏｎリクエストとＭＭＩＯリクエストはＣＰＵ１０２Ａ〜Ｄから見ると、いずれも主記憶空間へのロード命令、ないしは、ストア命令として発行される。主記憶空間中のＭＭＩＯ空間へのロード命令、ないしは、ストア命令の発行がＭＭＩＯリクエストを発生させる。また、主記憶空間中にはＣｏｎｆｉｇｕｒａｔｉｏｎリクエストを発生させるための特別な空間（ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｅｎｈａｎｃｅｄ  Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ａｃｃｅｓｓ  Ｍｅｃｈａｎｉｓｍ空間、ＥＣＡＭ空間）が用意されており、この空間に対するロード命令、ないしは、ストア命令の発行がＣｏｎｆｉｇｕｒａｔｉｏｎリクエストを発生させる。いずれも、ＣＰＵ１０２Ａ〜Ｄから見ると、主記憶空間内のメモリへのアクセスと区別が無いことに留意されたい。
【００５１】
ＭＭＩＯリクエストは、主記憶空間のアドレス（近年のサーバでは６４ｂｉｔが多い。旧来のサーバでは３２ｂｉｔのものも存在する。）で宛先を指定する。Ｂｕｓ＃を手掛かりにしたルーティングと同様に、図９に示す各ブリッジには、当該ブリッジの配下にあるアドレスの範囲が記録されており、これを手掛かりにルーティングを行っている。ルーティングの動作としてはＭＭＩＯリクエストも、Ｃｏｎｆｉｇｕｒａｔｉｏｎリクエストも類似しているため、以降の説明ではＣｏｎｆｉｇｕｒａｔｉｏｎリクエストを事例とする。
【００５２】
図１０に、図９のバスツリーにおいて、ＳＭＰサーバ１００からＩ／Ｏデバイス１２０Ｂ（Ｂｕｓ＃４）にアクセスする際の経路を示す。この経路は、Ｂｕｓ＃４宛のロード命令、ないしは、ストア命令がＣＰＵ１０２Ａ〜Ｄ（ブレード１０１Ａ〜Ｄ、ブレード番号では＃０〜＃３）のどこで実行されたとしても不変である。
【００５３】
図１０で示した経路はバスツリーという論理的なレイヤーでのものであったが、物理的な経路で表現すると、図１１で示すような経路になる。図１１では、ＣＰＵ１０２Ａ（ブレード１０１Ａ、＃０）からＩ／Ｏデバイス１０２Ｂ（Ｂｕｓ＃４）にアクセスする経路を破線、ＣＰＵ１０２Ｃ（ブレード１０１Ｃ、＃２）からＩ／Ｏデバイス１０２Ｂ（Ｂｕｓ＃４）にアクセスする経路を実線で示している。図９に示すバスツリーではいずれも同じ経路を通るが、図１０に示す物理的な経路では、ロード命令、ないしは、ストア命令が発行されるＣＰＵが異なるため、途中までは異なる経路を通る。
【００５４】
図１１において、ＣＰＵ１０２ＣからＩ／Ｏデバイス１０２Ｂへのアクセスでは内部インターコネクト１０９を経由している。内部インターコネクト１０９は、Ｉ／Ｏデバイスへのアクセスの他にも、キャッシュコヒーレンス等多くのトラフィックが流れており、ＳＭＰサーバ１００全体のパフォーマンスを左右するため、内部インターコネクト１０９のトラフィックは出来るだけ回避することが望ましい。また、ＣＰＵ１０２Ｃのみならず、ＣＰＵ１０２Ｂ、１０２Ｄも同時にＩ／Ｏデバイス１２０Ｂに対してアクセスしようとすると、内部インターコネクト１０９をより一層混雑させてしまう。
【００５５】
この計算機システムでは、ブレード１０１ＣとＩ／Ｏスイッチ１１０間のＩ／Ｏインタフェース１１５Ｃも存在するので、ＣＰＵ１０２ＣからＩ／Ｏデバイス１０２Ｂへのアクセスは、Ｉ／Ｏインタフェース１１５Ｃを経由すれば、内部インターコネクト１０９の混雑を回避することができる。
【００５６】
しかし、図９で示したバストポロジーでＩ／Ｏインタフェース１１５Ｃを経由するようなアクセスを行うためには、Ｉ／Ｏデバイス１０２ＢはＢｕｓ＃１２９〜１９１でなければならない。例えば、Ｉ／Ｏデバイス１０２ＢをＢｕｓ＃１３２に置く必要が出てくる。すると、今度は、ＣＰＵ１０２Ａ〜ＤからＩ／Ｏデバイス１０２Ｂへのアクセスは全てＩ／Ｏインタフェース１１５Ｃに集中することになり、ＣＰＵ１０２Ｃからのアクセスに起因する混雑は解消しても、ＣＰＵ１０２Ａ、Ｂ、Ｄからのアクセスに起因する混雑が発生することになる。
【００５７】
そこで、本実施例では、図１のオフセット演算部１１３Ａ〜Ｄ、宛先ポート検索部１１４Ａ〜Ｄ、Ｉ／Ｏコントローラ１１２、オフセット情報１５０、宛先ポートテーブル１５１、管理サーバ１３０、及び、ＳＭＰサーバ１００のメモリ１０３Ａ〜Ｄ上にロードされているハイパーバイザ、ないしは、その他のシステムソフトウェア、及び、ＥＰＴ（Ｅｘｔｅｎｄｅｄ  Ｐａｇｅ  Ｔａｂｌｅ）、ないしは、その他のアドレス変換機構を用いて、上記の混雑を解消する手段を提供する。
【００５８】
ここで、ＥＰＴ等のアドレス変換機構による通常の手法により、各ブレード１０１Ａ、＃０〜１０１Ｄ、＃０３各々において、所望のオフセットが設定される。このアドレス変換機構は、各ブレード１０１Ａ、＃０〜１０１Ｄ、＃０３のＣＰＵがＩ／Ｏデバイスに対するロード命令ないしはストア命令などの命令を発行したときに、各ブレード１０１Ａ、＃０〜１０１Ｄ、＃０３各々のＣＰＵ毎に異なるオフセット値をロード命令ないしはストア命令に起因して発生するパケット、ないしはトランザクションの宛先アドレス等の宛先データに加算する。このオフセット値は、Ｉ／Ｏコントローラ１１２に予めオフセット情報１５０として記憶される。
【００５９】
図２は、図１のＩ／Ｏスイッチ１１０が有するオフセット減算部１１３Ａ〜Ｄの詳細な構成を示すブロック図である。オフセット減算部１１３Ａ〜Ｄはサーバ側ポートに設けられる構成要素であり、サーバ側ポート１ポートに対して１個のオフセット減算部を設ける。本実施例では、サーバ側ポートはＩ／Ｏインタフェース１１５Ａ〜Ｄの４ポートであるため、その数に合わせてオフセット減算部１１３Ａ〜Ｄの４個を有する。
【００６０】
オフセット減算部１１３Ａ〜Ｄは、Ｉ／Ｏインタフェース１１５Ａ〜ＤでＳＭＰサーバ１００と接続され、Ｉ／Ｏインタフェース１１６Ａ〜Ｄでスイッチ交換部１１１と接続される。また、Ｉ／Ｏコントローラが有するオフセット情報１５０を、信号１１８として受け取っている。そして、このオフセット情報１５０は、Ｉ／Ｏインタフェース１１５Ａ〜Ｄから入力されるＳＭＰサーバ発、Ｉ／Ｏデバイス宛パケットの宛先を書き換えて、Ｉ／Ｏインタフェース１１６Ａ〜Ｄから出力するために利用される。
【００６１】
オフセット減算部１１３Ａ〜Ｄは、Ｉ／Ｏインタフェース１１６Ａ〜Ｄから入力されたＩ／Ｏデバイス発サーバ宛パケット２２０は素通しして、Ｉ／Ｏインタフェース１１５Ａ〜Ｄから出力する。
【００６２】
一方、Ｉ／Ｏインタフェース１１５Ａ〜Ｄから入力されたサーバ発Ｉ／Ｏデバイス宛パケット２３０は、当該パケットの宛先（ＭＭＩＯリクエストのパケットの場合には宛先のアドレス、Ｃｏｎｆｉｇｕｒａｔｉｏｎリクエストのパケットの場合には宛先のＢｕｓ#）を書き換えて、Ｉ／Ｏインタフェース１１６Ａ〜Ｄから出力する。
【００６３】
サーバ発Ｉ／Ｏデバイス宛パケット２３０は、パケット解析部２１１で解析される。パケット２３０のデータペイロード等はデータ２３３として、そのままパケット組当部２１２に送られる。宛先情報２３２は減算器２１４に入力される。なお、宛先情報２３２は前述した通り、６４ｂｉｔのアドレス（ＭＭＩＯリクエスト）と、８ｂｉｔのＢｕｓ＃（Ｃｏｎｆｉｇｕｒａｔｉｏｎリクエスト）の場合がある。パケット２３０がＭＭＩＯリクエストであるかＣｏｎｆｉｇｕｒａｔｉｏｎリクエストであるかはパケット解析部２１１が解析し、リクエスト種情報２３１としてセレクタ２１３に提供する。
【００６４】
セレクタ２１３は、信号１１８でオフセット情報１５０を受け取り、オフセット情報１５０のうち、当該オフセット減算部１１３Ａ〜Ｄが担当しているＩ／Ｏインタフェース１１５Ａ〜Ｄのサーバ側ポート番号に対応するエントリを選択する。さらに、リクエスト種情報２３１を元に、ＭＭＩＯリクエストであればＭＭＩＯアドレスオフセットを選択して、オフセット値２３６として減算器２３４に入力する。
【００６５】
減算器２３４は、宛先情報２３２からオフセット値２３６を減じた結果を宛先情報２３４としてパケット組立部２１２に入力する。演算を式で示すと、（宛先情報２３４）＝（宛先情報２３２）−（オフセット値２３６）である。
【００６６】
パケット組立部２１２は、宛先情報２３４とデータ２３３からパケット２３５を組み立てて、Ｉ／Ｏインタフェース１１６Ａ〜Ｄに出力する。
【００６７】
図３は、図１のＩ／Ｏスイッチ１１０が有する宛先ポート検索部１１４Ａ〜Ｄの詳細な構成を示すブロック図である。宛先ポート検索部１１４Ａ〜Ｄはデバイス側ポートに設けられる構成要素であり、デバイス側ポート1ポートに対して1個の宛先ポート検索部を設ける。本実施例では、デバイス側ポートはＩ／Ｏインタフェース１２１Ａ〜Ｄの４ポートであるため、その数に合わせて宛先ポート検索部１１４Ａ〜Ｄの４個を有する。
【００６８】
宛先ポート検索部１１４Ａ〜Ｄは、Ｉ／Ｏインタフェース１１７Ａ〜Ｄから入力されたサーバ発Ｉ／Ｏデバイス宛パケット３２０は素通しして、Ｉ／Ｏインタフェース１２１Ａ〜Ｄから出力する。
【００６９】
一方、Ｉ／Ｏインタフェース１２１Ａ〜Ｄから入力されたＩ／Ｏデバイス発サーバ宛パケットは、当該パケットの宛先（Ｉ／Ｏデバイス発サーバ宛パケットは主記憶空間のアドレスを宛先としている）を元に、ＰＣＩ  Ｅｘｐｒｅｓｓスイッチが当該パケットを出力すべきＩ／Ｏインタフェース１１６Ａ〜Ｄを決定する。すなわち、Ｉ／Ｏデバイス発サーバ宛パケットの宛先アドレスを元に、宛先となるサーバ（ブレード）を決定する。
【００７０】
Ｉ／Ｏデバイス発サーバ宛パケット３３０は、パケット解析部３１１にて、宛先アドレス３３２を抽出する。宛先アドレス３３２はテーブル参照部３１２に入力される。一方、パケット３３０はそのまま改変なくパケット３３１として、パケット組立部３１３に入力される。
【００７１】
テーブル参照部３１２は、信号１１９で宛先ポートテーブル１５１を参照し、テーブル参照部３１２に入力されている宛先アドレス３３２に対応するエントリを検索する。すなわち、（ベースアドレス）≦（宛先アドレス３３２）＜（ベースアドレス＋サイズ）という条件を満たすエントリを検索し、そのエントリに対応する宛先ポート番号を、宛先ポート番号３３３として出力する。
【００７２】
なお、宛先アドレス３３２が何れのエントリにも対応しなかった場合には、デフォルトの宛先ポート番号を宛先ポート番号３３３として出力する。本実施例では、デフォルトの宛先ポート番号は０（Ｉ／Ｏインタフェース１１６Ａ、すなわち、ブレード１１０Ａ（＃０）に対応する）とする。
【００７３】
パケット組当部３１３は、パケット３３１に宛先ポート番号３３３を付与して、パケット３３４としてインタフェース１１３Ａ〜Ｄから出力する。
【００７４】
なお、宛先ポート番号はＭＲ−ＩＯＶ対応のＰＣＩ  Ｅｘｐｒｅｓｓスイッチを用いている場合には、ＭＲ−ＩＯＶ規格で定義されているＶＨ（Ｖｉｒｔｕａｌ  Ｈｉｅｒａｒｃｈｙ）を用いることができる。また、パケットに宛先ポート番号（ＶＨ)を付与するための機構も、ＴＬＰ  ＰｒｅｆｉｘとしてＭＲ−ＩＯＶ規格で定義されている。
【００７５】
また、本実施例では、ＭＲ−ＩＯＶ規格でなくても、独自のルーティング機構を採用しているＰＣＩ  Ｅｘｐｒｅｓｓスイッチを利用しても良い。その場合、当該スイッチの定めるプロトコルで宛先ポート番号を付与する。
【００７６】
図４に、Ｉ／Ｏコントローラ１１２に記憶される、本実施例のオフセット情報１５０の構成の一例を示す。同図に示すように、オフセット情報１５０は、ＭＭＩＯアドレスオフセットテーブル４１０と、ＩＤオフセットテーブル４２０から構成される。いずれのテーブルも、サーバ側ポートの数と同数のエントリから構成される。すなわち、本実施例の場合は４ポートであるため、ＭＭＩＯアドレスオフセット４エントリと、ＩＤオフセット４エントリの合計８エントリでオフセット情報１５０は構成される。
【００７７】
ＭＭＩＯアドレスオフセットは６４ｂｉｔのエントリで、サーバ側ポート番号に対応するポート（Ｉ／Ｏインタフェース１１５Ａ〜Ｄ）からＩ／Ｏスイッチ１１０に入力された、サーバ発Ｉ／Ｏデバイス宛パケット（ＭＭＩＯリクエスト）の宛先アドレスから減算すべきオフセット量を指示する。ハードウェアとしてはレジスタやフリップフロップとして実装される。
【００７８】
ＩＤオフセットは８ｂｉｔエントリで、ＭＭＩＯアドレスオフセットと同様に、サーバ側ポート番号に対応するポート（Ｉ／Ｏインタフェース１１５Ａ〜Ｄ）からＩ／Ｏスイッチ１１０に入力された、サーバ発Ｉ／Ｏデバイス宛パケット（Ｃｏｎｆｉｇｕｒａｔｉｏｎリクエスト）の宛先Ｂｕｓ＃から減算すべきオフセット量を指示する。実装形態はＭＭＩＯアドレスオフセットと同様に、レジスタやフリップフロップを用いる。
【００７９】
図５に図１の宛先ポートテーブル１５１の構成を示す。宛先ポートテーブルは（有効ビット、ベースアドレス、サイズ、宛先ポート番号）を１エントリとして、最低１エントリ以上で構成される。有効ビットが立っている（有効ビット＝１）エントリのみが用いられる。
【００８０】
ベースアドレスは主記憶空間が６４ｂｉｔのＳＭＰサーバ１００の場合、６４ｂｉｔのベースアドレスとなる。サイズはベースアドレスを起点とした領域を示すサイズである。一般的に、主記憶空間上の領域のサイズは２の冪乗で表わされることが多いので、本実施例はサイズは２＾ＮバイトのＮを表す６ｂｉｔの数値とした。この場合、２＾０バイト〜２＾６３バイトのサイズを表現することができるため、６４ｂｉｔの主記憶空間で用いるのに十分な大きさである。
【００８１】
宛先ポート番号は、ベースアドレスとサイズで示された領域に対するＩ／Ｏデバイス発サーバ宛パケットを出力すべきサーバ側ポートのポート番号を指定するものである。本実施例では、サーバ側ポートは４ポートであるため、宛先ポート番号は２ｂｉｔあれば表現可能である。
【００８２】
図１２に、図１の計算機システムにおけるバスツリー状の経路の一例を示す。図１２では、図１１と同様にＣＰＵ１０２Ａ（ブレード１０１Ａ、＃０）からＩ／Ｏデバイス１０２Ｂ（Ｂｕｓ＃４）にアクセスする経路を破線、ＣＰＵ１０２Ｃ（ブレード１０１Ｃ、＃２）にアクセスする経路を実線で示している。
【００８３】
破線で示されるブレード＃０発Ｂｕｓ＃４宛の経路は図１１と同じである。しかし、実線で示されるブレード＃２発Ｂｕｓ＃４宛の経路は図１１とは異なり、Ｂｕｓ＃１２９（Ｉ／Ｏインタフェース１１５Ｃ）を経由している。図１２で示す経路を、物理的な構成要素上で示したのが図１３である。これを見ると、図１１で問題となっていた内部インタフェース１０９やＢｕｓ＃１（Ｉ／Ｏインタフェース１１５Ａ）の混雑を回避することができる。
【００８４】
図１２で行われている動作を、図１に示す本実施例の構成要素の動作を用いて説明する。ブレード＃０のＣＰＵ１０２ＡがＢｕｓ＃４宛のＣｏｎｆｉｇｕｒａｔｉｏｎリクエストを発行する時には、Ｂｕｓ＃４に対応した主記憶空間のアドレスに対するロード命令、ストア命令を発行する。同様に、ブレード＃２のＣＰＵ１０２Ｃもロード命令、ストア命令を発行する。
【００８５】
この時、本実施例では、ＣＰＵ１０２Ａのロード命令、ストア命令はそのまま発行させるが、ＣＰＵ１０２Ｃのロード命令、ストア命令は、メモリ１０３Ｃ内のＥＰＴを用いてアドレス変換を行うことで、Ｂｕｓ＃４に対するＣｏｎｆｉｇｕｒａｔｉｏｎリクエストをＢｕｓ＃１３２（Ｂｕｓ＃４＋オフセット＃１２８）に対するＣｏｎｆｉｇｕｒａｔｉｏｎリクエストに変換する。
【００８６】
これにより、ＣＰＵ１０２Ｃのロード命令、ストア命令に起因して発行されたパケットは、Ｂｕｓ＃１３２を目指してルーティングするので、途中でＢｕｓ＃１２９を通る経路でルーティングされることになる。すなわち、ＳＭＰサーバ１１０とＩ／Ｏスイッチ１１０の間では、Ｉ／Ｏインタフェース１１５Ｃ（Ｂｕｓ＃１２９）を経由することになり、内部インターコネクト１０９、及び、Ｉ／Ｏインタフェース１１５Ａ（Ｂｕｓ＃１）の混雑を回避することができる。
【００８７】
次に、Ｉ／Ｏスイッチ１１０の内部では、本来Ｂｕｓ＃４に向かわなければならない当該パケット（Ｉ／Ｏスイッチ１１０に到達した段階ではＢｕｓ＃１３２宛となっている）の宛先をＢｕｓ＃４に戻す。そのために、オフセット減算部１１３Ｃで、Ｂｕｓ＃４（Ｂｕｓ＃１３２−オフセット＃１２８）に戻す処理を行う。その後、Ｂｕｓ＃３〜Ｂｕｓ＃６を配下に持つＢｕｓ＃２のブリッジにパケットをルーティングすることで、Ｂｕｓ＃４のＩ／Ｏデバイス１２０Ｂに対してパケットを到達させることができる。このようにして、図１２、及び、図１３に示すようなルーティングが実現できる。
【００８８】
なお、ＭＭＩＯリクエストの場合には、Ｂｕｓ＃をアドレスに読み替えることで同じ処理が実現できる。また、前記したのはいずれもサーバ発Ｉ／Ｏデバイスのリクエストを行うパケットであったが、リクエストに対するリプライのパケットをＩ／Ｏデバイスからサーバに、リクエストの経路を逆に辿って返す必要がある。
【００８９】
ＰＣＩ  Ｅｘｐｒｅｓｓでは、リクエストを行うパケットには、いずれもリクエストを発行したコンポーネントを識別するためのＲＩＤ（Ｒｅｑｕｅｓｔｅｒ  ＩＤ）が付与されている。図１０、及び、図１２に示すようなバスツリーでは、リクエストを発行するのはバスツリーの頂点であるが、ハードウェアの動作としては図１で示すＩＯＨ１０５Ａ〜Ｄでパケットが生成される。すなわち、ＲＩＤはリクエストを行うパケットを生成したＩＯＨ１０５Ａ〜Ｄを持つはずである。そして、Ｉ／Ｏデバイス１２０Ａ〜Ｄはリクエストを受け取ると、それに応答するためのリプライのパケットを生成するが、リプライのパケットの宛先は、リクエストのパケットのＲＩＤを用いる。そのため、リクエストに対するリプライのパケットは、Ｉ／Ｏデバイスからサーバに、リクエストの経路を逆に辿って返すことが出来る。
【００９０】
図１２及び図１３で示す動作を行うためには、ＣＰＵ１０２Ａ〜Ｄがロード命令、ないしは、ストア命令を発行する時に、ＭＭＩＯリクエストであればパケットの宛先アドレスを、Ｃｏｎｆｉｇｕｒａｔｉｏｎリクエストであればパケットの宛先Ｂｕｓ＃を、所定のオフセット分ずらす必要がある。そのための動作を説明する。
【００９１】
先に説明した様に、ＳＭＰサーバ１００は図１４で示した単一の主記憶空間を有する。ＭＭＩＯリクエスト、及び、Ｃｏｎｆｉｇｕｒａｔｉｏｎリクエストは、ＣＰＵ１０２Ａ〜Ｄが、図１４の主記憶空間の中で「ＭＭＩＯ空間、等」とされている空間にロード命令、ないしは、ストア命令を発行したときに発生する。
【００９２】
図６は前述した「ＭＭＩＯ空間、等」をさらに詳細に示したメモリマップである。この中には、ブレード＃０ＭＭＩＯ空間、ブレード＃１ＭＭＩＯ空間、ブレード＃２ＭＭＩＯ空間、ブレード＃３ＭＭＩＯ空間、及び、ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｅｎｈａｎｃｅｄ  Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ａｃｃｅｓｓ  Ｍｅｃｈａｎｉｓｍ空間（ＥＣＡＭ空間）がある。
【００９３】
ＭＭＩＯリクエストは、Ｃｏｎｆｉｇｕｒａｔｉｏｎリクエストと同様にバスツリー状でルーティングされる。図９で示すブリッジは、自分の配下にあるＢｕｓ＃を把握しており、それに基づいてＣｏｎｆｉｇｕｒａｔｉｏｎリクエストのルーティングが行われる。それに加えてブリッジは自分の配下にあるＭＭＩＯアドレスも把握しており、それに基づいてＣｏｎｆｉｇｕｒａｔｉｏｎリクエストのルーティングが行われる。
【００９４】
ここで、図６のブレード＃０ＭＭＩＯ空間は、ＩＯＨ１０５Ａの配下にあるＭＭＩＯアドレス空間であり、ブレード＃０ＭＭＩＯ空間宛のＭＭＩＯリクエストパケットはＩ／Ｏインタフェース１１５Ａから出力される。同様に、ブレード＃１ＭＭＩＯ空間はＩＯＨ１０５Ｂ、及び、Ｉ／Ｏインタフェース１１５Ｂに、ブレード＃２ＭＭＩＯ空間はＩＯＨ１０５Ｃ、及び、Ｉ／Ｏインタフェース１１５Ｃに、ブレード＃３ＭＭＩO空間はＩＯＨ１０５Ｄ、及び、Ｉ／Ｏインタフェース１１５Ｄに、それぞれ対応している。
【００９５】
ここで、Ｉ／Ｏデバイス１２０Ａ〜Ｄが有するＭＭＲは、全てブレード＃０ＭＭＩＯ空間にマッピングするものとする。そのため、ＣＰＵ１０２Ａ〜Ｄが発行するＭＭＩＯリクエストは、全てブレード＃０ＭＭＩＯ空間のアドレスを宛先としたものになる。
【００９６】
しかし、そのままでは、全てのＭＭＩＯリクエストがＩ／Ｏインタフェース１１５Ａに集中してしまうことになるので、アドレス変換を行うことで、ＣＰＵ１０２Ａ〜Ｄ毎に使用するＩ／Ｏインタフェース１１５Ａ〜Ｄを分散させる。
【００９７】
ＣＰＵ１０２Ａがブレード＃０ＭＭＩＯ空間へのロード命令、ないしは、ストア命令を発行したときには、アドレス変換において、オフセット＋０を加える（すなわち、アドレス変換しない）。これにより、ＣＰＵ１０２Ａ由来のＭＭＩＯリクエストはＩ／Ｏインタフェース１１５Ａから出力される。
【００９８】
ＣＰＵ１０２Ｂがブレード＃０ＭＭＩＯ空間へのロード命令、ないしは、ストア命令を発行したときには、アドレス変換において、オフセット＋αを加える（オフセット＋αは図６に示す）。これにより、ＣＰＵ１０２Ｂ由来のＭＭＩＯリクエストはブレード＃１ＭＭＩＯ空間に対するものとなり、Ｉ／Ｏインタフェース１１５Ｂから出力される。しかし、本来の宛先はオフセットを加える前のアドレスであるため、Ｉ／Ｏスイッチ１１０に到着後はオフセット演算部１１３Ｂでオフセット分を減じる（宛先アドレスからαを減じる）。
【００９９】
ＣＰＵ１０２Ｃがブレード＃０ＭＭＩＯ空間へのロード命令、ないしは、ストア命令を発行したときには、アドレス変換において、オフセット＋βを加える（オフセット＋βは図６に示す）。これにより、ＣＰＵ１０２Ｃ由来のＭＭＩＯリクエストはブレード＃２ＭＭＩＯ空間に対するものとなり、Ｉ／Ｏインタフェース１１５Ｃから出力される。しかし、本来の宛先はオフセットを加える前のアドレスであるため、Ｉ／Ｏスイッチ１１０に到着後はオフセット演算部１１３Ｃでオフセット分を減じる（宛先アドレスからβを減じる）。
【０１００】
ＣＰＵ１０２Ｄがブレード＃０ＭＭＩＯ空間へのロード命令、ないしは、ストア命令を発行したときには、アドレス変換において、オフセット＋γを加える（オフセット＋γは図６に示す）。これにより、ＣＰＵ１０２Ｄ由来のＭＭＩＯリクエストはブレード＃３ＭＭＩＯ空間に対するものとなり、Ｉ／Ｏインタフェース１１５Ｄから出力される。しかし、本来の宛先はオフセットを加える前のアドレスであるため、Ｉ／Ｏスイッチ１１０に到着後はオフセット演算部１１３Ｄでオフセット分を減じる（宛先アドレスからβを減じる）。
【０１０１】
以上のような動作において、ＭＭＩＯリクエストを、当該リクエストを発行したＣＰＵ１０２Ａ〜Ｄに応じて、Ｉ／Ｏインタフェース１１５Ａ〜Ｄに分散して出力させることで、負荷分散を実現することができるようになった。
【０１０２】
次に、Ｃｏｎｆｉｇｕｒａｔｉｏｎリクエストの場合を説明する。Ｃｏｎｆｉｇｕｒａｉｔｏｎリクエストの宛先は、既に説明したように、Ｂｕｓ＃、Ｄｅｖ＃、Ｆｕｎ＃、Ｃｏｎｆｉｇｕｒａｔｉｏｎ空間アドレスの組合せで指定される。
【０１０３】
Ｃｏｎｇｉｇｕｒａｔｉｏｎリクエストは、図６のＥＣＡＭ空間に対してＣＰＵ１０２Ａ〜Ｄがロード命令、ないしは、ストア命令を発行することでパケットが発生する。ＥＣＡＭ空間はＣｏｎｆｉｇｕｒａｔｉｏｎ空間（１２ｂｉｔ空間＝４ＫＢ空間）に相当する領域を、Ｂｕｓ＃、Ｄｅｖ＃、Ｆｕｎ＃の個数分組合せたものである。すなわち、４ＫＢ×Ｆｕｎ＃個数（８個／Ｄｅｖ＃）×Ｄｅｖ＃個数（３２個／Ｂｕｓ＃）×Ｂｕｓ＃個数（２５６個／システム）の合計２５６ＭＢの空間である。
【０１０４】
図７にＥＣＡＭ空間の詳細を示す。例えば、Ｂｕｓ＃３のＩ／Ｏデバイス１２０Ａに対するＣｏｎｆｉｇｕｒａｔｉｏｎリクエストは、先頭アドレスｙを起点として、＋１００００Ｈ〜＋１ＦＦＦＦＨまでの１ＭＢの空間である（４ＫＢ×Ｆｕｎ＃個数×Ｄｅｖ＃個数＝１ＭＢ）。この１ＭＢ空間内でのアドレスは、Ｉ／Ｏデバイス１２０Ａが有するどのリソース（レジスタ）にアクセスしたいかによって異なる。
【０１０５】
前述した、ＣＰＵ１０２Ｃ発のＢｕｓ＃４に対するＣｏｎｆｉｇｕｒａｔｉｏｎリクエストをＢｕｓ＃１３２（Ｂｕｓ＃４＋オフセット＃１２８）に対するＣｏｎｆｉｇｕｒａｔｉｏｎリクエストに変換するのは、ＣＰＵ１０２ＣがＢｕｓ＃０〜Ｂｕｓ＃６３用空間にロード命令、ないしは、ストア命令を発行したときに、アドレスにオフセット＋８００００００Ｈを加えるアドレス変換を行うことで実現できる。
【０１０６】
以上のように、ＭＭＩＯリクエストの宛先アドレスにオフセットを加える、ないしは、Ｃｏｎｆｉｇｕｒａｔｉｏｎリクエストの宛先Ｂｕｓ＃にオフセットを加えることで、Ｉ／Ｏインタフェース１１５Ａ〜Ｄを分散して利用することは、ＣＰＵ１０２Ａ〜Ｄ上でロード命令、ないしは、ストア命令を発行するときのアドレス変換で実現できることを示した。
【０１０７】
アドレス変換を実現する手段としては、ＣＰＵ１０２Ａ〜Ｄが有する種々の機構、ないしは、ハイパーバイザ等のシステムソフトウェアを利用することが出来る。一般的にＣＰＵでは、仮想アドレスから物理アドレスへのアドレス変換を行うためのＰＴ（Ｐａｇｅ  Ｔａｂｌｅ）を提供しているが、これは一般的にはオペレーティングシステムが使うものであり、ＰＴで上記のアドレス変換を実現するためには、オペレーティングシステムに手を加える必要が出てくる。
【０１０８】
その他の手段としては、ハイパーバイザでＳＰＴ（Ｓｈａｄｏｗ  Ｐａｇｅ  Ｔａｂｌｅ）を用意して、オペレーティングシステムに手を加えないで、ハイパーバイザのレイヤーで上記のアドレス変換を実現することがある。また、一部のＣＰＵでＰＴに加えて二段目のアドレス変換機構として用意されているＥＰＴ（Ｅｘｔｅｎｄｅｄ  Ｐａｇｅ Ｔａｂｌｅ）を利用して、上記のアドレス変換を実現しても良い。
【０１０９】
次に、Ｉ／Ｏデバイス発サーバ宛のリクエストを行うパケットに関して述べる。上記は、いずれもサーバ発Ｉ／Ｏデバイス宛のリクエストと、それに対するリプライに関して述べてきた。以下では、その逆であるＩ／Ｏデバイス発サーバ宛のリクエストと、それに対するリプライに関して述べる。
【０１１０】
Ｉ／Ｏデバイス１２０Ａ〜Ｄは、図１４に示すＳＭＰサーバ１００の主記憶空間全体を読書きすることができる。しかし、本実施例で示す宛先ポート検索部１１４Ａ〜Ｄを用いないと、Ｉ／Ｏデバイス１２０Ａ〜Ｄが、ブレード＃０メモリ（メモリ１０３Ａ）、ブレード＃１メモリ（メモリ１０３Ｂ）、ブレード＃２メモリ（メモリ１０３Ｃ）、及び、ブレード＃３メモリ（メモリ１０３Ｄ）の何れに対するアクセスでも、全てＩＯＨ１０５Ａ、及び、Ｉ／Ｏインタフェース１１５Ａ経由になってしまう。これは、Ｉ／Ｏインタフェース１１５Ａ、及び、内部インターコネクト１０９の混雑を招く。
【０１１１】
そこで、本実施例では、宛先ポートテーブル検索部１１４Ａ〜Ｄにおいて、Ｉ／Ｏデイバス１２０Ａ〜Ｄが発するリクエストのパケットの宛先アドレスから、サーバ側ポート番号を参照し、出力すべきＩ／Ｏインタフェース１１５Ａ〜Ｄを選択する。これにより、宛先ポートテーブル１５１が適切に設定されていれば、図１５に示すようにＩ／Ｏデバイス１２０Ａ〜Ｄが発するリクエストを、宛先のメモリ１０３Ａ〜Ｄまで最短の経路で伝送できることになるので、メモリアクセスのレイテンシ低減に寄与すると共に、Ｉ／Ｏインタフェース１１５Ａ〜Ｄ、及び、内部インターコネクト１９０の混雑緩和を実現できる。
【０１１２】
次に図８に、図１に示す本実施例に基づく計算機システムを利用して、所望の効果を得るために必要な初期化のシーケンスを示す。
【０１１３】
ステップＳ８０１で、図１に示す計算機システムの中で、管理サーバ１３０を起動させる。図１の計算機システムは全体の動作を管理サーバ１３０が管理する。
【０１１４】
ステップＳ８０２で、管理サーバ１３０は、管理ネットワーク１３１経由でＩ／Ｏスイッチ１１０に起動の指令を発行し、Ｉ／Ｏスイッチ１１０を起動させる。Ｉ／Ｏスイッチ１１０は起動すると、内部のＩ／Ｏコントローラ１１２によって、スイッチ交換部１１１の初期設定が行われる。Ｉ／Ｏコントローラ１１２は、オフセット減算部１１３Ａは、オフセット値を減算しないように初期化（ＭＭＩＯアドレスオフセットテーブル４１０、及び、ＩＤオフセットテーブル４２０の全てのエントリを０にする）される。また、同様にＩ／Ｏコントローラ１１２は、宛先ポートテーブル１５１の全てのエントリを無効にするため、全ての有効ビットを無効（０）にする。
【０１１５】
ステップＳ８０３で、管理サーバ１３０は、管理ネットワーク１３１経由でＩ／Ｏスイッチ１１０に構成情報収集の指令を発行し、Ｉ／Ｏスイッチ１１０から構成情報を受信する。構成情報収集の指令を受けたＩ／Ｏスイッチ１１０は、Ｉ／Ｏコントローラ１１２が、Ｉ／Ｏインタフェース１８０経由で、Ｉ／Ｏスイッチ１１０に接続されているＩ／Ｏデバイス１２０Ａ〜Ｄにアクセスし、Ｉ／Ｏデバイスの存在を検出する。そして、Ｉ／Ｏデバイス１２０Ａ〜Ｄが接続されていることを、管理サーバ１３０に構成情報として送信する。
【０１１６】
ステップＳ８０４で、管理サーバ１３０は、Ｉ／Ｏスイッチ１１０から得た構成情報を計算機システムの管理者に提示し、Ｉ／ＯデバイスとＳＭＰサーバ１００の接続に関して指示を受ける。以降の説明では、Ｉ／Ｏデバイス１２０Ａ〜Ｄを全てＳＭＰサーバ１００に接続するという設定が管理者によってなされたものとして説明する。
【０１１７】
ステップＳ８０５では、オフセット情報１５０（ＭＭＩＯアドレスオフセットテーブル４１０、及び、ＩＤオフセットテーブル４２０）に設定すべきオフセット値を算出する。本実施例で示す計算機システムでは、オフセット値は図６及び図７に示すようになる。
【０１１８】
すなわち、ＭＭＩＯアドレスオフセットテーブル４１０のサーバ側ポート番号０エントリ（Ｉ／Ｏインタフェース１１５Ａに対応し、オフセット減算部１１３Ａが使用）は０、サーバ側ポート番号１エントリ（Ｉ／Ｏインタフェース１１５Ｂに対応し、オフセット減算部１１３Ｂが使用）はα、サーバ側ポート番号２エントリ（Ｉ／Ｏインタフェース１１５Ｂに対応し、オフセット減算部１１３Ｂが使用）はβ、サーバ側ポート番号３エントリ（Ｉ／Ｏインタフェース１１５Ｃに対応し、オフセット減算部１１３Ｃが使用）はγ、となる。
【０１１９】
また、ＩＤオフセットテーブル４２０のサーバ側ポート番号０エントリ（Ｉ／Ｏインタフェース１１５Ａに対応し、オフセット減算部１１３Ａが使用）は０、サーバ側ポート番号１エントリ（Ｉ／Ｏインタフェース１１５Ｂに対応し、オフセット減算部１１３Ｂが使用）は６４、サーバ側ポート番号２エントリ（Ｉ／Ｏインタフェース１１５Ｂに対応し、オフセット減算部１１３Ｂが使用）は１２８、サーバ側ポート番号３エントリ（Ｉ／Ｏインタフェース１１５Ｃに対応し、オフセット減算部１１３Ｃが使用）は２５６、となる。なお、これらのオフセット値は、後で説明するように、ブレード＃０〜＃３各々のＥＰＴに、対応して設定される必要がある。
【０１２０】
ステップＳ８０６では、宛先ポートテーブル１５１に設定すべきベースアドレス、サイズ、及び、宛先ポート番号を生成する。本実施例で示す計算機システムでは、ベースアドレス、及び、サイズは図１４に示すようになる。
【０１２１】
すなわち、宛先ポートテーブル１５１のエントリ０番はベースアドレスをＤ０、サイズをＲ０、宛先ポート番号を０（Ｉ／Ｏインタフェース１１５Ａを示す番号）とし、有効ビットを有効（１）とする。エントリ１番はベースアドレスをＤ１、サイズをＲ１、宛先ポート番号を１（Ｉ／Ｏインタフェース１１５Ｂを示す番号）とし、有効ビットを有効（１）とする。エントリ２番はベースアドレスをＤ２、サイズをＲ２、宛先ポート番号を２（Ｉ／Ｏインタフェース１１５Ｃを示す番号）とし、有効ビットを有効（１）とする。エントリ３番はベースアドレスをＤ３、サイズをＲ３、宛先ポート番号を３（Ｉ／Ｏインタフェース１１５Ｄを示す番号）とし、有効ビットを有効（１）とする。エントリ４〜５番は使わないので、ステップＳ８０２で無効にされたままにしておく。
【０１２２】
ステップＳ８０７では、ステップＳ８０５で算出したオフセット値を、管理ネットワーク１３１を経由して、Ｉ／Ｏコントローラ１１２上のオフセット情報１５０に書込む。また、ステップＳ８０６で生成した宛先ポートテーブルを、管理ネットワーク１３１を経由して、Ｉ／Ｏコントローラ１１２上の宛先ポートテーブル１５１に書込む。
【０１２３】
ステップＳ８０８では、管理サーバ１３０は管理ネットワーク１３１を経由してＳＭＰサーバ１００を起動する指示を発行する。本実施例では、ＳＭＰサーバ１００はブレード１０１Ａ〜Ｄで構成されているため、ブレード１０１Ａ〜Ｄを起動させることになる。
【０１２４】
ブレード１０１Ａ〜Ｄは、その起動の過程において、各種システムソフトウェア（ＢＩＯＳ、ＥＦＩ、ハイパーバイザ、オペレーティングシステム、等）が、ＩＯＨ１０５Ａ〜Ｄや、図９に示すバスツリー状のブリッジを設定することで、図９に示すようなバスツリーを形成する。
【０１２５】
ステップＳ８０９では、管理サーバ１３０から管理ネットワーク１３１を経由して、ＳＭＰサーバ１００上で動作しているハイパーバイザにアドレス変換で用いるオフセット値を通知する。本実施例の場合には、アドレス変換手段としてＥＰＴを使用すると考えると、以下に示すようなオフセット値をハイパーバイザに通知し、ハイパーバイザは各ブレード１０１Ａ〜ＤのＥＰＴに対応する値を設定し、ＥＰＴを有効化する。なお、上述の通り、各ブレード１０１Ａ〜ＤのＥＰＴは通常通りの使用がなされる。
【０１２６】
ＣＰＵ１０２Ａ上で動作するハイパーバイザのスレッドが使うＥＰＴは、図６のブレード＃０ＭＭＩＯ空間（アドレスｘ〜（ｘ＋ｓ））に対するアクセスが発生したとき、オフセット値＋０を加算する（あるいは、オフセット値を加算しない）ようにＥＰＴを設定する。また、図７のＢｕｓ＃０〜６３用空間に対するアクセスが発生した時、オフセット値＋０を加算する（あるいは、オフセット値を加算しない）ようにＥＰＴを設定する。
【０１２７】
ＣＰＵ１０２Ｂ上で動作するハイパーバイザのスレッドが使うＥＰＴは、図６のブレード＃０ＭＭＩＯ空間（アドレスｘ〜（ｘ＋ｓ））に対するアクセスが発生したとき、オフセット値＋αを加算するようにＥＰＴを設定する。また、図７のＢｕｓ＃０〜６３用空間に対するアクセスが発生した時、オフセット値＋４００００００Ｈを加算するようにＥＰＴを設定する。
【０１２８】
ＣＰＵ１０２Ｃ上で動作するハイパーバイザのスレッドが使うＥＰＴは、図６のブレード＃０ＭＭＩＯ空間（アドレスｘ〜（ｘ＋ｓ））に対するアクセスが発生したとき、オフセット値＋βを加算するようにＥＰＴを設定する。また、図７のＢｕｓ＃０〜６３用空間に対するアクセスが発生した時、オフセット値＋８００００００Ｈを加算するようにＥＰＴを設定する。
【０１２９】
ＣＰＵ１０２Ｄ上で動作するハイパーバイザのスレッドが使うＥＰＴは、図６のブレード＃０ＭＭＩＯ空間（アドレスｘ〜（ｘ＋ｓ））に対するアクセスが発生したとき、オフセット値＋γを加算するようにＥＰＴを設定する。また、図７のＢｕｓ＃０〜６３用空間に対するアクセスが発生した時、オフセット値＋Ｃ００００００Ｈを加算するようにＥＰＴを設定する。
【０１３０】
本実施例によれば、ＳＭＰサーバと複数のＩ／Ｏデバイスとの間のデータ転送を、ＳＭＰサーバが有する複数のＩ／Ｏインタフェースに分散させることで、Ｉ／Ｏインタフェースとサーバ内部インターコネクトの混雑を緩和することができる。
【０１３１】
以上、本発明を実施例に基づき具体的に説明したが、本発明は上述した実施例の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。上記した実施例は本発明のより良い理解のために詳細に説明したのであり、必ずしも説明の全ての構成を備えるものに限定されものではない。
【０１３２】
更に、上述した各構成、機能、処理部等は、それらの一部又は全部を、集積回路で設計する等によりハードウェアで実現しても良いし、それらの一部又は全部を実現するプログラムを作成することによりソフトウェアで実現しても良いことは言うまでもない。
【産業上の利用可能性】
【０１３３】
本発明は、複数のＩ／Ｏインタフェースを有するＳＭＰサーバ等の計算機において、Ｉ／Ｏインタフェース、及び、計算機内部で用いられている内部インターコネクトの混雑を緩和し、計算機全体の性能を向上させる効果を有する。
【符号の説明】
【０１３４】
１００  ＳＭＰサーバ
１０１Ａ〜Ｄ  ブレード
１０２Ａ〜Ｄ  ＣＰＵ
１０３Ａ〜Ｄ  メモリ
１０４Ａ〜Ｄ、１０９  内部インターコネクト
１０５Ａ〜Ｄ  ＩＯＨ（Ｉ／Ｏハブ）
１１０  Ｉ／Ｏスイッチ
１１１  スイッチ交換部
１１２  Ｉ／Ｏコントローラ
１１３Ａ〜Ｄ  オフセット減算部
１１４Ａ〜Ｄ  宛先ポート検索部
１２０Ａ〜Ｄ  Ｉ／Ｏデバイス
１３０  管理サーバ
１３１  管理ネットワーク
１１５Ａ〜Ｄ、１２１Ａ〜Ｄ  Ｉ／Ｏインタフェース
１５０  オフセット情報
１５１  宛先ポートテーブル。
【図１】
2012113604.tif 000003
【図２】
2012113604.tif 000004
【図３】
2012113604.tif 000005
【図４】
2012113604.tif 000006
【図５】
2012113604.tif 000007
【図６】
2012113604.tif 000008
【図７】
2012113604.tif 000009
【図８】
2012113604.tif 000010
【図９】
2012113604.tif 000011
【図１０】
2012113604.tif 000012
【図１１】
2012113604.tif 000013
【図１２】
2012113604.tif 000014
【図１３】
2012113604.tif 000015
【図１４】
2012113604.tif 000016
【図１５】
2012113604.tif 000017