(58)【調査した分野】(Int.Cl.,DB名)
メモリ内に格納されたそれぞれのパケット用のパケットデータをネットワークアダプタ上のPIO送信メモリに書き込むためのプログラム入力/出力(PIO)書込み命令のシーケンスをプロセッサによって受信するステップと、
PIO書込み命令の前記シーケンスを、アウトオブオーダー実行をサポートする前記プロセッサ上の命令スレッドとして実行するステップであって、PIO書込み命令の実行は、データをストアバッファ内のストアユニットに書き込ませ、ストアブロックにグループ分けされた前記ストアユニットは一列のストアユニットを備え;前記PIO書込み命令の一部はアウトオブオーダーで実行され、結果的にデータは、前記ストアブロックが充填される前に異なるストアブロック内のストアユニットに書き込まれる、ステップと、
ストアブロックが充填されたときを検出するステップと、
ストアブロックが充填されたことの検出に応えて、前記PIO送信メモリ内のバッファへのポステッドライトを介して前記ストアブロック内の前記データをドレインするステップと、
を備える方法。
前記メモリは64バイト(64B)キャッシュラインを採用し、各ストアブロックは64バイトのデータを備え、前記ポステッドライトは64BのPCIe(Peripheral Component Interconnect Express)ポステッドライトを備える、請求項1に記載の方法。
前記プロセッサは64ビットプロセッサを備え、各ストアユニットは、単一の命令を用いて前記プロセッサ内の64ビットデータレジスタからストアユニットに書き込まれた64ビットのデータを備える、請求項1に記載の方法。
前記プロセッサはライトコンバイニングを採用し、アウトオブオーダーPIO書込み命令の実行の結果、データは不連続順でストアブロック内のストアユニットに書き込まれる、請求項1に記載の方法。
メモリ内に格納されたそれぞれのパケット用のパケットデータをネットワークアダプタ上のPIO送信メモリに書き込むためのプログラム入力/出力(PIO)書込み命令のシーケンスをプロセッサによって受信するステップであって、各PIO書込み命令は、データ、および前記データが書き込まれるPIO送信メモリ内の送信ブロックのメモリマップアドレスを包含するメモリ内のキャッシュラインの位置を定義する、ステップと、
PIO書込み命令の前記シーケンスを、アウトオブオーダー実行をサポートする前記プロセッサ上の命令スレッドとして実行するステップであって、PIO書込み命令の実行は、データをストアバッファ内のストアブロックに書き込ませ、前記PIO書込み命令の一部はアウトオブオーダーで実行され、その結果、前記PIO書込み命令が受信される順序とは異なる順序でデータがストアブロックに書き込まれる、ステップと、
ストアブロックが充填されたときを検出するステップと、
ストアブロックが充填されたことの検出に応えて、前記データを前記送信ブロックに書き込むために使用された前記PIO書込み命令内に包含されるアドレスに位置する前記PIO送信メモリ内の送信ブロックへのポステッドライトを介して前記ストアブロック内の前記データをドレインするステップと、
を備える方法。
前記PIO書込み命令は512ビット書込み命令を備え、メモリキャッシュライン、ストアブロック、および送信ブロックの各々は64バイトのサイズを有する、請求項8に記載の方法。
ポステッドライトは、64バイト(64B)PCIe(Peripheral Component Interconnect Express)ポステッドライトを備える、請求項9に記載の方法。
アウトオブオーダー実行をサポートし、メモリインタフェース、少なくとも1つのストアバッファ、および第一PCIe(Peripheral Component Interconnect Express)インタフェースを含む複数のプロセッサコアを有する、プロセッサと、
PCIe相互接続を介して前記プロセッサの前記第一PCIeインタフェースに結合された、第二PCIeインタフェースと、
前記第二PCIeインタフェースに動作可能に結合され、プログラム入力/出力(PIO)送信メモリを含む、伝送エンジンと、
を備える装置であって、前記プロセッサは、
前記メモリインタフェースに結合されたときにメモリ内に格納されたそれぞれのパケット用のパケットデータを前記PIO送信メモリに書き込むためのプログラム入力/出力(PIO)書込み命令のシーケンスを受信し、
PIO書込み命令の前記シーケンスをプロセッサコア上の命令スレッドとして実行し、ここでPIO書込み命令の実行は、データをストアバッファ内のストアユニットに書き込ませ、ストアブロックにグループ分けされた前記ストアユニットは一列のストアユニットを備え;前記PIO書込み命令の一部はアウトオブオーダーで実行され、結果的にデータは、前記ストアブロックが充填される前に異なるストアブロック内のストアユニットに書き込まれ、
ストアブロックが充填されたときを検出し、
ストアブロックが充填されたことの検出に応えて、前記PCIe相互接続を通じて送信された前記PIO送信メモリ内のバッファへのPCIeポステッドライトを介して前記ストアブロック内の前記データをドレインする、
回路および論理を含む、装置。
前記プロセッサは64ビットプロセッサを備え、各ストアユニットは、単一の命令を用いて前記プロセッサ内の64ビットデータレジスタからストアユニットに書き込まれた64ビットのデータを備える、請求項14に記載の装置。
前記プロセッサはライトコンバイニングを採用し、アウトオブオーダーPIO書込み命令の実行の結果、データは不連続順でストアブロック内のストアユニットに書き込まれる、請求項14に記載の装置。
前記放出ブロックから前記伝送ポートに放出されるために充填された前記複数の送信コンテキスト内のパケットの中からパケットを選択するためのアービタを実現するための回路および論理をさらに備える、請求項20に記載の装置。
前記伝送エンジンは、送信ダイレクトメモリアクセス(SDMA)メモリと、前記SDMAメモリ内のバッファにデータを書き込むためにDMA転送を用いて前記プロセッサに結合されたメモリからデータを引き出すように構成された複数のSDMAエンジンと、をさらに備える、請求項20に記載の装置。
前記装置は、請求項24に記載のホストファブリックインタフェースのために定義された構成を有する複数のホストファブリックインタフェースを備える、請求項24に記載の装置。
【発明を実施するための形態】
【0007】
sfenceを用いずに最適化されたPIO書込み(write、ライト)シーケンスを用いてパケットを送信する方法および装置の実施形態が、本明細書に記載される。以下の説明において、本発明の実施形態の徹底的な理解を提供するために、多くの具体的詳細が明記される。しかしながら当業者は、具体的詳細の1つ以上を伴わずに、またはその他の方法、構成要素、材料などを用いても、本発明が実践可能であることを、認識するだろう。別の例では、本発明の態様が曖昧にならないように、周知の構造、材料、または動作は詳細に図示または記載されない。
【0008】
明確さのため、本明細書図中の個々の構成要素は、特定の参照番号ではなくむしろ図中のラベルで呼ばれることもある。加えて、(特定の構成要素に対抗して)特定のタイプの構成要素を指す参照番号は、「典型的」を意味する「(typ)」が付いた参照番号で示されてもよい。これらの構成要素の構成は、図面に示されるが簡潔さおよび明確さのためラベル付けされていない類似構成要素の典型となることは、理解されるだろう。反対に、「(typ)」は、構成要素、要素などが一般的にその開示される機能、実現、目的などのために使用されると意味するよう解釈されるべきではない。
【0009】
図1は、システムメモリとファブリックインタフェースとの間のパケットデータスループットの向上を容易にするパケットデータ取り扱い技術の態様を説明するために本明細書で使用される、例示的なシステム100を示す。システム100は、メモリ相互接続107を介してメモリ106(一般的にシステムメモリとも称される)に同様に結合された、Peripheral Component Internet Express(PCIe;ピーシーアイエクスプレス)相互接続105を介してホストプロセッサ104に結合された、ホストファブリックインタフェース(HFI)102を含む。HFI102は、ファブリックポート112の伝送ポート110に結合された伝送エンジン108と、ファブリックポート112の受信ポート116に結合された受信エンジン114と、を含む。伝送エンジン108および受信エンジン114の各々はまた、PCIe相互接続(interconnect)105を介したHFI102とプロセッサ104との間の通信を容易にするPCIeインタフェース(I/F)118にも結合されている。
【0010】
伝送(transmit)エンジン108は、送信(send)メモリ120、複数の送信(send)DMA(SDMA)エンジン123を含む送信ダイレクトメモリアクセス(送信DMA)ブロック122、バッファ124、放出(egress)ブロック126、およびクレジット返信機構(credit return mechanism)127を含む。受信(receive)エンジン114は、Rx受信(receive)ブロック128、受信(receive)バッファ130、DMAエンジン132、中央制御エンジン(CCE)134、パーサ136、1セットのパイプラインブロック138、および受信レジスタアレイ(Rcv Array)140を含む。「送信(send)」エンジンとも称される伝送エンジン108は、ファブリックリンク(たとえば、図示されないが伝送ポート110に結合されたファブリックリンク)への放出用のパケットを生成する。送信エンジンによって提供される2つの異なる機構は、PIO送信および送信DMAである。
【0011】
PIO送信は、「プログラム入力/出力(Programmed Input/Output)」送信の略である。PIOは一部の人々に、「メモリマップ入力/出力(MMIO;Memory−mapped Input/Output)としても知られている。PIO送信のため、ホストプロセッサ104は、格納命令を用いてメモリマップ送信バッファにパケットのヘッダおよびペイロードを書き込むことによって、パケットを生成する。PIO送信は、プロセッサがパケットをHFI102に向かって押すという意味において、パケット「プッシュ」と見なされることも可能である。送信メモリ120内で実現される送信バッファは、送信バッファへのプロセッサ書込みが、PCIe相互接続105およびPCIeインタフェース118上で送信メモリ120に転送されるPCIe書込みトランザクションになるように、アダプタの物理アドレス空間の中にある。
【0012】
送信メモリ120内の多数の送信バッファプラス送信バッファクレジットをホストプロセッサ104に返信するために使用される機構は、「送信コンテキスト」と呼ばれる。一実施形態において、最大160個の独立した送信コンテキストがHFI102によって提供され、PIO送信機構の最大160の並行して独立したユーザを許容する。PIO送信は、送信コンテキストをユーザプロセスの仮想アドレスマップに直接マッピングすることによって、ユーザモードソフトウェアから直接使用されることが可能である。
【0013】
PIO送信は、送信されたパケットの低遅延および高メッセージ速度を送達する、超低オーバーヘッド送信機構を提供する。適切であれば、帯域幅を改善するためにPCIe相互接続およびインタフェース上で細かい書込みを64B(バイト)書込みに凝集するため、ホストプロセッサ104のライトコンバイニング(write―combining:書込み結合)およびストアバッファ機能が使用される。ホストプロセッサ104は送信バッファへのパケットのバイトの書込み(本質的にメモリコピー)に関わるので、PIO送信機構はプロセッサに集約される。これらの性能特性は、PIO送信を小型から中型メッセージ向けに非常によく最適化させる。
【0014】
送信DMAまたはSDMAと略される送信ダイレクトメモリアクセスは、著しく低いプロセッサ利用でパケットが伝送エンジン108に送信されるように、プロセッサメモリコピーを排除する。PIO送信機構のようにプロセッサ書込みを用いてパケットをHFI102に対して押す代わりに、送信DMAブロック122内のSDMAエンジン123は、ファブリックリンクに放出されるパケットを形成するために、ホストメモリ106から直接パケットヘッダおよびペイロードを引き出す。一実施形態において、送信DMAブロック122は16個の独立したSDMAエンジン123をサポートし、各々は自身のSDMA待ち行列に関連付けられている。
【0015】
送信PIOおよびSDMAのいずれも、パケットの送信に蓄積転送アプローチを使用する。ヘッダおよびペイロードは、パケットがリンクに放出され始めるようになる前に、伝送エンジン108上の送信バッファによって完全に受信されなければならない。送信メモリ120およびSDMAバッファ124として
図1に示されるように、送信バッファメモリがこの目的のためHFI102上に提供され、別の送信バッファメモリが送信PIOおよびSDMAのために提供される。一実施形態において、この分割はHFI設計にハードワイヤドで組み込まれており、ソフトウェア構成可能ではない。しかしながら、送信PIO用の送信メモリ120は、送信バッファクレジットの粒度でのソフトウェア制御の下で送信コンテキストに割り当てられることが可能である。同様に、SDMAバッファ124内の送信バッファメモリは、同じ粒度でSDMAエンジン123に割り当てられることが可能である。
【0016】
受信エンジン114の基本機能は、受信ポート116で受信した(ファブリックからの)インバウンドパケットのヘッダおよびペイロードを分離して、パケットヘッダおよびペイロードデータをホストメモリ106に書き込むことである。一実施形態において、HFI102のために設計されたパケットデータは、受信ポート116で受信された「フリット(flit)」(フリットストリーム)を備えるデータユニットのストリームとしてファブリックのリンクを介して転送されるが、フリットはパケットに再構築され、これらはその後受信エンジン114に転送される。着信するパケットデータはまずRx受信ブロック128で処理されるが、ここでパケットのヘッダ内の様々なフィールドが、パケットのタイプを判断するために抽出およびチェックされる。パケットデータ(そのデータペイロード)は受信バッファ130内に格納され、その一方でパケットヘッダはパーサ136に転送され、これはその宛先アドレスおよびその他のフィールドデータを抽出するためにヘッダデータを解析し、同時にさらなる動作がパイプライン演算138によって実行される。該当するパイプライン演算と併せて、パケットデータが受信バッファ130から読み出されてDMAエンジン132を介して転送されるが、これはPCIe DMA書込みを介してメモリ106にパケットデータを転送するように構成されている。
【0017】
図1は、CLK1およびCLK2で示される2つのクロックドメインの使用を示すために用いられる垂直な点線146を、さらに示す。いくつかの実施形態において、PCIeインタフェース118に使用されるクロック周波数は、残りのHFI構成要素のために使用されるクロック周波数とは異なってもよく、各クロックドメインには別の基準クロックが用いられる。図示されないものの、伝送ポート110および受信ポート116内で使用されるクロックドメインもまた、伝送エンジン108および受信エンジン114によって採用されるクロックドメインとは別であってもよい。
【0018】
図2は、送信PIOおよびSDMA動作のさらなる詳細を示す。図示されるように、最大160個の送信コンテキストが、送信PIOパケットデータに関連して採用されてもよい。各送信コンテキストは、その送信コンテキストに割り当てられたPIO送信メモリ120の隣接したスライスを備える。したがって送信コンテキスト用の送信バッファは、ホスト物理アドレス空間の中で隣接することになる。ユーザプロセスのためのユーザ仮想アドレス空間内へのこの送信バッファの通常マッピングもまた通常は、実質的に隣接する。一実施形態において、各送信コンテキストがn×64Bを備えるように、送信バッファ内の送信ブロックは64Bのブロックを備え、ここでnは0より大きい整数である。一実施形態において、送信ブロックは64Bの境界上に揃えられるが、しかし送信バッファ割り当てに対しては何ら追加アライメント制約は設けられない。一実施形態において、送信コンテキストのために割り当てられた送信バッファのサイズは限界を有する。たとえば、一実施形態においてPIO送信メモリ120のサイズは1MB(1,048,576バイト)であり、最大送信バッファサイズは64KB(n=1024)である。
【0019】
一実施形態において、ホストプロセッサ104は4KBページ粒度を用いるメモリページングを採用する。しかしながら、ホスト仮想アドレス空間内への送信バッファメモリマッピングは、4KBページ粒度である必要はない。
【0020】
このアーキテクチャ選択は、送信バッファが64Bの粒度であるときに、ホストプロセッサの4KBのページング機構が2つの送信コンテキストの間に保護を提供するのに十分ではないことを意味している。単純なアドレス空間再マッピングは、ベースオフセットを用いてHFI102によって実施され、送信コンテキストによって区切られる。これは、特定のコンテキストのため送信バッファにアクセスするために使用される物理アドレス内に送信コンテキスト番号を含むことによって、達成される。このため送信コンテキスト番号は、ドライバがユーザプロセスのために設定するマッピングの物理アドレス内に含まれる。HFI102は、現在書き込まれている送信コンテキストを識別するために、送信バッファへの書込みに関する情報を使用し、送信コンテキストが送信バッファメモリ内のその特定の送信ブロックへのアクセスを有することを認証し、その後送信バッファメモリ内に指数へのアドレスを再マッピングするために、その送信コンテキストの情報を調べるためその値を使用する。このアプローチは、各送信バッファの開始がHFIのアドレスマップ内の4KBのページに揃えられるようにしながら、まだ64Bの粒度で送信バッファメモリを共有できるようにする。
【0021】
先に論じられたように、送信バッファごとの送信バッファメモリの最小量は、1送信ブロックに対応する64Bである(n=1)。送信バッファごとの送信バッファメモリの最大量は、1024個の送信ブロックとなる64KBである。一実施形態において、この制限は、PIO送信機構によるアドレス指定に使用される物理アドレスマップの量を制限するために設けられる。加えて、新規パケットの開始(SOP)である送信ブロックと新規パケットの開始ではない送信ブロックとを区別するために、1つ以上のアドレスビットが使用される。この符号化は、パケット境界が区切られるようにし、PIO送信機構の使用の正当性に対するサニティチェックを提供する。加えて、SOP送信ブロック内の最初の8Bは、Per Buffer Control(PBC)情報をHFI102に渡すために使用される。PBCは、パケットデータ自体の一部ではない64ビット制御クワッドワード(QW)であるが、しかしパケットに関する重要な制御情報を包含する。アドレス内のSOPビットは、アダプタが送信バッファへの書込みの着信ストリーム内でPBC値を位置特定できるようにする。
【0022】
一実施形態において、PIO送信物理アドレス空間の復号化が、以下の表1に定義され、
図3に示される。
図3に示される実施形態において、PIO送信バッファメモリによって占有される物理アドレス空間の総量は32MBである。
【0023】
【表1】
アドレスマッピングプロセスの3つの例が、
図4に示される。なお、3つの例示的コンテキストは、送信バッファメモリ内で隣接しており、4KBページ上では揃っておらず、送信コンテキストにわたって共有することなくホスト仮想アドレス空間内にマッピングされ得るように、コンテキスト番号によって装置物理アドレス空間内で分離していることに、注意する。この極端な例は、PIO送信メモリ120内の送信バッファメモリに値する同じ4KB上に各々マッピングされた1つの64B送信ブロックの64個の異なる送信コンテキストを使用する、64のユーザプロセスであろう。
【0024】
例として、送信コンテキスト0のアドレスマッピングを検討する。この送信コンテキストは、64ブロックすなわち4KBのユーザプロセス仮想アドレス空間を備える。コンテキストは装置物理アドレス空間のビット[23:16]で符号化され、その一方で仮想アドレスビット[11:0]が仮想−物理アドレス変換において確保される。送信コンテキストが新規パケットの開始に対応する場合にはビット24が設定(「1」)され、そうでなければビット24が解除される(「0」)ことに、さらに注意する。物理アドレス−PIO送信メモリアドレスマッピングは、アドレスのコンテキストベースビット[15:0]にコンテキストアドレスビット[24:16]を加える。さらに図示されるように、送信コンテキストのサイズは、仮想メモリ、物理メモリ、およびPIO送信メモリの各々において同じである。送信コンテキスト1および送信コンテキスト2には、類似のアドレスマッピングが採用される。
【0025】
PIO送信のためのパケット充填は、ホストアドレス空間内にマッピングされた送信バッファ内へのホストプロセッサ書込みを使用する。マッピングは通常、プロセッサ書込みがHFI102へのPCIe上のポステッドライトトランザクションとして押し出される前にキャッシュ格納される代わりに、64Bプロセッサストアバッファサイズまで都合よく凝集されるように、ライトコンバイニングとして構成される。
【0026】
一実施形態において、HFIアーキテクチャは、8B粒度のPIO送信書込みトランザクションを採用する。したがって、各トランザクションは8Bの倍数のサイズであり、8Bで揃えられたアドレス上で開始する。一実施形態において、各書込みは、各書込みが64B送信ブロック内に包含されることを保証するために64B境界を超えないという要件がある。したがって、一実施形態において、PIO送信は、サイズが64Bであって64Bに揃えられたPCIe書込みを採用する。
【0027】
最高性能のため、ソフトウェアはアドレス昇順で送信バッファを充填し、64B転送のために最適化されることが、推奨される。一実施形態において、ソフトウェアは、PIO送信動作のために使用されるすべての送信ブロックが正確に充填されるように、64Bの倍数まで書込みシーケンスを生成するためのパディングを(適宜)採用する。このため、命令の観点から、ソフトウェアは次の64B送信ブロックへの書込みを開始して最後の64B送信ブロックまで継続する前に、1つの64B送信ブロックのすべてを書き込むべきである。プロセッサライトコンバイニング機構はこれらの書込みを並べ替えることができ、したがってHFIハードウェアはPCIe上でこの順番で到着するこれらの書込みシーケンスに依存しない。HFIハードウェアは、8Bレベルの書込みシーケンスの任意の並べ替えをサポートする。書込みシーケンスに順序を付与するために、ソフトウェアによってsfence命令が使用可能である。しかしながら、sfenceは高額な動作であるので、HFIハードウェアは、以下に記載されるようにsfenceの必要性を排除するための最適化を提供する。
【0028】
各送信コンテキストは、ホストメモリ内にマッピングされた書込み専用送信バッファを提供する。先に記載されたように、4KBで揃えられたアドレスの送信バッファ開始は、サイズが最大64KBであり、64B送信ブロックの単位である。PIO送信機構は、FIFO順で送信バッファにパケットを書き込むことによって進められる。一実施形態において、各パケットは、8BPBCを書込み、その後ヘッダおよびペイロードがアドレス昇順で続くことにより、充填される。このシーケンスによって占有される送信バッファの量は、整数の隣接する64B送信ブロックとなるように(送信バッファメモリを中心とした隣接法のように)切り上げられ、ソフトウェアはこれらの64B送信ブロックのすべてを正確に充填するために、その書込みシーケンスまで引き上げるように構成されている。
PBCは、各PIO送信の最初の64B送信ブロックの最初の8Bである。最も小さいPIO送信は1つの送信ブロックであり、その一方でサポートされる最大のパケットサイズは128B+10KB MTU(最大転送単位:Maximum Transfer Unit)に対応する162送信ブロックを必要とする。書込み上のパケットサイズは4Bの倍数であり、そのためより粒状の64B送信ブロックの使い方における柔軟性が提供される:
・4Bの倍数の回線上のパケット長は、PBCのPbcLengthDWsフィールドに指定される。
・64Bの倍数の充填サイズは、PbcLengthDWsを64Bの倍数まで切り上げることによって決定される。
・充填サイズは、8BのPBCプラスパケット長プラス書込みシーケンスを64Bの倍数にするためにいずれか必要なパディングに及ぶ。すべての送信ブロックが完全に充填されるので、64Bパディング要件はハードウェア実装を簡素化する。加えて、このアプローチは、64Bまで充填されるパケットの最後の部分のためのライトコンバイニングストアバッファが明確なsfence命令を使用せずこれを自動的にHFIにドレインさせることを保証することにより、性能を改善する。パディングバイトは、回線に放出されるパケットに寄与しない。
【0029】
一実施形態による、送信バッファのレイアウトが
図5に示される。送信バッファメモリは、FIFO的セマンティックとともに使用される。FIFO順は、送信バッファマッピングで各パケットに使用される送信ブロックのアドレス順によって定義される。なお、送信バッファはラップアラウンド的に使用される(たとえば円形FIFOとして実施される)ことに、注意する。これは、一旦ソフトウェアが送信バッファの最後の64Bを書き込んだら、アドレスを更新して送信バッファのベースに戻す必要があることを、意味する。送信バッファへのこの書込みは、ホストプロセッサが、まだファブリックに放出されていない前のパケットからまだ使用中の送信バッファブロックに上書きしないことを保証するための、クレジット制限およびクレジット返信ポリシーの対象である。FIFO的セマンティックとは、
・ライトコンバイニングの実施に内在する書込みの並べ替えに対処する再構築機能があっても、パケットはFIFO順で充填される。
・パケットは引き続きFIFO順で発信する。発信後、パケットはVL調停の対象となる。
・パケットは引き続きper−VL発信FIFOから放出され、同じVLの同じコンテキストからのパケットでは順序通りとなるが、異なるVLでは同じ送信コンテキストからのパケットでも順序通りにならないだろう。
・クレジット返信は元のFIFO順である。これは、無秩序に放出されるパケットのクレジットは、その送信コンテキスト上の先のパケットがすべて既に放出されるまで回復されないことを意味する。
【0030】
ライトコンバイニングマッピングは、パケットを構築するために使用される書込みをホストプロセッサが並べ替えられるようにする。従来のアプローチの下では、順序を付与するプロセッサアーキテクチャ機構はsfence命令である。これにより、sfence命令より前のすべての書込みがsfence命令後のすべての書込みに先立つHFIから見えるようになることを保証する。しかしながら、この順序付けは、ホストプロセッサ内でストアを発行するCPUコアから統合入出力ブロック(IIO;Integrated Input−Output)内の順序付けポイントまでの往復を要するので、著しいコストを伴う。これは著しい遅延を加え、またsfence順序付けが確認されるまでその他すべてのストアがCPUコア内で完了するのを妨げる。CPUのアウトオブオーダー能力は、命令による何らかの前進がこの遅延をカバーできるようにするが、しかしこれらのリソースはすぐに尽きる可能性があり、回復すべき生きている命令の重要なバックログが生じる。HFIアーキテクチャは、sfence命令がライトコンバイニングシーケンスを順序付ける必要性を最小化または排除しようとする。
【0031】
第一の最適化は、パケット内のsfenceの排除である。ここで1つのパケットのPIO送信動作を備える書込みはプロセッサによって並べ替えられることが可能であり、HFIは正しい順序を再構築し、パケット充填が完了してパケットが発信されるようにすべての書込みが到着したときを検出する機構を提供する。この最適化は、パケット内の送信ブロックの数についてさらなる利益を提供する。第二の最適化は、パケット間のsfenceの排除であり、これはHFIが、インターリーブされた書込みを異なるパケットPIO送信からそれぞれのパケットに再構築することを必要とする。この最適化は、単一の64B送信ブロックに適合するパケットの一般的な例など、短いパケットにとって非常に重要である。HFIによって提供される機構は、両方の最適化をカバーする。
【0032】
HFIは、アドレスを復号化することによっていずれのPIO送信書込みの正確なデータ配置も決定する。コンテキストはより高次のアドレスビットで利用可能であり、これは、送信コンテキストがベースの使用へのアクセスを有する送信バッファ部分を決定し、既に記載された再マッピングとの境界を示す。アドレスの最も低い16ビットは、その送信バッファ内の書込み済みデータの配置を決定する。このアプローチは、これらの書込みが8B粒度に並べ替え/分割/統合したとしても、8B粒度の書込みが送信バッファメモリのパケットにいつも正しく再構築されることを保証する。
【0033】
図6aは、一実施形態によるシステム100のさらなる詳細を示す。プロセッサ104は、アウトオブオーダー実行をサポートする複数のプロセッサコアを備えるCPU600を含む。一実施形態において、各物理プロセッサコアは、Intel(登録商標)CorporationsのHyperthreading(商標)アーキテクチャの下でサポートされるものなど、2つの論理コアとして実現されてもよい。一実施形態において、プロセッサ104は64ビットプロセッサであり、各コアは複数の64ビット(64b)レジスタを含む。プロセッサ104はまた、レベル2(L2)キャッシュ602と、各コアについて命令キャッシュ604およびデータキャッシュ606に分割されるレベル1(L1)キャッシュと、を含む。簡潔さのため図示されないものの、プロセッサ104は、プロセッサコアにわたって共有される最終レベルキャッシュ(LLC)も採用してよい。プロセッサ104は、ストアバッファ制御論理609を介して制御されるストアバッファ608、IIOブロック610、およびPCIeインタフェース612を、さらに含む。プロセッサ104の内部構造の一実施形態のさらなる詳細は、
図17に示され、以下に記載される。
【0034】
一実施形態において、メモリ106およびL2キャッシュ602の各々は64バイトのキャッシュラインを採用し、その一方でストアバッファ608は64バイトのストアブロックを採用する。さらに図示されるように、一実施形態においてデータは、「mov」命令を用いて64ビット(8バイト)単位でCPU600内の64bレジスタからストアバッファ608に書き込まれる。簡潔さのため、mov命令は、本明細書の図中において「mov.q」と記される。
【0035】
選択的に、データは16Bおよび32Bなどその他のサイズを有するストアユニットを用いてストアバッファ608に書き込まれてもよい。以下により詳細に記載されるように、一実施形態において、64Bのデータを64Bのストアブロックに書き込むために512ビット書込み命令が使用されるが、各64B書込みは1つのストアブロックを充填する。
【0036】
PIO送信メモリ120は、2つの送信コンテキスト(送信コンテキスト1および送信コンテキスト2)を含むように示されている;しかしながら、実際の実施ではPIO送信メモリ120は一般的により多くの送信コンテキスト(最大160まで)を有することが、認識されるだろう。送信コンテキストは、ソフトウェアアプリケーションに(さもなければ別途ソフトウェアアプリケーションによる使用のための送信コンテキストの割り当ての要求に応えて)割り当てられる。この例において、ソフトウェアアプリケーション「A」は割り当てられた送信コンテキスト1であり、ソフトウェアアプリケーション「B」は割り当てられた送信コンテキスト2である。送信コンテキスト1および2のサイズはそれぞれx個およびy個の64B送信ブロックである。送信コンテキストの初回割り当て時に、送信コンテキスト内の送信ブロックの各々は空白すなわち「フリー」となる(たとえば、データの追加に利用可能)。実行中の動作の間、送信コンテキストは円形FIFOとして動作し、FIFO中の64B送信ブロックは、ストアバッファ608から充填され、パケットが放出ブロック126に転送される際にFIFOから取り除かれ(以下に記載されるように送信ブロックの放出と称される)、放出された送信ブロックを再利用のためフリーにする。FIFOコンテキストの下で、各送信ブロックはFIFOスロットに対応し、データが追加されるスロットはPIO送信メモリ120内の対応するメモリマップアドレスを有する。
【0037】
各パケット614は、PBCフィールド、様々なヘッダフィールド(簡潔さのため組み合わせて図示される)、PSM(Performance Scale Messaging)ヘッダおよびPSMデータ、ならびにICRC(不変CRC)フィールドを含む、複数のヘッダフィールドを含む。図示されるように、パケット614の最小サイズは64Bであり、これはストアバッファ608内のストアブロックサイズと一致し、送信コンテキストFIFOの各スロットに使用される64B送信ブロックサイズと一致する。
【0038】
実行中の動作の間、PIO送信メモリ120内の送信コンテキストにメモリ106内のパケットデータのコピーが書き込まれるようにするため、CPU600のコア上でソフトウェア命令が実行される。
【0039】
まず、対応する命令とともにパケットデータがメモリ106からL2キャッシュ602にコピーされ、命令およびデータはL2キャッシュ602から命令キャッシュ604およびデータキャッシュ606にコピーされる。選択的に、パケットデータおよび命令は既にL2キャッシュ602の中または命令キャッシュ604およびデータキャッシュ606の中にあってもよい。CPU600内のレジスタからストアバッファ608内の8Bストアユニットへパケットデータを書き込むためのmov命令のシーケンスは、パケットにグループ分けされたものとして本明細書の図に示されている;しかしながら、プロセッサコアがmov命令を包含する命令スレッドを継続的に実行していることは、認識されるだろう。
図6bに示されるように、プロセッサコアレジスタからストアバッファ608内の8Bストアユニットにデータをコピーする(書き込む)ためのmov命令が処理されるにつれて、64Bストアブロックが充填される。一実施形態において、ストアバッファ608はランダムアクセスで動作するが、このときストアブロックのアドレスは、PIO送信メモリ120にデータを格納するために使用されるアドレス指定とは無関係である。任意の64Bストアブロックが充填されたときを判断するために、ストアバッファブロック充填検出機構がストアバッファ制御論理609内で実施される。ストアブロックが充填されたことを検出すると、ストアブロックは、PIO送信メモリ120内の適切なFIFOスロットでストアバッファ608から64B送信ブロックへの64BのPCIeポステッドライトを実行することにより、「ドレイン」される。用語「ドレイン(drained)」は本明細書において、64BのPCIeポステッドライトがハードウェア(たとえば、ストアバッファ制御論理609)によって生成されることを伝えるために使用されるものであり、一般的にソフトウェア命令によって実施されるバッファの「フラッシュ(flushing)」と対立する。
図6bに示されるように、時間T
mにおいて、ストアブロック616は満杯であるとして検出され、その結果ストアブロック616は、送信コンテキスト1のために割り当てられたPIO送信メモリ120の送信バッファ内の送信ブロック618へ、64BのPCIeポステッドライトを介してドレインされる。同様に、続く時間T
nにおいて、ストアバッファ608内のストアブロック620は満杯であるとして検出され、その結果ストアブロック620は、PIO送信メモリ120の送信ブロック622へ、第二の64BのPCIeポステッドライトを介してドレインされる。丸で囲まれた「1」および「2」の使用は、本明細書の
図6bおよびその他の図においてPCIeポステッドライトが発生する順番を示すためのものである。64Bストアブロックのドレインと併せて、その格納空間は再利用のためフリーにされる。一実施形態において、ストアバッファ608は、書込みに利用可能なフリーのストアブロック(64B境界上の8つの連続する8Bブロック)をプロセッサコアが識別できるようにするためにプロセッサ(またはプロセッサコア)から見えるようになっている、ストアブロック使用情報を含む。加えて、本明細書の図の例において、ストアブロックは順次充填されるものとして示されてもよい。しかしながら、データを格納するために使用される特定のストアブロックはデータが書き込まれるPIO送信メモリアドレスとは無関係となる、ランダムアクセスを用いてストアバッファが動作する場合があるので、これはデータの移動の表示を簡素化するためのものである。
【0040】
図7aから
図7fは、パケットデータがPIO送信メモリ120に追加され、8Bストアユニットへの8B書込みを用いて引き続き放出される様を示す、例示的な時間経過シーケンスを示す。
図7aから
図7fの各々は、ストアバッファ608およびPIO送信バッファ120のさらなる詳細を示す。上述のように、PIO送信バッファのメモリ空間は、最大160個の送信コンテキスト用のバッファに分割されてもよい。
図7aから
図7fの各々は、
図6aおよび
図6bにも示されて先に論じられた送信コンテキスト1および2に加えて、送信コンテキスト3および送信コンテキスト4を示している。送信コンテキスト3および4は、PIO送信バッファ120のバッファ空間を共有する、追加送信コンテキストを表している。加えて、送信コンテキスト3および4は、これらの送信コンテキストが別のプロセッサコア上で起動しているソフトウェアによって使用されていることを示すために、異なるクロスハッチパターンで示されている。
【0041】
一般的に、マルチコアCPUにおいて、様々なタスクおよびサービスに対応する命令スレッドは、プロセッサコアに割り当てられてその間に分散している。一実施形態の下で、PIO送信バッファ120は、これらの命令スレッドの一部を備える構成要素、モジュールなどを含むソフトウェアアプリケーションの間で共有される。これらの命令スレッドは、別のコア上で実行中の命令スレッドに対して非同期で実行され、このため複数のソフトウェアアプリケーションは、コアごとにPIO送信バッファ内の送信コンテキストに非同期で追加されているパケットデータを生成するため、並行して実施されてもよい。
【0042】
したがって、各コアはmovなどの単一の命令しか同時に実行できないが、複数の命令スレッドが並行して実行されており、その結果、図示されない送信コンテキストのみならず送信コンテキスト3および4など、その他の送信コンテキストに採用されている
図7aから
図7fに示されるものへの類似のデータ転送が行われる。これらの共起的で非同期のデータ転送をサポートするため、具体的なプロセッサアーキテクチャに応じて、ストアバッファが複数のコアの間で共有されるように構成されてもよく、あるいはプライベートなストアバッファが各コアに割り当てられてもよい。
【0043】
図7aは、最初の64Bストアブロック700に対応する8つすべての8Bストアユニットにデータが追加されている、最初の時間枠T
1に対応し、その結果、送信コンテキスト1の3つ目のFIFOスロットで64バイトのデータが送信ブロックに書き込まれる。データが書き込まれる送信ブロックは、
図4に示され上記で論じられたような、PIO書込み命令および仮想−物理−PIO送信メモリアドレス変換に基づくその送信ブロックのメモリマップアドレスに基づくことになる。この送信ブロックは、(該当すればパディングを含む)ブロックj個分の長さの充填サイズを有するパケット内の、最初のブロックに対応する。先に論じられたように、PBCヘッダは、4Bの倍数のパケット長を規定するPbcLengthDWsフィールドを含む。送信コンテキスト内のパケットによって占有される空間の量(パケットの充填サイズ)はn個の64Bブロック(およびひいてはn個のFIFOスロット)を備え、ここでnは、PbcLengthDWsフィールド値を次の64Bの倍数に切り上げることによって決定される。
図7aに示される例において、j=nであり、PbcLengthDWsフィールド値によって決定される通りである。
【0044】
パケットの充填サイズの決定に関連して、PIO送信メモリ120の送信コンテキスト内へのパケットデータ全体(フルパケット)の転送を完了するためにパケットデータが追加される最後の送信ブロックを識別するための制御情報が生成される;本明細書の図中、まだ受信されていないパケットデータの一部を格納するために使用されるものとして識別される送信ブロックは、「充填予定(To Fill)」(充填対象を意味する)と記される。蓄積転送の実施下で、パケット内容全体がPIO送信メモリ120内に格納されるまで、パケット用のデータは放出ブロック126に転送されることは不可能である。PIO送信ブロック放出制御情報は、(最後の送信ブロックを充填するためのいずれか適用可能なパディングを含む)パケットの内容全体がPIO送信メモリ120に書き込まれてしまったときを検出する伝送エンジン(図示せず)内の論理において実施されるフルパケット検出機構によって、使用される。一実施形態において、このフルパケット検出機構は、対応するFIFOスロット内の送信ブロックが充填されるときを追跡し、制御情報は、各パケットの開始および終了FIFOスロットのアドレス(または送信ブロック番号またはFIFOスロット番号など、その抽出)を備える。一般的に、アドレスはPIO送信メモリ120のベースアドレスに対するもの、またはFIFOバッファに関連付けられた送信コンテキストのベースアドレスに対するものである。
【0045】
図7aから
図7fにおいて、それぞれのパケットのmov命令が、Pa−bのラベル付けスキームを用いてパケットごとにグループ分けされて示されており、ここでaは送信コンテキストに対応し、bはパケットが送信コンテキストに追加された元の順番に対応する。このラベル付けスキームの使用は、パケットデータが送信コンテキストにどのように書き込まれるかをより良く説明するための説明目的のためであり、データがPIO送信バッファ120に書き込まれる実際の位置が、先に論じられたように、アドレス変換スキームと組み合わせたPIO書込み命令に基づくようになることは、理解されるだろう。
【0046】
mov命令はパケットごとに処理されるように示されているものの、これらの命令の順序は、mov命令がコアの実行パイプラインに到着する順序に対応する。しかしながら、アウトオブオーダー実行をサポートするプロセッサは、命令が到着する順序とは異なる順序で命令を実行してもよい。いくつかの従来アプローチの下では、アウトオブオーダー実行は、パケット内のmov命令には許可されるが、パケットをまたいでは許可されない。これは、SFENCE命令後のいずれの格納命令の前でもSFENCE命令に先立つすべての格納(たとえば、この例ではmov)命令がどこからも見える、SFENCEすなわちsfence(ストアフェンス、図中SFenceとも表される)命令の使用を通じて促進される。その結果、従来のアプローチの下では、SFENCEに続くmov命令で参照されるパケットデータは、処理パケットのデータのすべてがストアバッファに書き込まれてしまうまで、ストアバッファに書き込まれることは不可能である。この論理を補強するため、命令の実行が中断させられてもよく、その結果としてパケット転送性能が低下する。加えて、同じようにパケット内の書込み順を強化するためにSFENCE命令が使用されてもよい。sfenceありおよびなしのPIO書込みを比較する図は、
図9aおよび
図9bに示されており、以下に論じられる。
【0047】
本明細書に開示される実施形態の態様によれば、SFENCE命令の従来の使用がなくなり、ストアバッファ内の第二のパケットの格納が(受信命令順で)前の第一パケットの格納の完了に先立って開始できるように、別のパケットからの格納命令を順序に関係なく実行可能とする。この一例が
図7aに示されており、ここでパケットP1−2の最初の「mov.q」命令はアウトオブオーダーでパケットP1−1の最後の2つの「mov.q」命令に先立って実行され、その結果ストアブロック706内の最初の8Bストアユニットのデータがストアバッファ608に書き込まれている。最初の時間枠の終わりに、パケットデータはj−1個の64BのPCIeポステッドライトを用いて最初のj−1個の送信ブロック(パケットP1−1のストアブロック700およびストアブロック702によって示される)の送信コンテキスト1にパケットデータが書き込まれている。上述のように、64Bの各PCIeポステッドライトと併せて、ドレインされているストアバッファ608内の対応するブロックがフリーになっている;このフリー状態は
図7bに示されており、これは第二の時間枠T
2を示している。本明細書の図中、64BのPCIeポステッドライトの順序は、丸で囲まれた番号で示されている。便宜上、64BのPCIeポステッドライトのグループのデータ転送は、
図7aの番号「2」など、単一の丸付き番号で示されている。
【0048】
この第二の時間枠の間、(この例ではパディングを備える)ストアブロック704の残り2つのストアユニットに対応するデータがパケットP1−1に追加され、ストアブロック704からのデータは64BのPCIeポステッドライトを介して送信コンテキスト1に書き込まれ、これによりPIO送信メモリへのフルパケットデータの書込みを完了する。これによりパケット完了状態となり、
図10および
図11に示され、後にさらに詳細に記載されるように、この時点でパケットは、パケット発信調停の準備が整っている。加えて、時間枠T
2の間、ストアブロック706、708、および710の各々にデータが書き込まれてストアブロック706および708を満たし、その一方で、ストアブロック708の最後のストアユニットを充填するためのmov命令は、図示されるようにアウトオブオーダー実行を介して一時的にスキップされる。図示されるように、PBCヘッダのPbcLengthDWs値は、パケット充填サイズが3つの64B送信ブロックとなることを示している。ストアブロック706および710の各々を充填すると、これらのストアブロックはドレインされて、対応するデータは64BのPCIeポステッドライトを介してPIO送信メモリ120内の送信コンテキスト1に書き込まれ、その結果、パケットP1−2の最後の64Bブロックが中間送信ブロックに先立って書き込まれる。
【0049】
混乱を低減するため、各mov命令またはmov命令のセットの結果を示す矢印のうちいくつかは
図7cから
図7fに含まれていない;むしろ含まれている矢印は、新しいストアバッファブロックへの最初の書込み、および書き込まれている最後のブロックのみを示す。
図7cに示されるように、第三の時間枠T
3の間、パケットP1−2の残りのデータがストアブロック708に書き込まれ、その結果このストアブロックデータはドレインされて、PIO送信メモリ120内のパケットP1−2の中間送信ブロックに書き込まれる。これによりPIO送信メモリへのパケットP1−2の転送が完了し、こうしてパケットP1−2は発信調停の準備が整う。加えて、送信コンテキスト2に追加される最初のパケットに対応するデータ(2つの64B送信ブロックの充填サイズおよび長さを有する、パケットP2−1)がストアブロック712および714に書き込まれ始め、その一方で送信コンテキスト1の第三のパケットP1−3のデータはアウトオブオーダー実行を用いてストアブロック716に書き込まれ始める。
【0050】
図7dは、時間枠T
4の間のデータ転送の状態を示す。この時間枠の間、パケットP2−1の最後の16バイトがストアバッファ608に書き込まれ、64BのPCIeポステッドライトを介してストアブロック714をドレインさせ、これによりPIO送信メモリ120内のパケットP2−1の第二の送信ブロックを充填し、パケットP2−1を発信調停に利用できるようにする。パケットP1−3データはストアブロック716および718の両方を充填するために追加され、2つの64BのPCIeポステッドライトを介してPIO送信メモリ120内のパケットP1−3データに両方のストアブロックをドレインし、やはりパケットP1−3を発信調停に利用できるようにする。2つの追加パケットP2−2およびP1−4のmov命令もまた時間枠T
4に追加されている。パケットP2−2は、送信コンテキスト2に追加される第二のパケットであり、k個の64Bブロックのサイズを有し、いかなるパディングも必要としない。パケットP1−4は、送信コンテキスト1に追加された第四のパケットであり、64Bの最小サイズを有することになる。ストアブロック720および722によって示されるように、パケットP2−2の最初のk−1個のストアブロックは、ストアバッファ608に追加され、k−1個の64BのPCIeポステッドライトを介してPIO送信メモリ120に書き込まれている。パケットP2−2の最後の8バイトを除くすべてが、ストアブロック724に追加されている。これら最後の8バイトがストアブロック724の最後の8Bストアユニットに書き込まれる前に、パケットP1−4の最初の8バイトを書き込むためのアウトオブオーダーmov命令が実行され、これによりストアブロック726を充填し始める。最後に、パケットP1−2がVLアービタによって放出のために選択され、そのデータはFIFO順でその送信ブロックについて放出される。これは、同じ送信コンテキストの送信バッファの先のパケットのパケットデータ後にそのデータが追加されるパケットが、先のパケットに先立って放出のために選択され、こうしてパケットが送信コンテキスト内に充填されるアウトオブオーダーで放出される例を示す。
【0051】
図7eは、時間枠T
5の間の転送の状態を示す。パケットP2−2の最後の8バイトがストアブロック724に書き込まれ、このストアブロックは64BのPCIeポステッドライトを介して、PIO送信メモリ120内のパケットP2−2の最後の送信ブロックにドレインされ、こうしてパケットP2−2データの書込みを完了し、パケットP2−2を発信調停に利用できるようにする。パケットP1−4の残りの56バイトはストアバッファ608のストアブロック726に書き込まれ、続いて64BのPCIeポステッドライトを介してストアブロックデータがPIO送信メモリ120に書き込まれる。受信すると、PCBのPbcLengthDWsフィールドが検査され、このパケットが64B送信ブロック1個分の長さを有すると判断される;パケットP1−4のデータ全体がこのブロック内に包含されているので、パケットP1−4もまた充填されるよう標識されて発信調停の準備が整う。
【0052】
この例において追加される最後のパケットは、パケットP2−3であり、これは192B(3×64B)の長さを有し、いかなるパディングも必要としない。この転送は、ストアバッファ608内の3つのストアブロック728、730、および732へのパケットデータの192Bの最初の書込みによって行われる。各ストアブロックへの8つのmov命令が完了すると、ストアブロックは64BのPCIeポステッドライトと併せて、PIO送信メモリ120の送信コンテキスト2のパケットP2−3のために割り当てられたそれぞれの送信ブロック内へドレインされる。最後の64BのPCIeポステッドライトを完了すると、パケット書込み完了機構は、パケットP2−3の全体がPIO送信メモリ120に書き込まれたことを検出し、こうしてパケットP2−3もまた完全に充填されて標識されて発信調停に利用できるようになる。また、パケットP1−1が放出のためにVLアービタによって選択されており、その送信ブロックがFIFO順で放出される。
【0053】
図示される実施形態において、パケットP2−3の最後のmov.q命令に続いてSFENCE命令が追加される。これは、そのいずれかがフラッシュされる前にパケットP2−3のデータのすべてがストアブロック728、730、および732に書き込まれることを保証するためである。続くパケットのための書込み命令が命令スレッド内でただちに続く場合には、命令が各々該当するストアブロックを充填し、その結果としてストアブロックはフラッシュされる前にドレインされるので、SFENCE命令の使用は必要とされない。
【0054】
上記に加えて、時間枠T
5の間、パケットP1−2およびパケットP2−1の各々は完全に放出されており、その対応する送信ブロックはクリアになっている(時間枠T
5の早い時期の間にパケットP2−1もまた放出のために選択されることに注意)。
図11および
図14を参照して後に記載されるように、送信ブロック状態がクリアになっているとき、クリア送信ブロックに対応する送信コンテキストのクレジットは、クリア状態に到達していない低FIFOスロットを占有する送信ブロックがない場合に返信される。この例において、この条件は送信コンテキスト2には当てはまるが、パケットP1−1はまだ放出中であってクリア状態に到達していないので、送信コンテキスト1には当てはまらない。その結果、送信コンテキスト2には2つのクレジットが返信され、その一方で送信コンテキスト1にはこの時点でクレジットが返信されない。以下に詳述されるように、一実施形態において、11ビットのランニングカウントを備える絶対クレジット値が返信される;
図7eの例では、パケットP2−1がクリアになる前には送信コンテキスト2のランニングカウントは0であったと推測されるので、返信されたランニングカウント絶対クレジット値は2である。
図7fは、時間枠T
6の間の転送の状態を示す。この時間枠の間、パケットP1−3およびP2−2が放出し始め、その一方でパケットP1−1は放出を完了し、その送信ブロックはクリアにされる。この時点で、両方のパケットP1−1およびP1−2のクレジットが送信コンテキスト1について返信され、合計j+3クレジットとなり、ここでランニングカウンタ値は、送信コンテキスト1について返信された最後のクレジットに対してj+3だけ増加していることになる。図示される例において、前のランニングカウントは2であり(送信コンテキスト1の最初の2つの空のFIFOスロットに対応する)、このため返信されたランニングカウント絶対クレジット値は2+j+3である。加えて、時間枠T
5の間に送信されたパケットP2−1の送信ブロックの2つのクレジットが受信および処理されており、対応するFIFOスロットはフリーとして標識される。
【0055】
一実施形態によれば、単一のPIO書込み命令がストアブロックの完全な充填を招くように、ストアバッファ608に512ビット(64B)を同時に書き込むためにPIO書込み命令が採用されてもよい。一実施形態において、これは512b書込み命令の使用を通じて促進されるが、これはIntel(登録商標)CorporationのAdvanced Vector Extension 512(Intel(登録商標)AVX−512)によってサポートされている。Intel AVX−512は、512ビット幅の32個のベクトルレジスタを特徴としており、512ビットのデータがこれらのレジスタからストアブロック608内に移動できるようにする。なお、Intel AVX−512の使用は単なる例示に過ぎず、512ビット書込みをサポートするその他の既存のおよび将来のプロセッサもまた使用可能であるので、これに限定するものではないことに注意する。
【0056】
図8aから
図8eは、どのようにしてパケットデータがPIO送信メモリ120に追加され、ストアブロックへの512ビット書込みを用いて引き続き放出されるかを示す、例示的な時間経過シーケンスを示す。この例において、各パケットの書込み命令のシーケンスは、512ビットのデータを示すmov512.q命令がCPU600a内の512bレジスタから移動させられるものとして示されている。512bmovが実行される際に、命令の数は8Bmovを使用するよりもはるかに少ない。以前のように、SFENCEは、従来のアプローチではSFENCE命令が配置されるはずの場所を示すために、「X」で示されている。
【0057】
図8aには、時間枠T
1の間に実行される動作が示されている。加えて、パケットP1−1、P1−2、P2−1、P1−3、P2−2、およびP1−4のシーケンスのmov512.q命令は、受信されたものとして示されている;しかしながら、これらの命令のうちのいくつかは時間枠T
1の間には受信されず、むしろデータがストアバッファ608に書き込まれているものとして示されるときに近い後の時間枠の間に受信されるので、これは命令のストリームを示すためのものではない。説明および比較目的のため、送信ブロックのいくつかが書き込まれる順序はこれら2つの例の間で異なるものの、
図7aから
図7fと
図8aから
図8eとで同じパケットシーケンスが示される。
【0058】
時間枠T
1の間、パケットP1−1のj個のmov512.q命令はCPU600a上のプロセッサコアによって実行され、その結果、各命令はストレージブロックに書き込まれている64Bのデータとなり、これはその後、
図6bおよび
図7aから
図7fに示されるものと類似のやり方で、64BのPCIeポステッドライトを介してドレインされる。この結果、パケットP1−1のフルパケットデータはPIO送信メモリ120に書き込まれ、このパケットのヘッドパケット状態は発信調停のために標識される。加えて、パケットP1−2の最初の2つのmov512.q命令は受信されるが、アウトオブオーダーで実行される。その結果、パケットデータが書き込まれた中間送信ブロックは、64BのPCIeポステッドライト「4」および「5」によって示されるように、最初の送信ブロックに先立ってPIO送信メモリに書き込まれることになる。中間送信ブロックのデータを受信すると、ヘッドパケット(およびひいてはPBCヘッダ)はまだ受信されていないので、伝送エンジン論理によって採用された制御情報は、パケットP1−2のために充填される必要のあるブロックの数がわかるようになる。ヘッドパケットの受信は、PBCヘッダを検出するための送信ブロックの最初の部分の検査を介して、あるいは書込みがパケットの最初の送信ブロックを包含することを示す64BのPCIeポステッドライト内のパケットの開始(SOP)ビットを介して、の2つの方法のいずれかで検出可能である。パケットP1−2の最初の送信ブロックの受信時に、そのPBCヘッダが検査され、このパケットの充填サイズは送信ブロック3つ分であると判断される。
【0059】
時間枠T
2の間、
図8bに示されるように、パケットP1−2の最後のmov512.q命令が実行され、データをまずストアブロック710に移動させ、これはその後64BのPCIeポステッドライト「6」を介してドレインされ、これによりパケットP1−2の送信ブロックの充填を完了する。その結果、ヘッドパケット状態が発信調停のために標識される。パケットP2−1およびP1−3の各々の命令は、64BのPCIeポステッドライト「7」、「8」、および「9」の順で示されるように、アウトオブオーダーで実行され、その最後は進行中であるがまだ完了していないものとして示されている。パケットP2−1の最初の送信ブロックのmov512.q命令はまだ実行されていない。以前のように、最初の送信ブロック(およびひいては対応する64BのPCIeポステッドライト内に設定されたSOPビットを含み、PBCヘッダを包含する、送信ブロック)はまだ書き込まれていないので、制御論理はパケットP2−1のサイズを知らない。パケットP2−1の最初の送信ブロックによって占有されるFIFOスロットもまたフリーとして標識されたままである。もしも送信コンテキスト2 FIFOの最後のブロックがフリー以外の何かとして標識されたとしたら、論理は(そうなるしかないので)このFIFOスロットがパケットP2−1の最初の送信ブロックに対応すると判断するように構成される可能性があるが、しかしこれは、最初に到着する送信ブロックを待つのに比べて本当に利益を提供するわけではない。
【0060】
図8cに示される時間枠T
3の間、最初の送信ブロックを書き込むためのmov512.q命令が実行され、その結果ストアブロック715は充填され、64BのPCIeポステッドライト「10」を介してドレインされる。制御論理は、これがパケットP2−1の開始に対応することを検出し、PBCヘッダのPbcLengthDWsフィールドを検査し、パケット充填サイズが送信ブロック2つ分であると判断する。第二の送信ブロックが既に充填されているので、この第一の送信ブロックを充填した結果、パケット全体が充填され、こうしてヘッドパケット状態は発信調停のために標識される。加えて、パケットP2−2のk個のmov512.q命令が実行され、その結果、ストアブロック718、k−2個のストアブロック719が充填およびドレインされて、ストアブロック720のためのプロセスでドレインを伴う充填が行われる。パケットP2−2のPBCヘッダを検査すると、このパケットの充填サイズは送信ブロックk個分であると判断される。やはり時間枠T3の間に、パケットP1−1は放出のために選択されており、パケットP1−1の放出は処理中である。
【0061】
図8dに示される時間枠T
4の間、パケットP1−4に対応する単一のmov512.qが実行され、このパケットのデータのすべてをまずストアブロック714に、その後PIO送信メモリ120内の単一の送信ブロックに、64BのPCIeポステッドライト「14」を介して書き込む。パケットP2−3全体もまた、ストアブロック727、728、および730ならびに64BのPCIeポステッドライト「15」、「16」、および「17」を介してPIO送信メモリ120に書き込まれる。パケットP1−4およびP2−3のヘッドパケットの各々は、発信調停のために標識される。加えて、パケットP1−2およびP2−1の各々は放出のために選択されており、これらのパケットの対応する送信ブロック内のパケットデータは現在放出中である。
【0062】
先に論じられたように、時間枠T
3の間、パケットP1−1のパケットデータが放出され始める。時間枠T
4の間に放出は完了し、送信ブロックはクリアとして標識される。上記で論じられた実施形態によれば、2+jクレジットの絶対クレジット返信カウントがこの時点で返信されるはずである(図示されない送信コンテキスト1の以前の全パケットのクレジットは先に返信されていると想定する)。しかしながら、クレジット返信機構の議論で下記に説明されるように、いくつかの実施形態において、クレジットは複数のパケットにわたって凝集され、最後のクレジット返信には到達していないので、クレジットの閾値までは返信されない。この例において、閾値にはまだ到達しておらず、その結果、この時点で返信されたクレジットはない。
図8eに示される時間枠T
5の間、パケットP1−2およびP2−1の各々は放出を完了しており、クリアとして標識されているが、その一方でパケットP2−2は放出のために選択されており、放出を開始している。凝集されたクレジット返信は、一部の送信コンテキストのために採用されてもよいがその他のものには採用されないように、送信コンテキストごとに構成されてもよい。加えて、凝集クレジット閾値も送信コンテキストごとに構成されてもよい。したがって、この例において、送信コンテキスト1の凝集クレジット閾値に到達しており、このため2+j+3のランニング返信クレジットカウント値がクレジット返信ブロック127を介して返信される。加えて、送信コンテキスト2は凝集クレジット閾値を採用しておらず、このため2クレジットのランニング返信クレジットカウント値が返信される。一実施形態において、複数の送信コンテキストのランニングクレジットカウント値は、単一のDMA書込みにおいてPCIe上でメモリまで送信可能である。
【0063】
図9aおよび
図9bは、それぞれSFENCE命令ありおよびなしで64BのPCIeポステッドライトを用いるパケットデータの転送に対応するデータフロータイムラインを示す。プロセッサコアの一部であるストアバッファ608からドレインされると、これはまず、
図6aおよび
図6bに示されるように、IIO610に転送される。本明細書において論じられるPCIeポステッドライト要求に加えてその他のIO要求も扱う必要があるので、IIOにはいくつかの追加遅延がある。とりわけ、IIOは各sfence命令のsfence確認(ack;Acknowledgement)を返信する。これにより、アウトオブオーダー命令がsfenceにわたって実行されるのを防止するが、その結果sfenceに先立つパケットのすべての命令が実行されるまで遅延する可能性がある。sfenceの使用を排除する本明細書の実施形態の下で、これら潜在的な遅延の発生は防止されており、PIO送信ブロック書込み効率を最適化する。
【0064】
図10は一実施形態による放出ブロック126のさらなる詳細を示す。(最大)160個の送信コンテキストの各々からのヘッドパケット状態はブロック1000内で追跡され、その一方で16個のSDMA待ち行列の各々のヘッドパケット状態はブロック1002内で追跡される。ブロック1000および1002は、複数のper−VL発信FIFO 1006への出力を提供するラウンドロビン発信アービタ1004への入力を提供するが、その出力はVLアービタ1008への入力として受信される。VLアービタは、PIO送信メモリ120およびSDMAメモリ124の各々に結合されたマルチプレクサ(Mux)1010への入力制御を提供する。放出ブロック126は、処理ブロック1012、1014、および1018、ならびに放出FIFO 1016を、さらに含む。
【0065】
放出ブロック126は、160個の送信コンテキストおよび16個のSDMAエンジンからのパケットの調停、ならびにその送信バッファメモリからper−VL発信FIFO 1006へ発信するための次の利用可能な完成パケットの選択を、担当する。per−VL発信FIFOは、VL間の遮断を最小限に抑えるために深くなっており、PIO送信メモリ120およびSDMAメモリ124内のパケットに対するポインタを含むパケットの制御情報のみを包含する。実際のパケットデータパスはper−VL発信FIFO 1006内を流れるわけではなく、むしろこれらのFIFOはVLアービタ1008へのper−VL入力を提供するために使用され、これは次に放出するパケットを選択するために発信FIFOにわたってVL調停を実行する。これにより放出ブロック126は、mux 1010を介してPIO送信メモリ120またはSDMAメモリ124からそのパケットのデータをフェッチし始め、その後処理ブロック1012においてパケット整合性チェックが適用される。最後に、パケット放出パイプラインは、パケットに対していずれか必要な修正を実行し(たとえば、処理ブロック1014内のHCRC/ICRC挿入、放出FIFO 1016内のFIFOバッファリング、ならびに処理ブロック1018内の放出のためのPBC除去およびパケットフレーミング)、ファブリックポート112にパケットを提示する。
【0066】
一実施形態において、伝送エンジン108は、8つのデータVLおよび1つの管理VLをサポートする。しかしながら、これは単なる例示に過ぎず、非限定的である。PBCヘッダ内のVLフィールドを用いてパケットが構築されたときに、パケットはソフトウェアによって仮想レーン(VL)に割り当てられる。
【0067】
一実施形態において、PIO送信を用いて送信コンテキストに送信されたパケットは、送信コンテキストの送信バッファ内へのこれらパケットの配置によって定義される順序で発信される。これは「オリジナルプログラム順(original program order)」と称される。本質的にこれは、プロセッサのライトコンバイニング機能によって提供される緩い順序付けセマンティックを用いるときでさえ、プログラムの元のパケット順を再構築するために送信バッファの充填において柔軟性があるとはいえ、送信バッファがFIFOとして振る舞うことを意味する。この順序付け議論の目的のため、要点は、ソフトウェアが送信コンテキスト上のパケット順を選択し、送信コンテキストはパケット発信を通じてこのパケット順を維持するということである。
【0068】
一旦完成パケットが送信バッファ内に充填されると、PIO送信またはSDMAのいずれかにより、パケットは伝送エンジンによって発信可能となる。送信バッファからのパケットの発信は、パケットをper−VL FIFO上に配置する。同じVLを有するパケットの発信順は、そのVLを有するパケットがリンクに放出される順序を規定する。per−VL FIFOのヘッドにおけるパケットが選択される順序は、VL調停アルゴリズムによって決定される。
【0069】
なお、ソフトウェアは1つの送信コンテキスト上のPIO送信によって異なるVLを有するパケットを送信できることに、注意する。同様に、1つのSDMA待ち行列上のSDMAによって異なるVLを有するパケットを送信することもできる。実施は、パケットが異なるVL上にあったとしても、送信コンテキストまたはSDMA待ち行列を通じて発信ポイントまでパケット順を維持することになる。しかしながら、発信を超えるとper−VL発信FIFOのため保証される順序はなくなり、リンクへの実際の放出順はVL調停の詳細に依存することになる。
【0070】
一実施形態の下で、同じVLを用いて伝送される同じ送信コンテキストのパケットは、オリジナルプログラム順で放出される。他方、異なるVLを用いて伝送されるパケットは、異なるVL上で伝送される場合には後に書き込まれるパケットが先に書き込まれたパケットを続行させられるように、アウトオブオーダーで放出されてもよい。
【0071】
一実施形態において、HFIは、上記の定義された順序を超えた発信順に保証を提供しない。たとえば、いずれかのSDMA待ち行列上のパケットの発信順は、その他いずれかのSDMA待ち行列上のパケットに対して、またはPIO送信を用いて送信されるいずれかのパケットに対して、HFIによって順序付けされていない。加えて、いずれかの送信コンテキスト上のパケットの発信順は、その他いずれかの送信コンテキスト上のパケットに対して、またはSDMAを用いて送信されるいずれかのパケットに対して、HFIによって順序付けされていない。
【0072】
図11は、HFIに結合されたファブリックリンク上のアウトバウンド放出のためにパケットデータを準備する際に実施される動作、段階、および状態を示すフローチャートである。パケット充填段階1102の間、送信メモリは、PIO送信またはSDMA機構のいずれかを介してパケットデータで充填されている。パケット完了状態1104は、パケットデータのすべてが送信メモリ内に格納されたときに発生する。この時点で、パケット充填は完了しており、パケットは発信可能である。パケット発信1106は、パケットが送信メモリからper−VL発信FIFO上に発信される時点である。この段階の間、パケットデータはまだ送信バッファ状態を占有しているが、しかし発信時にパケットはもう放出準備が整っており、この同じVL上のその他のパケットに対するその順序は確立されている。
【0073】
パケットVL調停1108の間、per−VL発信FIFOのヘッドにあるパケットはその間で調停され、1つがリンクに放出されるようにVL調停アルゴリズムによって選択される。パケット放出1110の間、VL調停を介して選択されたパケットのパケットデータが送信メモリ(該当すれば、PIO送信メモリ120またはSDMAメモリ124)から読み取られ、パケットデータが有効か否かを判断するためにパケット整合性チェックがブロック1012で実行される。整合性チェックに合格しなかったパケットは落とされ、その一方で良品パケットはリンクに放出されるが、これは必要であればHCRCおよびICRCの挿入、および放出FIFO 1016内のバッファリングを含んでもよい。
【0074】
次の状態は、パケットクリア1112である。この状態は、パケットが送信バッファをクリアにして送信バッファが再利用に入手可能となったときに、発生する。したがって、返信クレジットブロック1114において、送信バッファの1つ以上のクレジットがクレジット返信機構127を介して返信され、クリア送信ブロックは新しいパケットデータで充填されるために利用可能となる。しかしながら、パケット全体がリンクに放出されてしまう前にいくつかの送信ブロックが再利用され得るように、実施によってクレジット返信および送信バッファ再利用を送信ブロックレベルにまで最適化できることに、注意する。これは、送信バッファリソースが限られている重要な実施となり得る。加えて、上記で説明されたように、送信ブロックはクリアにされたものの、クリアになったFIFO内でその下にその他の送信ブロックがある場合、そのブロックのクレジットは、これらのブロックもまたクリアにされるまで返信されない。
【0075】
クレジット返信機構
送信バッファをクリアにする先のパケットの前に送信バッファブロックがソフトウェアによって上書きされないことを保証するために、PIO送信機構はクレジット返信機構を使用する。一実施形態において、送信クレジットは64Bの粒度であり、1つの送信クレジットは1つの(64B)送信ブロックに対応する。送信コンテキスト用の送信クレジットは順序通りに返信され、ソフトウェアは送信バッファメモリをラップアラウンドFIFOのやり方で使用する。HFIが送信クレジットの損失を伴わずにより最新の値でいつでもクレジット返信情報を上書きできるように、送信クレジット会計は絶対数を用いる。クレジット返信はまた状態情報も提供し、これは連続するクレジット返信書込みによって上書きされる。エラーに遭遇すると、クレジット返信はエラー表示で強制的に設定され、送信コンテキストはエラー状態に置かれて、さらなるクレジット返信書込みは送信コンテキストがホストシステムソフトウェアによってエラー状態から回復させられるまでスケジューリングされない。これにより、クレジット返信位置におけるエラー表示が観察されて、上書きの危険性を伴わずにホストソフトウェアによって適切に対処されることを、保証する。
【0076】
簡単に言うと、クレジット追跡は、消費されたクレジットの数のランニングカウントおよびフリーになったクレジットの数のランニングカウントを維持することによって達成される。すると、現在占有されているクレジットの数は、これらのカウントの間の差分となる。上述のように、これらはクレジットが消費またはフリーになったとき適切に単純増加する、絶対カウンタである。
【0077】
初期化の後、送信バッファは空になり、そのバッファ用のすべての送信クレジットはソフトウェアによって利用可能となる。一実施形態において、送信コンテキストに割り当て可能な送信クレジットの最大数は1024であり、送信バッファの64KB最大サイズに対応する。一実施形態において、クレジット情報を追跡するために11ビットカウンタが使用される。このアプローチは、カウンタがフルの1024値だけ異なる値となれるように、1つ余分なビットを使用する。これにより、0クレジットが利用可能であって1024クレジットが利用可能であるケースの曖昧さも解消される。カウンタ数学は、法2048で実行される。たとえば、11ビットカウンタの前進および11ビットカウンタ間の差は、法2048で実行される。
【0078】
より詳細には、ソフトウェアおよびハードウェアはいずれも、クレジット使用を追跡するために送信コンテキストごとに11ビットカウンタを維持する。ソフトウェアカウンタは、フィルカウンタと称される。ハードウェアカウンタは、フリーカウンタと称される。ソフトウェアがクレジット返信の視認性を有するように、ハードウェアDMAはそのカウンタ値を適切な間隔で、ホストメモリ内に保持されるシャドウフリーカウンタへ。最初に、両方のカウンタは0であり、使用中の送信クレジットはない。使用済みクレジットの数は、法2048で、フィルカウンタからフリーカウンタを減じたものとして計算される。すると利用可能なクレジットの数は、送信コンテキスト内のクレジットの総数から使用済みクレジットの数を減じたものとなる。両方のカウンタが同じ値を有するとき、コンテキストは空であり、その送信クレジットはすべてソフトウェアが充填するために利用可能である。ソフトウェアは、送信ブロックを送信コンテキストに書き込む前に、利用可能なクレジットをチェックする。ソフトウェアが送信ブロックを充填する際に、ソフトウェアが現在どの程度クレジットを使用したかを示すために、法2048でそのフィルカウンタを増分する。ソフトウェアが利用可能なクレジットを有していないとき、クレジットがフリーになるまで待機する。ソフトウェアは、クレジットがフリーになったときを判断するために、ホストメモリ内のシャドウフリーカウンタを監視することができる。
【0079】
クレジット追跡の抽象モデルに対応する擬似コードが、以下に示される。
【0080】
擬似コードリスト1
class SendBuffer:
def_init_(self,num_credits):
assert(num_credits>=1 and num_credits<=1024)
self.num_credits=num_credits
self.fill_counter=0
self.free_counter=0
self.fill_index=0
self.egress_index=0
self.packet_credits=[]
for i in xrange(0,num_credits):
self.packet_credits.append(0)
def get_num_credits(self):
return self.num_credits
def get_used_credits(self):
return(self.fill_counter−self.free_counter)%2048
def get_free_credits(self):
return self.num_credits−self.get_used_credits()
def fill_credits(self,num_credits):
#If there is sufficient space,this method fills the send buffer
#with num_credits and returns True.Otherwise,it returns False.(十分なスペースがあれば、この方法でnum_creditsを用いて送信バッファを充填し、Trueを返す。またはFalseを返す。)
assert(num_credits>0)
free_credits=self.get_free_credits()
if num_credits<=free_credits:
self.packet_credits[self.fill_index]=num_credits
self.fill_index=(self.fill_index+num_credits)%self.num_credits
self.fill_counter=(self.fill_counter+num_credits)%2048
print ‘Buffer(%d used,%d free):filled %d credits’%\
(self.get_used_credits(),self.get_free_credits(),num_credits)
return True
else:
return False
def free_credits(self):
#If there is a packet to egress,this method egresses that packet,frees
#its credits and returns a value indicating that number of credits.(放出するパケットがあれば、この方法でそのパケットを放出し、そのクレジットをフリーにし、そのクレジット数を示す値を返す。)
#Otherwise,it returns False.(またはFalseを返す)
num_credits=self.packet_credits[self.egress_index]
if num_credits:
self.packet_credits[self.egress_index]=0
self.egress_index=(self.egress_index+num_credits)%self.num_credits
self.free_counter=(self.free_counter+num_credits)%2048
print ‘Buffer(%d used,%d free):returned %d credits’ %\
(self.get_used_credits(),self.get_free_credits(),num_credits)
return num_credits
def show(self):
print ‘Buffer %d used,%d free,%d total’%\
(self.get_used_credits(),self.get_free_credits(),self.num_credits)
import random
send_buffer=SendBuffer(100)send_buffer.show()
packet_fifo=[]
count=0
while count<100:
if random.random()>=0.25:
fill=int(random.uniform(l,20))
while not send_buffer.fill_credits(fill):
credits=send_buffer.free_credits()assert(credits)
expected_credits=packet_fifo.pop(0)assert(credits==expected_credits)packet_fifo.append(fill)count+=1
else:
credits=send_buffer.free_credits()if credits:
expected_credits=packet_fifo.pop(0)assert(credits==expected_credits)
print ‘Total of %d packets filled with%d
(count,len(packet_fifo))
print ‘All %d packets posted,now draining while True:
credits=send_buffer.free_credits()if credits:
expected_credits=packet_fifo.pop(0)
assert(credits=expected_credits)else:
break
print ‘Total of %d packets filled with%d(count,len(packet_fifo))
一実施形態において、消費されるPCIeおよびホストメモリ帯域幅を低減するために、送信クレジット返信が凝集される。各送信コンテキストは、SendCtxtCreditCtrl.Thresholdと称されるクレジット閾値を用いてプログラムされる。送信コンテキストは、まだファブリックに放出されていない最も古い送信ブロック(送信バッファ内のアドレス順で)を追跡するカウンタ値を保持する。先に論じられたように、単一の送信バッファ内で複数のVLが使用されるとき、送信ブロックの放出はアウトオブオーダーであってもよい。この状況を解決するために、順序通りのクレジット返信が提供可能となるように、アウトオブオーダー放出を追跡するためのハードウェア状態が採用される。この最も古い送信ブロックのカウンタからフリーカウンタのハードウェアコピーを減じた差分は、まだソフトウェアに返信されていない保留のフリークレジットの数である。この値が閾値と一致またはこれを超過するとき、この送信コンテキストのための送信クレジット返信が開始される。
【0081】
このクレジット返信アプローチは、ハードウェアの中にある閾値にクレジットを任せ、すべてのクレジットが返信され得ると保証する方法を提供するものではない。これは、いずれか特定の送信が送信バッファをクリアにしたことを識別するためには問題である。これを解決するために提供される方法は、いくつかある:
・多くの場合、ホストソフトウェアは、クレジット返信閾値機構を使用することができ、特定のPIO送信が送信バッファをクリアにしたか否かを問題にしない。
・ホストは、SendCtxtCreditStatusレジスタを用いてアダプタレジスタから送信コンテキスト用の現在のクレジット値を読み取ることができる。
・ホストは、クレジット返信を送信コンテキスト向けに強制的にスケジュールさせるために、SendCtxtCreditForceレジスタに書き込むことができる。
・PbcCreditReturnと称されるPBCビットを介して特定のPIO送信用のクレジット返信をホストが要求できるようにする。
【0082】
加えて、ホストソフトウェアは、クレジットが特定の送信コンテキスト上で返信されたとき、中断を手配することができる。
【0083】
いくつかの実施形態において、パケットが放出するように確約されるとすぐに、しかしパケットが実際に送信バッファをクリアにしてしまう前に、クレジットをより積極的にホストに返信させる、早期クレジット返信機構が実現されてもよい。これにより、クレジット返信遅延を最適化して送信バッファリング要件を減少させるために、ホストは次のパケットに取りかかることができる。考え方としては、放出がその前の占有者用の送信バッファをドレインしている間に、ホストが次のパケットの充填を開始できることである。前のパケットが上書きされ得ないことを保証するためにハードウェアインターロックが採用され、また、前のパケットがファブリックワイヤ速度でドレインされるように、レートマッチング放出FIFOも実施される。この機構は、実施問題の場合に、コンテキストごとに無効化されることが可能である。これは、コンテキストごとの送信クレジットが低いとき(たとえば、多数のコンテキストおよびさらに大きいMTUサイズを使用するとき)、性能の向上にとって重要な最適化である。
【0084】
早期クレジット返信を有効化または無効化するために、送信コンテキストごとの構成ビット(SendCtxtCreditCtrl.EarlyReturn)が提供される。有効化されると、個々の送信ブロックはハードウェアによって早期に(すなわち、その送信ブロックをクリアにするパケットの放出に先立って)フリーにされることが可能であり、これら早期にフリーになったクレジットは通常のクレジット返信アルゴリズムを用いて返信される。クレジット返信閾値機構はまだ適用されている。
【0085】
なお、ソフトウェアは、送信したいパケット用の送信コンテキストに割り当てられたクレジットが十分にあることを保証するためのものであることに、注意する。特定のパケット用の送信コンテキストに割り当てられたクレジットが十分にない場合には、パケットを発信するために利用できる十分なクレジットには決してならない。アプローチの1つは、送信コンテキストに割り当てられた送信ブロックの数に基づいてソフトウェアがパケットサイズを制限することである。この計算は、コンテキスト用のクレジット閾値までのクレジットがハードウェアの中にあり、将来の送信ブロックが放出されるまで自動的に返信されないということを、考慮すべきである。
【0086】
一実施形態において、送信クレジット返信は、64Bキャッシュライン整列アドレスへのホストメモリへの64B書込みとして実施される。この理由は、これらの動作はさらなる遅延を追加し、ホストメモリへのアクセスのパイプラインに影響を及ぼす可能性があるので、IIOからのメモリ上での読み出し・修正・書込み動作を回避するためである。しかしながらこれは、クレジット返信が付加的なPCIe帯域幅を消費することを意味する。これは送信クレジット返信集合によって緩和されるものの、可能であればこれをさらに低減することが望ましい。一実施形態において、これは以下に記載されるように、送信コンテキストグループにわたる凝集クレジットの使用を介して促進される。
【0087】
一実施形態において、各11ビットクレジット返信値は、コンテキスト状態と組み合わせられ、64ビット値にするために確保されたビットが詰め込まれる。一実施形態において、64ビット値は、グループクレジット返信のための64B書込みに詰め込まれるクレジット返信を、最大8つまでサポートする。
【0088】
クレジット返信オーバーヘッドを削減する1つの技術は、送信コンテキストグループにわたってクレジット返信を凝集することである。考え方としては、送信コンテキストはグループにまとめられることが可能であり、その後ホストメモリへの単一の64B書込みを用いてコンテキストのグループ用のクレジット返信が実行されるということである。一実施形態において、160個の送信コンテキストは、8つの連続する送信コンテキストのセットに凝集され、合計20セットできる。しかしながら、送信コンテキストのその他の凝集が使用されてもよい。
【0089】
8つの送信コンテキストのセットサイズにより、セットごとに独立したグループ化を特定する能力を有する20個の異なるセットが可能になる。セット数Sは、送信コンテキスト8Sから8S+7までを包含する。一実施形態のセットマッピングが、表2に示される。20セットを選択すると、40、80、および160個の送信コンテキストの典型的な構成における妥当な柔軟性が付与される。より少ない数の送信コンテキストでの構成においては、ソフトウェアは、必要とされるグループ化に応じてどの送信コンテキストを使用するか選択するときの、さらなる柔軟性を得る。各セットは、表3に示される構成となるように、独立して構成されることが可能である。
【0091】
【表3】
最小値0では、セットはグループごとに1個の送信コンテキストで8つのグループを有する(すなわち、実際のグループ化はない)。そのセット内のいずれの送信コンテキストも独立したクレジット返信を有することになるので、これにより完全な柔軟性を与える。最大値の3であれば、セットは8つすべての送信コンテキストを包含する1グループを有し、クレジット返信は8つすべての送信コンテキストのために凝集される。したがって、そのセットのクレジット返信のために使用されるホストメモリページは、これら8つの送信コンテキストによって共有される。なお、ソフトウェアはクレジット返信位置に書込みをしないので、そのページの読み取り専用マッピングのみが必要とされることに、注意する。最大グループサイズ8は、これら8つの送信コンテキストのクレジット返信アルゴリズムが互いにどのように相互作用するかに応じて、クレジット返信帯域幅を最大8倍まで減少させる。
【0092】
各送信コンテキストは、その送信コンテキスト用のクレジット返信に使用されるホスト物理アドレスおよびTPH情報を規定する、SendCtxtCreditReturnAddrレジスタを有する。送信コンテキストグループ化が用いられるとき、クレジット返信は、クレジット返信をトリガしたコンテキストに属するSendCtxtCreditReturnAddrレジスタを使用する。一実施形態において、同じアドレスを有するグループ内のすべてのコンテキストのSendCtxtCreditReturnAddrレジスタをプログラムするために、ソフトウェアが使用される。
【0093】
特定の送信コンテキスト(Nで表す)によってクレジット返信が開始されるとき、送信コンテキストは、送信コンテキスト番号を3つ右シフトすることによってセット数(S)にマッピングされる。セット数は、セットごと構成状態を調べるために使用され、表3の左端の列に示されるように値Bを付与する。Bは、同じグループ内の送信コンテキストを区別する送信コンテキスト番号の、最も重要ではないビットの番号である。そのグループ内の送信コンテキストの数はGであって1<<Bに等しく、表3の右端の列の値を取る。このセットで最も小さい送信コンテキスト番号はMと呼ばれて値(N>>B)<<Bを有し、これは最も重要ではないBビットがクリアされたNの値である。
【0094】
一実施形態において、クレジット返信は以下のように実現される。クレジット返信は、1つの64B書込みを用いてG個の送信コンテキストのために凝集される。返信用のアドレスは、コンテキスト番号M(グループ内で最も小さい番号のコンテキスト)についてSendCtxtCreditReturnAddrレジスタ内で規定され、その一方でこのクレジット返信用のG個の送信コンテキストにはMからM+G−1までの番号が付される。グループ内の各送信コンテキストのクレジット情報はQWであり、Gは64Bクレジット返信書込みに詰め込まれるような値である。範囲[0,G−1]内のIについては、返信されているクレジットは送信コンテキスト番号M+Iのためであり、クレジットは指数(M+1)&0×7を有するQWの中に配置される。このため指数は送信コンテキスト番号の最も小さい3ビットによって簡単に指定され、Gの値にかかわらず、いずれか特定の送信コンテキストのクレジット返信値は64Bクレジット返信値の中でいつも同じ位置にあり、実施におけるシフト動作をなくしている。クレジット返信値の中の未使用のQWは0×0の値で満たされる。
【0095】
クレジット返信値のすべての組み合わせは、表4にまとめられている。64Bクレジット返信となる異なる指数値には8つの列がある。指数0はバイト0から7に対応し、指数1はバイト8から15に対応する、などである。各行は、その特定のGの値(グループごとの送信コンテキストの数である)のクレジット返信値の1つの組み合わせを表す。空白のセルは未使用のQWを示し、これらはゼロ値を有する。表記CRx(xは0から7に含まれる)は、xに等しい少なくとも3つの有効ビットを有するコンテキスト用のクレジット返信値を示す。各CRxQW値は、表2で定義されたフォーマットを有する。たとえば、Gは1であるとき、1つのクレジット返信値があり、送信コンテキスト番号に応じて8つの位置のうちの1つとなる。Gが8のときは、8つのクレジット返信値があり、8つすべての位置が使用される。
【0096】
【表4】
クレジットが送信コンテキストグループのために返信されると、グループ内の各送信コンテキスト用のフリーカウンタは、ホストメモリ内に保持されるシャドウコピーに転送されたDMAであるクレジットカウンタ値に更新される。このアプローチは、ある送信コンテキストがその閾値に基づいてグループのクレジット返信をトリガしたときに、そのクレジット返信は最大可能な限りそのグループ内のその他すべての送信コンテキストに提供されることを、意味する。このアプローチは、送信ブロック放出がグループのメンバー全体に対して妥当にインターリーブされることを前提として、全体的にグループの送信クレジット更新の頻度を減少させる。なお、閾値は、この機構を有効にするためには最大パケット内の送信ブロックの数よりも大きくなければならないことに、注意する。
【0097】
図12は、一実施形態による、絶対クレジットを用いてPIO書込み管理をサポートするために使用される、PIO送信アドレスFIFO 1400およびクレジット返信FIFO 1402の例示的な構成を示す。PIO送信アドレスFIFO 1400は、PIO送信メモリ書込みを生成したソフトウェアの管理の下で、メモリ106内の各送信コンテキストのために実施される。先に論じられたように、一実施形態において、(各送信コンテキスト内の利用可能な送信ブロックに対応する)利用可能なクレジットを追跡するために、11ビットランニングカウンタがFIFOセマンティックスと組み合わせて使用される。命令に値する各送信ブロックが生成されてプロセッサコアによる実行のために転送される際に、ソフトウェアは、送信ブロックが書き込まれることになる送信コンテキストのランニングカウントを増加させる。他方、受信側では、クレジット返信機構127は、返信された絶対クレジットの11ビットランニングカウントを保持する。クレジットが返信される際に、ランニングカウントが進む。FIFOは、カウントが2047に到達すると0に戻される、円形FIFOセマンティックスを使用する。ソフトウェアはまた、各送信コンテキストの絶対返信クレジットの追跡も続ける。送信絶対ランニングカウントと返信絶対ランニングカウントとの差が送信コンテキストのサイズ未満である限りにおいて、ソフトウェアは追加のPIO送信メモリ書込みを生成することができる。差が送信コンテキストのサイズに到達してしまうと、更新された絶対ランニングカウントがクレジット返信機構127を介して受信されるまで、送信コンテキストへのパケットデータの書込みは中断される。
例示的なHFI実施アーキテクチャ
図13は、プロセッサ1306に結合されたファブリックポート112を含むホストファブリックインタフェース102を備える例示的な構成を有するシステムノード1300を示し、これはまたメモリ106に結合されている。ファブリックポート112は、
図1に示されるものと類似の高レベル構成を有する、伝送ポート110および受信ポート116を含む。伝送ポート110は、複数の伝送VLバッファに分割された送信バッファ(Tbuf)を含むTxリンクファブリック副層回路および論理1310と、Txリンク転送副層回路および論理1312と、4つの送信器1316を含むTx PHY回路および論理1314と、Txリンク制御ブロック1317と、を含む。受信ポート116は、複数の受信VLバッファに分割された受信バッファ(Rbuf)を含むRxリンクファブリック副層回路および論理1318と、Rxリンク転送副層回路および論理1320と、4つの受信器1324を含むRx PHY回路および論理1322と、Rxリンク制御ブロック1325と、を含む。
【0098】
Tx PHY回路および論理1314は、4つの送信器1316およびTxリンク制御ブロック1317の一部を含む簡素化された形態で示されている。一般的に、送信器1316は、リンクのPHY層構成に応じて、電気または光学送信器を備えることができる。Tx PHY回路および論理ブロックは、明確さのため図示されない伝送側PHY層動作を実施するための追加回路および論理を含むことは、ネットワーク分野の当業者によって理解されるだろう。これは、エラーを低減して転送特性を強化するために、高速相互接続と併せて実施される様々な機能を促進するために使用される、PHY層の中の様々な副層を含む。
【0099】
Rx PHY回路および論理1322は、4つの受信器1324およびRxリンク制御ブロック1325の一部を含む簡素化された形態で示されている。一般的に、受信器1324は、リンクのPHY層構成に応じて、電気または光学送信器を備えることができ、送信器1316からのリンクを通じて送信された信号を受信するように構成される。Rx PHY回路および論理ブロックは、明確さのため図示されない受信側PHY層動作を実施するための追加回路および論理を含むことは、ネットワーク分野の当業者によって理解されるだろう。これは、エラーを低減して転送特性を強化するために、高速相互接続と併せて実施される様々な機能を促進するために使用される、PHY層の中の様々な副層を含む。
【0100】
HFI 1302は、PCIeインタフェース118に結合された伝送エンジン108および受信エンジン114を、さらに含む。伝送エンジン108および受信エンジン114の各々は、上述のような、
図1の伝送エンジン108および受信エンジン114と類似のやり方で、構成されている。
【0101】
プロセッサ1306は、各々が統合されたレベル1およびレベル2(L1/L2)キャッシュを含み、コヒーレント相互接続1330に結合された、複数のプロセッサコア1328を含むCPU1326を含む。図示される実施形態において、ストアバッファ(St.Bf.)もまた各コア1328に結合されて示されている;選択的に、ストアバッファは、プロセッサ内のプロセッサコアのすべてまたは一部にわたって共有されてもよい。やはりコヒーレント相互接続1330に結合されているのは、メモリ106に結合されたメモリインタフェース1332と、統合入出力ブロック(IIO)1334と、最終レベルキャッシュ(LLC)1336である。IIO 1334は、プロセッサコア、メモリ、およびキャッシュによって採用されるコヒーレントドメインと、IOコンポーネントおよびIOインタフェースのために採用される非コヒーレントドメインとの間に、1対のPCIeルートコンプレックス(RC)1338および1340を含む、インタフェースを提供する。当該技術分野において周知のように、PCIe RCは、PCIeインタフェース1342、1344、1346、および1348によって示されるように、複数のPCIeインタフェースおよびPCIe装置が結合可能なPCIe相互接続ヒエラルキーの頂点に座する。図示されるように、PCIe 1344は、HFI 102のPCIeインタフェース118に結合されている。
【0102】
図13に示されるものなど、いくつかの実施形態において、プロセッサ1306はSoCアーキテクチャを採用する。別の実施形態では、PCIe関連コンポーネントが、プロセッサに結合されたIOチップセットなどに組み込まれている。さらに別の実施形態では、プロセッサ1306および1つ以上のHFI 102が、たとえばSoC 1350の囲み点線で示されるように、SoC上に組み込まれている。また、図示されるように、第二のHFI 102がPCIeインタフェース1346に結合されて示されており、囲み点線はこれが選択的な構成であることを示している。一実施形態において、
図14に示されるように、複数のHFIはASIC(特定用途向け集積回路;Application Specific Integrated Circuit)1400上に実装されてもよい。
図13にさらに示されるように、ソフトウェアアプリケーション1352は、プロセッサコア1328のうちの1つ以上で動作するソフトウェアコンポーネント、またはプロセッサ1306上で動作するオペレーティングシステムによってホストされる1つ以上の仮想マシンを備える。これらのソフトウェアコンポーネントに加えて、メモリ106(適用可能なキャッシュレベルを含む)と伝送エンジン108および受信エンジン114との間のデータ転送を容易にするために、メモリ106内に実装された追加ソフトウェアコンポーネントおよびバッファがある。
【0103】
本明細書に記載される対象内容のさらなる態様は、以下の箇条書きの節に明示される。
【0104】
1.メモリ内に格納されたそれぞれのパケット用のパケットデータをネットワークアダプタ上のPIO送信メモリに書き込むためのプログラム入力/出力(PIO:Programmed Input/Output)書込み命令のシーケンスを受信するステップと、
PIO書込み命令の前記シーケンスを、アウトオブオーダー実行をサポートするプロセッサ上の命令スレッドとして実行するステップであって、PIO書込み命令の実行は、データをストアバッファ内のストアユニットに書き込ませ、ストアブロックにグループ分けされた前記ストアユニットは一列のストアユニットを備え;前記PIO書込み命令の一部はアウトオブオーダーで実行され、結果的にデータは、前記ストアブロックが充填される前に異なるストアブロック内のストアユニットに書き込まれる、ステップと、
ストアブロックが充填されたときを検出するステップと、
ストアブロックが充填されたことの検出に応えて、前記PIO送信メモリ内のバッファへのポステッドライトを介して前記ストアブロック内の前記データをドレインするステップと、
を備える方法。
【0105】
2.前記メモリは64バイト(64B)キャッシュラインを採用し、各ストアブロックは64バイトのデータを備え、前記ポステッドライトは64BのPCIe(Peripheral Component Interconnect Express)ポステッドライトを備える、節1に記載の方法。
【0106】
3.前記プロセッサは64ビットプロセッサを備え、各ストアユニットは、単一の命令を用いて前記プロセッサ内の64ビットデータレジスタからストアユニットに書き込まれた64ビットのデータを備える、節1または2に記載の方法。
【0107】
4.PIO書込み命令の前記シーケンスは、それぞれのパケットごとに1つ以上の整列された64B書込みの連続グループとして受信され、前記方法は、
パケットを生成するステップと、
前記パケットが64バイトの倍数ではない長さを有すると判断するステップと、
64バイトの倍数までその長さを伸長するために前記パケットにパディングを追加するステップと、
前記パケットデータを備えてパディングを含む1つ以上の整列された64B書込みのシーケンスを備えるPIO書込み命令を生成するステップと、
を備える、節1から3のいずれかに記載の方法。
【0108】
5.前記プロセッサはライトコンバイニングを採用し、アウトオブオーダーPIO書込み命令の実行の結果、データは不連続順でストアブロック内のストアユニットに書き込まれる、節1から4のいずれかに記載の方法。
【0109】
6.前記PIO送信メモリは複数の送信コンテキストに分割され、各送信コンテキストは送信ブロックのシーケンスとして構造化されており、前記方法は、
連続順で複数の連続する送信ブロックにパケットのデータを書き込むためのPIO書込み命令のシーケンスを受信するステップと、
不連続順で前記連続する送信ブロックに前記パケットの前記データを書き込むステップと、
を備える、節1から5のいずれかに記載の方法。
【0110】
7.前記複数の連続する送信ブロックのすべてが前記パケットデータで充填されたことを検出するステップと、
前記複数の送信ブロックのすべてが充填されてしまったら、前記複数の送信ブロック内のデータを放出できるようにするステップと、
をさらに備える、節6に記載の方法。
【0111】
8.プロセッサ上で実行されたときに、アウトオブオーダー実行をサポートする前記プロセッサを含むコンピュータに、節1から7のいずれかに記載の方法を実施させられるように構成された命令を格納する、非一時的機械読み取り可能媒体。
【0112】
9.メモリ内に格納されたそれぞれのパケット用のパケットデータをネットワークアダプタ上のPIO送信メモリに書き込むためのプログラム入力/出力(PIO)書込み命令のシーケンスを受信するステップであって、各PIO書込み命令は、前記データ、および前記データが書き込まれるPIO送信メモリ内の送信ブロックのメモリマップアドレスを包含するメモリ内のキャッシュラインの位置を定義する、ステップと、
PIO書込み命令の前記シーケンスを、アウトオブオーダー実行をサポートするプロセッサ上の命令スレッドとして実行するステップであって、PIO書込み命令の実行は、データをストアバッファ内のストアブロックに書き込ませ、前記PIO書込み命令の一部はアウトオブオーダーで実行され、その結果、前記PIO書込み命令が受信される順序とは異なる順序でデータがストアブロックに書き込まれる、ステップと、
ストアブロックが充填されたときを検出するステップと、
ストアブロックが充填されたことの検出に応えて、前記データを前記送信ブロックに書き込むために使用された前記PIO書込み命令内に包含されるアドレスに位置する前記PIO送信メモリ内の送信ブロックへのポステッドライトを介して前記ストアブロック内の前記データをドレインするステップと、
を備える方法。
【0113】
10.前記PIO書込み命令は512ビット書込み命令を備え、メモリキャッシュライン、ストアブロック、および送信ブロックの各々は64バイトのサイズを有する、節9に記載の方法。
【0114】
11.ポステッドライトは、64バイト(64B)PCIe(Peripheral Component Interconnect Express)ポステッドライトを備える、節10に記載の方法。
【0115】
12.前記PIO送信メモリを複数の送信コンテキストに分割するステップと、
任意のパケットのデータが1つ以上の連続する送信ブロックに格納される際の各送信コンテキスト用の先入先出(FIFO;First−in,First−out)格納スキームを採用するステップであって、同じ送信コンテキストに複数のパケットのパケットデータを書き込むためのPIO書込み命令は元のFIFO順で連続的にグループ化され、前記複数のパケットの前記パケットデータは前記元のFIFO順とは異なる順序で送信ブロックに書き込まれることが可能である、ステップと、
をさらに備える、節9から11のいずれかに記載の方法。
【0116】
13.前記1つ以上の連続する送信ブロックのすべてが任意のパケットについて前記パケットデータで充填されたことを検出するステップと、
一旦前記複数の送信ブロックが充填されたら、前記任意のパケットのデータが放出されることを可能にするステップと、
をさらに備える、節12に記載の方法。
【0117】
14.そのパケットに関連付けられたVLを識別するために使用される仮想レーン(VL)標識を用いて各パケット内のヘッダフィールドを符号化するステップと、
同じ送信コンテキスト内の異なるVLを有するパケットがFIFO順とは関係なく放出されることを可能にするステップと、
同じ送信コンテキスト内の同じVLに関連付けられたパケットのデータの放出のためのFIFO順を強制するステップと、
をさらに備える、節13に記載の方法。
【0118】
15.プロセッサ上で実行されたときに、アウトオブオーダー実行をサポートする前記プロセッサを含むコンピュータに、節8から14のいずれかの方法を実施させられるように構成された命令を格納する、非一時的機械読み取り可能媒体。
16.アウトオブオーダー実行をサポートし、メモリインタフェース、少なくとも1つのストアバッファ、および第一PCIe(Peripheral Component Interconnect Express)インタフェースを含む複数のプロセッサコアを有する、プロセッサと、
PCIe相互接続を介して前記プロセッサの前記第一PCIeインタフェースに結合された、第二PCIeインタフェースと、
前記第二PCIeインタフェースに動作可能に結合され、プログラム入力/出力(PIO)送信メモリを含む、伝送エンジンと、
を備える装置であって、前記プロセッサは、
前記メモリインタフェースに結合されたときにメモリ内に格納されたそれぞれのパケット用のパケットデータを前記PIO送信メモリに書き込むためのプログラム入力/出力(PIO)書込み命令のシーケンスを受信し、
PIO書込み命令の前記シーケンスをプロセッサコア上の命令スレッドとして実行し、PIO書込み命令の実行は、データをストアバッファ内のストアユニットに書き込ませ、ストアブロックにグループ分けされた前記ストアユニットは一列のストアユニットを備え;前記PIO書込み命令の一部はアウトオブオーダーで実行され、結果的にデータは、前記ストアブロックが充填される前に異なるストアブロック内のストアユニットに書き込み、、
ストアブロックが充填されたときを検出し、
ストアブロックが充填されたことの検出に応えて、前記PCIe相互接続を通じて送信された前記PIO送信メモリ内のバッファへのPCIeポステッドライトを介して前記ストアブロック内の前記データをドレインする、
回路および論理を含む、装置。
【0119】
17.前記メモリは64バイト(64B)キャッシュラインを採用し、各ストアブロックは64バイトのデータを備え、前記ポステッドライトは64BのPCIe(Peripheral Component Interconnect Express)ポステッドライトを備える、節16に記載の装置。
【0120】
18.前記プロセッサは64ビットプロセッサを備え、各ストアユニットは、単一の命令を用いて前記プロセッサ内の64ビットデータレジスタからストアユニットに書き込まれた64ビットのデータを備える、節16または17に記載の装置。
【0121】
19.前記プロセッサはライトコンバイニングを採用し、アウトオブオーダーPIO書込み命令の実行の結果、データは不連続順でストアブロック内のストアユニットに書き込まれる、節16から18のいずれかに記載の装置。
【0122】
20.前記PIO送信メモリは複数の送信コンテキストに分割され、各送信コンテキストは送信ブロックのシーケンスとして構造化されており、前記装置は、
連続順で複数の連続する送信ブロックにパケットのデータを書き込むためのPIO書込み命令のシーケンスを受信し、
不連続順で前記連続する送信ブロックに前記パケットの前記データを書き込む、
さらなる回路および論理を含む、節16から19のいずれかに記載の装置。
【0123】
21.前記複数の連続する送信ブロックのすべてが前記パケットデータで充填されたことを検出し、
前記複数の送信ブロックのすべてが充填されてしまったら、前記複数の送信ブロック内のデータを放出できるようにする、
回路および論理をさらに備える、節20に記載の装置。
【0124】
22.前記パケットの長さを判断するために前記複数の連続する送信ブロックの1つ目の中のデータを検査し、
いくつの連続する送信ブロックが前記パケットのデータを格納するために採用されるべきかを判断する、
回路および論理をさらに備える、節21に記載の装置。
【0125】
23.アウトオブオーダー実行をサポートし、メモリインタフェース、少なくとも1つのストアバッファ、および第一PCIe(Peripheral Component Interconnect Express)インタフェースを含む、複数のプロセッサコアを有する、プロセッサと、
PCIe相互接続を介して前記プロセッサの前記第一PCIeインタフェースに結合された、第二PCIeインタフェースと、
前記第二PCIeインタフェースに動作可能に結合され、プログラム入力/出力(PIO)送信メモリを含む、伝送エンジンと、
を備える装置であって、前記プロセッサは、
メモリ内に格納されたそれぞれのパケット用のパケットデータを前記PIO送信メモリに書き込むためのプログラム入力/出力(PIO)書込み命令のシーケンスを受信するためであって、各PIO書込み命令は、前記データが書き込まれる前記PIO送信メモリ内の送信ブロックのデータおよびメモリマップアドレスを包含するメモリ内のキャッシュラインの位置を定義し、
PIO書込み命令の前記シーケンスをプロセッサコア上の命令スレッドとして実行するためであって、PIO書込みの実行は、データをストアバッファ内のストアブロックに書き込ませ、前記PIO書込み命令の一部はアウトオブオーダーで実行され、結果的にデータは、前記PIO書込み命令が受信される順とは異なる順序でストアブロックに書き込み、
ストアブロックが充填されたときを検出し、
ストアブロックが充填されたことの検出に応えて、前記データを送信ブロックに書き込むために使用された前記PIO書込み命令に包含される前記アドレスに位置する前記PIO送信メモリ内の前記送信ブロックへのPCIeポステッドライトを介して、前記ストアブロック内の前記データをドレインする、
回路および論理を含む、装置。
【0126】
24.前記PIO書込み命令は512ビット書込み命令を備え、メモリキャッシュライン、ストアブロック、および送信ブロックの各々は64バイトのサイズを有し、前記PCIeポステッドライトは64バイトのPCIeポステッドライトを備える、節23に記載の装置。
【0127】
25.前記PIO送信メモリを複数の送信コンテキストに分割し、
任意のパケットのデータが1つ以上の連続する送信ブロックに格納される際の各送信コンテキスト用の先入先出(FIFO;First−in,First−out)格納スキームを実施し、
前記1つ以上の連続する送信ブロックのすべてが任意のパケットのパケットデータで充填されたことを検出し、
一旦前記複数の送信ブロックが充填されたら、前記任意のパケットのデータが放出されることを可能にする、
回路および論理をさらに備え、
同じ送信コンテキストに複数のパケットのパケットデータを書き込むためのPIO書込み命令は元のFIFO順で連続的にグループ化され、前記複数のパケットの前記パケットデータは前記PIO書込み命令のアウトオブオーダー実行を介して前記元のFIFO順とは異なる順序で送信ブロックに書き込まれることが可能である、
節23または24に記載の装置。
【0128】
26.そのパケットに関連付けられたVLを識別するために使用される仮想レーン(VL)標識を用いて各パケット内のヘッダフィールドを符号化し、
同じ送信コンテキスト内の異なるVLを有するパケットがFIFO順とは関係なく放出されることを可能にし、
同じ送信コンテキスト内の同じVLに関連付けられたパケットのデータの放出のためのFIFO順を強制する、
回路および論理をさらに備える、節25に記載の装置。
【0129】
27.PCIe(Peripheral Component Interconnect Express)インタフェースと、
前記PCIeインタフェースに動作可能に結合されたプログラム入力/出力(PIO)送信メモリ、および
前記PIO送信メモリに動作可能に結合された放出ブロック、
を含む伝送エンジンと、
前記放出ブロックに動作可能に結合された伝送ポートを含むネットワークポートと、
を備える装置であって、
前記伝送エンジンは、
前記PIO送信メモリを、各々が複数の連続する送信ブロックを備える、複数の送信コンテキストに分割し、
PCIe相互接続を介して前記PCIeインタフェースに結合されたプロセッサからインバウンドPCIeポステッドライトを受信し、各PCIeポステッドライトは、前記プロセッサに結合されたメモリ内に格納されたパケットに対応するパケットデータを包含し、PIO書込み命令を介して単一の送信ブロックに書き込まれ、任意のパケットのパケットデータは1つの送信ブロックまたは複数の連続する送信ブロックに書き込まれ、複数の連続する送信ブロックに書き込まれるパケットのパケットデータはアウトオブオーダーで受信されることが可能とし、
パケット用の複数の連続する送信ブロックが充填されたときを検出し、
パケット用の前記連続する送信ブロックのすべてが充填されたとして検出されたときに、前記複数の連続する送信ブロック内のパケットデータを、前記放出ブロックへの放出の対象であるとして標識する、
回路および論理をさらに備える、装置。
【0130】
28.前記放出ブロックから前記伝送ポートに放出されるために充填された前記複数の送信コンテキスト内のパケットの中からパケットを選択するためのアービタを実現するための回路および論理をさらに備える、節27に記載の装置。
【0131】
29.前記伝送エンジンは、送信ダイレクトメモリアクセス(SDMA)メモリと、前記SDMAメモリ内のバッファにデータを書き込むためにDMA転送を用いて前記プロセッサに結合されたメモリからデータを引き出すように構成された複数のSDMAエンジンと、をさらに備える、節27または28に記載の装置。
【0132】
30.前記PCIeインタフェースは第一PCIeインタフェースを備え、前記装置は、
アウトオブオーダー実行をサポートし、メモリインタフェース、少なくとも1つのストアバッファ、およびPCIe相互接続を介して前記第一PCIeインタフェースに結合された第二PCIe(Peripheral Component Interconnect Express)インタフェースを含む、複数のプロセッサコアを有するプロセッサであって、
前記メモリインタフェースと結合されたときにメモリ内に格納されたそれぞれのパケット用のパケットデータを前記PIO送信メモリに書き込むためのPIO書込み命令のシーケンスを受信し、
PIO書込み命令の前記シーケンスをプロセッサコア上の命令スレッドとして実行し、PIO書込み命令の実行は、データをストアバッファ内のストアユニットに書き込ませ、ストアブロックにグループ分けされた前記ストアユニットは一列のストアユニットを備え;前記PIO書込み命令の一部はアウトオブオーダーで実行され、結果的にデータは、前記ストアブロックが充填される前に異なるストアブロック内のストアユニットに書き込み、
ストアブロックが充填されたときを検出し、
ストアブロックが充填されたことの検出に応えて、前記PCIe相互接続を通じて送信された前記PIO送信メモリ内のバッファへのPCIeポステッドライトを介して前記ストアブロック内の前記データをドレインする、
回路および論理をさらに含むプロセッサをさらに備える、節27から29のいずれかに記載の装置。
【0133】
31.前記装置は、
前記PCIeインタフェースに結合された受信エンジンと、
前記受信エンジンに結合された受信ポートと、
をさらに備えるホストファブリックインタフェースを備える、節27から30のいずれかに記載の装置。
【0134】
32.前記装置は、節31の前記ホストファブリックインタフェースのために定義された構成を有する複数のホストファブリックインタフェースを備える、節31に記載の装置。
【0135】
33.アウトオブオーダー実行をサポートし、メモリインタフェース、少なくとも1つのストアバッファ、および第一PCIe(Peripheral Component Interconnect Express)インタフェースを含む複数のプロセッサコアを有する、プロセッサと、
PCIe相互接続を介して前記プロセッサの前記第一PCIeインタフェースに結合された、第二PCIeインタフェースと、
前記第二PCIeインタフェースに動作可能に結合され、プログラム入力/出力(PIO)送信メモリを含む、伝送エンジンと、
を備える装置であって、
前記プロセッサは、
前記メモリインタフェースに結合されたときにメモリ内に格納されたそれぞれのパケット用のパケットデータを前記PIO送信メモリに書き込むためのプログラム入力/出力(PIO)書込み命令のシーケンスを受信し、
PIO書込み命令の前記シーケンスをプロセッサコア上の命令スレッドとして実行し、PIO書込みの実行は、データをストアバッファ内のストアユニットに書き込ませ、ストアブロックにグループ分けされた前記ストアユニットは一列のストアユニットを備え;前記PIO書込み命令の一部はアウトオブオーダーで実行され、結果的にデータは、前記ストアブロックが充填される前に異なるストアブロック内のストアユニットに書き込み、
ストアブロックが充填されたときを検出し、
ストアブロックが充填されたことの検出に応えて、前記PCIe相互接続を通じて送信された前記PIO送信メモリ内のバッファへのPCIeポステッドライトを介して前記ストアブロック内の前記データをドレインする、
手段をさらに備える、装置。
【0136】
34.前記メモリは64バイト(64B)キャッシュラインを採用し、各ストアブロックは64バイトのデータを備え、前記ポステッドライトは64BのPCIe(Peripheral Component Interconnect Express)ポステッドライトを備える、節33に記載の装置。
【0137】
35.前記プロセッサは64ビットプロセッサを備え、各ストアユニットは、単一の命令を用いて前記プロセッサ内の64ビットデータレジスタからストアユニットに書き込まれた64ビットのデータを備える、節33または34に記載の装置。
【0138】
36.前記プロセッサはライトコンバイニングを採用し、アウトオブオーダーPIO書込み命令の実行の結果、データは不連続順でストアブロック内のストアユニットに書き込まれる、節33から35のいずれかに記載の装置。
【0139】
37.前記PIO送信メモリは複数の送信コンテキストに分割され、各送信コンテキストは送信ブロックのシーケンスとして構造化され、前記装置は、
連続順で複数の連続する送信ブロックにパケットのデータを書き込むためのPIO書込み命令のシーケンスを受信し、
不連続順で前記連続する送信ブロックに前記パケットの前記データを書き込む、
手段をさらに備える、節33から36のいずれかに記載の装置。
【0140】
38.前記複数の連続する送信ブロックのすべてが前記パケットデータで充填されたことを検出し、
前記複数の送信ブロックのすべてが充填されてしまったら、前記複数の送信ブロック内のデータを放出できるようにする、
手段をさらに備える、節37に記載の装置。
【0141】
39.前記パケットの長さを判断するために前記複数の連続する送信ブロックの1つ目の中のデータを検査し、
いくつの連続する送信ブロックが前記パケットのデータを格納するために採用されるべきかを判断する、
手段をさらに備える、節38に記載の装置。
【0142】
一般的に、本明細書の図に示される回路、論理、および構成要素は、ディスクリートチップ、SoC、マルチチップモジュール、および複数のネットワークインタフェースのサポートを含むネットワーキング/リンクインタフェースチップを含む、様々なタイプの集積回路(たとえば、半導体チップ)およびモジュールにおいて実施されることも可能である。また、本明細書において使用される際に、様々な動作を行うための回路および論理は、埋め込み論理、埋め込みプロセッサ、コントローラ、マイクロエンジン、あるいはハードウェア、ソフトウェア、および/またはファームウェアのいずれかの組み合わせの使用のうちの1つ以上を介して実施されてもよい。たとえば、様々な論理ブロックおよび/または回路によって示される動作は、ASIC、FPGA、IPブロックライブラリを含むがこれらに限定されないプログラムされた論理ゲートなどを用いて、あるいはプロセッサ、プロセッサコア、コントローラ、マイクロコントローラ、マイクロエンジンなどを含む1つ以上の処理要素上で実行されるソフトウェアまたはファームウェア命令のうちの1つ以上を通じて、行われてもよい。
【0143】
加えて、本明細書の実施形態の態様は、半導体チップ、SoC、マルチチップモジュールなどの中のみならず、非一時的機械読み取り可能媒体の中でも実施されることが可能である。たとえば、上記の設計は、半導体装置を設計するために使用される設計ツールに関連付けられた非一時的機械読み取り可能媒体に格納および/または埋め込まれてもよい。例としては、VHSICハードウェア記述言語(VHDL;VHSIC Hardware Description Language)言語、Verilog言語またはSPICE言語、あるいはその他のハードウェア記述言語でフォーマットされたネットリストを含む。いくつかのネットリストの例は:挙動レベルネットリスト、レジスタ転送レベル(RTL)ネットリスト、ゲートレベルネットリスト、およびトランジスタレベルネットリストを含む。機械読み取り可能媒体は、GDS−IIファイルなどのレイアウト情報を有する媒体も含む。
【0144】
さらに、半導体チップ設計のためのネットリストファイルまたはその他の機械読み取り可能媒体は、先に記載された教示の方法を実行するためのシミュレーション環境において使用されてもよい。
【0145】
特定の実施を参照していくつかの実施形態が記載されたものの、いくつかの実施形態によるその他の実施も可能である。加えて、図示された、および/または本明細書に記載された要素の配置および/または順序またはその他の特徴は、図示および記載された特定のやり方で配置される必要はない。いくつかの実施形態によるその他多くの配置が可能である。
【0146】
図示される各システムにおいて、いくつかのケースにおける要素は各々、提示される要素が異なってもおよび/または類似であってもよいことを示唆するために、同じ参照番号または異なる参照番号を有してもよい。しかしながら、1つの要素は、異なる実施を有するため、および本明細書に図示または記載されるシステムの一部またはすべてとともに動作するための、十分な柔軟性を有することができる。図示される様々な要素は、同じであっても異なってもよい。いずれのものが第一要素と称され、いずれのものが第二要素と称されるかは、任意である。
【0147】
上記詳細な説明および請求項における「M」、「G」、「B」、「n」、「m」、「k」などのイタリック文字は整数を表すために使用され、特定の文字の使用は特定の実施形態に限定されるものではない。また、個別の整数を表すために個別の請求項において同じ文字が使用されてもよく、あるいは異なる文字が使用されてもよい。加えて、詳細な説明における特定の文字の使用は、詳細な説明の同じ内容に関する請求項で使用される文字と一致してもしなくてもよい。
【0148】
説明および請求項において、その派生語と併せて、用語「結合(coupled)」および「接続(connected)」が使用されているかもしれない。これらの用語が互いの同義語として意図されるものではないことは、理解すべきである。むしろ、特定の実施形態において、「接続」は、2つ以上の要素が互いに直接物理的または電気的接触していることを示すために使用される。「結合」は、2つ以上の要素が直接物理的または電気的に接触していることを意味することができる。しかしながら、「結合」はまた、2つ以上の要素が互いに直接接触しておらず、それでもなお互いに協働または相互作用することも、意味することができる。
【0149】
実施形態は、本発明の実施または例である。明細書における「実施形態」、「一実施形態」、「いくつかの実施形態」、または「その他の実施形態」の言及は、その実施形態に関連して記載される特定の特徴、構造、または特性が本発明の少なくともいくつかの実施形態に含まれるが、しかし必ずしもすべての実施形態には含まれないことを、意味する。「実施形態」、「一実施形態」、または「いくつかの実施形態」の様々な記載は、必ずしもすべて同じ実施形態を指すとは限らない。
【0150】
本明細書に記載および図示されるすべての構成要素、特徴、構造、特性などが特定の1つまたは複数の実施形態に含まれる必要はない。ある構成要素、特徴、構造、または特性が含まれることが「あってもよい(may)」、「あるかもしれない(might)」、「可能(can)」、または「あるかもしれない(could)」と明細書が述べる場合、たとえば、その特定の構成要素、特徴、構造、または特性が含まれることが必要とされるわけではない。明細書または請求項が「a」または「an」(1つの)要素を指す場合、これはその要素が1つしかないことを意味するものではない。明細書または請求項が「もう1つの(an additional)」要素を指す場合、これは2つ以上の追加要素があることを除外するものではない。
【0151】
要約書に記載されるものを含め、本発明の図示される実施形態の上記説明は、包括的となるように、または本発明を開示された正確な形態に限定するように、意図されるものではない。本発明の特定の実施形態および例が説明目的のため本明細書に記載されているが、その一方で、当業者が認識するように、本発明の範囲内で様々な同等の修正が可能である。
【0152】
これらの修正は、上記の詳細な説明を鑑みて本発明に対してなされることが可能である。以下の請求項で使用される用語は、本明細書および図面で開示された具体的実施形態に本発明を限定するように解釈されるべきではない。むしろ、本発明の範囲は、請求項解釈の確立された原理にしたがって解釈される、以下の請求項によってのみ判断されるべきである。