(57)【要約】【課題】  仮想レーンのＩ／Ｏパフォーマンスを最大にするためにバッファ・スペースを動的に再割当てするためのシステムおよび方法を提供する。【解決手段】  本発明のバッファ・スペースを動的に再割当てするシステムおよび方法は、例えば、Ｉ／Ｏ構成に対して変化が生じたとき、未使用の仮想レーンからバッファ・スペースを取り出し、その未使用のバッファ・スペースを、使用された仮想レーンに再割当てする。例えば、２つの仮想レーンだけが使用中である場合に４つの仮想レーンをサポートする実施例では、本システムおよび方法は、使用中の２つの仮想レーンによる使用のために、他の２つの未使用の仮想レーンからのバッファ・スペースを再割当てする。【選択図】  図６
2008287718.tif 000002
【特許請求の範囲】
【請求項１】
１つのハブおよび複数のブリッジを有するコンピュータ・システムにおいて仮想レーン資源を動的に割当てるための方法であって、
前記複数のブリッジの各々における、割当てられた仮想レーン資源を含む割当てられた仮想レーン、および割当てられてない仮想レーン資源を含む割当てられてない仮想レーンを識別するステップと、
前記割当てられてない仮想レーン資源を前記割当てられてない仮想レーンから前記割り当て[I1]られた仮想レーンに動的に再割当てするステップと、
を含む、方法。
【請求項２】
前記複数のブリッジはループ構成およびストリング構成の少なくとも一方で構成され、
前記動的に再割当てするステップは、前記複数のブリッジが前記ループ構成または前記ストリング構成で構成されるかどうかを考慮に入れる、
請求項１に記載の方法。
【請求項３】
前記動的に再割当てするステップは、ブリッジ構成が前記ループ構成から前記ストリング構成に変化するときに生じる、請求項２に記載の方法。
【請求項４】
前記動的に再割当てするステップは、ブリッジ構成が前記ループ構成から複数ストリング構成に変化するときに生じる、請求項２に記載の方法。
【請求項５】
前記ブリッジは入出力ドロワ・ユニット内に含まれ、
前記動的に再割当てするステップは、入出力ドロワ・ユニットが追加されるか或いは前記コンピュータ・システムから除去されるときに生じる、
請求項２に記載の方法。
【請求項６】
前記ハブおよび前記複数のブリッジはリンクを介して接続され、
前記リンクはInfiniBandプロトコルおよび周辺コンポーネント相互接続エクスプレス（PCI-Express）・プロトコルの少なくとも一方に準拠する、
請求項１に記載の方法。
【請求項７】
プロセッサと、
前記プロセッサに接続されたハブと、
前記プロセッサに接続された複数のブリッジと、
[I2]を含み、
前記コンピュータ・プログラムは、
前記プロセッサによる実行が可能な命令を含み、
前記複数のブリッジの各々における、割当てられた仮想レーン資源を含む割当てられた仮想レーンおよび割当てられてない仮想レーン資源を含む割当てられてない仮想レーンを識別するステップと、前記割当てられてない仮想レーン資源を前記割当てられてない仮想レーンから前記割当てられた仮想レーンに動的に再割当てするステップとを行うように構成される、
システム。
【請求項８】
前記複数のブリッジはループ構成およびストリング構成の少なくとも一方で構成され、
前記動的に再割当てするステップは、前記複数のブリッジが前記ループ構成または前記ストリング構成で構成されるかどうかを考慮に入れる、
請求項７に記載のシステム。
【請求項９】
前記動的に再割当てするステップは、ブリッジ構成が前記ループ構成から前記ストリング構成に変化するときに生じる、請求項８に記載のシステム。
【請求項１０】
前記動的に再割当てするステップは、ブリッジ構成が前記ループ構成から複数ストリング構成に変化するときに生じる、請求項８に記載のシステム。
【請求項１１】
前記ブリッジは入出力ドロワ・ユニット内に含まれ、
前記動的に再割当てするステップは、入出力ドロワ・ユニットが追加されるか或いは前記コンピュータ・システムから除去されるときに生じる、
請求項８に記載のシステム。
【請求項１２】
前記ハブおよび前記複数のブリッジはリンクを介して接続され、
前記リンクはInfiniBandプロトコルおよび周辺コンポーネント相互接続エクスプレス・プロトコルの少なくとも一方に準拠する、
請求項７に記載のシステム。
【請求項１３】
プロセッサと、
前記プロセッサに接続されたハブと、
前記プロセッサに接続された複数のブリッジと、
仮想レーン資源を再割当てする手段と、
を含み、
前記手段は、前記複数のブリッジの各々における、割当てられた仮想レーン資源を含む割当てられた仮想レーンおよび割当てられてない仮想レーン資源を含む割当てられてない仮想レーンを識別する操作を行うためのモジュール、および前記割当てられてない仮想レーン資源を前記割当てられてない仮想レーンから前記割当てられた仮想レーンに動的に再割当てする操作を行うためのモジュールを含む、システム。
【請求項１４】
前記複数のブリッジはループ構成およびストリング構成の少なくとも一方で構成され、
前記動的に再割当てする操作は、前記複数のブリッジが前記ループ構成または前記ストリング構成で構成されるかどうかを考慮に入れる、
請求項１３に記載のシステム。
【請求項１５】
前記動的に再割当てする操作は、ブリッジ構成が前記ループ構成から前記ストリング構成に変化するときに生じる、請求項１４に記載のシステム。
【請求項１６】
前記動的に再割当てする操作は、ブリッジ構成が前記ループ構成から複数ストリング構成に変化するときに生じる、請求項１４に記載のシステム。
【請求項１７】
前記ブリッジは入出力ドロワ・ユニット内に含まれ、
前記動的に再割当てする操作は、入出力ドロワ・ユニットが追加されるか或いは前記コンピュータ・システムから除去されるときに生じる、
請求項８に記載のシステム。
【請求項１８】
前記ハブおよび前記複数のブリッジはリンクを介して接続され、
前記リンクはInfiniBandプロトコルおよび周辺コンポーネント相互接続エクスプレス・プロトコルの少なくとも一方に準拠する、
請求項１３に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的には、コンピュータおよび同様の技術分野に関し、特に、コンピュータの入出力（Ｉ／Ｏ）パフォーマンスに関するものである。更に詳しく云えば、本発明は、仮想レーンのＩ／Ｏパフォーマンスを最大にするためにバッファ・アロケーションを動的に再割当てすることに関するものである。
【背景技術】
【０００２】
現代社会ではコンピュータに対する信頼性が絶えず増すものと仮定して、コンピュータ技術は、パフォーマンスの向上という要求に対処するために多くの点で進歩しなければならなかった。パフォーマンスの向上という要求を満たすためには、多くの場合、ますます高速の且つ複雑なハードウェア・コンポーネントを提供することが望ましい。更に多くの応用例では、プロセッサのような多くのハードウェア・コンポーネント、および、記憶装置、ネットワーク接続等のような周辺コンポーネントが、システム全体のパフォーマンスを向上させるために並行して操作される。
【０００３】
開発努力が向けられた１つの特定のエリアは、コンピュータによって利用されるハードウェア・コンポーネント（例えば、記憶装置、ネットワーク接続、ワークステーション）と、そのようなコンポーネントをアダプタ、コントローラ、および、コンピュータの中央処理装置（即ち、プロセッサ）に接続するために利用される他の相互接続ハードウェア装置と、を管理するエリアである。多くの場合、入出力（Ｉ／Ｏ）資源とも呼ばれる周辺コンポーネントは、一般に、「ファブリック」を形成する１つまたは複数の中間的な相互接続ハードウェア装置コンポーネントを介してコンピュータに接続され、そのファブリックを介して中央処理装置とＩ／Ｏ資源との間のコミュニケーションを行わせる。
【０００４】
比較的高いパフォーマンスのコンピュータ設計において、Ｉ／Ｏパフォーマンスは、設計のコミュニケーション・ニーズに対処するために相互接続ハードウェア装置の複雑な構成を必要とすることがある。或る例では、コミュニケーション・ニーズは、コンピュータの中央処理装置が収容される筐体から独立しており且つその筐体に連結されている更なる筐体を必要とするほど十分に大きいことがある。
【０００５】
多くの場合、比較的複雑な設計では、Ｉ／Ｏアダプタのような周辺コンポーネントは、コンピュータの主筐体および補助筐体の一方または両方に配置されているスロットを使用してＩ／Ｏファブリックに連結されることがある。他のコンポーネントがＩ／Ｏファブリックに別の方法で、例えば、 ケーブルおよび他のタイプのコネクタを介して装着または連結されてもよい。しかし、これらの他のタイプの接続もスロットと呼ばれる。従って、使用される接続のタイプに関係なく、Ｉ／Ｏスロットは、Ｉ／Ｏ資源がＩ／Ｏファブリックを介してコンピュータと通信するための接続ポイントまたはＩ／Ｏエンドポイントを表わす。
【０００６】
比較的高いパフォーマンスのコンピュータ設計では、システムにおいて利用可能なＩ／Ｏスロットの数は数百個に拡大することが可能である。多数のＩ／Ｏスロットを扱うとき、Ｉ／Ｏドロワを使用してＩ／ＯをＣＰＵ複合体から分離することも可能である。Ｉ／ＯドロワをＣＰＵ複合体に接続するために、Ｉ／Ｏ機能が２つのコンポーネント、即ち、ハブおよびブリッジに分割される。ハブは、プロセッサ複合体に直接接続されるＩ／Ｏ機能の部分を指す（また、プロセッサ・ノードとも呼ばれる）。ブリッジは、ハブに接続するＩ／Ｏドロワにおけるコンポーネントを指す。
【０００７】
Ｉ／Ｏドロワの設計次第で、１つのＩ／Ｏドロワ当たり１つまたは複数のＩ／Ｏブリッジが存在し得る。システムが拡大すると、Ｉ／Ｏハブの数もＩ／Ｏブリッジの数と共に増加する。多数のＩ／Ｏブリッジを単一のハブに接続するとき、それらのブリッジは、一続きにされ、ループ構成またはストリング構成でハブに接続され得る。InfiniBandまたは周辺コンポーネント相互接続エクスプレス（PCI-Express）のような業界基準バスのようなバスを介してハブとブリッジとの間で送られる。InfiniBandまたはPCI-Expressプロトコルに準拠するバスは、様々なコンポーネント間でデータを伝送するために仮想レーンと呼ばれる概念を使用する。各仮想レーンは、データを両方向に伝送するためにそれに割当てられた一定量のバッファ・スペースを有する。仮想レーンに関する１つの問題点は、コストとスペースの制限のために、１つの仮想レーン当たりのバッファ・スペースの量が制限されるということである。この制限は、システムおよび個々のＩ／Ｏコンポーネントの全体的なＩ／Ｏパフォーマンスに影響を与えることがある。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明の目的は、仮想レーンのＩ／Ｏパフォーマンスを最大にするために、初期設定時およびアプリケーションの実行時にバッファ・スペースを再割当てするための方法を提供することにある。
【課題を解決するための手段】
【０００９】
本発明に従って、仮想レーンのＩ／Ｏパフォーマンスを最大にするためにバッファ・スペースを再割当てする方法を説明する。詳しく云えば、バッファ・スペースを再割当てする方法は、未使用の仮想レーンからバッファ・スペースを取り出し、その未使用のバッファ・スペースを、使用された仮想レーンに再割当てする。例えば、２つの仮想レーンだけが使用中である場合に４つの仮想レーンをサポートする実施例では、この方法は、使用中の２つの仮想レーンによる使用のために、他の２つの未使用の仮想レーンからのバッファ・スペースを再割当てする。
【００１０】
仮想レーンのバッファ・スペースを再割当てするとき、データが移動している方向に基づいて仮想レーンのバッファ・スペースを割当てることが可能である。仮想レーンのバッファ・スペースの場合、そのバッファ・スペースは、データを送るために使用されるスペースおよびデータを受け取るために使用されるスペースに分けられる。データを送るためには、隣接したコンポーネントからのデータを処理するに十分なスペースしか必要とせず、データを受け取るためには、要求されるデータおよび他のコンポーネントから送られたデータを捕捉するためには、できるだけ多くのスペースが望ましい。
【００１１】
従って、本発明の１つの態様では、バッファ・スペースが未使用の仮想レーンから除去され、次に、データ・フローの方向に基づいて再割当てされる。データを送るために使用される仮想レーンに関しては、バッファ・スペースは最小のバッファ・スペース・サイズにセットされ、データを受け取るために使用される仮想レーンに関しては、バッファ・スペースは最大のバッファ・スペース・サイズにセットされる。
【００１２】
本発明の別の態様では、バッファ・スペースを再割当てするとき、ブリッジの構成も考慮される。例えば、ブリッジがループ構成のブリッジまたはストリング構成のブリッジとして構成されるとき、データが流れる方向は、ブリッジがハブに関連する位置的状態に基づいて変わるであろう。更に詳しく云えば、ループ構成のブリッジの場合、ブリッジのうちの或るものはハブに向かう１つの方向にデータを送り、別のブリッジは別の方向にデータを送る。ストリング構成に関して、データはハブに関連して１つの方角に流れるだけである。
【００１３】
バッファ・スペースを再割当てするためのシステムは、生じ得る種々の構成を決定し、初期設定時にシステムを構成する。更に、バッファ・スペースを再割当てするためのシステムは、エラー状態、或いはドロワの追加または除去、或いはループ構成からストリングへの分解、或いはストリング構成からループへの接続変化によるというようなデータ方向が変化する実行時の状況に対処する。それらのケースでは、バッファ・スペースを再割当てするためのシステムは、そのシステムのパフォーマンスを維持するために実行時にバッファをリロケートする。更に、別のケースでは、データがリロケーション前に一時的に停止させられる場合をシステムが考慮に入れることが望ましい。
【００１４】
或る実施例では、バッファ・スペースを再割当てするためのシステムがそのシステムのファームウェアで具体化される。システムの初期設定時に、ファームウェアは、先ず、どの仮想レーンが使用されないことになっているかを決定し、残りの仮想レーンにバッファ・スペースを再割当てする。次に、ブリッジをハブに接続する方法に基づいて、ファームウェアは、データを受ける仮想レーン・ポートが、「バッファ・スペース」対「そのデータを送る仮想レーン」の大部分を有するようＩ／Ｏパフォーマンスを最大にするためにバッファ・スペースを割当てる。その後、ファームウェアは、データ方向の変化に関してシステムを監視する。そのような変化が検知される場合、ファームウェアは、データ・フローの最初の一時停止後に別の方向におけるパフォーマンスを最大にするために、仮想レーン・バッファを再割当てする。
【００１５】
本発明の上記および他の目的、特徴、および利点が下記の詳細に記述された説明において明らかになるであろう。
【発明を実施するための最良の形態】
【００１６】
図１を参照すると、本発明を具現化し得る例示的なコンピュータ・システムのブロック図が示される。更に詳しく云えば、コンピュータ・システム１００は少なくとも１つのプロセッサ・ノード１１０を含み、そのプロセッサ・ノード１１０はInfiniBandリンクのようなリンクを介して入出力（Ｉ／Ｏ）ドロワ・ユニット１１２に接続される。プロセッサ・ノード１１０は複数のプロセッサ１２０ａ、１２０ｂを含み、それらのプロセッサはメモリ１２２およびハブ１２４に接続される。入出力ドロワ・ユニット１１２は１つまたは複数のブリッジ１４０を含む。ハブ１２４およびブリッジ１４０の結合はＩ／Ｏコントローラ（ＩＯＣ）を提供する。ドロワ・ユニット１１２は物理パッケージである。一般的、しかし、必然的にではなく、Ｉ／Ｏドロワ・ユニットはラック内に存在する。
【００１７】
ハブ１２４は複数のアーキテクチャ・ポート１５０ａ、１５０ｂを実装する。ブリッジ１４０の各々は複数のアーキテクチャ・ポート１５２ａ、１５２ｂを実装する。各ポートは、装置をリンクに接続する双方向インターフェースを提供する。リンクは、２つの装置における２つのポート相互間の双方向高速接続である。
【００１８】
メモリ１２２は揮発性メモリおよび不揮発性メモリの両方を含む。ファームウェア１６０がメモリ１２２内に格納され、プロセッサ１２０の少なくとも１つによって実行される。ファームウェア１６０は、仮想レーン資源１６２を再割当てするためのシステムを含む。
【００１９】
或る実施例では、システム１００は複数のＩ／Ｏドロワ・ユニット１１２を含み、各Ｉ／Ｏドロワ・ユニット１１２は多数のスロット（例えば、１つのドロワ当たり６乃至２０個のスロット）および１つのＩ／Ｏドロワ・ユニット１１２当たり１つまたは複数の（例えば、１乃至４個の）ブリッジを含む。Ｉ／Ｏドロワ・ユニット１１２は、ストリング構成またはループ構成のいずれかで相互に接続されてもよい。各Ｉ／Ｏスロットは、ＰＣＩＸまたはＰＣＩエクスプレス・プロトコルのようなＩ／Ｏプロトコルに準拠し得る。
【００２０】
情報は仮想レーンを介してハブとブリッジの間で伝送される。仮想レーンは、クラス・タイプ（例えば、応答／要求）と、順序付け問題およびコヒーレンシ問題並びにサービスのアドレス品質とに基づいてデータを分離することを可能にする。
【００２１】
ハブとブリッジとの間でデータを転送するための２つの主要なコマンド・タイプがある。その２つのコマンド・タイプは要求および応答である。要求は、DMA Read/Write、Memory-MappedRead/Write、IO Read/Write、Configuration Read/Write、メッセージおよび割り込みのようなものを装置が求めるときに使用される。ＤＭＡ読取り要求から返送されたデータのようなデータが要求から返送されるとき、応答が使用される。要求および応答は順不同にされ、独立したストリームとして扱われる。それを行うためには、それらは異なる仮想レーンを割当てられる。
【００２２】
図２を参照すると、ポートおよびリンクの相互接続のブロック図が示される。更に詳しく云えば、各ポート１５０、１５２は、複数の仮想レーン（ＶＬ０〜１５）、並びに、送信装置２２０および受信装置２２２を含む。各仮想レーンは送信バッファ２３０および受信バッファ２３２を含む。各バッファ対は、仮想レーン・バッファ資源を構成する。
【００２３】
１つの実施例では、ハブ１２４およびブリッジ１４０の各ポート１５０、１５２が、例えば４対の送信／受信バッファ対を実装する。各ポートは、データ・パケットを送信および受信するために使用されるデータ・バッファとして機能するデータ仮想レーン（ＶＬ０〜ＶＬ３）と、サブネット管理パケット（ＳＭＰ）の送信および受信に専用のＳＭＰバッファとして機能する仮想レーン（ＶＬ１５）と、を含む複数の仮想レーンを実装する。
【００２４】
すべての仮想レーンがデータを搬送するために同じ物理ワイヤ（即ち、リンク）を使用するとしても、各仮想レーンは独立したデータ・ストリームとして扱われる。各仮想レーンは独立したデータ・ストリームであるので、各仮想レーンは、仮想レーン毎に、独立したバッファ・スペース、アービトレーション、および搬送プロトコルに関連した他の特徴を含む。各仮想レーンは、データを両方向に送るための一定量の割当てられたバッファ・スペースを有する。バッファ・スペースは、データが装置間で交差するとき、一時的にそのデータを格納するためにも使用される。ハブおよびブリッジは、利用可能なバッファ・スペース量を相互間で伝送するためにフロー制御を使用する。送信する装置は、隣接の装置が、送られるデータを格納するに十分なバッファ・スペースを持たない場合、データを転送することができない。
【００２５】
図３は、１つのハブ１２４および複数のブリッジ１４０ａのループ構成における相互接続の一例を示すブロック図である。更に詳しく云えば、ループ構成では、第１ハブ・ポート（ポート１）が、第１ブリッジの第１ブリッジ・ポート（ブリッジ０、ポート１）に接続される。第１ブリッジの第２ブリッジ・ポート（ブリッジ０、ポート２）が、第２ブリッジの第１ブリッジ・ポート（ブリッジ１、ポート１）に接続される。第２ブリッジの第２ブリッジ・ポート（ブリッジ１、ポート２）が、第３ブリッジの第１ブリッジ・ポート（ブリッジ２、ポート１）に接続される。第３ブリッジの第２ブリッジ・ポート（ブリッジ２、ポート２）が、第４ブリッジの第１ブリッジ・ポート（ブリッジ３、ポート１）に接続される。第４ブリッジの第２ブリッジ・ポート（ブリッジ３、ポート２）が、ハブの第２ポート（ポート２）に接続される。
【００２６】
図４は、１つのハブ１２４および複数のブリッジ１４０ａのストリング構成における相互接続の一例を示すブロック図である。更に詳しく云えば、ストリングの構成では、第１ハブ・ポート（ポート１）が、第１ブリッジの第１ブリッジ・ポート（ブリッジ０、ポート１）に接続される。第１ブリッジの第２ブリッジ・ポート（ブリッジ０、ポート２）が、第２ブリッジの第１ブリッジ・ポート（ブリッジ１、ポート１）に接続される。第２ブリッジの第２ブリッジ・ポート（ブリッジ１、ポート２）が、第３ブリッジの第１ブリッジ・ポート（ブリッジ２、ポート１）に接続される。第３ブリッジの第２ブリッジ・ポート（ブリッジ２、ポート２）が、第４ブリッジの第１ブリッジ・ポート（ブリッジ３、ポート１）に接続される。第４ブリッジの第２ブリッジ・ポート（ブリッジ３、ポート２）は接続されない。ハブの第２ポートも接続されない。
【００２７】
図５は、マルチ・ストリング構成における１つのハブ１２４および複数のブリッジ１４０ａの相互接続の一例を示すブロック図である。更に詳しく云えば、マルチ・ストリング構成では、ハブ１２４の第１ハブ・ポート（ポート１）が第１ブリッジの第１ブリッジ・ポート（ブリッジ０、ポート１）に接続される。更に、第２ブリッジの第２ブリッジ・ポート（ブリッジ１、ポート２）が第３ブリッジの第１ブリッジ・ポート（ブリッジ２、ポート１）に接続される。第３ブリッジの第２ブリッジ・ポート（ブリッジ２、ポート２）が第４ブリッジの第１ブリッジ・ポート（ブリッジ３、ポート１）に接続される。第４ブリッジの第２ブリッジ・ポート（ブリッジ３、ポート２）がハブの第２ポート（ポート２）に接続される。第１ブリッジおよび第２ブリッジは接続されない。
【００２８】
図６を参照すると、仮想レーン資源を再割当てするためのシステムのオペレーション・プロセスのフローチャートが示される。詳しく云えば、仮想レーン資源を再割当てするためのプロセス６００は、ステップ６１０においてシステム１００内の利用可能なハブおよびブリッジを識別することによってオペレーションを開始する。次に、ステップ６１２において、システムは、そのシステム内のどの仮想レーンが割当てられていないか（即ち、システムによって使用されていないか）を決定する。例えば、１つの実施態様では、Ｉ／Ｏドロワ・ユニットは４つの仮想レーンを有するが、仮想レーン０および仮想レーン１だけが割当てられている。幾つかの仮想レーンが使用されていないことをプロセス６００が決定する場合、プロセス６００は、ステップ６１４において未使用の仮想レーンからその使用された仮想レーンに幾つかのまたはすべてのバッファ・スペースを再割当てする。例えば、仮想レーン２および３が使用されてないという例では、プロセス６００は、仮想レーン２および３から仮想レーン０および１にバッファ・スペースを再割当てする。
【００２９】
次に、プロセス６００は、ステップ６２０においてシステム１００内のデータ・フローを決定する。そのデータ・フローは、初期設定時にファームウェアによって割当てられていてもよいし、或いはステップ６２０においてファームウェアにより割当てられてもよい。資源の割当てに関する或る実施態様は、データ・フローの方向に依存する。ステップ６２２において、プロセスは、データ・フローに基づいて仮想レーン資源を構成する。
【００３０】
ストリングに関しては、すべてのデータがハブと所与のブリッジとの間で１つの方向に流れる。ストリング構成では、ファームウェアがデータ・フローを１つの方向に割当てる。ループ構成では、いずれの所定のブリッジも、データをハブに送るための２つの可能なデータ経路を有する。１つの実施例では、ループ構成に関して、ブリッジの半分がハブ・ポート１にデータを送信し、ブリッジの更なる半分がハブ・ポート２にデータを送信するよう、ファームウェアがデータ・フローを分ける。ファームウェアは、それが特定のブリッジのスロットに接続され得る装置を考慮に入れ、「装置の潜在的な帯域幅」対「ブリッジの数」に基づいてデータ・フローを割当てた場合、別の方法でブリッジを割当てることも可能である。プロセス６００は、ハブおよびデータ・フロー機能と関連したブリッジにおけるレジスタを読取ることによって、データ・フローの方向を決定する。
【００３１】
次に、ステップ６２４において、プロセスは仮想レーン資源インクリメントを識別し、各仮想レーンに対して割当てるべきバッファ・スペースの量を決定する。
【００３２】
例えば、１つの実施例では、２Ｋバイトの利用可能な仮想レーン・バッファ資源および５１２バイトの仮想レーン細分性（granularity）を有するシステムでは、複数の可能な仮想レーン・バッファの割当てが存在する。更に詳しく云えば、その仮想レーン・バッファの割当ては次のものを含む。
ＶＬ０＝５１２、ＶＬ１＝１５３６、 
ＶＬ０＝１５３６、ＶＬ１＝５１２ 
ＶＬ０＝１０２４、ＶＬ１＝１０２４
【００３３】
別の可能な割当てでは、仮想レーン・バッファ・サイズおよび仮想レーン・バッファ細分性を変更したものも利用可能であることは明らかであろう。
【００３４】
ストリング構成では、ハブのパスにおける１つのポートがハブに直接接続されるか、またはそのハブに接続されたブリッジに接続される。ループ構成では、ブリッジのポートの１つがハブのポート１のパス内にあるか、または、ブリッジの別のポートがハブのポート２のパス内にある。ループ構成では、すべてのブリッジがハブへの２つのパスを持っていても、データは一方のパス上にしか流れない。
【００３５】
更に、Ｉ／Ｏドロワ・ユニット１１２は１つのハブ１２４当たり一連のブリッジ１４０を含むことができるので、ブリッジ１４０は、それ自身のデータが無くてもハブ１２４と通信してパススルー・データを隣接ブリッジに送ることができるし、そのブリッジから受けることもできる。
【００３６】
次に、ステップ６２８において、プロセスは、ブリッジ１４０のデータ・フロー方向に基づいてすべてのブリッジに対する仮想レーン進入ポート・バッファの設定を行う。更に詳しく云えば、ハブ１２４にデータを送るブリッジ・ポートは進入ポートと呼ばれ、データを隣接ブリッジに、しかしハブ１２４から離れる方向に送るブリッジ・ポートは退出ポートと呼ばれる。
【００３７】
進入ポートに関しては、要求がハブ１２４の方向に送られる。これらの要求は、ブリッジ内で内部的に発生されたか、または、退出ポートからパススルーとして渡された。これらの要求は短期のものであるので、バッファ要件はハブ１２４の方向に送られる要求が最小であることである。進入ポートに関しては、応答は、前の要求からのデータ、即ち、内部要求または退出ポートの下流にあるブリッジからの要求のいずれかからのデータを表わす。パフォーマンスを最大にし且つ進入ポートに更なる応答データを送る前に隣接ブリッジが待たなけばならない時間を最小にするためには、応答仮想レーン資源は最大にされなければならない。従って、進入ポートに関しては、応答に対する仮想レーンのバッファリングを最大にし、要求に対する仮想レーンのバッファリングを最小にすることが望ましい。
【００３８】
２Ｋバイトの仮想レーン・バッファ資源を有するシステムの例を使用すると、進入ポートに関して、仮想レーン０は要求を扱うように構成され、仮想レーン１は応答を扱うように構成される。従って、資源は、ＶＬ０資源が５１２バイトに最小化されるように、およびＶＬ１資源が１５３６バイトに最大化されるように、構成される。
【００３９】
退出ポートに関しては、要求は隣接ブリッジから受け取られる。１つの隣接ブリッジおよび多数の隣接ブリッジが存在し得る。障害にならないようにするために、退出ポートはできるだけ多くの要求を受け入れるように構成されなければならない。従って、退出ポートを扱う要求に対する仮想レーン・バッファ・スペースは最大にされなければならない。退出ポートに関して、応答は進入ポートから退出ポートに流れる。応答は比較的短い期間に通過するので、大量のバッファ・スペースが存在する必要はない。それは、退出ポートが転送するデータの宛先である隣接ブリッジの進入ポートを、仮想レーンのバッファリングによって応答のパフォーマンスが決定されるためである。従って、退出ポートに関しては、要求に対する仮想レーンのバッファリングを最大にすることおよび応答に対する仮想レーンのバッファリングを最小にすることが望ましい。
【００４０】
システムが２Ｋバイトの仮想レーン・バッファ資源を有するという例を使用すると、退出ポートに関して、仮想レーン０は要求を扱うように構成され、仮想レーン１は応答を扱うように構成される。従って、資源は、ＶＬ０資源が１５３６バイトに最大化されるように、およびＶＬ１資源が５１２バイトに最小化されるように、構成される。
【００４１】
従って、隣接ブリッジからの受信データに関連した仮想レーンが最大化にされ、ブリッジ内のポート間のデータ伝送に関連した仮想レーンが最小化される。
【００４２】
例えば、図３を再び参照すると、ファームウェアは、データがブリッジのポート１を介してハブ１２４のポート１に向かって流れるようにハブ１２４のポート１に最も近接している２つのブリッジに関するデータ・フローと、データがブリッジのポート２を介してハブ１２４のポート２に向かって流れるようにハブ１２４のポート２最も近接している２つのブリッジ（ブリッジ２およびブリッジ３）に関するデータ・フローとをセットする。
【００４３】
２Ｋバイトの仮想レーン・バッファ資源を有するシステムの一例を使用すると、ブリッジ０およびブリッジ１に関して、資源は、ポート１仮想レーン０要求資源が（例えば、５１２バイトに）最小化され、ポート１仮想レーン１応答資源が（例えば、１５３６バイトに）最大化されるように、一方、ポート２仮想レーン０要求資源が（例えば、１５３６バイトに）最大化され、ポート２仮想レーン１応答資源が（例えば、１５３６バイトに）最小化されるように、割当てられる。ブリッジ２およびブリッジ３に関しては、資源は、ポート１仮想レーン０要求資源が（例えば、１５３６バイトに）最大化され、ポート１仮想レーン１応答資源が（例えば、５１２バイトに）最小化されるように、一方、ポート２仮想レーン０要求資源が（例えば、５１２バイトに）最小化され、ポート２仮想レーン１応答資源が（例えば、１５３６バイトに）最大化されるように、割当てられる。
【００４４】
更に、例えば、図４を再び参照すると、ファームウェアは、データがブリッジのポート１を介してハブのポート１に向かっておよびその逆に流れるように、４つのブリッジすべてに関するデータ・フローをセットする。
【００４５】
２Ｋバイトの仮想レーン・バッファ資源を有するシステムの例を使用すると、資源は、ポート１仮想レーン０要求資源が（例えば、５１２バイトに）最小化され、ポート１仮想レーン１応答資源が（例えば、１５３６バイトに）最大化されるように、一方、ポート２仮想レーン０要求資源が（例えば、１５３６バイトに）最大化され、ポート２仮想レーン１応答資源が（例えば、１５３６バイトに）最小化されるように、割当てられる。
【００４６】
仮想レーン資源の再割当ては、システム初期設定プロセス時に（即ち、システムのブート・アップ時に）生じ得る。そのような再割当ては静的再割当てと呼ばれる。更に、或る状況では、システムが実行している間に再割当てオペレーションを行なうことが望ましいことがある。そのような再割当ては動的再割当てと呼ばれる。
【００４７】
例えば、ブリッジ構成がループ構成からストリング構成（ループの一端が接続解除される場合に生じ得るような）に変化するとき、仮想レーン資源の動的再割当てが望ましいことがある。ブリッジ構成がループ構成から複数ストリング構成（ループ内の２つのブリッジが接続解除される場合に生じ得るような）に変化するときには、仮想レーン資源の動的再割当てが望ましいことがある。更なるＩ／Ｏドロワ・ユニットがシステムに加えられるときにも、仮想レーン資源の動的な再割当てが望ましいことがある。Ｉ／Ｏドロワ・ユニットがシステムから取り除かれるときにも、仮想レーン資源の動的な再割当てが望ましいことがある。
【００４８】
更に詳しく云えば、ブリッジ構成がループ構成からストリング構成に変化するという状況では、仮想レーン資源が当初から再割当てされていたとき、或るブリッジ（例えば、ブリッジ０および１）の仮想レーン資源は１つの方向に送られるように構成され、別のブリッジ（例えば、ブリッジ２および３）の仮想レーン資源は別の方向にデータを送るように構成された。実行時にブリッジ構成が変化する場合、仮想レーン資源が再割当てされなければ、仮想レーン資源のパフォーマンスは悪影響を受けるであろう。
【００４９】
仮想レーン資源を再割当てするためのシステムは、パーティションを管理するファームウェア・ハイパーバイザ内に、或いはランタイム・アブストラクション・サービス（ＲＴＡＳ）の一部であるファームウェア要素内に含まれることもある。
【００５０】
ファームウェアがブリッジ構成の変化を知ることを可能にする複数の機構が存在する。例えば、ファームウェアは、エラーが生じたということを報告する割込みを介して、ブリッジ構成の変化を知ることが可能である。ファームウェアは、データ・フローの方向およびケーブル接続をチェックするポーリング機構を介してブリッジ構成の変化を知ることも可能である。更に、ファームウェアは、顧客がドロワを追加または除去したいという状況に対してサービス・コールを介してブリッジ構成の変化を知ることも可能である。
【００５１】
不良ケーブル状態或いは他の何らかのエラー状態のために或る方向が阻止されるというエラー状況に関しては、ループ・モードにある場合には、ブリッジは、トラフィックの方向を反対のハブ・ポートに向けて自動的に反転する。しかし、トラフィックの方向が反転されることによって、仮想レーン資源構成はもはや最適化されない。仮想レーン・バッファ・アロケーションが新しいデータ・フロー方向を考慮に入れるように動的に再割当てされない場合、そのような最適化の欠如は７５％を越えるデータ・ロスを生じさせることがある。
【００５２】
更に詳しく云えば、図７を参照すると、仮想レーン資源を動的に再割当てするためのシステムのオペレーション・プロセスに関するフローチャートが示される。プロセスは、ステップ７１０において、ブリッジ構成の変化が生じたかどうかを決定することによって、オペレーションを開始する。そのような決定は、ブリッジ構成の変化が生じたかどうか決定するために、システムがポーリング・モードのオペレーションで作動することによって行うことができる。そのような変化は、割込みの受取ることまたはサービス・コールを表示することによって検知されてもよい。割り込みが検知される場合、プロセスは、ステップ７１２において、エラー状態が存在するかどうかを決定する。エラー状態が存在する場合、プロセスは、ステップ７１４において、データ・フローの方向が変化したかどうか決定するためにブリッジ構成を分析する。データ・フローの方向が変化していない場合、プロセスは何も行わず、ブリッジ構成の変化が生じたかどうか決定するために監視を続ける。データ・フローの方向が変化した場合、プロセスは、ステップ７１６において、新しいブリッジ構成のための資源を最適化するために仮想レーン資源をリロケートするプロセスを開始する。
【００５３】
更に詳しく云えば、Ｉ／Ｏドロワ・ユニットに関してエラーが生じ、ループ構成が（例えば、１つのストリング構成またはマルチ・ストリング構成に対して）変化した場合、仮想レーン資源を動的に再割当てするためのシステムは仮想レーン・バッファ資源割当てをリロケートする。
【００５４】
更に詳しく云えば、仮想レーン資源を動的に再割当てするためのシステムは、ループのどこが壊れたか（即ち、ループの端部または中心部が壊れたか）を決定する。次に、システムは、各ブリッジに対するフローの方向を決定する。ブリッジがストリングの端部に位置する場合、フローの方向は同じであるが、ブリッジがストリングの中心部に位置する場合、フローの方向は、ブリッジ構成おける破壊生じた位置に依存する。次に、システムは、ブリッジを介したすべてのトラフィックを一時的に停止する。次に、システムは、各ブリッジに対する決定されたデータ・フローに基づいて、仮想レーンのバッファリングをリロケートし、しかる後、ブリッジ内のトラフィック・フローを再開する。
【００５５】
エラー状態に関して、システムは、一般に、エラーが、エラー状態を示すハードウェアからの割り込みを介して生じた、ということを決定する。しかし、システムは、エラーが生じたということを、データ・フローの方向に関連したブリッジ内のレジスタをポーリングすることによっても決定することができる。データ・フローの方向が、システムにより理解された方向とは異なるということをレジスタが表す場合、仮想レーン資源を動的に再割当てするためのシステムは、新たに識別されたデータ・フローに対する資源を最適化するプロセスを行うであろう。
【００５６】
ストリング構成からループ構成へのブリッジ構成の変化に関して、そのような割り込みを生じるようにブリッジが構成される場合、割込みが生じることが可能である。しかし、一般には、ストリング構成からループ構成への変化はポーリングによって識別される。ファームウェアは、InfiniBandケーブルのようなリンクの存在に関して別のレジスタ・セットをチェックすることもある。ケーブルが再接続または置換されたということをファームウェアが決定する場合、ファームウェアは、ブリッジ構成をストリング構成からループ構成に調整することができる。システムがデータ・トラフィックのためにハブの両方のポートを利用することを可能にするためにブリッジ構成がストリング構成からループ構成に変化したとき、仮想レーン資源を再平衡化することがパフォーマンス上の理由により重要である。
【００５７】
仮想レーン資源を再平衡化するとき、仮想レーン資源を動的に再割当てするためのシステムは、先ず、ケーブル接続を検知する。次に、システムは、ハブのポートが活性化し且つ利用可能となるようにそのポートを構成する。次に、システムは、ブリッジを介したトラフィック・フローを一時的に停止させる。次に、システムは、トラフィックをストリング構成からブリッジ構成に再平衡化するためにデータ・フローを再方向付けする。次に、システムは、各ブリッジに対する新しいデータ・フローに基づいて、仮想レーンのバッファリングをリロケートする。次に、システムは、ブリッジを介したトラフィック・フローを再開する。
【００５８】
新しいＩ／Ｏドロワ・ユニットが加えられるとき、ファームウェアは、新しいドロワが構成に結合したということを通知される。次に、仮想レーン資源を動的に再割当てするためのシステムは、新たに追加されたＩ／Ｏドロワ・ユニットの電源をオンにし、そのＩ／Ｏドロワ・ユニットをコンフィギュレーションに入れる。次に、システムは、新しいＩ／Ｏドロワ・ユニット内のブリッジのブリッジ構成を（即ち、ブリッジが、ループ構成、ストリング構成、またはマルチ・ストリング構成で構成されるかどうかを）決定する。次に、システムは、Ｉ／Ｏドロワ・ユニット内の各ブリッジに対するデータ・フローを決定する。ブリッジがループ構成で配置される場合、システムは、そのようなデータ・フローがまだ割当てられていない場合の理想的なデータ・フローを決定する。次に、システムは、各ブリッジに対するデータ・フローに基づいて、仮想レーン・バッファリングをリロケートし、しかる後、Ｉ／Ｏドロワ・ユニット内のトラフィック・フローを再開する。
【００５９】
Ｉ／Ｏドロワ・ユニットがシステムから取り除かれるとき、動的に再割当てされた仮想レーン資源のためのシステムは、システムがドロワ・ユニットの電源をオフにすることおよび残りのブリッジ構成を完了させるためにケーブルを再接続するようユーザに指示し得ることを除いて、ドロワ・ユニットが加えられるときとほとんど同様に機能する。
【００６０】
本発明を好ましい実施例に関連して詳しく示し且つ説明したが、本発明の趣旨および範囲から逸脱することなく、形式および細部において種々の変更を行い得ることは当業者には明らかであろう。更に、本明細書および「特許請求の範囲」において使用されるように、「コンピュータ」、「システム」、「コンピュータ・システム」、或いは「計算装置」という用語は、パーソナル・コンピュータ、サーバ、ワークステーション、ネットワーク・コンピュータ、メインフレーム・コンピュータ、ルータ、スイッチ、パーソナル・デジタル・アシスタント（ＰＤＡ）、電話、およびデータを処理、送信、受信、捕捉、および／または格納することができる他の任意のシステムを含む。
【００６１】
当業者には明らかであるように、本発明は、方法、システム、またはコンピュータ・プログラムとして具体化することが可能である。従って、本発明は、全体的にハードウェアの実施例、全体的にソフトウェアの実施例（ファームウェア、常駐ソフトウェア、マイクロコード等を含む）、或いは「回路」、「モジュール」または「システム」のような、本明細書においてすべて一般的に参照され得るソフトウェアおよびハードウェアの態様を組み合わせた実施例の形を取り得る。更に、本発明は、コンピュータ使用可能プログラム・コードを組み込まれたコンピュータ使用可能記憶媒体においてコンピュータ・プログラムの形体を取ることも可能である。例えば、バッファを再割当てするためのシステムはファームウェアの実施態様に関連して説明されたが、ソフトウェア、ハードウェア、またはハードウェアおよびソフトウェアの組合せでシステムを具現化し得るということも明らかであろう。
【００６２】
添付図面におけるブロック図は、本発明の様々な実施例に従ってシステムおよび方法の可能な態様のアーキテクチャ、機能、およびオペレーションを示す。更に、ブロック図における各ブロック、およびブロック図におけるブロックの組合せを、特殊な機能または行為を遂行する特殊目的のハードウェア・ベースのシステム、或いは特殊目的のハードウェアおよびコンピュータ命令の組合せによって具現化することも可能である。
【００６３】
本明細書において使用される用語は、特定の実施例のみを説明するためのものであり、本発明を限定することを意図するものではない。本明細書において使用される「含む」という用語は、記述された特徴、整数、ステップ、オペレーション、要素、および／または、コンポーネントの存在を指定するが、１つまたは複数の他の特徴、整数、ステップ、オペレーション、要素、コンポーネント、および／または、それのグループの存在または付加を妨げるものではないということも明らかであろう。
【００６４】
「特許請求の範囲」におけるすべての手段またはステップおよび機能素子の対応する構造体、材料、および等価物は、「特許請求の範囲」における他の素子と結合してその機能を遂行するための任意の構造体、材料、または行為を含むことを意図するものである。本発明の記述は、図解および説明を目的として提示されているが、網羅的であること意図するものではなく、開示された形態の発明に限定されることを意図するものでもない。本発明の範囲および趣旨から逸脱することなく、多くの修正および変更が当業者には明らかであろう。実施例は、本発明の原理および実用的な応用例を最もよく説明するために、および、考えられる特定の用途に適した様々な修正を伴う様々な実施例に関して、当業者が本発明を理解することを可能にするために、選択され且つ説明された。
【００６５】
従って、本発明を詳細に且つ好適な実施例に関して説明したが、「特許請求の範囲」において定義された発明の範囲から逸脱することなく、修正および変更が可能であるということは明らかであろう。
【図面の簡単な説明】
【００６６】
【図１】本発明を具現化し得る例示的なコンピュータ・システムのブロック図である。
【図２】仮想レーンのデータ・フローの例を示すブロック図である。
【図３】ループ構成における１つのハブおよび複数のブリッジの相互接続の例を示すブロック図である。
【図４】ストリング構成における１つのハブおよび複数のブリッジの相互接続の例を示すブロック図である。
【図５】マルチ・ストリング構成における１つのハブおよび複数のブリッジの例を示すブロック図である。
【図６】仮想レーン資源を再割振りするためのシステムのオペレーションを示すフローチャートである。
【図７】仮想レーン資源を動的に再割振りするためのシステムのオペレーションを示すフローチャートである。assined virtual lanes は、「割り当てられた仮想レーン」として統一した訳にする必要があります。日本ではプログラムそのものも物の発明として保護対象になるので、冗長な記載を避けます。
【図１】
2008287718.tif 000003
【図２】
2008287718.tif 000004
【図３】
2008287718.tif 000005
【図４】
2008287718.tif 000006
【図５】
2008287718.tif 000007
【図６】
2008287718.tif 000008
【図７】
2008287718.tif 000009