(57)【要約】      （修正有）【課題】通信ネットワークの相互接続装置に接続されたフロー制御ユニットと中央アービタＴＢＳの整合性を維持する方法およびシステムを提供すること。【解決手段】一実施形態において、方法は、アービタ（３６）と第１のフロー制御ユニットとの間で利用可能なクレジット値を同期させるステップであって、該アービタ（３６）とフロー制御ユニットは、第１相互接続装置の一部をなす。利用可能なクレジット値に関連付けられた発信フロー制御メッセージ（３９１）は送信され、該フロー制御メッセージにより相互接続装置のパケットロスと活用不足とが防止される。【選択図】図２Ａ
2005033769.tif 000002
【特許請求の範囲】
【請求項１】
それぞれ第１相互接続装置の一部を構成するアービタおよび第１フロー制御ユニットの間において、利用可能なクレジット値を同期させるステップと、
前記利用可能なクレジット値に関連する前記第１相互接続装置のパケットの消失と利用不足とを防止する発信フロー制御メッセージを送信するステップと、
を含む方法。
【請求項２】
前記利用可能なクレジット値は、前記第１相互接続装置内の入力バッファが到来データパケットを保存できるかどうかを示すクレジットリミットである請求項１記載の方法。
【請求項３】
前記同期させるステップは、
前記第１フロー制御ユニットと前記アービタとの間に第１フロー制御ループを提供するステップと、
前記第１フロー制御ユニットと第２フロー制御ユニットとの間に第２フロー制御ループを提供するステップと、
を含み、
前記第２フロー制御ユニットは、第２相互接続装置内に含まれる請求項２記載の方法。
【請求項４】
前記第２フロー制御ループを提供するステップが、
前記第２フロー制御ループを介して、前記第１フロー制御ユニットにおいて到来フロー制御メッセージを受信するステップと、
前記第２フロー制御ループを介して、前記到来フロー制御メッセージに基づいて前記第２相互接続装置にデータパケットを送信するステップと、
を含む請求項３記載の方法。
【請求項５】
前記第１フロー制御ループを提供するステップが、
前記第１フロー制御ループを介して、前記アービタにおいてクレジット更新要求を受信するステップと、
前記クレジット更新要求に基づいて前記アービタにおいて許可を生成するステップと、
前記第１フロー制御ループを介して、前記第１フロー制御ユニットに前記許可を提供するステップと、
を含む請求項３記載の方法。
【請求項６】
アービタと第１フロー制御ユニットとを有する第１相互接続装置と、
前記第１相互接続装置にリンクされた第２相互接続装置と、
を備え、
前記第１相互接続装置において受信された到来フロー制御メッセージは、前記第１相互接続装置のパケットの消失と利用不足とを防止する利用可能なクレジット値に関連付けられる、システム。
【請求項７】
前記利用可能なクレジット値は、前記相互接続装置内の入力バッファが到来データパケットを保存できるかどうかを示すクレジットリミットである請求項６記載のシステム。
【請求項８】
前記第１フロー制御ユニットと前記アービタとの間における第１フロー制御ループと、
前記第１フロー制御ユニットと第２フロー制御ユニットとの間における第２フロー制御ループと、
を更に備え、
前記アービタと前記第１フロー制御ユニットは、前記第１相互接続装置内に含まれる請求項７記載のシステム。
【請求項９】
前記第１相互接続装置は、
前記第２フロー制御ループを介して前記第１フロー制御ユニットにおいて到来フロー制御メッセージを受信し、
前記第２フロー制御ループを介して前記到来フロー制御メッセージに基づいて前記第２相互接続装置にデータパケットを送信する請求項８記載のシステム。
【請求項１０】
前記アービタは、
前記第１フロー制御ループを介して前記第１フロー制御ユニットからクレジット更新要求を受信し、
前記クレジット更新要求に基づいて許可を生成し、
前記第１フロー制御ループを介して前記第１フロー制御ユニットに前記許可を提供する請求項９記載のシステム。
【請求項１１】
フロー制御ユニットと、
前記フロー制御ユニットに接続されたアービタと、
前記フロー制御ユニットに接続された入力バッファと、
を備え、
１つまたは複数のデータパケットを、前記１つまたは複数のデータパケットの消失なしに、前記入力バッファ内に保存することができるように、前記フロー制御ユニットと前記アービタとの間において、フロー制御ループを介し、利用可能なクレジット値を同期化させる、相互接続装置。
【請求項１２】
前記フロー制御ユニットは、第２相互接続装置と通信し、第２フロー制御ループを生成する請求項１１記載の相互接続装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ通信の分野に関し、更に詳しくは、通信ネットワークの相互接続装置と関連するフロー制御ユニットと中央アービタとの間においてＴＢＳの整合性を維持する方法およびシステムに関するものである。
【背景技術】
【０００２】
既存のネットワークおよび相互接続技術は、コンピュータシステムの進化に追随できておらず、その結果、データサーバー、アプリケーション処理、およびエンタープライズコンピューティングの負荷が増大している。この問題を更に悪化させているのが、インターネットの普及である。コンピューティング需要に応えるべく実装されたいくつかのコンピューティング技術（例：クラスタリング、フェイルセーフ、および２４ｘ７可用性）には、処理ノード間（例：サーバー）、並びに処理ノード内（例：中央処理ユニット（ＣＰＵ）と入出力（Ｉ／Ｏ）装置間）におけるデータ移動のために大きな処理能力が必要とされている。
【０００３】
これらの課題を満たすべく、処理ノードとＩ／Ｏノードを相互接続しシステムエリアネットワーク（Ｓｙｓｔｅｍ  Ａｒｅａ  Ｎｅｔｗｏｒｋ：ＳＡＮ）を形成するために提案されたものが、ＩｎｆｉｎｉＢａｎｄ（商標）という名称の新しい相互接続技術である。このアーキテクチャは、ホストオペレーティングシステム（ＯＳ）やプロセッサプラットフォームから独立したものとして設計されている。ＩｎｆｉｎｉＢａｎｄ（商標）アーキテクチャ（ＩｎｆｉｎｉＢａｎｄ（商標）  Ａｒｃｈｉｔｅｃｔｕｒｅ：ＩＢＡ）は、ポイントツーポイントのスイッチファブリック（ｓｗｉｔｃｈｅｄ  ｆａｂｒｉｃ）を中心としており、これにより、カスケード接続されたスイッチ装置を利用して、エンドノード装置（例：シングルチップＳＣＳＩまたはＥｔｈｅｒｎｅｔアダプタなどの安価なＩ／Ｏ装置、或いは複雑なコンピュータシステム）を相互接続することができる。このＩｎｆｉｎｉＢａｎｄ（商標）アーキテクチャについては、ＩｎｆｉｎｉＢａｎｄ（商標）  Ｔｒａｄｅ  Ａｓｓｏｃｉａｔｉｏｎが２００２年１１月６日に発行した「ＩｎｆｉｎｉＢａｎｄ（商標）アーキテクチャ仕様書：第１巻（第１．１版）（ＩｎｆｉｎｉＢａｎｄＴＭ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｖｏｌｕｍｅ  １，  Ｒｅｌｅａｓｅ  １．１）」に定義されている。ＩＢＡは、図１（従来技術）に示されているように、単一ホストのバックプレーン相互接続から複雑なシステムエリアネットワークにまで及ぶ広範なアプリケーションをサポートしている。単一ホスト環境においては、それぞれのＩＢＡスイッチファブリックは、ＣＰＵと複数のＩ／Ｏモジュール間におけるホスト接続のためのプライベートなＩ／Ｏ相互接続として機能する。一方、複雑なシステムエリアネットワークをサポートするべく採用された場合には、複数のＩＢＡスイッチファブリックを使用し多数のホストと様々なＩ／Ｏユニットを相互接続することができる。
【０００４】
図１に示されているものなどのシステムエリアネットワークをサポートするスイッチファブリック内には、データ（例：パケット）を発信元から宛先にガイドする複数の入出力ポートを有するいくつかの装置が存在する。このような装置には、例えば、スイッチ、ルーター、リピータ、およびアダプタ（模範的な相互接続装置）などが含まれる。データを装置によって処理する際には、装置のリソースを獲得するべく、複数のデータ伝送要求が競合することになることが理解されよう。例えば、スイッチング装置が、クロスバーによって接続された複数の入力ポートおよび出力ポートを有している場合には、スイッチング装置の複数の入力ポートにおいて受信され、スイッチング装置の特定の出力ポートに対するガイドを必要としているパケットは、少なくとも、入力、出力、およびクロスバーリソースを獲得するべく競合することになる。
【０００５】
装置リソースに対する複数の需要を円滑に管理するために、通常、装置リソースをめぐって競合する要求間を仲裁するべく仲裁体系が採用される。このような仲裁体系は、通常、（１）分散仲裁体系（装置を通じて、仲裁プロセスが、個々のリソースに関連する複数のノード間に分散されているもの）と、（２）中央集中仲裁体系（すべてのリソースに対する仲裁要求が中央アービタによって処理されるもの）のいずれかになっている。また、仲裁体系には、更に、例えば、ラウンドロビンポリシー、先着順サービスポリシー、最短メッセージ最優先ポリシー(shortest message first policy)、または優先順位に基づいたポリシーを含むいくつかの仲裁ポリシーの中の１つを採用することができる。
【０００６】
ＩＢＡ相互接続技術の物理的な特性は、モジュール・ツー・モジュール（ボード）相互接続（例：Ｉ／Ｏモジュールアドインスロットをサポートするコンピュータシステム）と、コンピュータシステム、外部ストレージシステム、外部ＬＡＮ／ＷＡＮアクセス装置を相互接続するべく提供されるシャーシ・ツー・シャーシ相互接続の両方をサポートするべく設計されている。例えば、コンピュータシステムを構成する装置間の通信を円滑に実行するべく、コンピュータシステムのシャーシ内の相互接続技術としてＩＢＡスイッチを採用可能である。同様に、ＩＢＡスイッチファブリックは、ネットワークシステム（例：プロセッサノード、ストレージサブシステムなど）間におけるネットワーク通信を円滑に実行するべく、スイッチ（または、ルーター）内に採用することもできる。このために、図１には、ＩｎｆｉｎｉＢａｎｄアーキテクチャ仕様書に提供されている模範的なシステムエリアネットワーク（ＳＡＮ）が示されており、ＩＢＡスイッチファブリックを利用したプロセッサノードとＩ／Ｏノードの相互接続が示されている。
【０００７】
ＩＢＡでは、リンク上でのパケットの転送を調節するべく、クレジットに基づいたフロー制御プロトコルを使用している。クレジットとは、リンク上でデータパケットを伝送するために必要とされるものであり、それぞれのクレジットは、６４バイトのパケットデータを転送するために使用される。１つのクレジットは、リンクレシーバの入力バッファ内の６４バイトの空きスペースを表している。それぞれの仮想レーンごとに別個の入力バッファスペース割り当てが存在しているように、それぞれのデータ仮想レーンごとに、別個のクレジットプールが存在する。ＩＢＡでは、１、２、４、８、または１５個のデータ仮想レーンが許されている。但し、１つの管理仮想レーンに対するフロー制御は存在しない。従って、管理仮想レーン用のクレジットも存在しない。リンクレシーバは、リンクの他端に位置する隣接装置のトランスミッタにフロー制御パケットを送信することにより、クレジットを分配する。パケットを伝送するためには、送信者は、その所与のパケットに十分なクレジットを有していなければならない。例えば、１００バイトのパケットには、２つのクレジットが必要である。このパケットを送信すると、２つのクレジットが消費され、このパケットは、受信された際に、入力バッファスペースの６４バイトブロックを２つ占有することになる。
【０００８】
ＩＢＡフロー制御プロトコルでは、次の変数を利用している。
【０００９】
・ＶＬ（Ｖｉｒｔｕａｌ  Ｌａｎｅ：仮想レーン）
・ＴＢＳ（Ｔｏｔａｌ  Ｂｌｏｃｋｓ  Ｓｅｎｔ：合計送信ブロック）：リンクの初期化以降に、そのリンク上で送信されたパケットデータ量の累積記録（モジュロ４０９６（modulo 4096（4096を法とする）)）である。ＴＢＳは、リンク上で送信されるパケットデータの６４バイトブロックごとに増分される（モジュロ４０９６）。パケットの末尾の不完全なブロックは、１ブロックとしてカウントされる。
【００１０】
・ＡＢＲ（Ａｂｓｏｌｕｔｅ  Ｂｌｏｃｋｓ  Ｒｅｃｅｉｖｅｄ：絶対受信ブロック）：リンクの初期化以降に、そのリンク上で受信されたパケットデータ量の累積記録である（モジュロ４０９６）。ＡＢＲは、リンク上で受信されたパケットデータの６４バイトブロックごとに増分される（モジュロ４０９６）。パケットの末尾の不完全なブロックは、１ブロックとしてカウントされる。入力バッファスペース不足のために、パケットがドロップされた場合には、ＡＢＲは増分されない。
【００１１】
・ＦＣＣＬ（Ｆｌｏｗ  Ｃｏｎｔｒｏｌ  Ｃｒｅｄｉｔ  Ｌｉｍｉｔ：フロー制御クレジットリミット）：相殺クレジット数(offset credit count)である。ＦＣＣＬは、ＡＢＲ＋「空き入力バッファブロック数」に等しい（モジュロ４０９６）。
【００１２】
ＴＢＳ、ＡＢＲ、およびＦＣＣＬは、各データ仮想レーンごとに別個に維持管理される。
【００１３】
フロー制御パケットには、オペランド、仮想レーン指定子、指定された仮想レーンのＴＢＳおよびＦＣＣＬ値、およびサイクリックリダンダンシーコード（ＣＲＣ）が含まれている。ゼロのオペランド値を有するフロー制御パケットを受信した際には、レシーバは、自身のローカルＡＢＲを、そのフロー制御パケット内のＴＢＳ値に設定する。フロー制御パケット以前に送信されたすべてのデータが両方の値に反映されているはずであり、それらは等しくなるはずである。しかしながら、伝送エラーやハードウェアの誤動作により、それらが異なる場合が存在する。
【００１４】
ゼロのオペランド値を有するフロー制御パケットを受信した際には、レシーバは、フロー制御パケット内のＦＣＣＬ値から自身のローカルＴＢＳを減算することにより、利用可能なクレジット数を算出することができる（モジュロ４０９６）。或いは、この代わりに、フロー制御パケットの受領者は、隣接装置のＦＣＣＬ値を保存し、隣接装置のＦＣＣＬから、特定のパケット転送に必要なクレジットの数とローカルＴＢＳ値の両方を減算することにより、十分なクレジットが存在しているかどうかを判定することができる（モジュロ４０９６）。この結果が２０４８を下回る（すなわち、負でない）の場合には、そのパケット転送用に十分なクレジットが存在している。
【発明の開示】
【発明が解決しようとする課題】
【００１５】
本発明は、相互接続装置におけるフロー制御装置と中央アービタとの間において、ＴＢＳの整合性を維持する方法およびシステムを提供することを目的とする。
【課題を解決するための手段】
【００１６】
相互接続装置に関連するフロー制御ユニットと中央アービタとの間におけるＴＢＳの整合性を維持する方法およびシステムを開示する。本発明の一態様によれば、方法は、アービタと第１フロー制御ユニットとの間において、利用可能なクレジット値を同期化するステップを有しており、これらのアービタおよびフロー制御ユニットは、第１相互接続装置の一部を構成している。利用可能なクレジット値と関連する発信フロー制御メッセージが送信され、このフロー制御メッセージにより、相互接続装置のパケットロスと活用不足が防止される。
【００１７】
尚、本発明のその他の特徴については、添付の図面と以下の詳細な説明から明らかになるであろう。
【発明を実施するための最良の形態】
【００１８】
相互接続装置のフロー制御ユニットとアービタとの間におけるＴＢＳの整合性を維持する方法およびシステムについて説明する。以下においては、本発明を十分に理解できるように、説明のために、多数の特定の詳細項目について記述している。しかしながら、当業者には、これらの特定の詳細項目なしに、本発明を実施可能であることは明らかであろう。
【００１９】
また、本明細書の実施例は、物理的な回路（例：半導体チップ上のもの）内において実装可能であるのみならず、ハードウェア(machine)可読媒体内においても実装することができる。例えば、前述の回路および設計は、半導体装置の設計に使用される設計ツールと関連したハードウェア可読媒体内に保存および／または組み込むことができる。この例としては、ＶＨＤＬ（ＶＨＳＩＣ  Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）言語、Ｖｅｒｉｌｏｇ言語、またはＳＰＩＣＥ言語によってフォーマットされたネットリストが含まれる。そして、ネットリストの例としては、動作レベルネットリスト、ＲＴＬ（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ）ネットリスト、ゲートレベルネットリスト、およびトランジスタレベルネットリストが含まれる。また、ハードウェア可読媒体にも、ＧＤＳ−ＩＩファイルなどのレイアウト情報を有する媒体が含まれる。また、シミュレーション環境において、ネットリストファイルまたは半導体チップ設計用のその他のハードウェア可読媒体を使用し、前述の開示の方法を実行することも可能である。
【００２０】
従って、本発明の実施例は、なんらかの形態の処理コア（コンピュータのＣＰＵなど）上で実行されるソフトウェアプログラムとして（または、これをサポートするべく）使用可能であり、あるいは、ハードウェア可読媒体上に（または、この内部に）実装または実現可能であることをも理解されたい。ハードウェア可読媒体には、ハードウェア（例：コンピュータ）が読み取ることができる形態で情報を保存または伝達するあらゆるメカニズムが含まれる。例えば、ハードウェア可読媒体には、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスクストレージ媒体、光ストレージ媒体、フラッシュメモリデバイス、電気的、光学的、音響的、またはその他の形態の伝播信号（例：搬送波、赤外線信号、ディジタル信号）などが含まれる。
【００２１】
本発明においては、「相互接続装置」という用語は、スイッチ、ルーター、リピータ、アダプタ、またはノード間における相互接続機能を提供するその他の装置を含むものと解釈されたい。このような相互接続機能は、例えば、モジュール・ツー・モジュールまたはシャージ・ツー・シャーシの相互接続機能であってよい。以下においては、本発明の模範的な実施例を、ＩｎｆｉｎｉＢａｎｄアーキテクチャシステム内に採用されるスイッチ内に実装されたものとして説明しているが、本発明の開示内容は、あらゆる相互接続アーキテクチャ内のあらゆる相互接続装置に対して適用することができる。
【００２２】
図２Ａおよび図２Ｂは、本発明の模範的な実施例によるスイッチ２０の図を示している。このスイッチ２０は、１０４入力×４０出力×１０ビットデータバス３０、７６ビット要求バス３２、および８４ビット許可バス３４を含むクロスバー２２を含むものとして示されている。このクロスバーには、要求バス３２を介してアービタ３６にリソース要求を発行し、許可バス３４を介してアービタ３６からリソース許可を受信する８つの通信ポート２４が接続されている。
【００２３】
クロスバー２２には、この８つの通信ポートに加え、管理ポート２６と、機能的なＢＩＳＴ（Ｂｕｉｌｔ−Ｉｎ−Ｓｅｌｆ−Ｔｅｓｔ：組み込み自己試験）ポート２８も接続されている。管理ポート２６には、ネットワーク設定を担当するＳＭＡ（Ｓｕｂ−Ｎｅｔｗｏｒｋ  Ｍａｎａｇｅｍｅｎｔ  Ａｇｅｎｔ：サブネットワーク管理エージェント）、エラーと性能カウンタを維持管理するＰＭＡ（Ｐｅｒｆｏｒｍａｎｃｅ  Ｍａｎａｇｅｍｅｎｔ  Ａｇｅｎｔ：性能管理エージェント）、環境制御および状態を監視するＢＭＡ（Ｂａｓｅｂｏａｒｄ  Ｍａｎａｇｅｍｅｎｔ  Ａｇｅｎｔ：ベースボード管理エージェント）、およびマイクロプロセッサインターフェイスが含まれている。
【００２４】
管理ポート２６は、エンドノードであり、これは、ポート２６に伝達されたすべてのメッセージは、ここで、その旅を終えることを意味している。従って、管理ポート２６は、図１のスイッチなどの相互接続装置をアドレス指定するために使用される。従って、この管理ポート２６を介し、ポート２４の性能、それぞれのポート２４の状態、アービタ３６の診断結果、およびネットワークスイッチングファブリック１０用のルーティングテーブルに関するキー情報および計測値を取得することができる。このキー情報は、パケット要求をポート２６に対して送信し、この要求をＳＭＡ、ＰＭＡ、またはＢＭＡのいずれかに送ることにより、取得可能である。
【００２５】
機能ＢＩＳＴポート２８は、データ経路２０を実装する相互接続装置の実動作速度によるスタンドアロン試験をサポートしている。機能ＢＩＳＴポート２８には、ランダムパケットジェネレータ、有向パケットバッファ、およびリターンパケットチェッカが含まれている。
【００２６】
スイッチの機能ブロックダイアグラムの説明を終え、次に、アービタ３６などの中央アービタにおいてクレジットの割り当てを実行する相互接続装置について説明する。このような装置においては、リンクポート２４は、それぞれのローカルＡＢＲおよびＴＢＳの計数を維持管理している。また、リンクポート２４は、到来フロー制御パケットを処理して発信フロー制御パケットを生成する。リンクポート２４は、隣接装置からフロー制御パケットを受信すると、ＦＣＣＬ値を中央アービタ３６に転送する。中央アービタ３６は、利用可能なクレジットの数を算出するべく、ＴＢＧ（Ｔｏｔａｌ  Ｂｌｏｃｋ  Ｇｒａｎｔｅｄ：合計許可ブロック）の記録を維持しなければならない。ＴＢＧは、特定の出力ポートの特定の仮想レーン上で伝送が許可された６４バイトブロックの数に等しい。パケット伝送の後に、その同じ出力ポート／仮想レーンの組み合わせ用のＴＢＳは、許可時点における対応するＴＢＧと同じ量だけ増分されることになる。実際に、ＴＢＳがＴＢＧの時間遅延したコピーになっている場合には、フロー制御プロトコルは正しく機能している。パワーオンの時点で、ＴＢＧとＴＢＳはゼロにリセットされるが、正常な動作イベントの結果、ＴＢＳとＴＢＧがずれることがある。まず、第１に、リンクは、しばしば、リトレインする（例：リンクエラーのしきい値を超過した場合に、リンクは、自動的にリトレインする）。また、リンクケーブルを抜き差しすると、ＴＢＳはクリアされてしまう。第２に、許可が発行された後に、受信エラーのために、パケット伝送が失敗または中断することがある。この結果、ＴＢＳは、ＴＢＧと同じ量だけ増分されないことになる。このような状況においては、ＴＢＳがＴＢＧに追随することができず、フロー制御プロトコルが破綻することになる。すなわち、アービタ３６は、実際に利用可能なものよりも多くのクレジット、または少ないクレジットを有しているものと見なし、過剰なパケット、または過少な（場合によっては、ゼロの場合もある）パケットを送信することになってしまう。後述するポート２４とアービタ３６間の別個のフロー制御ループは、このクレジットの正確な整合性を維持管理するためのものである。
【００２７】
図３は、２つのスイッチ間のリンクレベルのフロー制御の詳細な機能ブロックダイアグラムを示している。図３のスイッチＡおよびＢは、指定された仮想レーン上で受け付け可能なデータ量の標識である「クレジットリミット」を提供する。
【００２８】
前述のように、伝送、データパケット、またはフロー制御情報の交換におけるエラーにより、スイッチＡおよびＢが感知するフロー制御状態に不整合が生じることがある。スイッチは、リンクの初期化以降に送信されたデータの合計量の標識を定期的に送信しており、これは、フロー制御パケットに含まれている。
【００２９】
フロー制御パケット３９１は、リンク３９９を介してスイッチＡからスイッチＢに送信される。リンク３９９は、１、４、または１２個のシリアルチャネルを有している。リンク３９９が複数のチャネルを有している場合には、データは、それらのチャネルを横断してバイトインターリーブされる。フロー制御は、チャネルごとではなく、リンクごとに実行される。フロー制御は、管理パケットを送信するものを除いて、すべての仮想レーン上に実装される。フロー制御パケット３９１は、必要に応じた回数だけ送信され、この結果、クレジットが返されてリンク３９９の効率的な利用が可能になる。まず、フロー制御パケット３９１について説明した後に、図３のシグナリングについて説明する。
【００３０】
図４は、４ビットのＯＰ（オペランド）フィールド、１２ビットのＦＣＴＢＳ（Ｆｌｏｗ  Ｃｏｎｔｒｏｌ  Ｔｏｔａｌ  Ｂｌｏｃｋｓ  Ｓｅｎｔ：フロー制御合計送信ブロック）フィールド、１２ビットのＦＣＣＬ（Ｆｌｏｗ  Ｃｏｎｔｏｒｌ  Ｃｒｅｄｉｔ  Ｌｉｍｉｔ：フロー制御クレジットリミット）フィールド、４ビットのＶＬ（Ｖｉｒｔｕａｌ  Ｌａｎｅ：仮想レーン）フィールド、およびＬＰＣＲＣ（Ｌｉｎｋ  Ｐａｃｋｅｔ  Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ：リンクパケットサイクリックリダンダンシーチェック）を含む複数のフィールドを有するフロー制御パケット３９１を示している。ＯＰフィールドは、フロー制御パケットが通常のフロー制御パケットであるか、或いは、初期化フロー制御パケットであるかを示している。ＦＣＴＢＳフィールドは、リンクの初期化以降に、その仮想レーンにおいて伝送された合計ブロック数を示している。ＦＣＣＬフィールドは、前述のクレジットリミットを示している。このＦＣＣＬを算出する方法については後述する。ＶＬフィールドは、そのＦＣＴＢＳおよびＦＣＣＬフィールドを適用する仮想レーンに対して設定されている。ＬＰＣＲＣフィールドは、フロー制御パケットの最初の４バイトをカバーしている。
【００３１】
ＦＣＣＬは、それぞれの仮想レーンごとに維持管理されている１２ビットのＡＢＲ（Ａｄｊｕｓｔｅｄ  Ｂｌｏｃｋｓ  Ｒｅｃｅｉｖｅｄ：受信調節ブロック）カウンタに基づいて算出される。ＡＢＲは、初期化の時点でゼロに設定される。それぞれのフロー制御パケットを受信した際に、ＡＢＲは、ＦＣＴＢＳフィールドの値に設定される。そして、それぞれのデータパケットが受信された際に、ＡＢＲは、データパケットが入力バッファが一杯であるために破棄された場合を除いて、増分される（モジュロ４０９６）。
【００３２】
パケット３９１などのフロー制御パケットを送信する際には、ＦＣＣＬは、次の中の１つに設定されることになる。すなわち、現在、バッファが、破棄することなしに有効なパケットのすべての組み合わせの２０４８以上のブロックを受信できる状態にある場合には、ＦＣＣＬは、ＡＢＲ＋２０４８に設定される（モジュロ４０９６）。それ以外の場合には、ＦＣＣＬは、ＡＢＲ＋破棄することなしに有効なパケットのすべての組み合わせの「受信可能なブロック数」に設定される（モジュロ４０９６）。この「受信可能なブロック数」とは、到来するパケットのサイズに関係なく、バッファオーバーフローなしに受信を保証することができる数のことである。
【００３３】
図３を再度参照すれば、デシリアライザ３６０とシリアライザ３７０を有するスイッチＢが示されている。デシリアライザ３６０とシリアライザ３７０は統合することができる。デシリアライザ３６０は、リンク３９９からシリアルデータストリームを受け付け、８バイトワードを生成し、これをデコーダ３５０に伝達する。データパケットの場合には、十分なストレージスペースが入力バッファ内において利用可能であるかどうかについて、フロー制御ユニット（ＦＣＵ）３４０に問い合わせる。そして、データパケット用の十分なスペースが利用可能な場合には、そのパケットは、入力バッファ３２０内に保存され、デコーダ３５０は、パケット転送要求を生成し、これを要求マネージャ３３０に伝達する。一方、十分なスペースが利用可能でない場合には、そのパケットはドロップされる。デコーダ３５０は、到来するストリームを解釈し、フロー制御パケット３９１をＦＣＵ３４０にルーティングする。また、フロー制御パケットを受信した際には、デコーダ３５０は、クレジット更新要求を生成し、これを要求マネージャ３３０に伝達する。要求マネージャ３３０は、要求をハブ２２を通じてアービタ３６に転送する。データパケットは、その伝送がアービタ３６によって許される時点まで、入力バッファ３２０内に保存される。データパケットが伝送された際には、送信ユニット３８０は、更新済みのＴＢＳ（ｌｉｎｋ）およびＡＢＲ（ｈｕｂ）値をＦＣＵ３４０に通知する。同様に、入力バッファ３２０も、パケットを伝送した際には、ブロックが空いたことをＦＣＵ３４０に通知する。
【００３４】
ＦＣＵ３４０は、フロー制御パケットの情報により、ローカルクレジットを追跡すると共に、発信フロー制御メッセージを定期的に生成する。この図３の機能ブロックには、図５との関連で説明するデュアルループフロー制御体系を適用することができる。
【００３５】
図５は、本発明の一実施例によるデュアルループフロー制御ダイアグラムを示している。図５には、第１フロー制御ループ５４０と第２フロー制御ループ５５０が含まれている。ＦＣループ５４０は、ＦＣＵ５１０とＦＣＵ５２０間に存在している。ＦＣＵ５１０は、スイッチＡの一部であってよく、ＦＣＵ５２０は、スイッチＢの一部であってよい（これらのスイッチは、いずれも図３に示されている）。一方、ＦＣループ５５０は、同一のスイッチ上のＦＣＵ５２０とアービタ５３０間に存在している。
【００３６】
次に、これらのループの使用法について概略的に説明する。基本プロトコルにより、リンクの両端に位置する２つのポートによるクレジットの交換が可能になっている。クレジット情報は、レイテンシーを許容するように（すなわち、リンク上でフロー制御パケットを送信するのに要する時間を許容するように）符号化されている。また、クレジット受領者からのフィードバックにより、プロトコルは、フロー制御パラメータの損傷から回復できるようになっている。このクレジット情報の送信と、回復のためのフィードバック情報の返却が、基本フロー制御プロトコルループを構成している。隣接装置からのクレジットは、中央アービタに転送され、それらは、そこで、パケット転送のために割り当てられる。ポートから中央アービタへのクレジット情報の転送を円滑に実行するために、図５のポート／アービタフロー制御ループ５５０が生成される。これは、リンクレベルのフロー制御ループとは別個のものになっているが、同一の基本プロトコルを使用している。隣接装置からフロー制御パケットを受信すると、ポートは、リンクレベルのフロー制御ループからのクレジット情報をポート／アービタフロー制御ループにマッピングし、それをアービタに転送する。リンク上と同様に、アービタは、フィードバックをポートに提供し、ポートからアービタへのループの完全性を維持している。
【００３７】
クレジットの報告は、内部ループ上において一方通行で行われ、隣接装置のクレジット情報がポートからアービタに伝達される。ポート／アービタフロー制御ループ上において使用されるフロー制御変数は、次のとおりである。
【００３８】
・ＴＢＳ（Ｌｉｎｋ）（Ｌｉｎｋ  Ｔｏｔａｌ  Ｂｌｏｃｋｓ  Ｓｅｎｔ：合計送信ブロック（リンク））：リンクの初期化以降に、そのリンク上で伝送されたパケットデータ量の累積記録である（モジュロ４０９６）。ＴＢＳ（Ｌｉｎｋ）は、前述のＴＢＳ値であってよい。
【００３９】
・ＡＢＲ（Ｌｉｎｋ）（Ｌｉｎｋ  Ａｂｓｏｌｕｔｅ  Ｂｌｏｃｋｓ  Ｓｅｎｔ：絶対受信ブロック（リンク））：リンクの初期化以降に、そのリンク上で受信されたパケットデータ量の累積記録である（モジュロ４０９６）。ＡＢＲ（Ｌｉｎｋ）は、前述のＡＢＲ値であってよい。
【００４０】
・ＦＣＣＬ（Ｌｏｃａｌ）（Ｌｏｃａｌ  Ｆｌｏｗ  Ｃｏｎｔｒｏｌ  Ｃｒｅｄｉｔ  Ｌｉｍｉｔ：フロー制御クレジットリミット（ローカル））：相殺クレジット数である。ＦＣＣＬ（Ｌｏｃａｌ）は、ＡＢＲ（Ｌｉｎｋ）＋ローカルポートの入力バッファ内において関係する仮想レーンに予約された空き入力バッファブロック数（モジュロ４０９６）に等しい。
【００４１】
・ＦＣＣＬ（Ｎｅｉｇｈｂｏｒ）（Ｎｅｉｇｈｂｏｒ  Ｆｌｏｗ  Ｃｏｎｔｒｏｌ  Ｃｒｅｄｉｔ  Ｌｉｍｉｔ：フロー制御クレジットリミット（隣接装置））：付加されている隣接装置からのフロー制御パケットによって受信したＦＣＣＬ値である（注：ＦＣＣＬ（Ｎｅｉｇｈｂｏｒ）は、隣接装置のＦＣＣＬ（Ｌｏｃａｌ）と等しい）。
【００４２】
・ＴＢＧ（Ａｒｂ）（Ａｒｂｉｔｅｒ  Ｔｏｔａｌ  Ｂｌｏｃｋｓ  Ｇｒａｎｔｅｄ：合計許可ブロック（アービタ））：装置のリセット以降に、そのリンク上において伝送が許可されたパケットデータ量の累積記録である（モジュロ４０９６）。ＴＢＧ（Ａｒｂ）は、特定のリンク上で送出する許可が付与されたパケット内の６４バイトブロックの数だけ増分される（モジュロ４０９６）。パケットの末尾における不完全なブロックは、１ブロックとしてカウントされる。パケット内のブロック数は、アービタへのパケット転送要求内に格納されているパケット長の値から算出される。
【００４３】
・ＴＢＧ（Ｇｒｎｔ）（Ｇｒａｎｔ  Ｔｏｔａｌ  Ｂｌｏｃｋｓ  Ｇｒａｎｔｅｄ：合計許可ブロック（許可）））：許可が発行された時点におけるＴＢＧ（Ａｒｂ）の値に等しく、許可されたパケットが消費するクレジット数が含まれている。アービタは、その許可内にＴＢＧ（Ｇｒｎｔ）を含める。ターゲット出力ポートは、関連するパケット伝送が完了するまで、ＦＩＦＯ内にＴＢＧ（Ｇｒｎｔ）を保存する。ＴＢＧ（Ｇｒｎｔ）を使用し、特に、パケット伝送が失敗または中断した際に、ＡＢＲ（Ｈｕｂ）をＴＢＧ（Ａｒｂ）と整合性を有する状態に維持することができる。
【００４４】
・ＢＯ（Ｉｂｆｒ）（Ｂｌｏｃｋｓ  Ｏｃｃｕｐｉｅｄ：占有ブロック）：入力バッファ内に保存されている６４バイトブロックの現在の合計である。
【００４５】
・ＡＢＲ（Ｈｕｂ）（Ｈｕｂ  Ａｂｓｏｌｕｔｅ  Ｂｌｏｃｋｓ  Ｒｅｃｅｉｖｅｄ：絶対受信ブロック（ハブ））：装置のリセット以降に、クロスバー２２上のハブからポートが受信したパケットデータ量の累積記録である（モジュロ４０９６）。ＡＢＲ（Ｈｕｂ）は、ハブ上で受信したパケットデータのそれぞれの６４バイトブロックごとに増分される（モジュロ４０９６）。パケットの末尾における不完全なブロックは、１ブロックとしてカウントされる。
【００４６】
パケット伝送の際に、ＡＢＲ（Ｈｕｂ）とＴＢＳ（Ｌｉｎｋ）は、同時に増分されることになる。それぞれのパケット転送の完了時点で、ＡＢＲ（Ｈｕｂ）は、そのパケット転送の許可によって供給されたＴＢＧ（Ａｒｂ）値に等しく設定される。この操作により、仲裁要求が発行された後に検出したパケット受信エラーのために、許可されたパケット伝送が入力装置によって失敗或いは中断した場合にも、ＡＢＲ（Ｈｕｂ）はＴＢＧ（Ａｒｂ）と整合性を有する状態に維持される。
【００４７】
・ＦＣＣＬ（Ｕｐｄｔ）（Ｕｐｄａｔｅ  Ｆｌｏｗ  Ｃｏｎｔｒｏｌ  Ｃｒｅｄｉｔ  Ｌｉｍｉｔ：フロー制御クレジットリミット（更新））：ポート／アービタフロー制御ループ用のＦＣＣＬ（Ｎｅｉｇｈｂｏｒ）の再算出結果である。具体的には、ＦＣＣＬ（Ｕｐｄｔ）は、ＦＣＣＬ（Ｎｅｉｇｈｂｏｒ）−ＴＢＳ（Ｌｉｎｋ）＋ＡＢＲ（Ｈｕｂ）に等しい（モジュロ４０９６）。ＴＢＳ（Ｌｉｎｋ）を減算することにより、クレジットの数が算出される。そして、ＡＢＲ（Ｈｕｂ）を加算することにより、ポート／アービタループ用のクレジットがリコードされる。ポートは、それぞれの仮想レーンごとに、最新のＦＣＣＬ（Ｕｐｄｔ）の複写を保持している。ＦＣＣＬ（Ｕｐｄｔ）値が変化すると、ポートは、アービタに対するクレジット更新要求をスケジューリングする。
【００４８】
・ＦＣＣＬ（Ａｒｂ）（Ａｒｂｉｔｅｒ  Ｆｌｏｗ  Ｃｏｎｔｒｏｌ  Ｃｒｅｄｉｔ  Ｌｉｍｉｔ：フロー制御クレジットリミット（アービタ））：クレジット更新要求によってポートが報告した最新のＦＣＣＬ（Ｕｐｄｔ）値である。ＦＣＣＬ（Ａｒｂ）は、ＡＢＲ（Ｈｕｂ）を基礎値として使用したポート／アービタフロー制御ループ用のＦＣＣＬ（Ｎｅｉｇｈｂｏｒ）の再算出結果である。アービタは、ＦＣＣＬ（Ａｒｂ）からＴＢＧ（Ａｒｂ）を減算することにより、利用可能なクレジットの数を判定する（モジュロ４０９６）。
【００４９】
前述のように、ＴＢＳ、ＡＢＲ、およびＦＣＣＬは、それぞれのデータ仮想レーンごとに別個に維持管理されている。次に、ループ５４０とループ５５０の内部（およびこれらの間における）シグナリングについて、図６〜図１０との関連で説明する。
【００５０】
図６は、フロー制御パケットを隣接装置に送信するプロセス６００用の図５のデュアルループフロー制御体系と整合性を有する模範的なフローチャートである。このプロセス６００は、ブロック６０１から始まる。判定ブロック６１０において、ＦＣＵ３４０は、フロー制御パケットを送信する時点であるかどうかを判定する。そして、その時点でない場合には、ＦＣＵ３４０は待機する。一方、フロー制御パケットを送信する時点である場合には、処理ブロック６２０において、ＦＣＣＬ（Ｌｏｃａｌ）を算出する。ＦＣＣＬは、次の式によって演算する。
【００５１】
ＦＣＣＬ（Ｌｏｃａｌ）［ｖｌ］＝（ＡＢＲ（Ｌｉｎｋ）［ｖｌ］＋ｎ＿ｃｒｅｄｉｔｓ［ｖｌ］）（モジュロ４０９６）
ここで、クレジット数であるｎ＿ｃｒｅｄｉｔｓ［ｖｌ］は、関連する仮想レーン用に予約されたローカル入力バッファ内の空き６４バイトブロックの数と２０４８のいずれか小さいほうである。処理ブロック６３０において、フロー制御パケットを準備する。発信フロー制御パケットは、次のパラメータを設定することにより、準備される。
【００５２】
ＦＣＰ．ＶＬ＝ｖｌ
ＦＣＰ．ＴＢＳ＝ＴＢＳ（Ｌｉｎｋ）［ｖｌ］
ＦＣＰ．ＦＣＣＬ＝ＦＣＣＬ（Ｌｏｃａｌ）［ｖｌ］
ここで、ＦＣＰ．ＶＬ、ＦＣＰ．ＴＢＳ、およびＦＣＰ．ＦＣＣＬは、発信フロー制御パケット内のＶＬ、ＴＢＳ、およびＦＣＣＬフィールドである。そして、処理ブロック６４０において、フロー制御パケットを送信し、プロセスは、ブロック６９９において終了する。
【００５３】
図７は、パケットのストリームを受信するプロセス７００用の図５のデュアルループフロー制御体系と整合性を有する模範的なフローチャートである。このプロセス７００は、ブロック７０１において始まる。処理ブロック７０５において、デコーダ３５０により、到来パケットストリームをデコードする。そして、判定ブロック７１０において、パケットタイプを判定する。その結果、パケットがフロー制御パケットである場合には、フローは、処理ブロック７１５に続く。一方、パケットがデータパケットである場合には、フローは、処理ブロック７３５に続く。以下においては、まず、フロー制御パケットの処理について説明した後に、データパケットの処理について説明することとする。
【００５４】
到来パケットがフロー制御パケットと識別された場合には、処理ブロック７１５において、ＦＣＵ３４０により、ローカルフロー制御パラメータを更新する。ローカルフロー制御パラメータは、次のように更新する。
【００５５】
ｖｌ＝ＦＣＰ．ＶＬ
ＡＢＲ（Ｌｉｎｋ）［ｖｌ］＝ＦＣＰ．ＴＢＳ
そして、処理ブロック７２０において、ＦＣＣＬ（ｕｐｄｔ）を次のように算出する。
【００５６】
ＦＣＣＬ（Ｕｐｄｔ）［ｖｌ］＝（ＦＣＰ．ＦＣＣＬ−ＴＢＳ（Ｌｉｎｋ）［ｖｌ］＋ＡＢＲ（Ｈｕｂ）［ｖｌ］）（モジュロ４０９６）
ここで、ＦＣＰ．ＶＬ、ＦＣＰ．ＴＢＳ、およびＦＣＰ．ＦＣＣＬは、到来フロー制御パケット内のＶＬ、ＴＢＳ、およびＦＣＣＬフィールドである。ＡＢＲ（Ｌｉｎｋ）をＦＣＰ．ＴＢＳに設定することにより、ローカルリンクＡＢＲが、隣接装置のリンクＴＢＳと整合性を有する状態に保持される。この操作により、リンク上の消失データパケットと、これらのパラメータの同期を喪失させるその他のエラーが是正される。ＦＣＰ．ＦＣＣＬからＴＢＳ（Ｌｉｎｋ）を減算することにより、利用可能なクレジット数が算出される。そして、ＡＢＲ（Ｈｕｂ）を加算することにより、ポート／アービタフロー制御ループ用のクレジット数がリコード（recode）される。この結果生成されるＦＣＣＬ（Ｕｐｄｔ）は、続いて、クレジット更新要求によってアービタに転送される。処理ブロック７２５において、アービタ用のクレジット更新要求を生成する。次のパラメータを設定する。
【００５７】
：
ＲＱＳＴ．ＶＬ＝ｖｌ
ＲＱＳＴ．ＦＣＣＬ＝ＦＣＣＬ（Ｕｐｄｔ）［ｖｌ］
：
処理ブロック７３０において、更新要求をアービタ３６に送信する。そして、プロセスは、ブロック７９９において終了する。
【００５８】
到来フロー制御パケットの処理に関する説明を終え、次に、データパケットの処理について説明する。判定ブロック７３５において始まり、デコーダ３５０は、クレジットが十分であるかどうかをチェックする。そして、クレジットが不十分な場合には、入力バッファは、データパケットを保存するスペースを有しておらず、データパケットは、ブロック７７０においてドロップされ、処理は、ブロック７９９において終了する。
【００５９】
一方、十分なクレジットが存在する場合には、処理ブロック７４５において、パケット転送要求を生成する。パケットのローカルルーターヘッダ（ＬＲＨ）を受信し、いくつかの予備チェックを経た後に、パケット転送要求を生成し、アービタに転送する。この要求には、その他のものに加え、次のように、パケットが必要とするクレジットの数をアービタが判定するのに使用するＬＲＨ内のパケット長フィールドが含まれている。
【００６０】
：
ＲＱＳＴ．ＰＣＫＴ＿ＬＴＨ＝ＬＲＨ．ＰＣＫＴ＿ＬＴＨ
：
処理ブロック７５０において、パケット転送要求をアービタ３６に送信する。そして、処理ブロック７５５において、ＡＢＲ（Ｌｉｎｋ）を次のように更新する。すなわち、到来パケットデータのすべての６４バイトについて、ＡＢＲ（Ｌｉｎｋ）［ｖｌ］＝（ＡＢＲ（Ｌｉｎｋ）［ｖｌ］＋１）（モジュロ４０９６）を実行する。パケットの末尾における不完全なブロックは、１ブロックとしてカウントする。処理ブロック７６０において、データパケットを入力バッファ３２０内に保存する。そして、処理ブロック７６５において、ＢＯ（Ｉｂｆｒ）値を更新する。入力バッファ内に保存されているすべての６４バイトブロックごとに、ＢＯ（Ｉｂｆｒ）が増分される（すなわち、ＢＯ（Ｉｂｆｒ）［ｖｌ］＝ＢＯ（Ｉｂｆｒ）［ｖｌ］＋１）。不完全なブロックは、フルブロックとして処理される。そして、プロセスは、ブロック７９９において終了する。
【００６１】
図８は、データパケットを伝送するプロセス８００用の図５のデュアループフロー制御体系と整合性を有する模範的なフローチャートである。このプロセス８００は、ブロック８０１において始まる。処理ブロック８１０において、出力ポートは、クロスバー２２を介してデータパケットを受信する。そして、処理ブロック８２０において、出力ポートの許可ＦＩＦＯから仮想レーンを読み込む（ｖｌ＝ＶＬ（Ｇｒｎｔ）［ｈｅａｄ］）。処理ブロック８３０において、実際に伝送する発信パケットデータのすべての６４バイトごとに、次のパラメータを増分する。
【００６２】
ＡＢＲ（Ｈｕｂ）［ｖｌ］＝（ＡＢＲ（Ｈｕｂ）［ｖｌ］＋１）（モジュロ４０９６）
ＴＢＳ（Ｌｉｎｋ）［ｖｌ］＝（ＴＢＳ（Ｌｉｎｋ）［ｖｌ］＋１）（モジュロ４０９６）。
【００６３】
パケットの末尾における不完全なブロックは１ブロックとしてカウントする。データパケットの伝送の際には、ＡＢＲ（Ｈｕｂ）とＴＢＳ（Ｌｉｎｋ）は同時に更新される。処理ブロック８４０において、データパケットを伝送する。
【００６４】
正常な許可を受信した後に、データパケット伝送が失敗または中断した場合には、ブロック８５０において、次の操作を行い、ＡＢＲ（Ｈｕｂ）をＴＢＧ（Ａｒｂ）と整合性を有する状態に保持する。
【００６５】
ＡＢＲ（Ｈｕｂ）［ｖｌ］＝ＴＢＧ（Ｇｒｎｔ）［ｈｅａｄ］
ｈｅａｄ＝（ｈｅａｄ＋１）（モジュロｆｉｆｏ＿ｓｉｚｅ）
ここで、ＴＢＲ（Ｇｒｎｔ）は、許可が発行された時点のＴＢＧ（Ａｒｂ）の値である。ＡＢＲ  ＨｕｂはＴＢＧ（Ｇｒｎｔ）と等しくなければならないため、すべてのデータパケット伝送の完了時に、この操作を行うことを推奨する。そして、処理フローは、ブロック８９９において停止する。
【００６６】
図９は、アービタ３６における要求の処理のプロセス９００用の図５のデュアルループフロー制御体系と整合性を有する模範的なフローチャートである。このプロセス９００は、ブロック９０１において始まる。処理ブロック９０５において、アービタ３６は、到来要求ストリームをデコードする。そして、判定ブロック９１０において、クレジット更新要求またはパケット転送要求のいずれかの要求タイプに識別する。要求がクレジット更新要求である場合には、処理ブロック９４０において、新しいＦＣＣＬ（ａｒｂ）値を保存する。クレジット更新を受信した際には、アービタ３６は、次のパラメータを設定する。
【００６７】
ｖｌ＝ＲＱＳＴ．ＶＬ
ＦＣＣＬ（Ａｒｂ）［ｖｌ］＝ＲＱＳＴ．ＦＣＣＬ
プロセスは、ブロック９９９において終了する。
【００６８】
一方、要求がパケット転送要求である場合には、処理ブロック９１５において、必要なクレジットの数を算出する。パケット転送に必要なクレジットの数は、次のように算出する。
【００６９】
ｎ＿ｃｒｅｄｉｔｓ＿ｎｅｅｄｅｄ＝（ＲＱＳＴ．ＰＣＫＴ＿ＬＴＨ  ｄｉｖ  １６）＋１
ここで、ＲＱＳＴ．ＰＣＫＴ＿ＬＴＨは、パケット転送要求内のパケット長フィールドである。パケット長は、４バイト単位になっており、ｄｉｖは、整数除算である。パケットの末尾における不完全な６４バイトブロックは、１クレジットとしてカウントする。尚、パケット長には、パケットの開始区切り文字（１バイト）、ｖＣＲＶ（Ｖａｒｉａｎｔ  Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｏｄｅ）（２バイト）、または終了区切り文字（１バイト）が含まれていないため、ｐａｃｋｅｔ＿ｌｅｎｇｔｈ（モジュロ１６）がゼロの場合であっても、前述の式における「＋１」は必要である。任意選択により、これらが受信側の入力バッファ内に保存される可能性があるため、ＩＢＡでは、クレジットの算出の際に、これら４バイトを含めることを要求している。
【００７０】
処理ブロック９１７において、パケット転送要求から仮想レーンを抽出し、パラメータ「ｖｌ＝ＲＱＳＴ．ＶＬ」を設定する。そして、判定ブロック９２０において、次のように、クレジットが十分であるかどうかをチェックする。すなわち、（（ＦＣＣＬ（Ａｒｂ）［ｖｌ］−ＴＢＧ（Ａｒｂ）［ｖｌ］−ｎ＿ｃｒｅｄｉｔｓ＿ｎｅｅｄｅｄ）（モジュロ４０９６）＜２０４８）が真の場合には、そのパケットを送信するのに十分なクレジットが存在している。一方、十分なクレジットが存在していない場合には、クレジットが利用可能になるまで、処理は停止する。クレジットが利用可能な場合には、処理は継続する。
【００７１】
処理ブロック９２５において、ＴＢＧ（Ａｒｂ）［ｖｌ］＝（ＴＢＧ（Ａｒｂ）［ｖｌ］＋ｎ＿ｃｒｅｄｉｔｓ＿ｎｅｅｄｅｄ）（モジュロ４０９６）により、ＴＢＧ値を更新する。そして、処理ブロック９３０において、許可を次のように生成する。
【００７２】
ＧＲＮＴ．ＶＬ＝ｖｌ
ＧＲＮＴ．ＴＢＧ＝ＴＢＧ（Ａｒｂ）［ｖｌ］
処理は、ブロック９９９において終了する。
【００７３】
図１０は、対象の入力ポートおよび出力ポートによって許可を処理するプロセス１０００用の図５のデュアルループフロー制御体系と整合性を有する模範的なフローチャートである。このプロセス１０００は、ブロック１００１において始まる。処理ブロック１０１０において、許可を受信する。そして、判定ブロック１０２０において、図２Ａおよび図２Ｂのそれぞれのポートは、その許可が自身に対するものであるかどうかを判定する。そして、その許可がその受信ポートに対するものでない場合には、処理は、ブロック１０９９において終了する。一方、その許可がそのポートのその入力ポートに対するものであった場合には、処理ブロック１０３０において、その許可が示しているパケットを入力バッファから読み取る。そして、処理ブロック１０４０において、次のように、入力バッファスペースを解放する。
【００７４】
ｖｌ＝ＧＲＮＴ．ＶＬ
ＢＯ（Ｉｂｆｒ）［ｖｌ］＝ＢＯ（Ｉｂｆｒ）［ｖｌ］−１
処理ブロック１０５０において、その所望のデータパケットを適切な出力ポートに送信する。そして、処理は、ブロック１０９９において終了する。
【００７５】
一方、許可を受信した際に、判定ブロック１０２０において、その許可が出力ポートに対するものであった場合には、その指定された出力ポートは、その許可されたパケット転送が完了した後に使用するべく、ＶＬ（Ｇｒｎｔ）とＴＢＧ（Ｇｒｎｔ）をＦＩＦＯ（出力ポート許可ＦＩＦＯ）内に保存する。次のパラメータを設定する、
ＶＬ（Ｇｒｎｔ）［ｔａｉｌ］＝ＧＲＮＴ．ＶＬ
ＴＢＧ（Ｇｒｎｔ）［ｔａｉｌ］＝ＧＲＮＴ．ＴＢＧ
ｔａｉｌ＝（ｔａｉｌ＋１）（モジュロｆｉｆｏ−ｓｉｚｅ）
以上、相互接続装置と関連するフロー制御ユニットと制御アービタ間におけるＴＢＳの整合性を維持する方法およびシステムについて説明した。特定の模範的な実施例を参照し、本発明について説明したが、これらの実施例には、本発明の広い精神および範囲を逸脱することなく、様々な変更および変化を加えることが可能であることは明白であろう。従って、本明細書および図面は、限定を意図するものではなく、例示を目的とするものとして見なされなければならない。
【図面の簡単な説明】
【００７６】
【図１】スイッチファブリックによってサポートされる従来技術によるシステムエリアネットワークの図。
【図２Ａ】本発明の模範的な実施例によるスイッチの図。
【図２Ｂ】本発明の模範的な実施例によるスイッチの図。
【図３】本発明の一実施例による２つのスイッチ間におけるリンクレベルのフロー制御の詳細な機能ブロックダイアグラム。
【図４】本発明の一実施例による模範的なフロー制御パケットとその関連フィールド。
【図５】本発明の一実施例によるスイッチのフロー制御ユニットと中央アービタ間において整合性を維持するためのデュアルループフロー制御ダイアグラム。
【図６】フロー制御パケットを隣接装置に送信するための図５のデュアルループフロー体系と整合性を有する模範的なフローチャート。
【図７】パケットストリームを受信するための図５のデュアルループフロー体系と整合性を有する模範的なフローチャート。
【図８】データパケットを伝送するための図５のデュアルループフロー体系と整合性を有する模範的なフローチャート。
【図９】要求を処理するための図５のデュアルループフロー体系と整合性を有する模範的なフローチャート。
【図１０】出力ポートによって許可を処理するための図５のデュアルループフロー体系と整合性を有する模範的なフローチャート。
【図１】
2005033769.tif 000003
【図２Ａ】
2005033769.tif 000004
【図２Ｂ】
2005033769.tif 000005
【図３】
2005033769.tif 000006
【図４】
2005033769.tif 000007
【図５】
2005033769.tif 000008
【図６】
2005033769.tif 000009
【図７】
2005033769.tif 000010
【図８】
2005033769.tif 000011
【図９】
2005033769.tif 000012
【図１０】
2005033769.tif 000013