(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-07-05
(54)【発明の名称】ネットワークインターフェースデバイス
(51)【国際特許分類】
H04L 49/111 20220101AFI20240628BHJP
【FI】
H04L49/111
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023575890
(86)(22)【出願日】2022-04-26
(85)【翻訳文提出日】2023-12-08
(86)【国際出願番号】 US2022026385
(87)【国際公開番号】W WO2022271267
(87)【国際公開日】2022-12-29
(32)【優先日】2021-06-24
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ポープ,スティーブン・レスリー
(72)【発明者】
【氏名】ロバーツ,デレク・エドワード
(72)【発明者】
【氏名】キタリエブ,ドミトリ
(72)【発明者】
【氏名】タートン,ニール・ダンカン
(72)【発明者】
【氏名】リドック,デイビッド・ジェイムズ
(72)【発明者】
【氏名】ソハン,リプデュマン
【テーマコード(参考)】
5K030
【Fターム(参考)】
5K030GA01
5K030KA13
(57)【要約】
ネットワークインターフェースデバイスは、データソースと、データシンクと、データソースからデータを受信することと、データシンクにデータを出力することと、を行うように構成されたインターコネクトと、を有する。インターコネクトは、メモリセルを有するメモリを有する。各メモリセルは、バスセグメントの幅に一致する幅を有する。メモリは、バスセグメントの幅に対応する幅を有する第1の書き込み出力を受信するように構成されている。書き込み出力は、メモリの第1のメモリセルに書き込まれる第1のデータを含み、第1のデータは、データソースからのものである。
【特許請求の範囲】
【請求項1】
ネットワークインターフェースデバイスであって、前記ネットワークインターフェースデバイスが、
データソースと、
データシンクと、
前記データソースからデータを受信することと、前記データシンクにデータを出力することと、を行うように構成されたインターコネクトであって、前記インターコネクトが、
メモリセルを有するメモリであって、各メモリセルが、バスセグメントの幅に一致する幅を有し、前記メモリが、前記バスセグメントの幅に対応する幅を有する第1の書き込み出力を受信するように構成されており、前記第1の書き込み出力が、前記メモリの第1のメモリセルに書き込まれる第1のデータを含み、前記第1のデータが、前記データソースからのものである、メモリを含む、インターコネクトと、を備える、ネットワークインターフェースデバイス。
【請求項2】
前記データソース及び前記データシンクを前記インターコネクトに接続する1つ以上のセグメント化されたバスを備え、前記セグメント化されたバスが、前記バスセグメントの幅を有するバスセグメントを含む、請求項1に記載のネットワークインターフェースデバイス。
【請求項3】
前記メモリが、前記データシンクからの読み出し要求に応答して、前記第1のデータを出力するように構成されており、前記出力が、前記バスセグメントの幅を有する、請求項1に記載のネットワークインターフェースデバイス。
【請求項4】
前記インターコネクトが、複数の要求を受信するように構成されたメモリマルチプレクサを含み、前記複数の要求が、複数のデータシンクからの複数の読み出し要求と、複数のデータシンクからの複数の書き込み要求と、を含み、前記メモリマルチプレクサが、前記要求のうちのどの1つ以上を進めるか、かつどの1つ以上の要求をバックプレッシャするかを判定するように構成されている、請求項1に記載のネットワークインターフェースデバイス。
【請求項5】
前記メモリマルチプレクサは、2つの要求が前記メモリの同じ前記メモリセルに対するものであると判定することと、どの要求がより大きい一連の要求の一部であるかに基づいて、前記2つの要求のうちのどちらを進めるかを判定することと、を行うように構成されている、請求項4に記載のネットワークインターフェースデバイス。
【請求項6】
前記インターコネクトが、構成可能なインターフェースを含み、前記構成可能なインターフェースが、1つ以上のインターフェースを提供するように構成可能であり、各個々のインターフェースのサイズが、前記バスセグメントの幅の整数倍に等しいサイズを有し、前記整数倍が、1以上である、請求項1に記載のネットワークインターフェースデバイス。
【請求項7】
前記構成可能なインターフェースの前記個々のインターフェースのうちの異なるものが、異なるデータシンクのためのデータを受信するように構成されている、請求項6に記載のネットワークインターフェースデバイス。
【請求項8】
前記構成可能なインターフェースの全幅が、バスの全てのバスセグメントの全幅に等しい、請求項6に記載のネットワークインターフェースデバイス。
【請求項9】
前記インターコネクトが、インターフェースを含み、前記インターフェースが、バスの全てのバスセグメントの幅に等しい幅を有し、前記インターフェースが、複数の異なるデータソースから同時にデータを受信するように構成されている、請求項1に記載のネットワークインターフェースデバイス。
【請求項10】
前記データソースから前記第1のデータに対する第1の書き込み要求を受信することと、前記第1のメモリセルのアドレスを前記第1の書き込み要求の前記第1のデータと関連付けることと、前記第1の書き込み出力を提供することと、を行うように構成された書き込みパイプを備える、請求項1に記載のネットワークインターフェースデバイス。
【請求項11】
前記書き込みパイプは、前記第1の書き込み出力が前記書き込みパイプによって出力される前に、前記第1の書き込み出力を記憶するためのバッファを含む、請求項10に記載のネットワークインターフェースデバイス。
【請求項12】
前記データシンクから読み出し要求を受信することと、データが読み出される前記メモリのメモリセルのアドレスを前記読み出し要求と関連付けることと、を行うように構成された読み出し要求パイプを備える、請求項1に記載のネットワークインターフェースデバイス。
【請求項13】
前記データソースが、カプセルを出力するように構成され、前記データシンクが、カプセルを受信するように構成されており、前記カプセルが、データ及びルーティング情報を含む、請求項1に記載のネットワークインターフェースデバイス。
【請求項14】
各メモリセルが、バスセグメントの前記幅であるポート幅を有するランダムアクセスメモリを含む、請求項1に記載のネットワークインターフェース。
【請求項15】
ネットワークインターフェースデバイスにおける方法であって、前記方法が、
前記ネットワークインターフェースデバイスのデータソースから、前記ネットワークインターフェースデバイスのメモリにおいて、バスセグメントの幅に対応する幅を有する第1の書き込み出力を受信することであって、前記書き込み出力が、第1のデータを含む、受信することと、
前記メモリの第1のメモリセルに前記第1のデータを書き込むことであって、前記第1のメモリセルが、前記バスセグメントの幅に一致する幅を有する、書き込むことと、を含む、方法。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、ネットワークインターフェースデバイスに関する。
【背景技術】
【0002】
ネットワークインターフェースデバイス(例えば、ネットワークインターフェースカード(network interface card、NIC)又はSmartNIC)が知られており、典型的には、コンピューティングデバイスとネットワークとの間のインターフェースを提供するために使用される。いくつかのネットワークインターフェースデバイスは、ネットワークから受信されるデータを処理するように、かつ/又はネットワーク上に置くデータを処理するように構成することができる。
【0003】
いくつかのネットワークインターフェースデバイスについては、具体的なアプリケーション及び/又は増加するデータレートのサポートに向けて、設計の増加された特殊化を提供しようとする動きが存在し得る。
【発明の概要】
【0004】
開示されるネットワークインターフェースデバイスは、データソースと、データシンクと、データソースからデータを受信することと、データシンクにデータを出力することと、を行うように構成されたインターコネクトであって、インターコネクトが、メモリセルを有するメモリであって、各メモリセルが、バスセグメントの幅に一致する幅を有し、メモリが、バスセグメントの幅に対応する幅を有する第1の書き込み出力を受信するように構成されており、書き込み出力が、メモリの第1のメモリセルに書き込まれる第1のデータを含み、第1のデータが、データソースからのものである、メモリを含む、インターコネクトと、を備える。
【0005】
ネットワークインターフェースは、データソース及びデータシンクをインターコネクトに接続する1つ以上のセグメント化されたバスを備え得、セグメント化されたバスは、バスセグメントの幅を有するバスセグメントを含む。
【0006】
メモリは、データシンクからの読み出し要求に応答して、第1のデータを出力するように構成され得、この出力は、バスセグメントの幅を有する。
【0007】
ネットワークインターフェースは、複数のデータソースと、複数のデータシンクと、を備え得る。
【0008】
インターコネクトは、複数の要求を受信するように構成されたメモリマルチプレクサを備え得、複数の要求は、複数のデータシンクからの複数の読み出し要求と、複数のデータシンクからの複数の書き込み要求と、を含み、メモリマルチプレクサは、要求のうちのどの1つ以上を進めるか、かつどの1つ以上の要求をバックプレッシャするかを判定するように構成されている。
【0009】
メモリマルチプレクサは、2つの要求がメモリの同じメモリセルに対するものであると判定することと、2つの要求のうちのどちらを進めるかを判定することと、を行うように構成され得る。
【0010】
メモリマルチプレクサは、進める要求が、より大きい一連の要求の一部である要求であると判定するように構成され得る。
【0011】
インターコネクトは、構成可能なインターフェースを備え得、構成可能なインターフェースは、1つ以上のインターフェースを提供するように構成可能であり、各個々のインターフェースのサイズは、バスセグメントの幅の整数倍に等しいサイズを有し、整数倍は、1以上である。
【0012】
構成可能なインターフェースの個々のインターフェースのうちの異なるものは、異なるデータシンクのためのデータを受信するように構成され得る。
【0013】
構成可能なインターフェースの全幅は、バスの全てのバスセグメントの全幅に等しくあり得る。
【0014】
インターコネクトは、インターフェースを備え得、インターフェースは、バスの全てのバスセグメントの幅に等しい幅を有し、インターフェースは、複数の異なるデータソースから同時にデータを受信するように構成されている。
【0015】
ネットワークインターフェースデバイスは、データソースから第1のデータに対する第1の書き込み要求を受信することと、第1のメモリセルのアドレスを第1の書き込み要求の第1のデータと関連付けることと、第1の書き込み出力を提供することと、を行うように構成された書き込みパイプを備え得る。
【0016】
書き込みパイプは、第1の書き込み出力が書き込みパイプによって出力される前に、第1の書き込み出力を記憶するためのバッファを備え得る。
【0017】
ネットワークインターフェースデバイスは、データシンクから読み出し要求を受信することと、データが読み出されるメモリのメモリセルのアドレスを関連付けることと、を行うように構成された読み出し要求パイプを備え得る。
【0018】
データソースは、カプセルを出力するように構成され得、データシンクは、カプセルを受信するように構成され得、カプセルは、データ及びルーティング情報を含む。
【0019】
カプセルは、仮想チャネル情報を更に含み得る。
【0020】
メモリは、複数のメモリバンクを含み得、各メモリバンクは、複数のメモリセルを有する。
【0021】
各メモリセルは、バスセグメントの幅であるポート幅を有するランダムアクセスメモリを含む。
【0022】
別の態様によれば、ネットワークインターフェースデバイスにおける方法が提供され、本方法は、ネットワークインターフェースデバイスのデータソースから、ネットワークインターフェースデバイスのメモリにおいて、バスセグメントの幅に対応する幅を有する第1の書き込み出力を受信することであって、書き込み出力が、第1のデータを含む、受信することと、メモリの第1のメモリセルに第1のデータを書き込むことであって、第1のメモリセルが、バスセグメントの幅に一致する幅を有する、書き込むことと、を含む。
【0023】
この概要のセクションは、単に特定の概念を導入するために提供され、特許請求される主題の任意の重要な又は本質的な特徴を特定するためには提供されない。本発明の構成の他の特徴は、添付図面及び以下の詳細な説明から明らかになるであろう。
【0024】
いくつかの実施形態は、添付の図面においてほんの一例として例解される。しかしながら、図面は、示された特定の実装形態のみに配置を限定するものと解釈されるべきではない。以下の詳細な説明を検討し、図面を参照すると、種々の態様及び利点が明らかになるであろう。
【図面の簡単な説明】
【0025】
【
図1】ネットワークインターフェースデバイスを介してネットワークに結合されたデータ処理システムの概略図を示す。
【
図2】いくつかの実施形態のネットワークインターフェースデバイスを示す。
【
図3】いくつかの実施形態のネットワークインターフェースデバイスのサブシステムを概略的に示す。
【
図4】いくつかの実施形態のホスト及びネットワークインターフェースデバイスの概略図を示す。
【
図5】いくつかの実施形態で使用されるカプセルを示す。
【
図6】いくつかの実施形態の構成可能なダイレクトメモリアクセスアーキテクチャを示す。
【
図7a】いくつかの実施形態の構成可能でスケーラブルなインターコネクト(composable scalable interconnect、cSI)のインターフェースを概略的に示す。
【
図7b】いくつかの実施形態の構成可能でスケーラブルなインターコネクト(cSI)をより詳細に示す。
【
図7c】いくつかの実施形態の構成可能でスケーラブルなインターコネクト(cSI)の例示的な仮想チャネルを示す。
【
図9】
図7bのcSIの読み出し要求パイプを示す。
【
図10】
図7bのcSIの読み出し応答パイプを示す。
【
図11】構成可能なデータムーバcDMをより詳細に示す。
【発明を実施するための形態】
【0026】
本開示は、新規の特徴を定義する特許請求の範囲で終わるが、本開示内で説明される種々の特徴は、図面と併せて説明を考慮することからより良く理解されると考えられる。本明細書に記載されるプロセス、機械、製造、及びそれらの任意の変形例は、例解の目的で提供される。本開示内で説明される特定の構造的及び機能的詳細は、限定として解釈されるべきではなく、単に、特許請求の範囲のための基礎として、及び事実上任意の適切に詳述された構造において説明される特徴を種々に採用するように当業者に教示するための代表的な基礎として解釈されるべきである。更に、本開示内で使用される用語及び句は、限定することを意図するものではなく、説明される特徴の理解可能な説明を提供することを意図するものである。
【0027】
データがデータチャネルを介して2つのデータ処理システム間で転送されるときに、データ処理システムの各々は、チャネルにわたって通信することを許可する好適なネットワークインターフェースを有する。データチャネルは、ネットワークによって提供され得る。例えば、ネットワークは、イーサネット(登録商標)技術又は任意の他の好適な技術に基づき得る。データ処理システムには、ネットワークプロトコルの物理的及び論理的要件をサポートすることができるネットワークインターフェースが提供され得る。ネットワークインターフェースの物理的ハードウェア構成要素は、ネットワークインターフェースデバイス又はネットワークインターフェースカード(network interface card、NIC)と称される。本明細書では、ネットワークインターフェースデバイスは、NICと称される。NICは、集積回路又はハードウェアモジュールなどの任意の好適なハードウェアの形態で提供され得ることを理解されたい。NICは、必ずしもカードの形態で実装されるとは限らない。
【0028】
コンピュータシステムは、ユーザレベルアプリケーションがネットワークと通信するためのオペレーティングシステム(operating system、OS)を有し得る。カーネルとして知られているオペレーティングシステムの一部分は、アプリケーションと、ネットワークインターフェースデバイスに固有のデバイスドライバとの間でコマンド及びデータを変換するためのプロトコルスタックと、ネットワークインターフェースデバイスを直接制御するためのデバイスドライバと、を含む。これらの機能をオペレーティングシステムカーネル内に提供することによって、ネットワークインターフェースデバイスの複雑さ及びネットワークインターフェースデバイス間の違いをユーザレベルアプリケーションから隠すことができる。加えて、ネットワークハードウェア及び他のシステムリソース(メモリなど)を多くのアプリケーションで安全に共有することができ、欠陥のあるアプリケーション又は悪意のあるアプリケーションからシステムを守ることができる。
【0029】
ネットワークにわたって送信を実行するための典型的なデータ処理システム100を、
図1に示す。データ処理システム100は、ホストをネットワーク103にインターフェース接続するように配置されているネットワークインターフェースデバイス109に結合されたホストコンピューティングデバイス101を含む。ホストコンピューティングデバイス101は、1つ以上のユーザレベルアプリケーション105をサポートするオペレーティングシステム104を含む。ホストコンピューティングデバイス101はまた、ネットワークプロトコルスタック(図示せず)を含み得る。ネットワークプロトコルスタックは、送信制御プロトコル(Transmission Control Protocol、TCP)スタック又は任意の他の好適なプロトコルスタックであり得る。プロトコルスタックは、トランスポートプロトコルスタックであり得る。
【0030】
アプリケーション105は、ソケットを開き、ソケットに対してデータを読み書きすることによって、TCP/IP(インターネットプロトコル)メッセージを送り、かつ受信し得、オペレーティングシステム104は、ネットワークにわたってメッセージを伝送させる。
【0031】
いくつかのシステムは、プロトコルスタックをネットワークインターフェースデバイス109に少なくとも部分的にオフロードし得る。例えば、スタックがTCPスタックである場合、ネットワークインターフェースデバイス109は、TCPプロトコル処理を実施するためのTCPオフロードエンジン(TCP Offload Engine、TOE)を備え得る。ホストコンピューティングデバイス101の代わりに、ネットワークインターフェースデバイス109においてプロトコル処理を実施することによって、ホストシステム101のプロセッサに対する要求が低減され得る。ネットワークを介して送信されるデータは、カーネルTCP/IPスタックを完全にバイパスして、TOE対応仮想インターフェースドライバを介してアプリケーション105によって送られ得る。したがって、この高速経路に沿って送られたデータは、TOEドライバの要件を満たすようにフォーマットされる必要があるだけである。
【0032】
ホストコンピューティングデバイス101は、1つ以上のプロセッサ及び1つ以上のメモリを備え得る。いくつかの実施形態では、ホストコンピューティングデバイス101及びネットワークインターフェースデバイス109は、バス、例えば、周辺構成要素相互接続エクスプレス(peripheral component interconnect express、PCIeバス)を介して通信し得る。
【0033】
データ処理システムの動作中、ネットワーク上に送信されるデータは、送信のためにホストコンピューティングデバイス101からネットワークインターフェースデバイス109に転送され得る。一実施例では、データパケットは、ホストプロセッサによってホストからネットワークインターフェースデバイスに直接転送され得る。ホストは、ネットワークインターフェースデバイス109上に位置する1つ以上のバッファ106にデータを提供し得る。次いで、ネットワークインターフェースデバイス109は、データパケットを準備し、それらを、ネットワーク103を介して送信し得る。
【0034】
代替的に、データは、ホストシステム101内のバッファ107に書き込まれ得る。いくつかのシステムは、これらのデータ転送機構の両方をサポートし得る。次いで、データは、ネットワークインターフェースデバイスによってバッファ107から取り出され、ネットワーク103を介して送信され得る。
【0035】
これらの場合の両方において、データは、ネットワークを介して送信される前に、1つ以上のバッファ内に一時的に記憶され得る。
【0036】
データ処理システムはまた、ネットワークインターフェースデバイス109を介してネットワークからデータを受信し得る。
【0037】
データ処理システムは、サーバ、パーソナルコンピュータ、又はハンドヘルドデバイスなど、任意のタイプのコンピューティングデバイスであり得る。いくつかの実施形態は、イーサネットを介してTCP/IPを動作させるネットワークにおける使用に好適であり得る。他の実施形態では、1つ以上の異なるプロトコルが使用され得る。実施形態は、有線又は無線の任意の好適なネットワークとともに使用され得る。
【0038】
いくつかの実施形態のネットワークインターフェースデバイス109を示す
図2を参照する。ネットワークインターフェースデバイスは、1つ以上の集積回路によって少なくとも部分的に提供され得る。代替的に、ネットワークインターフェースデバイスは、より大きい集積回路の一部であり得る。ネットワークインターフェースデバイス109は、単一のハードウェアモジュールによって、又は2つ以上のハードウェアモジュールによって提供され得る。ネットワークインターフェースデバイスは、メインCPUの前にネットワーク接続CPUを提供し得る。ネットワークインターフェースデバイスは、ホストCPUとネットワークとの間のデータ経路上に位置する。
【0039】
NICは、データの移動及び処理を最適化するために、特定用途向けパイプラインを提供するように構成可能であり得る。NICは、ネットワークのための高レベルプログラミング抽象化を統合し、加速を計算し得る。
【0040】
いくつかの実施形態のNICは、テラビットクラスエンドポイントデバイスをサポートし得る。いくつかの実施形態は、テラビットデータレート処理をサポートすることが可能であり得る。例えば、NICは、テラビットデータレートでネットワークからデータを受信し、かつ/又はテラビットデータレートでネットワークにデータを置き得る。しかしながら、他の実施形態では、より低いデータレートで動作及び/又はサポートし得ることを理解されたい。
【0041】
図2の装置は、システムオンチップ(System-on-Chip、SoC)を提供するものとみなし得る。
図2に示すSoCは、プログラマブル集積回路IC及び統合プログラマブルデバイスプラットフォームの一実施例である。
図2の例では、NIC109の様々な異なるサブシステム又は領域は、単一の集積パッケージ内に提供された単一のダイ上に実装され得る。他の例では、様々なサブシステムは、単一の集積パッケージとして提供される複数の相互接続ダイ上に実装され得る。いくつかの実施形態では、
図2のNIC109は、2つ以上のパッケージ、集積回路によって、又はチップレットによって提供され得る。
【0042】
図2の例では、NIC109は、異なる機能性を有する回路機構を有する複数の領域を含む。実施例では、NIC109は、1つ以上のCPU111によって提供される処理システムを有する。NIC109は、ネットワークからデータを受信するため、かつ/又はデータをネットワーク上に置くための1つ以上の第1のトランシーバ116を有する。NIC109は、1つ以上の仮想スイッチ(virtual switch、vSwitch)又はプロトコルエンジン102を有する。プロトコルエンジンは、トランスポートプロトコルエンジンであり得る。この機能は、以下では仮想スイッチ機能と称される。NIC109は、1つ以上のMAC(medium access control、媒体アクセス制御)層機能114を有する。NIC109は、ホストからデータを受信するため、かつ/又はホストにデータを提供するための1つ以上の第2のトランシーバ110を有する。
【0043】
NIC109は、850で参照されるcDMA(構成可能なダイレクトメモリアクセスアーキテクチャ)を有する。一実施形態では、
図6のアーキテクチャ850内の様々な要素は、NIC109内のハードウェアから形成され、したがってこれらは回路である。このブロック850は、後でより詳細に説明され、PCIe(周辺構成要素相互接続エクスプレス)インターフェース及び1つ以上のDMA(Direct Memory Access、ダイレクトメモリアクセス)アダプタを含み得る。1つ以上のDMAアダプタは、メモリドメインとパケットストリーミングドメインとの間のブリッジを提供する。これは、メモリ間転送をサポートし得る。
【0044】
NIC109は、1つ以上の処理コア108を備えるか、又はそれへのアクセスを有し得る。ほんの一例として、コアは、ARM処理コア及び/又は任意の他の好適な処理コアであり得る。CPU111及び1つ以上の処理コア108は、共通プロセッサによって、又は異なるプロセッサによって提供され得る。
【0045】
NIC109は、
図2において網掛けされているネットワークオンチップ(network on chip、NoC)115を有する。これは、NIC109の異なる部分間の通信経路を提供し得る。NIC109上の構成要素のうちの2つ以上が、代替的又は追加的に、直接接続経路及び/又は専用の強化バスインターフェースを介して通信し得ることを理解されたい。
【0046】
NoC間のエリアは、1つ以上の構成要素を含み得る。例えば、エリアは、1つ以上のプログラマブルロジックブロック113又はプログラマブル回路を収容し得る。このエリアは、ファブリックと称されることもある。ほんの一例として、プログラマブルロジックブロックは、1つ以上のFPGA(field programmable gate array、フィールドプログラマブルゲートアレイ)によって少なくとも部分的に提供され得る。エリアは、1つ以上のルックアップテーブルLUTを収容し得る。1つ以上の機能は、プログラマブルロジックブロックによって提供され得る。このエリアにおける異なる機能に適応する能力は、同じNICが種々の異なるエンドユーザ要件を満たすために使用されることを可能にし得る。
【0047】
他の実施形態では、任意の他の好適な通信装置が、NoCの代わりに、又はNoCに加えて、NIC上で使用され得ることを理解されたい。
【0048】
NICは、ホストデバイスとネットワークとの間のインターフェースを提供する。NICは、データがネットワークから受信されることを可能にする。そのデータは、ホストデバイスに提供され得る。いくつかの実施形態では、NICは、データがホストデバイスに提供される前にデータを処理し得る。いくつかの実施形態では、NICは、データがネットワークによって送信されることを可能にする。そのデータは、ホストデバイス及び/又はNICから提供され得る。いくつかの実施形態では、NICは、データがネットワークによって送信される前にデータを処理し得る。
【0049】
仮想スイッチ102は、少なくとも部分的に強化されたデバイス又はNICの一部であり得る。単一の仮想スイッチ又は2つ以上の別個の仮想スイッチが提供され得る。仮想スイッチ102は、NoCを使用して、かつ/又は直接接続経路及び/若しくは専用の強化バスインターフェースを介して、チップ上の他のブロックと通信することができる。いくつかの実施形態では、これは、伝送されるデータの量に対するNoCの容量に依存し得る。NoCは、例えば、ネットワークインターフェースデバイス109によるメモリアクセスのために使用され得る。NoC115は、CPU111、プロセッサ108、DMAアダプタ、及び/又はPCIeブロックにデータを配信するために使用され得る。
【0050】
いくつかの実施形態では、NoC及び/又は直接接続経路及び/又は専用の強化バスインターフェースは、1つ以上のアクセラレータカーネル及び/又は他のプラグインにデータを配信するために使用され得る。いくつかの実施形態では、ルーティングはプログラマブルロジックを介する場合がある。これらのプラグインは、いくつかの実施形態では、プログラマブルロジック113又は任意の好適なプログラマブル回路によって提供され得る。
【0051】
仮想スイッチ102は、NIC109のエッジ領域上に物理的に位置し、NIC109の様々な他の構成要素と通信し得る。いくつかの実施形態では、仮想スイッチ102は、MAC層機能114及び1つ以上の第1のトランシーバ116に物理的に近接して配置され得る。これらの構成要素は、NIC109のエッジ領域に物理的に近接して配置され得る。ネットワークからのデータは、1つ以上の第1のトランシーバ116によって受信される。
【0052】
他の実施形態では、仮想スイッチ102、MAC層機能114及び1つ以上の第1のトランシーバ116は、NICのエッジ領域から物理的に離れて配置され得る。
【0053】
いくつかの実施形態は、カスタマイズされたNIC機能が提供されることを可能にし得る。これは、具体的なNIC機能が必要とされる場合に有用であり得る。これは、特定のアプリケーション若しくは複数のアプリケーションのため、又はNICの特定の使用のためであり得る。これは、そのNIC機能をサポートするために必要とされるデバイスの量が相対的に少ない場合に有用であり得る。代替的又は追加的に、これは、NICのカスタマイズが望まれる場合に有用であり得る。いくつかの実施形態は、フレキシブルNICを提供し得る。
【0054】
カスタマイズは、PL113又はプログラマブル回路を使用して1つ以上の機能を提供することによってサポートされ得る。
【0055】
いくつかの実施形態は、相対的に高い日付レートをサポートするために使用され得る。
【0056】
図2のNICのサブシステム間の通信経路を概略的に示す
図3を参照する。cDMAブロックのホストPCIeインターフェース112と、同じくcDMAブロックのDMAコントローラ117は、メモリバスを介して通信する。DMAコントローラ117は、メモリバスを使用してメモリファブリック140を介して通信する。管理コントローラMC130は、制御バスを使用してメモリファブリック140を介して制御プレーンメッセージを提供する。アプリケーションプロセッサ111は、メモリバスを使用してメモリファブリック140を介して通信する。データは、メモリバスを使用してメモリファブリックを介してDDR142において受信される。
【0057】
DMAコントローラ117は、パケットバスを介して1つ以上の仮想スイッチ102と通信する。1つ以上の仮想スイッチは、パケット処理を提供し得る。1つ以上の仮想スイッチは、後でより詳細に説明するように、オフロード処理及び仮想スイッチングを実行し得る。1つ以上の仮想スイッチによって提供される処理は、1つ以上のプラグイン144を使用して修正され得る。プラグインは、メモリバスを介してメモリファブリックと通信し、パケットバスを介して1つ以上の仮想スイッチと通信し得る。1つ以上の仮想スイッチは、パケットバスを介してMAC114と通信し得る。
【0058】
いくつかの実施形態では、データのカプセルを使用して、NIC内でデータを伝送し得る。これについては、後に詳細に説明する。
【0059】
ホストデバイス101及びNIC109によってサポートされる機能ブロックの概略図を示す
図4を参照する。NIC109は、仮想スイッチ機能102を備える。この仮想スイッチ機能102は、後でより詳細に説明するように、1つ以上のプラグインによって拡張可能であり得る。プラグインを有する仮想スイッチ機能102は、カスタムプロトコル及びスイッチアクションをサポートすることができる。
【0060】
ホストデバイス101は、いくつかの仮想マシンVM122を備える。
【0061】
いくつかのPCIe PF(物理機能)及び/又はVF(仮想機能)がサポートされ得る。PCIe機能118は、複数の仮想NIC(VNIC)を有し得る。各VNIC 126は、仮想スイッチ上の別個のポートに接続され得る。
図4では、明確にするために、1つのPCIe機能及びPCIe機能の1つのVNICを示している。
【0062】
各vNIC126は、1つ以上のVI(仮想インターフェース)127を有し得る。各VIは、パケットを送り、かつ受信するためのチャネルを提供し得る。各VIは、送信キューTxQ、受信キューRxQ及びイベントキューEvQを有し得る。仮想マシンと仮想機能との間に1対1の関係が存在し得る。いくつかの実施形態では、VF(又はPF)にマッピングされた複数のVIが存在し得る。
【0063】
いくつかの実施形態では、所与のPF又はVF内のVIのうちの1つは、機能管理インターフェースをサポートし得る。
【0064】
仮想スイッチ102は、複数の仮想ポートを備える。ポートは、VNICのTxQからデータを受信し、VNICのRxQにデータを送信するように構成され得る。
【0065】
仮想スイッチ102は、例えばCPU111によって提供される1つ以上のアプリケーションCPU、仮想スイッチを制御するように構成されている管理コントローラ130、及び1つ以上のMAC層機能114とインターフェース接続するように構成されている。いくつかの実施形態において、仮想スイッチは、先で考察したようなプラグインによって拡張可能である。プラグインの一実施例は、ハードウェアアクセラレータ128を備える。
【0066】
いくつかの実施形態では、データのカプセルを使用して、NIC内でデータを伝送し得る。いくつかの実施形態で使用されるカプセルを示す
図5を参照する。いくつかの実施形態では、ストリーミングサブシステムは、カプセルを搬送する。後で考察するように、カプセルは、代替的に又は追加的に、NICの他の部分で使用され得る。カプセルは、制御カプセル又はネットワークパケットカプセルであり得る。ペイロードは、ペイロードへのポインタによって提供され得る。代替的に、ペイロードは、カプセル内に提供され得る。
【0067】
図5に概略的に示すように、カプセルは、メタデータ702を含む。これは、カプセルの先頭において提供され得る。この後に、カプセルペイロード710が続き得る。
【0068】
メタデータは、カプセルが制御カプセル又はネットワークカプセルであるかに依存し得る。
【0069】
ネットワークパケットカプセルは、カプセルメタデータを有し、その後に、例えば、ペイロード内のイーサネットフレームが続く。
【0070】
メタデータは、制御カプセル及びネットワークカプセルに共通であり得るカプセルヘッダを含み得る。カプセルヘッダは、カプセルが制御カプセル又はネットワークパケットカプセルであるかを示す情報を含み得る。カプセルヘッダは、パケットのルーティングを制御するルート情報を含み得る。カプセルヘッダは、カプセルによって使用される仮想チャネルを示す仮想チャネル情報を含み得る。カプセルヘッダは、カプセルの長さを示す長さ情報を含み得る。
【0071】
ネットワークパケットカプセルは、メタデータ702の一部としてカプセルヘッダに続くネットワークカプセルヘッダを有する。これは、カプセルメタデータのレイアウト、及びカプセルペイロードがイーサネットFCS(frame check sequence、フレームチェックシーケンス)を含むか否かを示し得る。
【0072】
制御カプセルのメタデータは、制御カプセルのタイプを示し得る。カプセルは、オフセットを示すメタデータを有し得る。これは、処理するデータの先頭を示し得る。
【0073】
いくつかの実施形態は、セグメント化されたバスを使用し得る。セグメント化されたバスは、全体のデータ経路幅が物理的に別個の部分に分割されるストリーミングバスである。各セグメントは、それ自体の主制御信号(例えば、SOP(start of packet、パケットの開始)及びEOP(end of packet、パケットの終了))を有する。セグメント化されたバスは、恣意的なサイズのカプセルを搬送する固定幅の任意のバスの潜在的な非効率性を克服するために使用され得る。セグメント化なしでは、カプセルがバス幅よりも(例えば)1バイト長い場合、カプセルを搬送するために2バスビート(クロックサイクル)が必要になり、1バイトを除くバス全体は、第2のビートでは何も搬送しない。セグメント化されたバスは、次のカプセルが上記の実施例における第2のバスビートにおいて送信を開始することを可能にし、無駄な帯域幅の多くを回復する。セグメントの数が増加するにつれて、恣意的なカプセルサイズに対するバス帯域幅は、その理論的最大値の100%に向かう傾向がある。しかしながら、これは、セグメント化の増加に伴って必要となる多重化及び逆多重化動作の複雑さとリソースとのバランスをとる必要がある。セグメントの数及びセグメント幅は、制約に伴って変化し得る。
【0074】
いくつかの実施形態では、バスは、4つのセグメントに分割され得るが、これは、制約がどの程度強いかに応じて変化する可能性がある。
【0075】
フレームサイズ、及び/又はバス幅によってサポートされるセグメントの数は修正され得る。
【0076】
いくつかの実施形態は、データが複数の異なるデータソースとシンクとの間で相対的に高いレートでNICを横切って渡されることを可能にするように構成され得る。これは、先で考察したネットワークオンチップNoCアーキテクチャを使用している場合がある。
【0077】
いくつかの実施形態は、データの渡しを容易にするために構成可能なDMA(composable DMA、cDMA)アーキテクチャを提供し得る。構成可能性は、システムを再設計する必要なく、DMAシステムの異なる要素が追加され得ること、及び/又はエンドポイントの能力が変更されることを可能にし得る。言い換えれば、異なる要件を有する異なるDMA方式を、同じ構成可能なDMAアーキテクチャによって収容することができる。
【0078】
アーキテクチャは、異なる要件に対してスケーラブル及び/又は適応可能であるように提供される。このアーキテクチャは、ホストとNICの他の部分との間のデータの移動をサポートするように構成されている。いくつかの実施形態では、アーキテクチャは、相対的に高いデータレートをサポートすることができる。
【0079】
いくつかの実施形態のcDMAアーキテクチャの一例を示す
図6を参照する。
【0080】
図6に概略的に示す構成は、データが異なるシンク(宛先)とデータソースとの間で渡されることを可能にする。ほんの一例として、シンク及びデータソースは、以下のうちの1つ以上を含み得る。
1つ以上のPCI接続ホスト。これらは、PCIeコントローラ112を介して接続される。
1つ以上のプロセッササブシステム842。これらは、
図2に示すCPU111及び/又はプロセッサ108、及び/又は1つ以上の異なるプロセッサ、
図2に示すvSwitch102、
DDRメモリ、
NICによって提供されるデータ移動エンジンであり得る。これは、先で考察したような1つ以上のアクセラレータ、
1つ以上のファブリッククライアント、
メモリ、及び
任意の他の好適なシンク又はデータソースによって提供され得る。
【0081】
シンク及び/又はデータソースは、NIC109が提供されるシステム、及び/又はNIC109によって提供される必要がある機能に依存し得る。
【0082】
cDMA850は、階層化アーキテクチャとみなされ得る。ベース層は、異なるデバイス、バス幅、及びプロトコルをcDMAシステムに接続し得る。構成可能なスケーラブル相互接続(cSI)822は、データがインターフェース間で移動することを可能にし得る。データムーバcDM824は、1つ以上のスケジューラ836の指示の下でインターフェース間のバルクデータ移動を実施し得る。バルクデータと同様に、cDMは、例えば、割り込み又は記述子管理のために小さいメッセージが転送されることを可能にするメッセージロード/記憶インターフェースを提供し得る。
【0083】
DMAアダプタ832は、記述子をフェッチし、データをあちこちに移動させるためのデータムーバを使用して、必要とされるタイプのDMA(記述子の解釈及びリングの状態の管理など)のためのAPI(アプリケーションプログラミングインターフェース)を提供し得る。共有記述子キャッシュシステムcDC834は、アダプタが、インフライトの記述子のための一時記憶装置を共有することを可能にし得る。ホストアクセスハンドラHAH828は、PCIeターゲットトランザクション、バー/デバイス/機能マッピング、及びドアベル管理を管理し得る。例えば、HAHは、ドアベル合体、サンプリング、及び転送を管理し得る。
【0084】
1つ以上の相対的に高い帯域幅のメモリインターフェースがサポートされ得る。1つ以上のメモリインターフェースは、インターフェース1つ以上のDDRを提供し得る。
【0085】
先で説明されるアクセラレータのうちの1つ以上は、ホスト及び/又は高帯域幅メモリにアクセスすることを望む場合がある。
【0086】
ホストは、高帯域幅メモリにアクセスすることを望む場合がある。
【0087】
ブリッジを使用して、cDMAアーキテクチャをNICの他の部分に相互接続し得る。一般に、ブリッジは、プロトコル変換器として機能し、一般にトラフィックを開始又は終了しない。ブリッジは、他のバス型へのプロトコル変換を提供し得る。例えば、NoCは、専用マスタ/スレーブインターフェースを有し得るか、又はプロセッササブシステムは、内部AXIインターコネクトをサポートし得る。ブリッジはまた、バス幅変換器として機能し得る。ブリッジの例は、cSI-NoCブリッジ826、プロセッサブリッジ830、及びcSI-PCIeブリッジ820、並びにcSI-AXIbriddgeである。
【0088】
cSI-NoCブリッジ826は、ストリーミングモードにおいてNoC上でcSI822を拡張するために提供され得る。
【0089】
いくつかの実施形態では、バスへのブリッジが設けられ得る。いくつかの実施形態では、AXIバス(又は他の好適なバス)が使用され得、cSI-AXIブリッジ(図示せず)が提供され得る。
【0090】
プロセッサブリッジ830は、NICの1つ以上のCPU、例えば、処理サブシステム842への相互接続を提供し得る。プロセッサブリッジは、cSI-AXIブリッジ又は他のバスブリッジ及び/又は他の構成要素を含み得る。このプロセッサブリッジは、HAH828とcSI822との間に設けられ得る。
【0091】
cSI-PCIeブリッジ820は、PCIeコントローラ112とcSI822とを接続する。cSI-PCIeブリッジは、(cSIのターゲットである)cSIターゲットとして機能し、(cSIへの要求のイニシエータである)cSIイニシエータからの要求をPCIeコントローラリクエスタインターフェースに転送する。また、このブリッジは、cSIイニシエータとしても機能し、PCIeコントローラコンプリータインターフェースからの要求を(cSIのターゲットである)cSIターゲットに転送する。
【0092】
図6に示す例では、4つのPCIeコントローラが存在する。これはほんの一例であり、異なる数のPCIeコントローラが設けられ得る。cSI-PCIeブリッジインスタンスは、4つのPCIeコントローラの各々1つと関連付けられ得る。他の実施形態では、4つより多い又は少ないPCIeコントローラが提供され得る。
【0093】
ファブリックマルチプレクサ840は、cDMAの構成要素と、ファブリックアクセス及びNoCアクセスが共有されることを必要とする構成要素とをまとめる。DMAアダプタ832、cDM824、HAH828、及び/又は任意の他の好適な構成要素は、ファブリックへの/からの経路を提供され得る。ファブリックマルチプレクサ840は、同時にアクティブな複数の経路を有するように構成され得る。これは、ファブリックの入力/出力ピンの数に依存し得る。
【0094】
cDMAは、先で説明されるようなカプセルを使用する。カプセルは、ストリーミングファブリックを通じて流れるデータ要素である。カプセルは、メタデータ及びデータを含む。データ部分は、PCIe TLP(トランスポート層プロトコル、transport layer protocol)であり得る。メタデータは、補助ルーティング情報(例えば、TLP自体及び/又は他のコンテキストから導出される)及び/又はcSIシステムにおけるカプセルのフローを制御するために使用される他のフィールドを含む。カプセルヘッダは、PCIe TLPヘッダデータを含み得、追加のルーティング及びフラグ情報を含み得る。
【0095】
図6で導入されたcSI822を概略的に示す
図7a及び
図7bを参照する。cSI822は、クライアントをカプセルソース及びシンクとみなし、ソースは、カプセルをcSI822に送り、シンクは、カプセルをcSI822から受信する。システムレベルにおいて、cSIのクライアント(cSIクライアント)は、イニシエータ及び/又はターゲットである。イニシエータクライアント及びターゲットクライアントの両方は、cSIへのそれぞれのインターフェースを実装し得る。
【0096】
図7aに示すように、cSI822は、N個のカプセルソースをM個のカプセルシンクに接続するN×M個のストリーミングファブリックである。N及びMは、同じ又は異なる数であり得る。cSI822は、メモリ読み出し要求、メモリ書き込み要求、完了、及び/又は他のタイプのトランザクションを伝送することによって、イニシエータとターゲットとの間の接続性を提供する。cSI822は、いくつかの実施形態では、PCIeのような接続性を提供し得る。cSI822は、トランスポート媒体を提供すると考慮され得る。cSI822は、複数のソースからのトラフィックが複数のシンクにルーティングされることを可能にする、ソースルーティング型スイッチマトリクスとみなすことができる。ソース及びシンクは、必ずしも同じバス幅又はデータレートを有するとは限らない。
【0097】
図7aに示すように、cSI822は、cDM824へのインターフェース823と、PCIeインターフェース112(PCIeブリッジを介して)と、プロセッササブシステム824(ブリッジ830を介して)と、ファブリック内に提供され得るcSIのためのユーザポート(これらは、cDMをバイパスし得る)と、を有する。インターフェースは、シンクインターフェース、ソースインターフェース、又はシンクインターフェース及びソースインターフェースの両方であり得る。
図7aに示すインターフェースは、ほんの一例であり、異なる実施形態は、異なるインターフェースを含み得る。
図7aでは、×1、×2、×4、及び×8という表記は、それぞれのインターフェースがサポートするバスセグメントの数を概略的に表すことに留意されたい。
【0098】
cDM824とのインターフェースは、8つのバスセグメントをサポートし得、プロセッササブシステムとのインターフェースは、4つのセグメントをサポートする。cSIのためのユーザポートとのインターフェースは、2×2個のセグメントをサポートし得る。
【0099】
特定のソースから特定のシンクへ通過するカプセルは、カプセルタイプ及び仮想チャネル割り当てに基づいて、相互に非ブロックフローに分離される。同じフローにおけるカプセルは、順序通りに配信され、別のフローに属するカプセルによってブロックされない。
【0100】
カプセルは、セグメント化されたストリーミングバスを介してインターコネクトに出入りし得る。セグメントサイズは、任意の好適なサイズ、例えば、20Bであり得る。他の実施形態では、セグメントは、この例示的なサイズより大きく又は小さくあり得る。
【0101】
cSIカプセルのヘッダサイズは、いくつかの実施形態では28Bであり、したがって、小さいペイロードを有する読み出し要求及び書き込み又は完了などの小さいカプセルには、2つのセグメントが必要とされる。cSIカプセルのヘッダサイズは、28Bより大きく又は小さくあり得る。いくつかの実施形態では、cSIカプセルのヘッダサイズは、1つ以上のセグメントに収容され得る。
【0102】
各バスによって使用されるセグメントの数は、インターフェースの性能要件に依存する。NPR(読み出し要求を含む非ポスト要求、non-posted request)フローのみを搬送するバスは、1セグメント幅であり得る。これは、NPRカプセルが小さく、したがって、PR(書き込みを含むポスト要求、posted request)及びCMPT(読み出しデータを含む完了、completion)フローほど多くの帯域幅を必要としない場合であり得る。
【0103】
仮想チャネル(Virtual Channel、VC)は、提供されるときに、1つのソースと1つのシンクとの間に存在する。所与のカプセルタイプに対してソースとシンクとの間にプロビジョニングされた2つ以上のVCを有することは、複数の非ブロックフロー(VCごとに1つ)が、ソースとシンクとの間のそのカプセルタイプについて存在することを可能にする。これに関して、3つの仮想チャネルVC0、VC1、及びVC2を示す
図7cを参照する。
【0104】
いくつかの実施形態では、先で考察したようなセグメント化されたバスが使用され得る。
【0105】
cSIカプセルフローは、以下の2つの段階を有する。
ソースクライアントからcSIバッファ(シンクメモリバッファ)へ。ソースクライアントは、1つ以上の、あるいは多くの異なるバッファに書き込むことができる。
cSIバッファ(シンクメモリバッファ)から宛先クライアントへ。いくつかの実施形態では、1つのシンククライアントによってバッファを読み出すことができる。
【0106】
図7cに示す例では、cSIの第1のクライアント730aは、cSI822のインターフェース732abとインターフェース接続される。そのcSIインターフェース732aは、ソース731a及びシンク733aを有する。cSIの第2のクライアント730bは、cSI822のインターフェース732bとインターフェース接続される。そのcSIインターフェース730bは、ソース731b及びシンク733bを有する。シンク733a及び733bは、いくつかのシンクバッファ735を有する。VCは、要求の独立したフローをサポートし、別個のバッファリング、フロー制御、順序付けドメイン、及びサービス品質を有する。VCは、イニシエータからターゲットに向かうPRフロー及びNPRフローと、ターゲットからイニシエータに向かうCMPTフローと、を含み得る。
図7cの構成は、第1のcSIクライアント730aから第2のcSIクライアント730bへの2つのVCであるVC0及びVC1を有する。
図7cの構成は、第2のcSIクライアント730bから第1のcSIクライアント730aへの1つのVCであるVC2を有する。第1のインターフェース732aのシンク733aは、VC0のためのCMPTバッファ、及びVC1のためのCMPTバッファ、並びにVC2のためのPRバッファ及びNPTバッファを有する。第2のインターフェース732bのシンク733bは、VC2のためのCMPTバッファ、並びにVC0及びVC1の各々のためのPRバッファ及びNPTバッファを有する。
【0107】
cSI822は、1つ以上のスループット特性を有し得る。
任意のソースからソースの任意のアクセス可能なcSIシンクバッファへの持続的なスループットが提供され得る。これは、ソースの全帯域幅に一致し得る。
【0108】
出力は、任意のcSIシンクバッファから、対応するシンククライアントに提供され得る。これは、シンクの全帯域幅に一致し得る。
【0109】
複数のソースは、同じシンクへのスループットを有し得る。
【0110】
cSIは、帯域幅のスケーリングを可能にし得る。
【0111】
cDMAは、システムにおけるデータフローを取り込み、必要に応じてそれらを接続する。ピークデータレートの差は、スケジュールされたトラフィックフローを有するセグメント化されたバスの集まりを使用することによって管理され得る。これは、cSI822の機能であり得、cSI822は、cDMAシステムにおけるフローのためのソースベースのルータとして機能する。cSIはまた、順序付け規則を強化し得る。これは、ブリッジの複雑さを低減し得る。これにより、起こり得るデッドロック状態を回避し得る。
【0112】
cSIは、ネットワークインターフェースのための帯域幅要件へのスケールアップに関する問題に対処し得る。モジュール方式に基づいて、cSIは、複数のデータソース、シンク、及びデータムーバのタイプを組み込んだ柔軟なデータ経路が構築されることを可能にする。
【0113】
cSIインターフェースは、プログラマブルロジック(ファブリック)及び/又はNoCに露出され得る。
【0114】
クレジットが使用され、データプロデューサがある量のデータをアドバタイズし、コンシューマが利用可能なある量の空間をアドバタイズするフロー制御機構を提供し得る。クレジット更新は、シナリオに応じて、コンシューマからプロデューサへ、又はプロデューサからコンシューマへのクレジットメッセージによって搬送される。クレジットの正確な値は、異なるコンテキストにおいて変化し得、バイト数、セグメント化されたバスセグメント、応答リアセンブリバッファ、又はコンテキストについて確立された他の値であり得る。クレジット及びクレジットコンテキストは、それぞれのスケジューラによって管理される。
【0115】
図7bを参照する。cSIには、複数の書き込みパイプ862(明確にするために、それらのうちの1つのみが
図7bに示されている)、及び複数の読み出し要求パイプ864(明確にするために、それらのうちの1つのみが
図7bに示されている)が設けられている。各読み出し要求パイプ864は、シンクスケジューラ866及びジョブ情報FIFO(先入れ先出しバッファ)867と関連付けられる。書き込みパイプ及び読み出し要求パイプは、以降でより詳細に説明される。書き込みパイプは、書き込み要求をシンクメモリマルチプレクサ860に出力し、読み出し要求パイプは、読み出し要求をシンクメモリマルチプレクサ860に出力する。
【0116】
シンクメモリマルチプレクサ860は、全ての書き込みパイプ及び読み出しパイプからの全ての書き込み要求及び読み出し要求を見て、どれをシンクメモリバッファに進めることができるか、かつどれをバックプレッシャするかを選択する。
【0117】
いくつかのソースクライアントは、バスのセグメント化を使用してサブバスに分岐され得る。
【0118】
cSIソース又はシンクインターフェースは、複数のインターフェースに分割されるか、又は「分岐」され得る。以下の例では、4つのセグメントバスが使用される。これらのセグメントは、単独で又は組み合わせて使用され得る。
【0119】
2つのインターフェース(2つのセグメントバスを使用するソースインターフェース又は2つのセグメントバスを使用するシンクインターフェース)は、2×1個のインターフェース(1つのバスセグメントを使用する)に分岐することができる。
【0120】
4つのインターフェース(4つのセグメントバスを使用するソースインターフェース又は4つのセグメントバスを使用するシンクインターフェース)は、2×2個のインターフェース又は4×1個のインターフェース、あるいは2×1個のインターフェース及び1×2個のインターフェースに分岐することができる。
【0121】
4つのセグメントバスのこの例では、分岐されたインターフェースバスは、元のインターフェースから1つ、2つ、又は4つのセグメント(分岐のタイプ及び元のインターフェース幅に応じて)を静的に割り振られる。この例では、分岐されたインターフェースは、2つ、3つ、又は4つの完全に独立したインターフェースを生成する。
【0122】
いくつかの実施形態では、インターフェースは、2n個のセグメントを割り振られ得、ここで、nは、0以上の整数である。nの値は、バスセグメントの総数によって決定され得る。最大4つのバスセグメントが存在する例では、nは、0、1、又は2であり得る。いくつかの実施形態では、合計2n個のバスセグメントが存在し得、nは、整数である。この例では、合計4つのバスセグメントを有するが、他の例では、異なる総数のバスセグメントを有し得ることを理解されたい。
【0123】
他の実施形態では、インターフェースは、3つのバスセグメント又は任意の他の好適な数のバスセグメントからなるx3インターフェースを有し得る。
【0124】
代替的な実施形態では、インターフェースに割り振られるバスセグメントの数は、2の整数乗でない場合がある。代替的な実施形態では、バスセグメントの総数は、2の整数乗でない場合がある。
【0125】
図6に示すように、cSI822は、以下のクライアントのうちの1つ以上を相互接続する。
【0126】
cSI-NoCブリッジ826。例えば、これは、分岐サポートを有する512Gbイニシエータ/ターゲットであり得る。cSIは、このクライアントが2つの256Gbイニシエータ/ターゲットクライアント、又は4つの128Gbイニシエータ/ターゲットクライアント、又は1つの256Gbイニシエータ/ターゲットクライアント及び2つの128Gbイニシエータ/ターゲットになることを可能にする。これは、1×4個のインターフェース又は2×2個のインターフェース又は4×1個のインターフェース又は2×1個のインターフェース及び1×2個のインターフェースをサポートする。512Gbの値は、ほんの一例であり、他の実施形態では、インターフェースのサイズ及び/又はサポートされるインターフェースの数を変更し得る異なる値を使用し得ることを理解されたい。
【0127】
プロセッサブリッジ820。例えば、これは、512Gbイニシエータ/ターゲット又は他の値であり得る。512Gbの値は、ほんの一例であり、他の実施形態では、インターフェースのサイズ及び/又はサポートされるインターフェースの数を変更し得る異なる値を使用し得ることを理解されたい。
【0128】
PCleブリッジ820。例えば、これは、分岐サポートを有する512Gbイニシエータ/ターゲット(又は他の値)であり得る。cSIは、このクライアントが2つの256Gbイニシエータ/ターゲットクライアント、又は4つの128Gbイニシエータ/ターゲットクライアント、又は1つの256Gbイニシエータ/ターゲットクライアント及び2つの128Gbイニシエータ/ターゲットになることを可能にする。これは、1×4個のインターフェース又は2×2個のインターフェース又は4×1個のインターフェース又は2×1個のインターフェース及び1×2個のインターフェースをサポートする。これらの値は、ほんの一例であることを理解されたい。他の実施形態では、分岐サイズを変更し得る異なる値を使用し得る。
【0129】
512Gbは、ほんの一例であり、他の実施形態では、分岐サイズ及び/又はセグメントの総数を変更し得る異なる値を使用し得ることを理解されたい。512Gbとは異なる値が使用される場合、これは、512Gbより大きく又は小さくあり得る。
【0130】
cDM-800Gbイニシエータ。800Gbは、ほんの一例であり、他の実施形態では、異なる値を使用し得ることを理解されたい。これは、いくつかの実施形態では、分岐され得る。異なる値は、いくつかの実施形態では、800Gbより大きく又は小さくあり得る。いくつかの実施形態では、値は、先で考察したクライアントと同じであり得る。しかしながら、他の実施形態では、cDMイニシエータは、他のクライアントよりも大きいGb値と関連付けられ得る。
【0131】
いくつかの実施形態では、分岐後の入力/出力の数が同じままであることを確実にするために、以下の技法のうちの1つ以上が使用され得る。
【0132】
全ての分岐インターフェースは、元のインターフェースと同じローカルクレジット及びスケジューラリソースメッセージバスを使用する。異なる分岐インターフェースに属するメッセージは、同じメッセージバス上で多重化される。
【0133】
分岐ソースインターフェースは、元のインターフェースと同じNPR(非ポスト要求)バスを使用する。異なる分岐ソースインターフェースに属するカプセルは、同じNPRバス上に多重化される。
【0134】
分岐動作の一例では、cSIは、2つの異なるデータシンクを対象としているデータソースから1×4個のインターフェース上でデータを受信し得る。cSIは、データシンクのうちの1つとの1×2個のインターフェースと、他のデータシンクとの1×2個のインターフェースとを有し得る。
【0135】
結合演算がサポートされ得る。これは、2つ以上のインターフェースが組み合わされる場合である。例えば、cSIは、第1のデータシンクのために第1のソースから1×2個のインターフェース上でデータを受信し、第1のデータシンクのために第2のソースから1×2個のインターフェース上でデータを受信し得る。cSIは、第1のデータシンクとの1×4個のインターフェースを有し得る。2つのソースからのデータは、両方とも1×4個のインターフェース上で送られ得る。
【0136】
しかしながら、各ソースシンクが、シンクメモリに書き込まれる必要がある最大で所与の最大数の同時セグメントと、シンクメモリに同時に提示される必要がある最大で所与の最大数の読み出し要求とを処理し得るので、分岐の場合は、書き込みパイプ構成に違いが生まれない場合がある。いくつかの実施形態では、所与の最大数は、4であり得る。他の実施形態では、所与の最大数は、4より大きく又は小さくあり得る。
【0137】
第1の組の複数のマルチプレクサ868は、シンクメモリマルチプレクサの下流側に設けられる。明確にするために、第1の組のこれらのマルチプレクサのうちの1つのみが
図7bに示されている。シンクメモリマルチプレクサ860は、読み出し要求及び書き込み要求を第1の組のマルチプレクサのうちの必要なマルチプレクサに向ける。第1の組のマルチプレクサの各々の出力は、それぞれのシンクメモリ870に提供される。シンクメモリは、任意の好適な形態を採り得る。いくつかの実施形態では、シンクメモリは、シングルポートである1セグメント幅のRAMを含み得る。言い換えれば、RAMの幅は、バスセグメントのサイズ又は幅に一致する。
【0138】
シンクメモリ870の2つ以上の出力は、第2の組のマルチプレクサのマルチプレクサ872に出力される。ここでも、明確にするために、第2の組のマルチプレクサのうちの1つのみが示されている。第2の組のマルチプレクサの各マルチプレクサ872は、それぞれの読み出し制御FIFO874の出力によって制御される。第1の組のマルチプレクサにおけるマルチプレクサの数は、第2の組のマルチプレクサにおけるマルチプレクサの数より多くあり得る。第2の組のマルチプレクサのマルチプレクサ872は、後でより詳細に説明するそれぞれの読み出し応答パイプ876に出力を提供する。
【0139】
一実施形態では、第1の組のマルチプレクサ868の第1の対は、それぞれのシンクメモリ870に出力を提供し、シンクメモリ870は、次に、それぞれの出力を第2の組のマルチプレクサ872の第1のマルチプレクサに提供する。この構成は、それぞれのシンクメモリに出力を提供する第1の組のマルチプレクサの第2の対に対して繰り返され得、シンクメモリは、次に、それぞれの出力を第2の組のマルチプレクサの第2のマルチプレクサに提供し、以下同様である。
【0140】
メモリへの書き込み要求は、更なる処理を必要としない。
【0141】
読み出し要求は、読み出しデータを生成し、読み出しデータは、各シンククライアントに対して1つずつ、読み出し応答パイプに収集される。
【0142】
図7bの書き込みパイプの一例を概略的に示す
図8を参照する。各ソースクライアントに対して1つの書き込みパイプが提供され得る。書き込みパイプは、ソースクライアントからカプセルを受け入れる。書き込みパイプは、アドレスデコード部878を有する。アドレスデコード部又は段階は、入力バッファ878a、アドレスデコードエンジン878b、及び書き込みバッファ状態レジスタファイル878cを含む。アドレスデコード部878は、カプセルについて、ターゲットシンクメモリ及びターゲットシンクバッファを決定する。アドレスデコード部は、ターゲットバッファの状態を調べ得る。アドレスデコード部は、シンクメモリアドレスを各カプセルセグメントと関連付け得る。アドレスデコード部は、ターゲットバッファの状態を更新し得る。アドレスデコード部は、FIFO880を介してシンクメモリマルチプレクサに書き込み要求を渡し得る。書き込みパイプの出力は、バスセグメントの幅に対応する幅を有するカプセルセグメントによって提供される。シンクメモリアドレスは、後で考察するように、シンクメモリのメモリバンクを識別し得る。
【0143】
より詳細には、アドレスデコード部878内の制御ロジックは、入口バス上に現れるカプセルを監視する。このロジックは、カプセルヘッダを検査し、カプセルのためのターゲット循環バッファを決定する。ターゲットバッファは、カプセルタイプ及びカプセルの仮想チャネルVCに依存する。
【0144】
制御ロジックは、ブロックレジスタファイルに維持されているバッファ状態(開始、終了、及び書き込みポインタ)を検査し、シンクメモリのバスセグメントの書き込みアドレスを計算する。
【0145】
アドレスデコード部内の制御ロジックは、バスの全てのセグメントに対して上記の動作を並列に実施し得る。
【0146】
アドレスデコード部878は、読み出しジョブチャンク境界の発見及び各バッファに対するジョブ通知メッセージングを処理する。ジョブチャンクは、シンクスケジューラが各ジョブ要求に対してバッファから読み出されることを予想するデータ量である。チャンクは、最も近いカプセル又は任意の他の好適なチャンクサイズまで拡張されたおよそ1KBであり得る。各完了した(完全に書き込まれた)ジョブチャンクに対して、アドレスデコード部は、ジョブ通知メッセージをジョブ情報FIFOにプッシュする。並列ジョブ情報FIFOは、各バッファに提供され得る。ジョブ通知メッセージは、引数であるバッファID及びセグメント単位のジョブチャンク長のうちの1つ以上を有し得る。各ジョブ情報FIFOは、対応するバッファのサイズに一致するようにサイズ決定され得る。
【0147】
アドレスデコード部878は、バッファごとにジョブチャンク完了タイマを維持し得る。バッファが新しいジョブチャンクの受信を開始すると、タイマが準備される。ジョブチャンクが割り当てられた時間内に完了しない(すなわち、タイマが満了した)場合、アドレスでデコード部は、ジョブサイズに達したかのように機能する。全てのジョブが完了していない場合、対応するバッファを満たす前にジョブチャンク情報FIFOを満たすことが可能である。したがって、ロジックは、対応するジョブチャンク情報FIFO充填レベルが閾値に達した場合、タイマを停止する。タイマは、FIFO充填レベルが閾値を下回った後も継続する。この状態は、ブロックストールを引き起こす可能性がある。
【0148】
したがって、アドレスデコード部は、各バッファに対するジョブ通知メッセージングを処理し、それぞれのジョブ情報FIFOに提供されるジョブ情報出力を提供する。
【0149】
書き込みパイプは、FIFO880を有する。各バスセグメントに対して専用のFIFOが存在し得る。これは、セグメントアドレス衝突によって引き起こされる過渡遅延を平滑化し得る。FIFOは、アドレスデコード部の全てのセグメントが同時に移動することを可能にし、これにより、アドレスデコードロジックを簡略化し得る。したがって、書き込みパイプの出力は、バスセグメントの幅であり、1回の操作でシンクメモリのセルに書き込むことができる。このメモリセルは、バスセグメントの幅に等しい幅を有する。
【0150】
図7bの読み出し要求パイプ864を概略的に示す
図9を参照する。各シンククライアントに対して1つの読み出し要求パイプが存在し得る。読み出しパイプは、シンクスケジューラ(各シンククライアントに対して1つのスケジューラ)からジョブ要求を受信する。読み出しパイプは、スケジューラがパイプに読み出すように命令するバッファ(シンクメモリ)の状態を調べ得る。読み出しパイプは、読み出し要求を生成し得る。読み出しパイプは、バッファの状態を更新し得る。読み出しパイプは、読み出し要求をシンクメモリマルチプレクサに渡し得る。
【0151】
読み出し要求パイプは、アドレスデコード部882を有する。アドレスデコード部又は段階は、入力バッファ882a、アドレスデコードエンジン882b、及び読み出しバッファ状態レジスタファイル882cを含む。
【0152】
アドレスデコード部は、シンクスケジューラ866からジョブ要求を受信する。ジョブ要求は、特定の位置からデータのジョブチャンクを読み出すように読み出し段階に求める。この特定の位置は、特定のRAMセル若しくは他のメモリセル、又は連結リスト、循環キュー、若しくは仮想FIFOなどの管理されたデータ構造であり得る。要求は、バッファID及び宛先IDを搬送する。クライアントは、同じ又は異なるバッファへの1つ以上の未処理のジョブ要求を有することを許可され得る。
【0153】
アドレスデコード部は、ジョブ情報FIFOから(
図8に示すような)書き込み段階によって生成されたジョブ情報を受信する。
【0154】
ジョブ情報は、アドレスデコード部が任意のオーバーヘッドなしにジョブからジョブへ(バッファからバッファへ)遷移することを可能にする、すなわち、この段階では、ジョブ情報からジョブチャンク長を知っているので、ジョブの終わりをオーバーランしない。
【0155】
ジョブ情報は、チャンクがデフォルトチャンクサイズよりも小さい場合(書き込み段階におけるジョブチャンク充填タイムアウトのため)、アドレスデコード部が同じスケジューラジョブ要求中に複数のジョブチャンクを処理することを可能にする。
【0156】
ジョブ情報には、ジョブチャンクの長さがセグメント単位で含まれているので、ジョブ情報は、アドレスデコード部がジョブ終了時のバッファの状態を知ることを可能にする。
【0157】
各ジョブ要求が完了すると、アドレスデコード部は、シンクスケジューラに対するジョブ応答である、スケジューラジョブ応答を生成する。応答は、ソースクレジット、コスト、及びリソースクレジットフィールドを搬送する。
【0158】
各アクティブジョブ実行サイクル中に、アドレスデコード部は、同じシンクメモリ循環バッファへの最大で4/8(又は任意の他の好適な数)の同時順次読み出し要求を構築する。ジョブの最初及び/又は最後のサイクルは、整列のために、4/8(又は任意の他の好適な数)未満の同時要求を有し得る。任意の所与のサイクルにおいて、1つのジョブに属する要求のみが発行され得る。これは、2つの連続するジョブが同じバッファをターゲットにしている場合であっても当てはまる。
【0159】
要求アドレスデコード部が分岐シンクインターフェースにサービスを提供する場合、各分岐インターフェースに対して1つのジョブを同時に処理することができ得る。各分岐インターフェースは、1つ以上の特定のバスセグメントと関連付けられる。
【0160】
各アクティブジョブ実行サイクル中に、アドレスデコード部は、要求コンテキストを構築し、応答段階によって収集されるように要求コンテキストFIFO884にプッシュする。要求コンテキストは、要求段階トランザクション、すなわち、読み出し要求のうちのどれが有効であるかなどを記述する。
【0161】
分岐インターフェースの場合、各分岐インターフェースに対して1つの要求コンテキストFIFOが使用される。
【0162】
カプセルが読み出し要求パイプによってドロップされる場合、読み出し応答パイプは、ドロップ通知を発行する。これは、カプセルが順序付け規則に違反する場合に行われ得る。この場合、応答パイプは、読み出し要求パイプがバッファからのカプセルフローを停止し、フラッシュ完了メッセージを使用して応答パイプに通知するまで、同じバッファから全ての後続のカプセルをドロップし続ける。
【0163】
読み出し要求パイプは、クライアントが発行した通知メッセージごとに2つのカプセルドロップ通知を見ることができる。一方のメッセージは、ジョブ要求FIFOをバイパスして直接配信され、他方のメッセージは、ジョブ要求と同じFIFOを介して受信される。第1のメッセージは、アドレスデコード部が通知に即座に反応することを可能にし、第2のメッセージは、影響を受けたバッファに対するパイプライン化されたジョブ要求がもうないことをアドレスデコード部に伝える。
【0164】
読み出し応答パイプ876を示す
図10を参照する。読み出し要求は、読み出しデータを生成し、この読み出しデータは、各シンククライアントに対して1つずつ、いくつかの読み出し応答パイプに収集される。読み出し応答パイプは、シンクメモリから読み出しデータ応答を受信し、読み出し段階から対応するコンテキストを受信する。要求コンテキストは、各応答段階セグメントレジスタに、どのメモリ又はRAMからデータを受信するか、かつそのデータが有効であるか否かを知らせる。読み出し応答パイプは、同じバッファセグメントを順序通りに見る。各カプセルに対して、読み出し応答パイプは、順序カウンタ892及び順序チェッカ890をそれぞれ使用して順序状態を更新/検証する。カプセルが順序通りでないことが判明した場合、パイプは、カプセルをシンクインターフェースに渡すことなくドロップし、読み出し要求パイプに通知する。読み出し応答パイプは、読み出し応答パイプが読み出し要求パイプからのフラッシュ完了メッセージを見るまで、(それ以上の通知を発行することなく)影響を受けたバッファから全てのカプセルをドロップし続ける。
【0165】
サイクルごとに、シンクメモリマルチプレクサ860は、シンクメモリへの全ての書き込み要求及び全ての読み出し要求を考慮する。シンクメモリマルチプレクサ860のアービタは、シンクメモリが独立しているので、各シンクメモリに対して並列に決定を行うことができる。いくつかの実施形態では、8つのシンクメモリが存在し得る。他の実施形態では、8つより多い又は少ないシンクメモリが存在し得る。シンクメモリは、1セグメント幅のシングルポートであるRAMのバンクを含み得る。他の実施形態では、異なるタイプのメモリを使用し得る。
【0166】
各シングルポートであるRAMの幅は、バスセグメントの幅と同じである。したがって、ポート幅は、バスセグメントの幅と同じである。
【0167】
メモリバンク内のRAMの数は、サイクル当たりの同時書き込み要求及び読み出し要求の数に依存し得る。バスセグメントと同じ数のRAMがバンク内に存在し得る。例えば、32個のRAMがバンク内に存在し、32個のバスセグメントが存在し得る。32個のストリーム(読み出しパイプ及び書き込みパイプ)は、それぞれのFIFO(書き込みパイプのエラスティックFIFO及び読み出しパイプのFIFO)と関連付けられた各ストリームでサポートされ得る。
【0168】
RAMの数は、論理マルチバンクシンクメモリが維持することを要求される帯域幅に依存し得る。同時書き込み要求及び読み出し要求が少ない場合、バンク内のRAMは少なくあり得る。ほんの一例として、RAMの数は、16個であり得る。
【0169】
バスは、セグメント化され、各セグメントは、メモリバンクから独立して書き込み/読み出しされる。
【0170】
論理シンクメモリは、物理セグメント幅のRAMから構成され、論理シンクメモリアドレスは、全てのRAMが等しくロードされることを確実にするためにバンク全体にわたってストライプされる。例えば、メモリセル0は、RAM0であり、1は、RAM1であり、以下同様である。
【0171】
いずれの要求も衝突しない場合、すなわち、いずれも同じシンクメモリバンク内の同じRAMセルをターゲットとしない場合、全ての要求を進め得る。要求のうちのいくつかが衝突する場合、シンクメモリマルチプレクサ860は、アービタとして機能する。シンクメモリマルチプレクサ860は、任意の2つ以上の衝突した書き込み要求に対して、エラスティックFIFO内の最も多くのエントリを有する書き込み要求を勝たせ得る。要求が同じ数のエントリを有する場合、セグメントバッファインデックスに基づく絶対優先度が適用され得る。これにより、失われたセグメントがすぐにそのエラスティックFIFO内により多くのエントリを有し、後続のラウンドで勝つため、いかなる不均衡ももたらさない可能性がある。
【0172】
任意の2つの衝突した読み出し要求及び書き込み要求に対して、アービタは、勝者を選択するためにプログラマブル閾値機構を使用し得る。
【0173】
読み出し応答パイプが常に同じバッファからの応答データを順序通りに見ることを確実にするために、シンクメモリマルチプレクサ860のアービタは、衝突する読み出し要求の間を以下のように調停する。読み出しパイプが分岐モードで動作している場合、読み出し要求が衝突する可能性があり、その場合、異なる分岐インターフェースに属するセグメントのみが衝突する可能性がある。アービタは、そのエラスティック読み出し要求FIFOのうちの少なくとも1つにほとんどのエントリを有する分岐インターフェースを選択し、このインターフェースに属する全てのセグメントが進むことを可能にし得る。アービタは、いくつかの実施形態では、同じインターフェースからの読み出し要求のサブセットが進むことを許可しない、すなわち、要求の全てが進むか、又はいずれも進まない。
【0174】
したがって、cSIは、DMAエンジンを複製する必要なしに分岐するホストインターフェースを管理し得る。
【0175】
cSIは、ファブリック内に拡張することができる。これを行うための2つの方法が存在し得る。いくつかの実施形態では、方法の一方のみが使用され得る。他の実施形態では、両方の方法を同時に用いることができる。本方法は、ファブリックインターフェースをファブリックポートに露出し、NoCを介してcSIカプセルをトンネルすることである。NoC/ファブリックブリッジは、両方の方法を同時にサポートし得る。両方の方法の同時サポートの場合、cSIインターフェースは分岐され、結果として生じるサブインターフェースは、それぞれ、NoC及びファブリックピン又は接続部と関連付けられる。
【0176】
システムの観点から、cSIは、拡張可能であり、特定のシステムニーズに適応可能であり得る。その目的のために、cSIは、1つのハブに適合するか、又は相互接続されたハブのネットワークによって提供される。ハブは、それ自体、n個のソースをm個のシンクに接続するn×m個のストリーミングファブリックである。ハブは、パラメータ化可能であり、コンパイル時間構成可能であり得る。
【0177】
ハブを使用してカスタムcSIを構築することができる容易さ、及びハブアセンブリのための簡単な機構により、cSIの構成可能性がサポートされる。
【0178】
multi-hub fork-join手法は、cSIの一部分がソフトロジック内に存在することを可能にし得る。これは、異なるカーネル(又はプラグイン)に接続性を提供するために、異なるトポロジを有する多くの様々なインスタンス化を作成し、(動的再構成を使用して)実行時に追加/修正することができることを意味する。
【0179】
cDM(構成可能なデータムーバ、composable data mover)824は、cDMAシステムのバルクデータムーバ要素を提供する。cDMには、コマンドが供給される。cDMは、様々なDMAアダプタの指示の下で動作して、cSI822との間でデータを必要なエンドポイントに移動させる。cDM824は、DMAアダプタ832によって使用される。いくつかの実施形態では、cDMは、他のDMAアダプタが使用できるように、NICのプログラマブルロジックに露出される。これは、顧客又はユーザの要件に依存し得る。
【0180】
cDMは、DMAアダプタのためのAPIをデータ移動プロセスから切り離すことを目的とする。cDMは、cSIとDMAアダプタとの間に位置する。これは、cSIの可能なクライアントのうちの1つであり、任意のDMAシステムにおける最高帯域幅の構成要素であり得る。cSIの柔軟性により、cDMは、PCIEホスト、CPU、DDR、NIC、及びファブリッククライアントのうちの1つ以上を含むトランザクションのデータ移動部を、直接又はNoCを通じて実施することができる。これは、DMAアダプタ又はファブリッククライアントDMAアダプタの制御下にあり得る。
【0181】
cDMによって処理される3つの「データプレーン」のデータムーバ動作が存在し得る。それらは、要求によって呼び出され、完了すると、応答を生成する(場合によっては抑制され得る)。
【0182】
M2ST(メモリからストリーミング、memory to streaming)動作は、ストリーミングインターフェースを介してアダプタによって消費されるように、ターゲットメモリからcDMストリーミングインターフェースにデータの連続ブロックを移動させる。この例では、ソースは、トランザクションのようなメモリを使用してアクセスされ、宛先は、データストリームを受信する。
【0183】
ST2M(メモリへのストリーミング、streaming to memory)動作は、データのブロックをアダプタからストリーミングインターフェースを介してターゲットメモリ内のある位置に移動させる。
【0184】
M2M(メモリ間、memory to memory)動作は、データの連続ブロックを、1つのターゲットメモリ位置から別のターゲットメモリ位置に移動させる。メモリ位置は、同じ又は異なる物理的ターゲットにあり得る。
【0185】
ST2M、M2ST、及びM2Mは、バルク動作であり得る。
【0186】
2つの制御プレーンデータムーバ動作が存在し得る。メッセージロードは、M2ST動作のようであり、メッセージ記憶は、ST2M動作のようである。これらの動作(インターフェース及びAPI)は、データではなく、記述子及びイベントなどの制御プレーントラフィックを移動させるためのものであり得る。これは、短いインラインメッセージのためであり得る。
【0187】
アダプタは、cDMクライアントである。cDMクライアントは、ST2M、M2ST、M2M、メッセージロード、及びメッセージ記憶要求/応答からなるcDM APIを実装する。クライアントは、全てのAPI要求/応答をサポートする必要はない。例えば、いくつかのクライアントは、バルクデータ書き込み(ST2M)のみを実施し、他のクライアントは、バルク読み出し(M2ST)のみを実施する。
【0188】
【0189】
cDM824は、様々なインターフェースを有する。インターフェースは、任意の好適なレートで動作し得る。いくつかの実施形態では、インターフェースは、相対的に高いレートで動作し得る。例えば、いくつかの実施形態では、インターフェースは、1GHzで動作し得る。異なるレートが、異なる実施形態によってサポートされ得る。
【0190】
cSIソースクライアントインターフェース950は、cDMからcSIにカプセルを渡すために提供され、cSIからcDMに渡されるクレジットによってフロー制御される。
【0191】
cSIシンククライアントインターフェース951は、cSIからカプセルを受信するために提供され、cDMからcSIに渡されるクレジットによってフロー制御される。
【0192】
DMAアダプタインターフェース957a~957gは、DMAアダプタとcDMとの間のそれぞれのインターフェースを提供する。cDMは、各有効化されたアダプタによる各動作タイプのための専用インターフェースを提供する。これは、インターフェースを介した多重化/逆多重化及びローカルクレジット方式をサポートすることを不要にし得る。
【0193】
DMAアダプタインターフェースは、以下のうちの1つ以上を含み得る。
【0194】
アダプタST2M要求インターフェース957a。これは、対応する数の書き込み可能アダプタをサポートするための1つ以上の要求インターフェースを提供する。各トランザクションは、1つのST2M要求をアダプタからcDMに渡し得る。このフローは、準備完了/有効ハンドシェイクによって制御され得る。これらの要求は、書き込みエンジン952に提供される。
【0195】
アダプタM2STデータインターフェース957b。これは、対応する数の読み出し可能アダプタをサポートするための1つ以上のデータインターフェースを提供する。バスが使用され得る。一例として、バスは、AXI STバス又は任意の他の好適なバスであり得る。このフローは、準備完了/有効ハンドシェイクによって制御され得る。データは、応答リアセンブルユニットRRU954によって提供される。
【0196】
アダプタM2ST/M2M要求インターフェース957c。これは、対応する数の読み出し可能アダプタをサポートするための1つ以上の要求インターフェースを提供する。各トランザクションは、1つのM2ST又はM2M要求をアダプタからcDMに渡し得る。このフローは、準備完了/有効ハンドシェイクによって制御され得る。これらの要求は、読み出しエンジン953に提供される。
【0197】
アダプタメッセージ記憶要求インターフェース957d。これは、対応する数のアダプタをサポートするための1つ以上の要求インターフェースを提供する。メッセージ記憶要求の第1のトランザクションは、要求の制御部分及びメッセージデータのcビットをアダプタからcDMに渡す。アダプタからcDMへの追加のトランザクションは、もしあれば、メッセージデータのcビットのリマインダを一度に(又は最後のビートではより少なく)渡す。cの値は、128ビット又は任意の他の好適な値であり得る。このフローは、準備完了/有効ハンドシェイクによって制御され得る。これらの要求は、書き込みエンジン952に提供される。
【0198】
アダプタメッセージロード要求インターフェース957e。これは、対応する数の読み出し可能アダプタをサポートするための1つ以上の要求インターフェースを提供する。各トランザクションは、1つのメッセージロード要求をアダプタからcDMに渡す。このフローは、準備完了/有効ハンドシェイクによって制御され得る。これらの要求は、読み出しエンジン953に提供される。
【0199】
アダプタメッセージ応答インターフェース957f。いずれの動作でも、動作の完了ステータス情報を供給する応答を生成し得る。メッセージロード動作は、完了ステータスとメッセージデータの両方を搬送する応答を生成する。応答の第1のトランザクションは、完了ステータス及びメッセージデータの最初のcビットをcDMからアダプタに渡す。cDMからアダプタへの追加のトランザクションは、もしあれば、メッセージデータのcビットのリマインダをその時点で(又は最後のビートではより少なく)渡す。このフローは、準備完了/有効ハンドシェイクによって制御され得る。これらの応答は、応答エンジン955によって提供される。応答エンジン955は、RRU、読み出しエンジン、及び書き込みエンジンから入力を受信する。(
図11には図示せず)
【0200】
アダプタST2Mデータインターフェース957g。これは、対応する数の書き込み可能アダプタをサポートするための1つ以上のデータインターフェースを提供する。任意のストリーミングバスが使用され得る。一例として、バスは、AXI STバスであり得る。フローは、準備完了/有効ハンドシェイクによって制御され得る。これらの要求は、書き込みエンジン952に提供される。
【0201】
サポートされるアダプタインターフェースは、どの1つ以上のDMAアダプタがNICによってサポートされるかに依存することを理解されたい。1つ以上の他のアダプタインターフェースが、代替的又は追加的にサポートされ得る。
【0202】
cDMはまた、以下のインターフェースのうちの1つ以上をサポートし得る。
【0203】
スケジューラジョブ応答インターフェース(scheduler job response、SJR)961。このインターフェースは、全てのcDMAイニシエータスケジューラにジョブ応答をブロードキャストする。このフローは、準備完了/有効ハンドシェイクによって制御され得る。このインターフェースは、読み出しエンジン953及び書き込みエンジン952からジョブ応答を受信する。
【0204】
M2Mジョブ要求インターフェース(M2M job request、M2MJR)962。これは、イニシエータスケジューラからcDM内部M2Mアダプタ956にジョブ要求を渡す。このフローは、準備完了/有効ハンドシェイクによって制御され得る。
【0205】
M2Mソースクレジットインターフェース(M2M source credit、M2MSC)963。これは、cDM内部M2Mアダプタブロック956からイニシエータスケジューラにソースクレジットを渡す。このフローは、準備完了/有効ハンドシェイクによって制御され得る。
【0206】
cDMは、1つ以上のアダプタにサービスを提供し得る。アダプタは、強化アダプタであり得る。強化アダプタは、cDMAと関連付けられたNICの一部に提供され得る。cDMは、所与の有効化されたアダプタによってサポートされる各動作タイプのための専用インターフェースを提供する。各有効化されたアダプタは、アダプタがサポートするcDM動作を実施するのに必要な完全な組のcDMインターフェースを所有し得る。
【0207】
1つ以上の強化及び有効化されたアダプタが存在し得る。代替的又は追加的に、アダプタは、いわゆるソフトアダプタであり得、例えば、プログラマブルロジック又はプログラマブル回路によって提供され得る。cDMは、1つ以上のソフトアダプタによって使用されるファブリックにcDMアダプタインターフェースを露出するインターフェースを有する。
【0208】
cDMは、いくつかの実施形態では、1つ以上の強化アダプタ及び/又は1つ以上のソフトアダプタをサポートし得る。任意の1つ以上又は全てのアダプタが、同時にアクティブであり得る。アダプタは、1つ以上の強化アダプタ及び/又はプログラマブルロジックに設けられた1つ以上のアダプタを含み得る。
【0209】
いくつかの実施形態では、アダプタの性質、及びそれがファブリック内で強化されるか、又はインスタンス化されるか否かにかかわらず、アダプタは、cDMと通信するために同じプロトコルを使用し得る。これは、アダプタAPIと称される。アダプタAPIは、要求-応答モデルを使用する。
【0210】
書き込みエンジン952には、書き込みアービタ958が設けられている。
【0211】
cSI VCは、独立したバッファリングリソースを特徴とする仮想パイプであり、cDMのようなイニシエータが、相互に非ブロック方式でそのクライアントの代わりにターゲットメモリの読み出し及び書き込みを実施することを可能にする。応答リアセンブリユニットRRU954のメモリは、全てのcDMのインフライト読み出し要求によって返されるデータのためのものである。このメモリは、全てのcDMクライアントが共有する。RRUは、読み出したデータを再順序付けし、パックし、要求者に返される準備ができているデータを、読み出しチャネルと称される動的仮想FIFOにキューイングする。読み出し可能VCを利用するクライアントには、等しい数のRRU読み出しチャネルが割り当てられ得る。
【0212】
M2Mアダプタ956は、DMAアダプタによって開始されるM2M動作の書き込みの半分を担当する。M2Mアダプタは、所与の数までの書き込み専用VCを所有する。所与の数は、4又は任意の他の好適な数であり得る。
【0213】
DMAアダプタのcDM要求は、cDMがアダプタごと又はメッセージロード/記憶VC変換テーブルを使用してcSI VC IDに変換する仮想チャネル識別VC IDフィールドを含み得る。読み出し可能VCの場合、変換テーブルは、読み出しチャネルIDも提供する。言い換えれば、cDMクライアントは、グローバルcSI VC IDを認識し、チャネルIDを読み出す必要がなく、代わりにローカルVC ID値を使用することができる。
【0214】
要求は、ST2Mブロック移動のためのものであり得る。DMAアダプタは、cDMに、cSIインターフェースを介してアクセス可能な連続メモリ位置にデータのブロックを移動するように要求する。アダプタは、ストリーミングバスインターフェースを介してデータブロックをcDMに配信する。cDMは、アダプタが要求と同じ順序でストリーミングバスデータブロックを供給することを予想する。
【0215】
DMAアダプタは、アダプタエラー状態に起因してブロックを切り捨てる(すなわち、要求において指定されたバイトよりも少ないバイトを供給する)場合がある。これを可能にするために、ストリーミングバスは、(EOPフラグに加えて)切り捨てフラグを組み込み得る。データブロックは、バストランザクション境界に、指定されたオフセットバイトを加えたものに整列され得る。必要に応じて、cDMは、要求の完了時にアダプタに応答する。要求完了は、この場合、全ての要求ストリーミングデータがcSIに渡されることを意味する。要求を実行している間、cDMは、ポスト要求PRフロータイプに属する1つ以上のメモリ書き込みカプセルを生成する。cDMは、インターフェースの規則で構成されている。cDMは、どのインターフェースにアクセスしているかを知っており、したがって、異なる規則を適用することができる。1つの変数は、最大書き込み要求設定であり得る。カプセルヘッダは、以下の引数のうちの1つ以上を使用して追加される。
DMAアダプタであるcDMクライアントを識別するクライアント識別ID、
要求によって使用されるcSI VCをルックアップするためにクライアントIDとともに使用されるVI識別情報、
アドレス情報。
【0216】
書き込むデータのバイト数を示す長さ情報、
応答が要求されているか否かを示す情報。設定されている場合、これは、cDMに、ブロックがcSIインターフェースに移動されると、応答を生成するように命令する。
【0217】
要求は、M2STブロック移動であり得る。アダプタは、cSIインターフェースを介してアクセス可能な連続メモリ位置からデータのブロックを移動するようにcDMに要求する。アダプタは、ストリーミングインターフェースを介してcDMからデータブロックを収集する。各M2ST要求は、要求を発信したアダプタによって所有される1組のチャネルから読み出しチャネルを選択する。cDMは、同じチャネルデータブロックを、それらが要求されたのと同じ順序でストリーミングインターフェース上に配設する。異なるチャネル要求は、同じアダプタからであっても、順序が狂ったデータを返す。
【0218】
cDMは、cSIによって報告されたエラー状態(例えば、PCIe読み出しエラー)に起因して、データブロックを切り捨てる(すなわち、要求において指定されたバイトよりも少ないバイトを供給する)場合がある。例えば、PCIeコアから読み出しエラーが発生した場合、ブリッジは、エラーフラグを有するカプセルを受信する。次に、エラーフラグを有するカプセルを生成する。cDMは、エラーを有するカプセルを見て、それがどの要求に属するかを知り、データを切り捨て、残りの全てを処理する(例えば、この要求に対する追加の応答カプセルを無視する)。
【0219】
データブロックは、トランザクション境界に、指定されたオフセットバイトを加えたものに整列され得る。必要に応じて、cDMは、要求の完了時にアダプタに応答する。要求完了は、この場合、要求されたストリーミングデータの全てがアダプタに配信されることを意味する。要求を実行している間、cDMは、1つ以上のメモリ読み出しカプセルを生成する。cDMは、インターフェースの規則で構成されている。cDMは、どのインターフェースにアクセスしているかを知っており、したがって、異なる規則を適用することができる。ここでの1つの変数は、最大読み出し要求設定であり得る。cDMは、(関連付けられたフロータイプに属する)メモリ読み出し完了カプセルを収集し、要求されたデータブロックをアセンブルするためにそれらを使用する。要求カプセルヘッダは、以下で説明する要求引数のうちの1つ以上を使用して追加される。
要求によって使用されるcSI VC及びRRU読み出しチャネルIDをルックアップするためにクライアントIDとともに使用されるVI識別情報、
緩和された読み出し情報。設定されている場合、これは、cDM及びcSIに、このcDM要求中に生成された読み出し要求カプセルが、cDMによって生成された任意のインフライト書き込み(同じ要求側を有するものを含む)をバイパスすることを可能にするように命令する。
【0220】
要求は、M2Mブロック移動であり得る。これは、先で説明される要求と同様であり得る。DMAアダプタは、cDMに、cSIインターフェースを介してアクセス可能な1つの連続メモリ位置から、同じくcSIインターフェースを介してアクセス可能な別の連続メモリ位置にデータのブロックを移動するように要求する。この要求は、アダプタをデータブロックの内容に露出することはない。cDMは、要求の完了時にアダプタに応答し得る。ブロックは、先で説明されるように切り捨てられ得る。この例では、読み出しから書き込みまでのデータループは、cDMの内部にある。この要求は、ソース仮想チャネルID及び宛先チャネルIDを使用することができる。ソースVC ID及びクライアントIDは、cSI VC及びRRU読み出しチャネルIDをルックアップするために使用される。M2MアダプタのクライアントIDを有する宛先VC IDは、要求の書き込みの半分のためのcSI VCをルックアップするために使用される。
【0221】
要求は、メッセージロードであり得る。DMAアダプタは、cDMに、cSIインターフェースを介してアクセス可能な連続メモリ位置からデータのブロックを移動するように要求する。M2STとは異なり、この要求は、要求されたデータをストリーミングインターフェース上に配設するのではなく、メッセージ応答インターフェースを介して要求されたデータを返し得る。要求は、cSI VCをルックアップするために使用されるVC ID、及び要求によって使用されるRRU読み出しチャネルIDを有し得る。この場合のルックアップテーブルは、全てのcDMクライアントからのメッセージロード要求及びメッセージ記憶要求によって使用されるcDMメッセージロード/記憶VCルックアップテーブルである。
【0222】
要求は、メッセージ記憶であり得る。cDMアダプタは、cDMに、cSIを介してアクセス可能な連続メモリ位置にデータ(この場合、メッセージ)のブロックを移動すること、又はPCIeターゲットのうちの1つに割り込み要求カプセルを送ることを要求する。ST2Mとは異なり、この要求は、別個のストリーミングインターフェースからデータを収集するのではなく、cDM要求インターフェースからのデータを消費する。メッセージ記憶動作は、特定の動作の完了を示す通知及び割り込みを配信するために使用されることが意図されている。通知は、データ位置に依存する(すなわち、関連データの配信に従う)ことができるので、メッセージ記憶動作は、順序付け制御を有する。
【0223】
メッセージ記憶は、頻繁かつ小規模であり得る。メモリ内で隣接する記憶部を単一のトランザクションに結合することが望ましい場合がある。アダプタにおける余分なロジックなしにこれを容易にするために、cDMは、任意のメッセージ記憶要求に適用することができる書き込み結合機構を実装する。VC IDは、要求によって使用されるcSI VCをルックアップするために使用される。
【0224】
応答は、メッセージロード要求に対して、かつ他の要求タイプに対してオンデマンドで、生成され得る。メッセージロード応答は、応答ペイロード構成要素を使用して、メッセージブロックを供給する。応答は、対応する要求が実行されたのと同じ順序で返され得、これは、必ずしも発行順序と同じである必要はない。
【0225】
ST2M応答は、この要求に対応する全ての書き込みカプセルがcSIに渡されたときに発行される。
【0226】
M2M応答は、この要求に対応する全てのカプセルがcSIから受信され、この要求に対応する全ての書き込みカプセルがcSIに発行されたときに発行される。
【0227】
M2ST応答は、この要求に対応する全てのカプセルがcSIから受信され、要求されたブロックがアダプタにストリーミングされたときに発行される。
【0228】
メッセージ記憶応答は、この要求に対応する全ての書き込みカプセルがcSIに渡されたときに発行される。
【0229】
メッセージロード応答制御構成要素は、この要求に対応する全てのカプセルがcSIから受信されたときに発行される。応答制御構成要素は、応答ペイロード構成要素の第1のトランザクションと同時にアダプタに渡される。
【0230】
ST2M、M2M書き込みの半分、及びメッセージ記憶トラフィックは、cDM書き込みエンジン(write engine、WE)952帯域幅を求めて競合する。cDMは、これらの要求タイプ間のロードバランスをとるために、内部アービタである書き込みアービタ(write arbiter、WA)958を実装する。WAは、メッセージ記憶トラフィック及びデータ書き込みトラフィックがWE帯域幅を適切に共有すること、及びWEがラインブロック又はデッドロックの先頭にならないことを確実にする責任を負う。
【0231】
WE952が(アダプタ速度とは無関係に)全速力でメッセージ記憶データを転送することを確実にするために、WA958は、メッセージ記憶FIFOの状態を監視し、FIFOが少なくとも1つの完全なメッセージを保持しているように見えない場合には、FIFOを選択しない。
【0232】
WEが(アダプタ速度とは無関係に)全速力でST2Mデータを転送することを確実にするために、WA958は、ST2MデータFIFOの状態を監視し、FIFOが要求を終了するか、又は少なくとも1つのカプセルを形成するのに十分なデータを保持しているように見えない場合には、スレッドをスケジュールしない。
【0233】
スレッド間を調停している間、WA958は、以下のことを達成することを目的とする。
ST2M要求ソースが、WE帯域幅を等しく共有する。
【0234】
メッセージ記憶要求ソースが、WE帯域幅を等しく共有する。
【0235】
メッセージ記憶要求とST2M要求との調停が、プログラマブル優先度に基づく。
【0236】
書き込みエンジンWE952が、ST2M処理を提供する。
【0237】
cDMは、対の一方のFIFOがST2M要求を搬送し、他方のFIFOがST2Mデータを搬送する、所与の数のFIFO対を見る。各対は、アダプタインスタンスによって所有される。アダプタは、(cDMAスケジューラ制御の下で)その内部ソース(キュー)のうちのどれが次のST2M要求/データをプッシュするかを決定し、要求及びデータが同じ順序でcDMによって見られることを保証する。
【0238】
WEは、所与の数のFIFO対からのST2M要求を、各々に対して1つのスレッドを使用して並列に処理する。WEは、各カプセル境界においてアービタを調べる。
【0239】
ST2M要求の完了に続いて、WEエンジンは、応答ワード(要求によって要求された場合)を応答エンジンに送出する。
【0240】
ジョブ終了フラグでマークされたST2M要求の完了に続いて、WEは、スレッドごとのジョブコスト及びリソースクレジット累算器の値を使用して、スケジューラへのジョブ応答メッセージを生成する。
【0241】
書き込みエンジンWE952は、メッセージ記憶処理を提供する。
【0242】
cDMは、メッセージ記憶要求を搬送する所与の数のFIFOを見る。WEは、所与の数のFIFOからのメッセージ記憶要求を順次処理する。スレッドは、要求を受け入れると、中断せずにそれを最後まで処理する。エンジンは、要求を完了すると、アービタを調べる。
【0243】
メッセージ記憶要求の完了に続いて、WEは、応答ワード(要求によって要求された場合)を応答エンジンに送出する。
【0244】
書き込みエンジンWE952は、メッセージ記憶とST2Mデータとの同期を提供する。メッセージ記憶動作は、一般に、ST2Mデータ配信についてcDMAアプリケーションに通知するイベントを書き出すために使用される。このようなイベントは、対応するデータを追い越すべきではない。cDM及びcSIは、選択されたST2M要求データ及び対応するメッセージ記憶要求データの到着を同期させるためのロジックを組み込む。
【0245】
cDMAアプリケーションは、バリアを使用することによって、任意の組のDMA要求間で恣意的な順序を強制することができる。cDM及びcSIは、この同期シナリオのための専用ロジックを実装し得る。
【0246】
アダプタは、メッセージ記憶要求引数を使用して、メッセージ記憶とST2M要求との同期を求めることができる。cDMは、同じアダプタからの同期されたメッセージ記憶要求と同期されていないメッセージ記憶要求とを切り離さず、その代わりに、アダプタごとのメッセージ記憶要求FIFOにメッセージ記憶要求をバッファリングする。
【0247】
同期されたメッセージ記憶要求がターゲットまでずっとST2Mデータに対するその位置を保持することを確実にするために、メッセージ記憶データは、ST2Mデータと同じcSI VCを利用する。ST2Mデータ及びメッセージデータは、シンクメモリの同じバッファを共有する。
【0248】
WEは、メッセージ記憶書き込み結合を提供し得る。これは、WE内で実施される。
【0249】
M2ST、M2M読み出しの半分、及びメッセージロードトラフィックは、cDM読み出しエンジン(read engine、RE)953帯域幅を求めて競合する。cDMは、これらの要求タイプ間のロードバランスをとるために、内部アービタである読み出しアービタ(read arbiter、RA)959を実装する。
【0250】
RAは、メッセージロード要求及びデータ、並びにデータ読み出し要求がRE帯域幅を適切に共有し、REがラインブロックの先頭にならないことを確実にする責任を負う。
【0251】
スレッド間を調停している間、RAは、以下のことを達成することを目的とする。
M2ST/M2M読み出しの半分要求ソースが、RE帯域幅を均等に共有する。
【0252】
メッセージロード要求ソースが、RE帯域幅を等しく共有する。
【0253】
メッセージロード要求とM2ST/M2M読み出しの半分要求との調停が、プログラマブル優先度に基づく。
【0254】
読み出しエンジン953は、M2ST処理を実施し得る。cDMは、M2ST要求及びM2M要求を搬送するFIFOを見る。アダプタは、その内部ソース(キュー)のうちのどれが次のM2ST/M2M要求をプッシュするかを決定する。
【0255】
REは、FIFOからのM2ST/M2M要求を、各々に対して1つのスレッドを使用して並列に処理する。読み出しエンジンは、各カプセル境界においてアービタを調べる。
【0256】
ジョブ終了フラグでマークされたM2ST/M2M要求の完了に続いて、RAは、スレッドごとのジョブコスト及びリソースクレジット累算器の値を使用して、スケジューラへのジョブ応答メッセージを生成する。M2ST及びM2Mは、ジョブコスト及びリソースクレジット計算の目的のために同じように扱われ得る。
【0257】
各M2M要求の開始時に、RAは、M2M状態ワードを生成し、それをcDM内部M2Mアダプタに渡す。このワードは、アダプタが、RRUから受信するM2M読み出しデータを処理し、M2M要求の書き込みの半分を完了することを可能にするコンテキストとして機能する。
【0258】
REは、メッセージロード処理を提供し得る。
【0259】
cDMは、メッセージロード要求を搬送するいくつかのFIFOを見る。REは、FIFOからのメッセージロード要求を順次処理する。スレッドは、要求を受け入れると、中断せずにそれを最後まで処理する。読み出しエンジンは、要求を完了すると、アービタを調べる。
【0260】
cSIソースインターフェースに出力される各非ポスト要求NPRカプセルについて、RAは、REによって維持される空きタグプールから空きNPRタグ値を取得し、タグをカプセル擬似ヘッダに配設し、タグ及び他のコンテキストを含む読み出し状態ワードをRRUに送出する。このワードは、RRUが、NPRによって要求されたデータを搬送するカプセルを処理することを可能にするコンテキストを搬送する。タグは、RRUが所与のNPRに対する全ての要求されたデータを収集した後に、RRUによって空きタグプールに戻される。
【0261】
REは、RRUメモリ空間追跡を提供し得る。RRUメモリは、相対的に限られたリソースである。RRUメモリの全てがインフライト読み出し要求のために確保されているとき、REは、現在のスレッドをストールする。RRUメモリは、バッファの集まりである。バッファは、完了カプセルペイロードを保持する。異なるペイロードは、同じバッファを共有しない場合がある。REは、(読み出し要求アドレス及びターゲット完了ペイロード長設定に基づいて)どれだけの完了カプセル及びどのようなサイズを要求が生成するかを判定し、RRUメモリ空きバッファカウントを適切な量だけ低減する。RRUは、バッファが解放されるたびにREに報告を返し得る。
【0262】
RRU954は、M2ST、M2M、及びメッセージロード要求に属する読み出し応答データを処理する。RRUは、cSIシンクインターフェースから完了カプセルを受信する。各カプセルは、対応する非ポスト要求のNPRタグを搬送する。
【0263】
RRUは、タグ値によってインデックス付けされた未処理のNPRの状態を維持する。RRUはまた、NPR発行順序を維持する。REによって発行される全てのNPRは、NPRを生成するcDM要求によって識別される読み出しチャネルと関連付けられる。RRUは、各読み出しチャネルについて別々にNPR順序を維持する。カプセルペイロードは、RRUメモリに記憶される。RRUは、各読み出しチャネルによって受信されたデータの量を追跡し続け、それをソースクレジットの形態でRRUスケジューラに通信する。RRUスケジューラはまた、各受信側がどれだけの読み出し応答データを受け入れることができるかを通知する宛先クレジット情報を読み出しデータ受信側から受信する。
【0264】
以下の読み出しデータ受信側のうちの1つ以上が存在し得る。
メッセージロードデータを受信するcDM応答エンジン、
M2M読み出しデータを受信するM2M cDM内部アダプタ、及び
1つ以上の外部アダプタ。
【0265】
各受信側は、1つ以上の読み出しチャネルを所有する。
【0266】
スケジューラは、適格な読み出しチャネルから対応する受信側に転送されるデータのブロックをスケジュールする。順序通りのデータのみ(ホールなし)が転送される。読み出しチャネルデータを受信側に転送する間に、RRUが不完全なNPR応答を発見した場合、ブロックは、(NPR応答データのいずれも転送することなく)転送を終了し、読み出しチャネルがデータを有していないことを(ソースクレジットを使用して)スケジューラに通知する。これは、スケジューラが同じチャネルを再びスケジュールし続けることを防止し、それにより、RRU帯域幅を浪費する。ホールが満たされると、RRUは、チャネル内のデータの存在についてスケジューラに通知する。
【0267】
データは、レート一致FIFOを介して受信側に到着する。いくつかの実施形態では、受信側ごとに1つのFIFOが存在し得る。FIFOは、RRUが最大速度(例えば、800Gbps又は任意の他の好適な速度)でデータを出力し、受信側がそれ自体の速度でデータを受信することを可能にする。FIFOは、最大速度でデータを受け入れ得るcDM内部ブロックであるので、応答エンジン及びM2Mアダプタによって必要とされない場合がある。1つ以上の外部アダプタは、レート一致FIFOを必要とする場合がある。FIFOサイズは、未処理のジョブの最大数×ジョブ長×cDMであるアダプタ速度比によって定義され得る。
【0268】
RRUは、同じcDM要求に属するデータを、レート一致FIFOにプッシュする前にパックし得、その結果、データは、第1のワード内の要求が指定されたオフセットにおいて開始し、最後のバスワードを除く全てのバスワードを完全に満たす。
【0269】
RRUは、未処理のcDM要求のコンテキストを維持する。cDM要求情報は、REからの読み出し状態ワードの一部としてRRUに提供される。このコンテキストにより、RRUは、応答エンジンを必要とする完了した各cDM要求に対して、応答エンジンへの応答ワードを生成することを可能にする。
【0270】
M2Mアダプタ956は、M2M要求の書き込みの半分を実施する。M2Mアダプタは、M2M要求コンテキストを搬送するM2M読み出し状態ワードをREから受信する。M2Mアダプタは、このコンテキストを使用して、RRUから受け入れるM2M要求読み出しデータを順序通りに処理する。M2Mアダプタは、cSI書き込み専用VC及びRRU読み出しチャネルを利用する。内部では、M2Mアダプタは、循環バッファを実装する。M2M cSI VCと、RRU読み出しチャネルと、内部循環バッファとの間に1対1の対応が存在し得る。バッファは、RRU読み出しチャネル(バッファ当たりのチャネル)からデータを受け入れ、宛先クレジットをRRUスケジューラにアドバタイズする。同じバッファが、1つのcSI VCを各バッファと関連付けるcDMAイニシエータスケジューラ836(
図6を参照)のためのデータソースとして機能する。cDMAイニシエータスケジューラは、ジョブ要求をM2Mアダプタに発行し、アダプタは、1つ以上のST2M要求/データをcDM WEに発行することによってジョブ要求を実行し、スケジューラは、M2Mに対するジョブ応答及び他のアダプタのジョブ要求をWEから受信する。言い換えれば、内部M2Mアダプタは、外部アダプタと同じ方法で機能し得る。
【0271】
応答エンジン955は、アダプタへの応答を生成する。応答エンジンは、書き込みエンジン、M2Mアダプタ、及びRRUから応答内容を受信し、それらへの接続は、明確にするために省略されている。
【0272】
ST2M及びメッセージ記憶応答内容は、書き込みエンジンによって供給される。
【0273】
M2ST応答内容は、RRU954によって供給される。
【0274】
M2M応答内容は、M2Mアダプタ956によって供給される。
【0275】
メッセージロード応答及びメッセージロード応答データは、RRU954によって供給される。
【0276】
先で説明されるように、複数の異なるDMAアダプタ832が設けられ得る。
【0277】
DMAアダプタは、DMAシステムのAPI要素を提供し、バルクデータムーバが、所与のシステムで必要とされるDMAインターフェースの必要な機能で表現されることを可能にする。いくつかのDMAインターフェースの例は、以下の通りである。
QDMA-現在の申請者が提供し、
EF100-ネットワークスタック及びアプリケーションとともに使用され、再び現在の申請者が提供し、
Virtio-ハイパースケールの顧客が使用する。
【0278】
特定の顧客に適合する他のDMAアダプタも可能である。これらは、ソフトロジックで構成され得る。後者の場合、cDM、cSched(構成可能なスケジューラ)、及びcDC(構成可能な記述子キャッシュ)インターフェースは、プログラマブルロジック境界において利用可能にされる必要があり得る。
【0279】
1つ以上のDMAスキーマは、ストリーミングをサポートし得、かつ/又は1つ以上のDMAスキーマは、ストリーミングをサポートしない場合がある。
【0280】
1つ以上のDMAスキーマは、複数のキューをサポートし、かつ/又は1つ以上のDMAスキーマは、複数のキューをサポートしない、すなわち、単一のキューをサポートし得る。
【0281】
DMAアダプタは、必要に応じてPL又はNoCに直接接続され得る。
【0282】
所与のDMA方式の特定の要件は、DMAアダプタによって処理される。
【0283】
DMAエンジンは、性能を改善するために、記述子管理から利益を得ることができる。これは、スループット及び転送レートに影響を及ぼし得る、ホストメモリから記述子をフェッチする待ち時間を低減するためであり得る。DMAエンジンは、記述子プリフェッチから利益を得ることができる。いくつかの実施形態では、複数のDMAアダプタが存在し得る。異なるDMAアダプタは、異なるDMA APIを実装して、ホストソフトウェアの様々なニーズをサポートし得る。高いデータスループットを容易にするために、DMAシステムは、ホスト又は他のオフチップから適切な記述子をフェッチしなければならないのではなく、ローカルメモリから適切な記述子をロードすることができる相対的に高い可能性を有するべきである。
【0284】
図6に示すcDC(構成可能な記述子キャッシュ)モジュール834は、cDMAシステム内の全てのDMAアダプタの代わりに、DMA記述子を保持する(待ち時間を低減するために)ためにとっておいたメモリの相対的に大きいブロックを管理する。これには、ソフトロジックで実施されるDMAアダプタを含めことができる。これは、そのメモリが最適に分散され、再使用されることを可能にし得る。cDCは、ユーザレベルのアダプタが利用可能な順序付けられた記憶装置を利用することができるように、ファブリックに露出され得る。したがって、cDCは、潜在的に2つ以上のDMAアダプタのための記述子を記憶するための共有メモリリソースへの管理されたアクセスを提供するために存在する。
【0285】
スケジューリングは、1つ以上のスケジューラ836によって制御され得る。スケジューラは、共有ターゲットへのイニシエータアクセスをスケジューリングするために必要とされる場合がある。
【0286】
cDCは、DMAアダプタの各々に接続されている。これは、ソフトDMAアダプタがcDCのリソースを利用することができるように、ファブリックインターフェースを含み得る。cDCへの主接続は、ブロックの周波数で動作する、組み合わされたコマンド及びデータ要求及び応答バスを介し得る。フローは、Rdy/Vld(準備完了/有効)信号で制御され得る。要求バス及び応答バスは、同じ又は異なるサイズであり得る。応答バスは、いくつかの実施形態では、要求バスより広くあり得る。cDCへのインターフェースは、cDC-MDML(マルチプレクサ/デマルチプレクサロジック)844を介して、2つ以上のDMAアダプタ及びPLに多重化され得る。多重化は、要求及び応答の一部であるクライアント識別フィールドに基づき得る。
【0287】
cDCは、2つのメモリ構造である、実際の記述子キャッシュメモリと、アクティブ/オープンリストの状態(読み出し/ポップ/書き込みポインタ)を追跡するためのメモリと、を含み得る。
【0288】
cDCは、サイクルごとに1つの記述子読み出し及び1つの記述子書き込みを維持し得る。要求/応答方式は、2つ以上のコマンドがサイクルごとに一緒に発行されることを可能にし得る。cDCは、ほぼn回のクロックサイクルごとに1つのリスト取得又は1つのリスト配置動作を実施し得る(nは、例えば、64クロックサイクルごと、又は任意の他の好適な数であり得る)。複数の記述子を含む動作は、クロックごとに1つの記述子を渡し得、したがって、複数のサイクルにわたって要求/応答バスを占有する。
【0289】
cDCは、アダプタによって使用されるまで、DMAコマンドのシーケンスを保持する。そのために、cDCは、FIFO順序で記述子を含む記述子リストを維持する。cDCの観点から、記述子は、アダプタがDMAコマンド、アドレスなどで満たすために自由に使用することができる一定のサイズ(例えば、128ビット/16バイト又は任意の他の好適なサイズ)のデータのチャンクであり得る。記述子の内容は、cDCに対して不透明である。いくつかの実施形態では、唯一の要件は、記述子チャンクへのアクセスが、先頭/末尾(読み出し/書き込み)ポインタ調整及び別個の再利用をサポートするための追加の柔軟性を伴って、FIFO順序に従って順序通りであることであり得る。
【0290】
cDCは、コンパイル時に構成可能な記述子の最大数のアクティブリストを維持し、関連する記述子を記憶する。各アクティブcDCリストは、1つ以上のジョブ(連続するDMAコマンドのサブシーケンス)を含む1つのDMAアダプタキューに対応する。アダプタは、4つの要求動作である、リスト取得、リスト配置、記述子書き込み、及び記述子読み出しによってキャッシュと対話する。
【0291】
リスト取得は、cDC内の空きリストを割り振り、これを、提供されたキューIDと関連付け、リストのための空間を論理的に確保する。この動作は、割り振られたリストID<LID>及びいくつの記述子が読み込まれる必要があるかを返す。
【0292】
既存のキュー/リスト関連付けでは、リスト取得は、同じキュー上の新しいジョブの開始をキャッシュに示す。
【0293】
リスト配置は、アクティブキュー/リストのジョブの終了を宣言し、もはや使用されないエントリを解放し、潜在的にリスト/キュー全体を閉じる。キューが終了すると、リストは、将来の別のキューとの関連付けのために空きリストのプールに戻される。
【0294】
記述子書き込みは、書き込みポインタの位置においてキューID及びリストIDによって指定されたリストの末尾に1つ以上の新しい記述子エントリを追加し、それに応じて書き込みを調整する。
【0295】
記述子読み出しは、読み出しポインタ位置のキューID及びリストIDで指定されたリストの先頭から1つ以上の記述子を検索し、読み出しポインタを調整し、検索された記述子を応答で返す。任意選択的に、コマンドは、ポップポインタを調整することによって、リストから記述子エントリをポップすることもできる。
【0296】
cDCは、アイドルリストを追い出したときはいつでも、応答チャネル上で追い出し応答メッセージを送る。メッセージは、追い出されたキューID及びリストID、並びに任意選択的に追加の追い出し状態を含む。
【0297】
これら4つの動作は、1サイクルでマージすることができ、高スループットの場合には、記述子読み出し及び記述子書き込みの両方が1サイクルで発生する場合がある。
【0298】
各要求及び応答は、cDCを使用してアダプタを一意に識別するクライアントID(CLIENT_ID)と、キャッシュされたリストをともに指定するキューID(queue ID、QID)及びリストID(list ID、LID)とを含み得る。キャッシュがリスト/キューを追い出し、同じリスト(LID)をアダプタによって要求される異なるキューと再関連付けることを決定することができるので、両方がいくつかの実施形態において使用され得る。いくつかの実施形態では、キューIDは、アダプタにわたって再使用することができ、したがって、(CLIENT_ID、QID)対は、キューを一意に識別するために必要とされる。
【0299】
DMAアダプタとcDCとの間の例示的なフローは、以下の通りであり得る。
【0300】
アダプタは、スケジューラからジョブ要求を受信する。このキューは使用されておらず、キュー状態は、有効なcDC LIDを含んでいない。
【0301】
アダプタは、LIDが-1に設定されたリスト取得要求を発行し、ジョブを完了するために必要であると推定する記述子の数を求める。例えば、DMAアダプタは、32個の記述子を求める。
【0302】
アダプタがキャッシュから応答を受信する前により多くのジョブ要求を受信した場合、アダプタは、LIDが-1に設定されたより多くのリスト取得要求を発行する。
【0303】
第1のリスト取得コマンドに対する応答が受信される。
【0304】
これは、アダプタがキャッシュに追加すべき記述子の数とともにLIDを供給する。これは、リストの最初の取得リストであるので(記述子が存在しないか、又は要求されない)、記述子の「必要とされる」数は、記述子の「所望の」数と同じになる。
【0305】
同じキューへの追加のリスト取得コマンドに対する応答は全て、最初のリスト取得応答において戻されたものと同じLIDを有することになる。
【0306】
第1のリスト取得応答に続いて、アダプタは、LIDを要求キューと関連付ける、すなわち、LIDをそのキュー状態テーブルに記憶する。
【0307】
各リスト取得応答に続いて、アダプタは、「必要とされる」数の記述子をフェッチする、すなわち、cDMにメッセージロード要求を発行して、適切な位置から記述子をフェッチする。この位置は、ホスト、DRAM(ダイナミックランダムアクセスメモリ)、プログラマブルロジックメモリ、又は任意の他の好適な位置など、任意の好適な位置であり得る。
【0308】
アダプタは、cDMから記述子を受信し、記述子書き込みコマンドを使用してそれらをcDCに渡す。
【0309】
アダプタは、ジョブ要求を受信し、実行する。
【0310】
このとき、キューは有効なLIDを有することが予想される。この特性は、アダプタがこのジョブ要求に対して適切に優先順位付けされた将来のジョブ要求を有することによって保証される。有効なLIDが存在しない場合、アダプタは、ジョブを(0長ジョブとして)実行せずに終了する。
【0311】
有効なLIDが存在する場合、アダプタは、ジョブを実行し、一連の記述子読み出し要求を発行する。
【0312】
記述子読み出し動作は、パイプライン化され、これは、アダプタがジョブ実行中に複数の記述子読み出しをインフライトで有することが予想されることを意味する。
【0313】
アダプタの性質に応じて、アダプタは、各要求において1つ以上の記述子を要求し得る。読み出し要求はまた、ポップポインタに、既に消費された記述子の数に一致するように増分するように命令する。これは、キャッシュメモリを解放するために適時に行われる。
【0314】
アダプタは、応答不完全及び不十分な記述子エラーを監視し、それに応じて反応し得る。
【0315】
アダプタは、ジョブを完了する。
【0316】
アダプタは、ジョブを完了すると、リスト配置要求を発行する。
【0317】
高性能パイプライン化アダプタは、N個の記述子(Nは、パイプ深さである)によってジョブの終了をオーバーシュートする場合がある、すなわち、ジョブ終了状態に達したときに、依然としてN個の記述子読み出し要求をインフライトで有することになる。リスト配置要求は、どれだけの記述子をキャッシュが忘れることができるか、かつどれだけの記述子が再フェッチされなければならないかをキャッシュに知らせる。
【0318】
DMAアダプタは、記述子の数におけるジョブサイズが事前に知られていないことが多いので、それらのリスト取得割り振りをオーバーシュートすることがあり、その結果、アダプタは、大部分の典型的な状態を捕捉するデフォルトを求めることがある。多くの場合、より少ない記述子が必要とされる。
【0319】
アダプタが前もって必要とされる記述子の正確な数を知っている場合、アダプタは、より多くの記述子フェッチをインフライトで有するために、(より多くのキャッシュ空間を使用し、したがって他のキューを追い出すという代償を払って)それを過大評価する可能性がある。
【0320】
リスト配置動作は、次のジョブがたまたま同じリストに対するものである場合、リスト取得及び/又は記述子読み出しと組み合わせることができる。
【0321】
この一連の動作がその過程を完了まで実行した後、cDCによって維持される2つのリストごとの参照カウンタ(1つのカウントがリストに対して未処理であり、他のカウントがリストに対して未処理の記述子である)は、両方とも0になる。その後、リスト/キューは、追い出しの対象となる。
【0322】
処理中に、アダプタは、使用された<QID>及び<LID>並びに追加の追い出し記述子位置情報を有する追い出し応答メッセージを受信し得る。この発生により、アダプタは、リストを再安定化し、失われたエントリを再フェッチする。
【0323】
DMAアダプタは、DMA記述子をフェッチし、それらをcDCリストに書き込み、後でそれらを再び読み出して、要求されたDMA動作を実施する。cDCは、DMAアダプタがメモリアクセス待ち時間をカバーするのに十分な要求をインフライトで有することができるように、DMAアダプタに記憶装置を提供し得る。cDCの記述子メモリは、有限であり(コンパイル時にも指定される)、使い尽くされると、アイドルリスト及びそれらの記憶された記述子が追い出される。追い出しは、現在ジョブを処理していないリストに対してのみ行われる。追い出されたリストは、その後、他のDMAキューと関連付けられるために利用可能である。解放された記述子メモリエントリは、新しいエントリを保持するために利用可能である。追い出しは、追い出しメッセージを通じて要求側DMAアダプタに伝搬され、アダプタは、新しいリストを割り振り、追い出した記述子を再フェッチし、書き込む必要がある。キューとリストとの間の動的な関連付けは、cDCの追跡構造を、利用可能なキューIDの総数(及び潜在的に多数)とは無関係に保つ。追い出しタイミングは、追い出しがキュー寿命の明確に定義された時点の間(アクティブなジョブがないとき)にのみ発生し得るので、DMAアダプタ設計を簡略化し得る。
【0324】
cDCは、どんなアダプタの関与もなしに、その内部記述子及びリストリソースを管理する。
【0325】
キャッシュは、利用可能なリストをキューに自動的に割り当て、必要な量の記述子メモリ空間を確保する。
【0326】
キャッシュは、即時使用されていないと考えられるキューを自動的に追い出す。アダプタにおける複雑な競合状態を回避するために、キャッシュは、キューが追い出しに適格であるために以下の条件が満たされることを維持する。
【0327】
キューと関連付けられたリストは、保留中のリスト配置動作を有しない、すなわち、リストの参照カウンタ(各リスト取得に対して増分され、各配置リストに対して減分される)は、0である。これは、リストがアイドル状態であることを意味する。
【0328】
書き込みは、リスト配置によってまだ閉じられていないリスト取得の後でのみ保留にすることができるので、キューと関連付けられたリストは、保留記述子を持たない。言い換えれば、各リスト取得応答に対して指定された数の記述子だけ増分され、各書き込み記述子に対して指定された数の記述子だけ減分されるリストの参照カウンタは、0である。
【0329】
全体として、この条件は、1つ(以上)のジョブが実行されている間にキューが追い出されないことを意味する。インフライトジョブが完了した(遭遇した全てのリスト取得動作が、同じ数のリスト配置動作を受信することによって閉じられた)後にのみ、キューが追い出される。しかしながら、これは、キュー自体が完全に実行され、閉じられる前であり得る。
【0330】
キューが追い出されると、以下のことが起こり得る。
【0331】
キューと関連付けられたリストは、空きリストプールに解放され、新しいリスト取得動作による使用のために利用可能になる。
【0332】
リストによって参照されるキュー記述子を保持する記述子メモリ位置は、空き記述子メモリプールに解放され、新しいリスト取得動作による使用のために利用可能になる。
【0333】
cDCは、追い出し応答メッセージをキューの元のユーザに送る。
【0334】
多重化及び逆多重化ロジック(cDC-MDML)844の層は、必要なcDCを多アダプタ接続に提供する。MDMLは、cDCブロックの外側にあり、これは、cDCアダプタインターフェース及び挙動が、アダプタの数及び性質にかかわらず不変であることを意味する。アダプタAPIへのcDCは、要求-応答モデルを使用する。
【0335】
cDCは、全ての要求をそれらが供給される順序で実行する1つの論理スレッドから構成される。
【0336】
スケジューラは、複数のストリームが共有バッファリソースにアクセスするか、又はバッファリソースがバックプレッシャの影響を受ける任意の状況においてトラフィックを管理する必要がある。スケジューラは、様々なスケジューリングエンティティタイプから構成され得、スケジューリング動作を完了するのにかなりの時間(時には数十クロックサイクル)を要し得る。これに適応するために、データ移動は、ジョブが2kBであり得るジョブ単位でスケジュールされ得る。これは、一例であり、他の実施形態では、他のジョブサイズが使用され得る。ジョブ応答メッセージは、それらのオーバーロードを回避するために、スケジューラに戻される前に調整(すなわち、集約)され得る。
【0337】
ホストアクセスハンドラHAH828は、DMAアダプタへのドアベルのフローを制御し、ドアベルへのアクセスを調整し得る。
【0338】
HAHは、非DMA及びDMA固有の両方のホストからの全てのターゲットアクセスを処理し得る。
【0339】
【0340】
1200で参照されるように、本方法は、ネットワークインターフェースデバイスのデータソースから、ネットワークインターフェースデバイスのメモリにおいて、バスセグメントの幅に対応する幅を有する第1の書き込み出力を受信することを含み、書き込み出力が、第1のデータを含む。
【0341】
この書き込み出力は、例えば、
図8に関連して先で説明される書き込みパイプ862の出力によって提供され得る。
【0342】
1202で参照されるように、本方法は、メモリの第1のメモリセルに第1のデータを書き込むことを含み、第1のメモリセルが、バスセグメントの幅に一致する幅を有する。
【0343】
メモリは、先で説明されるようなシンクメモリであり得る。メモリは、RAMセルなどの物理セグメント幅メモリセルを含み得る。
【0344】
cSI822は、インターコネクトの一例であり、他の実施形態では、バスセグメントの幅に一致する幅を有するメモリセルを有するメモリを有する任意の他の好適なインターコネクト構成を使用し得ることを理解されたい。
【0345】
本発明の構成のいくつかの非限定的な例が、以下に提供される実施例の非網羅的なリストにおいて説明される。
【0346】
実施例1.ネットワークインターフェースデバイスであって、このネットワークインターフェースデバイスが、データソースと、データシンクと、データソースからデータを受信することと、データシンクにデータを出力することと、を行うように構成されたインターコネクトと、を備える。インターコネクトが、メモリセルを有するメモリであって、各メモリセルが、バスセグメントの幅に一致する幅を有し、メモリが、バスセグメントの幅に対応する幅を有する第1の書き込み出力を受信するように構成されており、第1の書き込み出力が、メモリの第1のメモリセルに書き込まれる第1のデータを含み、第1のデータが、データソースからのものである、メモリを含む。
【0347】
実施例2.データソース及びデータシンクをインターコネクトに接続する1つ以上のセグメント化されたバスを備え、セグメント化されたバスが、バスセグメントの幅を有するバスセグメントを含む、実施例1に記載のネットワークインターフェースデバイス。
【0348】
実施例3.メモリが、データシンクからの読み出し要求に応答して、第1のデータを出力するように構成されており、出力が、バスセグメントの幅を有する、実施例1に記載のネットワークインターフェースデバイス。
【0349】
実施例4.インターコネクトが、複数の要求を受信するように構成されたメモリマルチプレクサを含み、複数の要求が、複数のデータシンクからの複数の読み出し要求と、複数のデータシンクからの複数の書き込み要求と、を含み、メモリマルチプレクサが、要求のうちのどの1つ以上を進めるか、かつどの1つ以上の要求をバックプレッシャするかを判定するように構成されている、実施例1に記載のネットワークインターフェースデバイス。
【0350】
実施例5.メモリマルチプレクサは、2つの要求がメモリの同じメモリセルに対するものであると判定することと、どの要求がより大きい一連の要求の一部であるかに基づいて、2つの要求のうちのどちらを進めるかを判定することと、を行うように構成されている、実施例4に記載のネットワークインターフェースデバイス。
【0351】
実施例6.インターコネクトが、構成可能なインターフェースを含み、構成可能なインターフェースが、1つ以上のインターフェースを提供するように構成可能であり、各個々のインターフェースのサイズが、バスセグメントの幅の整数倍に等しいサイズを有し、整数倍が、1以上である、実施例1に記載のネットワークインターフェースデバイス。
【0352】
実施例7.構成可能なインターフェースの個々のインターフェースのうちの異なるものが、異なるデータシンクのためのデータを受信するように構成されている、実施例6に記載のネットワークインターフェースデバイス。
【0353】
実施例8.構成可能なインターフェースの全幅が、バスの全てのバスセグメントの全幅に等しい、実施例6に記載のネットワークインターフェースデバイス。
【0354】
実施例9.インターコネクトが、インターフェースを含み、インターフェースが、バスの全てのバスセグメントの幅に等しい幅を有し、インターフェースが、複数の異なるデータソースから同時にデータを受信するように構成されている、実施例1に記載のネットワークインターフェースデバイス。
【0355】
実施例10.データソースから第1のデータに対する第1の書き込み要求を受信することと、第1のメモリセルのアドレスを第1の書き込み要求の第1のデータと関連付けることと、第1の書き込み出力を提供することと、を行うように構成された書き込みパイプを備える、実施例1に記載のネットワークインターフェースデバイス。
【0356】
実施例11.書き込みパイプは、第1の書き込み出力が書き込みパイプによって出力される前に、第1の書き込み出力を記憶するためのバッファを含む、実施例10に記載のネットワークインターフェースデバイス。
【0357】
実施例12.データシンクから読み出し要求を受信することと、データが読み出されるメモリのメモリセルのアドレスを読み出し要求と関連付けることと、を行うように構成された読み出し要求パイプを備える、実施例1に記載のネットワークインターフェースデバイス。
【0358】
実施例13.データソースが、カプセルを出力するように構成され、データシンクが、カプセルを受信するように構成されており、カプセルが、データ及びルーティング情報を含む、実施例1に記載のネットワークインターフェースデバイス。
【0359】
実施例14.各メモリセルが、バスセグメントの幅であるポート幅を有するランダムアクセスメモリを含む、実施例1に記載のネットワークインターフェース。
【0360】
実施例15.ネットワークインターフェースデバイスにおける方法であって、本方法が、ネットワークインターフェースデバイスのデータソースから、ネットワークインターフェースデバイスのメモリにおいて、バスセグメントの幅に対応する幅を有する第1の書き込み出力を受信することであって、書き込み出力が、第1のデータを含む、受信することと、メモリの第1のメモリセルに第1のデータを書き込むことであって、第1のメモリセルが、バスセグメントの幅に一致する幅を有する、書き込むことと、を含む、方法。
【0361】
実施例16.本方法が、インターコネクトのメモリマルチプレクサによって、複数の要求を受信することであって、複数の要求が、複数のデータシンクからの複数の読み出し要求と、複数のデータシンクからの複数の書き込み要求と、を含む、受信することと、メモリマルチプレクサによって、要求のうちのどの1つ以上を進めるか、かつどの1つ以上の要求をバックプレッシャするかを判定することと、を含む、実施例15に記載の方法。
【0362】
実施例17.本方法が、1つ以上のインターフェースを提供するようにインターコネクトの構成可能なインターフェースを構成することを含み、各個々のインターフェースのサイズが、バスセグメントの幅の整数倍に等しいサイズを有し、整数倍は、1以上である、実施例15に記載の方法。
【0363】
実施例18.本方法が、第1の書き込みパイプによって、データソースから第1のデータに対する第1の書き込み要求を受信することと、第1の書き込みパイプによって、第1のメモリセルのアドレスを第1の書き込み要求の第1のデータと関連付けることと、第1の書き込みパイプによって、第1の書き込み出力を提供することと、を含む、実施例15に記載の方法。
【0364】
実施例19.本方法が、読み出し要求パイプによって、データシンクから読み出し要求を受信することと、
読み出し要求パイプによって、データが読み出されるメモリのメモリセルのアドレスを読み出し要求と関連付けることと、を含む、実施例15に記載の方法。
【0365】
実施例20.本方法が、データソースによってカプセルを出力することと、データシンクによってカプセルを受信することと、を含み、カプセルが、データ及びルーティング情報を含む、実施例15に記載の方法。
【0366】
本明細書で提供される本発明の構成の説明は、例解を目的とするものであり、網羅的であること、又は開示される形態及び例に限定されることを意図するものではない。本明細書で使用される用語は、本発明の構成の原理、実際の適用、又は市場で見られる技術に対する技術的改善を説明するために、及び/又は他の当業者が本明細書で開示される本発明の構成を理解することを可能にするために選択された。説明した本発明の構成の範囲及び精神から逸脱することなく、修正及び変形が当業者には明らかであり得る。したがって、このような特徴及び実装形態の範囲を示すものとして、前述の開示ではなく、以下の特許請求の範囲が参照されるべきである。
【国際調査報告】