(58)【調査した分野】(Int.Cl.,DB名)
前記クレジット編成情報が、前記受信バッファのバッファ割当てに使用される最小ブロックサイズに対応する割当て単位(AU)を含み、各バッファクレジットが、前記AUの倍数であるバッファ空間に対応する、請求項1に記載の装置。
前記ピアリンクインタフェースから受信した前記クレジット編成情報が、AU変数(vAU)及びCU変数(vCU)を含み、前記AU変数及び前記CU変数がそれぞれ、対数スケールを用いて対応するAU及びCUを定義するように符号化される、請求項3に記載の装置。
データが、リンクパケットを介して前記リンク上を転送され、クレジットリターンACKが、リンクパケットの側波帯フィールドに符号化され、前記リンクインタフェースが、リンクパケットの前記側波帯フィールドからクレジットリターンACKデータを抽出する回路及び論理を含む、請求項1から6のいずれか一項に記載の装置。
データが、リンクパケットを介して前記リンク上を転送され、複数のVLに対応する複数のクレジットリターンACKが単一のデータ単位に符号化され、前記リンクインタフェースが、前記単一のデータ単位から前記複数のVLのクレジットリターンACKデータを抽出する回路及び論理を含む、請求項1から7のいずれか一項に記載の装置。
前記受信バッファが、それぞれ対応するVLの専用である複数のVLバッファと、複数のVLの間で共有される少なくとも1つのバッファとに区分化される、請求項1から9のいずれか一項に記載の装置。
前記送信ポートの前記回路及び論理が、クレジットマネージャを実装する回路及び論理を含み、前記受信バッファ中の利用可能なバッファ空間の全てのクレジット管理及びトラッキングが、前記クレジットマネージャによって実行される、請求項1から10のいずれか一項に記載の装置。
送信機において、受信機の受信バッファ中に実装される複数のバッファのそれぞれのクレジットの初期割当てを受信するステップであって、前記受信バッファが、それぞれ対応する仮想レーン(VL)に割り当てられる複数のVLバッファを含む複数のバッファに区分化された全体バッファ空間を有するステップと、
前記送信機において、前記受信機から戻される各クレジットによって表されるバッファ空間の量を示すクレジット編成情報を受信するステップと、
前記受信機によって受信されるように、前記送信機からデータをリンク上に伝送するステップと、
前記伝送されたデータによって消費される前記受信バッファ中のバッファ空間の量及び前記クレジット編成情報に基づいて前記受信バッファ中の適用可能なバッファについてバッファクレジットを割当て解除するステップと、
前記受信機からクレジットリターン確認応答(ACK)を受信するステップであって、各クレジットACKがVLを識別し、1つ又は複数のクレジットが前記VLのデータのバッファリングに割り当てられた少なくとも1つのバッファの空きバッファ空間の量を示すステップと、
送信ポートにおいて、前記割当て解除されたバッファクレジット及び前記クレジットリターンACKを介して戻されたクレジットに基づいて、前記受信バッファ中の各バッファに利用可能なクレジットをトラッキングするステップとを含む、方法。
割当て単位(AU)及びクレジットリターンACK単位(CU)をそこから決定することができるクレジット編成情報を前記受信機から受信するステップであって、前記AUが、前記受信バッファ中のバッファ割当てのための最小ブロックサイズを定義し、前記CUが、前記クレジットリターンACKを介して前記受信機から戻される各クレジットによって表される受信機のAUの数を定義するステップとをさらに含む、請求項12に記載の方法。
前記送信機及び前記受信機が、前記リンクを介して結合された近隣デバイスの第1及び第2のリンクインタフェース中にそれぞれ実装されるように構成され、前記送信機が、第1の受信機をさらに含む前記第1のリンクインタフェース中に第1の送信機を含み、前記受信機が、第2の送信機をさらに含む前記第2のリンクインタフェース中に第2の受信機を含み、
前記方法が、
前記第1の受信機の第1のクレジット編成情報を前記第2の送信機に送信するステップであって、前記第1のクレジット編成情報が、第1のvAU及び第1のvCUを含むステップと、
前記第1の受信機において、前記第2の受信機の第2のクレジット編成情報を受信するステップであって、前記第2のクレジット編成情報が、第2のvAU及び第2のvCUを含むステップと
をさらに含む、請求項14に記載の方法。
データが、リンクパケットを介して前記リンク上を転送され、クレジットリターンACKが、リンクパケットの側波帯フィールドに符号化される、請求項12から16のいずれか一項に記載の方法。
データが、フリットを含むデータ単位で前記リンク上を転送され、複数のVLに対応する複数のクレジットリターンACKが、単一のフリットに符号化される、請求項12から17のいずれか一項に記載の方法。
前記受信バッファが、複数のVLバッファと、複数のVLの間で共有される少なくとも1つのバッファとに区分化される、請求項12から19のいずれか一項に記載の方法。
前記送信ポートの前記回路及び論理が、クレジットマネージャを実装する回路及び論理を含み、前記受信バッファ中の利用可能なバッファ空間の全てのクレジット管理及びトラッキングが、前記クレジットマネージャによって実行される、請求項21に記載の装置。
クレジット編成情報が、前記受信バッファのバッファ割当てに使用される最小ブロックサイズに対応する割当て単位(AU)を含み、各バッファクレジットが、前記AUの倍数であるバッファ空間に対応する、請求項21又は22に記載の装置。
システムオンチップ(SoC)を含み、前記送信エンジン及び前記受信エンジンのそれぞれに結合されたPCIeインタフェースに結合された前記PCIeインタフェースを含むプロセッサをさらに含む、請求項21から24のいずれか一項に記載の装置。
【発明を実施するための形態】
【0009】
本明細書では、ハイパフォーマンスファブリック内で柔軟なクレジット交換を実施するための方法、装置、及びシステムの実施形態について説明する。以下の説明では、本発明の実施形態が完全に理解されるように、多数の具体的な詳細について述べる。ただし、当業者なら、本発明がこれらの具体的な詳細のうちの1つ又は複数がない状態で実施することもできること、或いは他の方法、構成要素、材料などを用いて実施することもできることを理解するであろう。他に、周知の構造、材料、又は動作については、本発明の特徴を曖昧にすることを避けるために、詳細には図示又は説明しない。
【0010】
本明細書全体を通じて、「1実施形態」又は「実施形態」と述べるときは、その実施形態に関連して述べられる特定の機能、構造、又は特性が、本発明の少なくとも1つの実施形態に含まれることを意味する。したがって、本明細書中の様々な箇所で「1実施形態では」又は「実施形態では」という言い回しがあっても、その全てが必ずしも同じ実施形態について言及しているわけではない。さらに、これらの特定の機能、構造、又は特性は、1つ又は複数の実施形態において、任意の適当な形で組み合わせられることもあり得る。
【0011】
分かりやすいように、本明細書の図面中の個々の構成要素は、特定の参照番号ではなく、図中の標識で呼ぶこともある。さらに、特定の種類の構成要素(特定の構成要素ではなく)を指す参照番号は、参照番号の後に「代表例」を意味する「(typ)」を付して示してあることもある。これらの構成要素の構成は、図面に示す同様の構成要素の代表的なものではあるが、簡潔かつ明瞭にするために、標識は付していないことを理解されたい。逆に、「(typ)」は、その構成要素や要素などが開示した機能や実施態様、目的などのために使用されるのが普通であることを意味していると解釈すべきではない。
【0012】
本明細書に記載する実施形態の特徴によれば、メッセージパッシング交換サーバ相互接続ネットワークを定義するアーキテクチャが提供される。このアーキテクチャは、OSIネットワークモデルのレイヤ1及び2にまたがり、レイヤ3についてはIETFインターネットプロトコルをレバレッジし、アーキテクチャのレイヤ4については新たな仕様とレバレッジ仕様の組合せを含む。
【0013】
このアーキテクチャは、スーパーコンピュータなどの形式定義によって、又はクラウドコンピューティングでしばしば見られるようにそれらが実行するメッセージパッシングアプリケーションにより何らかの協調的な方法で機能する複数のサーバのグループ又はクラスタなどの単純な関連付けによって、CPUと論理メッセージパッシング構成を含むその他のサブシステムとを相互接続するように実装することができる。相互接続された構成要素は、ノードと呼ばれる。ホストと呼ばれる1つのタイプのノードは、ユーザモードソフトウェアが実行されるタイプである。1実施形態では、ホストは、そのコヒーレントな領域内のコア又はCPUの数に関わらず単一のキャッシュコヒーレントメモリ領域を含み、様々なローカルのI/O及び記憶サブシステムを含むことができる。ホストが実行するソフトウェアのタイプが、ユーザアプリケーションノード、或いは記憶又はファイルサーバなど、より詳細な機能を定義することができ、より詳細なシステムアーキテクチャを記述する役割を果たす。
【0014】
最上位レベルでは、このアーキテクチャは、以下の構成要素を定義する。
・ホストファブリックインタフェース(HFI)、
・リンク、
・スイッチ、
・ゲートウェイ、及び
・総合管理モデル。
【0015】
ホストファブリックインタフェースは、最小では、アーキテクチャの物理レイヤ及びリンクレイヤを実装する論理からなり、ノードをファブリックに接続して、そのノードがパケットを他のサーバ又はデバイスと送受信することができるようになっている。HFIは、オペレーティングシステム及びVMM(仮想マシンマネージャ)をサポートする適当なハードウェアインタフェース及びドライバを含む。HFIは、上位レイヤのプロトコルの実行又は加速及び/或いはトランスポートプロトコルのオフロードのための特殊論理を含むこともできる。HFIは、ネットワーク管理構成要素からのメッセージに応答する論理も含む。各ホストは、HFIを介してアーキテクチャファブリックに接続される。
【0016】
リンクは、HFIをスイッチに接続する、スイッチをその他のスイッチに接続する、又はスイッチをゲートウェイに接続する、全二重ポイントツーポイント相互接続である。リンクは、回路基板トレース、銅線、又は光ケーブルで、様々な物理的構成を有することができる。1実施形態では、PHY(物理レイヤ)、ケーブル、コネクタのストラテジは、イーサネット(登録商標)のもの、具体的には100GbE(IEEE802.3bjドラフト標準(現在のドラフト2.2)に定義されるイーサネット(登録商標)リンクなど、100ギガビット毎秒のイーサネット(登録商標))に従う。このアーキテクチャは柔軟であり、100GbE帯域幅を超える可能性がある将来のイーサネット(登録商標)又はその他のリンク技術の使用に対応している。ハイエンドスーパーコンピュータ製品は、特殊目的(はるかに帯域幅の大きい)PHYを使用する可能性があり、これらの構成では、アーキテクチャ製品との相互運用性は、異なるPHYを有するポートを有するスイッチに基づくことになる。
【0017】
スイッチは、OSIレイヤ2の構成要素であり、このアーキテクチャの管理インフラストラクチャによって管理される。このアーキテクチャは、インターネットプロトコルを、そのOSIレイヤ3又はインターネットワーキングレイヤとして定義するが、アーキテクチャは、IPドメインには何も指定せず、またIP関連デバイスも管理しない。アーキテクチャファブリックと外部ネットワーク、特にイーサネット(登録商標)との間の接続性をサポートするデバイスは、ゲートウェイと呼ばれる。軽量なゲートウェイは、提供する機能が削減され、厳密にイーサネット(登録商標)のレイヤ2のみの挙動になる可能性がある。フル装備のゲートウェイは、レイヤ3以上でも動作することができるので、ルータとして挙動することができる。このアーキテクチャによって提供されるゲートウェイの仕様は、イーサネット(登録商標)のカプセル化のための機構を含み、ゲートウェイがアーキテクチャの残りの部分と整合性のあるイーサネット(登録商標)データセンタネットワークへの柔軟な接続性を可能にするためにファブリック上でどのように挙動するかを含む。インターネットワーキングプロトコルとしてIPを使用することにより、IETFで承認されているトランスポート、すなわちTCP、UDP、及びSCTPを使用して、アーキテクチャのファブリックを超えてメッセージを送受信することができる。
【0018】
図1は、1実施形態によるアーキテクチャの様々な構成要素及び相互接続を示すシステム100のハイレベル図である。このアーキテクチャの中心の機能は、ファブリック102であり、ファブリック102は、アーキテクチャのリンク及びスイッチを介して相互接続されたHFI及びゲートウェイの集合体を含む。
図1に示すように、ファブリック102の構成要素は、離散した単ノードプラットフォーム106をそれぞれホストとする複数のHFI104(1つのみ示す)と、仮想プラットフォーム110をホストとするHFI108と、多ノードプラットフォーム116のノード114
1及び114
nをそれぞれホストとするHFI112
1及び112
nと、一体化された単ノードプラットフォーム120のHFI118
1及び118
nと、高基数スイッチ122と、スイッチ124及び126と、1つ又は複数のファブリックマネージャ128と、ゲートウェイ130と、リンク132、134、136
1、136
n、138、140
1、140
n、142、144、148と、クラウド150としてまとめて示してある複数の追加のリンク及びスイッチとを含む。
【0019】
上述のように、スイッチは、レイヤ2のデバイスであり、ファブリック内のパケット転送機構として作用する。スイッチは、中央に設けられ、ファブリック管理ソフトウェアによって管理され、各スイッチは、管理トランザクションに応答する管理エージェントを含む。「中央に設けられる」とは、転送テーブルが、ファブリック管理ソフトウェアによって、適応経路選択を行う代替経路のように、特定のファブリックトポロジ及び転送機能を実施するようにプログラムされることを意味する。スイッチは、適応経路選択及びロードバランシングなどのQoSフィーチャの実行を担当し、また、輻輳管理機能を実施する。
【0020】
図2は、このアーキテクチャの、ファブリックリンクを介してデータを転送するレイヤを示す図である。これらのレイヤは、物理(PHY)レイヤ、リンク転送サブレイヤ、リンクファブリックサブレイヤ、及びトランスポートレイヤを含む。
図2の左側は、これらのレイヤのOSI参照モデルへのマッピングであり、PHYレイヤは、レイヤ1(PHYレイヤ)にマッピングされ、リンク転送サブレイヤ及びリンクファブリックサブレイヤは、まとめてレイヤ2(リンクレイヤ)にマッピングされ、トランスポートレイヤは、レイヤ4(トランスポートレイヤ)にマッピングされている。
【0021】
このアーキテクチャでは、信号は、物理レイヤでポートにグループ化される。これらのポートは、モノリシックなエンティティとして挙動し、モノリシックなエンティティとして制御することができ、モノリシックなエンティティとして報告される。ポートは、1つ又は複数の物理レーンを含み、各レーンは、各通信方向に1対ずつ、物理伝送媒体に実装される2対の差動ファイバ対からなる。1つのポートを構成するレーンの数は、実施態様によって決まる。ただし、リンク転送サブレイヤのアーキテクチャは、有限の組のポート幅をサポートしている。特定のポート幅を基本ポート幅としてサポートして、ケーブル及びチップの設計の共通の目標を見込む。ポート幅は、1x、4x、8x、12x及び16xを含む。ここで、「x」は、物理レーンの数を示す。欠陥レーンの検出など、いくつかの状況では、リンクは、減少したレーン幅で動作することがある。
【0022】
リンク転送サブレイヤは、物理レイヤとリンクファブリックサブレイヤとの間のインタフェースとして機能する。(リンクファブリックサブレイヤの)リンクファブリックパケットは、64ビットフロー制御ディジット(FLIT、Flit又はフリット、フロー制御ディジットの近似縮約)にセグメント化される。
図3は、バンドル302にグループ化された複数のフリット300の一例を示す図である。各フリット300は、8バイトのデータを構成する64データビットを含む。
【0023】
リンク転送サブレイヤは、複数のレーンを、信頼できる方法で、リンクを介して、フリット及びそれらに関連するクレジットリターン情報を転送することができる複数のチームに形成する。これは、リンク転送パケット(LTP)と呼ばれる1056ビットバンドルを用いて実施され、リンク転送パケットは、リンクファブリックサブレイヤに関連する。
図3は、16フリットのデータを含むLTPのデータ部分も示している。さらに、LTPは、フリットタイプ情報、CRCデータ、及び任意選択データ(
図3には図示せず)も含む。LTPの例については、様々な図(例えば
図5〜
図11)に示し、以下でさらに詳細に説明する。
【0024】
ファブリックパケットは、64ビットフリットと、各フリットごとのフリットタイプビットとで構成される。ファブリックパケットの最初のデータフリットは、ヘッドフリットと呼ばれる。ファブリックパケットの最後のデータフリットは、テールフリットと呼ばれる。ファブリックパケット中のその他の任意のデータフリットは、ボディフリットと呼ばれる。ファブリックパケット400の一例を、
図4に示す。
【0025】
フリットタイプビットは、ボディフリットを他のフリットタイプから識別するために各フリットごとに設けられる。1実施形態では、ボディフリットは、1に設定されたフリットタイプビットで符号化され、64ビットのデータを含む。その他の全てのフリットは、0に設定されたタイプビットでマークされる。ヘッドフリットは、1に設定されたフリット[63]で符号化される。その他の全ての(非ボディの)フリットは、0に設定されたフリット[63]で符号化される。テールフリットは、1に設定されたフリット[62]で符号化される。その他の全ての(非ボディ/ヘッド)のフリットは、0に設定されたフリット[62]で符号化される。フリットの符号化を、以下の表1に要約する。
【0027】
制御フリットは、表2に要約する。リンク転送レイヤのみによって使用される7つの制御フリット(LT制御フリット)は、ヌルLTPで送信される。残りの制御フリットは、2つのグループに分割される。ファブリックパケット(FP)フリットは、制御フリットHeadBadPkt、BodyBadPkt、及びTailBadPkt、並びに通常のパケットのフリットHead、Body、及びTailを含む。リンクファブリック(LF)コマンドフリットは、フリットIdle、VLMrkr、及びCrdtRetを含む。FPフリット及びLFコマンドフリットは、リンクを介して伝送するために、信頼できるLTP内で混合することができる。
【0029】
遊休コマンドフリットは、データストリームに挿入するファブリックパケットフリットがないときに、リンクファブリックレイヤによって使用される。データ経路の全幅が遊休を含む場合には、リンク転送レイヤは、入力バッファに挿入されたフリットストリームからこれらを除去する。データ経路が遊休及び非遊休フリットの両方を含む場合には、遊休は除去されない。これは、リンク転送レイヤがリンクの遠端にあるリンクファブリックレイヤに対して同じデータ経路組成を提示するようにするために実施される。リンク転送レイヤが、リンクファブリックレイヤから継続するフリットを有していない場合には、リンク転送レイヤは、元のフリットがリンクを介して送信されるときに、遊休を挿入する。元のフリットとは、再伝送又は再現されたフリットを含む再現バッファから送信されるフリットに対して、リンクを介して最初に送信されるフリットである。
【0030】
リンク転送パケットは、リンクを介して伝送するために16個のフリットを保持する。信頼できるLTPは、再伝送要求がないことで、それがリンクピアによって上手く受信されていることが分かることを保証するのに十分に長い期間、再現バッファに保持される。再現バッファ位置ポインタは、送信機(NxtTxLTP)及び受信機(NxtRxLTP)の両方で各LTPごとに維持されるが、LTPの一部として交換されない。伝送エラーが受信機で検出されると、受信機は、NxtRxLTP再現バッファ位置ポインタを含むRetryReqLTPを送信機に送信する。RetryReqLTPを受信したのに応答して、再現バッファ中のLTPは、RetryReqLTP(ピアNxtRxLTP)で始まり、最後に書き込まれた再現バッファ位置(NxtWrLTP−1)で終わる、元の順序で再伝送される。ヌルLTPは、再現バッファに保持されず、再伝送されない。
【0031】
リンクファブリックコマンドフリットは、LTP中のFPフリットと混合することができる。ただし、LFコマンドフリットは、ファブリックパケットの一部ではない。LFコマンドフリットは、リンクの一端のリンクファブリックサブレイヤから、リンクの他端のリンクファブリックサブレイヤまで制御情報を搬送する。
【0032】
1実施形態では、標準検出LTP、14ビットCRC LTP、及び強化検出LTPという、3つのLTPのフォーマットがある。標準検出LTPの実施形態を、
図5に示す。16個のフリットに加えて、各標準検出LTPは、LTPのコンテンツをカバーする16ビットCRCを有する。例示を目的として、
図5に示すフリットは、ビット64がフリットタイプビットである65ビットとして示してある。
【0033】
14ビットCRC LTPの実施形態を、
図6に示す。16個のフリットに加えて、各14ビットCRC LTPは、2ビットのクレジット側波帯チャネルと、LTPのコンテンツをカバーする14ビットCRCとを有する。フロー制御クレジットは、特殊LFコマンドフリット又はLTPクレジット側波帯チャネルのいずれかのLTP内に含めて伝送される。
【0034】
標準検出LTPに加えて、リンクは、16個のフリットを保持し、4つの12ビットCRCフィールドを有する、任意選択の強化検出LTPもサポートすることができる。
図7は、強化検出LTPの実施形態のフォーマットを示す図である。4つのCRCフィールドはそれぞれ、16個のフリット全てをカバーする。4つのCRCのうちいずれかが不良である場合には、LTPは再伝送される。4つの12ビットCRCに対して、2通りのCRC計算オプションがある。第1のオプション(48b重複)は、各計算がLTP内の全てのビットをカバーする、4つの重複計算を使用するものである。第2のオプション(レーンあたり12b−16bCRC)は、各計算が4つのレーンのうちの1つを流れる全てのビットに限定された、4つの非重複計算を使用するものである。
【0035】
上述のように、リンク転送レイヤで使用されるLT制御フリットは、ヌルLTPで送信される。ヌルLTPは、再現バッファ中のスペースを消費せず、再伝送されない。ヌルLTPは、上記の表2に要約したリンク転送LT制御フリットのうちの1つを用いて識別される。ヌルLTPのタイプのほとんどは、逐次対で送信され、2つのうちの少なくともいずれか1つはエラーなくリンクピアによって受信されること、又はその両方にエラーがあるときにRetrainRetryReqが自動的に生成されることを保証するようになっている。標準検出ヌルLTPの一例を、
図8に示す。
【0036】
標準検出ヌルLTPは、単一の識別制御フリットと、975個の反転ビットと、標準検出16ビットCRCフィールドとを含む。強化検出ヌルLTPは、単一の識別制御フリットと、975個の反転ビットと、4つの強化検出12ビットCRCフィールドとを含む。14ビットCRCを使用するときには、ヌルLTP中の2つの側波帯ビットは無視する。
【0037】
4つのレーンを有するリンクに接続された4x対応ポート及び8x対応ポートの両方で、一度に1つのLTPが、リンクを介して伝送される。これを、標準検出LTP及び強化検出LTPの両方について、それぞれ
図9a及び
図9bに、リンクファブリックデータ経路図を用いて示し(CRCフィールドは正しい縮尺ではないことに留意されたい)、対応する信号処理及び転送経路の実施形態は、
図10に示す。14ビットCRC LTPは、LCRC[15:0]フィールドがLCRC[13:0]フィールド及びC[1:0]フィールドの組合せで置換されることを除けば、
図8に示す標準検出LTPと同様である。フリット伝送順序は、フリット0から開始され、フリット15で終了する。
【0038】
1実施形態では、各レーンを介したデータの物理伝送は、各レーンに対応するデータが、サイクルごと、レーンごとに復号され、非直列化され、4バイトにグループ化される、シリアル2レベルビット非ゼロ復帰(NRZ)符号化ビットパターンを利用する。これにより、サイクルごとに2つのフリットを構成する16バイトが転送されることになる。例えば、
図9a及び
図10は、フリット2つ分の幅を有する実施態様に特有のデータ経路を想定しており、この想定では、フリット0及びフリット1が同時に伝送され、フリット2及びフリット3が同時に伝送される、といった具合になる。LCRCは、リンク転送サブレイヤによって計算される。
【0039】
図11は、2つの4レーンリンクが連動して、8個のレーンを介してデータが伝送される8xデータ経路をサポートする、LTP伝送方式を示す図である。図示のように、この方式では、2つのLTPの4つのフリットが、リンクファブリックサブレイヤとリンク転送サブレイヤの間のインタフェースで並列に処理される。
【0040】
上述のように、このアーキテクチャは、ファブリックパケット、フリット、及びリンク転送パケットの、3つのレベルのデータ単位細分性を利用して、データ転送をサポートしている。リンク転送レイヤにおける伝送単位は、LTPである。図示のように、各LTPは、名目上はフリット16個分の長さを有するが、上述のように、LTPの実際のサイズは、使用される個々のCRC方式に応じて変化する可能性があり、フリット16個分の長さを有するLTPという言い方を用いるのは、CRCビット及び16個のビット65を除く、LTPに含まれるデータの64ビットフリットの数に対応する。
【0041】
4つの物理レーンを含むリンクの1実施形態の物理レイヤ(「PHY」とも呼ぶ)構造を、
図12に示す。PHYは、リンク相互接続の物理構造を定義し、構成要素A及びBで示すものなど、2つのリンクピアの間の特定のリンク上での信号の動作の詳細を扱うことを担当する。このレイヤは、電気的なレベル、タイミングの特徴、及び論理上の問題など、平行レーンを横切る情報の各ビットの送受信に伴う信号線上のデータ転送を管理する。
図12に示すように、各相互接続リンクの物理接続性は、各方向にレーン0〜3を含む、4つの差動信号対1200で構成される。各ポートは、2つの1方向リンクからなるリンク対をサポートして、2つのピア構成要素の間の接続を完成する。これは、両方向のトラフィックを同時にサポートする。例示のために、また理解を容易にするために、
図10に示すレーンの「スウィズル」は、
図12には示していない。ただし、いくつかの実施形態では、送信レーンと受信レーンがスウィズルされることは理解されるであろう。
【0042】
リンクポートを備えた構成要素は、
図12に示すように、リンクピアとして定義される1対の1方向ポイントツーポイントリンクを用いて通信する。各ポートは、送信(Tx)リンクインタフェース及び受信(Rx)リンクインタフェースを含む。図示の例では、構成要素Aは、構成要素BのRxポート1204に接続されたTxポート1202を有する。一方、構成要素Bは、構成要素BのRxポート1208に接続されたTxポート1204を有する。一方の1方向リンクは、構成要素Aから構成要素Bに伝送し、他方のリンクは、構成要素Bから構成要素Aに伝送する。「送信」リンク及び「受信」リンクは、どちらの構成要素のポートがデータを伝送し、どちらが受信しているかに関して定義される。
図12に示す構成では、構成要素Aの送信リンクは、構成要素AのTxポート1202から構成要素BのRxポート1204にデータを伝送する。この同じ構成要素Aの送信リンクが、ポートBの受信リンクである。前述のように、リンクポート間でデータを転送する機能単位は、LTPである。各LTPは、リンクの両側の送信ポート及び受信ポートによって定義される特定のリンクを介した1方向の伝送に特有である。LTPは、1回のリンク転送の分の寿命を有し、LTPは、適用可能なVLバッファからフリットを引き出し、それらを一度に16個ずつそれぞれのLTPにアセンブルすることによって動的に生成される。LTP伝送ストリーム1210及び1212によって示すように、LTPは、フリットのストリームとして伝送され、個々のLTPの最初のフリット及び最後のフリットは、
図4を参照して上述したように、ヘッドフリットビット及びテールフリットビットによって表される。
【0043】
上述のように、このアーキテクチャは、主として宛先経路指定されたファブリックパケット又はFPを含み、レイヤ4のペイロードサイズが0バイトから10240バイトであるパケット送達機構を定義する。これにより、単純なULP確認応答からカプセル化イーサネット(登録商標)ジャンボフレームまでの範囲のメッセージの送信が効率的にサポートされる。ファブリックパケットは、HFIにイングレスするペイロード及びHFIからエグレスするペイロードの論理単位を表す。ファブリックパケットは、ファブリックのエンドツーエンドの寿命を有することから、そのように名付けられている。さらに詳細には、ファブリックパケットの寿命は、FPの発信元アドレス及び宛先アドレスによって定義されるファブリックのエンドポイント間でそのFPのコンテンツを転送するのに必要な時間である。FPの各転送経路は、少なくとも1つのリンクを介した転送を含むことになり、転送経路が1つ又は複数のスイッチを横切るときには、複数のリンクを介した転送を含むこともある。
【0044】
フリットをFP及びLTPと組み合わせて使用することにより、このアーキテクチャに特有のデータ転送機能性が高められる。特に、FPと、フリットと、LTPとを分離すると、仮想レーンの使用、並びにQoS及びファブリックロバストネスの様々な特徴に対応できる。
【0045】
上述のように、フリットは、単独では伝送されるのではなく、16個のフリットからなるグループが、リンク転送パケットにパックされる(バンドリングされる)。これにより、これらのフリットは、共通のリンクCRCを共有することができる。1つのLTP内のフリットは、多くの異なるファブリックパケットに由来するものである可能性があり、このことから、リンクプロトコルに、他のファブリックと比較していくつかの興味深い特性が与えられる。効率的なパケットプリエンプション及びインタリーブ機構を使用することにより、このアーキテクチャは、異なるストリームのデータ転送のインタリーブをサポートして、ヘッドオブラインブロッキング効果を実質的に解消し、さらには物理リンク上で物理的に転送されている大きな単一のパケットのブロッキング効果も解消する。ファブリックパケットと、フリットと、LTPとの間の関係を、
図15及び
図16に示す。これらの図面については、以下でさらに詳細に説明する。
【0046】
このアーキテクチャは、クレジットに基づくフロー制御を使用して、リンクの受信機側のバッファ資源を管理し、送信機がいつフリットを送信することができるかを制御する。この手法では、ファブリックポートがフリットを送信するためには、ファブリックポートは、受信側ポートで必要とされるバッファスペースに利用可能な十分なフロー制御クレジットを必要とする。1実施形態では、受信機は、リンク上でサポートされる仮想レーン(VL)に、単一のプールの受信バッファを提供する。バッファプールの割当ては、リンクの送信機側の論理によって管理される。専用バッファは、サポートされる各VLに割り当てられる。さらに、送信機は、スペースの一部分を、VL間で動的に割り当てられる共有プールとして管理することができる。クレジットに基づくフロー制御とは、リンク上のデータ転送が、強固に管理されている、すなわち無許可のデータ転送が存在しないことを意味し、また、ファブリックがいわゆる「無損失」ファブリックであることも意味する。この場合、無損失とは、単に、通常の動作中に、フリットと、したがってパケットとが、輻輳によってドロップすることがないことを意味する。
【0047】
フロー制御クレジットなどの制御情報は、リンクファブリック(LF)コマンドフリット及びリンク転送(LT)制御フリットに搬送される。LFコマンドフリット及びLT制御フリットは、送信機のフリットストリームに任意の点で挿入することができる。さらに、いくつかのLTPフォーマットの側波帯情報を使用して、さらに少ないオーバヘッドでクレジットを転送することができる。LFコマンドフリット及びLT制御フリットは、リンク送信機によって生成され、リンク受信機によって消費される。
【0048】
このアーキテクチャは、リンク転送パケット及びファブリックパケットのCRCを含み、データの完全性を保証している。また、このアーキテクチャは、正しく受信されないLTPについて、リンクレベルの再試行を行う。LTPの再試行により、リンクの有効ビット誤り率が大幅に改善され、物理BERのわずかな劣化と引き替えに電力消費を低下させることができるPHYストラテジを使用することが可能になる。また、LTPの再試行は、許容可能なシステムレベルの誤り率を維持するためにファブリック中の多数のリンクがはるかに良好なリンク当たりのBER特性を必要とする大きなファブリックでも有用である。
【0049】
プリエンプション及びインタリーブ
L2リンクレイヤは、様々なパケットのフリットを、それらのパケットが異なるVLにある限り、それらのフリットが1つのリンクを介して送信されるときにインタリーブすることを可能にする。インタリーブを行う1つの目的は、所与のリンクの使用率を最大限に高めることである。ある送信パケットが何らかの理由でバブルによって中断される場合には、第2のパケットを遊休のままにしておく代わりに、第2のパケットをチャネルにインタリーブすることができる。プリエンプションと呼ばれるインタリーブを行う第2の理由は、優先順位の高いパケットに、転送中の優先順位の低いパケットを中断させて、優先順位の高いパケットの待ち時間を減少させることである。
【0050】
インタリーブ時には、ファブリックパケットのフリットの全て又は一部分が、リンクを介して伝送されるフリットストリーム内の他のFPのフリットとインタリーブされる。送信機は、ポートの出力待ち行列で送信するために利用可能なFPの中から、伝送するフリットを選択する。1実施形態では、単一のVL内のFPは順に送達されるので、1つの仮想レーン内では、1つのパケットの全てのフリットが、(当該VL内の)後続のパケットのどのフリットが伝送されるよりも前に伝送される。
【0051】
異なるVLの間では、順序は指定されないので、異なるVLのパケットのフリットは、そのフリットストリーム内で(また各VL内でフリットの順序が維持される限り、所与のLTP内で)任意にインタリーブすることができる。いくつかの送信機の実施態様では、パケット間のインタリーブの量を制限することを選択することもできる。
【0052】
プリエンプション時には、より優先レベルの高いファブリックパケットのフリットは、優先レベルの低いFPのパケットをプリエンプトする。1実施形態では、各仮想レーンは、それぞれの優先レベルと関連付けられる。送信機は、優先順位の高いVLのフリットを、優先順位の低いVLのフリットより前に、そのリンクのLTPに挿入するように構成される。送信機は、優先順位の高いフリットを、フリット1つ分よりも大きい境界に挿入することを選択することもできる。さらに、送信機は、同じ優先順位のVLのフリットをインタリーブすることを選択することもでき、或いは、送信機は、1つのパケットの全てのフリットを、同じ優先順位の異なるVL中の異なるパケットのフリットを送信する前に、リンクに注入することもできる。リンク上の受信機は、入来するフリットストリームを、待ち行列に挿入し、(スイッチ内の受信機の)次のホップに転送するために、VLごとに分離する。一般に、少なくとも1つの所与のリンクでは、受信機の実施態様は、送信機が生成することができる全ての範囲のインタリーブをサポートする。いくつかの実施形態では、ファブリックにわたって、同じ範囲のインタリーブが実施される。必要に応じて、リンクごとに異なるレベルのインタリーブをサポートすることもできる。
【0053】
パケットプリエンプションの特徴によれば、第1の優先レベル(例えば高い優先順位)を有するVL上のパケットBのフリットは、より低い優先順位のVL(すなわち第1の優先レベルより低い優先レベルを有するVL)上のパケットAのフリットのストリームをプリエンプトすることができる。この場合には、パケットAのヘッドフリット及びパケットAの0個以上のボディフリットの後に、パケットBのヘッドフリットが続く可能性がある。このヘッドフリットは、新たなパケットが始まっていることを示すので、受信機は、VL識別子を決定するためにL2ヘッダ中のSCフィールドを探す。パケットBのヘッドフリットの後には、0個以上のボディフリットが続き、最後に、パケットBの終端を成すテールフリットが続く。パケットBの終端後に、パケットAの伝送が、0個以上のボディフリットと、それに続くテールフリットとで再開される。
【0054】
パケットプリエンプションは、連続的に優先順位が高くなるパケット(連続的に優先順位が高くなるVLのパケット)によってパケットがプリエンプトされるときに、ネスト化することができる。1実施形態では、これは、リストの先頭にアクティブなパケットを含む連結リストとしてモデル化される。現在のパケットがプリエンプトされるときには、新たなパケットが、リストの先頭に追加される。プリエンプトを行っているパケットが終了すると、そのパケットはリストから除去され、次に再開することが予想されるパケットが、リストの新たな先頭になる。一度にリストに保持することができるパケットの最大数は、サポートされるVLの数と等しい。
【0055】
上記の説明では、優先レベルを使用してプリエンプションを説明したが、プリエンプションは優先順位の高いパケットしか使用してはならないという要件があるわけではない。伝送に利用可能な現在のパケットのフリットがない(その結果として「バブル」を生じる)が、優先順位の低いパケットに利用できるヘッドフリットがある場合もある。この優先順位の低いパケットのヘッドフリット及び連続したボディフリットは、送信することができる。この新たなヘッドフリットによって、このパケットがリストの先頭に追加されることになり、受信機は、この新たなパケットを正確にトラッキングすることになる。
【0056】
パケットは、第2のパケットのヘッドフリットがその第1のパケットのテールフリットより前に送信されるときには、第2のパケットとインタリーブされていると考えられる。最も単純な場合のインタリーブでは、割り込むヘッドフリットに続く全てのボディフリットは、第2のパケットのテールフリットまで第2のパケットに属するものであり、その後に、第1のパケットの残りのパケットフリットが再開される。この単純な場合を、
図13に図示する。
【0057】
このフリットのグループは、フリットストリーム中のフリットの順序(上から下)に対応する。このグループ中の第1のフリットは、VL0と標識されている仮想レーン0を介して転送されているファブリックパケットのヘッドフリットである。VL0のヘッドフリットは、FPがフリット4つ分(1つのヘッドフリット、2つのボディフリット、及び1つのテールフリット)の長さであることを認識している。第2のフリットは、FPのVL0の第1のボディフリットである。次のフリットは、VL1ヘッドフリットと標識されており、これは、VL1と標識されている仮想レーン1を介して送信されるFPのヘッドフリットである。VL1ヘッドフリットも、このFPがフリット4つ分の長さであることを認識している。1つの手法では、新たなVLのFPのフリットが現在のVLのフリットとインタリーブされるときには、新たなVLが、リンクを介してフリットを送信するためのアクティブな仮想レーンになる。これは、フリットストリームにVL1のヘッドフリットを追加することで表される。その結果として、FPのVL1は、FPのVL0とインタリーブし、これは、最初にVL1のヘッドフリットを追加し、2つのVL1のボディフリットを追加し、VL1のテールフリットを追加することで表される。テールフリットは、FPのVL1のインタリーブが終了するFPのVL1のFPのフリットの末端を識別する。次いで、論理は、VL1のインタリーブの前のFPのフリットに戻り、残っているFPのVL0のボディフリット及びテールフリットが、リンクを介して送信される。
【0058】
リンクファブリックサブレイヤが複数のファブリックパケットのフリットのインタリーブをどのようにサポートするかをさらに説明するために、
図14は、プッシュとポップのインタリーブの一例を示す。リンクファブリックサブレイヤにおけるインタリーブでは、ヘッドフリットをインタリーブすることにより、中断されたVLがプッシュされ、テールフリットに行き当たったときにスタック中のVLがポップされる、プッシュ/ポップ方式を利用する。このスタックがどのように働くかを視覚化するために、書類箱の中に積み重ねられた紙の山と、現在の紙での作業を行うために使用されるデスク領域とを想像されたい。プッシュ/ポップインタリーブの状況では、この紙の山を「スタック」と呼び、デスク領域は、フリットのアクティブな仮想レーンを識別するデータが格納されるアクティブVLレジスタに対応する。伝送されているVLがインタリーブに応答して切り替えられると、インタリーブされたVLが新たなアクティブなVLになり、それまでのアクティブなVLは、デスクからスタックの最上部に押し出される。このために、「プッシュ」という用語が用いられる。FPのVLフリットが終了すると(例えばVLのFPのテールフリットがLTPの送信FIFOに追加されると)、VLはデスク領域から除去され、スタックの最上部のVLはスタックからデスク領域に「ポップ」されて、新たなアクティブなVLになる。このVLのプッシュ及びポップは、ネスト状に継続することができる。n個のVLをサポートするリンクファブリックサブレイヤでは、同時に中断することができるパケットの最大数は、n−1である。
【0059】
図14の例では、フリットの順序付きリスト1400は、様々なVLに記憶されたファブリックパケットのフリットがフリットの伝送ストリームに追加される順序を表している(又は、任意選択で、受信ポートで受信されたフリットストリーム中のフリットの順序を示している)。以下の説明は、フリットがLTP(すなわちファブリックに「注入」されるLTP)にバンドリングされたアウトバウンドストリームに追加される、フリットストリームの生成に関するものである。アクティブなVLを識別する指標は、アクティブVLレジスタ1402中に様々な状態で示してある。最初の状態では、VL0に対応する指標が、アクティブVLレジスタ1402中に記憶されており、フリットが、仮想レーンVL0についてバッファリングされる次のファブリックパケット(VL0 FPと呼ぶ)から追加されることを示している。したがって、VL0 FPの最初の2つのフリットが、フリット伝送ストリームに追加され、この時点で、VL1のVL0に対するインタリーブが開始されるインタリーブ事象が検出される。このインタリーブ動作を実施するために、VL1の指標が、アクティブVLレジスタ中のVL0に置き換わり、VL0をスタックにプッシュする。これにより、アクティブな仮想レーンがVL0に切り替わり、VL1 FPのヘッドフリット及び第1のボディフリットがフリット伝送ストリームに追加される。次に、第2のインタリーブ事象に応答して、VL2のVL1に対するインタリーブが開始され、VL2がアクティブVLレジスタ1402にロードされ、VL1がスタックにプッシュされる。これにより、FP VL2の3つのフリットが全て、フリット伝送ストリームに追加される。FP VL2のテールフリットが追加されて、VL1に対するVL2のインタリーブは終了し、これにより、VL1がスタックからアクティブVLレジスタ1402にポップされる。VL1の別のボディフリットが追加され、その後に、VL7のVL1に対するインタリーブが開始される。このインタリーブは、VL7の指標をアクティブVLレジスタ1402に追加し、VL1を再びスタックにプッシュすることによって行われる。VL7 FPの全体に対応する3つのフリットがフリット伝送ストリームに追加され、VL1に対するVL7のインタリーブが終了し、VL1が再びスタックからアクティブVLレジスタ1402にポップされる。VL1 FPのテールフリットが追加されて、VL1のインタリーブが終了し、VL0がスタックからアクティブVLレジスタ1402にポップされる。これにより、VL0がアクティブなVLに復帰し、VL0 FPの最後の2つのパケットがLTP伝送FIFOに追加される。
【0060】
中断されている暗示的なVLに復帰するためにポップに依拠する代わりに、リンクファブリックサブレイヤは、デバイスが「VLマーカ」と呼ばれる特殊LFコマンドフリットを利用して、どのVLがリストの先頭に移動するかを明示的に指定することを可能にする。VLマーカを使用すると、この余分なマーカのフリットによって効率は低下するが、インタリーブの柔軟性は高くなる。
図15は、この概念を示している。
【0061】
VLマーカは、実際には、VLをデフォルトのスタック順序付けから引き出すこと、又はスタック中に存在しない新たなVLをスタックの最上部に移動させることを可能にする。スタック中に残っているVLは、その後も引き続きプッシュ/ポップ規則に従う。これら2つの異なる機構の使用は、混合することができ、排他的なものではない。特定のVLをスタックから引き出した後、そのVLが別のVLによってインタリーブされる場合には、そのVLは、再びスタックにプッシュされる。
【0062】
図15に戻ると、動作のシーケンスは、
図14のプッシュ/ポップの例と同様に開始され、最初のアクティブな仮想レーンはVL0であり、VL0 FPの最初の2つのフリットが、フリット伝送ストリーム1500に追加される。上記と同様に、次のVL1が、2つのフリットについてVL0にインタリーブし、次いで、VL2がVL1にインタリーブする。ただし、VL2のFPのテールフリットに到達する前に、VLマーカ1502がフリット伝送ストリームに挿入され、VL0が新たなアクティブなVLになることを示す。これにより、VL0がスタックから引き出され、アクティブVLレジスタ1402にロードされ、VL2がスタックの最上部にプッシュされる。VL0の残りの2つのフリットが、フリット伝送ストリーム1500に追加され、VL0が終了し、その結果、VL2がスタックからアクティブVLレジスタ1402にポップされる。これにより、VL2のテールフリットが追加され、VL2が終了し、VL1がスタックからアクティブVLレジスタ1402にポップされる。別のVL1のボディフリットが追加され、その後に、VL7のVL1に対するインタリーブが開始され、VL7がアクティブVLレジスタ1402にロードされ、VL1がアクティブVLレジスタ1402からスタックにプッシュされる。次に、第2のVLマーカ1504が、フリット伝送ストリーム1500に追加されて、アクティブな仮想レーンを再びVL1に切り替える。これにより、VL7がスタックにプッシュされ、VL1がアクティブVLレジスタ1402に引き込まれる。VL1のFPのテールフリットが追加され、これでVL1のインタリーブが終了し、VL7がスタックからアクティブVLレジスタ1402にポップされる。その後、VL7のFPの最後の2つのフリットが追加される。
【0063】
図14及び
図15に示すインタリーブの例は、例示のために、またプッシュ/ポップインタリーブ方式及びVLマーカインタリーブ方式がより容易に理解されるように、誇張してインタリーブを示している。実際のシステムでは、ほとんどのインタリーブは、(A)プリエンプション、及び(B)パケットストリーム中のバブルという、2種類のインタリーブ事象のうちの一方によって生じる。プリエンプティブインタリーブ、並びにプリエンプティブインタリーブとバブル事象によって生じるインタリーブとの組合せのさらに詳細な例は、それぞれ
図16及び
図17に示してある。
【0064】
上述のように、プリエンプション時には、高い優先順位を有する仮想レーンのファブリックパケットのコンテンツ(フリット)は、優先順位の低いVLのFPのフリットのフリット伝送ストリームへの追加をプリエンプトすることができる。HFI、ゲートウェイ、又はその他のタイプのファブリックエンドポイントでは、ファブリックパケットを構成するデータは、一般に、ファブリックパケットにカプセル化されるイーサネット(登録商標)フレームなど、何らかの他のタイプのフォーマットで最初にバッファリングされる。また、ファブリックパケットは、IPパケット及びUDPパケットなどのレイヤ3パケットの生成方法と同様に、ネットワーキングスタックの一部として作成されることがある可能性も高い。スイッチでは、受信コンテンツ及び送信コンテンツともに、既にフリットにフォーマット化されており、追加のメタデータを使用して、どのフリットがどのFPと関連するかを決定し、どのスイッチポートからフリットが次のホップ又はエンドポイントの宛先に送出されるかを決定する。上記の内容に鑑みて、
図16及び
図17は、ファブリックパケットの全体を示し、FPのコンテンツのフリットフォーマットをFPの下に示している。
【0065】
各FPのフリットコンテンツは、そのFPが割り振られた仮想レーンに割り当てられたバッファに一時的に記憶される。様々なバッファ構成実施形態では、別個のバッファをそれぞれのVLに割り当てることもできるし、又はいくつかのVLがバッファ空間を共有することもできるし、或いは、この2つを組み合わせて、あるVLのバッファ割当ての第1の部分はそのVLの専用とし、別の部分は共有バッファ空間とすることもできる。受信バッファ(Rbuf)及び送信バッファ(Tbuf)のVL使用の割当てに関するさらなる詳細について、以下で述べる。
【0066】
仮想レーンの使用の基本的な特徴は、所与の仮想レーン内のコンテンツが順序を維持することである。つまり、所与の仮想レーンで、1つのFPは別のFPを追い越してはならない。さらに、FPのフリットは、それらが最初に生成された順序を維持する。同時に、異なる仮想レーン内のコンテンツは、他の仮想レーンとの間で順序を維持する必要はない。これにより、優先順位の高いトラフィックが、優先順位の低いトラフィックをプリエンプトすることが可能になる。仮想レーンは、経路指定及びプロトコルのデッドロックを解消し、トラフィッククラス間のヘッドオブラインブロッキングを回避するためにも使用される。
【0067】
図16に示すように、仮想レーンVL1、VL2及びVL3に対して、3つのバッファ1602、1604及び1606がそれぞれある。これらの仮想レーンは、それぞれ優先レベルが割り付けられる。VL1は優先順位が低く、VL2は優先順位が中程度で、VL3は優先順位が高い。アービタ(図示せず)を使用して、どのVLバッファから、フリットがLTP2、3、4、5、6及び7にバンドリングされるフリット伝送ストリーム1608に追加するフリットを引き出すかを決定する。
図16は、図示のウィンドウ時間フレームにわたる仮想レーンVL1、VL2及びVL3のリンクトラフィックの処理を示す「スライディングウィンドウ」図である。1実施形態では、VLバッファは、FIFO(先入れ先出し)バッファとして実装され、各FIFOスロットが、1つのフリットを記憶するようなサイズになっている。
【0068】
上述のように、プリエンプティブインタリーブの1つの特徴では、優先順位の高いVLに割り付けられたFPのコンテンツは、それより優先順位の低いVLに割り付けられたFPのコンテンツをプリエンプトすることができる。一般に、複数のFPに対応するFPのコンテンツがそれぞれのVLエグレス(ファブリックに注入される)バッファにバッファリングされる場合には、最高の優先順位のVLに割り付けられたFPのコンテンツが、フリット伝送ストリームに追加される。ただし、プリエンプションが起きない状況もあり得るので、これは絶対的な規則ではないことに留意されたい。同時に、FPのコンテンツが、所与の1つのVL又は同じ優先順位の複数のVLのみで利用可能である場合には、そのFPのコンテンツは、他のVL(その時点でバッファリングされたFPのコンテンツを有していないVL)の優先レベルに関わらず、フリット伝送ストリームに追加される。この状況は、以下のように
図16に示してある。
【0069】
時間T
1で、パケット1の少なくとも第1の部分が、VL1バッファ1602にバッファリングされ、伝送の準備ができている。このアーキテクチャのデータ転送のストリーミングの性質上、フリットは、VLバッファで受信する(VLバッファに追加する)こともできるし、VLバッファから(伝送のために)除去することもできる。さらに、VLバッファへのフリットの追加及びVLバッファからのフリットの除去は、特にスイッチでは、ある程度非同期になる可能性がある。その結果として、任意の所与の時点で、所与のVLバッファは、バッファリングされて伝送の準備ができているコンテンツを有していることもあれば、有していないこともある。
図16の例では、時間T
1では、VL1バッファ1602のみが、伝送の準備ができているフリットを含み、VL2バッファ1604及びVL3バッファ1606は、両方とも空である。FPパケットのフリットのフリット伝送ストリームへの追加を開始するためには、少なくとも1つ又は複数のヘッドフリット(個々のFPフォーマットによって決まる)が、VL FIFOバッファの先頭にある必要がある。(以下でさらに詳細に述べるように、1実施形態では、VLバッファは、円形FIFOとして実装され、FIFOの先頭はFIFOヘッダポインタによって識別される。)
図16では、ヘッドフリット1610が、時間T
1で、VL1バッファ1602の先頭にバッファリングされる。
【0070】
時間T
1で、第1のグループのフリット1612が、フリット伝送ストリーム1608のLTP2に追加され、フリット1612の先頭のヘッドフリット1610が時間T2で追加され、T1とT2の時間差が、アービタがアクティブなVLがVL1バッファ1602に変化することを認識するのに要する時間、及びそのバッファのフリットデータをフリット伝送ストリーム1608にコピーするのに要する時間の長さを表す。
図16に示すT1とT2の間の差は、正しい縮尺ではなく、FPデータがVLバッファに到達して伝送の準備ができてから、そのデータが実際のフリット伝送ストリームに追加されるまでに何らかの有限の時間があることを示すためのものである。
【0071】
時間T
3で、ヘッドフリット1614で始まるパケット2の第1の部分が、VL2バッファ1604に受信されている。VL2はVL1より高い優先順位を有するので、プリエンプション事象が、アービタ(又はその他の論理、図示せず)によって検出される。実施態様によっては、プリエンプション事象は、パケット2の1つ又は複数のヘッドフリットがVL2FIFOバッファ1604の先頭に到達した直後に検出されることもあるし、余分のインタリーブは他のポートにおいてバブルを引き起こし、さらなるインタリーブをもたらすことになる可能性があることから、何らかのレベルのインタリーブの発生を低減するために、いくらかの遅延があることもある。例えば、フリットがフリット伝送ストリームに追加されている現在のパケットに残っているフリットがわずかであり、プリエンプトを行うことになるパケットが大きい場合には、論理は、現在のパケットが完了するまで待機して、現在のパケットのプリエンプションが起きないようにすることもできる。プリエンプション事象に応答して、アクティブなVLは、プッシュ/ポップインタリーブ方式を用いて、VL1からVL2に切り替えられる。必要に応じて、VLマーカインタリーブ方式を使用することもできる。アクティブなVLがVL1からVL2に切り替えられるのに応答して、VL2の指標がアクティブVLレジスタにロードされ、VL1がスタックにプッシュされる。時間T
4に示すように、第1のグループのフリット1616が、VL2FIFOバッファ1604から引き出され、フリット伝送ストリーム1608に追加される。これにより、パケット2を優先してパケット1の伝送がプリエンプションされ、パケット1及びパケット2のフリットがインタリーブされる。
【0072】
時間T
5で、ヘッドフリット1618で始まるパケット3の第1の部分が、VL3バッファ1606に受信されている。VL3はVL2より高い優先順位を有するので、第2のプリエンプション事象が、アービタ(又はその他の論理、図示せず)によって検出される。これにより、パケット3の伝送を優先してパケット2の伝送がプリエンプトされる。これは、VL3の指標をアクティブVLレジスタにロードし、VL2をスタックにプッシュすることで行われる。図示のように、時間T
6から、パケット3のフリット1620の全体が、フリット伝送ストリーム1608に追加され、これにより、パケット3のフリットがパケット2のフリットとインタリーブされる。
【0073】
フリット伝送ストリーム1608へのテールフリット1622の追加に関連して、アービタ(又はその他の論理)は、パケット3のフリットの追加が完了していることを検出する。したがって、VL3は、アクティブVLレジスタから除去され、VL2が、スタックからアクティブVLレジスタにポップされ、VL2がアクティブなVLに復帰する。これにより、パケット2の残りのフリット1624がフリット伝送ストリーム1608に追加されることになる。この追加は、時間T
7から開始され、時間T
8に終了し、この時点で、テールフリット1626が追加され、したがってパケット2が完了したことが検出される。これにより、VL1は、スタックからアクティブVLレジスタにポップされ、VL1が、VL2に置き換わってアクティブなVLになる。次いで、パケット1の残りのフリット1628が、フリット伝送ストリーム1608に追加され、時間T
9にテールフリット1630で終了する。次いで、次のファブリックパケットのヘッドフリットが、LTP7の最後のフリットとして追加される(分かりやすくするために、次のファブリックパケットは、図示していない)。
【0074】
図17は、バブルインタリーブ事象と、その後に続くプリエンプションインタリーブ事象とを示す図である。ファブリックパケットのフリットが複数のホップを含む経路指定経路を横切るときには、これらのフリットの一部分が、1つ又は複数のスイッチでプリエンプトされる可能性がある。これにより、所与のFPのフリットストリームが混乱することになる。このような混乱したフリットストリームが受信ポートで受信されると、プリエンプションより前に伝送されたフリットの部分と、プリエンプションの後に伝送されたフリットの部分との間にギャップが生じる。これにより、「バブル」が生じる。このバブルの例の他にも、バブルは、その他の様々な理由で生じる可能性がある。このようなバブルの検出に応答して、バブルが生じたFPと同じ、又はそれより低い優先レベルを有するFPのフリットに対してインタリーブを実施することができる。
【0075】
図16の例の場合と同様に、時間T
1で、ヘッドフリット1700を含むパケット1の少なくとも第1の部分が、VL1FIFOバッファ1602で受信され、時間T
2から、第1の部分のフリット1702が、フリット伝送ストリーム1704のLTP2に追加される。時間T3で、ヘッドフリット1706で始まるパケット2のフリットの第1の部分が、VL2FIFOバッファ1604で受信される。VL1及びVL2は両方とも低い優先順位が割り付けられているので、パケット1及びパケット2はそれぞれ、同じ低い優先レベルが割り付けられる。FP及び/又はそのフリットは、それらが同じ仮想レーンに割り付けられているときには互いに追い越すことができないが、FP及び/又はそのフリットは、それらが異なる仮想レーンに割り付けられているときには、互いに追い越すことができる。この状況は、異なる仮想レーンが同じ優先レベルを有するときに生じる可能性もある。一般に、2つ(又はそれ以上)の仮想レーンのFPが同じ優先レベルを共有するときには、それらのFPは、例えば第1のFPの全てのフリットが追加される、第2のFPの全てのフリットが追加されるなど、その全体が(そのフリットを介して)フリット伝送ストリームに追加される。同じ優先レベルを共有する複数のVLから次にどのFPを送出するかの選択は、一般にこれらのVLのFPの伝送を平等に(又はかなり平等に)扱うように設計されるアービタの選択論理によって決まる。例えば、いくつかの実施形態では、ラウンドロビン方式を実施することができる。このようなラウンドロビン方式は、FPの長さを考慮して、複数のVLの間のバッファ使用レベルが、何らかのレベルの目標とされるようにすることもある。例えば、2つのVLの間でラウンドロビンのみの手法を用いると、それらのVLのFPの送信を交互に行うことになるが、使用レベル手法は、それらのVLのうちの一方の第1のFPが他方のVLの第2及び第3のFPよりかなり大きい場合には、第1のFPを伝送した後で、第2及び第3のFPを伝送することができる。
【0076】
図17に示す例では、通常は、パケット1の全てのフリットが送信され、その後に、パケット2の全てのフリットが送信される(プリエンプションインタリーブ事象がなく、VL1及びVL2のみをアービトレーションのために考慮するものと仮定する)。しかし、図示のように、時間T
4から、パケット1のフリットの転送にバブルが生じる。アービタ論理は、このバブルの存在を、VL2FIFOバッファ1604中のパケット2のフリットの可用性と組み合わせて考慮する。これに応答して、バブルインタリーブ事象が検出され、これにより、時間T
5からは、パケット2のフリット1708がパケット1のフリットでインタリーブされることになる。プリエンプティブインタリーブと同様に、インタリーブは、VL2をアクティブVLレジスタにロードし、VL1をスタックにプッシュすることから開始される。
【0077】
パケット2のフリットがフリット伝送ストリーム1704に追加されている間に、時間T
6で、パケット1のフリットの第2の(及び残りの)部分の、VL1FIFOバッファ1602における受信及びバッファリングが開始される。これらのフリットは、直ちに伝送に利用することができるが、時間T
6でそれらを受信しても、インタリーブ事象は発生しない(或いは、その他の形でパケット2のフリットのインタリーブを終了させる)。逆に、パケット2のフリットが、VL3FIFOバッファ1606内のヘッドフリット1710を含むパケット3のフリットが利用可能であることが検出されたのに応答して時間T
7でプリエンプティブインタリーブ事象が検出されるまで、パケット2のフリットが、フリット伝送ストリーム1704に追加され続ける。
図16の例の場合と同様に、VL3は、VL1又はVL2の優先レベルより高い優先レベルを有する。その結果として、優先順位の高いパケット3のフリットが利用可能になったことで、パケット3のフリット1712のパケット2のフリットに対するプリエンプティブインタリーブが開始される。このプリエンプティブインタリーブは、時間T
8から開始され、時間T
9にテールフリット1715が追加されて終了する。パケット3のインタリーブの終了時に、VL2は、スタックからポップされ、アクティブVLレジスタにロードされ、これにより、VL2はアクティブな仮想レーンに復帰する。これにより、パケット2の残りのフリット1716がフリット伝送ストリーム1704に追加されることになる。
【0078】
時間T
10にテールフリット1718によってフリット伝送ストリーム1704に識別されるパケット2の終了時に、VL1は、スタックからポップされ、アクティブVLレジスタにロードされ、VL1は、アクティブVLに復帰する。これにより、パケット1の残りの部分に対応するフリット1720がフリット伝送ストリーム1704に追加される。ここで、パケット1のフリットの追加は、時間T
11でテールフリット1722が追加されたときに終了する。
【0079】
リンク信頼性
上述のように、このアーキテクチャのファブリックは、「無損失(ロスレス:lossless)」である。つまり、パケットは、受信時に破棄されたり、或いは伝送中に「喪失」したりすることがない。これは、クレジットに基づくフロー制御を使用することと、再現バッファを使用することとを主に含む複数の機構を組み合わせることによって実施される。クレジットに基づく手法では、送信側ユニット(例えばHFI、スイッチ、又はゲートウェイ)は、その送信側ユニットがフリットを伝送するためのクレジットを有していない限り、フリットを受信側ユニット(例えば別のHFI又はスイッチ)に送信しない。ここで、クレジットは、VLごとのものであり、受信機が、フリットに使用されるVLに対して十分なバッファ空間を有していることを示すために使用される。
【0080】
各LTPは、標準検出LTPが使用されているか、強化検出LTPが使用されているかに応じて、データの完全性を検証するために使用される1つ又は複数のCRCを含む。これらの1つ又は複数のCRCは、LTPのデータコンテンツにわたって計算され、その結果得られる1つ又は複数のCRC値は、
図5〜
図8に示し、上記で説明したように、LTPの末端に、最後のフリット(フリット15)の後に添付される。受信時に、これらの1つ又は複数のCRCは再計算され、受信したLTP中の1つ又は複数のCRCと受信したデータ中の1つ又は複数のCRCとを比較して、データエラーがあるかどうか判定する。伝送されたCRCと受信データについて計算したCRCが一致しない場合には、データエラーが検出される。CRCの不一致の検出に応答して、LTPは、再現バッファを使用して再伝送される。
【0081】
「信頼できる」LTPは、再伝送要求がないことで、それがピアによって上手く受信されていることが分かることを保証するのに十分に長い期間、再現バッファに保持される。この手法では、受信機は、パケットが上手く受信されていることを確認するためのACKを送信しない。その代わりに、ラウンドトリップ期間内に再伝送要求がないことで、LTPがリンクを介して上手く伝送されていることが暗示的に確認される。「信頼できる」LTPという用語を使用するのは、再現バッファに保持されるLTPを、ヌルLTPなど、再現バッファに保持されない他のLTPと区別するためである。したがって、ヌルLTPは、再伝送されない。
【0082】
再現バッファ位置ポインタは、送信機(NxtTxLTP)及び受信機(NxtRxLTP)で各LTPごとに維持されるが、LTPの一部として交換されない。伝送エラーが受信機で(CRC不一致を介して)検出されると、受信機は、NxtRxLTP再現バッファ位置ポインタを含むRetryReqLTPを送信機に送信する。送信機がRetryReqLTPを受信すると、再現バッファ中のLTPが、RetryReqLTP(ピアNxtRxLTP)で始まり、最後に書き込まれた再現バッファ位置で終わる、元の順序で再伝送される。1実施形態では、LTPデータを(NxtWrLTP)に書き込むための次の再現バッファスロットが使用され、したがって、最後に書き込まれた再現バッファ位置は、NxtWrLTP−1となる。
【0083】
CRC不一致によって示されるリンクエラーの検出と関連して、第2の機構を実施して、どのレーンがエラントであるか決定する。この機構は、受信機でのみ計算されるレーンごとのCRCを利用し、伝送データ中のレーンごとのCRCとの比較は使用しない(存在しないため)。代わりにレーンごとのCRCは、以下で述べるように、CRC不一致のあるLTPについて計算されたレーンごとのCRCを、そのLTPをレーンごと又は転送グループごとに再現バッファを介して再伝送するときに、同じLTPについて再計算した対応するレーンごとのCRCと比較するために使用される。
【0084】
再現バッファを使用するとともにレーンごとのCRCを使用してエラントなレーンを検出する一例を、
図18a及び
図18bに示す。この例では、LTP伝送ストリーム1606のLTP2、3、4、5、6及び7を含むLTP伝送ストリームは、デバイスAのリンクインタフェースAからリンクの反対側端部のピアデバイスBのリンクインタフェースBに伝送されている。さらに詳細には、このLTP伝送ストリームは、上述の
図17に示すものと同様の4レーンリンク相互接続を用いて、リンクインタフェースAの送信ポート1800からリンクインタフェースBの受信ポートに伝送される。このアーキテクチャのリンクでは、LTPコンテンツは、複数のレーンを順に介して並列に送信される。上述のように、レーンの数は、個々のリンク構成によって変化する可能性があり、さらに、レーン数を減少させたリンク上の転送もサポートされる。例えば(限定的なものではない)、単位間隔(UI)と呼ばれる期間の間に、各レーンを介して1ビットが伝送される。1実施形態では、LTPデータの転送は、転送単位(XFR)と呼ばれるデータ単位にセグメント化される。1実施形態では、各XFRは、32ビットの量である。1実施形態では、XFRの全てのビットは、同じレーンを用いて伝送される。いくつかの実施形態では、いくつかのXFRを、複数のレーンを介して伝送することができる。
【0085】
図19は、1056ビットの長さを有する標準検出LTPのXFRのマッピングを示す図である。各XFRは、32ビットの長さであり、単一のレーンを介して転送される。したがって、各LTPごとに33個のXFRがある。
図20は、1実施形態による、4レーンリンクのレーンごとのXFRのマッピングを示す図である。名目上は、例示のために、また明瞭にするために、各フリットは64ビットである。ただし、
図3に示すように、各フリットは、その全体(ボディフリットの場合)又はその一部(ヘッドフリット及びテールフリット並びに制御フリットの場合)がフリットタイプを識別するために使用される、余分の65番目のビットを有する。伝送中には、この65番目のビットは、一列に伝送される。つまり、複数のレーンを介して並列に伝送された複数の直列転送ビットストリームの非直列化及び再アセンブリ時に、65番目のビットは、1056ビットの標準検出LTPの中で、65ビット位置ごとに存在する。
【0086】
4レーンリンクの1実施形態では、2つのフリットのデータビットは、32UIにわたって並列にリンクを介して転送され、4つのXFRを構成する128ビットが(論理的には)一緒に転送されるようになっている。しかし、上述のように、65番目ごとの位置は、必ずフリットタイプビットに占められる。その結果として、XFRは、フリットに対して正確に2:1でマッピングするわけではない。そうではなく、余分の65番目のビットが一列に存在することにより、
図21に示すようにラップ式転送が得られる。
【0087】
さらに詳細には、1実施形態では、余分な2ビットは、各128UIごとにラップされ、8グループの4レーンXFRが終了した後で、16ビットのアグリゲーションが得られる。これらの8つのグループは、最初の32個のXFRを構成し、33番目のXFRが、フリット15の最後の16ビット(及びその65番目のビット)を含み、その後に、16ビットCRC(又は任意選択で、CRC−14LTPの場合には、14ビットCRC及び2つの制御チャネルビット)が続く。例示を目的として、また理解を容易にするために、本明細書では、フリットを、64ビットの単位で転送されるものとして示すことがあるが、1実施形態では、フリットは実際には65ビットの単位で転送されることは理解されるであろう。
【0088】
図20の4レーンXFRマッピングに戻ると、1056ビットの標準検出LTP1つ当たり33個のXFRを使用することにより、各LTPで1つのXFRがラップされることになる。これにより、レーン0、レーン1、レーン2、レーン3、レーン0に戻って、レーン1…といったLTP開始レーンシーケンスに従って、後続の各LTPの開始点が次のレーンにずれる。これを、本明細書では、4レーン標準検出LTP「シーケンス」、又は簡単にLTPシーケンス(本明細書で図示して説明する4つのレーンを介した標準検出LTP転送に適用される)と呼ぶ。便宜上、このLTPシーケンスの状態は、第1、第2、第3、及び第4として示すが、1実施形態では、2ビットを使用して0、1、2、3として追跡される。
【0089】
図18aに示すように、LTP伝送ストリーム1604のフリットの直列化及びマッピングは、伝送リンク制御ブロック1804によって実行される(又は、その他の場合には、この動作の一部分は、図示しない別のブロックによって実行される)。各信頼できるLTPのデータコンテンツは、伝送リンク制御ブロック1804によって処理される前に、再現バッファ1806中のLTPスロットのうちの1つにコピーされる。このスロットは、NxtWxLTPポインタ1807によって識別される。一般に、再現バッファは、可変のサイズを有することもあるし、所定のサイズを有することもある。1実施形態では、再現バッファは、複数の所定のサイズのうちの1つに合わせて選択的に構成することができる。
【0090】
図示のように、1実施形態では、再現バッファは、次の伝送LTP(NxtTxLTP)ポインタ1808が最後のFIFOスロットから最初のFIFOスロットにラップする(この例ではスロット7からスロット0にラップする)値を有する円形FIFOとして実装される。円形FIFOを使用することにより、以前のLTPデータ(以前に伝送されたLTPに対応する)は、新たな(次に伝送される)LTPデータで上書きされることになる。しかし、以下で詳述するように、LTPデータが上手く伝送されていることを示す暗示的な確認応答が検出されるまで、LTPデータが上書きされないことを保証するための措置が講じられている。この方式は、明示的なACKを使用する必要がなく、したがってACKの使用に伴うオーバヘッドを減少させる、リンクを介したデータの信頼性の高い伝送を容易にする。また、これにより、リンクレイヤより上のプロトコル(TCPなど)で使用されるACKに基づく信頼できる伝送方式をサポートするために必要となる送信ポートにおけるバッファリングも減少する。
図22a〜
図22eの流れ
図2200a〜2200e、並びに
図23a及び
図23bの送信機及び受信機の状態機械図を参照すると、エラントなリンクレーンの検出を含むリンクエラーの取扱いは、1実施形態では、以下の方法で実施される。リンク初期化プロセス中に、シンクのインタフェースのピアな送信ポートと受信ポートの間で様々な情報を交換して、双方向通信リンクを確立する。このプロセス中に、再現バッファのNxtTxLTPポインタ1808と、受信側の対応する次の受信LTP(NxtRxLTP)ポインタ1810とを、0に初期化する。リンク初期化が成功したら、開始ブロック2202、並びに
図23a及び
図23bの送信機及び受信機のLinkTransferActive.normal状態に示すようにリンク転送モードを「通常」に設定し、LTPは、リンクを介して転送する準備ができる。分かりやすくするために、以下では、1方向に転送されるデータについて述べるが、逆方向にも(別個のレーンのセットを用いて)同様の動作を実行して、リンクを介した双方向通信をサポートする。
【0091】
LTP伝送ストリーム1604中のLTPは順番に伝送されるので、LTPのデータは、順番に再現バッファ1806にコピーされ、NxtTxLTPポインタ1808は、LTPごとにスロットを1つ進める(又は最後のスロット(MyLTPmax)に到達したら0にラップする)。
図18aの図示の例の状態では、LTP2〜6は、以前に送信ポート1800から伝送されており、LTP2及び3は、以前に受信ポート1802で受信されており、Rxリンク制御ブロック1805で処理され、LTP CRCの一致に基づいて良好なLTPであると判定されている。LTP4は、受信される直前であり、LTP5及び6は、飛行中である(これらのLTPのデータは既に送信ポート1800から送出されているが、まだ受信ポート1802には受信されていない)。
【0092】
流れ
図2200aに戻ると、主流れ図ループは、LTPが受信ポートで受信されるブロック2204から開始される。
図18aの例では、この動作は、LTP4が受信ポート1802で受信されることで表されている。ブロック2206に示すように、各レーンごとに、CRCは、適用可能なLTPシーケンス状態である間に、そのレーンを介して受信したデータに基づいて計算され、このCRCが、CRCレーンレジスタCRC−L0、CRC−L1、CRC−L2及びCRC−L3で示す、レーンごとのCRCレジスタに書き込まれる。1実施形態では、これらのレジスタ中のデータは、現在のLTPのCRC計算結果で上書きされ、CRCレーンレジスタが最も最近に処理されたLTPのデータしか記憶しないようになっている。1実施形態では、4レーンリンクのレーンごとのCRCは、各レーンのビットが受信されるときに動的に計算される、12ビットCRCである。
【0093】
ブロック2208で、受信したLTPデータのCRC(Rx CRC)を計算し、伝送されたLTPのTx CRCと比較する。Tx CRCは、本明細書では様々なLTPフォーマットで示す、受信機に伝送される、LTPの末端に添付されたLTPデータを用いて送信ポート1800で計算される。受信機は、受信したLTPデータからTX CRCを抽出して、このTx CRCを受信したLTPデータについて計算したRx CRCと比較する。判定ブロック2210で、受信したTx CRCと計算したRx CRCとが一致するかどうかを判定する。両者が一致する場合には、ブロック2212に示すように、LTPは良好であると見なされ、LTPデータの通常の処理が実行され、論理はブロック2204に戻って、次の受信LTPを処理する。
【0094】
図18aに示す例では、LTP4についてTx CRCとRx CRCとが一致しない(CRC不一致)場合には、これはLTPデータエラーを示している。リンクデータエラーは、様々なリンク状態から生じる可能性があり、この時点では、エラーを引き起こしている具体的なリンク状態は分かっていない。分かっているのは、受信したLTPデータが、伝送されたデータと異なるものであり、したがって、受信LTPがエラントなデータであり、それ以上処理しないということである。不一致のLTP CRCは、判定ブロック2210の結果「NO」に対応し、これにより、論理は、ブロック2214に進み、このブロックで、LTPは不良であるものとされる。「不良」は、受信機の状態
図2350ではRcvBadLTPで表される。不良LTPの検出に応答して、ブロック2216(
図22a)、2218及び2220(
図22b)のそれぞれの動作で表すように、複数の動作が実質的に並列に開始され、実行される。
【0095】
ブロック2216に示すように、不良LTPについて計算されたレーンごとのCRCの値は、レーンごと、又はXFRグループごとに記憶される。LTP1つ当たりのXFRの数がレーンの数で割り切れる場合には、レーンごとのCRCの値は、レーンごとに記憶され、そうでない場合には、レーンごとのCRCの値は、XFRグループごとに記憶される。例えば、3つのアクティブなレーン及び33個のXFRを有するリンクでは、33/3=11であるので、レーンごとのCRCの値が記憶される。逆に、4つ又は2つのレーンの場合には、レーンごとのCRCの値は、XFRグループごとに記憶される(33/4=7.5、及び33/2=16.5)。XFRグループごとのCRCが記憶される場合には、受信LTPシーケンス状態が、レジスタ1814に記憶される。XFRグループごとのCRCの一例を、
図24に示す。図示のように、レーンごとのCRCが計算されるXFRの数は、4つのレーンにわたって等しくなく、これらのレーンのうちの1つは、標準検出LTP1つ当たり9個の32ビットXFR(したがって288ビット)を受信するが、他の3つのレーンは、8個の32ビットXFR(したがって256ビット)を受信する。さらに、9個の32ビットXFRを受信するレーンは、LTPシーケンス状態によって決まる。以下でさらに詳細に述べるように、記憶されたレーンごとのCRCを使用して、CRC不一致を有するLTPのXFRグループごとのCRCと、その後に再伝送された同じLTPとを比較することにより、どの1つ又は複数のレーンがエラーを生じたかを検出する。元のLTP伝送に使用されたLTPシーケンスは、再伝送されたLTPに使用されたLTPシーケンスと異なる可能性があるので、XFRグループごとのCRCを利用する。XFRグループごとのCRCの場合は、同じXFRについて計算されたCRCを比較することになるが、レーンごとのCRCの方式を使用した場合には、4つのレーン又は2つのリンクを有するリンクを運用するときに、CRCの計算が同じXFRについてのものである場合も、そうでない場合もある(レーンが4つの場合は、同じになる確率は25%、レーンが2つの場合は、同じになる確率は50%)。
【0096】
図24に示すように、XFRグループごとのCRCは、CRC−G0、CRC−G1、CRC−G2及びCRC−G3と標識される。これらのCRCを計算する転送は、レーン及びLTPシーケンス状態の両方によって決まる。例えば、第1のLTPシーケンス状態では、CRC−G0は、レーン0で受信した9個のXFR0、4、8、12、16、20、24、28及び32から計算されるが、CRC−G1、CRC−G2及びCRC−G3について計算した値は、それぞれレーン1、2及び3について表される8個のXFRによって決まる。第2のLTPシーケンス状態では、CRC−G0は、レーン1の9個のXFRから計算されるが、CRC−G1、CRC−G2及びCRC−G3について計算した値は、それぞれレーン2、3及び1について表される8個のXFRによって決まる。図示のように、第3及び第4のLTPシーケンス状態の両方についても、同様の手法を使用する。
【0097】
図18aに示す時間フレーム中には、LTPシーケンス状態は1であるので、CRC−G0、CRC−G1、CRC−G2及びCRC−G3は、それぞれレーン0、1、2及び3のLTP4について受信したデータから計算される。LTPのXFRグループごとのCRC−G0、CRC−G1、CRC−G2及びCRC−G3の値についての例示的な計算は、
図18a及び
図25に示す通りであり、それぞれ428、556、208及び804である。これらのXFRグループごとのCRCの値は、レジスタCRC−G0、CRC−G1、CRC−G2及びCRC−G3に記憶される。
【0098】
引き続き
図22bの流れ
図2200bで、ブロック2218において、再伝送要求(RetryReqLTP1812)が受信機から送信機に戻され、NxtRxLTPポインタ1810の現在の値を介して不良LTPを識別する。1実施形態では、RetryReqLTPの逐次対が送信されるが、別の実施形態では、単一のRetrReqLTPが送信される。この例では、NxtRxLTPポインタの値は、不良LTPであるLTP4のデータを記憶する再現バッファのスロット4を指す。RetryReqLTPを受信したのに応答して開始される再現モードのときの送信機側動作の詳細は、
図22cの流れ
図2200cに示す。
【0099】
また、ブロック2216の不良LTPの検出時に、ブロック2220で、LTP受信モードは「LTPトス」に設定され、これにより、不良LTPを含む受信したLTPがトス(破棄)される。LTPトスモードは、受信機の状態
図2350では、LTA.RxTossing状態として表す。受信機がLTPトスモードで動作している間に、LTPを受信し、レーンごとのCRCを計算してレジスタを更新し、LTP CRCのエラーチェックを実行して、逐次LTP CRCエラーを検出し、LTPを破棄する。これらの動作は、ブロック2222でLTPを受信することから始まるループ的に実行される。上記と同様に、ブロック2206及び2208の動作が実行され、その後、判定ブロック2224で、受信したLTPがCRCエラー(Tx CRC及びRx CRCの不一致)を有するかどうかを判定する。受信機がLTPトスモードで動作している間に、論理は、逐次LTP CRCエラーの発生をチェックするように構成される。例えば、LTPトスモードに入った後で最初に受信したLTPがエラーを有する場合には、逐次エラーが発生している。逐次エラーを検出するための判定は、判定ブロック2224の結果がYESである場合に論理が進む先である判定ブロック2226で表される。さらに、ブロック2225で、LTP CRCエラーの総カウントが増分される。(また、通常モードであってもトスモードであっても、LTP CRCエラーを検出するたびにそれに応答して、LTP CRCエラーの総カウントが増分されることに留意されたい。)
【0100】
CRCは、パケットやフレームなど、伝送されたデータ単位のエラーを検出するように構成されたデータ完全性チェックである。CRCの数式は、そのCRCがビット伝送エラーを検出するように選択され、デジタルデータのバイナリな性質を利用して、CRCをバイナリ量について素早く計算することを可能にする。しかし、CRCは100%フェイルセーフではない。ビットエラーの数がCRCのハミング距離と等しい、又はそれを超えるときには、CRCチェックは、エラーを検出することができない可能性がある。ネットワークファブリックで使用されるCRCのハミング距離は、通常は4であり、これは、エラーが検出されないままとなる可能性(極めて低い可能性)が生じるのに少なくとも4つのビットエラーを要することを意味する。検出されないリンクエラーがあると、いわゆる「誤りパケット許容」が生じる。つまり、エラーを有するパケットが、CRCチェックを(誤って)通過し、そのためにさらなる処理のために許容されてしまう。これらの検出されないエラーにより、パケットのサイレントデータ破壊が生じる。
【0101】
LTPのサイズは、約1000ビットである。所与の平均ビット誤り率(BER)では、検出失敗の確率は、単一のリンク転送パケット内でエラーが相関し、(4個以上の)バーストで発生する場合の方が、エラーが複数のLTPにわたって時間的に分散している一様なエラーパターンの場合より、高くなる。
【0102】
ネットワークファブリックリンクは、非常に低いが非ゼロのBERを提供するように設計される。リンクパワーを低下させるには、パワーが低下するにつれて高くなる傾向があるBERを高くする。BERが増加するにつれて、エラー検出失敗の確率は高くなる。ある点で、この確率は、許容不能なほど高くなる。ファブリック内の多数のリンクにわたるBERは、不均一である。これらのリンクは、通常は、複数のレーンで構成され、BERは、所与のリンク内でレーンごとに大きなばらつきがある可能性がある。従来の手法では、ファブリック管理ソフトウェアが何らかのしきい値BERで動作しているリンクを検出すると、ファブリック管理ソフトウェアは、許容不能なほど高いデータ破壊確率を回避するために、そのリンクをファブリックから除去せざるを得ない。これは、リンク内のエラー分布を把握せずに行われ、エラーが相関していることを前提とする、控えめな小さいBERしきい値を使用しなければならなくなる。さらに、リンクのBERは、時間とともにドリフト及び/又は劣化して、許容不能なほど高くなる可能性がある。ファブリックマネージャは、全てのリンクを連続的に常に実時間で監視することはできず、その結果として、あるリンクが高すぎるBERで動作していることを検出するのに、ある程度の時間がかかることがある。この時間の間、ファブリックは、データ破壊の可能性にさらされる。
【0103】
近接配置されたビットエラーについての1つのチェックでは、判定ブロック2224でLTP CRCエラーチェックを使用し、判定ブロック2226で逐次LTP CRCエラーチェックを使用する。CRCを使用すると、少なくとも1つのエラーが検出されたことを特定することができるが、CRCは、エラーがいくつ存在するかは特定しない。しかし、逐次LTP CRCエラーは、少なくとも2つのエラーが逐次LTPに存在することを示す。1実施形態では、逐次LTP CRCエラーの検出に応答して、ブロック2228で1対のRetrainReq LTPが送信機に送信され、出口ブロック2232及び送信機状態機械2300のRcvRetrainReqに示すように、流れ図の論理を出て、リンクを再訓練する。1実施形態では、この再訓練は、リンクを初期化又は再初期化するときに利用されるリンク(再)訓練動作より複雑でない、軽量な再訓練である。訓練又は再初期化中に、リンクの通常のアクティブな転送状態はオフラインである。つまり、通常のデータ転送動作は、リンクの訓練又はリンクの再初期化の終了時にリンクが通常のアクティブな転送状態に復帰するまで、一時的に利用不能になる。さらに、受信機は、ブロック2230で、いくつかの内部指標を設定して、その受信機がRetrainReq LTPを送信することを示し、リンク逐次エラータイマは、ブロック2231でリセットされる。このリンク逐次エラータイマの使用のさらなる詳細については、
図22eに示し、以下で説明する。訓練シーケンスが終了すると、論理は、流れ
図2200bのブロック2218及び2220に戻り、これらのブロックで、(a)1つ又は複数の再試行要求LTPが送信側に返送され、受信機では、LTPトスモードに再び入る。
【0104】
再試行マーカLTPを受信したのに応答してLTPトスモードループを出るので、受信したLTPがCRCエラーを有していない場合には、論理は、判定ブロック2234に進み、このブロックで、LTPトスモードである間に受信した良好なLTPのそれぞれが再試行マーカであるかどうかを判定する。送信要求を受信する前に、送信機はLTPを連続的に伝送し続け、これらのLTPは、既に飛行中のLTP(既に飛行中のLTPがある場合)とともに受信される。
図22cの流れ
図2200cのブロック2238、2240及び2242に示すように、再伝送要求(RetryReq LTP)を受信すると、送信機は、再試行マーカを送出し、その後に、再現バッファ1806でLTPの再伝送が行われるが、この再伝送は、再伝送要求を介して戻されたNxtRxLTPポインタの値で示されるスロットのLTPから開始される。1実施形態では、単一の再試行マーカが送信されるが、別の実施形態では、1対の再試行マーカが順番に送信される。1実施形態では、再試行マーカの対は、それらが送信された順序(例えばRetryMrkr0、RetryMrkr1)で識別される。1実施形態では、各再試行マーカは、ヌルLTPを含む。RetryMrkrLTP1816で示される単一の再試行マーカの使用の一例を、
図18bに示す。1対の再試行マーカが送信されるとき、第2の再試行マーカ(RetryMrkr1)は、RetryMrkrLTP1816(RetryMrkr0)の直後に続くことになることは理解されるであろう。
【0105】
図18aの例では、このように再伝送要求を受信する前に複数のLTPを連続的に伝送すると、LTP5及び6(飛行中)、7(次に伝送される)、並びにLTP0及び1を順番に受信することになる。LTP5、6、7、0及び1はそれぞれ再試行マーカではないので、判定ブロック2234の結果はそれぞれについてNOであり、論理は、ブロック2236に進んでLTPを破棄し、次いでブロック2222にループバックして、次のLTPを受信するが、LTPトスモードのまま留まる。その後に受信されるLTPの処理は、判定ブロック2234で再試行マーカLTPが受信されて検出されるまで、同様に継続する。
【0106】
図18bは、RetryMrkrLTP1816が受信ポート1802によって既に伝送され、受信され、処理されており、LTP4が既に再伝送され、受信ポート1802に受信されている最中であり、その後に再伝送されたLTP5及び6(飛行中)が続き、LTP7が再伝送される直前である、時間フレームを示す図である。
図18bにも示すように、(
図18aに示す)スロット0及び1の再現バッファデータは、RetryReqLTP1812を受信し、RetryMrkrLTP1816を伝送する前に行われた、それらの元の伝送に関連するLTP0及び1の対応するフリットデータで上書きされる。
【0107】
上記と同様に、信頼できる各LTP伝送で、LTPのデータは、信頼できるLTPがあるたびに増分されるNxtTxLTPポインタ1808によって識別される再現バッファ1806中のスロットにコピーされる。したがって、NxtTxLTPポインタ1808は、LTP7、0及び1のそれぞれの送信に関連して増分されていることになる(NxtTxLTPポインタは7から0にラップすることに留意されたい)。LTP1が伝送されている間に(又はその少し前に)、送信ポート1800は、RetryReqLTP1812を受信する。これに応答して、送信ポート1800は、RetryMrkrLTP1816(又はRetryMrkr0LTP及びそれに続くRetryMrkr1LTPを含む1対の再試行マーカ)を戻す。RetryMrkrLTP1816はヌルLTPであるので、そのデータコンテンツは再現バッファ1806にコピーされず、NxtTxLTPポインタ1808も進められない。逆に、TxLTPシーケンス状態は、それが信頼できるLTPであるかヌルLTPであるかに関わらず、LTPが伝送されるたびに進められる。
【0108】
判定ブロック2234に戻って、RetryMrkrLTP1816を受信したときに、このRetryMrkrLTP1816は再試行マーカであると識別され、流れ図の論理は、
図22dの流れ
図2200dに進む。ブロック2252に示すように、再試行マーカが処理され、受信機は、今後再現される不良LTPの受信に備えるようにカウントダウン値を設定する。1実施形態では、不良LTPの再現オフセットを再試行マーカに対して利用して、不良LTPの再伝送によって再試行マーカの後にk個のLTPを開始することを示す。1対の再試行マーカを利用する1実施形態では、不良LTP再現オフセットは、第2の再試行マーカに対して1つ少ない。ブロック2240に示すように、不良LTP再現オフセットに鑑みて、受信機は、LTPオフセットに基づいて、不良LTP再現カウントダウンを開始する。これを使用して、ブロック2256で、不良LTPの再現を検出する。さらに、受信機は、ブロック2254でラウンドトリップマーカLTP(又は1対のラウンドトリップマーカLTP)を戻し、ブロック2254で、LTP受信モード(受信状態)が、通常に復帰し、流れ図の論理は、ブロック2204に戻って次のパケットを受信する。これは受信機状態
図2350では「RndTripMrkr対を送信する」状態及び「LinkTransferActive.normalに戻る」状態で表される。
図18cを参照して以下で説明するように、再現バッファLTPが上書きすることができるかどうかの判定を容易にするために、1つ又は複数の再試行マーカLTPに応答して、1つ又は複数のラウンドトリップマーカLTPが戻される。
【0109】
RetryMrkrLTP1816(又はRetryMrkr0LTP及びRetryMrkr1LTP)の伝送に続いて、LTPの再現(再伝送)が開始される。この再現は、RetryReqLTP1812(この例ではLTP4)に含めて戻されるNxtRxLTPポインタによって識別される不良LTPの再伝送から開始される。送信機が再現モードである間は、伝送されるデータは、再現バッファ1806に記憶される再伝送されたLTPを含むことになる。再伝送されるLTPは、NxtRxLTPポインタによって示されるLTPから開始して、再現バッファのFIFOにおけるそれらの順序に基づいて、送信ポート1800から順番に送出される。
【0110】
再伝送される各LTPでは、伝送されるデータは、LTPが最初に伝送されたときと同じである。不良LTP再現カウントダウン(及び再現された不良LTPの受信に関連する動作)の外部では、受信側の論理は、受信したLTPデータが最初に伝送されたLTPに対応するのか、再伝送されたLTPに対応するのかが曖昧である。したがって、ブロック2204、2206及び2208並びに判定ブロック2210の動作が実行されると、レーンごとのCRC計算、受信したLTPデータについてのRx LTP CRCの計算、及びRx LTP CRCとTx LTP CRCとの比較が行われる。判定ブロック2210の結果がNOであることによって示されるように、エラーがある場合には、論理はブロック2214に戻り、このエラントな再伝送LTPによって、不良LTPが再び再伝送される新たな再現シーケンスが開始される。これは、基本的には、再現バッファ1806からの不良LTP4及びその後に続くLTPの再伝送に関連して上述した動作を繰り返すものである。
【0111】
再伝送された不良LTP4が良好であると仮定すると、論理はブロック2258に流れる。このブロックでは、それまでレジスタCRC−G0、CRC−G1、CRC−G2及びCRC−G3に記憶されていたレーンごとのCRCの値を、再伝送されたLTP4の各レーンを介して受信したデータについて計算したレーンごとのCRCと比較する。この比較は、動作しているレーンの数に応じて、レーンごと、又はXFRグループごとに行われる(レーンごと及びXFRグループごとの比較は、転送グループの数が同じであるときには等価であり、XFRグループごとの比較を常に実行することができるようになっていることに留意されたい)。上記より、レーンごとのCRCは、4レーンリンクの場合には、XFRグループごとに比較される。
【0112】
各伝送LTPのTx LTP及びRx LTPシーケンス状態の継続的な増分に関しては、LTPが最初に伝送されたときにはLTPシーケンス状態が1であったのに対して、LTP4が再伝送されるときには、LTPシーケンス状態は3である。その結果として、各レーンを介して伝送されるXFRグループが変化している。このレーン/XFRグループの再マッピングを、
図25に示す。この再マッピングは、
図18a及び
図18bの各レーンを介して送信されるXFRを比較することによっても理解することができる。上述のように、LTP4が最初に伝送されたときには、LTPシーケンス状態は1であったが、LTP4が再伝送されるとき(
図25では4Rで示す)には、LTPシーケンス状態は3である。
図18bに戻ると、再伝送されたLTP4のレーンごとのCRCが、レーン0、1、2及び3について計算され、その後、流れ
図2200dのブロック2258で、XFRグループのCRC比較が実行され、ブロック2260で、適用可能な不一致のレーンごと又はXFRグループごとのCRCを識別することによって、不良レーンが識別される。
図18a及び
図18bの例では、XFRグループごとのCRC比較の結果は、CRC−G0、CRC−G1及びCRC−G3のCRCは一致するが、CRC−G1のCRCは一致しないことを示している。このことは、レーン2が、エラントなLTP4が最初に伝送されたときにそのLTP4についてCRC−G1の値を計算したXFRグループに対応するので、レーン2がエラントであることを示している。なお、再伝送されたLTP4ではLTP CRCエラーが検出されなかったので、再現されたLTP4についてレーン2を介して伝送されたデータには(おそらくは)エラーがないことに留意されたい。ブロック2261で、識別された不良レーンのエラーカウントを増分する。レーンが断続的にエラントであるシナリオを考慮されたい。上述のように、判定ブロック2226及び関連する論理ブロックの逐次LTP CRCエラーチェックは、リンクを介して伝送されるデータ中の近接配置されたエラーを検出するための1つの機構である。この機構は、極めて近接して配置されたエラーを検出するが(エラーが逐次LTPにあることを必要とする)、この機構は、どのレーンがエラントであるかを特定することはできず、また、個々のレーンでどの程度頻繁に逐次エラーが起きているかを特定することもできない。
【0113】
第2のBERチェック機構の実施形態によれば、レーンごとのエラー頻度を監視して、所与のレーンのエラー頻度(BER)がレーンごとのBERしきい値を超えるかどうかを判定する。1実施形態では、これは、レーンごとの逐次エラーカウンタ及びタイマを(流れ
図2200d及び2200eに示す、並列に実行されるその他の動作及び論理と関連して)使用することによって実施される。
【0114】
判定ブロック2262では、受信機状態が、その受信機が開始したリンク再訓練状態によって生じたものかどうかを判定する。流れ
図2200bの論理が示すように、また上述したように、複数の逐次LTP CRCエラーが検出されると、それらのエラーを検出している受信機がリンク再訓練を開始することになる。逆に、単一のLTP CRCエラーも同様に再試行要求/再試行マーカ受信シーケンスを開始するが、この場合にはリンク再訓練は開始されない。再現されたLTPが良好であり、受信状態がリンク再訓練から生じたものではない(すなわち単一のLTP CRCエラーしか検出されていない)場合には、判定ブロック2262の結果はNOとなり、論理はブロック2264に流れ、LTPは、そのLTPが最初に送信されたLTPであるかのように処理される。次いで、論理は、流れ
図2200aに戻り、その後に再現されたLTPが(受信機から見て)最初に送信されるときに、それらの再現されたLTPを処理する。
【0115】
次に、2つの逐次LTP CRCエラーが受信機によって検出され、その結果として受信機がリンク再訓練を開始し、判定ブロック2262の結果がYESとなり、その結果として論理がブロック2266に進むものと仮定されたい。このブロックでは、ブロック2260で決定された不良レーンの逐次エラーカウンタが、増分される。判定ブロック2268では、このレーンの逐次エラーカウントがしきい値に到達しているかどうかを判定する。一般に、このしきい値は、1や2などの整数である。1実施形態では、しきい値は2であり、タイマの1周期内に1つのレーン上で逐次エラーが2つあると、そのレーンのBERしきい値検出が失敗する。これに応答して、1実施形態では、論理は、出口ブロック2270に進み、このブロックで、不良であるものとして検出されたレーンが除去されて、このリンクが再初期化される。その結果として、4レーンリンクが劣化してアクティブなレーンが3つになるなど、リンクのアクティブなレーンの数は1つ減少する。
【0116】
レーンごとの逐次エラーカウントがしきい値に到達していない場合には、判定ブロック2268の結果はNOとなり、論理はブロック2204に進んで、次のLTPを受信し、受信機は、通常受信状態で動作し、送信機は、依然として再現モードで動作する。
【0117】
上述のように、1実施形態では、タイマ方式を使用して、レーンごとの逐次エラーの頻度を検出する。上記より、論理は、逐次不良LTPの検出に応じてブロック2231に進み、
図22eの流れ
図2200eに示すように、タイマ方式を実施する1組の並列動作が開始される。ブロック2272で、適用可能であれば、タイマが始動(最初の場合)又は再始動(リセットの場合)される。判定ブロック2274及びそれ自体に戻るループが示しているように、タイマは、タイマが満期に達したかどうかを判定するために定期的にチェックされるか、或いは必要に応じて、タイマ論理を、タイマが満了したことを示す割込み又はその他の指標を生成するように構成することができる。ブロック2276に示すように、タイマの満了時に、各レーンの不良逐次エラーカウンタは減分される。1実施形態では、最小不良エラーカウントは0であるので、既に0になっているレーンエラーカウントについては、そのカウントは減分されない
【0118】
並列プロセスの組合せにより、以下の方法で、個々のレーン上のエラーが頻度しきい値を超えていることを検出する(例えば、近接配置されたエラーを呈するレーンを識別する)。流れ図の動作によって論理がブロック2258、2260を通り、判定ブロック2264の結果がYESになるたびに、不良レーンの逐次エラーカウントが増分される。一方で、並列タイマ動作について考えると、タイマが再始動されることなく満了するたびに、それがレーンごとのエラーを生じることなくタイマの時間周期が経過したことを示すので、各レーンのレーンごとの逐次エラーカウントが1だけ減分される(最小値0まで)。1実施形態では、2つのエラーがあり、レーンが失格になり、これは、1つのレーンが、時間周期内に2つの逐次エラーを有することに対応する。
【0119】
1つのタイマに加えて、異なる時間周期及び異なる関連するカウントしきい値を有する、複数のタイマを並列に使用することもできる。例えば、このようにすると、より長期間にわたるレーンごとの動作を観察することが可能になり、また、より短いレーンごとのBERしきい値検出も容易になる。この時間周期で必要とされる逐次エラーの数のしきい値も、変更することができる。
【0120】
流れ
図2200a〜2200eに示す実施形態では、リンクの再初期化を不良レーンの除去と組み合わせることは、近接配置されたエラーを呈するレーンを検出することによってもたらされる。しかし、逐次LTP CRCエラーの検出に続いて出口ブロック2232を介して出るときなど、他の条件下のリンクの再初期化及び/又は再訓練と関連してレーンを除去することができるので、これは限定的なものではない。例えば、リンクが再初期化するときに、レーンごとのエラーカウンタをチェックして、エラーカウントが何らかのしきい値を超えているかどうかを調べる。エラーカウントがしきい値を超えている場合には、そのレーンは、不良としてマークされ、リンクがアクティブな動作に復帰するときにアクティブではない。
【0121】
暗示的なACKを用いる信頼できるLTP伝送の別の特徴は、再現バッファ中のLTPが、そのLTPがエラーなく受信されていることが暗示的に確認される前に上書きされないことを保証する機構である。1実施形態では、これは、再試行要求及びラウンドトリップマーカを使用することによって容易になる。上述のように、いくつかの実施形態では、再現バッファは固定サイズを有する、又は複数の固定サイズのうちの1つを用いて動作するように設定されるように構成することができる。さらに、1対のリンクピアが、異なるサイズの再現バッファを利用することもできる。
【0122】
固定サイズの再現バッファの使用時には、再現バッファは、一般に、そのリンクのラウンドトリップ横断中に転送することができるLTPの数より多いいくつかのLTPを保持するようなサイズとされるが、さらに様々な処理待ち時間も考慮される。これは、
図18a及び
図18bに示す場合であり、再現バッファは、8個のスロットを有し、そのリンク及び反対方向のリンク経路を介して同時にラウンドトリップ横断することができるLTPの数は、約6又は7である。その結果として、受信機でエラーが検出された場合には、送信機は、再現バッファ中の不良LTPのコピーが上書きされる前に再試行要求を受信する。
【0123】
しかし、実際的な理由から、固定サイズの再現バッファは、全ての可能なリンク長を取り扱うようなサイズにはならない。リンクの長さが大きくなるほど、再試行要求を受信する前に再現バッファから送出することができるLTPの数が大きくなる。ある点で、リンク長は、再試行要求方式を使用するだけでは、再現バッファ中の不良LTPのコピーが、その不良LTPについての再試行要求を受信する前に上書きされないことが保証されないような長さになる。
【0124】
これは、ラウンドトリップマーカの使用が適合する場合である。流れ
図2200cに戻って、判定ブロック2244で、全てのLTPの再現が、ラウンドトリップマーカを受信することなく完了したかどうかを判定する。
図18cに示す構成でも、再現バッファ1806には8個のFIFOスロットがあるが、リンク長は、一度に5つのLTPしか「回線上にのせる」ことができない。つまり、受信機では、少なくとも10個のLTPがラウンドトリップ横断する、かつ/又は処理されることができる。その結果として、再現バッファ中の全てのLTPのコピーを、LTPのいずれかについての再試行要求を受信する前に再伝送することができ、不良である可能性があるLTPのコピーが上書きされることになる。これにより、不良LTPが再伝送されることが防止され、再現バッファの目的が損なわれる。
【0125】
このシナリオに対応するために、送信機は、判定ブロック2244に示すように、ラウンドトリップマーカを受信する前に再現LTPの末端に到達しているかどうかを検出する論理を含む。基本的には、これは、再現バッファの深さがラウンドトリップ持続時間より小さいか、又は大きいかを判定するものである。再現LTPの末端への到達は、再現ポインタが最初に再現されたLTPの始点(FIFOスロット)にラップすることによって検出される。
【0126】
図18cでは、最初に再現されたLTPスロットはスロット4であり、スロット4、5、6、7、0、1、2及び3のLTPは、逐次再伝送されており、1対のラウンドトリップマーカ1822a及び1822bのうちの第1のラウンドトリップマーカを受信する前に、再現LTPポインタをスロット4に戻す。これは、ラウンドトリップマーカを受信する前に再現LTPの末端に到達し、ラウンドトリップ持続時間が再現バッファの深さより大きいことを示す例を示している。これにより、判定ブロック2244の結果がYESになり、論理は、ブロック2245aに進み、このブロックで、送信機のヌルカウンタ(Nullcount)nが整数kにリセットされる。ブロック2246a及び結果がNOである場合にブロック2246aにループして戻る判定ブロック2248で示すように、次いで、送信機は、ラウンドトリップマーカ又は再試行要求が受信されるまで、1つ又は複数のヌルLTPを受信機に送信するようになる。さらに、ヌルLTPが伝送されるたびに、Nullcount nは、1だけ増分される。上述のように、ヌルLTPは、信頼できるLTPではないので、伝送されたLTPのコピーは、再現バッファに追加されない、その結果として、再試行要求を生じた不良LTPのコピーは、再試行要求を受信する前に上書きされないことが保証される。
【0127】
判定ブロック2248aでラウンドトリップマーカを受信したと判定されると、論理は、ブロック2250に進み、このブロックで、
図23aの送信機状態機械2300に「LinkTransferActive.normalに戻る」と示すように、送信機は通常の転送モードに復帰するが、再現バッファの各サイクルのNullcount nの値を使用して、再現バッファの末端に到達した後でいくつのヌルLTPを送信するかを決定する。例えば、Nullcount nが4に到達したものとする。その結果、再現バッファのFIFOスロットがスロット7に到達するたびに、送信機は、4つのヌルLTPを送出することになる。1実施形態では、再試行要求及びラウンドトリップマーカは、最高の優先順位を有し、プリエンプトされることはないので、Nullcount nによって規定されるいくつかのヌルLTPの伝送を用いることで、不良LTPのコピーが、その不良LTPについての再試行要求を受信する前に上書きされないことが保証される。任意選択で、ブロック2245で、Nullcount nを値k>0にリセットして安全性マージンを設けて、k個の余分なヌルLTPが再現バッファの各サイクルの終端で伝送されるようにすることもできる。Nullcount方式の固有の利点は、Nullcount方式を実施すると、実質的にいかなる長さのリンクでもサポートすることができる点である(物理リンクの長さに実際的な限界があり、この限界を超える長さを有するリンクの製造及び/又は実装が不可能であるか、非現実的であることは認識されたい)。
【0128】
判定ブロック2244に戻って、ラウンドトリップマーカが、第1のFIFOスロットに到達する前に受信されている場合には、判定ブロック2244の結果はNOとなり、論理はブロック2245bに進み、このブロックで、Nullcount nは整数mにリセットされる。ブロック2246b及び結果がNOである場合にブロック2246bにループして戻る判定ブロック2249で示すように、次いで、送信機は、バッファポインタがラップしてその開始スロットに戻る、又はNullcount nが0に到達するまで、LTPを受信機に対して再現し続けるようになる。ここで、Nullcountのカウントダウンはmで始まり、信頼できるLTPが再伝送されるたびに1だけ減分される。判定ブロック2249の結果がYESであるのに応答して、論理は、このNullcountカウントダウンループを出て、ブロック2250に進む。
【0129】
Nullcountカウントダウンを使用することにより、バッファの深さがラウンドトリップ持続時間のm個のLTP転送サイクルより大きいが、ラウンドトリップ持続時間のm個のLTP転送サイクル以内である構成では、約m個のLTP転送サイクルの安全性マージンが得られる。例えば、バッファの深さが32スロットであり、ラウンドトリップ持続時間が30個のLTP転送サイクルに等しく、m=5であるものと想定する。この場合には、論理がカウントダウンループを出たときには、mは3となる。これは、再現バッファがその始点(スロット0)にラップして戻るたびに、スロット0中のLTPが上書きされる前に、3つの余分なヌルLTPが伝送されることを意味する。バッファの深さが32スロットであるので、上書きされている再現バッファスロットの間のLTPサイクルの数は35となり、すなわち、ラウンドトリップ持続時間より5多い。
【0130】
不良レーンの検出に応答して、リンクは、アクティブなレーンの数を減少させた劣化状態で動作させることができる。さらに、このリンク劣化状態をカスケード状にして、4つのアクティブなレーンから始まって、第1の不良レーンを検出してこの不良レーンを除去し、アクティブなレーンを3つ用いるリンク動作になり、第2の不良レーンを検出してこの第2の不良レーンを除去し、アクティブなレーンを2つ用いるリンク動作になるなどのシーケンスでリンクが動作するようにすることができる。このカスケードは、第3の不良レーンを検出して、残った1つの良好なレーンによるリンク動作になるところまで継続することができる。なお、リンクは、非対称構成で動作させて、一方の伝送方向で、他方の伝送方向とは異なる数のアクティブなレーンを使用することができるようにすることもできることに留意されたい。
【0131】
図26は、1実施形態による、3つのアクティブなレーンを有するリンクを運用するXFRグループを示す図である。この場合には、3つのXFRグループG0、G1及びG2があり、対応するCRCはCRC−G0、CRC−G1及びCRC−G2である。LTPシーケンスは、レーンを変更せずにXFRパターンが繰り返される単一の状態しか有さないので、同じXFRグループが、それぞれ同じレーンを介して伝送される。その結果として、レーンごとのCRC比較は、レーンごとに行うことができ、或いは、XFRグループごとの場合には、LTPシーケンス状態を考慮しない。レーンが3つの場合には、各レーンごとに11回の32ビット転送が行われるので、標準検出LTP1つ当たり、各レーンを介して352ビットが伝送される。1実施形態では、アクティブなレーンが3つで動作するときには、16ビットのレーンごとのCRCが使用される。
【0132】
図27は、1実施形態による、2つのアクティブなレーンを有するリンクを運用するXFRグループを示す図である。LTPあたり33回の32ビット転送が行われるので、1つのLTP伝送ストリームについてレーン0及び1のそれぞれを介して転送されるビットの数は、交互に512ビットと544ビットとなる。その結果として、XFRグループごと/レーンごとのCRC比較方式が、2つのLTPシーケンス状態を用いて実施される。さらに、1実施形態では、16ビットのレーンごとのCRCが使用される。
【0133】
図28は、1実施形態による、単一のアクティブなレーンを有するリンクを運用するXFRグループを示す図である。LTPデータが送信されるレーンは1つしかないので、エラントになり得るのは、その唯一のレーンだけである。その結果として、レーンごとのCRC比較を実行する必要がない。
【0134】
しかし、複数のレーンを有するリンクがレーンを1つしか用いない動作に劣化するレーン劣化シナリオでも、依然として、その単一のレーンについてレーンごとのCRC計算が行われることがある。この計算は、その計算が常に実行されるようにハードウェアで実施されることがあるからである。この場合には、レーンごとのCRC計算は、単純に無視される。
【0135】
上述のように、本明細書に開示する実施形態では、リンクは、明示的なACKを使用することなく、信頼できるデータ伝送をサポートする。LTPは、リンクを介して伝送されているときに喪失する可能性はない(ケーブルが切断されるなどの事象がない限り)が、LTPは、エラーを含む可能性はある。暗示的な確認応答方式は、少なくとも送信機から受信機まで行き、送信機に戻るラウンドトリップを完了するのに要する時間と同じ長さの時間周期内に送信機で再試行要求を受信することなく実施されることを想起されたい。再試行要求が、伝送データとは異なるレーンのセットを介して送信されるので、単一の再試行要求がエラー(CRCチェックで識別される)を有し、したがってトスされる可能性がある。その結果として、受信側のリンクインタフェースは、送信側のリンクインタフェースに、それがエラントなLTPを受信したことを通知しようとすることはできるが、その通知(再試行要求によって示される)はトスされることになる。これは、RetryReqLTPの逐次対及びその他のヌルLTPの対(例えばRetryMrkr0、RetryMrkr1)の送信が、暗示的なACK方式を容易にする助けになる場合である。
【0136】
第1に、これらはヌルLTPであるので、これらは、再現バッファには記憶されず、したがって、再伝送に利用することができない。しかし、ヌルLTPの逐次対を送信することにより、1)2つのヌルLTPのうちの少なくとも1つはエラーなく上手く受信される、又は2)両方のLTPがエラーを有する場合に、そのことが逐次LTPエラーとして検出され、リンクの再訓練がトリガされる、という2つの事象のうちの一方が生じることが保証される。(再)訓練時には、訓練シーケンスは、リンクパートナの両方の送信機/受信機対によって実行されるので、そのリンクをアクティブな動作に復帰させる前に、両方向のリンクの適当な動作が検証される。再訓練が完了すると、送信側は、受信側からの保証付き再試行要求を待機し(その間にヌルLTPを送信する)、その後で、1つ又は複数の再試行マーカを送信した後に新たなLTPの送信を開始する(又はLTPの再現を引き続き行う)。別の利点は、これらのヌルパケットの対を送信すると、LTPのうちの少なくとも1つが良好となる可能性が高くなることである。
【0137】
ポート、バッファ、及びクレジット管理
図29は、スイッチ及びHFIのポート間の関係とアーキテクチャのレイヤ及びサブレイヤとを示す図である。スイッチは、パケットをファブリックエンドポイントに向かって転送するものであり、イングレス(受信)ポート及びエグレス(送信)ポートをそれぞれ含む複数の物理ポートを有する。さらに、上述の
図2を参照すると、これらの各ポートは、リンクファブリックサブレイヤ(L2)とインタフェースをとるリンク転送サブレイヤ(Ll.5)とインタフェースをとる物理サブレイヤ(PHY)(L1)を含む。本節は、HFIデバイス及びスイッチデバイスの両方のアーキテクチャのリンク転送サブレイヤとリンクファブリックサブレイヤの間でのパケットデータの移動を容易にするポートの特徴に関する節である。ポートの構成要素は、イングレス及びエグレスバッファ管理、SC及びVL変換機構、経路指定の方法及び定義、クレジット管理、並びにエグレスポートのアービトレーションである。HFIアプリケーションは、パケットを構築した後で、それらをリンク転送サブレイヤに伝送する前に、経路指定及びスケジューリングのためのポートに転送する。逆方向には、ポートは、パケットを受信バッファに転送し、エグレスポート宛先を選択する。このアーキテクチャは、クレジットに基づくフロー制御方式を利用して、クレジットに基づくフロー制御ポリシーが送信ポート及び受信ポートの対(送信機/受信機ピアとも呼ばれる)の間で実施されるファブリック内のパケットのフローを制御する。パケットは、パケットがファブリックを横断する際に一時的な記憶を行う一連のバッファを介して、デバイス(HFI/スイッチ)からデバイス(スイッチ/HFI)に流れる。フロー制御は、デバイスAのパケットをいつデバイスBのバッファに転送できるかを制御する機構である。以下で詳述するように、これらのバッファは、VLに基づいて割当て及び管理され、各VLには、複数単位のバッファ空間が割り当てられる。クレジットに基づくフロー制御方式は、VLバッファのバッファオーバランを防止し、リンクを求めて競合するVLの間に公平性をもたらす。
【0138】
フロー制御の1つの特徴によれば、柔軟なクレジット管理機構が提供される。信頼できる増分クレジットリターンを可能にするリンクレイヤ再試行を使用することにより、このアーキテクチャは、クレジット管理を行い、送信機の責任をトラッキングすることができる。これにより、トラフィックが飛行中に、クレジットを動かす柔軟性が高まる。このことは、単純に、所与のVLでクレジットが利用可能でないときに送信機がパケットをブロック又は破棄すべきかどうかを送信機に知らせることによって、フロー制御を容易にVLごとに使用可能にしたり、使用不能にしたりすることができることを意味している。
【0139】
この柔軟なクレジットに基づくフロー制御機構は、以下の特徴を規定する。
・信頼できるリンク転送プロトコルを利用して、多数の仮想レーンの間の効率的な増分クレジット交換を可能にする。
・クレジット割当ての管理を送信機が単独で実行できるようにする。
・リンクを休止させる必要なく、トラフィックが流れている間にVLごとにクレジットを再構成できるようにする。
・送信機の構成に応じて、フロー制御を行っても行わなくても動作することができる。
・クレジットの交換及び割当ての単位を受信機が定義することができるようにし、これにより様々なハードウェア設計間の相互運用性を実現する。
・クレジットを単一のVLの専用にすること、VLのグループの間で共有すること、かつ/又は全てのVLの間で共有することができるようにする。
【0140】
クレジットは、対数スケールを用いて増分的に交換される。受信機は、戻されるクレジットの数を、送信機に連絡する。この機構は、全ての交換(クレジット、パケット、その他の制御メッセージ)が高い信頼性で行われることを保証する、信頼できるリンク転送機構が存在することによって可能となる。
【0141】
増分クレジット交換を使用することにより、送信機は、クレジットの全てのトラッキングを行うことができる。その結果として、所与のVLで利用可能なクレジットを、トラフィックフローに影響を及ぼすことなく、また再構成を受信機と調和させる必要なく、再構成することができる。これにより、この再構成は、飛行中のトラフィックにも送信機で待ち行列に入っているトラフィックにも影響を及ぼすことなく、行うことができる。フロー制御は、複数のVLについて独立して使用可能にしたり使用不能にしたりすることもできる。例えば、1実施形態では、所与のVLについてフロー制御が使用不能になっている場合に、クレジットマネージャは、現在利用できるクレジットが不十分である場合には、所与のVLについてパケットを破棄することになる。フロー制御が使用可能になった場合には、クレジットマネージャは、そのVLにバックプレッシャを掛け、十分なクレジットが利用可能になるのを待機した後で、パケット(そのパケットのフリット)を伝送する。フロー制御を使用不能にして、管理プロトコルのトポロジのデッドロックを回避したり、イーサネット(登録商標)のようなリンクレイヤ挙動を実現して輻輳を識別する手段としてパケット損失を使用するTPC/IPなどのプロトコルを容易にしたりすることもできる。
【0142】
図30は、1対のピアデバイスAとBの間のリンクでのクレジットの使用の特徴の一例を示す図である。デバイスAは、クレジットマネージャ3002aを含む送信ポート3000aと、初期化ブロック3006a及び複数のVL FIFOバッファ3008aを含む受信ポート3004aとを含む。デバイスBは、同じ番号を付された要素で表すように同様に構成されるが、添え字が「a」ではなく「b」になっている。
【0143】
一般に、各デバイスポートは、バッファ使用に割り当てられたメモリを含む。所与のポートのバッファ空間の全体のサイズは、そのポートのホストデバイスがサポートするVLの数、及びそのポートに接続されるリンクの予想ケーブル長など、様々な要因によって決まることがある。VLバッファのサイジングは、その設計の性能に大きな影響を及ぼす可能性がある。バッファリングが小さすぎて、送信機から受信機までのラウンドトリップ時間(RTT)をカバーしない場合には、最大帯域幅を実現することができない。バッファが大きすぎる場合には、ASICの面積及びパワーに影響を及ぼす可能性がある。1実施形態では、ファブリックパケットのフリットは、FP全体に十分なバッファ空間があるときに、次のホップまでしか伝送できない。別の実施形態では、あるパケットの一部分を記憶するために利用可能なある程度のバッファ空間がある場合には、そのFPのフリットの初期転送は許可される。1実施形態では、VLバッファをサイジングするときに、1)チャネルレート、2)ケーブル長、3)伝搬遅延、及び4)最大ファブリックパケット長(最大転送単位又はMTU)といった要因を考慮する。1実施形態では、MTUは、VLごとに構成可能である。クレジットリターン遅延及びクレジットリターン処理の処理待ち時間など、追加の要因を考慮することもある。
【0144】
図31a、
図31b及び
図31cは、専用バッファ編成、共有2ティアバッファ編成、及び共有3ティアバッファ編成の例を示す図である。専用バッファ編成では、各VLに、メモリのそれぞれの部分が割り当てられる。異なるVLに異なるメモリ部分を割り当てることができることが分かる。1実施形態では、各VL用のメモリ部分は、FIFOとして実装される。1実施形態では、これらのFIFOは、ヘッドポインタ及びテールポインタを有する円形FIFOとして実装される。
【0145】
共有2ティアバッファ編成では、バッファ空間の第1の部分は、VLに専用として割り当て、残りの第2の部分は、VLの間で共有されるように割り当てる。
図31bでは、第2の部分は、全てのVLの間で使用される共有プールを構成している。ただし、これは単なる例示であり、共有プールは、全てのVLのではなく一部のVLの間で共有することもできる。例えば、所与のVLを管理のために使用して、このVLが、第2のティアのバッファプールを共有するVLとは共有されない、他のVLとは異なるサイズの専用VL FIFO空間を利用するようにすることもできる。
【0146】
3ティア共有バッファ編成方式では、メモリの第1の部分は、個々のVLに専用空間として割り当てられ、メモリの第2の部分は、VLの各サブセットの間でそれぞれ共有される2つ以上の共有プールの間で分割され、第3の部分は、全てのVL又はVLのサブセットの間で使用される共有プールに使用される。
図31cに示す構成では、ティア2は、2つの共有プールを含むが、ティア3は、全てのVLの間で共有される1つのバッファプールを含む。これらの共有プールのサイズは、同じである必要はなく、同様に、各サブセットに含まれるVLの数も異なっていてもよい。
【0147】
リンク動作の進行中には、各送信機は、バッファ構成並びに「近隣」デバイスにおけるピア受信機の受信バッファにおけるVLバッファ及び1つ又は複数の共有バッファ空間(適用可能な場合)の充填レベル(利用可能空間)の「ビュー」を維持する。ここで、近隣デバイスは、リンクの反対側端部にある。これは、以下の手法を用いることによって容易になる。最初に、リンクデータ転送動作を開始する前に、近隣デバイスピア送信ポート及びピア受信ポートのそれぞれに、初期受信バッファ構成と、受信ポートの受信バッファのVL割当てとを通知する。1実施形態では、ファブリックマネージャは、受信機のバッファ編成の指定又は識別のうちの1つ又は複数を担当する。次いで、ファブリックマネージャは、送信機のクレジットマネージャを、バッファ編成及びサポートされるデータVLの数を反映するようにプログラムすることができる。1実施形態では、ファブリックマネージャは、リンクネゴシエーション及び初期化手続き呼出しLNIと関連して、この動作を実行する。
【0148】
データがリンクを介して流れ始めると、様々な受信ポートにおけるバッファ可用性は、各受信機で受信されるフリット、及び次のホップへのフリットの転送に関連して受信機のバッファから除去されるフリットに応じて、動的に変化する。これらの変化に関連して、受信ポートは、クレジットACKをそのピア送信ポートに送信する。ここで、これらのクレジットは、送信ポートのクレジットマネージャによって処理されて、送信ポートが有する受信ポートの現在のバッファ構成のビューを更新する。リンクラウンドトリップ転送時間及びクレジット処理待ち時間を含む待ち時間により、送信ポートにおける受信ポートバッファ構成のビューは、受信ポートにおける実際の現在のバッファ構成より遅れるので、これらの待ち時間を見込むために、追加のバッファ空間が設けられる。
【0149】
リンクが初期化された後、パケットがそのリンクを横断することができるようになる前に、各1方向リンクの両端の受信機及び送信機のピアを、受信機のバッファ編成及び受信機で実施される所望のクレジット編成を基準として、一致させる。上述のように、1実施形態では、バッファ編成情報は、ファブリックマネージャによって受信機及び送信機のピアに提供される。1実施形態では、クレジット編成は、受信機で実施され、対応するクレジット編成情報は、受信機からそのピア送信機に送信される。
【0150】
さらに詳細には、受信機で実施されるクレジット編成は、その受信機のクレジットACKのリターンに関連して利用されるバッファ割当て単位(AU)及びクレジットリターンACK単位(CU)の両方を使用するものである。AUは、受信機におけるバッファ割当てに使用される最小ブロックサイズである。クレジットACK単位(CU)は、受信機によって戻される各クレジットによって表される受信機AUの数である。1実施形態では、受信機は、それが使用しているAU及びCUを指定する対応する変数vAU及びvCUを、そのピア送信機に送信する。1実施形態では、変数vAU及びvCUは、対数スケールを使用する。その例を、以下の表5及び表6に示す。
【0151】
図30に示すように、受信機3004a及び3004bはそれぞれ、バッファ割当て単位変数(vAU)及びクレジットACK単位変数(vCU)を含むクレジット編成情報を、それぞれの送信機3000a及び3000bに通信し、そこで、それらは、
図30に破線で示すように、クレジットマネージャ3002a及び3002bによって受信される。各送信機のクレジットマネージャには、その送信機のピア受信機によって実施されるバッファ編成を定義する情報も提供される。各送信機のクレジットマネージャ3000は、そのピアの受信ポートから受信した現在利用可能なクレジットを把握しており、それに応じてそのピアへのパケットのフローを制御する。パケットが受信機3004によって処理されるにつれて、バッファ空間が解放され、受信機は、実線で示すように、クレジットACKをその送信機ピアのクレジットマネージャ3002に戻す。ファブリックの動作上の必要に基づいて、中央ファブリックマネージャが実行時動作中に様々なVLの間の相対的なクレジット割当てに変更を加えることもできる。
【0152】
クレジットマネージャが初期化された後で、クレジットマネージャは、受信側のバッファ空間の量のトラッキングを担う。1実施形態では、専用クレジット及び共有クレジットの配分は、表4に示す以下の1組の構成レジスタのセットを用いて構成される。これらのレジスタは、全て、ピアの割当て単位(AU)の値を単位としている。
【0154】
Dedicated_Limit[VL]構成レジスタは、特定のVLのために受信機のバッファの専用部分を確保するために使用される。VL間でのQoS分離を保証するために、ファブリックマネージャは、アクティブな各VLごとに何らかの専用空間を構成することが推奨される。
【0155】
Global_Shared_Limit構成レジスタは、共有プール型編成で使用される。この構成レジスタは、受信機のバッファのどの程度が、全てのVLによって共有されるかを示す。専用限界及び大域共有限界の合計は、総バッファ空間を超えることはできない。さらに、大域共有空間が使用されない場合には、このレジスタの値は0に設定される。
【0156】
Shared_Limit[VL]構成レジスタは、共有空間のうち、個々のVLが消費することができる空間の量の限界を指定する。このレジスタが0に設定されると、その所与のVLは、共有空間にアクセスできなくなる。ファブリックマネージャは、個々のVLが共有空間をあまり多く消費しすぎないようにこのレジスタを構成することにより、1つのVL上のトラフィックの輻輳又はバーストによって、他のVLが共有バッファ空間の不足に苦しむことを防止することができる。個々のVLについての限界は、Global_Shared_Limitを超えることはできないが、全てのVLの限界の合計は、Global_Shared_Limitを超えてもよい。例えば、Global_Shared_Limitを10とし、4つのVLそれぞれのShared_Limitを5とすることは有効であり、この場合には、1つのVLが5単位以下の共有空間を使用することはない。
【0157】
送信機でクレジットを消費するときには、クレジットは、VLの専用クレジットプールから先に消費される。所与のVLについて、全てのVL専用クレジットが消費された後で、その所与のVLが利用できる共有プールから、クレジットが消費される。1つのパケットが、残りの専用クレジットより大きいときには、そのパケットは、専用プール及び共有プールの両方からクレジットを消費することができる。
【0158】
送信機においてクレジットを補充するときには、クレジットは、先に共有プールに補充される。所与のVLによって消費された全ての共有クレジットが補充された後で、その所与のVLの専用プールにクレジットが補充される。
【0159】
2ティア共有バッファ構成に適用される上記の内容は、3ティア共有バッファ構成にも拡張することができる。この場合には、クレジットは、所与のVL、その後にその所与のVLを含むVLのサブセットの間で使用される共有プール、その後に大域共有プールという順序で消費される。補充は、逆方向に行われる。すなわち、大域共有プール、その後にVLのサブセットの間で使用される共有プール、最後に所与のVLの専用プールの順に行われる。
【0160】
パケットがリンクを介して流れることを可能にする変数の1つは、受信側で利用可能なバッファ空間の量である。上述のように、各送信機は、(1実施形態ではそのクレジットマネージャを介して)バッファ構成及びその受信機ピアの使用のビューを維持するが、これは、(部分的には)クレジットACKを使用することにより実施される。1実施形態では、各VLのクレジットを管理するのは、クレジットマネージャの責任である。仮想カットスルーポリシーを用いるときには、パケットは、受信側バッファにパケット全体を受けるのに十分な利用可能な空間がない限り、アービトレーションのために完了することができない。ワームホール経路指定を使用するときには、パケットは、利用可能な空間が>0であれば、アービトレーションのために完了する。ハイブリッドな手法では、フリットの「チャンク」は、受信機がそのチャンクを受信するのに十分なクレジットを有する場合には、送信することができる。この実施形態では、チャンクのサイズは構成可能であり、そのサイズは、リンクがアクティブである間に動的に再構成することができる。
【0161】
パケットがアービトレーションを得ると、その個別のVLのクレジットのプールから、又はそのVLに適用可能な共有プールから、いくつかのクレジットが割り当てられる。クレジットプールは、受信側からクレジットACKを受信したときに補充される。このクレジットACKは、受信側がそのバッファからフリットの特定の数を取り除くときに発生する。クレジットACKは、クレジットリターン(CrdRet)LFコマンドフリットに応じて、又はLTPに含めて搬送される側波帯情報によって、戻される。クレジットACKに含まれる情報は、VL及び確認応答されたクレジットの数を含むが、以下で述べるように、単一のクレジットLFコマンドフリットが、複数のVLのクレジットACKを含むこともある。デバイスは、CrdRetLFコマンドフリットを介してクレジットリターンを受け入れる。14b CRC LTPフォーマットを選択した場合には、デバイスは、LTP側波帯情報も介して、クレジットリターンを受け入れる。14b CRC LTPフォーマットを使用するときには、デバイスは、LTP側波帯機構を使用してクレジットを戻さなければならないが、必要に応じて、CrdRetLFコマンドフリットを使用することもできる。
【0162】
図30に示して上述したように、バッファ割当て単位変数(vAU)及びクレジットリターンACK単位変数(vCU)は、リンクデータ転送動作が開始される前に(例えばLNIプロセス中に)、近隣デバイス同士で交換される。1実施形態では、これらの変数は、以下の表5及び表6に示すように実装される。ここに示すように、AU及びCUは両方とも、対数スケールを使用する。
【0165】
リンクの両側の近隣デバイス同士が、LNI中に異なる変数vAU及び/又はvCUを報告する場合には、1実施形態では、各ポートの送信機は、クレジットを管理するときに、その近隣デバイスのAUを使用する。さらに、各送信ポートは、イングレスクレジットACKを処理するときに、その近隣デバイスのCUを使用する。
【0166】
この状況の一例を、
図33に示す。
図33は、それぞれがvAU及びvCUについて異なる値を有する2つの異なるデバイスタイプ(デバイスA及びデバイスBなど)の一例を示す図である。この例では、デバイスAは、vAU=4及びvCU=1でブートする。vAUは、128B割当て単位用に設計されたデバイスAの受信バッファ(Rbuf)のハードウェア設計と一致している。デバイスBは、vAU=3及びvCU=0でブートする。ここで、vAUは、64B割当て単位用に設計されたデバイスBのRbufと一致している。LNI中に、各デバイスは、そのvAU及びvCUの変数を送信する。近隣デバイスのvAU及びvCUを受信したら、各デバイスは、それ自体の送信機を、クレジットを管理するときに近隣デバイスのAUの値を使用し、近隣デバイスのCUの値を使用して近隣デバイスからのクレジットリターンを処理するようにプログラムする。一方、各デバイスの受信機(RX)及びクレジットリターン単位は、それ自体のAU及びCUの値を使用する。
【0167】
1実施形態では、戻されたクレジット単位は、マルチビットフィールド及び対数スケールを使用して符号化される。戻されたクレジット単位(CR)の1つの符号化の一例を、以下の表7に示す。
【0169】
確認応答されたクレジットの数を決定するアルゴリズムは、LF側波帯を使用するかLFコマンドフリットを使用するかに関わらず、同じである。違いは、LFコマンドフリットを介してクレジットACKを戻すときに、VLが暗示されることである。1実施形態による、増分クレジットACKのLFコマンドフリットフォーマット3200の一例を、
図32に示す。図示のように、下位の6バイトは、16個の3ビットフィールドに区分され、各3ビットフィールドは、(ビット55の乗数「i」と組み合わせて考慮した場合に)それらが関連付けられているVLを識別するオフセット(ビット0に対する)を有する。例えば、「i」が0である場合には、LFコマンドフリットフォーマット3200を利用して、VL0〜15のリターンクレジットを指定することができるが、「i」が1である場合には、VL16〜31のリターンクレジットが指定される。対数スケールを使用することにより、3ビットで、クレジット値0、1、2、4、8、16、32及び64を符号化することができる。したがって、32個のVLを有するシステムでは、全てのVLのクレジットを、16バイトしか使用せずに戻すことができる。
【0170】
表8は、vAU=3(AU=64)及びvCU=0(CU=1)であるときに戻されるクレジットの一例を示している。戻される総クレジットは、CR*AU*CUである。ここで、CRは、クレジットの数であり、AUは、割当て単位のサイズであり、CUは、クレジット単位の値である。64バイトのAUでは、符号「111」で、4096バイトのクレジットが戻されていることを指定する。
【0172】
このアーキテクチャのクレジットに基づくフロー制御機構は、従来の手法に優る有意な利点を提供する。例えば、ファブリックの効率の観点から、この機構は、16個のVLのクレジットを、単一の8バイトメッセージで戻すことを可能にする。各VLのクレジットは、3ビットしか必要とせず、0から128クレジット交換単位が戻されることを示すことができる。さらに、クレジット交換単位の合図は、構成可能である。これに対して、InfiniBandなどのファブリックでは、それに匹敵する量のクレジットを交換するために、128バイト(16個の8バイトメッセージ)を必要とすることになる。
【0173】
クレジットトラッキングを送信機に行わせることにより、利用可能なクレジットの再割り付けは、単に送信機でカウンタを調節することによって行うことができる。送信機は、クレジットが戻されるときに、それらのクレジットを異なるVLに再割り付けすることもできる。この柔軟性により、アプリケーションの必要、QoS要件、及びその他のファブリック上のワークロードの変化に応答して、VLの性能を調整することができる。これに対して、絶対的なクレジットを使用する従来の解決策は、トラフィックを休止させ、送信機と受信機の間の変化を調整することなく、高い信頼性でクレジットを動かすことはできない。
【0174】
VLアービトレーション
各エグレスポートは、異なるVLのパケットを出力リンクに向かって送信するために使用されるアービトレーションを提供する。初期化中にファブリックマネージャによってプログラムされるVLアービトレーションテーブルは、このアービトレーションプロセスを規制するための1組の規則を含む。これらの規則は、各VLの帯域幅の量を規制し、VL間のプリエンプションの優先順位も定義する。
【0175】
VLの優先順位及びスケジューリングは、送信機によって決まるので、このアーキテクチャの様々な実施態様は、相互運用性に影響を及ぼすことなく、この機能に大幅に異なるアーキテクチャを提供することができる。例えば、本明細書に開示する実施形態の他に、VLの使用についてさらに大きな制御及び改善されたスケジューリングを行うことを可能にする、さらに強力で柔軟な機構が定義されることが考えられる。
【0176】
このアーキテクチャは、リンクレベルの再試行及びプリエンプションなどの機能をサポートする。これらの機能は、パケットフロー中に「バブル」を引き起こす可能性がある(パケット断片化)。(例えば以前のプリエンプション、リンク再試行などによって)現在のVLに関連するパケットバブルがあり、現在のVLをプリエンプトすることができるVLについては待ち行列に入っている他のパケットがない場合には、VLパケットデータの代わりに遊休がフローに挿入される。デバイスのエグレスポートでは、流れているVLは、プリエンプトVLとして指定されているVLが待ち行列に入っているパケットを有さない限り、中断されない。
【0177】
図34は、プリエンプションをサポートするVLアービトレーション機構3400の1実施形態を示す図である。この機構は、VLアービトレーションテーブル3402と、プリエンプション構成レジスタ3403と、プリエンプションマトリクス3404と、遠隔デバイスのVLごとのクレジット3406と、VLごとのエグレスFIFO3408と、送信パケットアービトレーション論理3410とを含む。VLアービトレーションテーブル3402は、低優先順位テーブル3412と、高優先順位テーブル3414と、プリエンプションテーブル3416と、高優先順位限界ブロック3418と、プリエンプト限界ブロック3420とを含む。
【0178】
1実施形態では、3レベルアービトレーション方式を、データVLに使用する。プリエンプトVLは、他のプリエンプトVLの間で重み付き公平ラウンドロビンを利用し、残りの2つの優先順位レベルより優先される。これらの残りのVLは、最低レベルの優先順位を占め、以下のように定義される。つまり、残りのVLについては、重み付き公平方式の最上部に積層された2重レベルスケジューリングを用いて、2レベル方式が利用される。さらに、この方式は、優先順位の低いVLの順方向進行を補償する方法を提供する。1実施形態では、重み付け、優先順位付け、及び最小順方向進行帯域幅は、ファブリックマネージャによってプログラム可能である。
【0179】
VLアービトレーションは、VLアービトレーションテーブル3402によって制御される。図示の実施形態では、このテーブルは、5つの構成要素、すなわちプリエンプトテーブル3416、高優先順位テーブル3414、低優先順位テーブル3412、プリエンプト限界ブロック3420、及び高優先順位限界ブロック3418からなる。プリエンプトテーブル3416、高優先順位テーブル3414及び低優先順位テーブル3412はそれぞれ、VL/重み対のリストを含む。1実施形態では、プリエンプションリストは、最小の長さが1、最大の長さが32であり、高優先順位リストは、最小の長さが1であり、最大の長さが128であり、低優先順位リストは、最小の長さがサポートされるデータVLの数と等しく、最大の長さが128である。高優先順位テーブルリスト及び低優先順位テーブルリストは、異なる長さにすることができる。各リストエントリは、VL番号(0〜31の値)と、重み付け値(0〜255の値)とを含み、アービトレーションサイクル中にそのVLの順番が回ってきたときにそのVLから伝送することができる64バイト単位の数を示す。パケットヘッダ中の長さフィールドを使用して、パケット中の単位の数を決定する。1実施形態では、この計算は、4バイトの増分に維持されるが、他の実施形態では、8バイト及び16バイトなど、その他の細分性を利用することもできる。重み0は、このエントリをスキップすべきであることを示している。
【0180】
プリエンプトテーブルリスト、高優先順位テーブルリスト及び/又は低優先順位テーブルリスト並びに2つ又は3つ全てのリストでは、同じデータVLを複数回リストすることもできる。構成されたデータVLは、これらのテーブルのうちの少なくとも1つにリストされなければならない。例えば、1実施形態では、低優先順位テーブル3412は、各データVLが少なくとも1つのエントリを有することができるようなサイズになっている。構成されたデータVLがどのリストにもリストされていない場合には、このデータVLのパケットを直ちにドロップすることもできるし、アービタが送信すべきパケットを有していなければ送信することもできるし、送信しないこともできる。プリエンプト限界ブロック3420及び高優先順位限界ブロック3418は、それぞれ、高優先順位パケット又は低優先順位パケットを送信する機会がなくても伝送することができるプリエンプトパケット又は高優先順位パケットのバイト数を示す。1実施形態では、バイト数は、限界値(限界フィールドに記憶された値)に16バイト、32バイト、64バイトなどの複数バイトを乗算した値である。1実施形態では、カウントは、重みについて上述したのと同様の方法で行われる(例えば、この計算は、4バイトの増分に行われ、プリエンプト/高優先順位パケットは、現在のバイトカウントがプリエンプト限界/高優先順位限界の値を超えていない場合に送信することができる)。1実施形態では、各限界フィールドは、14ビットのサイズであるが、その他のサイズを使用することもできる。14ビットフィールドを利用する実施形態では、最大値16383は、バイト限界が無限であることを示す。(無限のバイト限界では、低優先順位パケットの順方向進行がこのアービトレーション方式では保証されないことに留意されたい。)1実施形態では、プリエンプト/高優先順位限界値0は、それぞれ高優先順位/低優先順位テーブルに機会が与えられる前に、プリエンプト/高優先順位テーブルのパケットを1つしか送信することができないことを示している。
【0181】
1実施形態では、VLアービトレーションテーブル3402aは、ポートがアクティブであるときに修正することができる。さらに、このような修正は、移行中の任意のパケットの断片化を生じない。ただし、この変更中には、アービトレーション規則は保証されない。
【0182】
プリエンプションマトリクス3404は、どのVLが他のVLをプリエンプトすることができるかについての規則を提供する、柔軟な制御機構をサポートする。1実施形態では、VL15が、ファブリック管理用に確保されており、別のVLによってプリエンプトすることができない。1実施形態では、このマトリクスは、最大N個のデータVLをサポートする(N+1)xN構造であり、VL15は、最大N個のデータVLをプリエンプトする。必要に応じて、プリエンプトすることができないVLが予め定義されていない場合には、NxNマトリクスを使用することができる。好ましくは、所与の実施態様で、その実施態様がサポートしているデータVLの最大数に基づいて、プリエンプションマトリクスをサイジングするものとする。どのVLがプリエンプトを行うことができるかを制御するために、行ごとに1つ又は複数のビットをアサート(「1」)する。
図35は、4個のデータVLを有する例示的なデバイスの場合の5x4プリエンプションマトリクス3500を示す図である。
【0183】
それ自体をプリエンプトするVLについてのプリエンプションマトリクス中のエントリは、無視する。プリエンプションマトリクス3500については、プリエンプション規則は、以下の通りである。
・VL3は、VL2、VL1及びVL0をプリエンプトすることができる。
・VL2は、VL1及びVL0をプリエンプトすることができる。
・VL1は、VL2及びVL0をプリエンプトすることができる。
【0184】
各優先順位テーブル内で、重み付き公平アービトレーションを使用する。各テーブル中のエントリの順序は、VLスケジューリングの順序を指定し、重み付け値は、そのエントリに割り当てられる帯域幅の量を指定している。アービトレーションは、テーブル中の各エントリが順番に処理される、サイクルに基づくものである。
【0185】
「現在の」重み以外の各優先順位テーブル内のエントリの残りの重み、及び優先レベル間の遷移があるときに保存されるVLのための記憶領域はない。これにより、プリエンプトの現在の重み/VL、高い現在の重み/VL、及び低い現在の重み/VLという、3組の残りの重み及び保存されたVLの値が得られる。優先レベル間の遷移がある場合には、現在の値が中断されて保存され、新たな優先レベルに遷移し、新たな現在の重み/VLの値がロードされた後で、アービトレーションサイクルに入る。元の優先レベルに遷移して戻ると、保存された現在の重み及びVLがリロードされ、アービトレーションは中断したところから再開される。
【0186】
これら3つのテーブルのそれぞれについて、別個のポインタ及び利用可能重みカウントのテーブルが維持される。これらのポインタは、テーブル中の現在のエントリを識別し、利用可能な重みカウントは、データパケット伝送に利用可能な、現在のエントリが有する重みの量を示す。テーブルがアクティブであるときには、そのテーブル中の現在のエントリを検査する。以下の条件が全て真である場合には、このエントリに対応するパケットが、伝送のために出力ポートに送られ、パケットサイズ(4バイトずつ増分される)が、現在のエントリの利用可能な重みカウントから推測される。その条件とは、
1.リストエントリの利用可能な重みが正である。
2.そのエントリのVLに利用可能なパケットがある。
3.このパケットについて、バッファクレジットが利用可能である。
【0187】
なお、新たなパケットの開始時の利用可能な重みが正である場合には、そのパケットが利用可能な重みより大きい場合でも、上記の条件1は満たされる。
【0188】
これらの条件のうちのいずれかが真でないときには、テーブル中の次のエントリを検査する。現在のポインタは、テーブル中の次のエントリに移動し、利用可能な重みカウントがこの新たなエントリの重み付け値に設定され、上記のテストが繰り返される。これは、伝送するためにそのポートに送ることができるパケットが見つかるまで繰り返される。テーブル全体をチェックしても、上記の基準を満たすエントリが見つからない場合には、次の低優先順位テーブルがアクティブになる。
【0189】
サービス品質(QoS)
このアーキテクチャは、
・ジョブ分離/資源割当て、
・サービス分離/資源割当て、
・所与のジョブ内のアプリケーショントラフィック分離、
・プロトコル(例えば要求/応答)のデッドロック回避、
・ファブリックのデッドロック回避、
・トラフィック優先順位付け及び帯域幅割当て、及び
・トラフィックのプリエンプションを許可することによる待ち時間ジッタ最適化、
など、いくつかの機能を提供するQoSフィーチャをサポートする。
【0190】
このアーキテクチャは、仮想ファブリック(vFabric)、トラフィッククラス(TCs)、サービスレベル(SLs)、サービスチャネル(SCs)及び仮想レーン(VLs)を介して、QoSの非常に柔軟な機能を提供する。QoSの中心には、ファブリック内のパケットを区別するために使用されるSC機構がある。1実施形態では、幅広く様々なファブリックのトポロジ及び構成をサポートするために、SC割り付けは、ファブリックマネージャによって管理され、所与のパケットのSCは、それがファブリックを横断する際に、デッドロックを回避することができるように変化することができる。
【0191】
アプリケーション及びシステムアドミニストレータの動作は、vFabricを中心にしている。vFabricは、1組のファブリックポートと1つ又は複数のアプリケーションプロトコルの交差点である。各vFabricごとに、1組のQoS及びセキュリティポリシーが、システムアドミニストレータによって確立される。所与のvFabricは、QoSのトラフィッククラス及びセキュリティのためのパーティションと関連付けられる。
【0192】
トラフィッククラスは、所与のトランスポートレイヤ又はアプリケーションが使用する一群のサービスレベルのグループを表す。一部のトランスポートレイヤは、デッドロックを回避するために複数のQoSレベルを使用することができる(要求トラフィックと応答トラフィックを分離するなど)が、一部のトランスポートレイヤは、優先順位の高い制御トラフィックを優先順位の低いデータトラフィックから分離するために複数のQoSレベルを利用することができる。より単純なトランスポートレイヤであれば、単純に、トラフィッククラスを1つのSLと関連付けることができる。1実施形態では、このアーキテクチャは、最大で32個のトラフィッククラスをサポートするが、4個から8個が、より可能性の高い代表的な構成である。
【0193】
トラフィッククラスは、サービスレベルのエンドツーエンドの概念によって実現する。1実施形態では、トラフィッククラスは、複数のサービスレベルにまたがることができるが、1つのサービスレベルは、1つのトラフィッククラスにしか割り付けることができない。1実施形態では、最大で32個のサービスレベルがサポートされる。サービスレベルは、ファブリックを通るパケットフローに優先順位付けすることによって機能する。サービスレベルは、アーキテクチャのレイヤ4のプロトコル及びアプリケーションに見える最下位層のQoS概念である。
【0194】
その下にあるサービスレベルが、異なるサービスレベルのパケットを、それらがファブリックを通過するときに区別する、サービスチャネル(SC)である。SCは、ファブリックパケットに含まれる唯一のQoS識別子であるので、他のネットワークより密なパケットフォーマットを可能にする。いくつかのファブリックトポロジでは、サービスレベルは、複数のサービスチャネルにまたがることができるが、サービスチャネルは、1つのサービスレベルにしか割り付けることができない。1実施形態では、このアーキテクチャは、32個のSCをサポートする。1実施形態では、SCのうちの1つ又は複数は、帯域内ファブリック管理の専用である。
【0195】
1実施形態では、ファブリックマネージャは、各エンドポイントに、各サービスレベルから単一のSCへのマッピングを提供するSL2SCテーブルを構成する。ある点では、SLは、QoSレベルのカノニカルなIDであり、各QoSレベルが、ファブリック幅にわたって正確に1つのSL値を有するようになっている。SL2SCテーブルの目的は、トポロジを経路指定するためにいくつのSCが必要であるか、並びにその経路指定の正確な割り付け及び有効なランチSCはどんなものであるかについての詳細を、トランスポートレイヤから隠すことである。さらに複雑な構成では、所与のQoSレベルに対して使用する有効なランチSCは、送信者ごとに変化する可能性もあるが、全ての送信者が依然として、QoSレベルについて同じカノニカルIDを有することができる。いくつかのAPI(オープンファブリック及びPSMなど)は、明示的にSIを必要とすることもある。
【0196】
いくつかの受信機は、所与のパケットがどのQoSレベルで受信されたかを識別する必要があることがある。このような受信機では、SC/SLテーブルも、各エンドポイントで構成される。このテーブルは、カノニカルな翻訳を提供し、複数のSCを使用する経路指定アルゴリズムの複雑化を解消する。
【0197】
受信機は、受信したQoSレベルを完全に無視してもよいし、それをAPI(オープンファブリックなど)に渡してもよいし、それを検証してもよいし(何らかのSLA検証などのため)、或いはさらに洗練された処理(QoSレベルを使用してゲートウェイにおけるE番目の優先レベルの選択を助けるなど)を行ってもよい。いくつかの受信機は、受信パケット中のQoSレベルを使用して、適当な応答を生成することができる。例えば、1つの簡単なサービスが、応答としてQoSレベルを模倣する(そして上記の送信側処理を行ってその応答のための適当なランチSCを保証する)こともできる。他の受信機は、応答パケットを、同じトラフィッククラスの中で異なるQoSレベルにすることもできる。いずれの場合も、受信したときと同じSCを使用して単純に応答パケットを送信することは、経路指定のアルゴリズム及びトポロジによっては問題を生じる恐れがあるので、有効ではない。したがって、この問題を取り除くためのカノニカルなマッピングがある。
【0198】
図44は、クレジットループ回避を備えたトポロジにおけるTC、SL及びSCの使用の一例を示す図である。この例では、ファブリックを通る2つのHFIエンドポイントが、8スイッチホップ経路を介して接続される。2つのTCが使用され、1つは、2つのSL(要求SL及び応答SL:SL0、SL1)を必要とするPGAS用(TC0)であり、1つは、1つのSL(SL2)しか必要としない記憶用(TC1)である。各SLは、ファブリック内のデッドロック回避のために1対のSC(SC0/SC1、SC2/SC3、又はSC4/SC5)に割り付けられる。パケットがファブリックを横断するときに、SCは、リンクごとに変化する可能性があるが、レイヤ4及びアプリケーションから見えるSL及びTCは、エンドツーエンドで一貫している。
【0199】
所与のリンク内で、サービスチャネルは、仮想レーン(VL)に割り付けられる。VLは、入来するファブリックパケットに専用の受信バッファを提供する。VLは、経路指定デッドロックを解決するためにも使用される。1実施形態では、このアーキテクチャは、最大で32個のVLをサポートするが、実際にサポートされる数は、一般に実施態様によって決まる。このアーキテクチャは、SCのVLへのマッピングをサポートして、異種ファブリック構成をサポートすることができるようにしている。個々の実施態様は、32個未満のVLをサポートすることを選択することもできるし、利用可能なVLの全体数を減少させることによってVL当たりのバッファリングの量を最適化するように構成することもできる。
【0200】
複数のサービスチャネルを独立した複数のVLにマッピングすることによって、SCは、ファブリック内の独立したチャネルを提供して、1つのSC内のコンテンション及びブロッキングによって、異なるSCのトラフィックの進行が妨げられないことを保証することができる。サービスチャネルを使用して、経路指定及びプロトコルのデッドロックを回避し、トラフィッククラス間のヘッドオブラインブロッキングを回避する。
【0201】
各SCは、1つのトラフィッククラスの1つのサービスレベルのトラフィックを搬送する。ファブリックマネージャは、各エグレスポートにおいて、同じポートを使用している可能性がある複数のSCの間でVL資源がどのように分割又は共有されるかを設定する。FMは、以下のようなSCの所望のQoS特性を使用して、そのSCに割り付けられたVLの適当な設定を選択する。
・仮想レーンを介したパケットの伝送は、複数のVLが所与のリンクについて待ち行列に入っているトラフィックを有するときにそのリンクをどのように共有してスケジューリングするかをファブリックマネージャが構成することを可能にする、構成可能なVLアービトレーションアルゴリズムを介してスケジューリングされる。
・パケットのプリエンプションは、優先順位の高いトラフィックが優先順位の低いパケットをプリエンプトできるようにすることができる。これにより、優先順位の高いトラフィックのヘッドオブラインブロッキングがさらに削減される。
・VLのクレジットリターンレートを設定することによって利用可能な出力ポートの帯域幅を共有する。
・ポートごとの構成可能なVLバッファリングにして、各スイッチホップで許される待ち行列の深さをVLごとに制御できるようにする。
【0202】
このファブリックのアーキテクチャは、複数のデバイスの混合体が様々な数のVLをサポートする異質環境の実施を容易にする。例としては、限られた数のVLをサポートすることによってバッファ空間を保存するスイッチ、ファブリック内のトポロジデッドロックを回避するための余分のVLを必要としないHFIエンドポイント、又は限られた数のVLについてのみ大量のバッファリングを実現することによって超長リンクをサポートするいくつかの特殊デバイスなどが挙げられる。
【0203】
例示的な異質環境を、
図36に示す。図示のように、スイッチ、HFI、ゲートウェイ、及びファブリックインタフェースを有する記憶装置などの相互接続された構成要素を実装して、異なる数の仮想レーンをサポートすることができる。VL/VLアップマッピングかVL/VLダウンマッピングかは、どちらの構成要素の方がVLの数が多いかによって決まる。
【0204】
一般に、FPフォーマットが、いくつかのInfiniBandフォーマットなど他のプロトコルとの相互運用性をサポートするためのものなどのSLフィールドを含む場合もあるが、サービスレベル(SL)は、L2リンクファブリックパケットフォーマットの別個のフィールドで明示的に識別する必要はない。その代わりに、このQoS情報は、ファブリックパケットのSCフィールドによって暗示される。1実施形態では、このQoSレベルは、各パケットがエンドツーエンドでファブリックを横断するときに、SC/SCマッピングによって保存される。異種ファブリックでは、全てのトラフィックが異なる機能を有するデバイスによってサポートされる最低限の共通するVLを通って進行することを要求することによってファブリック全体を制限する代わりに、このアーキテクチャは、ヘッドオブラインブロッキング可能性を低下させる助けとなるようにパケットがVL資源の利用を拡大及び縮小することを可能にし、同時に暗示されたSL情報を保存する方法を提供する。
【0205】
図37は、1実施形態による、HFIのL4レイヤによるパケットのファブリックへの注入の一例を示す図である。HFIのL4レイヤがファブリックにパケットを注入するときには、HFIのL4レイヤは、最初に、SL/SCマッピング3700によってL4インタフェースから提供されたSLを初期SCにマッピングし(動作「A」で示される)、パケットのSCフィールドにこの値を設定する。生成されたSCの値は、SLと、ファブリックのトポロジに関する情報との両方を埋め込むことができる。次いで、動作「B」で、SCに、このパケットを伝送する出力VL資源を選択するために、SC/VL
tマッピング3702を施す。出力資源とは、通常は、出力FIFOと、それと関連するクレジットマネージャとを指す。
図37では、例示を目的として、4つのVL FIFO3704があるが、実際のFIFOの数は、デバイスがサポートする仮想レーンの数によって決まる。さらに、この出力ステージにおけるSC/VL
tマッピング3702は、そのローカルデバイスがサポートするVLの数によって決まるだけでなく、遠隔のデバイスがサポートするVLの数によっても決まる。動作「C」に示すように、クレジットは、遠隔の受信側デバイスによって、このローカルなデバイスのVL
tに基づいて確認応答され、対応するカウンタが増分される。SLがどのようにSCにマッピングされるか、SCがどのようにVLtにマッピングされるか、及びクレジットがどのようにVL
tを用いてマッピングされるかについての詳細については、以下でさらに詳細に説明する。
【0206】
入来パケットのSCフィールドに埋め込まれたQoSレベルを保存しながら、同時にVL資源の使用を最大限に高めるために、各スイッチは、入力資源及び出力資源の両方を選択するためのマッピングをパイプラインで実行する。スイッチ3800の選択的な詳細を示す例示的な実施形態を、
図38に示す。各スイッチは、複数の入力ポート3802及び出力ポート3804を含み、入力ポートの出力は、クロスバー相互接続3806によって出力ポートの入力に結合されている。入力ポート3802は、転送経路指定テーブル3808、SC/SCマッピングテーブル3810など、様々な入力ポート動作を実行する回路及び論理を含む。各入力ポートは、デマルチプレクサ(demux)3814及びマルチプレクサ(mux)3816の動作を実施する関連する回路及び論理を有する複数のVL入力FIFO3812も含む。出力ポート3804は、demux3815及びmux3817の動作を実施する関連する回路及び論理を有する複数のVL出力FIFO3813を含む。
【0207】
図38に示すように、パケット3818が入来すると、パケット3818は、(動作「D」で)SC/VL
tマッピング3820を通過して、このパケットを受け入れる入力VL資源のうちの1つを選択する。入力資源とは、通常は、入力ステージにおけるVLに特定のFIFOを指す。このマッピングは、以下でさらに詳細に説明するように、このローカルデバイスがサポートするVLの数によって決まる。1実施形態では、入力ステージにおいて各VLごとに別個の資源がないので、SC/VL
tマッピング3820は不要である。平行して、転送経路指定テーブル3808が、動作「E」で示すように、パケット3818の宛先ローカル識別子(DLID)を使用して、このパケットの出力ポートを決定する。経路指定判定の結果及びパケットのSCに応じて、SC/SCマッピングテーブル3810に基づいて、新たな既存のSC’が決定される。Fat−Treeなどのトポロジでは、この新たなSC’は、通常は、元のSCと同じである。Torusなどのトポロジでは、この新たなSC’は、出力ポートがたまたま「デートライン」と交差した場合のデッドロックの可能性を防止するための、元のSCの増分とすることができる。パケットのSCフィールドは、この新たなSC’で置換される。次いで、この新たなSC’は、動作「F」で、別の出力ポートに特有のSC/VL
tマッピング3822を通過して、パケット3818を伝送するための宛先ポートにおける出力資源を選択するためのエグレスVLtを導出する。この出力資源を選択するためのマッピングは、以下で説明するように、ローカルデバイスがサポートするVLの数によって決まるだけでなく、遠隔デバイスがサポートするVLの数によって決まることもある。
【0208】
パケットが特定のVL入力FIFO3812から引き出されるときに、このVLを用いてクレジットを送信機に対して確認応答する代わりに、スイッチは、送信端部からのクレジット管理に一致するように、送信側デバイスのVLすなわちVL
ntに基づいてクレジットを確認応答する。これは、動作「H」により、入力FIFOから引き出されているパケットのSCをマッピングし、SCを送信側のVLに基づいてファブリックマネージャによってプログラムされたSC/VL
ntテーブル3824によってマッピングすることによって実現する。同様に、イングレスパケット及びイングレスVLMarker LFコマンドフリットを処理するときには、SC/VL
ntテーブル3824を使用して、送信機によって定義される各パケットのVLインタリーブを適切にトラッキングするためにインバウンドSC値をマッピングする。このローカルデバイス及び送信デバイスが同数のVLをサポートする場合には、動作「D」及び「H」の両方のマッピングテーブルも同じになる。動作「G」に示すように、出力ポートでは、クレジットがこのローカルデバイスのVLに基づいて遠隔の受信側デバイスによって確認応答され、対応するクレジットカウンタが増分される。
【0209】
図39に示すように、パケットがHFI3900に到着すると、SCは、動作「I」で第1のSC/VL
tマッピング3902を通過して、このパケットを受信するための入力資源のうちの1つを選択するためのVLを生成する。このマッピングは、スイッチの入力ステージのマッピング(
図38の動作「D」)と非常に似ている。入力ステージで各VLごとに別個の資源を有していない実施態様では、動作「I」におけるこのマッピングは、不要である。動作「J」における第2のステージのSC/SLマッピング3904で、SC値を復号し、この値をこのパケットの元のSLにマッピングした後で、これをL4レイヤに戻す。動作「K」に示すように、パケットが特定のVL入力FIFO3906から引き出されるときに、クレジットは、スイッチの場合と同様に(
図38の動作「H」と同様)、送信側デバイスのVL
ntに基づいて送信機に対して確認応答される。同様に、イングレスパケット及びイングレスVLMarker LFコマンドフリットを処理するときには、SC/VL
ntテーブル3908を使用して、送信機によって定義される各パケットのVLインタリーブを適切にトラッキングするためにインバウンドSC値をマッピングする。
【0210】
HFIによってパケットをファブリックに注入するときには、初期SC値を生成するために、L4レイヤがSLを提供する。1実施形態では、このアーキテクチャは、32個のQoSレベル及び32個のSCをサポートし、このマッピングプロセスは、ソフトウェアで、又はHFI内部で、行うことができる。ファブリックのトポロジによっては、ファブリック内のデッドロックを回避するために、QoSレベル当たり複数のSCが必要になることもある。一例として、Torusトポロジの場合には、各QoSレベルは、パケットが「デートライン」と交差する場合をカバーするために2つのSCを必要とすることになる。この場合には、16個のSLが、QoSレベルを搬送するだけでなく、所与のトポロジ内のデッドロックを防止するための適当なSC設定を提供する、32SC空間にマッピングされることになる。残りの16個のSLは、L4が使用しなくてもよいし、或いは32個のSCに冗長的にマッピングしてもよい。QoSレベル当たり1つしかSCが必要でないFat−Treeなどのトポロジでは、32個のSLは、32個のSCに一対一でマッピングされる。
【0211】
一般に、実際のSL/SCマッピングの値は、それがファブリックトポロジのデッドロック回避規則に準拠する限り、ソフトウェア次第である。
【0212】
HFIへの入来パケットのSCは、SLにマッピングされる。この逆マッピングプロセスは、ソフトウェアで、又はHFI内部で、行うことができる。デッドロック回避のために、QoSレベル当たり複数のSCを使用するトポロジでは、1実施形態では、これらのSCは、アプリケーションがパケットを処理するために使用する可能性がある単一のSL値につぶされる。一例を挙げると、Torusファブリックでは、各QoSレベルごとに2つのSCを使用してトポロジのデッドロックを防止するので、32個のSCが16個のSL値にダウンマッピングされる。ここのL4は、提供されたSLを無視することを選択してもよいし、それを使用して応答トラフィックで使用するSLを選択してもよいし、或いは与えられたSL値に基づいて追加のL4検証又はL4トラフィック分離を実行してもよい。
【0213】
パケットがスイッチに入来した後で、転送経路指定テーブルによって経路指定判定を行って、そのパケットがどの出力ポートに送達されるかを判定する。SCがエンドツーエンドで持続するFat−Treeなどのトポロジでは、SCは、SCがどの出力ポートをとるかに関わらず、不変のままである。ただし、Torusなど、特定のトポロジでは、デッドロックを回避するために出力ポートが「デートライン」とたまたま交差した場合に、入来パケットのSCを増分する必要がある。したがって、イングレスSC及び出力ポートに基づいてエグレスSC’を生成するために、SC/SCマッピングテーブル(
図38のSC/SCマッピングテーブル3810など)が設けられる。次いで、デッドロックを防止するために、入来パケットのSCフィールドを、この新たなSC’で置換する。出力ポートでこのパケットを送出するための出力資源を選択するときには、
図38の動作「F」に示すように、VL選択は、この新たなSC’に基づく。
【0214】
SC/VLマッピングは、パケットが入来するときに入力資源を選択するために実施され、パケットが出て行くための出力資源を選択するには別のマッピングが必要である。HFIにおいて(
図37の動作「B」)出力資源を選択するためのマッピング機構と、スイッチにおいて(
図38の動作「F」)出力資源を選択するためのマッピング機構とは同じであり、HFIにおいて(
図39の動作「I」)入力資源を選択するためのマッピング機構と、スイッチにおいて(
図38の動作「D」)入力資源を選択するためのマッピング機構とは等価である。最大数の32個のVLをサポートするデバイスでは、入力資源を選択するためのマッピングは、省略することができる。出力資源を選択するためのマッピングは、近隣デバイスの能力によって決まるので、依然として必要である。
【0215】
ファブリック内の全てのデバイスが同数のVLをサポートする同質環境では、全てのSC/VLマッピングを、単純に32個のSCを利用可能なVLにダウンマッピングするように、同じように設定することができる。デバイスによって異なる数のVLをサポートする異質環境では、SC/VL機構は、マッピングが「拡大」か「縮小」かによって異なる。以下、これら2つの概念について説明する。
【0216】
拡大マッピングとは、受信側デバイスが送信側デバイスよりも多いVLをサポートする、送受信対のためのマッピング機構を指す。
図40は、送信側デバイスとして動作する、4つのVLを含むスイッチ4000Tと、受信側デバイスとして動作する、8個のVLを含むスイッチ4000Rとの間の拡大マッピングの一例を示す図である。スイッチ4000Tの内部では、あるパケットのSCは、動作「F」で出力ポートに特有のSC/VL
tマッピング3822を通過して、出力資源を選択するためのエグレスVLtを導出する。マッピング構成は、受信側デバイスの入力バッファタイプに応じて異なる可能性がある。受信側デバイスの入力バッファが離散FIFOである場合には、動作「F」における出力マッピングは、送信側で利用可能な4つのVL全てへのマッピングである。これら4つのVLのクレジットカウンタのそれぞれを、受信側の入力FIFOのうちの1つのサイズに設定する。SC/VL
tマッピング結果は、1:4demux3815への制御入力を生成して、エグレスVLtに関連する適用可能なVL出力FIFO3813を選択する。パケットの関連するフリットをアウトバウンドに伝送するとともに、入力制御(図示しないアービタによって実施される)を4:1mux3817に適用して、フリットをどのVL出力FIFO3813から引き出すかを選択する。
【0217】
パケットデータは、スイッチ4000Tから伝送されてスイッチ4000Rで受信され、このときに、SC/VL
tマッピング3820(動作「D」)を実行して、このパケットを受け入れるための入力VL資源のうちの1つ(VL入力FIFO3812aのうちの1つ)を選択する。「D」における入力マッピングは、入力FIFOの使用を最大にするために8個のVL全てにマッピングするものであり、ヘッドオブラインブロッキングを減少させるのに役立つ。この構成では、バッファクレジットの半分は利用されない。VL入力FIFOの選択は、入力として1:8demux3814aに提供される動作「D」で生成された制御入力によって実施される。8:1mux3816aは、さらなる処理の間にVL入力FIFO3812aからフリットを引き出すときに実施される。また、
図40に示すように、SC/VLntテーブル3824を、動作「H」で使用して、送信機が定義する各パケットのVLインタリーブを適切にトラッキングするためにインバウンドSC値をマッピングする。
【0218】
受信側デバイスの入力バッファが共有バッファ又は再構成可能バッファのプールである場合には、動作「F」における出力マッピングは、送信側で利用可能な4つのVL全てへのマッピングである。この4つのVLのクレジットカウンタは、受信バッファ空間全体が利用されるように構成される。各VLは、順方向進行を保証するために少なくともフルサイズパケットを送信することができるだけのクレジットが与えられる。動作「D」における入力マッピングは、入力FIFOの使用を最大限に高めるための8個のVL全てへのマッピングであり、ヘッドオブラインブロッキングを低減するのに役立つ。
【0219】
縮小マッピングは、受信側デバイスが送信側デバイスよりも少ないVLをサポートする、送受信対のためのマッピング機構を指す。
図41は、送信側デバイスとして動作する、8つのVLを含むスイッチ4100Tと、受信側デバイスとして動作する、4個のVLを含むスイッチ4100Rとの間の縮小マッピングの一例を示す図である。拡大マッピングと同様に、縮小マッピング構成は、受信側デバイスにおける入力バッファタイプに応じて異なる可能性がある。受信側デバイスの入力バッファが離散FIFOである場合には、動作「F」における出力マッピングは、受信側のVLと一致する送信側の4つのVLのみへのマッピングである。これら4つのVLのクレジットカウンタのそれぞれを、受信側の入力FIFOのうちの1つのサイズに設定する。動作「D」における入力マッピングは、これに応じる4つのVL全てへのマッピングである。この構成では、8個の利用可能な出力資源のうちの4つだけが使用されている。受信側デバイスの入力バッファが共有バッファ又は再構成可能バッファのプールである場合には、動作「F」における出力マッピングは、送信側で利用可能な8つのVL全てへのマッピングである。この8つのVLのクレジットカウンタは、受信バッファ空間全体が利用されるように構成される。各VLは、順方向進行を保証するために1つのフルサイズパケットを少なくとも送信することができるだけのクレジットが与えられる。動作「D」における入力マッピングは、4つのVL全てへのマッピングである。この場合には、8個の利用可能な出力資源は全て使用されている。
【0220】
受信側端部の入力バッファがラウンドトリップ待ち時間をカバーするほど十分に大きくない、又はそれをぎりぎりカバーする程度しかない、ということがある。この状況では、受信側バッファが共有構造又は構成可能構造である場合には、意図的に全ての資源を利用しないことにより、バッファクレジットを保存することが可能である。
図40に示す構成を考慮されたい。受信側端部の共有バッファがリンクのラウンドトリップ待ち時間をぎりぎりカバーできる程度の場合には、動作「F」で送信側の4つのVL全てにマッピングする代わりに、2つだけ(又はプロトコル又はトポロジのデッドロック要件がない場合には、1つ)にマッピングするように構成することができる。この構成では、特にMTUが大きい場合には、4つではなく2つのVLの間で、より効率的にクレジットを共有することができる。ただし、この方法では、QoSの送達が損なわれる。
【0221】
SCをVLにダウンマッピングするようにSC/VLテーブルを構成するときには、上位レイヤのプロトコルと交差せず、ファブリックトポロジのデッドロック回避規則を破らないことが重要である。PGAS(区分化大域アドレス空間)などのレイヤ4プロトコルでは、特定のSCが要求クラス用に指定され、他のSCが応答クラストラフィック用に指定される。これら2つのクラスが偶発的に同じVLバッファにダウンマッピングされた場合には、プロトコルのデッドロックが起こる可能性がある。
【0222】
同様に、SCは、ファブリックトポロジのデッドロック回避のために割り付けることもできる。一例を挙げると、Torusトポロジでは、クレジットループ依存性を防止するために、奇数番号のSCが全て「デートライン」と交差するパケットに割り付けられる。この状況では、偶数番号のSCと奇数番号のSCは、いずれのVL資源でも混合することが許されず、さもなければファブリックでトポロジのデッドロックが起こる恐れがある。SCをVLにダウンマッピングする際に、残念なことは、QoSが損なわれることである。異なるQoSレベルに属する複数のSCがダウンマッピングされて、同じVL資源を共有する。
【0223】
パケットが入力バッファから引き出されるときに、クレジットは、受信機から送信機に対して確認応答される。
図40及び
図41の場合のように、SC/VLマッピングは2つの端部の間で異なる可能性があるので、クレジットの確認応答は、送信側のVL
ntに基づく。これは、入力FIFOから引き出されているパケットのSCをマッピングし、それをSC/VL
ntテーブル3824によってマッピングすることによって実現する(
図40及び
図41の動作「H」)。この生成したVL
ntのクレジットは、次いで、L2リンク転送サブレイヤによって提供されるフロー制御機構によって確認応答される。
図40及び
図41に示す場合のどちらでも、動作「F」及び「H」のマッピングテーブルは一致する。
【0224】
このアーキテクチャでは、スイッチの入力ポートのSC/SCマッピングテーブル3810のインスタンス(例えば
図38の動作E)を、その代わりにSL/SCマッピングテーブルとして構成することができる。この機能により、IB HCA又はIBスイッチを、このアーキテクチャのファブリックに直接接続することが可能になる。また、これにより、SLフィールドを含むL2パケットヘッダのみが使用されるファブリックのレガシー経路指定及び構成管理ソフトウェアを使用することが可能になる。
【0225】
このアーキテクチャは、レガシーマッピングモードもサポートする。例えば、SL/VLマッピングは、IBTAと同様の働きをするレガシーマッピングモードである。このモードでは、VLとSCの間に差はない、つまり、これらが等価である。ファブリック全体の全てのSC/VL
tマッピング及びSC/VL
ntマッピングは、1:1としてプログラムされる、或いはバイパスすることができる。スイッチの入力ポートのSC/SCマッピングテーブル(例えば
図38の動作「E」のSC/SCマッピングテーブル3810)は、SL/VLマッピングテーブルに変更される。入来パケットのSC及び宛先出力ポートに基づいてエグレスSCを生成する代わりに、入来パケットのSL及び宛先出力ポートに基づいて、エグレスVLを決定する。パケットのSCフィールドは、スイッチを出る前に、このVL値がタグ付けされる。トポロジデッドロック回避のためのもので、デバイスがサポートするVL資源の数を把握していないSC/SCマッピングとは異なり、SL/VLマッピングは、両方を把握している。したがって、後続のSC/VLマッピングが不要になる。
【0226】
SL/VLマッピングモードは、SLフィールドを含むL2リンクファブリックパケットフォーマットで作用し、このフォーマットのみを使用するファブリック環境に適している。このことは、全てのHFIが、このフォーマットを用いなければ互いに通信することができないことを意味する。SLがパケット内に明示的に含まれるので、SLは自動的にエンドツーエンドで保存される。異質環境の縮小マッピング及び拡大マッピングは、様々なSC/VLテーブルに依拠してタスクを実行する代わりに、SL/VLテーブルに組み込まれる。このレガシーモードでは、IB HCAは、アーキテクチャのファブリックに直接接続することができる。このモードの等価な見方は、このモードを、SC/VL
t及びSC/VL
ntの1:1マッピングとともにSL/SCテーブルと見なすことである。
【0227】
図42は、このSL/VLレガシーマッピングモードのハイレベルな例を示す図である。この図は、2つのInfiniBandホストチャネルアダプタ(IB HCA)4200及び4202と、2つのHFI4204及び4206と、2つのスイッチ4208及び4210とを含む。L2リンクファブリック9Bパケットフォーマットは、
図49に示し、以下で説明する、SLフィールドを含む。これにより、SLフィールドの値を変更する必要なく、これらの9Bパケットを、任意の組合せのIB HCAとHFIとの間でエンドツーエンドで転送することが可能になる。
【0228】
SL/VLハイブリッドレガシーモードは、IB HCAとHFIの混合体を有し、9Bパケットフォーマットの他に複数のパケットフォーマットを使用する環境をサポートする。このような環境の一例を、
図43に示す。この環境は、9B、10B及び16Bパケットフォーマットをサポートし、2つのIB HCA4300及び4302と、2つのHFI4304及び4306と、2つのスイッチ4308及び4310とを含む。
図43も、
図37〜
図32に示す様々な動作を、動作に関連する文字を括弧内に含めて示す図である。このようなファブリックでは、IB HCAデバイスに接続されたスイッチポートを除けば、全てのポートは、通常モードで接続される。これらのポートについては、SC/SCマッピングテーブル3810(
図38の動作「E」)のインスタンスがSL/SCマッピングを実施するように構成された、ハイブリッドモードが使用される。パケットがIBポートから入来すると、そのSLフィールドは、このアーキテクチャがサポートしている32個のSCのうちの1つにマッピングされる。パケットのSCフィールドをこの値に設定した後で、パケットは、
図38の動作「F」に示すものと同様のSC/VLマッピングを通過して、このパケットの出力資源を選択する。これは、上記でSL/VLレガシーモードについて述べたように、SL/VLとは異なる。マッピングを2つのステップに分割することにより、パケットのSLフィールドは、接続スイッチがサポートするVLにダウンマッピングされる代わりに、32個のSCの全範囲にマッピングされる。これにより、パケットは、異質ファブリックの拡大及び縮小マッピングを通過して、その過程で全ての資源を利用することができる。なお、9Bパケットトラフィックしか含まないファブリックでも、このハイブリッドモードを、SL/VLレガシーモードの代わりに使用することができることに留意されたい。
【0229】
リンクファブリックサブレイヤ
上述のように、情報は、各メッセージが1つ又は複数のリンクファブリックパケットによって搬送されるL2リンクレイヤを通ってエンドポイントからエンドポイントまで伝送される。実施形態では、これらのパケットは、小さいものでは16バイト(2フリット)から大きいものでは16376バイト(2047フリット)までのサイズをサポートする。この範囲は、PGASプログラミング言語で一般的な小さなメッセージ及びカプセル化ジャンボ(10KB)イーサネット(登録商標)フレームを転送するのに必要な大きなメッセージの両方の必要を満たすことを意図したものである。1実施形態では、最大のFPのサイズは、L4 MTU(最大転送単位)、すなわち10KBまでに制限される。
【0230】
図2に示すように、このリンクファブリックサブレイヤは、L2レイヤ全体の上半分であり、L2リンク転送サブレイヤを含む下半分は、物理レイヤの近くで動作する。1実施形態では、論理は、HFIなどのアーキテクチャのデバイスのためにパイプライン化し、トランスポートパケットを上位のリンクファブリックサブレイヤで交換する。ただし、デバイス間のリンクでは、リンクファブリックパケットは、より小さな単位(フリット)にセグメント化され、このより小さな単位が、互いに(LTP)にバンドリングされて、リンク転送サブレイヤプロトコルを用いて搬送される。
【0231】
図45に示す汎用ファブリックパケットフォーマットに示すように、ファブリックパケットは、ヘッドフリットから開始され、その後に0から2045個のボディフリットが続き、テールフリットで終了する。バブル又は遊休フリット、並びにその他のLFコマンドフリットは、ファブリックパケットフリットの中に点在することができる。パケットを宛先エンドポイントに向けて経路指定する助けとなる様々な情報を提供する、複数バイトに及ぶ1組のファブリックパケットヘッダフィールドが、各パケットの先頭に存在する。
【0232】
フォーマットタイプに応じて、これらのヘッダフィールドは、ヘッドフリットから開始して、1つ又は複数のフリットに及ぶことがある。ヘッダフィールドの後にはFPのデータペイロードが続き、このデータペイロードは、テールフリットで定義されるFPの末端まで続く。
図4及び表1を参照して上述したように、フリットタイプビット(フリットビット[64])とリンクタイプ(LT)制御ビット(データビット[63]及び[62])とが組み合わさって、フリットがヘッドフリットであるか、ボディフリットであるか、テールフリットであるかを識別する。
【0233】
1実施形態では、このアーキテクチャは、4つの異なるヘッダフォーマットをサポートする。各フォーマットは、異なる数のヘッダフィールドを含み、異なる機能セットを提供する。L2ファブリックパケットフォーマットのうちの1つは、L2タイプヘッダフィールドが「00」に設定されている8Bヘッダフォーマットである。これは、他のフォーマットより小型になり、パケットオーバヘッドが低くなるように設計されている。ヘッダがフリット1つに収まるようにするために、このフォーマットは、縮小した機能セットと、総数でフリット127個分の最大パケットサイズを搬送することができる短縮した長さフィールドとを有する。この限界を超える、又は省略された機能を必要とするペイロードについては、他のフォーマットのうちの1つを使用する。ファブリックパケットの8Bヘッダフォーマットの実施形態は、
図46に示してある。
【0234】
図47に示すように、10Bヘッダフォーマットは、8Bフォーマットより大きな長さフィールドを有し、最大でフリット2047個分の最大パケットサイズを搬送することを可能にする。さらに、10Bヘッダフォーマットは、8Bが提供しない、縮小したP_Key(パーティションキー)及びエントロピ機能を提供する。1実施形態では、10Bヘッダパケットは、L2タイプヘッダフィールドが「01」に設定されている。
【0235】
1実施形態では、16Bヘッダフォーマットは、リンクファブリックサブレイヤがサポートする全ての機能を含む。
図48に示すように、16Bヘッダパケットは、L2タイプヘッダフィールドが「10」に設定されている。このフォーマットは、3個から2047個のフリットを含むパケットに使用することができる。ヘッダは、正確に16バイト、又は2フリットを消費し、これは、後続のペイロードに良好な位置合わせを提供する。さらに、このフォーマットは、非常に多数のエンドポイントをサポートする拡張24ビットアドレッシング空間を提供する。
【0236】
9Bヘッダフォーマットの1実施形態は、
図49に示す。9Bヘッダフォーマットは、InfiniBand(IB)トラフィックを搬送することを目的としている。このパケットフォーマットのL2タイプヘッダフィールドは、「11」に設定され、その直後にビット[60:57]の「0000」が続く。ヘッドフリットのこの最上位バイトの後に、固有のIBパケットが直接接続される。ただし、固有の4ビットIB VLフィールドは、アーキテクチャがサポートする5ビットSCフィールドと釣り合わせるために、ヘッドフリットのビット[56]まで1ビット分だけ拡張されている。IBとこのアーキテクチャの間でファブリックアーキテクチャが一体化されているので、IBのローカル経路指定ヘッダ及びベーストランスポートヘッダのうちの選択されたヘッダフィールドは、このパケットを経路指定するときに、リンクファブリックサブレイヤによってそのまま使用される。これらのフィールドは、
図49に網掛けで示してある、SC、LVer、SL、LNH、DLID、長さ、SLID、P_Key、(F)ECN、及び(B)ECNフィールドを含む。
【0237】
L2ファブリックパケットは、1つ又は複数のフリットに及ぶヘッダから開始する。ヘッダを搬送する第1のフリットは、ヘッドフリットとマークされ、ヘッダの残りの部分は0個以上のボディフリットでマークされる。ヘッダが第1のフリットの全体及び第2のフリットのうちの2バイトを占める10Bヘッダフォーマットで示したように、パケットヘッダは、フリットサイズの倍数である必要はない。各ヘッダは、経路指定指向とパケットに関するその他の情報とを含む様々なフィールドで構成される。以下の表3は、各パケットフォーマットに含まれるフィールドの概要を示している。
【0239】
L2タイプ符号化フィールドは、ファブリックパケットのフォーマットを識別するために使用される。このフィールドは、ビット[62:61]が「00」、「01」又は「10」に設定されているときには、2ビット幅である。ただし、このビットが「11」に設定されているときには、このフィールドは、6ビット幅に拡張され、ビット[62:57]に位置する。この符号化に基づいて、各アーキテクチャデバイスは、パケットフォーマットのタイプ、及びそのヘッダフィールドの位置を検出する。
【0240】
各ファブリックパケットは、上位のL4プロトコルレイヤのペイロードを搬送する。特定のパケットがどのL4プロトコルを搬送しているかをエンドポイントが把握するために、L4タイプフィールドが、各ヘッダに含まれる。このフィールドは、8B及び10Bヘッダフォーマットでは4ビット幅であるが、16Bヘッダフォーマットでは8ビットに拡張されて、より多くのL4プロトコルによって使用できるようになっている。4ビット幅の場合には、[3:0]として定義される代わりに、このフィールドは、ビット7を搬送し、[7、2:0]として定義される。4ビット及び8ビットのどちらのL4タイプフィールドでも、符号化空間のかなりの部分は、アーキテクチャのL4固有オフロードプロトコルに割り当てられる。その他の全てのL4プロトコルが、残りの符号化空間を共有する。9Bヘッダフォーマットは、特にL4 IBカプセル化を目的としているものであるので、9Bヘッダフォーマットは、L4タイプフィールドを含まない唯一のフォーマットである。
【0241】
各ヘッドフリットのビット[56:52]に含まれる5ビットSCフィールドは、32個のサービスチャネルのうちのどれをパケットが使用しているかを識別する。本明細書の他の箇所でさらに詳細に述べるように、各アーキテクチャデバイスは、このフィールドを使用して、どのSC及びVL資源の組がパケットを下流に移動させるために使用されるかを決定する。
【0242】
1実施形態では、このアーキテクチャは、32個のQoSレベルをサポートする。8B、10B、及び16Bパケットフォーマットでは、この情報は、SCフィールドによって示されるので、これらのフォーマットは、明示的なSLフィールドを含まない。9Bパケットフォーマットでは、カプセル化IBパケットから引き継いだ4ビットの明示SLフィールドを搬送する。レガシーIB HCAは、パケットをファブリックに注入するときにそのVLフィールド内にSL情報を示さないので、パケットのQoSを指定するために、このSLフィールドが必要となる。IB HCAから9Bパケットを受信するエッジスイッチは、上述のSL/SCマッピングを使用することによって、このSL情報をSCフィールドに示すオプションを有する。この場合には、受信側エンドポイントは、その明示SLフィールドを検査するか、又はSCフィールドを復号することによって、パケットのQoSを取り出すことができる。
【0243】
宛先ローカルID(DLID)フィールドは、各ヘッドフリットに位置して、パケットを送達すべきエンドポイントを示す。このアーキテクチャファブリックの全てのエンドポイントは、ファブリックの領域内で一意的な1つ又は複数のDLIDによって識別される。8B及び10Bフォーマットでは、20ビットDLIDフィールドが、ヘッドフリットのビット[51:32]に位置する。16Bフォーマットでは、24ビットDLIDフィールドが、ヘッドフリットのビット[51:32]及び第2のヘッダフリットのビット[15:12]に位置する。9Bフォーマットでは、16ビットDLIDが、ヘッドフリットのビット[39:24]に位置し、他のフォーマットより小さなアドレッシング空間を提供する。1実施形態では、DLIDスペースは、ユニキャスト及びマルチキャスト/コレクティブの両方のアドレッシングをサポートする。ユニキャストアドレスが単一のエンドポイント送達を識別し、マルチキャスト/コレクティブDLIDが、送達される1組のエンドポイントを識別する。
【0244】
発信元ローカルID(SLID)フィールドは、パケットが送信された出所のエンドポイントを示すために、各ヘッドフリットに位置する。8B及び10Bフォーマットでは、20ビット発信元フィールドが、ヘッドフリットのビット[19:0]に位置する。16ビットフォーマットでは、24ビットDLIDフィールドが、ヘッドフリットのビット[19:0]及び第2のヘッダフリットのビット[11:8]に位置する。9Bフォーマットでは、16ビットSLIDは、ヘッドフリットのビット[7:0]及び第2のフリットのビット[63:56]に及ぶ。SLIDの割り付けは、前節で説明したDLIDと非常に似ているが、パケットを複数のエンドポイントで生成することはできないので、SLIDはマルチキャスト/コレクティブアドレスになることはない点が異なる。多くのトポロジが、非輻輳環境で待ち時間を短縮するために最短ルートを通って宛先までパケットを経路指定する、又はファブリック全体にパケットを拡散して、経路指定経路が最短でなかったとしても輻輳を最小限に抑えるなど、複数の経路指定方法を提供する。いくつかのトポロジは、エンドポイント間のパケットを各パケットで生じる輻輳レベルに基づいて経路指定する適応型経路指定も提供する。
【0245】
経路指定制御を容易にするために、RCフィールドが、経路指定要件と、ファブリック全体にわたって所与のパケットを経路指定するための好ましい方法とを指定する3ビットフィールドとして符号化される。特定のトラフィックフロー又はアプリケーションに対してどの経路指定方法を使用するかを判定し、それに応じてこのフィールドを設定するのは、L4トランスポートレイヤの担当である。最上位ビットRC[2]が未設定であるときには、最下位ビットRC[0]が、パケットを順序通りに経路指定するかどうかをファブリックに通知する。順序通りに経路指定しなくてもよいパケットについては、ファブリックの能力に応じて、パケットは、無作為に、又は経路指定選択肢の輻輳レベルに基づいて、経路指定することができる。中央ビットRC[1]は、待ち時間を最適化するようにパケットを経路指定すべきか、又は帯域幅を最適化するようにパケットを経路指定すべきかを指定する。待ち時間を最適化するときには、ファブリックは、宛先に向かうホップカウントを最小限にする。帯域幅を最適化するときには、トラフィックを拡散して輻輳を軽減するために、最短ではない経路指定を利用することもできる。
【0246】
ファブリックがサポートするトポロジ及び経路指定方法に応じて、各スイッチは、RCフィールドの設定に何が指定されているかを検査するが、より制限的な方法でパケットを経路指定することを選択することもできる。1実施形態では、このフィールドの設定が順序通りの経路指定を指定している場合には、パケットは、順序を変えて経路指定することはできない。ただし、順序を変えることが指定されていても、パケットを順序通りに経路指定することは許可される。
【0247】
9Bヘッダフォーマットを除く全てのパケットフォーマットは、このフィールドを、ヘッドフリットのビット[59:57]に含む。9Bヘッダフォーマットは、IBパケットをカプセル化するために使用されるので、また、既存のIBプロトコルはこの経路指定制御フィールドを利用することができないので、このフィールドは、9Bフォーマットでは省略される。1実施形態では、9Bフォーマットを使用するパケットは、確定0経路指定方法を使用して処理される。
【0248】
8B、10B及び16Bヘッダフォーマットでは、長さフィールドは、ヘッドフリット及びテールフリットも含む、パケット内のフリットの総数を指定する。各フリットは64ビット幅であるので、パケットの全体のサイズは、その長さに8Bを乗算したものに等しい。固有のIBパケットをカプセル化するために使用される9Bヘッダフォーマットでは、長さフィールドは、カプセル化IBパケットの一部であり、したがって、フリット数は示さない。その代わりに、長さフィールドは、カプセル化されているIBパケットのサイズを4バイトワード単位で指定する。この追加のヘッドバイト及びテールバイトにより、IBパケットをカプセル化するときには、9Bヘッダパケット中の実際のフリット数は、常に「長さ[11:0]/2+1」に等しい。
【0249】
LVer(リンクバージョン)フィールドは、特に9Bヘッダフォーマットのためのものであり、ビット[51:48]に位置する。これは、接続されたIBパケットから直接使用されるフィールドである。IBTA1.2.1では、このフィールドの値は0であるものとされる。同様に、リンクネクストヘッダ(LNH)フィールドも、特に9Bヘッダフォーマット用のものであり、ビット[41:40]に位置する。これは、接続されたIBパケットから直接使用されるフィールドである。このアーキテクチャは、様々な輻輳管理機能をサポートする。輻輳の拡散を最小限に抑えるエンドツーエンド(E2E)輻輳管理方式の一部として、順方向明示輻輳通知(略記はFECN(Forward Explicit Congestion Notification)又はF)ビットを使用して、ファブリック内で輻輳に遭遇したパケットにマーキングする。このFECNビットは、逆方向明示輻輳通知(略記はBECN(Backward Explicit Congestion Notification)又はB)ビットと組み合わせて使用される。8B、10B及び16Bフォーマットでは、このFビットは、ヘッドフリットのビット[60]に位置する。ただし、9Bヘッダフォーマットでは、このビットは、接続されたIBパケット内のFECNビットと直接共有される。(B)ECNビットは、発信元エンドポイントがファブリック内で輻輳の形成及び拡散を引き起こしている可能性があることを、発信元エンドポイントに通知するためのフィードバック機構として使用される。8B、10B及び16Bフォーマットでは、このBビットは、ヘッドフリットのビット[31]に位置する。ただし、9Bヘッダフォーマットでは、このビットは、接続されたIBパケット内のBECNビットと直接共有される。
【0250】
この概念は、パケットが発信元からその宛先のエンドポイントに進行する際に、1組の輻輳基準に基づいて輻輳に遭遇したときに、このビットがマーキングされるというものである。このビットが一度設定されると、ファブリック内のこの経路に沿った他のスイッチは、これを設定解除することはできない。宛先に到達したとき、そのエンドポイントは、ACKパケットのBビットをマーキングする、又は明示輻輳通知(ECN(Explicit Congestion Notification))パケットを発信元エンドポイントに返送することによって、パケットの発信元エンドポイントに通知するオプションを有する。Fビットの場合と同様に、ファブリック内のスイッチは、Bビットを設定解除することができない。発信元が十分なB通知を受信した場合には、発信元は、自分がファブリックに注入しているトラフィックが多すぎることを認識し、注入レートを落として、輻輳が拡散しないようにする。
【0251】
パーティションキーフィールド又はP_Keyは、L2リンクレイヤにおけるファブリックのパーティショニングに関する。パーティションは、互いに通信することができるエンドポイントの組を制限するために使用することができる。さらに、複数の重複したパーティションを定義することができ、複数のエンドポイントが複数のパーティションのメンバとなるようにすることができる。このフィールドのMSBは、メンバシップインジケータとして使用することができるので、残りの15ビットによって最大で32767個のパーティションをサポートする。メンバシップインジケータビット値の「1」は、フルメンバであることを意味し、「0」は、限定メンバであることを意味する。
【0252】
エントロピフィールドは、フィールドのコンテンツが上位のL4転送レイヤによって制御され、ファブリック内でエンドツーエンドで一定のままである、分散型経路指定に使用される。このフィールドを使用することにより、あるエンドポイントに向かって進行中のパケットは、他の全ての有効な経路を検討し尽くして、トラフィックの拡散を助け、輻輳を緩和することができる。エントロピは、L4実施態様が使用して、受信側のスケーリングを行うこともできる。この場合には、エンドポイントがエントロピ値を使用して、そのパケットを処理するためにどの受信待ち行列及び/又は受信処理スレッドを使用するかを選択することができる。16B及び10Bヘッダフォーマットは、それぞれ第2のヘッダフリットのビット[47:32]及びビット[15:8]に位置する16ビット及び8ビットのエントロピを提供する。8B及び9Bフォーマットは、この機能を提供しない。
【0253】
全ての経路指定モードが、このエントロピフィールドを利用するわけではない。例えば、特定のトポロジ用の適合型経路指定は、経路指定の選択肢を無作為に選択することにして、このフィールドを無視することができる。このフィールドを使用する他の経路指定モードでは、このフィールドの設定は、SLIDビットとDLIDビットの組合せと同程度の粗い細分度であってもよいし、プロセスIDより若干細かい程度の細分度であってもよいし、メモリアドレスビットの組合せによる非常に細かい細分度であってもよい。
【0254】
8ビット経過時間フィールドは、パケットがファブリックを横断するときのパケットの経過時間を示し、大域的な公平性を実現するための経過時間に基づくアービトレーションのために使用される。Torus又はMeshなど、特定のトポロジは、局所的に公平なアービトレーションを使用したときには周知の公平性の問題があり、これが、特に大規模ネットワークでは、パケットの待ち時間の大きなばらつきにつながる可能性がある。経過時間に基づくアービトレーションは、パケット待ち時間のばらつきを軽減するだけでなく、パケットの平均待ち時間も低下させる。
【0255】
経過時間フィールドは、経過時間機能をサポートする唯一のフォーマットである16Bヘッダパケットフォーマットで、第2のヘッダフリットのビット[55:48]に位置する。このフィールドの値は、ホップごとに変化し、各デバイスは、パケットがデバイスから出るまでにデバイス内に留まる時間に比例する量ずつ経過時間を累積する。この量が構成可能な飽和値に達すると、この経過時間フィールドは、ホップカウントとして作用し、各ホップで1ずつ増分される。各デバイスは、パケットを下流側に転送するときのアービトレーションプロセス中に、パケットの経過時間を考慮する。あるポートが、FMによって構成可能な最大許容限界を有するパケットを受信した場合には、このパケットは、誤ってプログラムされた経路指定テーブルによる暴走パケットであると見なされ、ドロップされる。このエラー状態は、その後、エラーカウンタを介して報告される。
【0256】
「R」で識別されるフィールドは、将来使用するために確保されたフィールドを含む。1実施形態では、確保フィールドのビットは、エンドポイントによってファブリックに注入されるときには0に設定され、ファブリック内ではスイッチに無視されて不変のまま残り、受信側エンドポイントにも無視される。
【0257】
各リンクファブリックパケットは、上位のL4レイヤプロトコルのパケットをカプセル化するペイロード部分を搬送する。このペイロードは、数バイトという小さなものからほとんど16Kバイト(又は適用可能であれば10KB MTU)という大きなものにまですることができ、全てのフォーマットで、ヘッダフィールドの直後に位置する。カプセル化されたL4パケットは、それ自体のヘッダ及びペイロードのセットを含む。L4パケットのフォーマットは、プロトコル特定である。このアーキテクチャがサポートするL4プロトコルの例としては、アーキテクチャの固有のオフロードプロトコル、イーサネット(登録商標)、InfiniBand、及びファブリック管理などが挙げられる。ペイロードが搬送するL4プロトコルのタイプは、上述のように、各リンクファブリックパケットヘッダのL4タイプフィールドに指定される。このカプセル化されたL4パケットの最後のフリットは、L4パケットを保護するだけでなく、L2ファブリックパケットの不変ヘッダフィールドもカバーする、不変CRC(ICRC)を含むことが多いが、これは必要というわけではない。
【0258】
図50は、1実施形態による、送信ポート5000及び受信ポート5002を含むリンクインタフェースポートの選択した特徴を示す図である。
図50に示す様々な要素は、これ以前の図面に示し、本明細書の他の箇所で詳細に説明したものである。図示の要素の他に、送信ポート及び受信ポートはともに、図面の大きさの制限により図示していない追加の構成要素を含む。
【0259】
送信ポート5000及び受信ポート5002はそれぞれ、本明細書に記載する送信ポート動作を実行するための回路及び論理を含む。上記で提示し、
図2に示すように、このアーキテクチャは、リンクファブリックサブレイヤ、リンク転送サブレイヤ、及びPHYレイヤを利用する。したがって、送信ポート5000及び受信ポート5002のそれぞれの回路及び論理は、対応するサブレイヤ又はレイヤの動作を容易にする複数のブロックに区分化された状態で示してある。送信ポート5000では、これらは、Txリンクファブリックサブレイヤ回路及び論理5004と、Txリンク転送サブレイヤ回路及び論理5006と、Tx PHY回路及び論理5008とを含む。同様に、受信ポート5002は、Rxリンクファブリックサブレイヤ回路及び論理5010と、Rxリンク転送サブレイヤ回路及び論理5012と、Rx PHY回路及び論理5014とを含む。これらのより大きな回路及び論理のブロックの間の分割は定まったものではなく、所与の回路及び論理のブロックの中に示すいくつかの機能を、複数のブロックにわたって、又は別のブロックで、実施することもでき、
図50に示す構成は、単なる例示であり、これに限定されるわけではなく、他の構成を実施することもできることは理解されるであろう。
【0260】
Tx PHY回路及び論理5008は、4つの送信機5016及びTxリンク制御ブロック1804の一部分を含む、単純化した形態で示してある。一般に、送信機5016は、リンクのPHYレイヤの構成に応じて、電気的送信機又は光学的送信機を含むことができる。ネットワーク技術の当業者なら、Tx PHY回路及び論理ブロックは、はっきりとは図示していない送信側PHYレイヤ動作を実施するための追加の回路及び論理を含むことを理解するであろう。これは、PHYレイヤ内に、エラーを減少させ、送信特性を改善するために高速相互接続と関連付けて実施される様々な機能を容易にするために使用される、様々なサブレイヤを含む。1実施形態では、スクランブル及び64b/66b送信側動作は、PHYレイヤの動作を容易にするTxリンク制御ブロック1804の一部分によって実行される。
【0261】
Txリンク転送サブレイヤ回路及び論理5006は、本明細書に記載するリンク転送サブレイヤ動作の送信側の特徴を実施するように構成される。これらは、再試行論理5018、LTPバンドリングブロック5020、再現バッファ1806、並びにNxtWrLTPポインタ及びNxtTxLTPポインタなど、LTPをバンドリングし、Tx PHYに渡すためにLTPストリームを準備し、RetryReqに応答してLTPの再現をサポートするための様々な構成要素及び論理ブロックを含む。さらに、Txリンク制御ブロック1804の一部分及びQoS機能は、QoSブロック5022で示すように、Txリンク転送サブレイヤのために実施される。
【0262】
Txリンクファブリックサブレイヤ回路及び論理5004は、本明細書に記載するリンクファブリックサブレイヤ動作の送信側の特徴を実施するように構成される。これらの動作を容易にするための図示の構成要素及びブロックは、イーサネット(登録商標)、InfiniBand及び固有のアークテクチャパケットのL4カプセル化を実行するように構成されたL4カプセル化サブブロック5026を含むファブリックパケット構築ブロック5024と、アービトレーション論理3400と、クレジットマネージャ3002と、複数の出力FIFO3704とを含む。また、図示のように、QoS論理5022の一部分は、リンクファブリックサブレイヤで実施されるQoS動作のために使用される。
【0263】
Rx PHY回路及び論理5014は、4つの受信機5028及びRxリンク制御ブロック1805の一部分を含む、単純化した形態で示してある。一般に、受信機5028は、リンクのPHYレイヤの構成に応じて、電気的送信機又は光学的送信機を含むことができ、送信機5016からリンクを介して送信機信号を受信するように構成される。ネットワーク技術の当業者なら、Rx PHY回路及び論理ブロックは、はっきりとは図示していない受信側PHYレイヤ動作を実施するための追加の回路及び論理を含むことを理解するであろう。これは、PHYレイヤ内に、エラーを減少させ、送信特性を改善するために高速相互接続と関連付けて実施される様々な機能を容易にするために使用される、様々なサブレイヤを含む。1実施形態では、スクランブル解除及び64b/66b受信側動作は、PHYレイヤの動作を容易にするRxリンク制御ブロック1805の一部分によって実行される。
【0264】
Rxリンク転送サブレイヤ回路及び論理5012は、本明細書に記載するリンク転送サブレイヤ動作の受信側の特徴を実施するように構成される。これらは、LTPのバンドリング解除、LTP CRC及びレーンごとのCRCエラーの検出、受信機トスモード及び関連する動作、並びにQoS動作のための様々な構成要素及び論理ブロックを含む。図示の構成要素及びブロックは、QoS論理5030、Rxトスブロック5034、LTP/レーンエラー検出ブロック5034、LTPバンドリング解除ブロック5035、レーンごと及びXFRグループごとのCRC、Rx LTPシーケンスレジスタ、並びにNxtRxLTPポインタを含む。
【0265】
Rxリンクファブリックサブレイヤ回路及び論理5010は、本明細書に記載するリンクファブリックサブレイヤ動作の受信側の特徴を実施するように構成される。これらの動作を容易にするための図示の構成要素及びブロックは、L4パケットカプセル解除サブブロック5040を含むファブリックパケット再アセンブリブロック5038と、クレジットリターンブロック5042と、入力FIFO3906と、QoS論理の一部分5030とを含む。さらに、入力FIFO3906のバッファ空間の編成は、3ティア共有バッファ編成方式5044を利用するものとして示してあるが、
図31a及び
図31bに示す他のバッファ編成方式、並びに本明細書に記載する他のバッファ編成方式も同様に使用することができることに留意されたい。
【0266】
HFI及びその他のエンドポイントデバイスでは、送信ポート及び受信ポートは、他の外部構成要素によって実行される上位レイヤの動作とインタフェースをとる追加のインタフェース論理を含むことができる。例示を目的として、これらのインタフェースは、Rx L4インタフェース5046及びTx L4インタフェース5048で示すが、これらはそれぞれ、HFI又はその他のエンドポイントデバイスの受信側及び送信側のレイヤ4論理及び/又は構成要素とインタフェースをとるように構成される。
【0267】
図51は、1実施形態による、マルチポートファブリックスイッチ5100を示す図である。ファブリックスイッチ5100は、
図50を参照して上述したRxポート5002及びTxポート5000をそれぞれ含む、16個のファブリックインタフェースポート5102を含む。各Rxポート5002は、複数の入力FIFO3906を含み、各Txポート5000は、複数の出力FIFO3704を含む。Rxポート5002及びTxポート5000は、図示のように、受信ポートの出力を送信ポートの入力に選択的に接続するように構成されたクロスバー5104に結合される。
図51に示す構成要素に加えて、様々なアービトレーション論理及びQoS論理を利用して、
図38に示して上述した転送及び経路指定テーブル3808と同様に動作する転送及び経路指定テーブル5106を使用することを含む、クロスバー5104のポートマッピングを制御する。
【0268】
図52は、受信ポートで受信したフリットを取り扱い、それらを入力FIFOにバッファリングするための動作及び論理を示す流れ
図5200を示す図である。ブロック5202で、LTPフリットストリームの一部としてフリットを受信し、PHYレイヤの処理を実行してLTP及びフリットデータを回復して、個々のフリットを検査できるようにする。判定ブロック5204で、このフリットが遊休フリット又はLF制御フリットであるかを判定する。表1を参照して上述したように、「000」で始まるフリット(フリットタイプビットであるビット65を含む)は、遊休フリット、LF制御フリット、又はエラントフリットのいずれかである。このフリットがこれらのうちのいずれでもないと仮定すると、判定ブロック5204の結果はNOとなり、論理は判定ブロック5206に流れ、このブロックで、このフリットがヘッドフリットであるか、テールフリットであるか、又はボディフリットであるかを判定する。ほとんどのフリットはボディフリットであり、ブロック5208で、このフリットは、現在のVLによって識別されるFIFOバッファに追加される。現在のVLは、1実施形態では、インタリーブ及びプリエンプションに関連して上述したように、現在のVLレジスタに記憶されている指標によって識別される。次いで、論理は、ブロック5202に戻り、次のフリットを取り扱う。
【0269】
上述のように、現在のVLは、新たなヘッダフリット、ヘッダフリットを以前に受信したファブリックパケットに対応するテールフリット、又はVLマーカ(VLマーカの使用をサポートする実施形態の場合)に応答して変化する可能性がある。ブロック5210に示すように、ブロック5206でフリットがヘッドフリットであると判定したのに応答して、ファブリックパケットヘッダSC(及びIBがカプセル化されたFPのSL)フィールドを検査して、そのファブリックパケットに関連する仮想レーンを決定して、適用可能なQoS論理を適用する。例えば、1実施形態では、これらの動作は、
図39に示し、上述したものである。ブロック5212で、識別したVL
tに対応する指標を現在のVLレジスタに書き込んで、フリットを追加すべき現在のVLを更新する。適用可能であれば、VLスタックもプッシュする。論理は、次いで、ブロック5202に戻って、次のフリットを取り扱う。
【0270】
ヘッドフリットは、現在のVLを変更するために使用されるが、テールフリットは、インタリーブ及びプリエンプションに関連して上述したように、スタックをポップすることによって現在のVLを以前のVLに戻すために使用される。したがって、判定ブロック5206でテールフリットを検出すると、これに応答して、論理は、ブロック5214に進み、このブロックで、VLスタックがポップされ、現在のVLレジスタが更新される。論理は、次いで、ブロック5202に戻って、次のフリットを取り扱う。
【0271】
判定ブロック5204に戻って、フリットが遊休フリット又はLF制御フリットであると識別された場合には、論理は、判定ブロック5216に進んで、このフリットがVLマーカであるかどうかを判定する。VLマーカでない場合には、ブロック5220で、LF制御フリット又は遊休フリットによって指定される1つ又は複数の適用可能な動作を実行し、論理は、ブロック5202に戻って、次のフリットを取り扱う。ただし、フリットが、VLマーカを含むLF制御フリットである場合には、論理は、ブロック5218に進んで、このブロックで、そのVLマーカによって識別されるVLで現在のVLレジスタを更新し、VLスタックをプッシュする。次いで、論理はブロック5202に戻り、次のフリットを取り扱う。
【0272】
図53は、メモリ5308に結合されたプロセッサ5306に結合された、ファブリックポート5304を含むホストファブリックインタフェース5302を含む例示的な構成を有する、ノード5300を示す図である。
図1に示すように、システムノードは、離散独立ノードプラットフォーム106、仮想化プラットフォーム110、多ノードプラットフォーム116、及び一体化独立ノードプラットフォーム120で示す構成など(ただしこれらに限定されない)、様々な構成を有することができる。一般に、各ノード構成は、少なくとも1つのプロセッサと、メモリと、
図53に示す同様の構成要素を有する少なくとも1つのHFIとを含む。
【0273】
ファブリックポート5304は、
図50に示す構成と同様の構成を有する送信ポート5000及び受信ポート5002を含む。送信ポート5000は、複数の送信VLバッファに区分化された送信バッファを含むTxリンクファブリックサブレイヤ回路及び論理5004と、Txリンク転送サブレイヤ回路及び論理5006と、4つの送信機5106を含むTx PHY回路及び論理5008と、Txリンク制御ブロック1804とを含む。受信ポート5002は、複数の受信VLバッファに区分化された受信バッファを含むRxリンクファブリックサブレイヤ回路及び論理5010と、Rxリンク転送サブレイヤ回路及び論理5012と、4つの受信機5028を含むRx PHY回路及び論理5014と、Rxリンク制御ブロック1805とを含む。
【0274】
HFI5302は、PCIe(周辺機器相互接続エクスプレス)インタフェース(I/F)5314に結合された送信エンジン5310及び受信エンジン5312をさらに含む。送信エンジン5310は、L4パケット(例えばカプセル化されたTCP/IPパケットを含むイーサネット(登録商標)パケット、InfiniBandパケット)及び/又はファブリックパケットがバッファリングされる送信バッファ5316を含む。1実施形態では、送信バッファ5316のメモリの全体又は一部分は、プログラムIO(PIO)空間とも呼ばれるメモリマップ入出力(MMIO)アドレス空間を構成する。MMIOにより、プロセッサ5306は、例えば直接メモリアクセス(DMA書込み)を介して、送信バッファ5314への直接書込みを実行することができる。
【0275】
受信エンジン5312は、受信バッファ5318及びDMAエンジン5320を含む。受信バッファは、ファブリックパケット及び/又はL4パケットを含むことがある受信ポート5002の出力をバッファリングするために使用される。DMAエンジン5320は、DMA書込みを実行して、受信バッファ5318のパケットデータをメモリ5308及び/又はプロセッサ5306のメモリキャッシュレベルのうちの1つにコピーするように構成される。例えば、いくつかの実施形態では、パケットヘッダデータは、キャッシュにDMAされるが、パケットのペイロードデータは、メモリにDMAされる。
【0276】
プロセッサ5306は、一体化されたレベル1及びレベル2(L1/L2)のキャッシュをそれぞれ含み、コヒーレント相互接続5326にそれぞれ結合された、複数のプロセッサコア5324を含むCPU5322を含む。また、コヒーレント相互接続5326には、メモリ5308に結合されたメモリインタフェース5328と、一体化入出力ブロック(IIO)5330と、ラストレベルキャッシュ(LLC)5332とが結合される。IIO5330は、プロセッサコア、メモリ及びキャッシュによって利用されるコヒーレント領域と、1対のPCIeルートコンプレックス(RC)5334及び5336などのIO構成要素及びIOインタフェースのために利用される非コヒーレント領域との間のインタフェースを提供する。当技術分野では周知のように、PCIe RCは、PCIeインタフェース5338、5340、5342及び5344で示すように複数のPCIeインタフェース及びPCIeデバイスを結合することができるPCIe相互接続階層の最上位に位置する。図示のように、PCIe5340は、HFI5302のPCIeインタフェース5314に結合される。
【0277】
図53に示すような、いくつかの実施形態では、プロセッサ5312は、システムオンチップ(SoC)アーキテクチャを利用する。他の実施形態では、PCIe関連構成要素が、IOチップセットなどに集積される。さらに他の実施形態では、プロセッサ5312及び1つ又は複数のHFI5302が、SoC5346の破線の輪郭で示すようなSoC上に一体化される。
【0278】
図53にさらに示すように、ソフトウェアアプリケーション5348及びvNIC5350は、プロセッサコア5324のうちの1つ又は複数、或いはプロセッサ5306上で動作するオペレーティングシステムをホストとする1つ又は複数の仮想マシン上で実行されるソフトウェア構成要素を含む。これらのソフトウェア構成要素に加えて、メモリ5308(適用可能なキャッシュレベルを含む)と送信エンジン5310及び受信エンジン5312との間のデータ転送を容易にするための追加のソフトウェア構成要素及びメモリ5308中に実装されたバッファがある。
【0279】
一般に、本明細書の図面に示す回路、論理、及び構成要素は、離散チップ、SoC、マルチチップモジュール、及び複数のネットワークインタフェースのサポートを含むネットワーキング/リンクインタフェースチップなど、様々なタイプの集積回路(例えば半導体チップ)及びモジュールで実装することもできる。また、本明細書で使用する様々な動作を実行する回路及び論理は、1つ又は複数の埋込み論理、埋込みプロセッサ、制御装置、マイクロエンジンによって、或いはハードウェア、ソフトウェア及び/又はファームウェアの任意の組合せを用いて、実装することができる。例えば、様々な論理ブロック及び/又は回路によって示す動作は、ASIC、FPGA、IPブロックライブラリなど(ただしこれらに限定されない)のプログラム論理ゲートなどを用いて実行する、或いはプロセッサ、プロセッサコア、制御装置、マイクロコントローラ、マイクロエンジンなどの1つ又は複数の処理要素上で実行されるソフトウェア又はファームウェア命令の1つ又は複数によって実行することもできる。
【0280】
さらに、本明細書の実施形態の特徴は、半導体チップ、SoC、マルチチップモジュールなどのみでなく、非一時的機械可読媒体でも実施することができる。例えば、上述の設計を、半導体デバイスを設計するために使用される設計ツールと関連付けた非一時的機械可読媒体に記憶する、かつ/又は埋め込むことができる。例としては、VHSICハードウェア記述言語(VHDL)言語、ベリログ言語又はSPICE言語、或いはその他のハードウェア記述言語でフォーマットしたネットリストが挙げられる。ネットリストの例をいくつか挙げると、挙動レベルネットリスト、レジスタ転送レベル(RTL)ネットリスト、ゲートレベルネットリスト、及びトランジスタレベルネットリストなどがある。機械可読媒体は、GDS−IIファイルなどのレイアウト情報を有する媒体も含む。
【0281】
さらに、半導体チップ設計用のネットリストファイル又はその他の機械可読媒体をシミュレーション環境で使用して、上述の教示の方法を実行することもできる。具体的な実施態様を参照していくつかの実施形態について説明したが、いくつかの実施形態によれば、その他の実施態様も可能である。さらに、図面に示し、かつ/又は本明細書で説明した要素又はその他の機構の配列及び/又は順序は、図示して説明した特定の方法で配列する必要はない。いくつかの実施形態によれば、その他の多数の配列が可能である。
【0282】
図面に示す各システムにおいて、いくつかの場合の要素は、その示されている要素が異なる、かつ/又は同様である可能性があることを示唆するために、同じ参照番号が付されていることも、異なる参照番号が付されていることもある。ただし、要素は、様々な実装態様を有するのに十分に柔軟であり、本明細書に示した、又は説明したシステムの一部又は全体とともに作用することができる。図面に示す様々な要素は、同じであることも、異なることもある。どの要素を第1の要素と呼び、どの要素を第2の要素と呼ぶかは、任意である。
【0283】
上記の詳細な説明及び特許請求の範囲における「n」、「m」、「k」などのイタリック体の文字は、整数を表すために用いられており、ある特定の文字の使用が特定の実施形態に限定されることはない。さらに、同じ文字を使用しても、別の請求項では別の整数を表すこともあり、異なる文字を使用することもある。さらに、詳細な説明における特定の文字の使用は、詳細な説明と同じ主題に関連する請求項で用いている文字と一致する場合もあれば、一致しない場合もある。
【0284】
本明細書及び特許請求の範囲では、「結合される」及び「接続される」という用語、並びにそれらの派生表現を使用することがある。これらの用語は、互いに同義であると意図したものではないことを理解されたい。特定の実施形態では、「接続される」は、2つ以上の要素が互いに物理的又は電気的に直接接触していることを示すことがある。「結合される」は、2つ以上の要素が物理的又は電気的に直接接触していることを示すことがある。しかしながら、「結合される」は、2つ以上の要素が互いに直接接触していないが、互いに協働又は相互作用することを意味することもある。
【0285】
実施形態は、本発明の実施態様又は例である。本明細書において「実施形態」、「1実施形態」、「いくつかの実施形態」又は「他の実施形態」と述べているときには、その実施形態に関連して述べられている特定の機能、構造、又は特性が、少なくともいくつかの実施形態に含まれることを意味しており、必ずしも本発明の全ての実施形態に含まれることを意味しているわけではない。「実施形態」、「1実施形態」、又は「いくつかの実施形態」が様々な箇所で見られるが、これらは必ずしも同じ実施形態を指しているわけではない。
【0286】
本明細書に記載して図示した全ての構成要素、機能、構造、特性などが、特定の1つ又は複数の実施形態に含まれる必要はない。本明細書において、ある構成要素、機能、構造又は特性が、例えば「含まれる可能性がある」、「含まれる可能性もある」、「含むことができる」、又は「含むこともできる」などと述べられている場合、その特定の構成要素、機能、構造又は特性は、含まれる必要があるわけではない。本明細書又は特許請求の範囲において、単に「要素(”a” or ”an” element)」と述べている場合には、これは、その要素が1つしかないという意味ではない。本明細書又は特許請求の範囲において、「追加の要素(”an additional” element)」と述べている場合には、これは、その追加の要素が複数存在することを排除するものではない。
【0287】
要約書に記載したものも含めて、例示した本発明の実施形態の上記の説明には、排他的な意図、又は開示した厳密な形態に本発明を限定する意図はない。例示を目的として、本発明の具体的な実施形態及び例を本明細書に記載したが、当業者なら、本発明の範囲内で、様々な等価な修正形態が可能であることを認識するであろう。
【0288】
これらの修正は、上記の詳細な説明に照らして、本発明に加えることができる。以下の特許請求の範囲で使用する用語は、本発明を本明細書及び図面に開示した具体的な実施形態に限定するものとして解釈すべきではない。本発明の範囲は、以下の特許請求の範囲によって完全に決定され、特許請求の範囲は、確立されたクレーム解釈の法理に従って解釈されるものとする。