特表2016-530764IP Force 特許公報全文掲載

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】特表2016-530764(P2016-530764A)
(43)【公表日】2016年9月29日
(54)【発明の名称】リンクファブリックパケットとは非同期なフリットバンドルを用いたリンク転送、ビットエラー検出、及びリンクリトライ
(51)【国際特許分類】
   H04L 29/00 20060101AFI20160902BHJP
   G06F 3/00 20060101ALI20160902BHJP
   G06F 15/173 20060101ALI20160902BHJP
【FI】
   H04L13/00 S
   G06F3/00 E
   G06F15/173 685A
【審査請求】有
【予備審査請求】未請求
【全頁数】62
(21)【出願番号】特願2016-524398(P2016-524398)
(86)(22)【出願日】2014年12月5日
(85)【翻訳文提出日】2015年12月24日
(86)【国際出願番号】US2014068889
(87)【国際公開番号】WO2015085231
(87)【国際公開日】20150611
(31)【優先権主張番号】14/099,291
(32)【優先日】2013年12月6日
(33)【優先権主張国】US
(81)【指定国】 AP(BW,GH,GM,KE,LR,LS,MW,MZ,NA,RW,SD,SL,ST,SZ,TZ,UG,ZM,ZW),EA(AM,AZ,BY,KG,KZ,RU,TJ,TM),EP(AL,AT,BE,BG,CH,CY,CZ,DE,DK,EE,ES,FI,FR,GB,GR,HR,HU,IE,IS,IT,LT,LU,LV,MC,MK,MT,NL,NO,PL,PT,RO,RS,SE,SI,SK,SM,TR),OA(BF,BJ,CF,CG,CI,CM,GA,GN,GQ,GW,KM,ML,MR,NE,SN,TD,TG),AE,AG,AL,AM,AO,AT,AU,AZ,BA,BB,BG,BH,BN,BR,BW,BY,BZ,CA,CH,CL,CN,CO,CR,CU,CZ,DE,DK,DM,DO,DZ,EC,EE,EG,ES,FI,GB,GD,GE,GH,GM,GT,HN,HR,HU,ID,IL,IN,IR,IS,JP,KE,KG,KN,KP,KR,KZ,LA,LC,LK,LR,LS,LU,LY,MA,MD,ME,MG,MK,MN,MW,MX,MY,MZ,NA,NG,NI,NO,NZ,OM,PA,PE,PG,PH,PL,PT,QA,RO,RS,RU,RW,SA,SC,SD,SE,SG,SK,SL,SM,ST,SV,SY,TH,TJ,TM,TN,TR,TT,TZ,UA,UG,US
(71)【出願人】
【識別番号】593096712
【氏名又は名称】インテル コーポレイション
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100091214
【弁理士】
【氏名又は名称】大貫 進介
(72)【発明者】
【氏名】ビリッテルラ,マーク エス.
【テーマコード(参考)】
5B045
5K034
【Fターム(参考)】
5B045BB15
5B045BB38
5B045JJ07
5B045JJ38
5K034AA07
5K034DD03
5K034FF02
5K034HH09
5K034HH12
5K034HH63
5K034HH64
5K034MM01
5K034MM14
5K034MM25
(57)【要約】
リンクファブリックパケットとは非同期なフリットバンドルを用いたリンク転送、ビットエラー検出、及びリンクリトライのための方法、装置、及びシステム。ファブリックパケットを含む第1のタイプのパケットが生成され、そのデータコンテンツが「フリット」と呼ばれる複数のデータユニットに分割される。次いで、フリットが、リンク転送パケット(LTP)を含む第2のタイプのパケットにまとめられる。次いで、LTPが、多数のポイントツーポイントリンクを含むファブリックにおいて、単一リンクセグメントを介して送信される。各LTPは、各リンクセグメントを介して送信されるデータがエラーを有さないことを確実にするために使用されるCRCを含み、再送信のユニットを含む。ファブリックパケットのサイズは変わり得るものであり、ファブリックパケットは、LTPより大きいこともあるし小さいこともある。転送スキームは、複数のファブリックパケットからのフリットを1つのLTPにまとめることを可能にした。ファブリックエンドポイントにおける受信時に、LTPからフリットが抽出されて再組み立てされ、ファブリックパケットが再生成される。
【特許請求の範囲】
【請求項1】
リンクインタフェースであって、
受信ポートと、
複数のファブリックパケットを生成し、
各ファブリックパケットを複数のデータユニットに分割し、
前記データユニットをグループにまとめて、複数のリンクパケットを形成し、
前記複数のリンクパケットを、リンクを介して受信機に向けて送信する、
ための回路及びロジックを有する送信ポートと、
を含むリンクインタフェース
を備え、
前記複数のリンクパケットのうちの少なくとも1つは、少なくとも2つのファブリックパケットからのデータユニットを含む、装置。
【請求項2】
各リンクパケットは、予め定められた数の固定サイズのフリットを含む、請求項1記載の装置。
【請求項3】
前記複数のファブリックパケットのうちの少なくとも1つは、各リンクパケットのフリットの前記予め定められた数よりも少ない第1の数のフリットを含み、前記複数のファブリックパケットのうちの少なくとも1つは、各リンクパケットのフリットの前記予め定められた数よりも多い第2の数のフリットを含む、請求項2記載の装置。
【請求項4】
前記送信ポートは、各リンクパケットに含まれるデータに対するデータインテグリティチェック値を計算して、前記データインテグリティチェック値を前記リンクパケットに含めるための回路及びロジックを有する、請求項1乃至3いずれか一項記載の装置。
【請求項5】
各ファブリックパケットは、ヘッドフリットを含む最初のデータユニットと、前記最初のデータユニットに続く複数のボディフリットと、最後にテールフリットを含む最後のデータユニットと、を含む複数の異なるタイプのデータユニットに分割される、請求項1乃至4いずれか一項記載の装置。
【請求項6】
リンクパケット内の各データユニットは、フリットタイプビットを含む、請求項5記載の装置。
【請求項7】
リンクパケット内のどこにでも、任意のタイプのデータユニットを配置することができる、請求項5又は6記載の装置。
【請求項8】
前記複数のリンクパケットのうちの1つは、制御データユニットを含む少なくとも1つのタイプのデータユニットを含み、
前記リンクインタフェースは、
前記受信ポートにおいて受信されたリンクパケット内の制御データユニットを検出し、
前記制御データユニットにより特定される制御オペレーションを実行する、
ためのさらなる回路及びロジックを含む、請求項1乃至7いずれか一項記載の装置。
【請求項9】
前記送信ポートから送信される前記複数のリンクパケットは、第1の複数のパケットを含み、
前記受信ポートは、
第2の複数のファブリックパケットから分割されたデータを含むデータユニットを含む第2の複数のリンクパケットを受信し、
前記第2の複数のリンクパケットからデータユニットを抽出し、
該データユニットを再組み立てして、前記第2の複数のファブリックパケットを再生成する、
ための回路及びロジックを有し、
前記第2の複数のリンクパケットのうちの少なくとも1つは、少なくとも2つのファブリックパケットからのデータユニットを含む、請求項1乃至8いずれか一項記載の装置。
【請求項10】
各リンクパケットは、送信されたとき、前記リンクパケットに含まれるデータに対して計算された送信側データインテグリティチェック値を含み、
前記受信ポートは、
各リンクパケット内の受信されたデータに対する受信側データインテグリティチェック値を計算し、
前記受信側データインテグリティチェック値を前記送信側データインテグリティチェック値と比較して、前記リンクパケットがエラーを有するかどうかを検出し、
前記リンクパケットがエラーを有する場合、前記リンクパケットの送信元のリンクピアに再送信リクエストを送信する、
ためのさらなる回路及びロジックを有する、請求項1乃至9いずれか一項記載の装置。
【請求項11】
前記リンクインタフェースは、
リンクピアから再送信リクエストを受信したことに応答して、
前記再送信リクエストがなされた前記リンクパケットを特定し、
前記リンクパケットを再送信する、
ためのさらなる回路及びロジックを含む、請求項10記載の装置。
【請求項12】
複数の第1のタイプのパケットを生成するステップと、
各第1のタイプのパケットを複数のデータユニットに分割するステップと、
前記データユニットをグループにまとめて、複数の第2のタイプのパケットを形成するステップと、
前記複数の第2のタイプのパケットを、リンクを介して受信機に向けて送信するステップと、
を含み、
前記複数の第2のタイプのパケットのうちの少なくとも1つは、少なくとも2つの第1のタイプのパケットからのデータユニットを含む、方法。
【請求項13】
各第2のタイプのパケットは、予め定められた数のデータユニットを含む、請求項12記載の方法。
【請求項14】
前記複数の第1のタイプのパケットのうちの少なくとも1つは、各第2のタイプのパケットのデータユニットの前記予め定められた数よりも少ない第1の数のデータユニットを含み、前記複数の第1のタイプのパケットのうちの少なくとも1つは、各第2のタイプのパケットのデータユニットの前記予め定められた数よりも多い第2の数のデータユニットを含む、請求項13記載の方法。
【請求項15】
当該方法は、複数のリンクを含むファブリックにおいて第1のリンクを介してファブリックスイッチの受信ポートに結合されている第1のファブリックエンドポイントの送信ポートにより実行され、少なくとも1つの第1のタイプのパケットは、前記第1のリンクを含む複数のリンクを含む転送パスを介して、第2のファブリックエンドポイントに送信され、前記第2のタイプのパケットは、前記第1のリンクを介して、前記受信ポートに送信され、さらに転送されることはない、請求項12乃至14いずれか一項記載の方法。
【請求項16】
各第2のタイプのパケットは、前記受信機により受信された第2のタイプのパケット内のデータがエラーを有さないことを確認するために使用されるデータインテグリティチェック値を含み、各第2のタイプのパケットは、前記第2のタイプのパケットの元の送信においてエラーが検出されたときに再送信される再送信ユニットを含む、請求項12乃至15いずれか一項記載の方法。
【請求項17】
各第1のタイプのパケットは、ヘッドデータユニットを含む最初のデータユニットと、前記最初のデータユニットに続く複数のボディデータユニットと、最後にテールデータユニットを含む最後のデータユニットと、を含む複数の異なるタイプのデータユニットに分割される、請求項12乃至16いずれか一項記載の方法。
【請求項18】
前記複数の第2のタイプのパケットのうちの1つは、制御データユニットを含む少なくとも1つのタイプのデータユニットを含む、請求項12乃至17いずれか一項記載の方法。
【請求項19】
第2の複数のファブリックパケットから分割されたデータを含むデータユニットを含む第2の複数のリンクパケットを受信するステップと、
前記第2の複数のリンクパケットからデータユニットを抽出するステップと、
該データユニットを再組み立てして、前記第2の複数のファブリックパケットを再生成するステップと、
をさらに含み、
前記第2の複数のリンクパケットのうちの少なくとも1つは、少なくとも2つのファブリックパケットからのデータユニットを含む、請求項12乃至18いずれか一項記載の方法。
【請求項20】
第1のコンポーネント及び第2のコンポーネントを備えたシステムであって、前記第1のコンポーネント及び前記第2のコンポーネントの各々は、リンクに結合されるよう構成されているリンクインタフェースであって、他方のリンクインタフェースとのリンクピアとして動作するよう構成されているリンクインタフェースを含み、各リンクインタフェースは、
第1の複数のファブリックパケットを生成し、
各ファブリックパケットを複数のフリットに分割し、
前記フリットをグループにまとめて、第1の複数のリンクパケットを形成し、
前記第1の複数のリンクパケットを、前記リンクを介して、各リンクインタフェースのリンクピアの前記リンクインタフェースに向けて送信し、
各リンクインタフェースのリンクピアから前記リンクを介して送信された第2の複数のリンクパケットを受信し、ここで、前記第2の複数のリンクパケットは、第2の複数のファブリックパケットから分割されたフリットを含み、
前記第2の複数のリンクパケットからフリットを抽出し、
該フリットを再組み立てして、前記第2の複数のファブリックパケットを再生成する、
よう構成されており、
前記第1の複数のリンクパケット及び前記第2の複数のリンクパケットの各々の少なくとも一部は、少なくとも2つのファブリックパケットからのフリットを含む、システム。
【請求項21】
各フリットは、固定サイズを有し、各リンクパケットは、固定数のフリットを有し、前記第1の複数のファブリックパケット及び前記第2の複数のファブリックパケットのサイズは変わる、請求項20記載のシステム。
【請求項22】
各リンクインタフェースは、
送信される各リンクパケットに含まれるデータに対する送信側データインテグリティチェック値を計算して、前記送信側データインテグリティチェック値を前記リンクパケットに含めるための回路及びロジックを有する送信ポートと、
受信された各リンクパケット内の受信されたデータに対する受信側データインテグリティチェック値を計算し、前記受信側データインテグリティチェック値を前記送信側データインテグリティチェック値と比較して、前記リンクパケットがエラーを有するかどうかを検出するための回路及びロジックを有する受信ポートと、
を含む、請求項20又は21記載のシステム。
【請求項23】
前記第1のコンポーネント及び前記第2のコンポーネントのうちの少なくとも1つは、リンクインタフェースを含むホストファブリックインタフェースであって、
送信される各ファブリックパケットに含まれるデータに対する送信側巡回冗長チェックサム(CRC)を計算し、
再生成された各ファブリックパケットに含まれるデータに対する受信側CRCを計算し、
前記送信側CRCと前記受信側CRCとを比較して、前記の再生成されたファブリックパケットがエラーを含むかどうかを判定する、
ための回路及びロジックをさらに含むホストファブリックインタフェースを含む、請求項20乃至22いずれか一項記載のシステム。
【請求項24】
前記第1のコンポーネント及び前記第2のコンポーネントのうちの少なくとも1つは、リンクインタフェースが集積されているホストインタフェースチップを含み、
前記ホストインタフェースチップは、
少なくとも1つの送信バッファを含む、前記リンクインタフェースの送信ポートに結合されている送信エンジンと、
少なくとも1つの受信バッファを含む、前記リンクインタフェースの受信ポートに結合されている受信エンジンと、
前記送信エンジン及び前記受信エンジンの各々に結合されている周辺コンポーネント相互接続エクスプレス(PCIe)インタフェースと、
を含む、請求項20乃至23いずれか一項記載のシステム。
【請求項25】
前記第1のコンポーネント及び前記第2のコンポーネントのうちの少なくとも1つは、
システムオンチップ(SoC)であって、
リンクインタフェースが集積されているホストファブリックインタフェースであって、
少なくとも1つの送信バッファを含む、前記リンクインタフェースの送信ポートに結合されている送信エンジンと、
少なくとも1つの受信バッファを含む、前記リンクインタフェースの受信ポートに結合されている受信エンジンと、
前記送信エンジン及び前記受信エンジンの各々に結合されている周辺コンポーネント相互接続エクスプレス(PCIe)インタフェースと、
を含むホストファブリックインタフェース
を含むSoCと、
前記ホストファブリックインタフェースの前記PCIeインタフェースに結合されているPCIeインタフェースを含むプロセッサと、
を含む、請求項20乃至24いずれか一項記載のシステム。
【発明の詳細な説明】
【背景技術】
【0001】
高性能計算(HPC)は、ここ数年、使用及び関心の大幅な増加が見られている。歴史的には、HPCは、一般に、いわゆる「スーパーコンピュータ」に関するものであった。スーパーコンピュータは、1960年代に導入され、コントロール・データ・コーポレーション(CDC)においてシーモア・クレイにより最初に作られ、数十年にわたって、CDC、クレイ・リサーチ、及びクレイの名前又はモノグラムを有するその後の会社においてシーモア・クレイにより主に作られてきた。1970年代のスーパーコンピュータは、数個のプロセッサしか使用しなかったが、1990年代には、数千個のプロセッサを有するマシンが出現し始め、より最近では、数十万個の「市販」プロセッサを有する超並列スーパーコンピュータが実現されている。
【0002】
実現型及び研究指向型の両方で、様々なレベルの規模及び性能を有する多くのタイプのHPCアーキテクチャが存在する。しかしながら、一般的なスレッド(thread)は、プロセッサ及び/又はプロセッサコア等の、協調して並列にタスクを実行する多数のコンピュートユニットの相互接続である。最近のシステムオンチップ(SoC)設計及び提案の下では、多数のプロセッサコア又は同様のものが、2次元(2D)アレイ、トーラス、リング、又は他の構成を用いて、単一のSoC上に実装されている。さらに、研究者達は、数百個のプロセッサコア又はさらには数千個のプロセッサコアが3Dアレイにおいて相互接続される3D SoCを提案している。別々のマルチコアプロセッサ及びSoCはまた、サーバボード上に密集していることがあり、サーバボードが、今度は、バックプレーン又は同様のものを介する通信において相互接続される。別の一般的なアプローチは、通常は2Dアレイにおいて構成されるサーバ(例えば、ブレードサーバ及びモジュール)のラック内でコンピュートユニットを相互接続することである。世界の最速スーパーコンピュータと思われるIBM(登録商標)のセコイアは、2Dアレイの、計1572864個のコアを有するサーバブレード/モジュールの96個のラックを備え、最高性能下で動作するときには実に7.9メガワットもの電力を消費する。
【0003】
HPCの性能ボトルネックのうちの1つは、コンピュートノード間においてインターコネクトを介してデータを転送することから生じる遅延である。通常、インターコネクトは、インターコネクト階層で構造化され、階層の最上位には、プロセッサ/SoC内に最高速度で最短のインターコネクトが存在するのに対し、階層レベルが下がるにつれ遅延が増大する。例えば、プロセッサ/SoCレベルの後に、インターコネクト階層は、プロセッサ間インターコネクトレベル、ボード間インターコネクトレベル、及び、個々のサーバ群又は個々のサーバ群の集合体群(aggregations)を他のラック内のサーバ群/集合体群に接続する1以上のさらなるレベルを含み得る。
【0004】
インターコネクト階層の1以上のレベルは、異なるプロトコルを使用することが一般的である。例えば、SoC内のインターコネクトは、通常、専用であるのに対し、階層におけるより下位のレベルは、専用インターコネクト又は標準インターコネクトを使用し得る。異なるインターコネクトレベルはまた、通常、異なる物理(PHY)レイヤを実装する。結果として、インターコネクトレベル間をブリッジする何らかのタイプのインターコネクトを使用する必要がある。加えて、異種のコンピュート環境が実装される場合には、所与のインターコネクトレベルにおいてブリッジングが必要なこともある。
【0005】
インターコネクト階層のより下位のレベルでは、(様々なIEEE802.3規格において規定されている)イーサネット(登録商標)及びインフィニバンド等の標準インターコネクトが使用される。PHYレイヤでは、これら規格の各々は、ワイヤケーブルやバックプレーンを介するもの等の有線接続に加えて、光リンクをサポートしている。イーサネット(登録商標)は、OSI7レイヤモデルにおけるリンクレイヤ(レイヤ2)で実装され、基本的にリンクレイヤプロトコルとみなされる。インフィニバンド規格は、OSIレイヤ1〜4をカバーする、インフィニバンドのための様々なOSIレイヤの態様を規定している。
【0006】
現在のイーサネット(登録商標)プロトコルは、イーサネット(登録商標)リンクを介するデータの高信頼性送信(reliable transmission)をサポートするための固有の機能を有していない。これは、インフィニバンドのリンクレイヤ実装にも同じことが言える。各々は、TCP/IP等のより上位のレイヤで高信頼性送信に対処する。TCP下では、データの高信頼性配信(reliable delivery)は、センダ(sender)からIPパケットを受信したことに応答して、(IP宛先アドレスにおける)レシーバ(receiver)から(IP送信元アドレスにおける)センダに返される明示的アクノレッジメント(ACK)により実現される。パケットは、センダとレシーバとの間のルートに沿った複数のノードのうちの1つのノードにおいてドロップされる可能性があるので(あるいは、レシーバが十分なバッファスペースを有していない場合には、パケットは、レシーバにおいてもドロップされる可能性があるので)、明示的ACKが、各パケットの配信の成功を確認するために使用される(1つのACK応答により、複数のIPパケットの配信を確認することができることに留意されたい)。送信ACKスキームは、送信元デバイス及び宛先デバイスの各々において大きなバッファスペースが保持されることを必要とし(ドロップされた1以上のパケットが再送信される必要がある場合)、また、さらなる処理及び複雑さをネットワークスタックに加える。例えば、ACKはドロップされる可能性があるので、センダはまた、タイマを使用する。タイマは、タイマのタイムアウト期間内にACKが受信されなかったパケットの再送信をトリガするために使用される。各ACKは、貴重なリンク帯域幅を消費し、さらなる処理オーバーヘッドを発生させる。加えて、タイマの使用は、リンクラウンドトリップ遅延に対する上限を設定する。
【図面の簡単な説明】
【0007】
添付の図面と併せて以下の詳細な説明を参照することにより、前述の態様及び本発明の付随する利点の多くが、より良く理解されるとともに、より容易に理解されるであろう。図面において、同様の参照符号は、別途明示されない限り、様々な図面を通して、同様の部分を指す。
【図1】一実施形態に従った、ファブリックアーキテクチャの様々なコンポーネント及びインターコネクトを含むシステムの高レベルビューを示す概略図。
【図2】一実施形態に従った、ファブリックリンクを介してデータを転送するためのアーキテクチャのレイヤを示す概略図。
【図3】バンドルにグループ化された複数のフリットを示す概略図。
【図4】一実施形態に従った、ファブリックパケットの構造を示す概略図。
【図5】一実施形態に従った、標準型検出LTPのデータ構造を示す図。
【図6】一実施形態に従った、14ビットCRC LTPのデータ構造を示す図。
【図7】一実施形態に従った、拡張型検出LTPのデータ構造を示す図。
【図8】一実施形態に従った、標準型検出ヌルLTPのデータ構造を示す図。
【図9a】一実施形態に従った、リンクファブリックサブレイヤとリンク転送サブレイヤとの間のインタフェースにおいて標準型検出LTPのフリットが同時に2つ並列に処理される、4レーンリンクのための送信スキームの実施形態を示す図。
【図9b】一実施形態に従った、リンクファブリックサブレイヤとリンク転送サブレイヤとの間のインタフェースにおいて拡張型検出LTPのフリットが同時に2つ並列に処理される、4レーンリンクのための送信スキームの実施形態を示す図。
【図10】一実施形態に従った、リンクファブリックサブレイヤとリンク転送サブレイヤとの間のインタフェースにおいて2つのフリットが同時に2つ並列に処理される、4レーンリンクを介する2つの制御ビットを含む1つの14ビットCRC LTPの送信を示す概略図。
【図11】一実施形態に従った、一緒にグループ化された2つの4レーンリンクを含む8レーンデータパスを介する、それぞれ2つの制御ビットを含む2つの14ビットCRC LTPの並列送信を示す概略図。
【図12】一実施形態に従った、4つのレーンを使用する2つのリンクポート間における双方向データ送信の一例を示す概略図。
【図13】別々の仮想レーンを介して送信される2つのファブリックパケットからのファブリックパケットフリットをインターリーブする実施形態の一例を示す図。
【図14】一実施形態に従った、プッシュ及びポップインターリービングの使用を示す図。
【図15】一実施形態に従った、プッシュ及びポップインターリービングとVLマーカインターリービングとの組合せの使用を示す図。
【図16】一実施形態に従った、別々の優先度レベルを有するVLに対応する3つの別々のVL FIFOにバッファされた3つのファブリックパケットからのフリットのプリエンプティブインターリービングの一例を示す、構成及び時間フローの組合せ図。
【図17】一実施形態に従った、2つのVLが1つの優先度レベルを共有し、他のVLがより高い優先度レベルを有する、3つの別々のVL FIFOにバッファされた3つのファブリックパケットからのフリットのバブルインターリービング及びプリエンプティブインターリービングの一例を示す、構成及び時間フローの組合せ図。
【図18a】一実施形態に従った、LTPレーン及び不良レーンを検出するための、LTP送信スキームの送信と、レーン毎CRC及びLTP CRCの使用と、を示す概略図であって、LTP送信スキームにおけるLTPの元の送信を示す概略図。
【図18b】一実施形態に従った、LTPレーン及び不良レーンを検出するための、LTP送信スキームの送信と、レーン毎CRC及びLTP CRCの使用と、を示す概略図であって、リプレイバッファを用いたLTP送信ストリームにおけるLTPの再送信を示す概略図。
【図18c】一実施形態に従った、リプレイバッファLTPが上書きされることを防止するためのリトライマーカ及びラウンドトリップマーカの使用を示す概略図。
【図19】一実施形態に従った、33個の転送グループ(XFR)を用いた標準型検出LTPの送信を示す図。
【図20】一実施形態に従った、33個の32ビットXFR及び4つのLTPシーケンス状態を用いた4レーンリンクを介するLTPの送信を示す図。
【図21】一実施形態に従った、33個の32ビットXFRを用いて、8バイトのデータ及び65番目のビットを含むフリットデータが4レーンリンクを介してどのように転送されるかを示す図。
【図22a】一実施形態に従った、リプレイバッファとともに暗示的ACKを用いてリンクレベルでの高信頼性LTP送信を円滑にするためのオペレーション及びロジックを示すとともに、不良レーンを検出するためのオペレーション及びロジックを示すフローチャート。
【図22b】一実施形態に従った、リプレイバッファとともに暗示的ACKを用いてリンクレベルでの高信頼性LTP送信を円滑にするためのオペレーション及びロジックを示すとともに、不良レーンを検出するためのオペレーション及びロジックを示すフローチャート。
【図22c】一実施形態に従った、リプレイバッファとともに暗示的ACKを用いてリンクレベルでの高信頼性LTP送信を円滑にするためのオペレーション及びロジックを示すとともに、不良レーンを検出するためのオペレーション及びロジックを示すフローチャート。
【図22d】一実施形態に従った、リプレイバッファとともに暗示的ACKを用いてリンクレベルでの高信頼性LTP送信を円滑にするためのオペレーション及びロジックを示すとともに、不良レーンを検出するためのオペレーション及びロジックを示すフローチャート。
【図22e】一実施形態に従った、リプレイバッファとともに暗示的ACKを用いてリンクレベルでの高信頼性LTP送信を円滑にするためのオペレーション及びロジックを示すとともに、不良レーンを検出するためのオペレーション及びロジックを示すフローチャート。
【図23a】一実施形態に従った、送信機の状態図。
【図23b】一実施形態に従った、受信機の状態図。
【図24】一実施形態に従った、XFRグループ単位で計算されて記憶されるレーン毎CRCを示す図。
【図25】第1のLTPシーケンス状態下で不良LTPが元々送信されるときにレーン毎CRCが計算され、第3のLTPシーケンス状態下でリプレイバッファからの不良LTPが再送信されるときにレーン毎CRCが計算された、図18a及び図18bの例についてのXFRグループ単位で記憶されている例示的なレーン毎CRC計算値を示す図。
【図26】一実施形態に従った、1レーン当たり11個のXFRが並列に転送される、3つのレーンを介する標準型検出LTPの転送を示す図。
【図27】一実施形態に従った、2つのレーンを介する標準型検出LTPの転送であって、17個のXFRは2つのレーンのうちの一方を介して転送され、16個のXFRは他方のレーンを介して転送され、2つのLTPシーケンス状態が使用される転送を示す図。
【図28】一実施形態に従った、33個の32ビットXFRを用いた1つのレーンを介する標準型検出LTPの送信を示す図。
【図29】一実施形態に従った、HFIを含むシステムの概略図。
【発明を実施するための形態】
【0008】
リンクファブリックパケットとは非同期なフリットバンドル(flit bundle、フリット束)を用いたリンク転送、ビットエラー検出、及びリンクリトライのための方法、装置、及びシステムの実施形態について、本明細書で説明する。以下の説明において、本発明の実施形態の完全な理解を提供するために、多数の具体的な詳細が記載されている。しかしながら、当業者は、それら具体的な詳細のうちの1以上がなくても、あるいは、他の方法、コンポーネント、材料等を用いて、本発明を実施できることが理解されよう。他の例においては、周知の構造、材料、又はオペレーションは、本発明の態様を曖昧にするのを避けるために、詳細には図示又は説明されない。
【0009】
本明細書全体を通じた「一実施形態」又は「ある実施形態」との言及は、その実施形態に関連して説明される特定の特徴、構造、又は特性が、本発明の少なくとも1つの実施形態に含まれることを意味する。したがって、本明細書全体を通じた様々な箇所における「一実施形態において」又は「ある実施形態において」という語句の出現は、必ずしも全て同じ実施形態を指すとは限らない。さらに、それら特定の特徴、構造、又は特性は、1以上の実施形態において、任意の適切な態様で組み合わされてよい。
【0010】
明瞭さのために、図中の個々のコンポーネントは、本明細書において、特定の参照符号ではなく、図中のそのラベルにより参照されることもある。さらに、特定のタイプのコンポーネント(特定のコンポーネントではない)を参照する参照符号は、その後に「典型的、代表的(typical)」を意味する「(TYP)」が続いて図示されていることがある。そのようなコンポーネントの構成は、存在し得るが簡潔さ及び明瞭さのために図中には示されていない類似するコンポーネントの典型例である。反対に、「(TYP)」は、そのようなコンポーネント、要素等が、開示する機能、実装、目的等のために典型的に使用されることを意味するものとして解釈されるべきではない。
【0011】
本明細書で説明する実施形態の態様に従うと、メッセージ通過交換サーバ相互接続ネットワークを規定するアーキテクチャが提供される。アーキテクチャは、OSIネットワークモデルレイヤ1及び2に及び、レイヤ3のIETFインターネットプロトコルを利用し、アーキテクチャのレイヤ4のための新たな仕様及び修正仕様の組合せを含む。
【0012】
アーキテクチャは、スーパーコンピュータ等、公式に規定することにより、あるいは、クラウドコンピューティングにおいてよく見受けられるように、サーバ群が実行するメッセージ交換アプリケーションに起因して何がしか協調するよう機能するそれらサーバ群のグループ又はクラスタ等、単に関連付けることにより、CPUと論理メッセージ交換構成を含む他のサブシステムとを相互接続するために実装され得る。相互接続されるコンポーネントはノードと呼ばれる。アーキテクチャはまた、プロセッサノードを、SoC、マルチチップモジュール、又は同様のものと相互接続するために実装され得る。ホストと呼ばれるノードの一タイプは、ユーザモードソフトウェアが実行されるタイプである。一実施形態において、ホストは、1つのキャッシュコヒーレントメモリ領域を含み(コヒーレント領域におけるコア又はCPUの数とは関係なく)、様々なローカルI/Oサブシステム及び記憶サブシステムを含み得る。ホストが実行するタイプのソフトウェアは、ユーザアプリケーションノード又は記憶サーバ若しくはファイルサーバ等、より特殊化された機能を規定することができ、より詳細なシステムアーキテクチャを表すよう機能する。
【0013】
最上位レベルにおいて、アーキテクチャは、以下のコンポーネントを規定する:
・ホストファブリックインタフェース(HFI:Host Fabric Interface);
・リンク;
・スイッチ;
・ゲートウェイ;及び
・包括的管理モデル(comprehensive management model)。
【0014】
ノードが、ファブリック(fabric)に接続して、他のサーバ又はデバイスとの間でパケットを送受信することができるように、ホストファブリックインタフェースは、アーキテクチャの物理レイヤ及びリンクレイヤを実装するためのロジックを少なくとも含む。HFIは、オペレーティングシステム及びVMM(仮想マシンマネージャ)のサポートのための適切なハードウェアインタフェース及びドライバを含む。HFIはまた、上位レイヤプロトコル、及び/又は、トランスポートプロトコルのオフロードを実行又は促進するための特殊化されたロジックを含み得る。HFIはまた、ネットワーク管理コンポーネントからのメッセージに応答するためのロジックを含む。各ホストは、HFIを介してアーキテクチャファブリックに接続される。
【0015】
リンクは、HFIをスイッチに接続し、スイッチを他のスイッチに接続し、あるいは、スイッチをゲートウェイに接続する全二重ポイントツーポイントインターコネクトである。リンクは、回路基板トレース、銅ケーブル、又は光ケーブルにおいて、様々な物理的構成を有することができる。一実施形態において、PHY(物理レイヤ)、ケーブル、及びコネクタの方策(strategy)の実装は、イーサネット(登録商標)用のもの、特に、100GbE(IEEE802.3bjドラフト規格(現ドラフト2.2)において規定されているイーサネット(登録商標)リンク等の、毎秒100ギガビットイーサネット(登録商標))に従う。アーキテクチャは、柔軟性があり、100GbE帯域幅を超えるであろう将来のイーサネット(登録商標)技術又は他のリンク技術の使用をサポートしている。ハイエンドスーパーコンピュータ製品は、特殊目的(はるかに高い帯域幅)のPHYを使用し得るものであり、そのような構成に関して、アーキテクチャ製品との相互運用性は、異なるPHYを有するポートを備えたスイッチに基づくことになる。
【0016】
スイッチは、OSIレイヤ2コンポーネントであり、アーキテクチャの管理インフラストラクチャにより管理される。アーキテクチャは、そのOSIレイヤ3又はインターネットワーキングレイヤとしてインターネットプロトコルを規定するが、アーキテクチャは、IPドメインにおいて何も指定しないし、IP関連デバイスを管理しない。アーキテクチャファブリックと、外部ネットワーク、特にイーサネット(登録商標)と、の間の接続をサポートするデバイスは、ゲートウェイと呼ばれる。軽量ゲートウェイ(lightweight gateway)は、限定された機能を提供し、イーサネット(登録商標)のレイヤ2において正確に動作することができる。フル機能を備えたゲートウェイは、レイヤ3及びこれより上位のレイヤにおいて動作することができ、したがって、ルータとして動作することができる。アーキテクチャにより提供されるゲートウェイ仕様は、イーサネット(登録商標)カプセル化のためのメカニズムと、アーキテクチャの残りの部分(rest)と整合するイーサネット(登録商標)データセンタネットワークに対する柔軟性のある接続を可能にするためにゲートウェイがファブリック上でどのように動作できるかと、を含む。インターネットワーキングプトロコルとしてIPを使用することにより、IETF承認トランスポート、すなわち、TCP、UDP、及びSCTPを使用して、アーキテクチャのファブリックを超えるメッセージの送受信が可能になる。
【0017】
図1は、一実施形態に従った、アーキテクチャの様々なコンポーネント及びインターコネクトを含むシステム100の高レベルビューを示している。アーキテクチャの中心機能は、ファブリック102であり、ファブリック102は、アーキテクチャのリンク及びスイッチを介して相互接続されるHFI及びゲートウェイの集合を含む。図1に示されるように、ファブリック102のコンポーネントは、それぞれのディスクリート型シングルノードプラットフォーム106により各々ホストされる複数のHFI104(1つが図示されている)と、仮想プラットフォーム110によりホストされるHFI108と、マルチノードプラットフォーム116のそれぞれのノード1141及び114nによりホストされるHFI1121及び112nと、集積型シングルノードプラットフォーム120のHFI1181及び118nと、高ラディックススイッチ(high radix switch)122と、スイッチ124及び126と、1以上のファブリックマネージャ128と、ゲートウェイ130と、リンク132、134、1361、136n、138、1401、140n、142、144、及び148、並びに、クラウド150として集合的に図示されているさらなるリンク及びスイッチと、を含む。
【0018】
上述したように、スイッチは、レイヤ2デバイスであり、ファブリックにおいてパケット転送メカニズムとして動作する。スイッチは、ファブリック管理ソフトウェアにより、集中プロビジョニング及び集中管理され、各スイッチは、管理トランザクションに応答するための管理エージェントを含む。集中プロビジョニングとは、適応的ルーティングのための代替ルート等、転送テーブルが、特定のファブリックトポロジ及び転送機能を実装するためにファブリック管理ソフトウェアによりプログラムされることを意味する。スイッチは、適応的ルーティング及び負荷バランシング等のQoS機能を実行する役割を担い、また、輻輳管理機能を実装している。
【0019】
図2は、ファブリックリンクを介してデータを転送するためのアーキテクチャのレイヤを示している。本レイヤは、物理(PHY)レイヤ、リンク転送サブレイヤ、リンクファブリックサブレイヤ、及びトランスポートレイヤを含む。図2の左側には、OSI参照モデルと本レイヤとの対応が示されており、本PHYレイヤは、レイヤ1(PHYレイヤ)に対応し、本リンク転送サブレイヤ及び本リンクファブリックサブレイヤは集合的に、レイヤ2(リンクレイヤ)に対応し、本トランスポートレイヤは、レイヤ4(トランスポートレイヤ)に対応する。
【0020】
アーキテクチャにおいて、信号が、物理レイヤにおいて一緒にグループ化され、制御可能なように振る舞いモノリシックエンティティ(monolithic entity)としてレポートされるポートに向けられる。ポートは、1以上の物理レーンを含み、各レーンは、物理的伝送媒体において実装される2つの差動ペア又はファイバからなり、2つの差動ペア又はファイバのそれぞれは、通信の各方向のためのものである。ポートを含むレーンの数は、実装に依存する。しかしながら、リンク転送サブレイヤのアーキテクチャは、有限のセットのポート幅をサポートする。特定のポート幅は、基本ポート幅としてサポートされ、ケーブル及びチップ設計の共通ターゲットを可能にする。ポート幅は、1x、4x、8x、12x、及び16xを含み、「x」は、物理レーンの数を特定する。いくつかの状況下では、不良レーンの検出等、リンクは、低減されたレーン幅で動作し得る。リンク転送サブレイヤは、物理レイヤとリンクファブリックサブレイヤとの間のインタフェースとして機能する。(リンクファブリックサブレイヤにおける)リンクファブリックパケットは、64ビットフロー制御デジット(フリット、FLIT、Flit等と呼ばれ、フロー制御デジットの適切なコントラクション(contraction)である)に分割される。図3は、バンドル302にグループ化された複数のフリット300の一例を示している。各フリット300は、8バイトのデータからなる64データビットを含む。
【0021】
リンク転送サブレイヤは、複数のレーンを、リンクを介して、フリットと、フリットに関連付けられたクレジットリターン情報と、を高信頼性で転送することができる群(team)に形成する。これは、リンクファブリックサブレイヤに関連付けられるリンク転送パケット(LTP:link transfer packet)と呼ばれる1056ビットバンドルを用いて実現される。図3はまた、16個のフリットのデータを含むLTPのデータ部分を示している。加えて、LTPは、フリットタイプ情報、CRCデータ、及びオプションデータ(図3には示されていない)を含む。LTPの例が、様々な図(例えば、図5〜図11)に示されており、以下でさらに詳細に説明される。
【0022】
ファブリックパケットは、64ビットフリットと、フリット毎のフリットタイプビットと、を含む。ファブリックパケットの最初のデータフリットは、ヘッドフリット(head flit)と呼ばれる。ファブリックパケットの最後のデータフリットは、テールフリット(tail flit)と呼ばれる。ファブリックパケット内の任意の他のデータフリットは、ボディフリット(body flit)と呼ばれる。ファブリックパケット400の一例が、図4に示されている。
【0023】
ボディフリットと他のフリットタイプとを区別するために、フリットタイプビットが、各フリットに提供される。一実施形態において、ボディフリットは、フリットタイプビットが1に設定されて符号化され、64ビットのデータを含む。全ての他のフリットは、フリットタイプビットが0に設定されてマークされる。ヘッドフリットは、フリット[63]が1に設定されて符号化される。全ての他の(ボディフリットではない)フリットは、フリット[63]が0に設定されて符号化される。テールフリットは、フリット[62]が1に設定されて符号化される。全ての他の(ボディフリット/ヘッドフリットではない)フリットは、フリット[62]が0に設定されて符号化される。フリットの符号化が、以下の表1にまとめられている。
【0024】
【表1】
【0025】
制御フリットが、表2にまとめられている。リンク転送レイヤのみにより使用される7つの制御フリット(LT制御フリット)は、ヌルLTPにおいて送信される。残りの制御フリットは、2つのグループに分けられる。ファブリックパケット(FP)フリットは、HeadBadPkt制御フリット、BodyBadPkt制御フリット、及びTailBadPkt制御フリットに加えて、通常パケットのヘッドフリット、ボディフリット、及びテールフリットを含む。リンクファブリック(LF)コマンドフリットは、Idleフリット、VLMrkrフリット、及びCrdtRetフリットを含む。FPフリット及びLFコマンドフリットは、リンクを介する伝送のために、高信頼性LTP(reliable LTP)内に一緒に混合される。
【0026】
【表2】
【0027】
アイドルコマンドフリットは、データストリームに挿入するファブリックパケットフリットが存在しない場合に、リンクファブリックレイヤにより使用される。データパスの全幅が、アイドルフリットを含む場合、リンク転送レイヤは、入力バッファに挿入されるフリットストリームからそれらアイドルフリットを除去する。データパスが、アイドルフリット及び非アイドルフリットの両方を含む場合、アイドルフリットは除去されない。これは、リンク転送レイヤが、リンクの反対側(far end)のリンクファブリックレイヤに同一のデータパス構成を提示するために実施される。リンク転送レイヤが、リンクファブリックレイヤからの仕掛かり中の(pending)フリットを有さない場合、リンク転送レイヤは、オリジナルフリットがリンクを介して送信されるように、アイドルフリットを挿入する。オリジナルフリットとは、リプレイバッファから送信される再送信フリット又はリプレイフリットを含むフリットではない、リンクを介して初めて送信されるフリットである。
【0028】
リンク転送パケットは、リンクを介して伝送される16個のフリットを保持する。再送信リクエストの欠如が、LTPがリンクピアにより無事に受信されたことを示すことを確実にするのに十分長い時間期間の間、高信頼性LTPが、リプレイバッファに保持される。リプレイバッファ位置ポインタが、送信機における各LTP(NxtTxLTP)及び受受信機における各LTP(NxtRxLTP)に対して保持されるが、LTPの一部として交換されるものではない。伝送エラーが受信機により検出された場合、受信機は、NxtRxLTPリプレイバッファ位置ポインタを含むRetryReqLTPを送信機に送信する。RetryReqLTPを受信したことに応答して、リプレイバッファ内のLTPが、RetryReqLTP(ピアNxtRxLTP)リプレイバッファ位置で始まり、書き込まれた最後のリプレイバッファ位置(NxtWrLTP−1)で終わる元の順番で再送信される。ヌルLTPは、リプレイバッファに保持されず、再送信されない。
【0029】
リンクファブリックコマンドフリットは、LTP内で、FPフリットと混合され得る。しかしながら、LFコマンドフリットは、ファブリックパケットの一部ではない。LFコマンドフリットは、リンクの一方の端におけるリンクファブリックサブレイヤから、リンクの他方の端におけるリンクファブリックサブレイヤに制御情報を伝える。
【0030】
一実施形態において、標準型検出LTP(standard detection LTP)、14ビットCRC LTP、及び拡張型検出LTP(enhanced detection LTP)を含む3つのLTPフォーマットが存在する。標準型検出LTPの一実施形態が、図5に示されている。16個のフリットに加えて、各標準型検出LTPは、LTPコンテンツをカバーする16ビットCRCを有する。例示の目的のために、図5におけるフリットは、ビット64がフリットタイプビットである65ビットとして示されている。
【0031】
14ビットCRC LTPの一実施形態が、図6に示されている。16個のフリットに加えて、各14ビットCRC LTPは、LTPコンテンツをカバーする14ビットCRC及び2ビットクレジットサイドバンドチャネルを有する。フロー制御クレジットが、特別なLFコマンドフリット又はLTPクレジットサイドバンドチャネルのいずれかの中に含まれて、LTPにおいて送信される。
【0032】
標準型検出LTPに加えて、リンクはまた、16個のフリット及び4つの12ビットCRCフィールドを有するオプションの拡張型検出LTPをサポートすることができる。図7は、拡張型検出LTPの一実施形態のフォーマットを示している。4つのCRCフィールドの各々は、16個のフリット全てをカバーする。4つのCRCのうちいずれかが不良である場合、LTPが再送信される。4つの12ビットCRCについて、2つのCRC計算オプションが存在する。第1の計算オプション(48bオーバーラッピング)は、4つのオーバーラッピング計算(overlapping calculation)を使用し、各計算は、LTP内の全ビットをカバーする。第2の計算オプション(レーン毎の12b−16b CRC)は、4つの非オーバーラッピング計算(non-overlapping calculation)を使用し、各計算は、4つのレーンのうちの1つのレーン上でフローする全ビットに限定される。
【0033】
上述したように、リンク転送レイヤにより使用されるLT制御フリットは、ヌルLTPにおいて送信される。ヌルLTPは、リプレイバッファ内のスペースを消費せず、再送信されない。ヌルLTPは、の表2にまとめられているLT制御フリットのうちの1つを用いて識別される。ヌルLTPタイプのほとんどは、シーケンシャルペアで送信され、ペアのうちの少なくとも1つがエラーなくリンクピアにより受信されること又はペアの両方がエラーを有する場合にRetrainRetryReqが自動的に生成されることのいずれかを確実にする。標準型検出ヌルLTPの一例が、図8に示されている。
【0034】
標準型検出ヌルLTPは、1つの識別制御フリット、975の予約ビット、及び標準型検出16ビットCRCフィールドを含む。拡張型検出ヌルLTPは、1つの識別制御フリット、975の予約ビット、及び4つの拡張型検出12ビットCRCフィールドを含む。14ビットCRCが使用される場合、2サイドバンドビットは、ヌルLTPにおいて無視される。
【0035】
4つのレーンを有するリンクに接続されている4x可能ポート及び8x可能ポートの両方について、LTPが、1度に1つずつ、リンクを介して送信される。このことが、図9a及び図9bのそれぞれにおいて、標準型検出LTP及び拡張型検出LTPの両方の観点で、リンクファブリックデータパスを用いて示されている(CRCフィールドはスケーリングされていないことに留意されたい)一方、対応する信号処理及び転送パスの実施形態が、図10に示されている。14ビットCRC LTPは、LCRC[15:0]フィールドが、LCRC[13:0]フィールドとC[1:0]フィールドとの組合せにより置換されることを除いて、図8に示される標準型検出LTPに類似している。フリット送信順序は、フリット0で始まりフリット15で終わる。
【0036】
一実施形態において、各レーンを介するデータの物理的伝送では、シリアル2レベルビット非ゼロ復帰(NRZ)符号化ビットパターンが使用され、各レーンに対応するこのデータは、復号され、デシリアライズされ、1サイクル当たり1レーン当たり4バイトにグループ化される。これは、1サイクル当たり2個のフリットを含む16バイトの転送をもたらす。例えば、図9a及び図10の例示は、2フリット幅の実装固有のデータパスを仮定しており、この仮定の下では、フリット0及びフリット1が同時に伝送され、フリット2及びフリット3が同時に伝送される、等である。LCRCは、リンク転送サブレイヤにより計算される。
【0037】
図11は、8つのレーンを介してデータが伝送される8xデータパスをサポートするために2つの4レーンリンクがグループ化されるLTP送信スキームを示している。図示されるように、このスキームの下では、2つのLTPからの4つのフリットが、リンクファブリックサブレイヤとリンク転送サブレイヤとの間のインタフェースにおいて、並列に処理される。
【0038】
上述したように、アーキテクチャは、データ転送をサポートするために、3つのレベルのデータユニット粒度、すなわち、ファブリックパケット、フリット、及びリンク転送パケットを使用する。リンク転送レイヤにおける送信のユニットはLTPである。図示されるように、各LTPは、名目上16フリット長であるが、上述したように、LTPの実際のサイズは、使用される特定のCRCスキームに応じて変わり得るものであり、16フリット長を有するとしてLTPを参照することは、CRCビット及び16個のビット65を除くLTPに含まれる64ビットフリットのデータの数に対応する。
【0039】
4つの物理レーンを有するリンクの一実施形態の(「PHY」とも呼ばれる)物理レイヤの構造が、図12に示されている。PHYは、リンクインターコネクトの物理構造を規定し、コンポーネントA及びコンポーネントBにより示されるような2つのリンクピアの間の特定のリンク上における信号のオペレーションの詳細を扱う役割を担う。このレイヤは、パラレルレーンを介する情報の各ビットを送受信する際に伴う電気レベル、タイミング面、及び論理問題を含む、信号線上のデータ転送を管理する。図12に示されるように、各インターコネクトリンクの物理的接続は、各方向のレーン0〜3を含む、信号の4つの差動ペア1200から構成される。各ポートは、2つのピアコンポーネント間の接続を完了するための2つの一方向リンクからなるリンクペアをサポートする。これは、双方向の同時のトラフィックをサポートする。例示及び理解のしやすさのために、図10に示されるリンクの「スイズル(swizzle)」は、図12には示されていない。しかしながら、いくつかの実施形態においては、送信レーン及び受信レーンは、スイズルされることを理解されたい。
【0040】
リンクポートを有するコンポーネントは、図12に示されるように、一方向ポイントツーポイントリンクのペアを用いて通信し、リンクピアとして定められる。各ポートは、送信(Tx)リンクインタフェース及び受信(Rx)リンクインタフェースを含む。図示される例において、コンポーネントAは、コンポーネントBのRxポート1204に接続されるTxポート1202を有する。一方、コンポーネントBは、コンポーネントAのRxポート1208に接続されるTxポート1206を有する。一方の一方向リンクは、コンポーネントAからコンポーネントBに伝送するものである、他方のリンクは、コンポーネントBからコンポーネントAに伝送するものである。「送信」リンク及び「受信」リンクは、どのコンポーネントポートがデータを送信し、どのコンポーネントポートがデータを受信するかに関して定められる。図12に示される構成において、コンポーネントAの送信リンクは、コンポーネントAのTxポート1202からコンポーネントBのRxポート1204にデータを送信する。これと同じコンポーネントAの送信リンクが、コンポーネントBの受信リンクである。前述したように、リンクポート間におけるデータの転送のための基本ユニットがLTPである。
【0041】
各LTPは、送信ポートと、特定のリンクの反対側の受信ポートと、により定められる特定のリンクを介する一方向の送信に固有である。LTPは、単一のリンク転送のライフタイム(lifetime)を有し、LTPは、適用可能なVLバッファからフリットをプルし、フリットを1度に16個組み立ててそれぞれのLTPにすることにより、動的に生成される。LTP送信ストリーム1210及び1212により示されるように、LTPは、図4を参照して上述したように、ヘッドフリットビット及びテールフリットビットにより表される、個々のLTPの最初のフリット及び最後のフリットを含むフリットのストリームとして送信される。
【0042】
上述したように、アーキテクチャは、0バイトから10240バイトのサイズのレイヤ4ペイロードを有する、宛先にルーティングされるファブリックパケット(すなわちFP)を主として含むパケット配信メカニズムを規定する。これは、単純なULPアクノレッジメントから、カプセル化されたイーサネット(登録商標)ジャンボフレームに至る範囲のメッセージの送信に対する効果的なサポートを提供する。ファブリックパケットは、HFIとの間の入出力のためのペイロードの論理ユニットを表す。ファブリックパケットは、ファブリック内でエンドツーエンドであるライフタイムを有するので、そのように命名されている。より詳細には、ファブリックパケットのライフタイムは、FPの送信元アドレス及び宛先アドレスにより定められるファブリックエンドポイントの間でFPコンテンツを転送するのに要する時間である。FPの各転送パスは、少なくとも1つのリンクを介する転送を含み、転送パスが1以上のスイッチをまたがる場合には、複数のリンクを介する転送を含むこともある。
【0043】
FPとLTPとを組み合わせたフリットの使用は、アーキテクチャに固有であるデータ転送機能を円滑にする。詳細には、FP、フリット、及びLTPの分離は、仮想レーンの使用に加えて、様々な態様のQoS及びファブリックのロバスト性をサポートする。
【0044】
上述したように、フリットは、単一では伝送されず、代わりに、16個のフリットのグループが、リンク転送パケットにパックされる(まとめられる(バンドルされる、束にされる))。これは、フリットが、共通リンクCRCを共有することを可能にする。LTP内のフリットは、多くの異なるファブリックパケットから生じることがあり、これは、他のファブリックと比較すると、リンクプロトコルにいくつかの興味深い特徴を与える。効果的なパケットプリエンプション及びインターリービングメカニズムを使用することにより、アーキテクチャは、異なるストリームに対するデータ転送のインターリービング、行頭ブロッキングの影響の実質的な除去、さらには、大きな単一パケットが物理リンク上で物理的に転送されるブロッキングの影響の実質的な除去をサポートする。ファブリックパケットとフリットとLTPとの間の関係についての例示が、図15及び図16に示されており、これらの図についてのさらなる説明が、以下に記載される。
【0045】
アーキテクチャは、クレジットベースフロー制御を使用して、リンクの受信機側のバッファリソースを管理し、送信機がフリットを送信し得る時間を制御する。このアプローチの下では、ファブリックポートがフリットを送信するために、受信ポートにおいて必要とされるバッファスペースのために利用可能な十分なフロー制御クレジットを必要とする。一実施形態において、受信機は、リンク上でサポートされる仮想レーン(VL)のために受信バッファ群の単一のプールを提供する。バッファプールの割り当ては、リンクの送信機側のロジックにより管理される。サポートされる各VLに対して、専用バッファが割り当てられる。加えて、送信機は、このスペースの一部を、VL間で動的に割り当てられる共用プールとして管理することができる。クレジットベースフロー制御とは、リンク上のデータ転送が、厳格に管理されることを意味する。未許可のデータ転送は存在せず、これはまた、ファブリックが、いわゆる「無損失」ファブリックであることを意味する。この場合、無損失とは、単に、通常のオペレーション中、フリット、したがって、パケットが、輻輳に起因して決してドロップされないことを意味する。
【0046】
フロー制御クレジット等の制御情報は、リンクファブリック(LF)コマンドフリット及びリンク転送(LT)制御フリットにおいて伝送される。LFコマンドフリット及びLT制御フリットは、任意の時点で、送信機のフリットストリームに挿入されてよい。加えて、いくつかのLTPフォーマットにおけるサイドバンド情報を使用して、ほんの少しのオーバーヘッドを伴うだけでクレジットを転送することができる。LFコマンドフリット及びLT制御フリットは、リンク送信機により生成され、リンク受信機により使用される。
【0047】
アーキテクチャは、データインテグリティを確実にするために、リンク転送パケット及びファブリックパケットのCRCを含む。アーキテクチャはまた、正しく受信されなかったLTPのために、リンクレベルリトライを提供する。LTPリトライは、リンクの実効ビットエラー率を著しく改善させ、物理的BERのわずかな劣化と引き換えに、より低い電力消費を提供することができるPHY方策の使用を可能にする。許容可能なシステムレベルエラー率を維持するために、ファブリック内の多数のリンクがはるかに良いリンク当たりBER特性を必要とする大型ファブリックにとっても、LTPリトライは有用である。
【0048】
インターリービング、並びに、プリエンプション及びインターリービング
L2リンクレイヤは、異なるパケットからのフリットが、それらパケットが異なるVLにおいて存在する限りは、リンクを介して送信されるときにインターリーブされることを可能にする。インターリービングの1つの動機づけは、所与のリンクの使用を最大化することである。どのような理由であれ、送信パケットが、バブル(bubble)により遮断される場合、第2のパケットが、その後、アイドル状態にされることなく、チャネルにインターリーブされ得る。プリエンプションと呼ばれるインターリービングの第2の理由は、より高優先度のパケットを、転送されているより低優先度のパケットに割り込ませて、より高優先度のパケットの遅延を低減させることである。インターリービング下では、ファブリックパケットのフリットの全て又は一部が、リンクを介して伝送されるフリットのストリームにおいて、他のFPからのフリットによりインターリーブされる。送信機は、ポートの出力キューにおいて送信するのに利用可能なFPの中から、送信のためのフリットを選択する。一実施形態において、単一のVLにおけるFPは、順番に配信されるので、仮想レーンにおいて、1つのパケットからのフリットの全てが、(そのVLにおける)後続のパケットからの任意のパケットが送信される前に、送信される。異なるVLにわたっては、指定された順番は存在しないので、異なるVLにおけるパケットからのフリットが、フリットストリーム内で(加えて、フリットの順番が各VLにおいて維持される限りは、所与のLTP内で)任意にインターリーブされ得る。いくつかの送信機実装は、パケット間のインターリービングの量を制限するよう選択することができる。
【0049】
プリエンプション下では、より高優先度のレベルを有するファブリックパケットからのフリットが、より低優先度のレベルを有するFPからのフリットをプリエンプトする(preempt)。一実施形態において、各仮想レーンは、それぞれの優先度レベルに関連付けられる。送信機は、より低優先度のVLからのフリットの前に、より高優先度のVLからのフリットをリンクLTPに挿入するよう構成される。送信機は、単一のフリットよりも大きな、境界部分におけるより高優先度のフリットを挿入するよう選択することができる。さらに、送信機は、同じ優先度のVLからのフリットをインターリーブすることもできるし、同じ優先度の異なるVLにおける異なるパケットからのフリットを送信する前に、1つのパケットからのフリットの全てをリンクに送出する(inject)こともできる。リンク上の受信機は、キューに挿入するため、及び、(スイッチ内の受信機のために)次のホップに転送するために、到来するフリットストリームをVL別に分離する。一般に、少なくとも所与のリンクに関して、受信機実装は、送信機により発生され得るインターリービングのフルスコープ(full scope)をサポートする。いくつかの実施形態において、インターリービングの同様のスコープが、ファブリックにわたって実装される。任意的に、異なるリンクが、異なるレベルのインターリービングをサポートしてもよい。
【0050】
パケットプリエンプションの諸態様に従うと、第1の優先度レベル(例えば、高優先度)を有するVLにおけるパケットBからのフリットは、より低優先度のVL(すなわち、第1の優先度レベルよりも低い優先度レベルを有するVL)におけるパケットAからのフリットのストリームをプリエンプトすることができる。この場合、パケットBからのヘッドフリットは、パケットAのヘッドフリット及びパケットAからの0以上のボディフリットの後に続くことができる。このヘッドフリットは、新たなパケットが開始しており、受信機がVL識別子を判別するためにL2ヘッダ内のSCフィールドを探すことになることを示す。0以上のボディフリットが、パケットBのヘッドフリットの後に続き、最後にパケットBを終了させるテールフリットが続く。パケットBの完了後、パケットAの送信が、0以上のフリットにより再開され、その後にテールフリットが続く。
【0051】
パケットは、連続的なより高優先度のパケット(連続的な高優先度のVLにおけるパケット)によりプリエンプトされるので、パケットプリエンプションはネスト化され得る。一実施形態において、これは、リストの先頭にアクティブパケットを有するリンク型リスト(linked list)としてモデル化される。現在のパケットがプリエンプトされるときに、新たなパケットがリストの先頭に追加される。プリエンプトしたパケットが終了するときに、そのパケットがリストから除去され、再開すべき次の予想パケットが、リストの新たな先頭になる。リストに1度に保持できるパケットの最大数は、サポートされるVLの数に等しい。
【0052】
先の説明では、プリエンプションを説明するために優先度レベルが使用されたが、より高優先度のパケットに対してのみプリエンプションが使用される必要はない。送信のために利用可能な現在のパケットからのフリットが存在しない(これは「バブル」をもたらす)が、より低優先度のパケットから利用可能なヘッドフリットが存在する場合があり得る。より低優先度のパケットからのヘッドフリット及びそれに続くボディフリットが送信され得る。新たなヘッドフリットは、そのパケットをリストの先頭に追加させることになり、受信機は、新たなパケットを正確に追跡するようになる。
【0053】
第1のパケットのテールフリットの前に第2のパケットのヘッドフリットが送信される場合、第1のパケットは、第2のパケットによりインターリーブされるとみなされる。インターリービングの最も単純な場合において、第2のパケットに属する割り込んだヘッドフリットの後に第2のパケットのテールフリットまで全てのボディフリットが続き、その後、第1のパケットの残りのパケットフリットが再開する。この単純な場合が、図13に図式的に示されている。
【0054】
フリットのグループは、フリットストリーム内のフリットの順番(最上部から最下部)に対応する。グループ内の最初のフリットは、VL0とラベル付けされている仮想レーン0を介して転送されているファブリックパケットのヘッドフリットである。VL0ヘッドフリットは、このFPが4フリット長(1つのヘッドフリット、2つのボディフリット、及び1つのテールフリット)であることを識別する。2番目のフリットは、FP VL0の最初のボディフリットである。次のフリットは、VL1ヘッドフリットとラベル付けされており、これは、VL1とラベル付けされている仮想レーン1を介して送信されるFPのヘッドフリットである。VL1ヘッドフリットもまた、このFPが4フリット長であることを識別する。一アプローチ下では、新たなVLからのFPのフリットが、現在のVLからのフリットをインターリーブすべきときに、新たなVLが、リンクを介してフリットを送信するためのアクティブ仮想レーンになる。これが、VL1のヘッドフリットをフリットストリームに追加することにより示される。結果として、FP VL1は、FP VL0をインターリーブし、これが、1つのVL1ヘッドフリット、2つのVL1ボディフリット、及び1つのVL1テールフリットを最初に追加することにより示される。VL1テールフリットは、FP VL1のフリットの最後を識別し、また、FP VL1のインターリービングを完了させる。次いで、ロジックは、VL1インターリーブの前のFPフリットに戻り、残りのFP VL0ボディフリット及びテールフリットがリンクを介して送出されることをもたらす。
【0055】
リンクファブリックサブレイヤが、複数のファブリックパケットからのフリットのインターリービングをどのようにサポートするかをさらに示すために、図14が、プッシュ及びポップインターリービング(push and pop interleaving)の一例を示している。リンクファブリックサブレイヤにおけるインターリービングは、プッシュ及びポップスキームを利用し、このスキームでは、割り込んだヘッドフリットは、割り込まれているVLのプッシュと、テールフリットに遭遇したときのスタックへのVLのポップと、を生じさせる。スタックがどのように動作するかを可視化するために、現在の書類に取り組むために使用されるデスク領域とともに、書類箱内の書類の層を想像されたい。プッシュ及びポップインターリービングのコンテキストにおいて、書類の層は、「スタック」と呼ばれ、デスク領域は、どのフリットからのアクティブ仮想レーンを識別するデータが記憶されているアクティブVLレジスタに対応する。送信中のVLが、インターリーブに応じて切り替えられるときに、インターリーブしたVLは、新たなアクティブVLになる一方で、前のアクティブVLは、デスクから層の最上部に押し出される(プッシュされる)(pushed)、したがって、「プッシュ」という用語が使用される。FPのVLフリットが完了すると(例えば、VL FPのテールフリットがLTP送信FIFOに追加されたとき)、そのVLが、デスク領域から除去されて、層の最上部のVLが、層からデスク領域に「置かれ(ポップされ)(popped)」、したがって、新たなアクティブVLになる。VLのこのプッシュ及びポップは、ネスト化されて続き得る。n個のVLをサポートするリンクファブリックサブレイヤでは、同時に割り込まれ得るパケットの最大数は、(n−1)個である。
【0056】
図14の例において、フリットの順番リスト1400は、様々なVLに記憶されているファブリックパケットからのフリットが、フリットの送信ストリームに追加される順番を表している(あるいは、任意的に、受信ポートにおいて受信されるフリットストリーム内のフリットの順番を示している)。以下の説明は、フリットが、LTP(すなわち、ファブリックに「送出される」LTP)にまとめられるアウトバウンドストリームに追加される、フリットストリームの生成に関する。アクティブVLを識別するしるし(indicia)が、アクティブVLレジスタ1402内において様々な状態で示される。初期状態下では、VL0に対応するしるしが、アクティブVLレジスタ1402に記憶されており、これは、仮想レーンVL0のためにバッファされている次のファブリックパケット(VL0 FPと呼ぶ)からフリットが追加されることを示す。したがって、VL0 FPの最初の2つのフリットが、フリット送信ストリームに追加され、その時点において、VL1がVL0をインターリーブすることを開始するインターリービングイベントが検出される。このインターリービングオペレーションを実現するために、アクティブVLレジスタ内で、VL1のためのしるしが、VL0に取って代わり、VL0をスタックにプッシュする。これは、アクティブ仮想レーンをVL1に切り替え、VL1 FPのヘッドフリット及び最初のボディフリットをフリット送信ストリームに追加させる。次いで、第2のインターリービングイベントに応答して、VL2がVL1をインターリーブすることが開始され、VL2がアクティブLVレジスタ1402にロードされ、VL1がスタックにプッシュされる。これは、FP VL2の全ての3つのフリットをフリット送信ストリームに追加することをもたらす。FP VL2テールフリットを追加して、VL2がVL1をインターリーブすることを完了すると、VL1が、スタックからアクティブVLレジスタ1402にポップされる。VL1の別のボディフリットが追加された後、VL7がVL1をインターリーブすることを開始するが、これは、VL7のためのしるしをアクティブVLレジスタ1402に追加し、VL1をスタックに再度プッシュすることにより実行される。VL7 FP全体に対応する3つのフリットがフリット送信ストリームに追加され、VL2がVL1をインターリーブすることが完了し、VL1がスタックからアクティブVLレジスタ1402に再度ポップされる。VL1 FPのテールフリットが追加され、VL1のインターリービングが完了し、VL0がスタックからアクティブVLレジスタ1402にポップされる。これは、VL0をアクティブVLに戻し、VL0 FPの最後の2つのパケットが、LTP送信FIFOに追加される。
【0057】
割り込まれている暗示的VLに戻るためのポップに依拠する代わりに、リンクファブリックサブレイヤは、デバイスが、「VLマーカ」と呼ばれる特別なLFコマンドフリットを使用して、どのVLをリストの先頭に移動させるかを明示的に指定することを可能にする。VLマーカの使用は、この追加のマーカフリットに起因して、少々効率的ではないが、インターリービングにさらなる柔軟性を提供する。図15における図が、このコンセプトを示している。
【0058】
実際、VLマーカは、VLが、デフォルトのスタック順番からプルされることを可能にする、あるいは、スタックに存在しない新たなVLがスタックの先頭に移動されることを可能にする。スタックに保たれるVLは、その後、プッシュ及びポップルールに従い続ける。これら2つの異なるメカニズムの使用は、混合させることができ、排他的ではない。特定のVLがスタックからプルされ、その後別のVLによりインターリーブされる場合、その特定のスタックは、スタックに再度プッシュされる。
【0059】
図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からスタックにプッシュする。次いで、アクティブ仮想レーンをVL1に再度切り替えるために、第2のVLマーカ1504がフリット送信ストリーム1500に追加される。これは、VL7をスタックにプッシュし、VL1をアクティブVLレジスタ1402にプルする。VL1 FPテールフリットが追加され、VL1のインターリービングが完了すると、VL7が、スタックからアクティブVLレジスタ1402にポップされる。次いで、VL7 FPの最後の2つのフリットが追加される。
【0060】
図14及び図15に示されるインターリービングの例は、プッシュ及びポップインターリービングスキームとVLマーカインターリービングスキームとのより容易な理解のために、例示の目的で、誇張したレベルのインターリービングを示している。実際のシステムでは、ほとんどのインターリービングは、(A)プリエンプション及び(B)パケットストリームにおけるバブル、という2つのタイプのインターリービングイベントのうちの1つから生じる。プリエンプティブインターリービングのさらに詳細な例、及び、プリエンプティブインターリービングと、バブルイベントから生じるインターリービングと、の組合せのさらに詳細な例が、図16及び図17にそれぞれ示されている。
【0061】
上述したように、プリエンプション下では、より高優先度の仮想レーンにおけるファブリックパケットのコンテンツ(フリット)は、より低優先度のVLにおけるFPのフリットのフリット送信ストリームへの追加をプリエンプトすることができる。HFI、ゲートウェイ、又は他のタイプのファブリックエンドポイントにおいて、ファブリックパケットが組み立てられる元となるデータは、一般に、ファブリックパケットにカプセル化されるイーサネット(登録商標)フレーム等の何らかの他のタイプのフォーマットで最初にバッファされる。また、ファブリックパケットは、IPパケット及びUDPパケット等のレイヤ3パケットがどのように生成されるかと同様、ネットワーキングスタックの一部として作成され得る可能性が高い。スイッチにおいて、受信コンテンツ及び送信コンテンツの両方は、どのフリットがどのFPに関連付けられているかと、どのスイッチポートを介してフリットが次のホップ又はエンドポイント宛先に送出されるべきかと、を判定するために使用されるさらなるメタデータを含んで、フリットにすでにフォーマット化されている。前述の観点から、図16及び図17は、FP下のFPコンテンツのフリットフォーマット化とともに、全体としてのファブリックパケットを示している。
【0062】
各FPのフリットコンテンツは、FPが割り当てられる仮想レーン用に割り当てられたバッファに一時的に記憶される。様々なバッファ構成の実施形態下では、別々のバッファが、それぞれのVLに割り当てられることもあるし、いくつかのVLが、バッファスペースを共用することもあるし、VLバッファ割り当ての第1の部分がVLに専用である一方、別の部分が共用バッファスペースであるの両者の組合せであることもある。
【0063】
仮想レーンを使用する基本的な態様は、所与の仮想レーンにおけるコンテンツが、順番に保たれることである。これは、所与の仮想レーンに関して、1つのFPは、別のFPを通り越すことができないことを意味する。さらに、FPのフリットはまた、フリットが元々生成された順番に保たれる。これと同時に、異なる仮想レーンにおけるコンテンツは、他の仮想レーンに対して順番に保たれる必要はない。これは、より高優先度のトラフィックが、より低優先度のトラフィックをプリエンプトすることを可能にする。仮想レーンはまた、ルーティングデッドロック及びプロトコルデッドロックを除去するためにも、及び、トラフィッククラス間の行頭ブロッキングを回避するためにも使用される。
【0064】
図16に示されるように、それぞれの仮想レーンVL1、VL2、及びVL3用の3つのバッファ1602、1604、及び1606が存在する。これら仮想レーンの各々にはまた、それぞれの優先度レベルが割り当てられる、すなわち、VL1に対しては低優先度が割り当てられ、VL2に対しては中間優先度が割り当てられ、VL3に対しては高優先度が割り当てられる。アービタ(調停器、図示せず)を使用して、フリットがLTP2、3、4、5、6、及び7にまとめられるフリット送信ストリーム1608に追加すべきフリットをどのVLバッファからプルするかを決定する。図16は、図示されるウィンドウ時間フレームにわたるVL1、VL2、及びVL3のVLのリンクトラフィックの処理を示す「スライディングウィンドウ」図である。一実施形態において、VLバッファは、FIFO(先入れ先出し)バッファとして実装され、各FIFOスロットは、1フリットを記憶するサイズである。
【0065】
上述したように、プリエンプティブインターリービングの一態様下では、より高優先度のVLに割り当てられたFPコンテンツは、相対的により低優先度のVLに割り当てられたFPコンテンツをプリエンプトすることができる。一般に、複数のFPに対応するFPコンテンツが、(ファブリックに送出される)それぞれのVL退出バッファにバッファされている場合、最高優先度を有するVLに割り当てられたFPコンテンツが、フリット送信ストリームに追加されることになる。しかしながら、これは絶対的ルールではないことに留意されたい。なぜならば、プリエンプションが生じない状況もあり得るからである。これと同時に、FPコンテンツが、1つの所与のVL又は同じ優先度を有する複数のVLに対してのみ利用可能である場合、そのFPコンテンツが、(バッファされているいかなるFPコンテンツも現在は有していない)他のVLの優先度レベルに関係なく、フリット送信ストリームに追加されることになる。この状況が、以下のように、図16に示されている。
【0066】
時間T1において、パケット1の少なくとも第1の部分が、VL1バッファ1602にバッファされ、送信のために準備される。アーキテクチャ下でのデータ転送のストリーミングの性質に起因して、フリットは、VLバッファにおいて受信され得る(VLバッファに追加され得る)とともに、(送信のために)VLバッファから除去され得る。さらに、フリットをVLバッファに追加すること及びフリットをVLバッファから除去することは、特にスイッチにおいて、いくらか非同期的であり得る。結果として、任意の所与の時点において、所与のVLバッファは、バッファされて送信される準備ができているコンテンツを有していることもあるし、有していないこともある。図16の例において、時間T1において、VL1バッファ1602だけが、送信される準備ができているフリットを含む一方、VL2バッファ1604及びVL3バッファ1606の両方は空である。FPパケットのフリットをフリット送信ストリームに追加するのを開始するために、少なくとも1以上のヘッドフリット(特定のFPフォーマットに依存する)は、VL FIFOバッファの先頭にある必要がある。(以下でさらに詳細に説明するように、一実施形態において、VLバッファは、循環FIFOとして実装され、このFIFOの先頭は、FIFOヘッドポインタにより特定される。)図16において、ヘッドフリット1610が、時間T1において、VL1バッファ1602の先頭にバッファされる。
【0067】
時間T1において、第1のグループのフリット1612が、フリット送信ストリーム1608のLTP2に追加され、フリット1612の最初の部分であるヘッドフリット1610が、時間T2において追加される。T1とT2との間の時間差は、アクティブVLがVL1バッファ1602に変更されることをアービタが認識するのに要する時間量と、フリットデータをバッファからフリット送信ストリームにコピーする時間量と、を表す。図16におけるT1とT2との間の時間差は、スケーリングされておらず、代わりに、FPデータがVLバッファに到達して送信のための準備がされた時間と、そのデータがフリット送信ストリームに実際に追加される時間と、の間のいくらかの有限の時間が存在することを示すために使用されている。
【0068】
時間T3において、ヘッドフリット1615で始まるパケット2の第1の部分が、VL2バッファ1604において受信される。VL2は、VL1よりも高い優先度を有するので、プリエンプションイベントが、アービタ(又は他のロジック、図示せず)により検出される。実装に応じて、プリエンプションイベントは、パケット2の1以上のヘッドフリットがVL2 FIFOバッファ1604の先頭に達した直後に検出されることもあるし、追加のインターリービングが、他のポートにバブルを生じさせることをもたらし、さらに多くのインターリービングをもたらすことがあるので、何らかのレベルのインターリービングの発生を減らすために、いくらかの遅延が存在することもある。例えば、フリット送信ストリームに追加されるフリットを有する現在のパケットが、ほんの少しのフリットしか残しておらず、プリエンプトするであろうパケットが大きい場合、ロジックは、現在のパケットのプリエンプションが生じないように、現在のパケットが完了するのを待つことができる。プリエンプションイベントに応答して、プッシュ及びポップインターリービングスキームを用いて、アクティブVLが、VL1からVL2に切り替わる。任意的に、VLマーカインターリービングが使用されてもよい。アクティブVLがVL1からVL2に切り替わったことに応じて、VL2のためのしるしが、アクティブVLレジスタにロードされ、VL1が、スタックにプッシュされる。時間T4において示されるように、第1のグループのフリット1616が、VL2 FIFOバッファ1604からプルされ、フリット送信ストリーム1608に追加される。これは、パケット1の送信のプリエンプションによるパケット2の選択をもたらすとともに、パケット1及びパケット2からのフリットのインターリービングをもたらす。
【0069】
時間T5において、ヘッドフリット1618で始まるパケット3の第1の部分が、VL3バッファ1606において受信される。VL3は、VL2よりも高い優先度を有するので、第2のプリエンプションイベントが、アービタ(又は他のロジック、図示せず)により検出される。これは、パケット2の送信がパケット3の送信によりプリエンプトされることをもたらし、これは、VL3のためのしるしをアクティブVLレジスタにロードして、VL2をスタックにプッシュすることにより実行される。図示されるように、時間T6において、パケット3のフリット1620の全てが、フリット送信ストリーム1608に追加されることが開始され、したがって、パケット2のフリットが、パケット3のフリットによりインターリーブされる。
【0070】
テールフリット1622をフリット送信ストリーム1608に追加することに関連して、アービタ(又は他のロジック)は、パケット3からのフリットの追加が完了したことを検出する。したがって、VL3が、アクティブVLレジスタから除去され、VL2が、スタックからアクティブVLレジスタにポップされ、VL2がアクティブVLに戻される。これは、パケット2の残りのフリット1624が、フリット送信ストリーム1608に追加されることをもたらす。この追加は、時間T7において始まり、時間T8において終わる。時間T8において、テールフリット1626が追加され、したがって、パケット2が完了したことが検出される。これは、VL1が、スタックからアクティブVLレジスタにポップされ、VL1が、アクティブVLとしてVL2に取って代わることをもたらす。次いで、パケット1の残りのフリット1628が、フリット送信ストリーム1608に追加され、時間T9において、テールフリット1630で完了する。次いで、次のファブリックパケットのヘッドフリットが、LTP7の最後のフリットとして追加される(次のファブリックパケットは、簡潔さのために図示されていない)。
【0071】
図17は、バブルインターリービングイベントと、その後に続くプリエンプションインターリービングイベントと、を示している。ファブリックパケットのフリットが、複数のホップを含むルーティングパスを経由する場合、そのフリットの一部は、1以上のスイッチにおいてプリエンプトされることがある。これは、所与のFPのフリットストリームの分断をもたらす。そのような分断されたフリットストリームが、受信ポートにおいて受信されたとき、プリエンプションの前にフリットの一部が送信された時間と、プリエンプションの後にフリットの一部が送信された時間と、の間にはギャップが存在する。これが「バブル」をもたらす。このバブルの例に加えて、バブルはまた、様々な他の理由で生じ得る。このようなバブルの検出に応じて、バブルを伴うFPと同じ優先度レベルを有するFP又はバブルを伴うFPよりも低い優先度レベルを有するFPからのフリットとのインターリービングが実施され得る。
【0072】
図16の例と同様、時間T1において、ヘッドフリット1700を含むパケット1の少なくとも第1の部分が、VL1 FIFOバッファ1602において受信され、時間T2において、フリット1702の第1の部分が、フリット送信ストリーム1704のLTP2に追加されることが開始される。時間T3において、ヘッドフリット1706で始まるパケット2の第1の部分が、VL2 FIFOバッファ1604において受信される。VL1及びVL2の両方には、低優先度が割り当てられており、したがって、パケット1及びパケット2の各々には、同じ低優先度レベルが割り当てられる。FP及び/又はFPのフリットは、同じ仮想レーンに割り当てられた場合には、互いを通り越すことができないが、異なる仮想レーンに割り当てられた場合には、互いを通り越すことが可能である。この状況はまた、異なる仮想レーンが同じ優先度レベルを有する場合にも生じ得る。一般に、2つ(又は3つ以上)の仮想レーンにおけるFPが、同じ優先度レベルを共有する場合、そのFPは、全体が(フリットを介して)フリット送信ストリームに追加される。例えば、第1のFPの全てのフリットが追加され、第2のFPの全てのフリットが追加される、等である。同じ優先度レベルを共有している複数のVLからどのFPを次に送出するかの選択は、アービタ選択ロジックの機能であり、これは、一般に、VLにおけるFPの送信を等しく(あるいは、公平に等しく)処理するよう設計される。例えば、いくつかの実施形態において、ラウンドロビンスキームが実装され得る。そのようなラウンドロビンスキームはまた、複数のVLにわたるバッファ使用レベルが何らかのレベルに対してターゲットされるように、FPの長さを考慮に入れ得る。例えば、2つのVLの間におけるラウンドロビンのみのアプローチは、VLにおけるFPの送信を交互に行うであろうが、使用レベルのアプローチは、第1のFPが、第2のFP及び第3のFPよりも著しく大きい場合、VLのうちの1つのVLから第1のFPを送信した後、他のVLから第2のFP及び第3のFPを送信し得る。
【0073】
図17に示される例の下では、通常は、パケット1のフリットの全てが送信された後、パケット2のフリットの全てが送信される(プリエンプションインターリービングイベントがなく、VL1及びVL2のみが調停(arbitration)のために考慮されると仮定した場合)。しかしながら、図示されるように、時間T4において、パケット1のフリットの転送においてバブルが始まる。アービタロジックは、バブルの存在と、VL2 FIFOバッファ1604内のパケット2のフリットの利用可能性(availability)と、を考慮に入れる。それに応じて、バブルインターリービングイベントが検出され、これは、時間T5において、パケット1のフリットが、パケット2のフリット1708によりインターリーブされることが開始されることをもたらす。プリエンプティブインターリービングと同様に、インターリービングの開始は、VL2をアクティブVLレジスタにロードして、VL1をスタックにプッシュすることにより始まる。
【0074】
パケット2からのフリットがフリット送信ストリーム1704に追加されている間に、時間T6において、パケット1のフリットの第2の部分(及び残りの部分)が、VL1 FIFOバッファ1602において受信されバッファされることが始まる。これらのフリットは、直ちに送信するために利用可能であるが、時間T6におけるそれらの受信は、インターリービングイベントを発生させない(あるいは、パケット2からのフリットのインターリービングを終了させない)。代わりに、パケット2からのフリットは、VL3 FIFOバッファ1606内のヘッドフリット1710を含むパケット3のフリットの利用可能性の検出に応じて時間T7においてプリエンプティブインターリービングイベントが検出されるまで、フリット送信ストリーム1704に追加され続ける。図16の例と同様に、VL3は、VL1又はVL2の優先度レベルよりも高い高優先度レベルを有する。結果として、高優先度のパケット3のフリットの利用可能性は、時間T8において、パケット2のフリットとパケット3のフリット1712とのプリエンプティブインターリービングを開始させ、時間T9において、テールフリット1715の追加で完了する。パケット3のインターリービングが完了すると、VL2が、スタックからポップされ、アクティブVLレジスタにロードされる。したがって、VL2が、アクティブ仮想レーンに戻される。これは、パケット2の残りのフリット1716をフリット送信ストリーム1704に追加することをもたらす。
【0075】
時間T10において、フリット送信ストリーム1704へのテールフリット1718により特定されるパケット2の完了時に、VL1が、スタックからポップされ、アクティブVLレジスタにロードされ、VL1が、アクティブVLに戻される。これは、パケット1の残りの部分に対応するフリット1720をフリット送信ストリーム1704に追加することをもたらし、時間T11において、テールフリット1722が追加されたときに、パケット1のフリットの追加が完了する。
【0076】
リンク信頼性
上述したように、アーキテクチャのファブリックは、「無損失」であり、これは、パケットが、受信時に決して破棄されないこと、又は、パケットが、伝送中に「損失されない」ことを意味する。これは、クレジットベースフロー制御の使用及びリプレイバッファの使用を主として含むメカニズムの組合せにより実現される。クレジットベースのアプローチの下では、送信ユニット(例えば、HFI、スイッチ、又はゲートウェイ)は、送信ユニットがフリットを送信するためのクレジットを有さない限り、フリットを受信ユニット(例えば、別のHFI又はスイッチ)に送信しない。クレジットは、VL単位であり、受信機が、フリットのために使用されるVLのための十分なバッファスペースを有することを示すために使用される。
【0077】
各LTPは、1以上のCRCを含み、1以上のCRCは、標準型検出LTPが使用されているか、拡張型検出LTPが使用されているかに応じて、データインテグリティを検証するために使用される。1以上のCRCは、LTPのデータコンテンツに対して計算され、結果として生じる1以上のCRC値が、図5〜図8に示され上述した最後のフリット(フリット15)に続いてLTPの最後に付加される。受信されると、1以上のCRCは再計算され、データエラーが存在するかどうかを判定するために、再計算された1以上のCRCと受信LTPと受信データ内の1以上のCRCとの比較がなされる。送信側CRCと、受信データに対して計算された受信側CRCと、が一致しない場合、データエラーが検出される。CRCの不一致の検出に応じて、LTPは、リプレイバッファの使用を介して再送信される。
【0078】
再送信リクエストの欠如が、LTPがピアにより無事に受信されたことを示すことを確実にするのに十分長い時間期間の間、「高信頼性」LTPは、リプレイバッファに保持される。このアプローチ下では、受信機は、パケットが無事に受信されたことを確認するためのACKを送信しない。代わりに、ラウンドトリップ時間期間内での再送信リクエストの欠如は、LTPがリンクを介して無事に転送されたという暗示的アクノレッジメントを提供する。用語「高信頼性」LTPの使用は、リプレイバッファに保持されるLTPと、リプレイバッファに保持されない、ヌルLTP等のLTPと、を区別するためのものである。したがって、ヌルLTPは、再送信されない。
【0079】
リプレイバッファ位置ポインタが、送信機における各LTP(NxtTxLTP)及び受信機における各LTP(NxtRxLTP)に対して保持されるが、LTPの一部として交換されるものではない。伝送エラーが、(CRCの不一致を介して)受信機により検出された場合、受信機は、NxtRxLTPリプレイバッファ位置ポインタを含むRetryReqLTPを送信機に送信する。送信機においてRetryReqLTPが受信されると、リプレイバッファ内のLTPが、RetryReqLTP(ピアNxtRxLTP)リプレイバッファ位置で始まり、書き込まれた最後のリプレイバッファ位置で終わる元の順番で再送信される。一実施形態において、LTPデータを(NxtWrLTP)に書き込むために次のリプレイバッファスロットが使用され、したがって、書き込まれた最後のリプレイバッファ位置は、(NxtWrLTP−1)である。
【0080】
CRCの不一致により示されるリンクエラーの検出に関連して、どのレーンが不良である(errant)かを判定するための第2のメカニズムが実装される。このメカニズムは、受信機においてのみ計算されるレーン毎CRC(per-lane CRC)を使用し、送信データ内のレーン毎CRC(存在しない)との比較は用いない。代わりに、以下で説明するように、レーン毎CRCを使用して、レーン単位又は転送グループ単位で、CRCの不一致を伴うLTPのために計算されるレーン毎CRCを、リプレイバッファを介して再送信された場合の同じLTPのために再計算された対応するレーン毎CRCと比較する。
【0081】
不良レーンを検出するための、レーン毎CRCと組み合わせたリプレイバッファの使用の一例が、図18a及び図18bに示されている。この例において、LTP送信ストリーム1604のLTP2、3、4、5、6、及び7を含むLTP送信ストリームが、デバイスAのリンクインタフェースAから、リンクの他方の端におけるピアデバイスBのリンクインタフェースBに送信中である。より詳細には、LTP送信ストリームは、上述した図17に示されるものと同様の4レーンリンクインターコネクトを用いて、リンクインタフェースAの送信ポート1800から、リンクインタフェースBの受信ポートに送信される。アーキテクチャのリンクの下では、LTPコンテンツは、複数のレーンを介して、並列にシリアル送信される。上述したように、レーンの数は、特定のリンク構成に応じて変わり得る。加えて、低減された数のレーンを有するリンク上における転送もサポートされる。限定ではなく例として、単一ビットが、ユニット間隔(UI:unit interval)と呼ばれる時間期間中、各レーンを介して伝送される。一実施形態において、転送されるLTPデータは、転送ユニット(XFR)と呼ばれるデータユニットに分割される。一実施形態において、各XFRは、32ビット量である。一実施形態において、XFRの全ビットが、同じレーンを用いて伝送される。いくつかの実施形態において、いくつかのXFRは、複数のレーンを介して伝送され得る。
【0082】
図19は、1056ビット長を有する標準型検出LTPに関するXFRのマッピングを示している。各XFRは、32ビット長であり、単一のレーンを介して転送される。したがって、各LTPについて33個のXFRが存在する。図20は、一実施形態に従った、4レーンリンクに関するレーン毎XFRマッピング(per-lane XFR mapping)を示している。名目上、例示の目的及び単純さのために、各フリットは、64ビットである。しかしながら、図3に示されるように、各フリットは、(ボディフリットのために)全部で使用されるか、あるいは、そのフリットタイプを識別するために(ヘッドフリット、テールフリット、及び制御フリットのために)部分的に使用される追加の65番目のビットを有する。伝送中、65番目のビットは、インラインで(in-line)伝送され、これは、複数のレーンを介して並列に伝送されたシリアル転送ビットストリームがデシリアライズされて再組み立てされたときに、65番目のビットが、1056ビット標準型検出LTP内に、65番目のビット位置毎に存在することを意味する。
【0083】
4レーンリンクの一実施形態において、2つのフリットのデータビットは、4つのXFRを含む128ビットが(論理的に)一緒に転送されるように、32UIにわたって、リンクを介して並列に転送される。しかしながら、上述したように、全ての65番目の位置は、フリットタイプビットにより占有される。結果として、XFRは、フリットと2:1に正確にマッピングするわけではない。そうではなく、追加の65番目のビットがインラインで存在することは、図21に示されるように、ラップ(折り返し)転送(wrapped transfer)をもたらす。
【0084】
さらに詳細には、一実施形態において、追加の2ビットが、128UI毎にラップされ、これは、4レーンXFRの8個のグループが完了した後に、16ビットの集約をもたらす。これら8個のグループは、最初の32個のXFRと、フリット15の最後の16ビット(及びその65番目のビット)を含む33番目のXFRと、を含み、それらの後に、16ビットCRC(又は、任意的に、14ビットCRC、及びCRC−14 LTPのための2つの制御チャネルビット)を含む。例示の目的及び理解のしやすさのために、フリットは、本明細書において、64ビットのユニットで転送されるものとして例示され得る。しかしながら、一実施形態においては、フリットは、実際、65ビットのユニットで転送されることを理解されたい。
【0085】
図20の4レーンXFRマッピングに戻ると、1つの1056ビット標準型検出LTP当たり33個のXFRを使用することは、各LTPについて1つのXFRのラッピングをもたらす。これが、今度は、LTPが、レーン0、レーン1、レーン2、レーン3のレーンシーケンスで始まり、レーン0、レーン1...等に戻ることに従って、各続くLTPの開始ポイントを次のレーンにシフトさせる。これは、本明細書において、4レーン標準型検出LTP「シーケンス」又は単に短くLTPシーケンスと呼ばれる(本明細書で例示及び説明する4つのレーンを介する標準型検出LTP転送に適用される)。便宜上、LTPシーケンス状態が、第1、第2、第3、及び第4として図示されているが、一実施形態においては、これは、2ビットを用いて、0、1、2、3として追跡される。
【0086】
図18aに示されるように、LTP送信ストリーム1604内のフリットのシリアライゼーション及びマッピングは、送信リンク制御ブロック1804により実行される(あるいは、このオペレーションの一部は、図示されていない別のブロックにより実行される)。送信リンク制御ブロック1804により処理される前に、各高信頼性LTPのデータコンテンツが、リプレイバッファ1806内のLTPスロットのうちの1つにコピーされる。LTPスロットは、NxtWrLTPポインタ1807により特定される。一般に、リプレイバッファは、可変サイズを有することもあるし、予め定められたサイズを有することもある。一実施形態において、リプレイバッファは、複数の予め定められたサイズのうちの1つに選択的に構成され得る。
【0087】
図示されるように、一実施形態において、リプレイバッファは、最後のFIFOスロットから最初のFIFOスロットに戻るようラップする(折り返す)(この例では、スロット7からスロット0にラップする)値を有する次の送信LTP(NxtTxLTP)ポインタ1808を含む循環FIFOとして実装される。循環FIFOの使用は、(前に送信されたLTPに対応する)前のLTPデータが、新たな(次に送信される)LTPデータにより上書きされることをもたらす。しかしながら、以下で詳述するように、LTPデータが無事に転送されたという暗示的アクノレッジメントが検出されるまでLTPデータが上書きされないことを確実にするための手段が提供される。このスキームは、明示的ACKを用いる必要なく、リンクを介するデータの高信頼性送信を円滑にし、したがって、ACKの使用に関連するオーバーヘッドを低減させる。これはまた、リンクレイヤより上位のプロトコル(TCP等)のために使用されるACKベースの高信頼性送信スキームをサポートするのに必要な送信ポートにおけるバッファリングを低減させる。
【0088】
図22a〜図22eのフローチャート2200a〜2200eと、図23a及び図23bの送信機状態機械図2300及び受信機状態機械図2350と、を参照すると、不良リンクレーンの検出を含むリンクエラーのハンドリングは、一実施形態に従って、次のように実施される。リンク初期化プロセス中、様々な情報が、リンクのインタフェースのピア送信ポートとピア受信ポートとの間で交換され、双方向通信リンクが確立される。このプロセス中、リプレイバッファのNxtTxLTPポインタ1808及び受信側の対応する次の受信LTP(NxtRxLTP)ポインタ1810が、0に初期化される。リンクの初期化が成功すると、開始ブロック2202により示されるように、リンク転送モードが「通常」に設定され、図23a及び図23bにおいて、送信機及び受信機が、LinkTransferActive.normal状態になり、LTPが、リンクを介して転送される準備ができた状態となる。明瞭さのために、以下では、データが一方向に転送されることにフォーカスしている。リンクを介する双方向通信をサポートするために、同様のオペレーションが、(レーンの別のセットを用いる)逆方向においても実行される。
【0089】
LTP送信ストリーム1604内のLTPは、シーケンシャルに送信されるので、LTPのデータは、リプレイバッファ1806にシーケンシャルにコピーされ、NxtTxLTPポインタ1808は、LTP毎に1スロット進む(あるいは、最後のスロット(MyLTPmax)に達すると、0に戻るようラップする)。図18aに示される例示的な状態において、LTP2〜6は、送信ポート1800から以前に送信されたものであって、LTP2及びLTP3は、受信ポート1802により以前に受信され、Rxリンク制御ブロック1805により処理されて、LTP CRCの一致に基づいて、良LTP(good LTP)であると判定されたものである。LTP4は、受信されているのに対し、LTP5及びLTP6は、伝送中である(これらLTPのデータは、送信ポート1800から送出されてはいるが、受信ポート1802においてまだ受信されていない)。
【0090】
フローチャート2200aに戻ると、メインフローチャートループは、ブロック2204で始まり、ブロック2204において、LTPが、受信ポートにおいて受信される。図18aの例において、このオペレーションは、LTP4が受信ポート1802において受信されることにより示される。ブロック2206に示されるように、レーン毎に、CRCが、適用可能なLTPシーケンス状態中にレーンを介して受信されたデータに基づいて計算され、そのCRCが、CRCレーンレジスタCRC−L0、CRC−L1、CRC−L2、及びCRC−L3により示されるレーン毎CRCレジスタに書き込まれる。一実施形態において、これらレジスタ内のデータは、CRCレーンレジスタが最も直近に処理されたLTP用のデータしか記憶しないように、現在のLTPのCRC計算結果により上書きされる。一実施形態において、4レーンリンクのためのレーン毎CRCは、各レーンのビットが受信されたときに動的に計算される12ビットCRCである。
【0091】
ブロック2208において、受信されたLTPデータのCRC(Rx CRC)が計算され、送信されたLTP内のTx CRCと比較される。Tx CRCは、受信機に送信されるLTPデータを用いて送信ポート1800により計算され、本明細書における様々なLTPフォーマットにより示されるように、LTPの最後に付加される。受信機は、受信されたLTPデータから、Tx CRCを抽出し、Tx CRCと、受信されたLTPデータに対して計算されたRx CRCと、を比較する。判定ブロック2210において、受信されたTx CRCと計算されたRx CRCとが一致するかどうかが判定される。Tx CRCとRx CRCとが一致する場合、ブロック2212に示されるように、そのLTPは良LTPとみなされ、LTPデータの通常処理が実行され、ロジックは、ブロック2204に戻って、次の受信されたLTPを処理する。
【0092】
図18aに示される例において、LTP4について、Tx CRCとRx CRCとが一致しない場合(CRCの不一致の場合)、これは、LTPデータエラーを示す。リンクデータエラーは、様々なリンク状態から生じ得るものであり、この時点においては、エラーを生じさせた特定のリンク状態は未知である。分かることは、受信されたLTPデータが送信されたものとは異なるということであり、したがって、受信されたLTPは不良データを有し、さらに処理されることはない。不一致のLTP CRCは、判定ブロック2210のNOの結果に対応し、これは、ロジックに、ブロック2214に進ませ、ブロック2214において、LTPが、不良パケットとして示され、また、受信機状態図2350においてRcvBadLTPにより示される。不良LTPの検出に応じて、(図22aにおける)ブロック2216、(図22bにおける)ブロック2218、及び(図22bにおける)ブロック2220の各々におけるオペレーションにより示されるように、複数のオペレーションが開始されて実質的に並列に実行される。
【0093】
ブロック2216に示されるように、不良LTPについて計算されたレーン毎CRC値が、レーン単位又はXFRグループ単位で記憶される。1つのLTP当たりのXFRの数が、レーンの数で割り切れる場合、レーン毎CRC値は、レーン単位で記憶され、1つのLTP当たりのXFRの数が、レーンの数で割り切れない場合、レーン毎CRC値は、XFRグループ単位で記憶される。例えば、3つのアクティブレーンを有するリンク及び33個のXFRの場合、33/3=11であるので、レーン毎CRC値は、レーン単位で記憶される。反対に、4レーン又は2レーンの場合、レーン毎CRC値は、XFRグループ単位で記憶される(33/4=7.5であり、33/2=16.5であるので)。XFRグループ毎CRC(per XFR-group CRC)が記憶される場合、受信LTPシーケンス状態がレジスタ1814に記憶される。
【0094】
XFRグループ毎CRCの例が、図24に示されている。図示されるように、レーン毎CRCが計算される対象のXFRの数は、4つのレーンにわたって等しくない。そうではなく、4つのレーンのうちの1つは、1つの標準型検出LTP当たり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スキームが使用される場合、レーン毎CRCは、4つのレーンを有するリンクの動作時には同じXFRに対するCRC計算をもたらすこともあるしもたらさないこともあり(同じである確率は25%)、2つのレーンを有するリンクの動作時にも同じXFRに対するCRC計算をもたらすこともあるしもたらさないこともある(同じである確率は50%)。
【0095】
図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のLTPシーケンス状態及び第4のLTPシーケンス状態の両方についても、同様の手法が使用される。
【0096】
図18aに示される時間フレーム中、LTPシーケンス状態は1であり、したがって、CRC−G0、CRC−G1、CRC−G2、及びCRC−G3はそれぞれ、LTP4について、レーン0、レーン1、レーン2、及びレーン3上で受信されたデータから計算される。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に記憶される。
【0097】
図22bにおけるフローチャート2200bのブロック2218に進み、再送信リクエスト(RetryReq LTP1812)が、受信機から送信機に返され、NxtRxLTPポインタ1810の現在値により不良LTPが特定される。一実施形態においては、RetryReq LTPのシーケンシャルペアが送信されるのに対し、別の実施形態においては、1つのRetryReq LTPが送信される。この例においては、NxtRxLTPポインタ値は、不良LTPであるLTP4のデータを記憶しているリプレイバッファスロット4を示している。RetryReq LTPを受信したことに応答して開始されるリプレイモード時の送信側オペレーションの詳細が、図22cのフローチャート2200cに示されている。
【0098】
また、ブロック2214において不良LTPが検出されると、ブロック2220において、LTP受信モードが、「LTP−トス(LTP-tossing)」に設定され、これは、不良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がエラーを有していた場合、シーケンシャルエラーが発生したことになる。シーケンシャルエラーを検出する判定が、判定ブロック2226により示されており、判定ブロック2224の結果がYESであった場合、ロジックは、判定ブロック2226に進む。加えて、ブロック2225において、総LTP CRCエラーカウントがインクリメントされる。(総LTP CRCエラーカウントは、通常モードであるかトスモードであるかにかかわらず、各LTC CRCエラーの検出に応じてインクリメントされる。)
【0099】
CRCは、パケットやフレーム等の送信データユニット内のエラーを検出するよう構成されているデータインテグリティチェックである。CRCの数学式は、CRCがビット伝送エラーを検出するように選択され、デジタルデータの2値性を利用して、CRCがバイナリ量に対して迅速に計算されることを可能にする。しかしながら、CRCは、100%確実なものではない。CRCチェックは、ビットエラーの数が、CRCのハミング距離以上である場合にはエラーを検出することができない。ネットワークファブリックにおいて使用されるCRCのハミング距離は、通常4であり、これは、エラーが検出されないであろう可能性(極めて低い確率)を広げるために少なくとも4つのビットエラーを要することを意味する。未検出リンクエラーは、「誤パケット許容(false packet acceptance)」と呼ばれるものをもたらし、これは、エラーを有するパケットが(誤って)CRCチェックを通ってしまい、したがって、さらなる処理が許容されることを意味する。このような未検出エラーは、パケットサイレントデータ破損(packet silent data corruption)をもたらす。
【0100】
LTPは、およそ1000ビットのサイズである。所与の平均ビットエラー率(BER)では、検出を見逃す確率は、エラーが複数のLTPにわたって経時的に広がっていく均一な単一リンク転送パケット対エラーパターンにおいて、エラーが相関しており、(4以上の)バーストで生じる場合には、より高くなる。
【0101】
ネットワークファブリックリンクは、非常に低いが0ではないBERを提供するよう設計される。リンク電力を低減させたいと望むことは、より高いBERを許容する動機付けを与え、BERは、電力が低減されるにつれ増大する傾向にある。BERが増大すると、エラー検出を見逃す確率が増大する。何らかのポイントにおいて、この確率は、許容できないほど高くなる。ファブリック内の多くのリンクにわたるBERは均一ではない。リンクは、通常、複数のレーンを含み、BERは、所与のリンクにおけるレーンにわたって広範に変わり得る。従来のアプローチ下では、ファブリック管理ソフトウェアが、何らかの閾BERで動作しているリンクを検出したときに、許容できないほど高い確率のデータ破損を避けるために、ファブリックからそのリンクを除去することを余儀なくされる。これは、そのリンクにおけるエラーの広がりを知ることなく行われ、エラーが相関していると想定した保守的なより小さなBER閾値の使用を強いる。加えて、リンクのBERは、時間とともにドリフト及び/又は劣化して、許容できないほど高くなり得る。ファブリックマネージャは、全てのリンクを継続的にリアルタイムで常にモニタリングできるわけではない。結果として、リンクが過度に高いBERで動作していることを検出するには、いくらかの時間がかかり得る。この時間の間、ファブリックは、データ破損の可能性にさらされる。
【0102】
密接しているビットエラーに対する1つのチェックは、判定ブロック2224におけるLTP CRCエラーチェックと、判定ブロック2226におけるシーケンシャルLTP CRCエラーチェックと、を使用することによるものである。CRCは、少なくとも1つのエラーが検出されたことを識別するために使用することはできるが、どれくらいの数のエラーが存在するかを識別するものではない。しかしながら、シーケンシャルLTP CRCエラーは、少なくとも2つのエラーが、シーケンシャルLTP内に存在することを示す。
【0103】
一実施形態において、ブロック2228において、シーケンシャルLTP CRCエラーの検出に応じて、RetrainReq LTPのペアが、送信機に送信され、これは、フローチャートロジックが、出口ブロック2232に示される、リンクを再トレーニングすることに抜け出ることをもたらし、送信機状態機械図2300におけるRcvRetrainReqをもたらす。
【0104】
一実施形態において、この再トレーニングは、リンクを初期化又は再初期化するときに用いられるリンク(再)トレーニングオペレーションよりも複雑でない軽量再トレーニングである。トレーニング又は再初期化中、リンクの通常アクティブ転送状態はオフラインであり、これは、リンクトレーニング又はリンク再初期化が完了してリンクが通常アクティブ転送状態に戻るまで、通常データ転送オペレーションが一時的に利用できないことを意味する。加えて、受信機は、ブロック2230において、RetrainReq LTPを送信したことを示す何らかの内部的しるしを設定し、ブロック2231において、リンクシーケンシャルエラータイマがリセットされる。リンクシーケンシャルエラータイマの使用についてのさらなる詳細が、図22eに示されており、以下で説明される。トレーニングシーケンスが完了すると、ロジックは、フローチャート2200bのブロック2218及びブロック2220に戻り、1以上のリトライリクエストLTPが、送信側に再度送信され、受信機において、LTP−トスモードに再び入る。
【0105】
リトライマーカLTPを受信したことに応答して、LTP−トスモードループから抜け出て、受信されたLTPがCRCエラーを有さない場合、それに応じて、ロジックは、判定ブロック2234に進み、判定ブロック2234において、LTP−トスモードの間に受信された各良LTPがリトライマーカであるかどうかが判定される。再送信リクエストを受信する前に、送信機は、LTPを順に送信し続けており、これらのLTPが、(もしあれば)すでに伝送中のLTPとともに受信される。図22cのフローチャート2200cにおけるブロック2238、ブロック2240、及びブロック2242に示されるように、再送信リクエスト(RetryReq LTP)を受信すると、送信機は、リトライマーカを送出し、続いて、再送信リクエストを介して返されたNxtRxLTPポインタ値により示されるスロット内のLTPで始まる、リプレイバッファ1806内のLTPを再送信する。一実施形態においては、1つのリトライマーカが送信されるが、別の実施形態においては、リトライマーカのペアが連続して送信される。一実施形態において、リトライマーカのペアは、それらが送信される順番により特定される(例えば、RetryMrkr0、RetryMrkr1)。一実施形態において、リトライマーカの各々は、ヌルLTPを含む。RetryMrkr LTP1816により示される1つのリトライマーカの使用の一例が、図18bに示されている。リトライマーカのペアが送信されるときには、第2のリトライマーカ(RetryMrkr1)は、RetryMrkr LTP1816(RetryMrkr0)に直ちに続くことを理解されたい。
【0106】
図18aの例において、再送信リクエストを受信する前にLTPの送信をこのように続けることは、LTP5及びLTP6(伝送中)、LTP7(次に送信された)、並びにLTP0及びLTP1を順番に受信することをもたらす。LTP5、6、7、0、及び1の各々はリトライマーカではないので、判定ブロック2234の結果はそれぞれNOであり、ロジックは、ブロック2236に進み、LTPを破棄し、次いで、ブロック2222にループバックして、次のLTPを受信する(LTP−トスモードであり続ける間は)。判定ブロック2234において、リトライマーカLTPが受信されて検出されるまで、後続の受信されるLTPの処理が同様に続けられる。
【0107】
図18bは、RetryMrkr LTP1816が送信され、受信ポート1802により受信されて処理され、LTP4が再送信され、受信ポート1802により受信されており、その後に、再送信されたLTP5及びLTP6(伝送中)が続き、LTP7が再送信されようとしている時間フレームを示している。LTP4、5、及び6の各々は、「リプレイ」LTPを含む。また、図18bに示されるように、(図18aに示される)スロット0及びスロット1内のリプレイバッファデータは、RetryReq LTP1812の受信及びRetryMrkr LTP1816の送信の前に生じたそれらの元の送信に関連するLTP0及びLTP1の対応するフリットデータで上書きされている。
【0108】
前と同様に、各高信頼性LTP送信について、LTPのデータが、NxtTxLTPポインタ1808により特定される、リプレイバッファ1806内のスロットにコピーされる。NxtTxLTPポインタ1808は、高信頼性LTP毎にインクリメントされる。したがって、NxtTxLTPポインタ1808は、LTP7、0、及び1の各々を送信することに関連してインクリメントされる(NxtTxLTPポインタは、7から0に戻るようにラップすることに留意されたい)。LTP1が送信されている間に(あるいは、LTP1が送信される直前に)、送信ポート1800が、RetryReq LTP1812を受信する。それに応答して、送信ポート1800は、RetryMrkr LTP1816(又は、RetryMrkr0 LTP及びこれに続くRetryMrkr1 LTPを含むリトライマーカのペア)を返す。RetryMrkr LTP1816はヌルLTPであるので、そのデータコンテンツは、リプレイバッファ1806にコピーされず、NxtTxLTPポインタ1808は進められない。反対に、Tx LTPシーケンス状態は、高信頼性LTPであるかヌルLTPであるかにかかわらず、送信されるLTP毎に進められる。
【0109】
判定ブロック2234に戻って、RetryMrkr LTP1816が受信されると、リトライマーカとして識別され、フローチャートロジックは、図22dにおけるフローチャート2200dに進む。ブロック2252に示されるように、リトライマーカが処理され、受信機は、到来するリプレイ不良LTPの受信に備えるために、カウントダウン値を設定する。一実施形態において、不良LTPの再送信が、リトライマーカ後のk個のLTPを開始することを示すために、不良LTPリプレイオフセットが、リトライマーカに対して使用される。リトライマーカのペアを使用する一実施形態において、不良LTPリプレイオフセットは、第2のリトライマーカの場合、1だけ小さい。また、ブロック2240に示されるように、不良LTPリプレイオフセットを考慮して、受信機は、LTPオフセットに基づいて、不良LTPリプレイカウントダウンを開始する。ブロック2256において、これを用いて不良LTPのリプレイを検出する。加えて、受信機は、ブロック2254において、1つのラウンドトリップマーカLTP(又は、ラウンドトリップマーカLTPのペア)を返し、ブロック2254において、LTP受信モード(受信状態)が通常に戻され、フローチャートロジックは、ブロック2204に戻って、次のパケットを受信する。これが、受信機状態図2350における「RndTripMrkrペアを送信」状態と、LinkTransferActive.normal状態への戻りと、により示される。図18cを参照して以下で説明するように、1以上のラウンドトリップマーカLTPは、リプレイバッファLTPを上書きできるかどうかの判定を容易にするために、1以上のリトライマーカLTPに応答して返される。
【0110】
RetryMrkr LTP1816(又は、RetryMrkr0 LTP及びRetryMrkr1 LTP)の送信に続いて、RetryReq LTP1812において返されたNxtRxLTPポインタにより特定される不良LTP(この例ではLTP4)の再送信で始まるLTPのリプレイ(再送信)が開始される。送信機がリプレイモードにある間、送信されるデータは、リプレイバッファ1806に記憶されている、再送信されるLTPを含む。再送信されるLTPは、リプレイバッファのFIFOにおける順番に基づいて、送信ポート1800から、NxtRxLTPポインタにより示されるLTPで始まってシーケンシャルに送出される。
【0111】
再送信される各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の再送信に関連して上述したオペレーションを実質的に繰り返す。
【0112】
再送信された不良LTP4が良LTPであるとみなされると、ロジックは、ブロック2258に進む。このブロックにおいて、レジスタCRC−G0、CRC−G1、CRC−G2、及びCRC−G3に以前に記憶されたレーン毎CRC値が、再送信されたLTP4について、各レーンを介して受信されたデータに対して計算されたレーン毎CRCと比較される。この比較は、動作レーンの数に応じて、レーン単位又はXFRグループ単位で行われる(レーン単位での比較及びXFRグループ単位での比較は、XFRグループ単位での比較が常に実行され得るように、転送グループの数が同じであるときには同等であることに留意されたい)。から、レーン毎CRCは、4レーンリンクに関して、XFRグループ単位で比較される。
【0113】
送信されたLTP毎にTx LTPシーケンス状態及びRx LTPシーケンス状態をインクリメントすることを続けることに関連して、LTP4が再送信されるとき、LTPシーケンス状態は3であるのに対して、LTPが元々送信されたときにはLTPシーケンス状態は1であった。結果として、各レーンを介して送信されたXFRグループは、変わっている。レーン−XFRグループのこの再マッピングが、図25に示されており、これはまた、図18aにおいて各レーンを介して送信されたXFRと図18bにおいて各レーンを介して送信されたXFRとを比較することにより、確認することもできる。上述したように、LTP4が元々送信されたときには、LTPシーケンス状態は1であったのに対し、LTP4が再送信されるときには(図25における4Rにより示される)、LTPシーケンス状態は3である。
【0114】
図18bに戻ると、再送信されたLTP4のレーン毎CRCが、レーン0、1、2、及び3について計算され、次いで、フローチャート2200dのブロック2258において、XFRグループ毎CRCの比較が実行され、ブロック2260において、必要に応じて、不一致のレーン毎CRC又はXFRグループ毎CRCを識別することにより、不良レーンが識別される。図18a及び図18bの例において、XFRグループ毎CRCの比較結果は、CRC−G0、CRC−G1、及びCRC−G3のCRCが一致していることを示しているのに対し、CRC−G2のCRCが一致していないことを示している。これは、レーン2が不良レーンであることを示す。なぜならば、LTP4が元々送信されたときには、レーン2が、不良LTP4についてCRC−G2値が計算されたXFRグループに対応していたからである。再送信されたLTP4においてLTP CRCエラーが検出されなかったので、リプレイLTP4について、レーン2を介して送信されたデータ内にもエラーが存在しない(と想定される)ことに留意されたい。ブロック2261において、識別された不良レーンのエラーカウントがインクリメントされる。
【0115】
レーンが間欠的に不良であるシナリオを検討する。上述したように、判定ブロック2226及び関連する論理ブロックのシーケンシャルLTP CRCエラーチェックが、リンクを介して送信されたデータ内の密接しているエラーを検出するための1つのメカニズムである。このメカニズムは、(シーケンシャルLTP内のエラーを要求する)非常に密接しているエラーを検出するが、どのレーンが不良であるかを識別することはできないし、個々のレーン上でシーケンシャルエラーがどれくらいの頻度で発生しているかを識別することもできない。
【0116】
第2のBERチェックメカニズムの実施形態に従うと、所与のレーンのエラー頻度(BER)がレーン毎BER閾値を超えるかどうかを判定するために、レーン毎エラー頻度がモニタリングされる。一実施形態において、これは、(フローチャート2200d及びフローチャート2200eに示される並列に実行される他のオペレーション及びロジックに関連して)レーン毎シーケンシャルエラーカウンタ及びタイマを使用することにより実現される。
【0117】
判定ブロック2262において、受信機状態が、受信機により開始されたリンク再トレーニング状態から生じたかどうかが判定される。フローチャート2200bにおけるロジックに示され上述したように、シーケンシャルLTP CRCエラーの検出は、受信機がエラーを検出したことにより開始されるリンク再トレーニングをもたらす。反対に、1つのLTP CRCエラーも同様にリトライリクエスト・リトライマーカ受信シーケンスを開始させるが、リンク再トレーニングの開始はもたらさない。リプレイLTPが良LTPであり、受信状態が、リンク再トレーニングから生じたものではない(すなわち、1つのLTP CRCエラーしか検出されなかった)場合、判定ブロック2262の結果はNOであり、これは、ロジックに、ブロック2264に進ませ、ブロック2264において、LTPが、あたかも元々送信されたLTPであるかのように処理される。次いで、ロジックは、フローチャート2200aに戻り、(受信機の観点から)後続のリプレイLTPが元々送信されているように後続のリプレイLTPを処理する。
【0118】
ここで、2つのシーケンシャルLTP CRCエラーが受信機により検出されたと仮定すると、リンク再トレーニングが受信機により開始され、判定ブロック2262の結果がYESとなり、ロジックはブロック2266に進む。このブロックにおいて、ブロック2260において判別された不良レーンのシーケンシャルエラーカウンタがインクリメントされる。判定ブロック2268において、レーンのシーケンシャルエラーカウントが閾値に達したかどうかが判定される。一般に、この閾値は、1、2等の整数である。一実施形態において、この閾値は2であり、1回のタイマ期間内での1つのレーン上の2つのシーケンシャルエラーが、レーンBER閾検出を始動させる。それに応答して、一実施形態において、ロジックは、出口ブロック2270に進み、不良レーンとして検出されたレーンが除去されてリンクが再初期化される。結果として、リンクのアクティブレーンの数が、1つのレーンだけ減り、例えば、4レーンリンクの場合は、3つのアクティブレーンに減る。
【0119】
レーン毎シーケンシャルエラーカウントが閾値に達していない場合、判定ブロック2268の結果はNOであり、ロジックはブロック2204に進み、受信機が通常受信状態で動作するとともに送信機が依然としてリプレイモードで動作して、次のLTPを受信する。
【0120】
上述したように、一実施形態において、レーン毎シーケンシャルエラーの頻度を検出するために、タイムスキームが使用される。から、シーケンシャル不良LTPの検出に応じて、ロジックはブロック2231に進み、図22eのフローチャート2200eに示されるように、タイマスキームを実施するための並列オペレーションのセットが開始される。ブロック2272において、必要に応じて、タイマが開始されるか(最初の場合)、再開される(リセット時)。判定ブロック2274及び自身へのループバックにより示されるように、タイマが満了したかどうかを判定するために、タイマが定期的にチェックされる、あるいは、任意的に、タイマロジックは、タイマが満了したことを示す割り込み又は他のしるしを生成するよう構成されてもよい。タイマが満了すると、ブロック2276に示されるように、各レーンの不良シーケンシャルエラーカウンタがデクリメントされる。一実施形態において、最小の不良エラーカウントは0であるので、すでに0であるレーンエラーカウントに関しては、そのカウントはデクリメントされない。
【0121】
並列プロセスの組合せは、次のようにして、個々のレーン上のエラーが、頻度閾値を超えたことを検出する(例えば、密接しているエラーを示すレーンを識別する)。フローチャートオペレーションが、ロジックをブロック2258、ブロック2260、及び判定ブロック2264の結果のYESに進ませるたびに、不良レーンのシーケンシャルエラーカウントがインクリメントされる。その一方で、並列タイマオペレーションを考慮して、タイマが、再開されないで、レーン毎エラーがなくタイマの時間期間が経過したことを示すたびに、各レーンのレーン毎シーケンシャルエラーカウントが1だけデクリメントされる(最小0まで)。一実施形態において、2になると(two strikes)そのレーンは機能しなくなり(out)、これが、タイマ期間内に2つのシーケンシャルエラーを有するレーンに対応する。
【0122】
1つのタイマに加えて、異なる時間期間を有し、異なるカウント閾値に関連付けられる複数のタイマが並列に使用されてもよい。例えば、これは、レーン毎オペレーションのより長期のビュー(view)が観測されることを可能にしながら、より短いレーン毎BER閾検出も容易にする。時間期間内に必要とされるシーケンシャルエラーの数の閾値は、変更されてもよい。
【0123】
フローチャート2200a〜2200eに示される実施形態の下では、不良レーンの除去と組み合わせたリンクの再初期化は、密接しているエラーを示すレーンの検出から生じる。しかしながら、これに限定される意図はない。なぜならば、レーンは、シーケンシャルLTP CRCエラーの検出に続いて出口ブロック2232を介して抜け出るとき等の他の条件下で、リンクを再初期化すること及び/又はリンクを再トレーニングすることに関連して、除去されてもよいからである。例えば、リンクが再初期化されるときに、エラーカウントが何らかの閾値を超えたかどうかを確認するために、レーン毎エラーカウンタがチェックされる。そうであれば、そのレーンは、不良とマークされ、リンクがアクティブオペレーションに戻ったときアクティブでない。
【0124】
暗示的ACKを用いた高信頼性LTP送信の別の態様は、LTPがエラーなく受信されたことの暗示的確認の前にはリプレイバッファ内のLTPが上書きされないことを確実にするためのメカニズムである。一実施形態において、これは、リトライリクエスト及びラウンドトリップマーカを使用することにより容易にされる。上述したように、いくつかの実施形態において、リプレイバッファは、固定サイズを有する、あるいは、複数の固定サイズのうちの1つを用いて動作するために設定されるよう構成され得る。加えて、リンクピアのペアは、異なるサイズのリプレイバッファを使用することもある。
【0125】
固定サイズのリプレイバッファの使用下では、リプレイバッファは、一般に、様々な処理遅延をさらに考慮して、リンクのラウンドトリップ移動(roundtrip traversal)中に転送され得るLTPの数よりも多い数のLTPを保持するサイズとされる。これが、図18a及び図18bに示される場合であり、これらの図において、リプレイバッファは、8つのスロットを有し、リンク及び反対方向のリンクパスを介してラウンドトリップを同時に移動し得るLTPの数は、およそ6又は7個のLTPである。結果として、受信機において検出されたエラーが存在する場合、送信機は、リプレイバッファ内の不良LTPのコピーが上書きされる前に、リトライリクエストを受信する。
【0126】
しかしながら、実用上の理由で、固定サイズのリプレイバッファは、全ての可能性のあるリンク長に対処するようなサイズにはされない。リンクの長さが長くなると、リトライリクエストを受信する前にリプレイバッファから送出され得るLTPの数は増える。何らかのポイントにおいて、リンク長は、リトライリクエストスキーム単独の使用が、リプレイバッファ内の不良LTPのコピーがその不良LTPのリトライリクエストを受信する前に上書きされないことを確実にしないものにする。
【0127】
これが、ラウンドトリップマーカの使用が適合する場合である。フローチャート2200cに戻ると、判定ブロック2244において、ラウンドトリップマーカを受信することなくLTPの全てのリプレイが完了したかどうかが判定される。図18cに示される構成下では、再度、リプレイバッファ1806内に8個のFIFOスロットが存在するが、リンク長は、5個のLTPが同時に「ワイヤ上」に存在できる程度である。これは、少なくとも10個のLTPが、ラウンドトリップト中であり得る、且つ/あるいは、受信機において処理中であり得ることを意味する。結果として、リプレイバッファ内のLTPコピーの全てが、LTPのいずれかに対するリトライリクエストを受信する前に再送信され得る。これは、可能性のある不良LTPのコピーが上書きされることをもたらす。これは、不良LTPが再送信されることを妨げ、リプレイバッファの目的を無にする。
【0128】
このシナリオに対処するために、送信機は、判定ブロック2244に示されるように、ラウンドトリップマーカを受信する前にリプレイLTPの最後に達したかどうかを検出するためのロジックを含む。要するに、これは、リプレイバッファの深さ(depth)が、ラウンドトリップ継続時間(roundtrip duration)よりも小さいか大きいかを判定する。リプレイLTPの最後に達することは、リプレイポインタが最初のリプレイLTPの開始(FIFOスロット)に戻るようラップしたことにより検出される。
【0129】
図18cにおいて、最初のリプレイLTPスロットはスロット4であり、スロット4、5、6、7、0、1、2、及び3内のLTPが順に再送信され、ラウンドトリップマーカ1822a及び1822bのペアのうちの最初のラウンドトリップマーカを受信する前に、リプレイLTPポインタは、スロット4に戻っている。これは、ラウンドトリップマーカを受信する前にリプレイLTPの最後に達している例を示しており、ラウンドトリップ継続時間がリプレイバッファの深さよりも大きいことを示す。これは、判定ブロック2244の結果をYESにさせ、ロジックは、ブロック2245aに進み、ブロック2245aにおいて、送信機のヌルカウンタ(Nullcount)nが、整数kにリセットされる。ブロック2246a及び判定ブロック2248のNOの結果がブロック2246aにループバックすることにより示されるように、次いで、送信機は、ラウンドトリップマーカ又はリトライリクエストが受信されるまで、1以上のヌルLTPを受信機に送信することに進む。加えて、送信されたヌルLTP毎に、Nullcount nが、1だけインクリメントされる。上述したように、ヌルLTPは高信頼性LTPではなく、したがって、送信されるLTPのコピーは、リプレイバッファに追加されない。結果として、リトライリクエストをもたらした不良LTPのコピーが、リトライリクエストを受信する前に上書きされないことが確実になる。
【0130】
判定ブロック2248において、ラウンドトリップマーカが受信されたと判定されると、ロジックは、ブロック2250に進み、ブロック2250において、送信機は、図23aの送信機状態機械図2300におけるLinkTransferActive.normalへの戻りにより示されるように、通常転送モードに戻るとともに、リプレイバッファの最後に達すると、リプレイバッファを通じたサイクル毎に、Nullcount n値を使用して、どれくらいの数のヌルLTPを送信するかを決定する。例えば、Nullcount nが4に達したとする。結果として、リプレイバッファFIFOスロットがスロット7に達するたびに、送信機は、4つのヌルLTPを送出する。一実施形態下では、リトライリクエスト及びラウンドトリップマーカは、最高優先度を有し、決してプリエンプトされない。したがって、Nullcount nにより定められる数のヌルLTPの送信を用いることは、不良LTPのコピーが、その不良LTPのリトライリクエストを受信する前に上書きされないことを確実にする。オプションとして、安全マージンを提供するために、ブロック2245aにおいて、Nullcount nは、値k>0にリセットされてもよく、k個の追加のヌルLTPが、リプレイバッファを通じた各サイクルの最後で送信されるようになる。Nullcountスキームの固有の利点は、実質的に任意の長さのリンクをサポートするために実装できることである(物理リンクの長さには実用上の制限が存在し、この制限を超える長さを有するリンクの製造及び/又は実装は、可能ではないか、あるいは現実的ではないことを認識されたい)。
【0131】
判定ブロック2244に戻って、ラウンドトリップマーカが、最初のFIFOスロットに達する前に受信された場合、判定ブロック2244の結果はNOであり、ロジックは、ブロック2245bに進む。ブロック2245bにおいて、Nullcount nが整数mにリセットされる。ブロック2246b及び判定ブロック2249のNOの結果がブロック2246bにループバックすることにより示されるように、次いで、送信機は、バッファポインタがラップしてその開始スロットに戻るまで、あるいは、Nullcount nが0に達するまで、LTPを受信機にリプレイし続けることに進む。ここで、Nullcountカウントダウンが、mから始まって、再送信された高信頼性LTP毎に1だけデクリメントされる。判定ブロック2249のYESの結果に応じて、ロジックは、このNullcountカウントダウンループから抜け出て、ブロック2250に進む。Nullcountカウントダウンの使用は、バッファ深さが、ラウンドトリップ継続時間のm個のLTPの転送サイクル内である構成のおよそm個のLTPの転送サイクルの安全マージンをもたらす。例えば、バッファ深さが32スロットであり、ラウンドトリップ継続時間が、30個のLTPの転送サイクルに等しく、m=5であると仮定する。この場合、ロジックがカウントダウンループから抜け出たときにはmは3であろう。これは、リプレイバッファがその開始(スロット0)に戻るようラップするたびに、3個の追加のヌルLTPが、スロット0内のLTPを上書きする前に送信される。バッファ深さは32スロットであるので、上書きされるリプレイバッファスロット間のLTPサイクルの数は、35である、すなわち、ラウンドトリップ継続時間よりも5大きい。
【0132】
不良レーンの検出に応じて、リンクは、低減された数のアクティブレーンの劣化状態で動作し得る。さらに、リンクが、例えば、4つのアクティブレーンで始まり、第1の不良レーンを検出して第1の不良レーンを除去し、3つのアクティブレーンによるリンクオペレーションをもたらし、第2の不良レーンを検出して第2の不良レーンを除去し、2つのアクティブレーンによるリンクオペレーションをもたらすといったシーケンスで動作し得るように、このリンク劣化状態はカスケードし得る。このカスケードは、第3の不良レーンの検出に続いて、1つの残りの良レーンを介するリンクオペレーションをもたらし得る。リンクは、一方の送信方向では、他方の送信方向とは異なる数のアクティブレーンが使用され得るように、非対称構成においても動作し得ることにも留意されたい。
【0133】
図26は、一実施形態に従った、3つのアクティブレーンを有するリンクを動作させるためのXFRグループを示している。この例において、3つのXFRグループG0、G1、及びG2が存在し、対応するCRCは、CRC−G0、CRC−G1、及びCRC−G2である。LTPシーケンスは、XFRパターンがレーン変更なく繰り返される1つの状態しか有さないので、同じXFRグループが、同じそれぞれのレーンを介して送信される。結果として、レーン毎CRCの比較は、レーン単位で行われ得る、あるいは、XFRグループ単位では、LTPシーケンス状態が考慮されない。3つのレーンの下では、各レーンについて、11個の32ビット転送グループが存在し、これは、1つの標準型検出LTP当たり、各レーンを介して352ビットが送信されることをもたらす。一実施形態において、3つのアクティブレーンの下で動作する場合、16ビットのレーン毎CRCが使用される。
【0134】
図27は、一実施形態に従った、2つのアクティブレーンを有するリンクを動作させるためのXFRグループを示している。1つのLTP当たり33個の32ビット転送グループが存在するので、LTP送信ストリームのためにレーン0及びレーン1の各々を介して転送されるビットの数は、512ビットと544ビットとで交互に変わる。結果として、XFRグループ単位のレーン毎CRC比較スキームが、2つのLTPシーケンス状態を用いて実施される。加えて、一実施形態において、16ビットのレーン毎CRCが使用される。
【0135】
図28は、一実施形態に従った、1つのアクティブレーンを有するリンクを動作させるためのXFRグループを示している。LTPデータが送信される1つのレーンしか存在しないので、このレーンが、不良である可能性がある唯一のレーンである。結果として、レーン毎CRCの比較を実行する必要はない。しかしながら、2以上のレーンを有するリンクが1つのレーン下で動作するよう劣化するレーン劣化シナリオ下では、レーン毎CRC計算値が、その1つのレーンに対して依然として計算され得る。なぜならば、これは、常に実行されるようにハードウェアで実装され得るからである。この例において、レーン毎CRC計算値は、単に無視される。
【0136】
上述したように、開示した実施形態の下では、リンクは、明示的ACKを使用することのない高信頼性データ送信をサポートする。LTPは、リンクを介して伝送されているときに損失され得ないが(ケーブルの切断等の事象がない場合)、エラーを含むことがある。暗示的アクノレッジメントスキームは、送信機から受信機へ、そして再度送信機に戻るラウンドトリップを完了するのに要する時間を少なくとも含む時間期間内に送信機においてリトライリクエストを受信しないことにより実現されることを思い出されたい。リトライリクエストは、送信されたデータとは異なるレーンのセットを介して送信されるので、1つのリトライリクエストは(CRCチェックにより識別される)エラーを有することがあり、したがって、トスされることがある可能性がある。結果として、受信側リンクインタフェースは、不良LTPが受信されたことを送信側リンクインタフェースに通知しようと試み得るが、(リトライリクエストにより示される)その通知は、トスされる可能性がある。これが、RetryReqLTPのシーケンシャルペア及び他のヌルLTPのペア(例えば、RetryMrkr0、RetryMrkr1)の送信が暗示的ACKスキームを促進するのに役立つ場合である。
【0137】
まず、これらはヌルLTPであるので、リプレイバッファに記憶されず、したがって、再送信のために利用できない。しかしながら、ヌルLTPのシーケンシャルペアを送信することにより、次の2つのイベントのうちの1つが生じることが確実になる:1)エラーなく少なくとも1つのヌルLTP又は2つのヌルLTPの受信の成功;又は、2)両LTPがエラーを有する場合、これがシーケンシャルLTPエラーとして検出され、リンクの再トレーニングをトリガすること。(再)トレーニング中、トレーニングシーケンスは、リンクパートナの送信機−受信機ペアの両方により実行され、したがって、両方向におけるリンクの適切なオペレーションが、リンクをアクティブオペレーションに戻す前に検証される。再トレーニングが完了すると、送信側は、1以上のリトライマーカを送信した後であって、新たなLTPの送信を開始する前に(あるいは、LTPのリプレイを続ける前に)、受信側からの保証されたリトライリクエストを待つ(途中ヌルLTPを送信しながら)。別の利点は、これらヌルパケットのペアを送信することが、LTPのうちの少なくとも1つが良LTPである可能性を増大させることである。
【0138】
図29は、メモリ2908に結合されているプロセッサ2906に結合されているファブリックポート2904を含むホストファブリックインタフェース2902を有する例示的な構成を備えるノード2900を示している。図1に示されるように、システムノードは、ディスクリート型シングルノードプラットフォーム106、仮想プラットフォーム110、マルチノードプラットフォーム116、及び集積型シングルノードプラットフォーム120により示されるもの等であるがこれらには限定されない様々な構成を有することができる。一般に、各ノード構成は、少なくとも1つのプロセッサ、メモリ、及び図29に示される同様のコンポーネントを有する少なくとも1つのHFIを備える。
【0139】
ファブリックポート2904は、図18a〜図18cに示されるものと同様の構成を有する送信ポート1800及び受信ポート1802に加えて、以下で説明する、図29に示される他の回路及びロジック、並びに、図29に示されていない他の回路及びロジックを含む。送信ポート1800は、複数の送信VLバッファに分割された送信バッファ(Tbuf)を含むTxリンクファブリックサブレイヤ回路及びロジック2910と、Txリンク転送サブレイヤ回路及びロジック2912と、4つの送信機2916を含むTx PHY回路及びロジック2914と、Txリンク制御ブロック1804と、を含む。受信ポート1802は、複数の受信VLバッファに分割された受信バッファ(Rbuf)を含むRxリンクファブリックサブレイヤ回路及びロジック2918と、Rxリンク転送サブレイヤ回路及びロジック2920と、4つの受信機2924を含むRx PHY回路及びロジック2922と、Rxリンク制御ブロック1805と、を含む。
【0140】
Txリンクファブリックサブレイヤ回路及びロジック2910は、本明細書で説明したリンクファブリックサブレイヤオペレーションの送信側態様を実装するよう構成される。図29に示される送信バッファ及び送信VLバッファに加えて、これらのオペレーションを円滑にするための図示されていないコンポーネント及びブロックは、イーサネット(登録商標)パケット、インフィニバンドパケット、及びネイティブアーキテクチャパケットのL4カプセル化、調停ロジック、及びクレジットマネージャを実行するよう構成されるL4カプセル化サブブロックを含むファブリックパケット組み立てブロックを含む。さらに、QoSオペレーションを円滑にするためのロジックの一部が、リンクファブリックサブレイヤで実装される(これも図示されていない)。
【0141】
Txリンク転送サブレイヤ回路及びロジック2912は、本明細書で説明したリンク転送サブレイヤオペレーションの送信側態様を実装するよう構成される。これらは、リトライロジック、LTPバンドリングブロック、リプレイバッファ、NxtWrLTPポインタ、及びNxtTxLTPポインタを含む、LTPをまとめるためのコンポーネント及び論理ブロック、Tx PHYへのハンドオフのためにLTPストリームを準備するためのコンポーネント及び論理ブロック、及び、RetryReqに応答したLTPのリプレイをサポートするためのコンポーネント及び論理ブロック等の様々なコンポーネント及び論理ブロックを含む(全て図示されていない)。加えて、QoS機能及びTxリンク制御ブロック1804の一部は、Txリンク転送サブレイヤに対して実装される。
【0142】
Tx PHY回路及びロジック2914は、4つの送信機2916及びTxリンク制御ブロック1804の一部を含む単純化された形態で示されている。一般に、送信機2916は、リンクのPHYレイヤ構成に応じて、電気的送信機を備えてもよいし、光学的送信機を備えてもよい。ネットワーキング分野の当業者であれば、Tx PHY回路及びロジックは、明瞭さのために図示されていない送信側PHYレイヤオペレーションを実装するためのさらなる回路及びロジックを含むことが理解されよう。これは、エラーを低減させ伝送特性を向上させるために、高速インターコネクトに関連して実装される様々な機能を円滑にするために使用される、PHYレイヤ内の様々なサブレイヤを含む。
【0143】
Rxリンクファブリックサブレイヤ回路及びロジック2918は、本明細書で説明したリンクファブリックサブレイヤオペレーションの受信側態様を実装するよう構成される。図示される受信バッファ及び受信VLバッファに加えて、これらのオペレーションを円滑にするための図示されていないコンポーネント及びブロックは、L4パケットカプセル化解除サブブロック、クレジットリターンブロック、及びQoS受信側ロジックの一部を含むファブリックパケット再組み立てブロックを含む。
【0144】
Rxリンク転送サブレイヤ回路及びロジック2920は、本明細書で説明したリンク転送サブレイヤオペレーションの受信側態様を実装するよう構成される。これらは、図18a〜図18cに示され上述したもの等の、LTPを別々にする(アンバンドルする、バンドル解除する)ためのコンポーネント及び論理ブロック、LTP CRCエラー及びレーン毎CRCエラーを検出するためのコンポーネント及び論理ブロック、受信機トスモードオペレーション及び関連オペレーションのためのコンポーネント及び論理ブロック、並びに、QoSオペレーションのためのコンポーネント及び論理ブロック等の様々なコンポーネント及び論理ブロックを含む。
【0145】
Rx PHY回路及びロジック2922は、4つの受信機2924及びRxリンク制御ブロック1805の一部を含む単純化された形態で示されている。一般に、受信機2924は、リンクのPHYレイヤ構成に応じて、電気的受信機を備えてもよいし、光学的受信機を備えてもよく、送信機2916からリンクを介して送信された信号を受信するよう構成される。ネットワーキング分野の当業者であれば、Rx PHY回路及びロジックは、明瞭さのために図示されていない受信側PHYレイヤオペレーションを実装するためのさらなる回路及びロジックを含むことが理解されよう。これは、エラーを低減させ伝送特性を向上させるために、高速インターコネクトに関連して実装される様々な機能を円滑にするために使用される、PHYレイヤ内の様々なサブレイヤを含む。
【0146】
HFI2902は、PCIe(周辺コンポーネント相互接続エクスプレス)インタフェース(I/F)2930に結合されている送信エンジン2926及び受信エンジン2928をさらに含む。送信エンジン2926は、L4パケット(例えば、カプセル化されたTCP/IPパケットを含むイーサネット(登録商標)パケット、インフィニバンドパケット)及び/又はファブリックパケットがバッファされる送信バッファ2932を含む。一実施形態において、送信バッファ2932用のメモリの全て又は一部は、プログラムド入力/出力(PIO)空間とも呼ばれるメモリマップド入力/出力(MMIO)アドレス空間を含む。MMIOは、プロセッサ2906が、例えば、直接メモリアクセス(DMA書き込み)を介して、送信バッファ2932への直接書き込みを実行することを可能にする。
【0147】
受信エンジン2928は、受信バッファ2934及びDMAエンジン2936を含む。受信バッファは、ファブリックパケット及び/又はL4パケットを含み得る、受信ポート1802の出力をバッファするために使用される。DMAエンジン2936は、受信バッファ2934から、メモリ2908及び/又はプロセッサ2906内のメモリキャッシュレベルのうちの1つにパケットデータをコピーするためにDMA書き込みを実行するよう構成される。例えば、いくつかの実施形態において、パケットヘッダデータは、キャッシュに直接メモリアクセスされるのに対し、パケットペイロードデータは、メモリに直接メモリアクセスされる。
【0148】
プロセッサ2906は、複数のプロセッサコア2940を有するCPU2938を含む。複数のプロセッサコア2940の各々は、集積されたレベル1キャッシュ及びレベル2キャッシュ(L1/L2キャッシュ)を含み、コヒーレントインターコネクト2942に結合されている。また、コヒーレントインターコネクト2942には、メモリ2908に結合されているメモリインタフェース2944、集積入力/出力ブロック(IIO)2946、及び最終レベルキャッシュ(LLC)2948も結合されている。IIO2946は、プロセッサコア、メモリ、及びキャッシュにより使用されるコヒーレント領域と、PCIeルートコンプレックス(RC)2950及び2952のペアを含むIOコンポーネント及びIOインタフェースのために使用される非コヒーレント領域と、の間のインタフェースを提供する。当分野では周知のように、PCIe RCは、PCIeインターコネクト階層の最上位に位置し、PCIe RCには、PCIeインタフェース2954、2956、2958、及び2960により示されるような複数のPCIeインタフェース及びPCIeデバイスが結合され得る。図示されるように、PCIeインタフェース2956は、HFI2902のPCIeインタフェース2930に結合されている。
【0149】
図29に示されるようないくつかの実施形態においては、プロセッサ2912は、SoCアーキテクチャを使用する。他の実施形態においては、PCIe関連コンポーネントが、プロセッサに結合されるIOチップセット又は同様のものに集積される。さらに他の実施形態においては、プロセッサ2912及び1以上のHFI2902が、SoC2962の破線により示されるもの等のSoCに集積される。
【0150】
図29にさらに示されるように、ソフトウェアアプリケーション2964及びファブリックvNIC2966は、プロセッサコア2940のうちの1以上又はプロセッサ2906上で実行されるオペレーティングシステムによりホストされる1以上の仮想マシン上で実行されるソフトウェアコンポーネントを含む。このようなソフトウェアコンポーネントに加えて、メモリ2908(適用可能なキャッシュレベルを含む)と送信エンジン2926と受信エンジン2934との間のデータ転送を円滑にするための、メモリ2908内に実装されるさらなるバッファ及びソフトウェアコンポーネントが存在する。
【0151】
一般に、図示される回路、ロジック、及びコンポーネントは、ディスクリート型チップ、SoC、マルチチップモジュール、及び、複数のネットワークインタフェースのためのサポートを含むネットワーキング/リンクインタフェースチップを含む様々なタイプの集積回路(例えば、半導体チップ)及びモジュールにより実装されてもよい。また、本明細書で使用されている、様々なオペレーションを実行するための回路及びロジックは、組み込みロジック、組み込みプロセッサ、コントローラ、マイクロエンジンのうちの1以上を用いて、あるいは、ハードウェア、ソフトウェア、及び/又はファームウェアの任意の組合せを用いて実装されてもよい。例えば、様々な論理ブロック及び/又は回路により表されるオペレーションは、ASIC、FPGA、IPブロックライブラリを含むがこれらに限定されるものではないプログラムされた論理ゲート及び同様のものを用いて、あるいは、プロセッサ、プロセッサコア、コントローラ、マイクロコントローラ、マイクロエンジン等を含む1以上の処理要素上で実行されるソフトウェア命令又はファームウェア命令のうちの1以上を介して実行されてもよい。
【0152】
加えて、本記載の実施形態の態様は、半導体チップ、SoC、マルチチップモジュール等において実装されるだけでなく、非一時的なマシン読み取り可能な媒体において実装されてもよい。例えば、上述した設計は、半導体デバイスを設計するために使用される設計ツールに関連付けられた非一時的なマシン読み取り可能な媒体に記憶されてもよいし、且つ/あるいは、そのようなマシン読み取り可能な媒体に組み込まれてもよい。例は、VHSICハードウェア記述言語(VHDL)言語、Verilog言語若しくはSPICE言語、又は他のハードウェア記述言語でフォーマット化されたネットリストを含む。いくつかのネットリスト例は、挙動レベルネットリスト、レジスタ転送レベル(RTL)ネットリスト、ゲートレベルネットリスト、及びトランジスタレベルネットリストを含む。マシン読み取り可能な媒体はまた、GDS−IIファイル等のレイアウト情報を有する媒体を含む。
【0153】
さらに、半導体チップ設計のためのネットリストファイル又は他のマシン読み取り可能な媒体は、上述した教示の方法を実行するために、シミュレーション環境において使用され得る。
【0154】
特定の実装例を参照していくつかの実施形態について説明したが、他の実装例も、いくつかの実施形態に従って可能である。さらに、図示及び/又は説明した要素又は他の特徴の配置及び/又は順序は、図示及び説明した特定の形で構成される必要はない。多くの他の構成も、いくつかの実施形態に従って可能である。
【0155】
図示した各システムにおいて、いくつかの場合における要素は、表された要素が、異なっていることもあるし、且つ/あるいは、類似していることもあることを示すために、それぞれ異なる参照符号を有することもあるし、同じ参照符号を有することもある。しかしながら、要素は、異なる実装を有するのに十分柔軟であり得、図示又は説明したシステムの一部又は全てとともに機能する。図示した様々な要素は、同じであることもあるし、異なることもある。どれが第1の要素と呼ばれ、どれが第2の要素と呼ばれるかは任意である。
【0156】
前述の詳細な説明及び特許請求の範囲における「n(斜体)」、「m(斜体)」、「k(斜体)」等のイタリック文字は、整数を表すために使用され、特定の文字の使用は、特定の実施形態に限定されるものではない。さらに、別の整数を表すために、同じ文字が、別の請求項において使用されることもあるし、異なる文字が使用されることもある。加えて、詳細な説明における特定の文字の使用は、詳細な説明における同じ主題に関連する請求項において使用される文字と一致することもあるし一致しないこともある。
【0157】
詳細な説明及び特許請求の範囲において、「結合されている」及び「接続されている」という用語、並びにそれらの派生語が、使用されているかもしれない。これらの用語は、互いの同義語として意図されるものではないことを理解すべきである。そうではなく、特定の実施形態において、「接続されている」は、2以上の要素が、互いに直接的に物理的に接触している、あるいは互いに直接的に電気的に接触していることを示すために使用され得る。「結合されている」は、2以上の要素が、直接的に物理的に接触している、あるいは直接的に電気的に接触していることを意味し得る。しかしながら、「結合されている」はまた、2以上の要素が、互いに直接的に接触してはいないが、それでも互いと協働している、あるいは互いとインタラクトしていることも意味し得る。
【0158】
一本発明のうちの一実装例又は一例である。本明細書における「ある実施形態」、「一実施形態」、「いくつかの実施形態」、又は「他の実施形態」との言及は、その実施形態に関連して説明される特定の特徴、構造、又は特性が、少なくともいくつかの実施形態に含まれることを意味するものであり、必ずしも本発明の全ての実施形態に含まれるとは限らない。本明細書の様々な箇所における「ある実施形態」、「一実施形態」、又は「いくつかの実施形態」の出現は、必ずしも全て同じ実施形態を指しているとは限らない。
【0159】
説明及び図示した全てのコンポーネント、特徴、構造、特性等が、特定の1以上の実施形態に含まれる必要はない。本明細書が、コンポーネント、特徴、構造、又は特性が含まれてもよいと記載している場合、例えば、その特定のコンポーネント、特徴、構造、又は特性が含まれる必要はない。本明細書又は特許請求の範囲が、「a」又は「an」の要素に言及している場合、これは、1つのみの要素が存在することを意味するものではない。本明細書又は特許請求の範囲が、「さらなる」要素に言及している場合、これは、2以上のさらなる要素が存在することを排除するものではない。
【0160】
要約書に記載しているものを含め、本発明の例示的な実施形態の説明は、網羅的であることを意図するものでもないし、開示した正確な形態に本発明を限定することを意図するものでもない。本発明の特定の実施形態及び例が、例示の目的のために、本明細書で説明されているが、当業者は、本発明の範囲内で様々な均等の変更形態も可能であることを認識されよう。
【0161】
詳細な説明に鑑みて、そのような変更形態が、本発明に対して可能である。特許請求の範囲において使用される用語は、本明細書及び図面で開示した特定の実施形態に本発明を限定するよう解釈されるべきでない。そうではなく、本発明の範囲は、特許請求の範囲により完全に定められるべきであり、特許請求の範囲は、特許請求の範囲の解釈の確立された原則に従って解釈されるべきである。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9a】
【図9b】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18a】
【図18b】
【図18c】
【図19】
【図20】
【図21】
【図22a】
【図22b】
【図22c】
【図22d】
【図22e】
【図23a】
【図23b】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【手続補正書】
【提出日】2016年4月25日
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
リンクインタフェースであって、
複数のファブリックパケットを生成し、
各ファブリックパケットを複数のデータユニットに分割し、
前記データユニットをまとめて、複数のリンクパケットを形成する、
ための回路及びロジック
を含むリンクインタフェース
を備え、
前記複数のリンクパケットのうちの少なくとも1つは、少なくとも2つのファブリックパケットからのデータユニットを含む、装置。
【請求項2】
前記複数のデータユニットのうちの1以上のデータユニットは、固定サイズを有するフリットを含む、請求項1記載の装置。
【請求項3】
前記複数のリンクパケットの1以上のデータユニットは、予め定められた数のフリットを含む固定サイズを有する、請求項2記載の装置。
【請求項4】
前記ファブリックパケットのうちの少なくとも1つは、可変サイズを有する、請求項3記載の装置。
【請求項5】
前記複数のファブリックパケットのうちの少なくとも1つは、前記予め定められた数のフリットよりも少ない第1の数のフリットを含み、前記複数のファブリックパケットのうちの少なくとも1つは、前記予め定められた数のフリットよりも多い第2の数のフリットを含む、請求項3記載の装置。
【請求項6】
前記リンクインタフェースは、前記複数のリンクパケットのうちの少なくとも1つのリンクパケットに含まれるデータに対するデータインテグリティチェック値を計算して、前記データインテグリティチェック値を前記少なくとも1つのリンクパケットに含めるための回路及びロジックをさらに含む、請求項1記載の装置。
【請求項7】
前記複数のファブリックパケットのうちの少なくとも1つは、ヘッドフリットを含む最初のデータユニットと、前記最初のデータユニットに続く複数のボディフリットと、最後にテールフリットを含む最後のデータユニットと、を含む複数の異なるタイプのデータユニットに分割される、請求項1記載の装置。
【請求項8】
リンクパケット内の前記データユニットのうちの少なくとも1つは、フリットタイプビットを含む、請求項7記載の装置。
【請求項9】
リンクパケット内のいずれかの場所に、前記複数の異なるタイプのデータユニットのうちのいずれかを配置することができる、請求項7記載の装置。
【請求項10】
前記複数のリンクパケットのうちの1つは、アイドルデータユニットを含む少なくとも1つのタイプのデータユニットを含む、請求項1記載の装置。
【請求項11】
前記複数のリンクパケットのうちの1つは、制御データユニットを含む少なくとも1つのタイプのデータユニットを含み、
前記リンクインタフェースは、
受信されたリンクパケット内の制御データユニットを検出し、
前記制御データユニットにより特定される制御オペレーションを実行する、
ためのさらなる回路及びロジックを含む、請求項10記載の装置。
【請求項12】
前記装置は、送信ポートを含み、前記送信ポートから送信される前記複数のリンクパケットは、第1の複数のパケットを含み、
前記リンクインタフェースは、
第2の複数のファブリックパケットから分割されたデータを含むデータユニットを含む第2の複数のリンクパケットを受信し、
前記第2の複数のリンクパケットからデータユニットを抽出し、
該データユニットを再組み立てして、前記第2の複数のファブリックパケットを再生成する、
ための回路及びロジックを含み、
前記第2の複数のリンクパケットのうちの少なくとも1つは、少なくとも2つのファブリックパケットからのデータユニットを含む、請求項1記載の装置。
【請求項13】
各リンクパケットは、送信されたとき、該リンクパケットに含まれるデータに対して計算された送信側データインテグリティチェック値を含み、
前記リンクインタフェースは、
各リンクパケット内の受信されたデータに対する受信側データインテグリティチェック値を計算し、
前記受信側データインテグリティチェック値を前記送信側データインテグリティチェック値と比較して、該リンクパケットがエラーを有するかどうかを検出し、
該リンクパケットがエラーを有する場合、該リンクパケットの送信元のリンクピアに再送信リクエストを送信する、
ためのさらなる回路及びロジックを含む、請求項1記載の装置。
【請求項14】
前記リンクインタフェースは、
リンクピアから再送信リクエストを受信したことに応答して、
該再送信リクエストがなされたリンクパケットを特定し、
該リンクパケットを再送信する、
ためのさらなる回路及びロジックを含む、請求項13記載の装置。
【請求項15】
前記リンクインタフェースの前記回路及びロジックは、さらに、前記複数のリンクパケットを、リンクを介して受信機に向けて送信する、請求項1記載の装置。
【請求項16】
前記リンクインタフェースは、送信ポート及び受信ポートをさらに含む、請求項1記載の装置。
【請求項17】
前記装置は、メモリ及び少なくとも1つのプロセッサコアをさらに備える、請求項1記載の装置。
【請求項18】
前記リンクインタフェース、前記少なくとも1つのプロセッサコア、及び前記メモリは、同じチップパッケージ内に配置されている、請求項17記載の装置。
【請求項19】
前記リンクインタフェース、前記少なくとも1つのプロセッサコア、及び前記メモリは、同じ集積チップ上に集積されている、請求項17記載の装置。
【請求項20】
複数の第1のタイプのパケットを生成するステップと、
前記複数の第1のタイプのパケットを複数のデータユニットに分割するステップと、
受信機に向けた送信のために、前記データユニットを複数の第2のタイプのパケットにまとめるステップと、
を含み、
前記複数の第2のタイプのパケットのうちの少なくとも1つは、少なくとも2つの第1のタイプのパケットからのデータユニットを含む、方法。
【請求項21】
前記複数のデータユニットのうちの1以上のデータユニットは、固定サイズを有する、請求項20記載の方法。
【請求項22】
前記複数の第2のタイプのパケットのうちの1以上の第2のタイプのパケットは、予め定められた数のデータユニットを含む、請求項21記載の方法。
【請求項23】
前記複数の第1のタイプのパケットのうちの少なくとも1つは、前記予め定められた数のデータユニットよりも少ない第1の数のデータユニットを含み、前記複数の第1のタイプのパケットのうちの少なくとも1つは、前記予め定められた数のデータユニットよりも多い第2の数のデータユニットを含む、請求項22記載の方法。
【請求項24】
前記方法は、複数のリンクを含むファブリックにおいて第1のリンクを介してファブリックスイッチの受信ポートに結合されている第1のファブリックエンドポイントの送信ポートにより実行され、少なくとも1つの第1のタイプのパケットは、前記第1のリンクを含む複数のリンクを含む転送パスを介して、第2のファブリックエンドポイントに送信され、前記第2のタイプのパケットは、前記第1のリンクを介して、前記受信ポートに送信され、さらに転送されることはない、請求項20記載の方法。
【請求項25】
前記複数の第2のタイプのパケットのうちの1以上の第2のタイプのパケットは、前記受信機により受信された第2のタイプのパケット内のデータがエラーを有さないことを確認するために使用されるデータインテグリティチェック値を含み、前記複数の第2のタイプのパケットのうちの1以上の第2のタイプのパケットは、前記第2のタイプのパケットの元の送信においてエラーが検出されたときに再送信される再送信ユニットを含む、請求項20記載の方法。
【請求項26】
前記複数の第1のタイプのパケットのうちの1以上は、ヘッドデータユニットを含む最初のデータユニットと、前記最初のデータユニットに続く複数のボディデータユニットと、最後にテールデータユニットを含む最後のデータユニットと、を含む複数の異なるタイプのデータユニットに分割される、請求項20記載の方法。
【請求項27】
第2のタイプのパケット内のいずれかの場所に、前記複数の異なるタイプのデータユニットのうちのいずれかを配置することができる、請求項26記載の方法。
【請求項28】
前記第2のタイプのパケットのうちの1つは、制御データユニットを含む少なくとも1つのタイプのデータユニットを含む、請求項20記載の方法。
【請求項29】
第2の複数のファブリックパケットから分割されたデータを含むデータユニットを含む第2の複数のリンクパケットを受信するステップと、
前記第2の複数のリンクパケットからデータユニットを抽出するステップと、
該データユニットを再組み立てして、前記第2の複数のファブリックパケットを再生成するステップと、
をさらに含み、
前記第2の複数のリンクパケットのうちの少なくとも1つは、少なくとも2つのファブリックパケットからのデータユニットを含む、請求項20記載の方法。
【請求項30】
前記方法は、前記複数の第2のタイプのパケットを、リンクを介して前記受信機に向けて送信するステップをさらに含む、請求項20記載の方法。
【請求項31】
第1のコンポーネント及び第2のコンポーネントを備えたシステムであって、前記第1のコンポーネント及び前記第2のコンポーネントは、リンクに結合されるよう構成されているリンクインタフェースであって、他方のリンクインタフェースとのリンクピアとして動作するよう構成されているリンクインタフェースを含み、前記第1のコンポーネント及び前記第2のコンポーネントの各リンクインタフェースは、
第1の複数のファブリックパケットを生成し、
前記第1の複数のファブリックパケットのうちの1以上を複数のフリットに分割し、
各リンクインタフェースのリンクピアのリンクインタフェースに向けた前記リンクを介する送信のために、前記フリットを第1の複数のリンクパケットにまとめ、
各リンクインタフェースのリンクピアから前記リンクを介して送信された第2の複数のリンクパケットを受信し、ここで、前記第2の複数のリンクパケットは、第2の複数のファブリックパケットから分割されたフリットを含み、
前記第2の複数のリンクパケットからフリットを抽出し、
該フリットを再組み立てして、前記第2の複数のファブリックパケットを再生成する、
よう構成されており、
前記第1の複数のリンクパケット及び前記第2の複数のリンクパケットの少なくとも一部は、少なくとも2つのファブリックパケットからのフリットを含む、システム。
【請求項32】
前記複数のフリットのうちの1以上のフリットは、固定サイズを有し、前記リンクパケットのうちの1以上のリンクパケットの各々は、固定数のフリットを有し、前記第1の複数のファブリックパケット及び前記第2の複数のファブリックパケットのサイズは変わる、請求項31記載のシステム。
【請求項33】
前記第1のコンポーネント及び前記第2のコンポーネントの各リンクインタフェースは、
送信される少なくとも1つのリンクパケットに含まれるデータに対する送信側データインテグリティチェック値を計算して、前記送信側データインテグリティチェック値を前記少なくとも1つのリンクパケットに含めるための回路及びロジックを有する送信ポートと、
受信された少なくとも1つのリンクパケット内の受信されたデータに対する受信側データインテグリティチェック値を計算し、前記受信側データインテグリティチェック値を前記送信側データインテグリティチェック値と比較して、前記少なくとも1つのリンクパケットがエラーを有するかどうかを検出するための回路及びロジックを有する受信ポートと、
を含む、請求項31記載のシステム。
【請求項34】
前記第1のコンポーネント及び前記第2のコンポーネントのうちの少なくとも1つは、リンクインタフェースを含むホストファブリックインタフェースであって、
送信される前記複数のファブリックパケットのうちの少なくとも1つのファブリックパケットに含まれるデータに対する送信側巡回冗長チェックサム(CRC)を計算し、
前記の再生成された複数のファブリックパケットのうちの少なくとも1つの再生成されたファブリックパケットに含まれるデータに対する受信側CRCを計算し、
前記送信側CRCと前記受信側CRCとを比較して、前記少なくとも1つの再生成されたファブリックパケットがエラーを含むかどうかを判定する、
ための回路及びロジックをさらに含むホストファブリックインタフェースを含む、請求項31記載のシステム。
【請求項35】
前記第1のコンポーネント及び前記第2のコンポーネントのうちの少なくとも1つは、リンクインタフェースが集積されているホストインタフェースチップを含み、
前記ホストインタフェースチップは、
少なくとも1つの送信バッファを含む、前記リンクインタフェースの前記送信ポートに結合されている送信エンジンと、
少なくとも1つの受信バッファを含む、前記リンクインタフェースの前記受信ポートに結合されている受信エンジンと、
前記送信エンジン及び前記受信エンジンの各々に結合されている周辺コンポーネント相互接続エクスプレス(PCIe)インタフェースと、
を含む、請求項33記載のシステム。
【請求項36】
前記第1のコンポーネント及び前記第2のコンポーネントのうちの少なくとも1つは、
システムオンチップ(SoC)であって、
リンクインタフェースが集積されているホストファブリックインタフェースであって、
少なくとも1つの送信バッファを含む、前記リンクインタフェースの前記送信ポートに結合されている送信エンジンと、
少なくとも1つの受信バッファを含む、前記リンクインタフェースの前記受信ポートに結合されている受信エンジンと、
前記送信エンジン及び前記受信エンジンの各々に結合されている周辺コンポーネント相互接続エクスプレス(PCIe)インタフェースと、
を含むホストファブリックインタフェース
を含むSoCと、
前記ホストファブリックインタフェースの前記PCIeインタフェースに結合されているPCIeインタフェースを含むプロセッサと、
を含む、請求項33記載のシステム。
【請求項37】
リンクインタフェースを含む装置内のプロセッサ及び組み込みロジックのうちの少なくとも1つの上で実行されたときに、前記装置に、
複数のファブリックパケットを生成させ、
各ファブリックパケットを複数のデータユニットに分割させ、
前記データユニットをまとめさせて、複数のリンクパケットを形成させる、
プログラムであって、
前記複数のリンクパケットのうちの少なくとも1つは、少なくとも2つのファブリックパケットからのデータユニットを含む、プログラム。
【請求項38】
前記複数のデータユニットのうちの1以上のデータユニットは、固定サイズを有するフリットを含む、請求項37記載のプログラム。
【請求項39】
前記複数のリンクパケットの1以上のデータユニットは、予め定められた数のフリットを含む固定サイズを有する、請求項38記載のプログラム。
【請求項40】
前記ファブリックパケットのうちの少なくとも1つは、可変サイズを有する、請求項39記載のプログラム。
【請求項41】
前記複数のファブリックパケットのうちの少なくとも1つは、前記予め定められた数のフリットよりも少ない第1の数のフリットを含み、前記複数のファブリックパケットのうちの少なくとも1つは、前記予め定められた数のフリットよりも多い第2の数のフリットを含む、請求項39記載のプログラム。
【請求項42】
前記プログラムは、前記装置に、さらに、前記複数のリンクパケットのうちの少なくとも1つのリンクパケットに含まれるデータに対するデータインテグリティチェック値を計算させて、前記データインテグリティチェック値を前記少なくとも1つのリンクパケットに含めさせる、請求項37記載のプログラム。
【請求項43】
前記複数のファブリックパケットのうちの少なくとも1つは、ヘッドフリットを含む最初のデータユニットと、前記最初のデータユニットに続く複数のボディフリットと、最後にテールフリットを含む最後のデータユニットと、を含む複数の異なるタイプのデータユニットに分割される、請求項37記載のプログラム。
【請求項44】
リンクパケット内の前記データユニットのうちの少なくとも1つは、フリットタイプビットを含む、請求項43記載のプログラム。
【請求項45】
リンクパケット内のいずれかの場所に、前記複数の異なるタイプのデータユニットのうちのいずれかを配置することができる、請求項43記載のプログラム。
【請求項46】
前記複数のリンクパケットのうちの1つは、アイドルデータユニットを含む少なくとも1つのタイプのデータユニットを含む、請求項37記載のプログラム。
【請求項47】
前記複数のリンクパケットのうちの1つは、制御データユニットを含む少なくとも1つのタイプのデータユニットを含み、
前記プログラムは、前記装置に、さらに、
受信されたリンクパケット内の制御データユニットを検出させ、
前記制御データユニットにより特定される制御オペレーションを実行させる、請求項46記載のプログラム。
【請求項48】
前記装置は、送信ポートを含み、前記送信ポートから送信される複数のリンクパケットは、第1の複数のパケットを含み、
前記プログラムは、前記装置に、さらに、
第2の複数のファブリックパケットから分割されたデータを含むデータユニットを含む第2の複数のリンクパケットを受信させ、
前記第2の複数のリンクパケットからデータユニットを抽出させ、
該データユニットを再組み立てさせて、前記第2の複数のファブリックパケットを再生成させ、
前記第2の複数のリンクパケットのうちの少なくとも1つは、少なくとも2つのファブリックパケットからのデータユニットを含む、請求項37記載のプログラム。
【請求項49】
各リンクパケットは、送信されたとき、該リンクパケットに含まれるデータに対して計算された送信側データインテグリティチェック値を含み、
前記プログラムは、前記装置に、さらに、
各リンクパケット内の受信されたデータに対する受信側データインテグリティチェック値を計算させ、
前記受信側データインテグリティチェック値を前記送信側データインテグリティチェック値と比較させて、該リンクパケットがエラーを有するかどうかを検出させ、
該リンクパケットがエラーを有する場合、該リンクパケットの送信元のリンクピアに再送信リクエストを送信させる、請求項37記載のプログラム。
【請求項50】
前記プログラムは、前記装置に、さらに、
リンクピアから再送信リクエストを受信したことに応答して、
該再送信リクエストがなされたリンクパケットを特定させ、
該リンクパケットを再送信させる、請求項49記載のプログラム。
【請求項51】
請求項37乃至50いずれか一項記載のプログラムを記憶したマシン読み取り可能な記憶媒体。
【国際調査報告】

[広告欄]

ログインすれば広告は減ります

ログインすれば広告は減ります