JP2017525065A - Sfenceを用いずに最適化されたpio書込みシーケンスを用いるパケット送信 - Google Patents

Sfenceを用いずに最適化されたpio書込みシーケンスを用いるパケット送信 Download PDF

Info

Publication number
JP2017525065A
JP2017525065A JP2017516268A JP2017516268A JP2017525065A JP 2017525065 A JP2017525065 A JP 2017525065A JP 2017516268 A JP2017516268 A JP 2017516268A JP 2017516268 A JP2017516268 A JP 2017516268A JP 2017525065 A JP2017525065 A JP 2017525065A
Authority
JP
Japan
Prior art keywords
transmission
packet
pio
store
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2017516268A
Other languages
English (en)
Other versions
JP6377844B2 (ja
Inventor
デバッジ,マーク
エム. ムータ,ヤティン
エム. ムータ,ヤティン
Original Assignee
インテル コーポレイション
インテル コーポレイション
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by インテル コーポレイション, インテル コーポレイション filed Critical インテル コーポレイション
Publication of JP2017525065A publication Critical patent/JP2017525065A/ja
Application granted granted Critical
Publication of JP6377844B2 publication Critical patent/JP6377844B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/065Partitioned buffers, e.g. allowing multiple independent queues, bidirectional FIFO's
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/10Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using random access memory
    • G06F5/12Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations
    • G06F5/14Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations for overflow or underflow handling, e.g. full or empty flags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2205/00Indexing scheme relating to group G06F5/00; Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F2205/06Indexing scheme relating to groups G06F5/06 - G06F5/16
    • G06F2205/067Bidirectional FIFO, i.e. system allowing data transfer in two directions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2205/00Indexing scheme relating to group G06F5/00; Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F2205/12Indexing scheme relating to groups G06F5/12 - G06F5/14
    • G06F2205/126Monitoring of intermediate fill level, i.e. with additional means for monitoring the fill level, e.g. half full flag, almost empty flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Multimedia (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Information Transfer Systems (AREA)
  • Executing Machine-Instructions (AREA)
  • Multi Processors (AREA)

Abstract

sfenceを用いずに最適化されたPIO書込みシーケンスを用いてパケットを送信する方法および装置。PIO送信メモリにパケットデータを書き込むためのプログラム入力/出力(PIO)書込み命令のシーケンスが、アウトオブオーダー実行をサポートするプロセッサにおいて受信される。PIO書込み命令は、元の順序で受信されてアウトオブオーダーで実行され、各PIO書込み命令は、データのストアユニットをストアバッファに、またはデータのストアブロックをストアバッファに、書き込む。ストアブロックが充填されたときを検出するための論理がストアバッファに提供され、その結果、これらストアブロック内のデータは、PIO書込み命令によって定義されたアドレスでPIO送信メモリ内の送信ブロックに書き込まれたPCIeポステッドライトを介して、ドレインされる。パケットの充填サイズを検出し、およびパケットの送信ブロックが充填されてしまったとき、パケットデータが放出の対象となれるようにする、論理が採用される。

Description

高性能計算(HPC:High−Performance Computing)の利用および興味は近年著しく増加してきた。歴史的に見て、HPCは一般的に、いわゆる「スーパーコンピュータ」と関連付けられていた。スーパーコンピュータは、主にControl Data Corporation(CDC)、Cray Research、および「Cray」の名前またはモノグラムを有する後続企業のSeymour Crayによって、1960年代に導入され、最初およびその後の数十年にわたって作られていた。1970年代のスーパーコンピュータは数個のプロセッサしか使用しなかったが、1990年代には何千個ものプロセッサを有するマシンが出現し始め、より最近には数十万個の「既製品」プロセッサを有する超並列スーパーコンピュータが実現されている。
様々なレベルの規模および性能とともに、実現および研究志向の両方の、多くのタイプのHPCアーキテクチャが存在する。しかしながら、共通のテーマは、協働的に並列でタスクを実行するためプロセッサおよび/またはプロセッサコアなどの多数の計算ユニットの相互接続である。最近のシステムオンチップ(SoC)設計および提案の下で、二次元(2D)アレイ、トーラス、リング、またはその他の構成を用いて、単一のSoC上に多数のプロセッサコアなどが実現されている。加えて、研究者らは、数百個または数千個のプロセッサコアが3Dアレイで相互接続される3DSoCを提案してきた。個別のマルチコアプロセッサおよびSoCもまたサーバボード上で近接していてもよく、これは同様に、バックプレーンなどを介して通信的に相互接続されている。別の一般的なアプローチは、サーバのラック(たとえば、ブレードサーバおよびモジュール)内で計算ユニットを相互接続させることである。かつて世界最速のスーパーコンピュータと言われたIBMのセコイア(Sequoia)は、サーバブレード/モジュールのラックを96個、合計1,572,864個のコアを備え、最大能力で動作しているときは7.9メガワットものとてつもない電力を消費した。
HPCの性能的ボトルネックの1つは、計算ノード間の相互接続上のデータ伝送に起因する遅延である。通常、相互接続は、ヒエラルキーレベルが下がるにつれて遅延が増加する一方で、ヒエラルキーの頂上でプロセッサ/SoCの中の最高速度および最短相互接続を有する、相互接続ヒエラルキーにおいて構築される。たとえば、プロセッサ/SoCレベルの後に、相互接続ヒエラルキーはプロセッサ間相互接続レベル、ボード間相互接続レベル、および個々のサーバまたは個々のサーバの集合を別のラック内のサーバ/集合に接続する1つ以上の追加レベルを、含んでもよい。
近年、バックプレーンまたは銅ケーブル上での100Gb/sのための物理層(PHY)仕様および管理パラメータを定義する、IEEE802.3bjドラフト規格で規定されるような、100ギガビット毎秒(100Gb/s)の速度を有する相互接続リンクが導入されている。(100Gb/sと)類似の速度を有するリンクを含むメッシュ状相互接続構造が、HPC環境向けに開発および設計されている。このような高速リンクおよび相互接続の利用可能性は性能限界を、ファブリックから、相互接続との間で転送されるパケットのソフトウェア生成およびパケットデータの取り扱いに、移行させる。
上記の態様および本発明に付随する利点の多くは、別途指定されない限り様々な図面にわたって類似参照番号が類似部品を示す添付図面と併せると、以下の詳細な説明を参照することによってより良く理解されるので、より容易に理解されるだろう。
一実施形態による、ホストファブリックインタフェース(HFI)を含むシステムの概略図である。 一実施形態による、PIO送信メモリおよびSDMAメモリの様々な態様を示す概略図である。 PIO送信物理アドレス空間の一例を示すブロック図である。 仮想アドレス空間、装置物理アドレス空間、およびPIO送信メモリアドレス空間の間の例示的アドレスマッピングを示すブロック図である。 一実施形態による、送信バッファのレイアウトを示すブロック図である。 図1のシステムの選択的要素のさらなる詳細を示す概略図である。 ストアバッファに書き込まれ、PIO送信メモリ内の送信バッファに転送される、パケットデータの2つのブロックを示す概略図である。 パケット放出を通じてメモリからPIO送信メモリへのパケットデータの例示的転送に対応する送信時間枠を示す、概略図である。 パケット放出を通じてメモリからPIO送信メモリへのパケットデータの例示的転送に対応する送信時間枠を示す、概略図である。 パケット放出を通じてメモリからPIO送信メモリへのパケットデータの例示的転送に対応する送信時間枠を示す、概略図である。 パケット放出を通じてメモリからPIO送信メモリへのパケットデータの例示的転送に対応する送信時間枠を示す、概略図である。 パケット放出を通じてメモリからPIO送信メモリへのパケットデータの例示的転送に対応する送信時間枠を示す、概略図である。 パケット放出を通じてメモリからPIO送信メモリへのパケットデータの例示的転送に対応する送信時間枠を示す、概略図である。 512ビット書込み命令を用いてパケット放出を通じてメモリからPIO送信メモリへのパケットデータの例示的転送に対応する送信時間枠を示す、概略図である。 512ビット書込み命令を用いてパケット放出を通じてメモリからPIO送信メモリへのパケットデータの例示的転送に対応する送信時間枠を示す、概略図である。 512ビット書込み命令を用いてパケット放出を通じてメモリからPIO送信メモリへのパケットデータの例示的転送に対応する送信時間枠を示す、概略図である。 512ビット書込み命令を用いてパケット放出を通じてメモリからPIO送信メモリへのパケットデータの例示的転送に対応する送信時間枠を示す、概略図である。 512ビット書込み命令を用いてパケット放出を通じてメモリからPIO送信メモリへのパケットデータの例示的転送に対応する送信時間枠を示す、概略図である。 sfenceありでのPIO送信書込みでのデータ転送遅延の比較を示す時間フロー図である。 sfenceなしでのPIO送信書込みでのデータ転送遅延の比較を示す時間フロー図である。 一実施形態による、放出ブロックの概略図である。 HFIに結合されたファブリックリンク上のアウトバウンド放出のためのパケットデータの準備において実現される動作、段階、および状態を示すフローチャートである。 一実施形態による、PIO送信アドレスFIFOおよびクレジット返信FIFOを示す図である。 一実施形態による、HFIを含むシステムノードの概略図である。 2つのHFIを含むASICの概略図である。
sfenceを用いずに最適化されたPIO書込み(write、ライト)シーケンスを用いてパケットを送信する方法および装置の実施形態が、本明細書に記載される。以下の説明において、本発明の実施形態の徹底的な理解を提供するために、多くの具体的詳細が明記される。しかしながら当業者は、具体的詳細の1つ以上を伴わずに、またはその他の方法、構成要素、材料などを用いても、本発明が実践可能であることを、認識するだろう。別の例では、本発明の態様が曖昧にならないように、周知の構造、材料、または動作は詳細に図示または記載されない。
明確さのため、本明細書図中の個々の構成要素は、特定の参照番号ではなくむしろ図中のラベルで呼ばれることもある。加えて、(特定の構成要素に対抗して)特定のタイプの構成要素を指す参照番号は、「典型的」を意味する「(typ)」が付いた参照番号で示されてもよい。これらの構成要素の構成は、図面に示されるが簡潔さおよび明確さのためラベル付けされていない類似構成要素の典型となることは、理解されるだろう。反対に、「(typ)」は、構成要素、要素などが一般的にその開示される機能、実現、目的などのために使用されると意味するよう解釈されるべきではない。
図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にも結合されている。
伝送(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である。
PIO送信は、「プログラム入力/出力(Programmed Input/Output)」送信の略である。PIOは一部の人々に、「メモリマップ入力/出力(MMIO;Memory−mapped Input/Output)としても知られている。PIO送信のため、ホストプロセッサ104は、格納命令を用いてメモリマップ送信バッファにパケットのヘッダおよびペイロードを書き込むことによって、パケットを生成する。PIO送信は、プロセッサがパケットをHFI102に向かって押すという意味において、パケット「プッシュ」と見なされることも可能である。送信メモリ120内で実現される送信バッファは、送信バッファへのプロセッサ書込みが、PCIe相互接続105およびPCIeインタフェース118上で送信メモリ120に転送されるPCIe書込みトランザクションになるように、アダプタの物理アドレス空間の中にある。
送信メモリ120内の多数の送信バッファプラス送信バッファクレジットをホストプロセッサ104に返信するために使用される機構は、「送信コンテキスト」と呼ばれる。一実施形態において、最大160個の独立した送信コンテキストがHFI102によって提供され、PIO送信機構の最大160の並行して独立したユーザを許容する。PIO送信は、送信コンテキストをユーザプロセスの仮想アドレスマップに直接マッピングすることによって、ユーザモードソフトウェアから直接使用されることが可能である。
PIO送信は、送信されたパケットの低遅延および高メッセージ速度を送達する、超低オーバーヘッド送信機構を提供する。適切であれば、帯域幅を改善するためにPCIe相互接続およびインタフェース上で細かい書込みを64B(バイト)書込みに凝集するため、ホストプロセッサ104のライトコンバイニング(write―combining:書込み結合)およびストアバッファ機能が使用される。ホストプロセッサ104は送信バッファへのパケットのバイトの書込み(本質的にメモリコピー)に関わるので、PIO送信機構はプロセッサに集約される。これらの性能特性は、PIO送信を小型から中型メッセージ向けに非常によく最適化させる。
送信DMAまたはSDMAと略される送信ダイレクトメモリアクセスは、著しく低いプロセッサ利用でパケットが伝送エンジン108に送信されるように、プロセッサメモリコピーを排除する。PIO送信機構のようにプロセッサ書込みを用いてパケットをHFI102に対して押す代わりに、送信DMAブロック122内のSDMAエンジン123は、ファブリックリンクに放出されるパケットを形成するために、ホストメモリ106から直接パケットヘッダおよびペイロードを引き出す。一実施形態において、送信DMAブロック122は16個の独立したSDMAエンジン123をサポートし、各々は自身のSDMA待ち行列に関連付けられている。
送信PIOおよびSDMAのいずれも、パケットの送信に蓄積転送アプローチを使用する。ヘッダおよびペイロードは、パケットがリンクに放出され始めるようになる前に、伝送エンジン108上の送信バッファによって完全に受信されなければならない。送信メモリ120およびSDMAバッファ124として図1に示されるように、送信バッファメモリがこの目的のためHFI102上に提供され、別の送信バッファメモリが送信PIOおよびSDMAのために提供される。一実施形態において、この分割はHFI設計にハードワイヤドで組み込まれており、ソフトウェア構成可能ではない。しかしながら、送信PIO用の送信メモリ120は、送信バッファクレジットの粒度でのソフトウェア制御の下で送信コンテキストに割り当てられることが可能である。同様に、SDMAバッファ124内の送信バッファメモリは、同じ粒度でSDMAエンジン123に割り当てられることが可能である。
受信エンジン114の基本機能は、受信ポート116で受信した(ファブリックからの)インバウンドパケットのヘッダおよびペイロードを分離して、パケットヘッダおよびペイロードデータをホストメモリ106に書き込むことである。一実施形態において、HFI102のために設計されたパケットデータは、受信ポート116で受信された「フリット(flit)」(フリットストリーム)を備えるデータユニットのストリームとしてファブリックのリンクを介して転送されるが、フリットはパケットに再構築され、これらはその後受信エンジン114に転送される。着信するパケットデータはまずRx受信ブロック128で処理されるが、ここでパケットのヘッダ内の様々なフィールドが、パケットのタイプを判断するために抽出およびチェックされる。パケットデータ(そのデータペイロード)は受信バッファ130内に格納され、その一方でパケットヘッダはパーサ136に転送され、これはその宛先アドレスおよびその他のフィールドデータを抽出するためにヘッダデータを解析し、同時にさらなる動作がパイプライン演算138によって実行される。該当するパイプライン演算と併せて、パケットデータが受信バッファ130から読み出されてDMAエンジン132を介して転送されるが、これはPCIe DMA書込みを介してメモリ106にパケットデータを転送するように構成されている。
図1は、CLK1およびCLK2で示される2つのクロックドメインの使用を示すために用いられる垂直な点線146を、さらに示す。いくつかの実施形態において、PCIeインタフェース118に使用されるクロック周波数は、残りのHFI構成要素のために使用されるクロック周波数とは異なってもよく、各クロックドメインには別の基準クロックが用いられる。図示されないものの、伝送ポート110および受信ポート116内で使用されるクロックドメインもまた、伝送エンジン108および受信エンジン114によって採用されるクロックドメインとは別であってもよい。
図2は、送信PIOおよびSDMA動作のさらなる詳細を示す。図示されるように、最大160個の送信コンテキストが、送信PIOパケットデータに関連して採用されてもよい。各送信コンテキストは、その送信コンテキストに割り当てられたPIO送信メモリ120の隣接したスライスを備える。したがって送信コンテキスト用の送信バッファは、ホスト物理アドレス空間の中で隣接することになる。ユーザプロセスのためのユーザ仮想アドレス空間内へのこの送信バッファの通常マッピングもまた通常は、実質的に隣接する。一実施形態において、各送信コンテキストがn×64Bを備えるように、送信バッファ内の送信ブロックは64Bのブロックを備え、ここでnは0より大きい整数である。一実施形態において、送信ブロックは64Bの境界上に揃えられるが、しかし送信バッファ割り当てに対しては何ら追加アライメント制約は設けられない。一実施形態において、送信コンテキストのために割り当てられた送信バッファのサイズは限界を有する。たとえば、一実施形態においてPIO送信メモリ120のサイズは1MB(1,048,576バイト)であり、最大送信バッファサイズは64KB(n=1024)である。
一実施形態において、ホストプロセッサ104は4KBページ粒度を用いるメモリページングを採用する。しかしながら、ホスト仮想アドレス空間内への送信バッファメモリマッピングは、4KBページ粒度である必要はない。
このアーキテクチャ選択は、送信バッファが64Bの粒度であるときに、ホストプロセッサの4KBのページング機構が2つの送信コンテキストの間に保護を提供するのに十分ではないことを意味している。単純なアドレス空間再マッピングは、ベースオフセットを用いてHFI102によって実施され、送信コンテキストによって区切られる。これは、特定のコンテキストのため送信バッファにアクセスするために使用される物理アドレス内に送信コンテキスト番号を含むことによって、達成される。このため送信コンテキスト番号は、ドライバがユーザプロセスのために設定するマッピングの物理アドレス内に含まれる。HFI102は、現在書き込まれている送信コンテキストを識別するために、送信バッファへの書込みに関する情報を使用し、送信コンテキストが送信バッファメモリ内のその特定の送信ブロックへのアクセスを有することを認証し、その後送信バッファメモリ内に指数へのアドレスを再マッピングするために、その送信コンテキストの情報を調べるためその値を使用する。このアプローチは、各送信バッファの開始がHFIのアドレスマップ内の4KBのページに揃えられるようにしながら、まだ64Bの粒度で送信バッファメモリを共有できるようにする。
先に論じられたように、送信バッファごとの送信バッファメモリの最小量は、1送信ブロックに対応する64Bである(n=1)。送信バッファごとの送信バッファメモリの最大量は、1024個の送信ブロックとなる64KBである。一実施形態において、この制限は、PIO送信機構によるアドレス指定に使用される物理アドレスマップの量を制限するために設けられる。加えて、新規パケットの開始(SOP)である送信ブロックと新規パケットの開始ではない送信ブロックとを区別するために、1つ以上のアドレスビットが使用される。この符号化は、パケット境界が区切られるようにし、PIO送信機構の使用の正当性に対するサニティチェックを提供する。加えて、SOP送信ブロック内の最初の8Bは、Per Buffer Control(PBC)情報をHFI102に渡すために使用される。PBCは、パケットデータ自体の一部ではない64ビット制御クワッドワード(QW)であるが、しかしパケットに関する重要な制御情報を包含する。アドレス内のSOPビットは、アダプタが送信バッファへの書込みの着信ストリーム内でPBC値を位置特定できるようにする。
一実施形態において、PIO送信物理アドレス空間の復号化が、以下の表1に定義され、図3に示される。図3に示される実施形態において、PIO送信バッファメモリによって占有される物理アドレス空間の総量は32MBである。
Figure 2017525065
アドレスマッピングプロセスの3つの例が、図4に示される。なお、3つの例示的コンテキストは、送信バッファメモリ内で隣接しており、4KBページ上では揃っておらず、送信コンテキストにわたって共有することなくホスト仮想アドレス空間内にマッピングされ得るように、コンテキスト番号によって装置物理アドレス空間内で分離していることに、注意する。この極端な例は、PIO送信メモリ120内の送信バッファメモリに値する同じ4KB上に各々マッピングされた1つの64B送信ブロックの64個の異なる送信コンテキストを使用する、64のユーザプロセスであろう。
例として、送信コンテキスト0のアドレスマッピングを検討する。この送信コンテキストは、64ブロックすなわち4KBのユーザプロセス仮想アドレス空間を備える。コンテキストは装置物理アドレス空間のビット[23:16]で符号化され、その一方で仮想アドレスビット[11:0]が仮想−物理アドレス変換において確保される。送信コンテキストが新規パケットの開始に対応する場合にはビット24が設定(「1」)され、そうでなければビット24が解除される(「0」)ことに、さらに注意する。物理アドレス−PIO送信メモリアドレスマッピングは、アドレスのコンテキストベースビット[15:0]にコンテキストアドレスビット[24:16]を加える。さらに図示されるように、送信コンテキストのサイズは、仮想メモリ、物理メモリ、およびPIO送信メモリの各々において同じである。送信コンテキスト1および送信コンテキスト2には、類似のアドレスマッピングが採用される。
PIO送信のためのパケット充填は、ホストアドレス空間内にマッピングされた送信バッファ内へのホストプロセッサ書込みを使用する。マッピングは通常、プロセッサ書込みがHFI102へのPCIe上のポステッドライトトランザクションとして押し出される前にキャッシュ格納される代わりに、64Bプロセッサストアバッファサイズまで都合よく凝集されるように、ライトコンバイニングとして構成される。
一実施形態において、HFIアーキテクチャは、8B粒度のPIO送信書込みトランザクションを採用する。したがって、各トランザクションは8Bの倍数のサイズであり、8Bで揃えられたアドレス上で開始する。一実施形態において、各書込みは、各書込みが64B送信ブロック内に包含されることを保証するために64B境界を超えないという要件がある。したがって、一実施形態において、PIO送信は、サイズが64Bであって64Bに揃えられたPCIe書込みを採用する。
最高性能のため、ソフトウェアはアドレス昇順で送信バッファを充填し、64B転送のために最適化されることが、推奨される。一実施形態において、ソフトウェアは、PIO送信動作のために使用されるすべての送信ブロックが正確に充填されるように、64Bの倍数まで書込みシーケンスを生成するためのパディングを(適宜)採用する。このため、命令の観点から、ソフトウェアは次の64B送信ブロックへの書込みを開始して最後の64B送信ブロックまで継続する前に、1つの64B送信ブロックのすべてを書き込むべきである。プロセッサライトコンバイニング機構はこれらの書込みを並べ替えることができ、したがってHFIハードウェアはPCIe上でこの順番で到着するこれらの書込みシーケンスに依存しない。HFIハードウェアは、8Bレベルの書込みシーケンスの任意の並べ替えをサポートする。書込みシーケンスに順序を付与するために、ソフトウェアによってsfence命令が使用可能である。しかしながら、sfenceは高額な動作であるので、HFIハードウェアは、以下に記載されるようにsfenceの必要性を排除するための最適化を提供する。
各送信コンテキストは、ホストメモリ内にマッピングされた書込み専用送信バッファを提供する。先に記載されたように、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にドレインさせることを保証することにより、性能を改善する。パディングバイトは、回線に放出されるパケットに寄与しない。
一実施形態による、送信バッファのレイアウトが図5に示される。送信バッファメモリは、FIFO的セマンティックとともに使用される。FIFO順は、送信バッファマッピングで各パケットに使用される送信ブロックのアドレス順によって定義される。なお、送信バッファはラップアラウンド的に使用される(たとえば円形FIFOとして実施される)ことに、注意する。これは、一旦ソフトウェアが送信バッファの最後の64Bを書き込んだら、アドレスを更新して送信バッファのベースに戻す必要があることを、意味する。送信バッファへのこの書込みは、ホストプロセッサが、まだファブリックに放出されていない前のパケットからまだ使用中の送信バッファブロックに上書きしないことを保証するための、クレジット制限およびクレジット返信ポリシーの対象である。FIFO的セマンティックとは、
・ライトコンバイニングの実施に内在する書込みの並べ替えに対処する再構築機能があっても、パケットはFIFO順で充填される。
・パケットは引き続きFIFO順で発信する。発信後、パケットはVL調停の対象となる。
・パケットは引き続きper−VL発信FIFOから放出され、同じVLの同じコンテキストからのパケットでは順序通りとなるが、異なるVLでは同じ送信コンテキストからのパケットでも順序通りにならないだろう。
・クレジット返信は元のFIFO順である。これは、無秩序に放出されるパケットのクレジットは、その送信コンテキスト上の先のパケットがすべて既に放出されるまで回復されないことを意味する。
ライトコンバイニングマッピングは、パケットを構築するために使用される書込みをホストプロセッサが並べ替えられるようにする。従来のアプローチの下では、順序を付与するプロセッサアーキテクチャ機構はsfence命令である。これにより、sfence命令より前のすべての書込みがsfence命令後のすべての書込みに先立つHFIから見えるようになることを保証する。しかしながら、この順序付けは、ホストプロセッサ内でストアを発行するCPUコアから統合入出力ブロック(IIO;Integrated Input−Output)内の順序付けポイントまでの往復を要するので、著しいコストを伴う。これは著しい遅延を加え、またsfence順序付けが確認されるまでその他すべてのストアがCPUコア内で完了するのを妨げる。CPUのアウトオブオーダー能力は、命令による何らかの前進がこの遅延をカバーできるようにするが、しかしこれらのリソースはすぐに尽きる可能性があり、回復すべき生きている命令の重要なバックログが生じる。HFIアーキテクチャは、sfence命令がライトコンバイニングシーケンスを順序付ける必要性を最小化または排除しようとする。
第一の最適化は、パケット内のsfenceの排除である。ここで1つのパケットのPIO送信動作を備える書込みはプロセッサによって並べ替えられることが可能であり、HFIは正しい順序を再構築し、パケット充填が完了してパケットが発信されるようにすべての書込みが到着したときを検出する機構を提供する。この最適化は、パケット内の送信ブロックの数についてさらなる利益を提供する。第二の最適化は、パケット間のsfenceの排除であり、これはHFIが、インターリーブされた書込みを異なるパケットPIO送信からそれぞれのパケットに再構築することを必要とする。この最適化は、単一の64B送信ブロックに適合するパケットの一般的な例など、短いパケットにとって非常に重要である。HFIによって提供される機構は、両方の最適化をカバーする。
HFIは、アドレスを復号化することによっていずれのPIO送信書込みの正確なデータ配置も決定する。コンテキストはより高次のアドレスビットで利用可能であり、これは、送信コンテキストがベースの使用へのアクセスを有する送信バッファ部分を決定し、既に記載された再マッピングとの境界を示す。アドレスの最も低い16ビットは、その送信バッファ内の書込み済みデータの配置を決定する。このアプローチは、これらの書込みが8B粒度に並べ替え/分割/統合したとしても、8B粒度の書込みが送信バッファメモリのパケットにいつも正しく再構築されることを保証する。
図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に示され、以下に記載される。
一実施形態において、メモリ106およびL2キャッシュ602の各々は64バイトのキャッシュラインを採用し、その一方でストアバッファ608は64バイトのストアブロックを採用する。さらに図示されるように、一実施形態においてデータは、「mov」命令を用いて64ビット(8バイト)単位でCPU600内の64bレジスタからストアバッファ608に書き込まれる。簡潔さのため、mov命令は、本明細書の図中において「mov.q」と記される。
選択的に、データは16Bおよび32Bなどその他のサイズを有するストアユニットを用いてストアバッファ608に書き込まれてもよい。以下により詳細に記載されるように、一実施形態において、64Bのデータを64Bのストアブロックに書き込むために512ビット書込み命令が使用されるが、各64B書込みは1つのストアブロックを充填する。
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内の対応するメモリマップアドレスを有する。
各パケット614は、PBCフィールド、様々なヘッダフィールド(簡潔さのため組み合わせて図示される)、PSM(Performance Scale Messaging)ヘッダおよびPSMデータ、ならびにICRC(不変CRC)フィールドを含む、複数のヘッダフィールドを含む。図示されるように、パケット614の最小サイズは64Bであり、これはストアバッファ608内のストアブロックサイズと一致し、送信コンテキストFIFOの各スロットに使用される64B送信ブロックサイズと一致する。
実行中の動作の間、PIO送信メモリ120内の送信コンテキストにメモリ106内のパケットデータのコピーが書き込まれるようにするため、CPU600のコア上でソフトウェア命令が実行される。
まず、対応する命令とともにパケットデータがメモリ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において、ストアブロック616は満杯であるとして検出され、その結果ストアブロック616は、送信コンテキスト1のために割り当てられたPIO送信メモリ120の送信バッファ内の送信ブロック618へ、64BのPCIeポステッドライトを介してドレインされる。同様に、続く時間Tにおいて、ストアバッファ608内のストアブロック620は満杯であるとして検出され、その結果ストアブロック620は、PIO送信メモリ120の送信ブロック622へ、第二の64BのPCIeポステッドライトを介してドレインされる。丸で囲まれた「1」および「2」の使用は、本明細書の図6bおよびその他の図においてPCIeポステッドライトが発生する順番を示すためのものである。64Bストアブロックのドレインと併せて、その格納空間は再利用のためフリーにされる。一実施形態において、ストアバッファ608は、書込みに利用可能なフリーのストアブロック(64B境界上の8つの連続する8Bブロック)をプロセッサコアが識別できるようにするためにプロセッサ(またはプロセッサコア)から見えるようになっている、ストアブロック使用情報を含む。加えて、本明細書の図の例において、ストアブロックは順次充填されるものとして示されてもよい。しかしながら、データを格納するために使用される特定のストアブロックはデータが書き込まれるPIO送信メモリアドレスとは無関係となる、ランダムアクセスを用いてストアバッファが動作する場合があるので、これはデータの移動の表示を簡素化するためのものである。
図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は、これらの送信コンテキストが別のプロセッサコア上で起動しているソフトウェアによって使用されていることを示すために、異なるクロスハッチパターンで示されている。
一般的に、マルチコアCPUにおいて、様々なタスクおよびサービスに対応する命令スレッドは、プロセッサコアに割り当てられてその間に分散している。一実施形態の下で、PIO送信バッファ120は、これらの命令スレッドの一部を備える構成要素、モジュールなどを含むソフトウェアアプリケーションの間で共有される。これらの命令スレッドは、別のコア上で実行中の命令スレッドに対して非同期で実行され、このため複数のソフトウェアアプリケーションは、コアごとにPIO送信バッファ内の送信コンテキストに非同期で追加されているパケットデータを生成するため、並行して実施されてもよい。
したがって、各コアはmovなどの単一の命令しか同時に実行できないが、複数の命令スレッドが並行して実行されており、その結果、図示されない送信コンテキストのみならず送信コンテキスト3および4など、その他の送信コンテキストに採用されている図7aから図7fに示されるものへの類似のデータ転送が行われる。これらの共起的で非同期のデータ転送をサポートするため、具体的なプロセッサアーキテクチャに応じて、ストアバッファが複数のコアの間で共有されるように構成されてもよく、あるいはプライベートなストアバッファが各コアに割り当てられてもよい。
図7aは、最初の64Bストアブロック700に対応する8つすべての8Bストアユニットにデータが追加されている、最初の時間枠Tに対応し、その結果、送信コンテキスト1の3つ目のFIFOスロットで64バイトのデータが送信ブロックに書き込まれる。データが書き込まれる送信ブロックは、図4に示され上記で論じられたような、PIO書込み命令および仮想−物理−PIO送信メモリアドレス変換に基づくその送信ブロックのメモリマップアドレスに基づくことになる。この送信ブロックは、(該当すればパディングを含む)ブロックj個分の長さの充填サイズを有するパケット内の、最初のブロックに対応する。先に論じられたように、PBCヘッダは、4Bの倍数のパケット長を規定するPbcLengthDWsフィールドを含む。送信コンテキスト内のパケットによって占有される空間の量(パケットの充填サイズ)はn個の64Bブロック(およびひいてはn個のFIFOスロット)を備え、ここでnは、PbcLengthDWsフィールド値を次の64Bの倍数に切り上げることによって決定される。図7aに示される例において、j=nであり、PbcLengthDWsフィールド値によって決定される通りである。
パケットの充填サイズの決定に関連して、PIO送信メモリ120の送信コンテキスト内へのパケットデータ全体(フルパケット)の転送を完了するためにパケットデータが追加される最後の送信ブロックを識別するための制御情報が生成される;本明細書の図中、まだ受信されていないパケットデータの一部を格納するために使用されるものとして識別される送信ブロックは、「充填予定(To Fill)」(充填対象を意味する)と記される。蓄積転送の実施下で、パケット内容全体がPIO送信メモリ120内に格納されるまで、パケット用のデータは放出ブロック126に転送されることは不可能である。PIO送信ブロック放出制御情報は、(最後の送信ブロックを充填するためのいずれか適用可能なパディングを含む)パケットの内容全体がPIO送信メモリ120に書き込まれてしまったときを検出する伝送エンジン(図示せず)内の論理において実施されるフルパケット検出機構によって、使用される。一実施形態において、このフルパケット検出機構は、対応するFIFOスロット内の送信ブロックが充填されるときを追跡し、制御情報は、各パケットの開始および終了FIFOスロットのアドレス(または送信ブロック番号またはFIFOスロット番号など、その抽出)を備える。一般的に、アドレスはPIO送信メモリ120のベースアドレスに対するもの、またはFIFOバッファに関連付けられた送信コンテキストのベースアドレスに対するものである。
図7aから図7fにおいて、それぞれのパケットのmov命令が、Pa−bのラベル付けスキームを用いてパケットごとにグループ分けされて示されており、ここでaは送信コンテキストに対応し、bはパケットが送信コンテキストに追加された元の順番に対応する。このラベル付けスキームの使用は、パケットデータが送信コンテキストにどのように書き込まれるかをより良く説明するための説明目的のためであり、データがPIO送信バッファ120に書き込まれる実際の位置が、先に論じられたように、アドレス変換スキームと組み合わせたPIO書込み命令に基づくようになることは、理解されるだろう。
mov命令はパケットごとに処理されるように示されているものの、これらの命令の順序は、mov命令がコアの実行パイプラインに到着する順序に対応する。しかしながら、アウトオブオーダー実行をサポートするプロセッサは、命令が到着する順序とは異なる順序で命令を実行してもよい。いくつかの従来アプローチの下では、アウトオブオーダー実行は、パケット内のmov命令には許可されるが、パケットをまたいでは許可されない。これは、SFENCE命令後のいずれの格納命令の前でもSFENCE命令に先立つすべての格納(たとえば、この例ではmov)命令がどこからも見える、SFENCEすなわちsfence(ストアフェンス、図中SFenceとも表される)命令の使用を通じて促進される。その結果、従来のアプローチの下では、SFENCEに続くmov命令で参照されるパケットデータは、処理パケットのデータのすべてがストアバッファに書き込まれてしまうまで、ストアバッファに書き込まれることは不可能である。この論理を補強するため、命令の実行が中断させられてもよく、その結果としてパケット転送性能が低下する。加えて、同じようにパケット内の書込み順を強化するためにSFENCE命令が使用されてもよい。sfenceありおよびなしのPIO書込みを比較する図は、図9aおよび図9bに示されており、以下に論じられる。
本明細書に開示される実施形態の態様によれば、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を示している。本明細書の図中、64BのPCIeポステッドライトの順序は、丸で囲まれた番号で示されている。便宜上、64BのPCIeポステッドライトのグループのデータ転送は、図7aの番号「2」など、単一の丸付き番号で示されている。
この第二の時間枠の間、(この例ではパディングを備える)ストアブロック704の残り2つのストアユニットに対応するデータがパケットP1−1に追加され、ストアブロック704からのデータは64BのPCIeポステッドライトを介して送信コンテキスト1に書き込まれ、これによりPIO送信メモリへのフルパケットデータの書込みを完了する。これによりパケット完了状態となり、図10および図11に示され、後にさらに詳細に記載されるように、この時点でパケットは、パケット発信調停の準備が整っている。加えて、時間枠Tの間、ストアブロック706、708、および710の各々にデータが書き込まれてストアブロック706および708を満たし、その一方で、ストアブロック708の最後のストアユニットを充填するためのmov命令は、図示されるようにアウトオブオーダー実行を介して一時的にスキップされる。図示されるように、PBCヘッダのPbcLengthDWs値は、パケット充填サイズが3つの64B送信ブロックとなることを示している。ストアブロック706および710の各々を充填すると、これらのストアブロックはドレインされて、対応するデータは64BのPCIeポステッドライトを介してPIO送信メモリ120内の送信コンテキスト1に書き込まれ、その結果、パケットP1−2の最後の64Bブロックが中間送信ブロックに先立って書き込まれる。
混乱を低減するため、各mov命令またはmov命令のセットの結果を示す矢印のうちいくつかは図7cから図7fに含まれていない;むしろ含まれている矢印は、新しいストアバッファブロックへの最初の書込み、および書き込まれている最後のブロックのみを示す。図7cに示されるように、第三の時間枠Tの間、パケットP1−2の残りのデータがストアブロック708に書き込まれ、その結果このストアブロックデータはドレインされて、PIO送信メモリ120内のパケットP1−2の中間送信ブロックに書き込まれる。これによりPIO送信メモリへのパケットP1−2の転送が完了し、こうしてパケットP1−2は発信調停の準備が整う。加えて、送信コンテキスト2に追加される最初のパケットに対応するデータ(2つの64B送信ブロックの充填サイズおよび長さを有する、パケットP2−1)がストアブロック712および714に書き込まれ始め、その一方で送信コンテキスト1の第三のパケットP1−3のデータはアウトオブオーダー実行を用いてストアブロック716に書き込まれ始める。
図7dは、時間枠Tの間のデータ転送の状態を示す。この時間枠の間、パケット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に追加されている。パケット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順でその送信ブロックについて放出される。これは、同じ送信コンテキストの送信バッファの先のパケットのパケットデータ後にそのデータが追加されるパケットが、先のパケットに先立って放出のために選択され、こうしてパケットが送信コンテキスト内に充填されるアウトオブオーダーで放出される例を示す。
図7eは、時間枠Tの間の転送の状態を示す。パケット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もまた充填されるよう標識されて発信調停の準備が整う。
この例において追加される最後のパケットは、パケット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順で放出される。
図示される実施形態において、パケットP2−3の最後のmov.q命令に続いてSFENCE命令が追加される。これは、そのいずれかがフラッシュされる前にパケットP2−3のデータのすべてがストアブロック728、730、および732に書き込まれることを保証するためである。続くパケットのための書込み命令が命令スレッド内でただちに続く場合には、命令が各々該当するストアブロックを充填し、その結果としてストアブロックはフラッシュされる前にドレインされるので、SFENCE命令の使用は必要とされない。
上記に加えて、時間枠Tの間、パケットP1−2およびパケットP2−1の各々は完全に放出されており、その対応する送信ブロックはクリアになっている(時間枠Tの早い時期の間にパケットP2−1もまた放出のために選択されることに注意)。図11および図14を参照して後に記載されるように、送信ブロック状態がクリアになっているとき、クリア送信ブロックに対応する送信コンテキストのクレジットは、クリア状態に到達していない低FIFOスロットを占有する送信ブロックがない場合に返信される。この例において、この条件は送信コンテキスト2には当てはまるが、パケットP1−1はまだ放出中であってクリア状態に到達していないので、送信コンテキスト1には当てはまらない。その結果、送信コンテキスト2には2つのクレジットが返信され、その一方で送信コンテキスト1にはこの時点でクレジットが返信されない。以下に詳述されるように、一実施形態において、11ビットのランニングカウントを備える絶対クレジット値が返信される;図7eの例では、パケットP2−1がクリアになる前には送信コンテキスト2のランニングカウントは0であったと推測されるので、返信されたランニングカウント絶対クレジット値は2である。
図7fは、時間枠Tの間の転送の状態を示す。この時間枠の間、パケットP1−3およびP2−2が放出し始め、その一方でパケットP1−1は放出を完了し、その送信ブロックはクリアにされる。この時点で、両方のパケットP1−1およびP1−2のクレジットが送信コンテキスト1について返信され、合計j+3クレジットとなり、ここでランニングカウンタ値は、送信コンテキスト1について返信された最後のクレジットに対してj+3だけ増加していることになる。図示される例において、前のランニングカウントは2であり(送信コンテキスト1の最初の2つの空のFIFOスロットに対応する)、このため返信されたランニングカウント絶対クレジット値は2+j+3である。加えて、時間枠Tの間に送信されたパケットP2−1の送信ブロックの2つのクレジットが受信および処理されており、対応するFIFOスロットはフリーとして標識される。
一実施形態によれば、単一の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ビット書込みをサポートするその他の既存のおよび将来のプロセッサもまた使用可能であるので、これに限定するものではないことに注意する。
図8aから図8eは、どのようにしてパケットデータがPIO送信メモリ120に追加され、ストアブロックへの512ビット書込みを用いて引き続き放出されるかを示す、例示的な時間経過シーケンスを示す。この例において、各パケットの書込み命令のシーケンスは、512ビットのデータを示すmov512.q命令がCPU600a内の512bレジスタから移動させられるものとして示されている。512bmovが実行される際に、命令の数は8Bmovを使用するよりもはるかに少ない。以前のように、SFENCEは、従来のアプローチではSFENCE命令が配置されるはずの場所を示すために、「X」で示されている。
図8aには、時間枠Tの間に実行される動作が示されている。加えて、パケットP1−1、P1−2、P2−1、P1−3、P2−2、およびP1−4のシーケンスのmov512.q命令は、受信されたものとして示されている;しかしながら、これらの命令のうちのいくつかは時間枠Tの間には受信されず、むしろデータがストアバッファ608に書き込まれているものとして示されるときに近い後の時間枠の間に受信されるので、これは命令のストリームを示すためのものではない。説明および比較目的のため、送信ブロックのいくつかが書き込まれる順序はこれら2つの例の間で異なるものの、図7aから図7fと図8aから図8eとで同じパケットシーケンスが示される。
時間枠Tの間、パケット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つ分であると判断される。
時間枠Tの間、図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の最初の送信ブロックに対応すると判断するように構成される可能性があるが、しかしこれは、最初に到着する送信ブロックを待つのに比べて本当に利益を提供するわけではない。
図8cに示される時間枠Tの間、最初の送信ブロックを書き込むための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の放出は処理中である。
図8dに示される時間枠Tの間、パケット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の各々は放出のために選択されており、これらのパケットの対応する送信ブロック内のパケットデータは現在放出中である。
先に論じられたように、時間枠Tの間、パケットP1−1のパケットデータが放出され始める。時間枠Tの間に放出は完了し、送信ブロックはクリアとして標識される。上記で論じられた実施形態によれば、2+jクレジットの絶対クレジット返信カウントがこの時点で返信されるはずである(図示されない送信コンテキスト1の以前の全パケットのクレジットは先に返信されていると想定する)。しかしながら、クレジット返信機構の議論で下記に説明されるように、いくつかの実施形態において、クレジットは複数のパケットにわたって凝集され、最後のクレジット返信には到達していないので、クレジットの閾値までは返信されない。この例において、閾値にはまだ到達しておらず、その結果、この時点で返信されたクレジットはない。図8eに示される時間枠Tの間、パケットP1−2およびP2−1の各々は放出を完了しており、クリアとして標識されているが、その一方でパケットP2−2は放出のために選択されており、放出を開始している。凝集されたクレジット返信は、一部の送信コンテキストのために採用されてもよいがその他のものには採用されないように、送信コンテキストごとに構成されてもよい。加えて、凝集クレジット閾値も送信コンテキストごとに構成されてもよい。したがって、この例において、送信コンテキスト1の凝集クレジット閾値に到達しており、このため2+j+3のランニング返信クレジットカウント値がクレジット返信ブロック127を介して返信される。加えて、送信コンテキスト2は凝集クレジット閾値を採用しておらず、このため2クレジットのランニング返信クレジットカウント値が返信される。一実施形態において、複数の送信コンテキストのランニングクレジットカウント値は、単一のDMA書込みにおいてPCIe上でメモリまで送信可能である。
図9aおよび図9bは、それぞれSFENCE命令ありおよびなしで64BのPCIeポステッドライトを用いるパケットデータの転送に対応するデータフロータイムラインを示す。プロセッサコアの一部であるストアバッファ608からドレインされると、これはまず、図6aおよび図6bに示されるように、IIO610に転送される。本明細書において論じられるPCIeポステッドライト要求に加えてその他のIO要求も扱う必要があるので、IIOにはいくつかの追加遅延がある。とりわけ、IIOは各sfence命令のsfence確認(ack;Acknowledgement)を返信する。これにより、アウトオブオーダー命令がsfenceにわたって実行されるのを防止するが、その結果sfenceに先立つパケットのすべての命令が実行されるまで遅延する可能性がある。sfenceの使用を排除する本明細書の実施形態の下で、これら潜在的な遅延の発生は防止されており、PIO送信ブロック書込み効率を最適化する。
図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を、さらに含む。
放出ブロック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にパケットを提示する。
一実施形態において、伝送エンジン108は、8つのデータVLおよび1つの管理VLをサポートする。しかしながら、これは単なる例示に過ぎず、非限定的である。PBCヘッダ内のVLフィールドを用いてパケットが構築されたときに、パケットはソフトウェアによって仮想レーン(VL)に割り当てられる。
一実施形態において、PIO送信を用いて送信コンテキストに送信されたパケットは、送信コンテキストの送信バッファ内へのこれらパケットの配置によって定義される順序で発信される。これは「オリジナルプログラム順(original program order)」と称される。本質的にこれは、プロセッサのライトコンバイニング機能によって提供される緩い順序付けセマンティックを用いるときでさえ、プログラムの元のパケット順を再構築するために送信バッファの充填において柔軟性があるとはいえ、送信バッファがFIFOとして振る舞うことを意味する。この順序付け議論の目的のため、要点は、ソフトウェアが送信コンテキスト上のパケット順を選択し、送信コンテキストはパケット発信を通じてこのパケット順を維持するということである。
一旦完成パケットが送信バッファ内に充填されると、PIO送信またはSDMAのいずれかにより、パケットは伝送エンジンによって発信可能となる。送信バッファからのパケットの発信は、パケットをper−VL FIFO上に配置する。同じVLを有するパケットの発信順は、そのVLを有するパケットがリンクに放出される順序を規定する。per−VL FIFOのヘッドにおけるパケットが選択される順序は、VL調停アルゴリズムによって決定される。
なお、ソフトウェアは1つの送信コンテキスト上のPIO送信によって異なるVLを有するパケットを送信できることに、注意する。同様に、1つのSDMA待ち行列上のSDMAによって異なるVLを有するパケットを送信することもできる。実施は、パケットが異なるVL上にあったとしても、送信コンテキストまたはSDMA待ち行列を通じて発信ポイントまでパケット順を維持することになる。しかしながら、発信を超えるとper−VL発信FIFOのため保証される順序はなくなり、リンクへの実際の放出順はVL調停の詳細に依存することになる。
一実施形態の下で、同じVLを用いて伝送される同じ送信コンテキストのパケットは、オリジナルプログラム順で放出される。他方、異なるVLを用いて伝送されるパケットは、異なるVL上で伝送される場合には後に書き込まれるパケットが先に書き込まれたパケットを続行させられるように、アウトオブオーダーで放出されてもよい。
一実施形態において、HFIは、上記の定義された順序を超えた発信順に保証を提供しない。たとえば、いずれかのSDMA待ち行列上のパケットの発信順は、その他いずれかのSDMA待ち行列上のパケットに対して、またはPIO送信を用いて送信されるいずれかのパケットに対して、HFIによって順序付けされていない。加えて、いずれかの送信コンテキスト上のパケットの発信順は、その他いずれかの送信コンテキスト上のパケットに対して、またはSDMAを用いて送信されるいずれかのパケットに対して、HFIによって順序付けされていない。
図11は、HFIに結合されたファブリックリンク上のアウトバウンド放出のためにパケットデータを準備する際に実施される動作、段階、および状態を示すフローチャートである。パケット充填段階1102の間、送信メモリは、PIO送信またはSDMA機構のいずれかを介してパケットデータで充填されている。パケット完了状態1104は、パケットデータのすべてが送信メモリ内に格納されたときに発生する。この時点で、パケット充填は完了しており、パケットは発信可能である。パケット発信1106は、パケットが送信メモリからper−VL発信FIFO上に発信される時点である。この段階の間、パケットデータはまだ送信バッファ状態を占有しているが、しかし発信時にパケットはもう放出準備が整っており、この同じVL上のその他のパケットに対するその順序は確立されている。
パケットVL調停1108の間、per−VL発信FIFOのヘッドにあるパケットはその間で調停され、1つがリンクに放出されるようにVL調停アルゴリズムによって選択される。パケット放出1110の間、VL調停を介して選択されたパケットのパケットデータが送信メモリ(該当すれば、PIO送信メモリ120またはSDMAメモリ124)から読み取られ、パケットデータが有効か否かを判断するためにパケット整合性チェックがブロック1012で実行される。整合性チェックに合格しなかったパケットは落とされ、その一方で良品パケットはリンクに放出されるが、これは必要であればHCRCおよびICRCの挿入、および放出FIFO 1016内のバッファリングを含んでもよい。
次の状態は、パケットクリア1112である。この状態は、パケットが送信バッファをクリアにして送信バッファが再利用に入手可能となったときに、発生する。したがって、返信クレジットブロック1114において、送信バッファの1つ以上のクレジットがクレジット返信機構127を介して返信され、クリア送信ブロックは新しいパケットデータで充填されるために利用可能となる。しかしながら、パケット全体がリンクに放出されてしまう前にいくつかの送信ブロックが再利用され得るように、実施によってクレジット返信および送信バッファ再利用を送信ブロックレベルにまで最適化できることに、注意する。これは、送信バッファリソースが限られている重要な実施となり得る。加えて、上記で説明されたように、送信ブロックはクリアにされたものの、クリアになったFIFO内でその下にその他の送信ブロックがある場合、そのブロックのクレジットは、これらのブロックもまたクリアにされるまで返信されない。
クレジット返信機構
送信バッファをクリアにする先のパケットの前に送信バッファブロックがソフトウェアによって上書きされないことを保証するために、PIO送信機構はクレジット返信機構を使用する。一実施形態において、送信クレジットは64Bの粒度であり、1つの送信クレジットは1つの(64B)送信ブロックに対応する。送信コンテキスト用の送信クレジットは順序通りに返信され、ソフトウェアは送信バッファメモリをラップアラウンドFIFOのやり方で使用する。HFIが送信クレジットの損失を伴わずにより最新の値でいつでもクレジット返信情報を上書きできるように、送信クレジット会計は絶対数を用いる。クレジット返信はまた状態情報も提供し、これは連続するクレジット返信書込みによって上書きされる。エラーに遭遇すると、クレジット返信はエラー表示で強制的に設定され、送信コンテキストはエラー状態に置かれて、さらなるクレジット返信書込みは送信コンテキストがホストシステムソフトウェアによってエラー状態から回復させられるまでスケジューリングされない。これにより、クレジット返信位置におけるエラー表示が観察されて、上書きの危険性を伴わずにホストソフトウェアによって適切に対処されることを、保証する。
簡単に言うと、クレジット追跡は、消費されたクレジットの数のランニングカウントおよびフリーになったクレジットの数のランニングカウントを維持することによって達成される。すると、現在占有されているクレジットの数は、これらのカウントの間の差分となる。上述のように、これらはクレジットが消費またはフリーになったとき適切に単純増加する、絶対カウンタである。
初期化の後、送信バッファは空になり、そのバッファ用のすべての送信クレジットはソフトウェアによって利用可能となる。一実施形態において、送信コンテキストに割り当て可能な送信クレジットの最大数は1024であり、送信バッファの64KB最大サイズに対応する。一実施形態において、クレジット情報を追跡するために11ビットカウンタが使用される。このアプローチは、カウンタがフルの1024値だけ異なる値となれるように、1つ余分なビットを使用する。これにより、0クレジットが利用可能であって1024クレジットが利用可能であるケースの曖昧さも解消される。カウンタ数学は、法2048で実行される。たとえば、11ビットカウンタの前進および11ビットカウンタ間の差は、法2048で実行される。
より詳細には、ソフトウェアおよびハードウェアはいずれも、クレジット使用を追跡するために送信コンテキストごとに11ビットカウンタを維持する。ソフトウェアカウンタは、フィルカウンタと称される。ハードウェアカウンタは、フリーカウンタと称される。ソフトウェアがクレジット返信の視認性を有するように、ハードウェアDMAはそのカウンタ値を適切な間隔で、ホストメモリ内に保持されるシャドウフリーカウンタへ。最初に、両方のカウンタは0であり、使用中の送信クレジットはない。使用済みクレジットの数は、法2048で、フィルカウンタからフリーカウンタを減じたものとして計算される。すると利用可能なクレジットの数は、送信コンテキスト内のクレジットの総数から使用済みクレジットの数を減じたものとなる。両方のカウンタが同じ値を有するとき、コンテキストは空であり、その送信クレジットはすべてソフトウェアが充填するために利用可能である。ソフトウェアは、送信ブロックを送信コンテキストに書き込む前に、利用可能なクレジットをチェックする。ソフトウェアが送信ブロックを充填する際に、ソフトウェアが現在どの程度クレジットを使用したかを示すために、法2048でそのフィルカウンタを増分する。ソフトウェアが利用可能なクレジットを有していないとき、クレジットがフリーになるまで待機する。ソフトウェアは、クレジットがフリーになったときを判断するために、ホストメモリ内のシャドウフリーカウンタを監視することができる。
クレジット追跡の抽象モデルに対応する擬似コードが、以下に示される。
擬似コードリスト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が使用されるとき、送信ブロックの放出はアウトオブオーダーであってもよい。この状況を解決するために、順序通りのクレジット返信が提供可能となるように、アウトオブオーダー放出を追跡するためのハードウェア状態が採用される。この最も古い送信ブロックのカウンタからフリーカウンタのハードウェアコピーを減じた差分は、まだソフトウェアに返信されていない保留のフリークレジットの数である。この値が閾値と一致またはこれを超過するとき、この送信コンテキストのための送信クレジット返信が開始される。
このクレジット返信アプローチは、ハードウェアの中にある閾値にクレジットを任せ、すべてのクレジットが返信され得ると保証する方法を提供するものではない。これは、いずれか特定の送信が送信バッファをクリアにしたことを識別するためには問題である。これを解決するために提供される方法は、いくつかある:
・多くの場合、ホストソフトウェアは、クレジット返信閾値機構を使用することができ、特定のPIO送信が送信バッファをクリアにしたか否かを問題にしない。
・ホストは、SendCtxtCreditStatusレジスタを用いてアダプタレジスタから送信コンテキスト用の現在のクレジット値を読み取ることができる。
・ホストは、クレジット返信を送信コンテキスト向けに強制的にスケジュールさせるために、SendCtxtCreditForceレジスタに書き込むことができる。
・PbcCreditReturnと称されるPBCビットを介して特定のPIO送信用のクレジット返信をホストが要求できるようにする。
加えて、ホストソフトウェアは、クレジットが特定の送信コンテキスト上で返信されたとき、中断を手配することができる。
いくつかの実施形態において、パケットが放出するように確約されるとすぐに、しかしパケットが実際に送信バッファをクリアにしてしまう前に、クレジットをより積極的にホストに返信させる、早期クレジット返信機構が実現されてもよい。これにより、クレジット返信遅延を最適化して送信バッファリング要件を減少させるために、ホストは次のパケットに取りかかることができる。考え方としては、放出がその前の占有者用の送信バッファをドレインしている間に、ホストが次のパケットの充填を開始できることである。前のパケットが上書きされ得ないことを保証するためにハードウェアインターロックが採用され、また、前のパケットがファブリックワイヤ速度でドレインされるように、レートマッチング放出FIFOも実施される。この機構は、実施問題の場合に、コンテキストごとに無効化されることが可能である。これは、コンテキストごとの送信クレジットが低いとき(たとえば、多数のコンテキストおよびさらに大きいMTUサイズを使用するとき)、性能の向上にとって重要な最適化である。
早期クレジット返信を有効化または無効化するために、送信コンテキストごとの構成ビット(SendCtxtCreditCtrl.EarlyReturn)が提供される。有効化されると、個々の送信ブロックはハードウェアによって早期に(すなわち、その送信ブロックをクリアにするパケットの放出に先立って)フリーにされることが可能であり、これら早期にフリーになったクレジットは通常のクレジット返信アルゴリズムを用いて返信される。クレジット返信閾値機構はまだ適用されている。
なお、ソフトウェアは、送信したいパケット用の送信コンテキストに割り当てられたクレジットが十分にあることを保証するためのものであることに、注意する。特定のパケット用の送信コンテキストに割り当てられたクレジットが十分にない場合には、パケットを発信するために利用できる十分なクレジットには決してならない。アプローチの1つは、送信コンテキストに割り当てられた送信ブロックの数に基づいてソフトウェアがパケットサイズを制限することである。この計算は、コンテキスト用のクレジット閾値までのクレジットがハードウェアの中にあり、将来の送信ブロックが放出されるまで自動的に返信されないということを、考慮すべきである。
一実施形態において、送信クレジット返信は、64Bキャッシュライン整列アドレスへのホストメモリへの64B書込みとして実施される。この理由は、これらの動作はさらなる遅延を追加し、ホストメモリへのアクセスのパイプラインに影響を及ぼす可能性があるので、IIOからのメモリ上での読み出し・修正・書込み動作を回避するためである。しかしながらこれは、クレジット返信が付加的なPCIe帯域幅を消費することを意味する。これは送信クレジット返信集合によって緩和されるものの、可能であればこれをさらに低減することが望ましい。一実施形態において、これは以下に記載されるように、送信コンテキストグループにわたる凝集クレジットの使用を介して促進される。
一実施形態において、各11ビットクレジット返信値は、コンテキスト状態と組み合わせられ、64ビット値にするために確保されたビットが詰め込まれる。一実施形態において、64ビット値は、グループクレジット返信のための64B書込みに詰め込まれるクレジット返信を、最大8つまでサポートする。
クレジット返信オーバーヘッドを削減する1つの技術は、送信コンテキストグループにわたってクレジット返信を凝集することである。考え方としては、送信コンテキストはグループにまとめられることが可能であり、その後ホストメモリへの単一の64B書込みを用いてコンテキストのグループ用のクレジット返信が実行されるということである。一実施形態において、160個の送信コンテキストは、8つの連続する送信コンテキストのセットに凝集され、合計20セットできる。しかしながら、送信コンテキストのその他の凝集が使用されてもよい。
8つの送信コンテキストのセットサイズにより、セットごとに独立したグループ化を特定する能力を有する20個の異なるセットが可能になる。セット数Sは、送信コンテキスト8Sから8S+7までを包含する。一実施形態のセットマッピングが、表2に示される。20セットを選択すると、40、80、および160個の送信コンテキストの典型的な構成における妥当な柔軟性が付与される。より少ない数の送信コンテキストでの構成においては、ソフトウェアは、必要とされるグループ化に応じてどの送信コンテキストを使用するか選択するときの、さらなる柔軟性を得る。各セットは、表3に示される構成となるように、独立して構成されることが可能である。
Figure 2017525065
Figure 2017525065
最小値0では、セットはグループごとに1個の送信コンテキストで8つのグループを有する(すなわち、実際のグループ化はない)。そのセット内のいずれの送信コンテキストも独立したクレジット返信を有することになるので、これにより完全な柔軟性を与える。最大値の3であれば、セットは8つすべての送信コンテキストを包含する1グループを有し、クレジット返信は8つすべての送信コンテキストのために凝集される。したがって、そのセットのクレジット返信のために使用されるホストメモリページは、これら8つの送信コンテキストによって共有される。なお、ソフトウェアはクレジット返信位置に書込みをしないので、そのページの読み取り専用マッピングのみが必要とされることに、注意する。最大グループサイズ8は、これら8つの送信コンテキストのクレジット返信アルゴリズムが互いにどのように相互作用するかに応じて、クレジット返信帯域幅を最大8倍まで減少させる。
各送信コンテキストは、その送信コンテキスト用のクレジット返信に使用されるホスト物理アドレスおよびTPH情報を規定する、SendCtxtCreditReturnAddrレジスタを有する。送信コンテキストグループ化が用いられるとき、クレジット返信は、クレジット返信をトリガしたコンテキストに属するSendCtxtCreditReturnAddrレジスタを使用する。一実施形態において、同じアドレスを有するグループ内のすべてのコンテキストのSendCtxtCreditReturnAddrレジスタをプログラムするために、ソフトウェアが使用される。
特定の送信コンテキスト(Nで表す)によってクレジット返信が開始されるとき、送信コンテキストは、送信コンテキスト番号を3つ右シフトすることによってセット数(S)にマッピングされる。セット数は、セットごと構成状態を調べるために使用され、表3の左端の列に示されるように値Bを付与する。Bは、同じグループ内の送信コンテキストを区別する送信コンテキスト番号の、最も重要ではないビットの番号である。そのグループ内の送信コンテキストの数はGであって1<<Bに等しく、表3の右端の列の値を取る。このセットで最も小さい送信コンテキスト番号はMと呼ばれて値(N>>B)<<Bを有し、これは最も重要ではないBビットがクリアされたNの値である。
一実施形態において、クレジット返信は以下のように実現される。クレジット返信は、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の値で満たされる。
クレジット返信値のすべての組み合わせは、表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つすべての位置が使用される。
Figure 2017525065
クレジットが送信コンテキストグループのために返信されると、グループ内の各送信コンテキスト用のフリーカウンタは、ホストメモリ内に保持されるシャドウコピーに転送されたDMAであるクレジットカウンタ値に更新される。このアプローチは、ある送信コンテキストがその閾値に基づいてグループのクレジット返信をトリガしたときに、そのクレジット返信は最大可能な限りそのグループ内のその他すべての送信コンテキストに提供されることを、意味する。このアプローチは、送信ブロック放出がグループのメンバー全体に対して妥当にインターリーブされることを前提として、全体的にグループの送信クレジット更新の頻度を減少させる。なお、閾値は、この機構を有効にするためには最大パケット内の送信ブロックの数よりも大きくなければならないことに、注意する。
図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と、を含む。
Tx PHY回路および論理1314は、4つの送信器1316およびTxリンク制御ブロック1317の一部を含む簡素化された形態で示されている。一般的に、送信器1316は、リンクのPHY層構成に応じて、電気または光学送信器を備えることができる。Tx PHY回路および論理ブロックは、明確さのため図示されない伝送側PHY層動作を実施するための追加回路および論理を含むことは、ネットワーク分野の当業者によって理解されるだろう。これは、エラーを低減して転送特性を強化するために、高速相互接続と併せて実施される様々な機能を促進するために使用される、PHY層の中の様々な副層を含む。
Rx PHY回路および論理1322は、4つの受信器1324およびRxリンク制御ブロック1325の一部を含む簡素化された形態で示されている。一般的に、受信器1324は、リンクのPHY層構成に応じて、電気または光学送信器を備えることができ、送信器1316からのリンクを通じて送信された信号を受信するように構成される。Rx PHY回路および論理ブロックは、明確さのため図示されない受信側PHY層動作を実施するための追加回路および論理を含むことは、ネットワーク分野の当業者によって理解されるだろう。これは、エラーを低減して転送特性を強化するために、高速相互接続と併せて実施される様々な機能を促進するために使用される、PHY層の中の様々な副層を含む。
HFI 1302は、PCIeインタフェース118に結合された伝送エンジン108および受信エンジン114を、さらに含む。伝送エンジン108および受信エンジン114の各々は、上述のような、図1の伝送エンジン108および受信エンジン114と類似のやり方で、構成されている。
プロセッサ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に結合されている。
図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内に実装された追加ソフトウェアコンポーネントおよびバッファがある。
本明細書に記載される対象内容のさらなる態様は、以下の箇条書きの節に明示される。
1.メモリ内に格納されたそれぞれのパケット用のパケットデータをネットワークアダプタ上のPIO送信メモリに書き込むためのプログラム入力/出力(PIO:Programmed Input/Output)書込み命令のシーケンスを受信するステップと、
PIO書込み命令の前記シーケンスを、アウトオブオーダー実行をサポートするプロセッサ上の命令スレッドとして実行するステップであって、PIO書込み命令の実行は、データをストアバッファ内のストアユニットに書き込ませ、ストアブロックにグループ分けされた前記ストアユニットは一列のストアユニットを備え;前記PIO書込み命令の一部はアウトオブオーダーで実行され、結果的にデータは、前記ストアブロックが充填される前に異なるストアブロック内のストアユニットに書き込まれる、ステップと、
ストアブロックが充填されたときを検出するステップと、
ストアブロックが充填されたことの検出に応えて、前記PIO送信メモリ内のバッファへのポステッドライトを介して前記ストアブロック内の前記データをドレインするステップと、
を備える方法。
2.前記メモリは64バイト(64B)キャッシュラインを採用し、各ストアブロックは64バイトのデータを備え、前記ポステッドライトは64BのPCIe(Peripheral Component Interconnect Express)ポステッドライトを備える、節1に記載の方法。
3.前記プロセッサは64ビットプロセッサを備え、各ストアユニットは、単一の命令を用いて前記プロセッサ内の64ビットデータレジスタからストアユニットに書き込まれた64ビットのデータを備える、節1または2に記載の方法。
4.PIO書込み命令の前記シーケンスは、それぞれのパケットごとに1つ以上の整列された64B書込みの連続グループとして受信され、前記方法は、
パケットを生成するステップと、
前記パケットが64バイトの倍数ではない長さを有すると判断するステップと、
64バイトの倍数までその長さを伸長するために前記パケットにパディングを追加するステップと、
前記パケットデータを備えてパディングを含む1つ以上の整列された64B書込みのシーケンスを備えるPIO書込み命令を生成するステップと、
を備える、節1から3のいずれかに記載の方法。
5.前記プロセッサはライトコンバイニングを採用し、アウトオブオーダーPIO書込み命令の実行の結果、データは不連続順でストアブロック内のストアユニットに書き込まれる、節1から4のいずれかに記載の方法。
6.前記PIO送信メモリは複数の送信コンテキストに分割され、各送信コンテキストは送信ブロックのシーケンスとして構造化されており、前記方法は、
連続順で複数の連続する送信ブロックにパケットのデータを書き込むためのPIO書込み命令のシーケンスを受信するステップと、
不連続順で前記連続する送信ブロックに前記パケットの前記データを書き込むステップと、
を備える、節1から5のいずれかに記載の方法。
7.前記複数の連続する送信ブロックのすべてが前記パケットデータで充填されたことを検出するステップと、
前記複数の送信ブロックのすべてが充填されてしまったら、前記複数の送信ブロック内のデータを放出できるようにするステップと、
をさらに備える、節6に記載の方法。
8.プロセッサ上で実行されたときに、アウトオブオーダー実行をサポートする前記プロセッサを含むコンピュータに、節1から7のいずれかに記載の方法を実施させられるように構成された命令を格納する、非一時的機械読み取り可能媒体。
9.メモリ内に格納されたそれぞれのパケット用のパケットデータをネットワークアダプタ上のPIO送信メモリに書き込むためのプログラム入力/出力(PIO)書込み命令のシーケンスを受信するステップであって、各PIO書込み命令は、前記データ、および前記データが書き込まれるPIO送信メモリ内の送信ブロックのメモリマップアドレスを包含するメモリ内のキャッシュラインの位置を定義する、ステップと、
PIO書込み命令の前記シーケンスを、アウトオブオーダー実行をサポートするプロセッサ上の命令スレッドとして実行するステップであって、PIO書込み命令の実行は、データをストアバッファ内のストアブロックに書き込ませ、前記PIO書込み命令の一部はアウトオブオーダーで実行され、その結果、前記PIO書込み命令が受信される順序とは異なる順序でデータがストアブロックに書き込まれる、ステップと、
ストアブロックが充填されたときを検出するステップと、
ストアブロックが充填されたことの検出に応えて、前記データを前記送信ブロックに書き込むために使用された前記PIO書込み命令内に包含されるアドレスに位置する前記PIO送信メモリ内の送信ブロックへのポステッドライトを介して前記ストアブロック内の前記データをドレインするステップと、
を備える方法。
10.前記PIO書込み命令は512ビット書込み命令を備え、メモリキャッシュライン、ストアブロック、および送信ブロックの各々は64バイトのサイズを有する、節9に記載の方法。
11.ポステッドライトは、64バイト(64B)PCIe(Peripheral Component Interconnect Express)ポステッドライトを備える、節10に記載の方法。
12.前記PIO送信メモリを複数の送信コンテキストに分割するステップと、
任意のパケットのデータが1つ以上の連続する送信ブロックに格納される際の各送信コンテキスト用の先入先出(FIFO;First−in,First−out)格納スキームを採用するステップであって、同じ送信コンテキストに複数のパケットのパケットデータを書き込むためのPIO書込み命令は元のFIFO順で連続的にグループ化され、前記複数のパケットの前記パケットデータは前記元のFIFO順とは異なる順序で送信ブロックに書き込まれることが可能である、ステップと、
をさらに備える、節9から11のいずれかに記載の方法。
13.前記1つ以上の連続する送信ブロックのすべてが任意のパケットについて前記パケットデータで充填されたことを検出するステップと、
一旦前記複数の送信ブロックが充填されたら、前記任意のパケットのデータが放出されることを可能にするステップと、
をさらに備える、節12に記載の方法。
14.そのパケットに関連付けられたVLを識別するために使用される仮想レーン(VL)標識を用いて各パケット内のヘッダフィールドを符号化するステップと、
同じ送信コンテキスト内の異なるVLを有するパケットがFIFO順とは関係なく放出されることを可能にするステップと、
同じ送信コンテキスト内の同じVLに関連付けられたパケットのデータの放出のためのFIFO順を強制するステップと、
をさらに備える、節13に記載の方法。
15.プロセッサ上で実行されたときに、アウトオブオーダー実行をサポートする前記プロセッサを含むコンピュータに、節8から14のいずれかの方法を実施させられるように構成された命令を格納する、非一時的機械読み取り可能媒体。
16.アウトオブオーダー実行をサポートし、メモリインタフェース、少なくとも1つのストアバッファ、および第一PCIe(Peripheral Component Interconnect Express)インタフェースを含む複数のプロセッサコアを有する、プロセッサと、
PCIe相互接続を介して前記プロセッサの前記第一PCIeインタフェースに結合された、第二PCIeインタフェースと、
前記第二PCIeインタフェースに動作可能に結合され、プログラム入力/出力(PIO)送信メモリを含む、伝送エンジンと、
を備える装置であって、前記プロセッサは、
前記メモリインタフェースに結合されたときにメモリ内に格納されたそれぞれのパケット用のパケットデータを前記PIO送信メモリに書き込むためのプログラム入力/出力(PIO)書込み命令のシーケンスを受信し、
PIO書込み命令の前記シーケンスをプロセッサコア上の命令スレッドとして実行し、PIO書込み命令の実行は、データをストアバッファ内のストアユニットに書き込ませ、ストアブロックにグループ分けされた前記ストアユニットは一列のストアユニットを備え;前記PIO書込み命令の一部はアウトオブオーダーで実行され、結果的にデータは、前記ストアブロックが充填される前に異なるストアブロック内のストアユニットに書き込み、、
ストアブロックが充填されたときを検出し、
ストアブロックが充填されたことの検出に応えて、前記PCIe相互接続を通じて送信された前記PIO送信メモリ内のバッファへのPCIeポステッドライトを介して前記ストアブロック内の前記データをドレインする、
回路および論理を含む、装置。
17.前記メモリは64バイト(64B)キャッシュラインを採用し、各ストアブロックは64バイトのデータを備え、前記ポステッドライトは64BのPCIe(Peripheral Component Interconnect Express)ポステッドライトを備える、節16に記載の装置。
18.前記プロセッサは64ビットプロセッサを備え、各ストアユニットは、単一の命令を用いて前記プロセッサ内の64ビットデータレジスタからストアユニットに書き込まれた64ビットのデータを備える、節16または17に記載の装置。
19.前記プロセッサはライトコンバイニングを採用し、アウトオブオーダーPIO書込み命令の実行の結果、データは不連続順でストアブロック内のストアユニットに書き込まれる、節16から18のいずれかに記載の装置。
20.前記PIO送信メモリは複数の送信コンテキストに分割され、各送信コンテキストは送信ブロックのシーケンスとして構造化されており、前記装置は、
連続順で複数の連続する送信ブロックにパケットのデータを書き込むためのPIO書込み命令のシーケンスを受信し、
不連続順で前記連続する送信ブロックに前記パケットの前記データを書き込む、
さらなる回路および論理を含む、節16から19のいずれかに記載の装置。
21.前記複数の連続する送信ブロックのすべてが前記パケットデータで充填されたことを検出し、
前記複数の送信ブロックのすべてが充填されてしまったら、前記複数の送信ブロック内のデータを放出できるようにする、
回路および論理をさらに備える、節20に記載の装置。
22.前記パケットの長さを判断するために前記複数の連続する送信ブロックの1つ目の中のデータを検査し、
いくつの連続する送信ブロックが前記パケットのデータを格納するために採用されるべきかを判断する、
回路および論理をさらに備える、節21に記載の装置。
23.アウトオブオーダー実行をサポートし、メモリインタフェース、少なくとも1つのストアバッファ、および第一PCIe(Peripheral Component Interconnect Express)インタフェースを含む、複数のプロセッサコアを有する、プロセッサと、
PCIe相互接続を介して前記プロセッサの前記第一PCIeインタフェースに結合された、第二PCIeインタフェースと、
前記第二PCIeインタフェースに動作可能に結合され、プログラム入力/出力(PIO)送信メモリを含む、伝送エンジンと、
を備える装置であって、前記プロセッサは、
メモリ内に格納されたそれぞれのパケット用のパケットデータを前記PIO送信メモリに書き込むためのプログラム入力/出力(PIO)書込み命令のシーケンスを受信するためであって、各PIO書込み命令は、前記データが書き込まれる前記PIO送信メモリ内の送信ブロックのデータおよびメモリマップアドレスを包含するメモリ内のキャッシュラインの位置を定義し、
PIO書込み命令の前記シーケンスをプロセッサコア上の命令スレッドとして実行するためであって、PIO書込みの実行は、データをストアバッファ内のストアブロックに書き込ませ、前記PIO書込み命令の一部はアウトオブオーダーで実行され、結果的にデータは、前記PIO書込み命令が受信される順とは異なる順序でストアブロックに書き込み、
ストアブロックが充填されたときを検出し、
ストアブロックが充填されたことの検出に応えて、前記データを送信ブロックに書き込むために使用された前記PIO書込み命令に包含される前記アドレスに位置する前記PIO送信メモリ内の前記送信ブロックへのPCIeポステッドライトを介して、前記ストアブロック内の前記データをドレインする、
回路および論理を含む、装置。
24.前記PIO書込み命令は512ビット書込み命令を備え、メモリキャッシュライン、ストアブロック、および送信ブロックの各々は64バイトのサイズを有し、前記PCIeポステッドライトは64バイトのPCIeポステッドライトを備える、節23に記載の装置。
25.前記PIO送信メモリを複数の送信コンテキストに分割し、
任意のパケットのデータが1つ以上の連続する送信ブロックに格納される際の各送信コンテキスト用の先入先出(FIFO;First−in,First−out)格納スキームを実施し、
前記1つ以上の連続する送信ブロックのすべてが任意のパケットのパケットデータで充填されたことを検出し、
一旦前記複数の送信ブロックが充填されたら、前記任意のパケットのデータが放出されることを可能にする、
回路および論理をさらに備え、
同じ送信コンテキストに複数のパケットのパケットデータを書き込むためのPIO書込み命令は元のFIFO順で連続的にグループ化され、前記複数のパケットの前記パケットデータは前記PIO書込み命令のアウトオブオーダー実行を介して前記元のFIFO順とは異なる順序で送信ブロックに書き込まれることが可能である、
節23または24に記載の装置。
26.そのパケットに関連付けられたVLを識別するために使用される仮想レーン(VL)標識を用いて各パケット内のヘッダフィールドを符号化し、
同じ送信コンテキスト内の異なるVLを有するパケットがFIFO順とは関係なく放出されることを可能にし、
同じ送信コンテキスト内の同じVLに関連付けられたパケットのデータの放出のためのFIFO順を強制する、
回路および論理をさらに備える、節25に記載の装置。
27.PCIe(Peripheral Component Interconnect Express)インタフェースと、
前記PCIeインタフェースに動作可能に結合されたプログラム入力/出力(PIO)送信メモリ、および
前記PIO送信メモリに動作可能に結合された放出ブロック、
を含む伝送エンジンと、
前記放出ブロックに動作可能に結合された伝送ポートを含むネットワークポートと、
を備える装置であって、
前記伝送エンジンは、
前記PIO送信メモリを、各々が複数の連続する送信ブロックを備える、複数の送信コンテキストに分割し、
PCIe相互接続を介して前記PCIeインタフェースに結合されたプロセッサからインバウンドPCIeポステッドライトを受信し、各PCIeポステッドライトは、前記プロセッサに結合されたメモリ内に格納されたパケットに対応するパケットデータを包含し、PIO書込み命令を介して単一の送信ブロックに書き込まれ、任意のパケットのパケットデータは1つの送信ブロックまたは複数の連続する送信ブロックに書き込まれ、複数の連続する送信ブロックに書き込まれるパケットのパケットデータはアウトオブオーダーで受信されることが可能とし、
パケット用の複数の連続する送信ブロックが充填されたときを検出し、
パケット用の前記連続する送信ブロックのすべてが充填されたとして検出されたときに、前記複数の連続する送信ブロック内のパケットデータを、前記放出ブロックへの放出の対象であるとして標識する、
回路および論理をさらに備える、装置。
28.前記放出ブロックから前記伝送ポートに放出されるために充填された前記複数の送信コンテキスト内のパケットの中からパケットを選択するためのアービタを実現するための回路および論理をさらに備える、節27に記載の装置。
29.前記伝送エンジンは、送信ダイレクトメモリアクセス(SDMA)メモリと、前記SDMAメモリ内のバッファにデータを書き込むためにDMA転送を用いて前記プロセッサに結合されたメモリからデータを引き出すように構成された複数のSDMAエンジンと、をさらに備える、節27または28に記載の装置。
30.前記PCIeインタフェースは第一PCIeインタフェースを備え、前記装置は、
アウトオブオーダー実行をサポートし、メモリインタフェース、少なくとも1つのストアバッファ、およびPCIe相互接続を介して前記第一PCIeインタフェースに結合された第二PCIe(Peripheral Component Interconnect Express)インタフェースを含む、複数のプロセッサコアを有するプロセッサであって、
前記メモリインタフェースと結合されたときにメモリ内に格納されたそれぞれのパケット用のパケットデータを前記PIO送信メモリに書き込むためのPIO書込み命令のシーケンスを受信し、
PIO書込み命令の前記シーケンスをプロセッサコア上の命令スレッドとして実行し、PIO書込み命令の実行は、データをストアバッファ内のストアユニットに書き込ませ、ストアブロックにグループ分けされた前記ストアユニットは一列のストアユニットを備え;前記PIO書込み命令の一部はアウトオブオーダーで実行され、結果的にデータは、前記ストアブロックが充填される前に異なるストアブロック内のストアユニットに書き込み、
ストアブロックが充填されたときを検出し、
ストアブロックが充填されたことの検出に応えて、前記PCIe相互接続を通じて送信された前記PIO送信メモリ内のバッファへのPCIeポステッドライトを介して前記ストアブロック内の前記データをドレインする、
回路および論理をさらに含むプロセッサをさらに備える、節27から29のいずれかに記載の装置。
31.前記装置は、
前記PCIeインタフェースに結合された受信エンジンと、
前記受信エンジンに結合された受信ポートと、
をさらに備えるホストファブリックインタフェースを備える、節27から30のいずれかに記載の装置。
32.前記装置は、節31の前記ホストファブリックインタフェースのために定義された構成を有する複数のホストファブリックインタフェースを備える、節31に記載の装置。
33.アウトオブオーダー実行をサポートし、メモリインタフェース、少なくとも1つのストアバッファ、および第一PCIe(Peripheral Component Interconnect Express)インタフェースを含む複数のプロセッサコアを有する、プロセッサと、
PCIe相互接続を介して前記プロセッサの前記第一PCIeインタフェースに結合された、第二PCIeインタフェースと、
前記第二PCIeインタフェースに動作可能に結合され、プログラム入力/出力(PIO)送信メモリを含む、伝送エンジンと、
を備える装置であって、
前記プロセッサは、
前記メモリインタフェースに結合されたときにメモリ内に格納されたそれぞれのパケット用のパケットデータを前記PIO送信メモリに書き込むためのプログラム入力/出力(PIO)書込み命令のシーケンスを受信し、
PIO書込み命令の前記シーケンスをプロセッサコア上の命令スレッドとして実行し、PIO書込みの実行は、データをストアバッファ内のストアユニットに書き込ませ、ストアブロックにグループ分けされた前記ストアユニットは一列のストアユニットを備え;前記PIO書込み命令の一部はアウトオブオーダーで実行され、結果的にデータは、前記ストアブロックが充填される前に異なるストアブロック内のストアユニットに書き込み、
ストアブロックが充填されたときを検出し、
ストアブロックが充填されたことの検出に応えて、前記PCIe相互接続を通じて送信された前記PIO送信メモリ内のバッファへのPCIeポステッドライトを介して前記ストアブロック内の前記データをドレインする、
手段をさらに備える、装置。
34.前記メモリは64バイト(64B)キャッシュラインを採用し、各ストアブロックは64バイトのデータを備え、前記ポステッドライトは64BのPCIe(Peripheral Component Interconnect Express)ポステッドライトを備える、節33に記載の装置。
35.前記プロセッサは64ビットプロセッサを備え、各ストアユニットは、単一の命令を用いて前記プロセッサ内の64ビットデータレジスタからストアユニットに書き込まれた64ビットのデータを備える、節33または34に記載の装置。
36.前記プロセッサはライトコンバイニングを採用し、アウトオブオーダーPIO書込み命令の実行の結果、データは不連続順でストアブロック内のストアユニットに書き込まれる、節33から35のいずれかに記載の装置。
37.前記PIO送信メモリは複数の送信コンテキストに分割され、各送信コンテキストは送信ブロックのシーケンスとして構造化され、前記装置は、
連続順で複数の連続する送信ブロックにパケットのデータを書き込むためのPIO書込み命令のシーケンスを受信し、
不連続順で前記連続する送信ブロックに前記パケットの前記データを書き込む、
手段をさらに備える、節33から36のいずれかに記載の装置。
38.前記複数の連続する送信ブロックのすべてが前記パケットデータで充填されたことを検出し、
前記複数の送信ブロックのすべてが充填されてしまったら、前記複数の送信ブロック内のデータを放出できるようにする、
手段をさらに備える、節37に記載の装置。
39.前記パケットの長さを判断するために前記複数の連続する送信ブロックの1つ目の中のデータを検査し、
いくつの連続する送信ブロックが前記パケットのデータを格納するために採用されるべきかを判断する、
手段をさらに備える、節38に記載の装置。
一般的に、本明細書の図に示される回路、論理、および構成要素は、ディスクリートチップ、SoC、マルチチップモジュール、および複数のネットワークインタフェースのサポートを含むネットワーキング/リンクインタフェースチップを含む、様々なタイプの集積回路(たとえば、半導体チップ)およびモジュールにおいて実施されることも可能である。また、本明細書において使用される際に、様々な動作を行うための回路および論理は、埋め込み論理、埋め込みプロセッサ、コントローラ、マイクロエンジン、あるいはハードウェア、ソフトウェア、および/またはファームウェアのいずれかの組み合わせの使用のうちの1つ以上を介して実施されてもよい。たとえば、様々な論理ブロックおよび/または回路によって示される動作は、ASIC、FPGA、IPブロックライブラリを含むがこれらに限定されないプログラムされた論理ゲートなどを用いて、あるいはプロセッサ、プロセッサコア、コントローラ、マイクロコントローラ、マイクロエンジンなどを含む1つ以上の処理要素上で実行されるソフトウェアまたはファームウェア命令のうちの1つ以上を通じて、行われてもよい。
加えて、本明細書の実施形態の態様は、半導体チップ、SoC、マルチチップモジュールなどの中のみならず、非一時的機械読み取り可能媒体の中でも実施されることが可能である。たとえば、上記の設計は、半導体装置を設計するために使用される設計ツールに関連付けられた非一時的機械読み取り可能媒体に格納および/または埋め込まれてもよい。例としては、VHSICハードウェア記述言語(VHDL;VHSIC Hardware Description Language)言語、Verilog言語またはSPICE言語、あるいはその他のハードウェア記述言語でフォーマットされたネットリストを含む。いくつかのネットリストの例は:挙動レベルネットリスト、レジスタ転送レベル(RTL)ネットリスト、ゲートレベルネットリスト、およびトランジスタレベルネットリストを含む。機械読み取り可能媒体は、GDS−IIファイルなどのレイアウト情報を有する媒体も含む。
さらに、半導体チップ設計のためのネットリストファイルまたはその他の機械読み取り可能媒体は、先に記載された教示の方法を実行するためのシミュレーション環境において使用されてもよい。
特定の実施を参照していくつかの実施形態が記載されたものの、いくつかの実施形態によるその他の実施も可能である。加えて、図示された、および/または本明細書に記載された要素の配置および/または順序またはその他の特徴は、図示および記載された特定のやり方で配置される必要はない。いくつかの実施形態によるその他多くの配置が可能である。
図示される各システムにおいて、いくつかのケースにおける要素は各々、提示される要素が異なってもおよび/または類似であってもよいことを示唆するために、同じ参照番号または異なる参照番号を有してもよい。しかしながら、1つの要素は、異なる実施を有するため、および本明細書に図示または記載されるシステムの一部またはすべてとともに動作するための、十分な柔軟性を有することができる。図示される様々な要素は、同じであっても異なってもよい。いずれのものが第一要素と称され、いずれのものが第二要素と称されるかは、任意である。
上記詳細な説明および請求項における「M」、「G」、「B」、「n」、「m」、「k」などのイタリック文字は整数を表すために使用され、特定の文字の使用は特定の実施形態に限定されるものではない。また、個別の整数を表すために個別の請求項において同じ文字が使用されてもよく、あるいは異なる文字が使用されてもよい。加えて、詳細な説明における特定の文字の使用は、詳細な説明の同じ内容に関する請求項で使用される文字と一致してもしなくてもよい。
説明および請求項において、その派生語と併せて、用語「結合(coupled)」および「接続(connected)」が使用されているかもしれない。これらの用語が互いの同義語として意図されるものではないことは、理解すべきである。むしろ、特定の実施形態において、「接続」は、2つ以上の要素が互いに直接物理的または電気的接触していることを示すために使用される。「結合」は、2つ以上の要素が直接物理的または電気的に接触していることを意味することができる。しかしながら、「結合」はまた、2つ以上の要素が互いに直接接触しておらず、それでもなお互いに協働または相互作用することも、意味することができる。
実施形態は、本発明の実施または例である。明細書における「実施形態」、「一実施形態」、「いくつかの実施形態」、または「その他の実施形態」の言及は、その実施形態に関連して記載される特定の特徴、構造、または特性が本発明の少なくともいくつかの実施形態に含まれるが、しかし必ずしもすべての実施形態には含まれないことを、意味する。「実施形態」、「一実施形態」、または「いくつかの実施形態」の様々な記載は、必ずしもすべて同じ実施形態を指すとは限らない。
本明細書に記載および図示されるすべての構成要素、特徴、構造、特性などが特定の1つまたは複数の実施形態に含まれる必要はない。ある構成要素、特徴、構造、または特性が含まれることが「あってもよい(may)」、「あるかもしれない(might)」、「可能(can)」、または「あるかもしれない(could)」と明細書が述べる場合、たとえば、その特定の構成要素、特徴、構造、または特性が含まれることが必要とされるわけではない。明細書または請求項が「a」または「an」(1つの)要素を指す場合、これはその要素が1つしかないことを意味するものではない。明細書または請求項が「もう1つの(an additional)」要素を指す場合、これは2つ以上の追加要素があることを除外するものではない。
要約書に記載されるものを含め、本発明の図示される実施形態の上記説明は、包括的となるように、または本発明を開示された正確な形態に限定するように、意図されるものではない。本発明の特定の実施形態および例が説明目的のため本明細書に記載されているが、その一方で、当業者が認識するように、本発明の範囲内で様々な同等の修正が可能である。
これらの修正は、上記の詳細な説明を鑑みて本発明に対してなされることが可能である。以下の請求項で使用される用語は、本明細書および図面で開示された具体的実施形態に本発明を限定するように解釈されるべきではない。むしろ、本発明の範囲は、請求項解釈の確立された原理にしたがって解釈される、以下の請求項によってのみ判断されるべきである。

Claims (25)

  1. メモリ内に格納されたそれぞれのパケット用のパケットデータをネットワークアダプタ上のPIO送信メモリに書き込むためのプログラム入力/出力(PIO)書込み命令のシーケンスを受信するステップと、
    PIO書込み命令の前記シーケンスを、アウトオブオーダー実行をサポートするプロセッサ上の命令スレッドとして実行するステップであって、PIO書込み命令の実行は、データをストアバッファ内のストアユニットに書き込ませ、ストアブロックにグループ分けされた前記ストアユニットは一列のストアユニットを備え;前記PIO書込み命令の一部はアウトオブオーダーで実行され、結果的にデータは、前記ストアブロックが充填される前に異なるストアブロック内のストアユニットに書き込まれる、ステップと、
    ストアブロックが充填されたときを検出するステップと、
    ストアブロックが充填されたことの検出に応えて、前記PIO送信メモリ内のバッファへのポステッドライトを介して前記ストアブロック内の前記データをドレインするステップと、
    を備える方法。
  2. 前記メモリは64バイト(64B)キャッシュラインを採用し、各ストアブロックは64バイトのデータを備え、前記ポステッドライトは64BのPCIe(Peripheral Component Interconnect Express)ポステッドライトを備える、請求項1に記載の方法。
  3. 前記プロセッサは64ビットプロセッサを備え、各ストアユニットは、単一の命令を用いて前記プロセッサ内の64ビットデータレジスタからストアユニットに書き込まれた64ビットのデータを備える、請求項1に記載の方法。
  4. PIO書込み命令の前記シーケンスは、それぞれのパケットごとに1つ以上の整列された64B書込みの連続グループとして受信され、前記方法は、
    パケットを生成するステップと、
    前記パケットが64バイトの倍数ではない長さを有すると判断するステップと、
    64バイトの倍数までその長さを伸長するために前記パケットにパディングを追加するステップと、
    前記パケットデータを備えてパディングを含む1つ以上の整列された64B書込みのシーケンスを備えるPIO書込み命令を生成するステップと、
    を備える、請求項1に記載の方法。
  5. 前記プロセッサはライトコンバイニングを採用し、アウトオブオーダーPIO書込み命令の実行の結果、データは不連続順でストアブロック内のストアユニットに書き込まれる、請求項1に記載の方法。
  6. 前記PIO送信メモリは複数の送信コンテキストに分割され、各送信コンテキストは送信ブロックのシーケンスとして構造化されており、前記方法は、
    連続順で複数の連続する送信ブロックにパケットのデータを書き込むためのPIO書込み命令のシーケンスを受信するステップと、
    不連続順で前記連続する送信ブロックに前記パケットの前記データを書き込むステップと、
    をさらに備える、請求項1に記載の方法。
  7. 前記複数の連続する送信ブロックのすべてが前記パケットデータで充填されたことを検出するステップと、
    前記複数の送信ブロックのすべてが充填されてしまったら、前記複数の送信ブロック内のデータを放出できるようにするステップと、
    をさらに備える、請求項6に記載の方法。
  8. メモリ内に格納されたそれぞれのパケット用のパケットデータをネットワークアダプタ上のPIO送信メモリに書き込むためのプログラム入力/出力(PIO)書込み命令のシーケンスを受信するステップであって、各PIO書込み命令は、前記データ、および前記データが書き込まれるPIO送信メモリ内の送信ブロックのメモリマップアドレスを包含するメモリ内のキャッシュラインの位置を定義する、ステップと、
    PIO書込み命令の前記シーケンスを、アウトオブオーダー実行をサポートするプロセッサ上の命令スレッドとして実行するステップであって、PIO書込み命令の実行は、データをストアバッファ内のストアブロックに書き込ませ、前記PIO書込み命令の一部はアウトオブオーダーで実行され、その結果、前記PIO書込み命令が受信される順序とは異なる順序でデータがストアブロックに書き込まれる、ステップと、
    ストアブロックが充填されたときを検出するステップと、
    ストアブロックが充填されたことの検出に応えて、前記データを前記送信ブロックに書き込むために使用された前記PIO書込み命令内に包含されるアドレスに位置する前記PIO送信メモリ内の送信ブロックへのポステッドライトを介して前記ストアブロック内の前記データをドレインするステップと、
    を備える方法。
  9. 前記PIO書込み命令は512ビット書込み命令を備え、メモリキャッシュライン、ストアブロック、および送信ブロックの各々は64バイトのサイズを有する、請求項8に記載の方法。
  10. ポステッドライトは、64バイト(64B)PCIe(Peripheral Component Interconnect Express)ポステッドライトを備える、請求項9に記載の方法。
  11. 前記PIO送信メモリを複数の送信コンテキストに分割するステップと、
    任意のパケットのデータが1つ以上の連続する送信ブロックに格納される際の各送信コンテキスト用の先入先出(FIFO;First−in,First−out)格納スキームを採用するステップであって、同じ送信コンテキストに複数のパケットのパケットデータを書き込むためのPIO書込み命令は元のFIFO順で連続的にグループ化され、前記複数のパケットの前記パケットデータは前記元のFIFO順とは異なる順序で送信ブロックに書き込まれることが可能である、ステップと、
    をさらに備える、請求項8に記載の方法。
  12. 前記1つ以上の連続する送信ブロックのすべてが任意のパケットについて前記パケットデータで充填されたことを検出するステップと、
    一旦前記複数の送信ブロックが充填されたら、前記任意のパケットのデータが放出されることを可能にするステップと、
    をさらに備える、請求項11に記載の方法。
  13. そのパケットに関連付けられたVLを識別するために使用される仮想レーン(VL)標識を用いて各パケット内のヘッダフィールドを符号化するステップと、
    同じ送信コンテキスト内の異なるVLを有するパケットがFIFO順とは関係なく放出されることを可能にするステップと、
    同じ送信コンテキスト内の同じVLに関連付けられたパケットのデータの放出のためのFIFO順を強制するステップと、
    をさらに備える、請求項12に記載の方法。
  14. アウトオブオーダー実行をサポートし、メモリインタフェース、少なくとも1つのストアバッファ、および第一PCIe(Peripheral Component Interconnect Express)インタフェースを含む複数のプロセッサコアを有する、プロセッサと、
    PCIe相互接続を介して前記プロセッサの前記第一PCIeインタフェースに結合された、第二PCIeインタフェースと、
    前記第二PCIeインタフェースに動作可能に結合され、プログラム入力/出力(PIO)送信メモリを含む、伝送エンジンと、
    を備える装置であって、前記プロセッサは、
    前記メモリインタフェースに結合されたときにメモリ内に格納されたそれぞれのパケット用のパケットデータを前記PIO送信メモリに書き込むためのプログラム入力/出力(PIO)書込み命令のシーケンスを受信し、
    PIO書込み命令の前記シーケンスをプロセッサコア上の命令スレッドとして実行し、ここでPIO書込み命令の実行は、データをストアバッファ内のストアユニットに書き込ませ、ストアブロックにグループ分けされた前記ストアユニットは一列のストアユニットを備え;前記PIO書込み命令の一部はアウトオブオーダーで実行され、結果的にデータは、前記ストアブロックが充填される前に異なるストアブロック内のストアユニットに書き込まれ、
    ストアブロックが充填されたときを検出し、
    ストアブロックが充填されたことの検出に応えて、前記PCIe相互接続を通じて送信された前記PIO送信メモリ内のバッファへのPCIeポステッドライトを介して前記ストアブロック内の前記データをドレインする、
    回路および論理を含む、装置。
  15. 前記メモリは64バイト(64B)キャッシュラインを採用し、各ストアブロックは64バイトのデータを備え、前記ポステッドライトは64BのPCIe(Peripheral Component Interconnect Express)ポステッドライトを備える、請求項14に記載の装置。
  16. 前記プロセッサは64ビットプロセッサを備え、各ストアユニットは、単一の命令を用いて前記プロセッサ内の64ビットデータレジスタからストアユニットに書き込まれた64ビットのデータを備える、請求項14に記載の装置。
  17. 前記プロセッサはライトコンバイニングを採用し、アウトオブオーダーPIO書込み命令の実行の結果、データは不連続順でストアブロック内のストアユニットに書き込まれる、請求項14に記載の装置。
  18. 前記PIO送信メモリは複数の送信コンテキストに分割され、各送信コンテキストは送信ブロックのシーケンスとして構造化されており、前記装置は、
    連続順で複数の連続する送信ブロックにパケットのデータを書き込むためのPIO書込み命令のシーケンスを受信し、
    不連続順で前記連続する送信ブロックに前記パケットの前記データを書き込む、
    さらなる回路および論理を含む、請求項14に記載の装置。
  19. 前記複数の連続する送信ブロックのすべてが前記パケットデータで充填されたことを検出し、
    前記複数の送信ブロックのすべてが充填されてしまったら、前記複数の送信ブロック内のデータを放出できるようにする、
    回路および論理をさらに備える、請求項18に記載の装置。
  20. PCIe(Peripheral Component Interconnect Express)インタフェースと、
    前記PCIeインタフェースに動作可能に結合されたプログラム入力/出力(PIO)送信メモリと、
    前記PIO送信メモリに動作可能に結合された放出ブロックと、
    を含む伝送エンジンと、
    前記放出ブロックに動作可能に結合された伝送ポートを含むネットワークポートと、
    を備える装置であって、前記伝送エンジンは、
    前記PIO送信メモリを、各々が複数の連続する送信ブロックを備える、複数の送信コンテキストに分割し、
    PCIe相互接続を介して前記PCIeインタフェースに結合されたプロセッサからインバウンドPCIeポステッドライトを受信し、各PCIeポステッドライトは、前記プロセッサに結合されたメモリ内に格納されたパケットに対応するパケットデータを包含し、PIO書込み命令を介して単一の送信ブロックに書き込まれ、ここで任意のパケットのパケットデータは1つの送信ブロックまたは複数の連続する送信ブロックに書き込まれ、複数の連続する送信ブロックに書き込まれるパケットのパケットデータはアウトオブオーダーで受信されることが可能とされ、
    パケット用の複数の連続する送信ブロックが充填されたときを検出し、
    パケット用の前記連続する送信ブロックのすべてが充填されたとして検出されたときに、前記複数の連続する送信ブロック内のパケットデータを、前記放出ブロックへの放出の対象であるとして標識する、
    回路および論理をさらに備える、装置。
  21. 前記放出ブロックから前記伝送ポートに放出されるために充填された前記複数の送信コンテキスト内のパケットの中からパケットを選択するためのアービタを実現するための回路および論理をさらに備える、請求項20に記載の装置。
  22. 前記伝送エンジンは、送信ダイレクトメモリアクセス(SDMA)メモリと、前記SDMAメモリ内のバッファにデータを書き込むためにDMA転送を用いて前記プロセッサに結合されたメモリからデータを引き出すように構成された複数のSDMAエンジンと、をさらに備える、請求項20に記載の装置。
  23. 前記PCIeインタフェースは第一PCIeインタフェースを備え、前記装置は、
    アウトオブオーダー実行をサポートし、メモリインタフェース、少なくとも1つのストアバッファ、およびPCIe相互接続を介して前記第一PCIeインタフェースに結合された第二PCIe(Peripheral Component Interconnect Express)インタフェースを含む、複数のプロセッサコアを有するプロセッサであって、
    前記メモリインタフェースと結合されたときにメモリ内に格納されたそれぞれのパケット用のパケットデータを前記PIO送信メモリに書き込むためのPIO書込み命令のシーケンスを受信し、
    PIO書込み命令の前記シーケンスをプロセッサコア上の命令スレッドとして実行し、ここでPIO書込み命令の実行は、データをストアバッファ内のストアユニットに書き込ませ、ストアブロックにグループ分けされた前記ストアユニットは一列のストアユニットを備え;前記PIO書込み命令の一部はアウトオブオーダーで実行され、結果的にデータは、前記ストアブロックが充填される前に異なるストアブロック内のストアユニットに書き込まれ、
    ストアブロックが充填されたときを検出し、
    ストアブロックが充填されたことの検出に応えて、前記PCIe相互接続を通じて送信された前記PIO送信メモリ内のバッファへのPCIeポステッドライトを介して前記ストアブロック内の前記データをドレインする、
    回路および論理をさらに含むプロセッサをさらに備える、請求項20に記載の装置。
  24. 前記装置は、
    前記PCIeインタフェースに結合された受信エンジンと、
    前記受信エンジンに結合された受信ポートと、
    をさらに備えるホストファブリックインタフェースを備える、請求項20に記載の装置。
  25. 前記装置は、請求項24に記載のホストファブリックインタフェースのために定義された構成を有する複数のホストファブリックインタフェースを備える、請求項24に記載の装置。
JP2017516268A 2014-06-26 2015-06-05 Sfenceを用いずに最適化されたpio書込みシーケンスを用いるパケット送信 Active JP6377844B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/316,670 2014-06-26
US14/316,670 US9460019B2 (en) 2014-06-26 2014-06-26 Sending packets using optimized PIO write sequences without SFENCEs
PCT/US2015/034359 WO2015199946A1 (en) 2014-06-26 2015-06-05 Sending packets using optimized pio write sequences without sfences

Publications (2)

Publication Number Publication Date
JP2017525065A true JP2017525065A (ja) 2017-08-31
JP6377844B2 JP6377844B2 (ja) 2018-08-22

Family

ID=54930564

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017516268A Active JP6377844B2 (ja) 2014-06-26 2015-06-05 Sfenceを用いずに最適化されたpio書込みシーケンスを用いるパケット送信

Country Status (5)

Country Link
US (4) US9460019B2 (ja)
EP (1) EP3161649B1 (ja)
JP (1) JP6377844B2 (ja)
CN (1) CN106415515B (ja)
WO (1) WO2015199946A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7479373B2 (ja) 2019-01-31 2024-05-08 インターナショナル・ビジネス・マシーンズ・コーポレーション 入出力ストア命令をハンドリングする方法、システム、およびプログラム

Families Citing this family (51)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9892084B2 (en) 2013-12-10 2018-02-13 Apple Inc. Methods and apparatus for virtual channel allocation via a high speed bus interface
US10459674B2 (en) 2013-12-10 2019-10-29 Apple Inc. Apparatus and methods for packing and transporting raw data
US9460019B2 (en) 2014-06-26 2016-10-04 Intel Corporation Sending packets using optimized PIO write sequences without SFENCEs
US9477631B2 (en) 2014-06-26 2016-10-25 Intel Corporation Optimized credit return mechanism for packet sends
US9830289B2 (en) * 2014-09-16 2017-11-28 Apple Inc. Methods and apparatus for aggregating packet transfer over a virtual bus interface
US9971397B2 (en) 2014-10-08 2018-05-15 Apple Inc. Methods and apparatus for managing power with an inter-processor communication link between independently operable processors
US9842036B2 (en) 2015-02-04 2017-12-12 Apple Inc. Methods and apparatus for controlled recovery of error information between independently operable processors
US10042794B2 (en) 2015-06-12 2018-08-07 Apple Inc. Methods and apparatus for synchronizing uplink and downlink transactions on an inter-device communication link
US11032397B2 (en) * 2015-06-17 2021-06-08 Hewlett Packard Enterprise Development Lp Method and system for high speed data links
US10229076B2 (en) 2015-09-09 2019-03-12 International Business Machines Corporation Peripheral component interconnect express (PCIE) pseudo-virtual channels using vendor defined messages
US9483424B1 (en) * 2015-12-04 2016-11-01 International Business Machines Corporation Peripheral component interconnect express (PCIE) pseudo-virtual channels and non-blocking writes
US10085214B2 (en) 2016-01-27 2018-09-25 Apple Inc. Apparatus and methods for wake-limiting with an inter-device communication link
US10191852B2 (en) 2016-02-29 2019-01-29 Apple Inc. Methods and apparatus for locking at least a portion of a shared memory resource
US10191859B2 (en) 2016-03-31 2019-01-29 Apple Inc. Memory access protection apparatus and methods for memory mapped access between independently operable processors
US10523867B2 (en) 2016-06-10 2019-12-31 Apple Inc. Methods and apparatus for multi-lane mapping, link training and lower power modes for a high speed bus interface
US10591976B2 (en) 2016-11-10 2020-03-17 Apple Inc. Methods and apparatus for providing peripheral sub-system stability
US10775871B2 (en) 2016-11-10 2020-09-15 Apple Inc. Methods and apparatus for providing individualized power control for peripheral sub-systems
WO2018122619A2 (en) * 2016-12-07 2018-07-05 Marvell World Trade Ltd. System and method for memory access token reassignment
US10169273B2 (en) * 2017-01-11 2019-01-01 Qualcomm Incorporated Forced compression of single I2C writes
US10346226B2 (en) 2017-08-07 2019-07-09 Time Warner Cable Enterprises Llc Methods and apparatus for transmitting time sensitive data over a tunneled bus interface
US10963295B2 (en) * 2017-09-08 2021-03-30 Oracle International Corporation Hardware accelerated data processing operations for storage data
US10331612B1 (en) 2018-01-09 2019-06-25 Apple Inc. Methods and apparatus for reduced-latency data transmission with an inter-processor communication link between independently operable processors
US11792307B2 (en) 2018-03-28 2023-10-17 Apple Inc. Methods and apparatus for single entity buffer pool management
US11381514B2 (en) 2018-05-07 2022-07-05 Apple Inc. Methods and apparatus for early delivery of data link layer packets
US10430352B1 (en) 2018-05-18 2019-10-01 Apple Inc. Methods and apparatus for reduced overhead data transfer with a shared ring buffer
JP7102936B2 (ja) * 2018-05-23 2022-07-20 日本電信電話株式会社 パケット処理装置およびパケット処理方法
US10585699B2 (en) 2018-07-30 2020-03-10 Apple Inc. Methods and apparatus for verifying completion of groups of data transactions between processors
US10719376B2 (en) 2018-08-24 2020-07-21 Apple Inc. Methods and apparatus for multiplexing data flows via a single data structure
US10846224B2 (en) 2018-08-24 2020-11-24 Apple Inc. Methods and apparatus for control of a jointly shared memory-mapped region
US10977198B2 (en) * 2018-09-12 2021-04-13 Micron Technology, Inc. Hybrid memory system interface
US10838450B2 (en) 2018-09-28 2020-11-17 Apple Inc. Methods and apparatus for synchronization of time between independently operable processors
US10789110B2 (en) 2018-09-28 2020-09-29 Apple Inc. Methods and apparatus for correcting out-of-order data transactions between processors
TWI773959B (zh) * 2019-01-31 2022-08-11 美商萬國商業機器公司 用於處理輸入輸出儲存指令之資料處理系統、方法及電腦程式產品
JP7379491B2 (ja) 2019-01-31 2023-11-14 インターナショナル・ビジネス・マシーンズ・コーポレーション 入出力ストア命令をハンドリングする方法、システム、およびプログラム
JP7324282B2 (ja) 2019-01-31 2023-08-09 インターナショナル・ビジネス・マシーンズ・コーポレーション 入出力ストア命令をハンドリングする方法、システム、およびプログラム
JP6988863B2 (ja) * 2019-08-08 2022-01-05 横河電機株式会社 プロトコルコンバータ、データ伝送方法、データ伝送プログラム、及び、データ伝送システム
US11558348B2 (en) 2019-09-26 2023-01-17 Apple Inc. Methods and apparatus for emerging use case support in user space networking
US11829303B2 (en) 2019-09-26 2023-11-28 Apple Inc. Methods and apparatus for device driver operation in non-kernel space
US11210248B2 (en) * 2019-12-20 2021-12-28 Advanced Micro Devices, Inc. System direct memory access engine offload
CN111666235B (zh) * 2020-05-26 2022-02-08 中国人民解放军国防科技大学 用于高速互连网络接口芯片的pio通信装置,芯片,设备及方法
EP4144048A1 (en) 2020-06-08 2023-03-08 Liquid-Markets GmbH Hardware-based transaction exchange
US11606302B2 (en) 2020-06-12 2023-03-14 Apple Inc. Methods and apparatus for flow-based batching and processing
US20220012201A1 (en) * 2020-07-07 2022-01-13 Apple Inc. Scatter and Gather Streaming Data through a Circular FIFO
US11775359B2 (en) 2020-09-11 2023-10-03 Apple Inc. Methods and apparatuses for cross-layer processing
US11954540B2 (en) 2020-09-14 2024-04-09 Apple Inc. Methods and apparatus for thread-level execution in non-kernel space
US11799986B2 (en) 2020-09-22 2023-10-24 Apple Inc. Methods and apparatus for thread level execution in non-kernel space
US11301408B1 (en) 2021-06-07 2022-04-12 Liquid-Markets-Holdings, Incorporated Asymmetric read / write architecture for enhanced throughput and reduced latency
US11876719B2 (en) 2021-07-26 2024-01-16 Apple Inc. Systems and methods for managing transmission control protocol (TCP) acknowledgements
US11882051B2 (en) 2021-07-26 2024-01-23 Apple Inc. Systems and methods for managing transmission control protocol (TCP) acknowledgements
CN113760795B (zh) * 2021-08-30 2024-04-26 浪潮电子信息产业股份有限公司 一种异步fifo存储器读写控制方法、装置及设备
CN117348929A (zh) * 2022-06-29 2024-01-05 中科寒武纪科技股份有限公司 指令执行方法、系统控制器及相关产品

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007287142A (ja) * 2006-04-13 2007-11-01 Internatl Business Mach Corp <Ibm> チケット・ベースの動作の追跡をサポートするデータを処理するためのデータ処理システムおよび方法
US20110145450A1 (en) * 2009-12-14 2011-06-16 Sanjay Mansingh Transaction id filtering for buffered programmed input/output (pio) write acknowledgements
US8122177B1 (en) * 2009-05-19 2012-02-21 Xilinx, Inc. Direct memory access technique for use with PCIe endpoints

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5790887A (en) 1996-02-15 1998-08-04 International Business Machines Corporation Method and apparatus for processing programmed input/output (PIO) operations in a computer system
US6073210A (en) * 1998-03-31 2000-06-06 Intel Corporation Synchronization of weakly ordered write combining operations using a fencing mechanism
US6965563B1 (en) * 2000-09-28 2005-11-15 Western Digital Ventures, Inc. Resource reservation system in a computer network to support end-to-end quality-of-service constraints
US7146482B2 (en) 2003-11-25 2006-12-05 International Business Machines Corporation Memory mapped input/output emulation
US7522597B2 (en) 2004-08-30 2009-04-21 International Business Machines Corporation Interface internet protocol fragmentation of large broadcast packets in an environment with an unaccommodating maximum transfer unit
US7353301B2 (en) * 2004-10-29 2008-04-01 Intel Corporation Methodology and apparatus for implementing write combining
US7610528B2 (en) * 2006-02-14 2009-10-27 Atmel Corporation Configuring flash memory
US7428610B2 (en) 2006-02-14 2008-09-23 Atmel Corporation Writing to flash memory
US8213294B2 (en) 2006-06-27 2012-07-03 International Business Machines Corporation Mechanism for detecting and clearing I/O fabric lockup conditions for error recovery
JP5002201B2 (ja) * 2006-06-30 2012-08-15 株式会社東芝 メモリシステム
US8484307B2 (en) 2008-02-01 2013-07-09 International Business Machines Corporation Host fabric interface (HFI) to perform global shared memory (GSM) operations
US8566508B2 (en) 2009-04-08 2013-10-22 Google Inc. RAID configuration in a flash memory data storage device
US9021146B2 (en) 2011-08-30 2015-04-28 Apple Inc. High priority command queue for peripheral component
IN2012DE00981A (ja) * 2012-03-30 2015-09-11 Moser Baer India Ltd
US9477631B2 (en) 2014-06-26 2016-10-25 Intel Corporation Optimized credit return mechanism for packet sends
US9460019B2 (en) 2014-06-26 2016-10-04 Intel Corporation Sending packets using optimized PIO write sequences without SFENCEs

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007287142A (ja) * 2006-04-13 2007-11-01 Internatl Business Mach Corp <Ibm> チケット・ベースの動作の追跡をサポートするデータを処理するためのデータ処理システムおよび方法
US8122177B1 (en) * 2009-05-19 2012-02-21 Xilinx, Inc. Direct memory access technique for use with PCIe endpoints
US20110145450A1 (en) * 2009-12-14 2011-06-16 Sanjay Mansingh Transaction id filtering for buffered programmed input/output (pio) write acknowledgements

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7479373B2 (ja) 2019-01-31 2024-05-08 インターナショナル・ビジネス・マシーンズ・コーポレーション 入出力ストア命令をハンドリングする方法、システム、およびプログラム

Also Published As

Publication number Publication date
CN106415515A (zh) 2017-02-15
US9588899B2 (en) 2017-03-07
EP3161649A1 (en) 2017-05-03
EP3161649A4 (en) 2018-03-28
US20170177516A1 (en) 2017-06-22
JP6377844B2 (ja) 2018-08-22
US20160371056A1 (en) 2016-12-22
CN106415515B (zh) 2019-06-25
US20170017465A1 (en) 2017-01-19
US9460019B2 (en) 2016-10-04
US10073796B2 (en) 2018-09-11
WO2015199946A1 (en) 2015-12-30
US9734077B2 (en) 2017-08-15
EP3161649B1 (en) 2019-07-24
US20150378737A1 (en) 2015-12-31

Similar Documents

Publication Publication Date Title
JP6377844B2 (ja) Sfenceを用いずに最適化されたpio書込みシーケンスを用いるパケット送信
US9984020B2 (en) Optimized credit return mechanism for packet sends
US9785359B2 (en) Sending packets using optimized PIO write sequences without sfences and out of order credit returns
US11194753B2 (en) Platform interface layer and protocol for accelerators
US8489794B2 (en) Processor bus bridge for network processors or the like
EP3140748B1 (en) Interconnect systems and methods using hybrid memory cube links
JP2018045700A (ja) ネットワークプロセッサにおけるマルチコア相互接続
JP2014509427A (ja) Pciエクスプレス・マルチプル・ルートi/o仮想化環境における低待ち時間の優先順位付け
JP2005092630A (ja) メモリ制御装置及び制御方法
KR101736460B1 (ko) 크로스-다이 인터페이스 스누프 또는 글로벌 관측 메시지 오더링
EP3841484B1 (en) Link layer data packing and packet flow control scheme
CN116614558A (zh) 具有端到端可靠性和定序协议的收发器系统
Baier et al. High-Speed Torus Interconnect Using FPGAs

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180116

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20180411

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180614

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180626

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180725

R150 Certificate of patent or registration of utility model

Ref document number: 6377844

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250