KR102223441B1 - 패킷 송신을 위한 최적화된 크레딧 리턴 메커니즘 - Google Patents
패킷 송신을 위한 최적화된 크레딧 리턴 메커니즘 Download PDFInfo
- Publication number
- KR102223441B1 KR102223441B1 KR1020167033013A KR20167033013A KR102223441B1 KR 102223441 B1 KR102223441 B1 KR 102223441B1 KR 1020167033013 A KR1020167033013 A KR 1020167033013A KR 20167033013 A KR20167033013 A KR 20167033013A KR 102223441 B1 KR102223441 B1 KR 102223441B1
- Authority
- KR
- South Korea
- Prior art keywords
- transmission
- transmit
- fifo
- context
- memory
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/12—Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor
- G06F13/124—Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine
- G06F13/128—Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine for dedicated transfers to a network
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/36—Handling requests for interconnection or transfer for access to common bus or bus system
- G06F13/368—Handling requests for interconnection or transfer for access to common bus or bus system with decentralised access control
- G06F13/372—Handling requests for interconnection or transfer for access to common bus or bus system with decentralised access control using a time-dependent priority, e.g. individually loaded time counters or time slot
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1673—Details of memory controller using buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/36—Handling requests for interconnection or transfer for access to common bus or bus system
- G06F13/362—Handling requests for interconnection or transfer for access to common bus or bus system with centralised access control
- G06F13/3625—Handling requests for interconnection or transfer for access to common bus or bus system with centralised access control using a time dependent access
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4204—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
- G06F13/4221—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4265—Bus transfer protocol, e.g. handshake; Synchronisation on a point to point bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/167—Interprocessor communication using a common memory, e.g. mailbox
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/06—Methods 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/065—Partitioned buffers, e.g. allowing multiple independent queues, bidirectional FIFO's
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2205/00—Indexing scheme relating to group G06F5/00; Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F2205/06—Indexing scheme relating to groups G06F5/06 - G06F5/16
- G06F2205/067—Bidirectional FIFO, i.e. system allowing data transfer in two directions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0026—PCI express
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/28—DMA
- G06F2213/2806—Space or buffer allocation for DMA transfers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/36—Arbitration
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Software Systems (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Multi Processors (AREA)
Abstract
패킷 송신을 위한 최적화된 크레딧 리턴 메커니즘을 구현하기 위한 방법 및 장치가 개시된다. 프로그램된 입출력(PIO) 송신 메모리는 패킷 데이터를 저장하도록 구성된 복수의 송신 블록을 포함하는 메모리 버퍼를 각각 포함하는 복수의 송신 콘텍스트 내로 파티셔닝된다. FIFO 시맨틱스를 사용하는 저장 스킴은 각각의 FIFO 슬롯과 연계된 각각의 송신 블록으로 구현된다. 송신 블록에 기록된 패킷 데이터를 수신하고 이들 내의 데이터를 검출하는 것에 응답하여, 송신 블록은 송신 콘텍스트로부터 이그레스되고, 대응 프리하게 된 FIFO 슬롯이 검출되고, 크레딧 리턴 표식이 리턴되지 않은 최하위 슬롯이 결정된다. 최하위 슬롯으로부터 프리하게 된 슬롯의 시퀀스 내의 최상위 슬롯이 이어서 결정되고, 대응 크레딧 리턴 표식이 리턴된다. 일 실시예에서, 절대 크레딧 리턴 카운트가 각각의 송신 콘텍스트에 대해 구현되고, 연계된 절대 크레딧 송신 카운트가 PIO 송신 메모리에 기록하는 소프트웨어를 거쳐 트래킹되고, 2개의 절대 크레딧 카운트가 흐름 제어를 위해 사용된다.
Description
고성능 컴퓨팅(High-performance computing: HPC)은 최근에 사용량 및 관심 면에서 상당한 증가를 보이고 있다. 역사적으로, HPC는 일반적으로 소위 "슈퍼컴퓨터(Super computer)"와 연계되었다. 슈퍼컴퓨터는 1960년대에 소개되었고, 초기에 그리고 수십년 동안 콘트롤 데이터 코포레이션(Control Data Corporation: CDC), 크레이 리서치(Cray Research) 및 크레이의 이름 또는 모노그램을 딴 후속의 회사에서 세이모어 크레이(Seymour Cray)에 의해 주로 제조되었다. 1970년대의 슈퍼컴퓨터는 단지 몇개의 프로세서만을 사용하였지만, 1990년대에는 수천개의 프로세서를 갖는 기계가 출현하기 시작하였고, 더 최근에는 수십만개의 "기성품(off-the-shelf)" 프로세서를 갖는 대규모 병렬 슈퍼컴퓨터가 구현되고 있다.
다양한 레벨의 스케일 및 성능에 따라, 구현 및 연구 지향되는 다수의 유형의 HPC 아키텍처가 존재한다. 그러나, 공통 맥락은 병렬 방식으로 작업을 협동적으로 수행하기 위한, 프로세서 및/또는 프로세서 코어와 같은 많은 수의 연산 유닛의 상호접속이다. 최근의 시스템 온 칩(System on a Chip: SoC) 디자인 및 제안 하에서, 수십개의 프로세서 코어 등이 2차원(2D) 어레이, 원환체(torus), 링, 또는 다른 구성을 사용하여, 단일의 SoC 상에 구현된다. 부가적으로, 연구자들은 수백개 또는 심지어 수천개의 프로세서 코어가 3D 어레이에서 상호접속되어 있는 3D SoC를 제안하고 있다. 개별의 멀티코어 프로세서 및 SoC는 또한 서버 보드 상에 밀접하게 이격되어 있을 수 있고, 이 서버 보드들은 이어서 백플레인 등을 거쳐 통신하여 상호접속되어 있다. 다른 통상의 접근법은 서버의 랙(예를 들어, 블레이드 서버 및 모듈) 내에 연산 유닛을 상호접속하는 것이다. 한때 세계에서 가장 빠른 슈퍼컴퓨터였던 것으로 내세웠던 IBM의 세쿼이아(Sequoia)는 총 1,572,864개의 96개의 서버 블레이드/모듈의 랙을 포함하고, 최고 성능 하에서 동작할 때 엄청난 7.9 메가와트를 소비한다.
HPC에 대한 성능 병목 중 하나는 연산 노드들 사이의 상호접속부를 통한 데이터 전달로부터 발생하는 지연시간(latency)이다. 통상적으로, 상호접속부는 계층(hierarchy)의 최상위에 프로세서/SoC 내에 최고 속도 및 최단 상호접속부를 갖는 상호접속 계층으로 구조화되고, 반면에 지연시간은 계층 레벨을 아래로 진행함에 따라 증가한다. 예를 들어, 프로세서/SoC 레벨 후에, 상호접속 계층은 프로세서간 상호접속 레벨, 보드간 상호접속 레벨, 및 개별 서버의 개별 서버 또는 집성(aggregation)을 다른 랙 내의 서버/집성과 접속하는 하나 이상의 부가의 레벨을 포함할 수 있다.
최근에, 백플레인 및 구리 케이블에 걸친 100 Gb/s 동작을 위한 물리적 레이어(Physical Layer: PHY) 사양 및 관리 파라미터를 정의하는 IEEE 802.3bj 드래프트 표준에 지정된 것과 같은, 초당 100 기가비트(100 Gb/s)의 속도를 갖는 상호접속 링크가 도입되어 있다. 유사한(100 Gb/s까지) 속도를 갖는 링크를 포함하는 메시형 상호접속 구조체가 개발되어 HPC 환경을 위해 설계되었다. 이러한 고속 링크 및 상호접속부의 가용성은 패브릭(fabric)으로부터의 성능 제한을 패킷의 소프트웨어 발생 및 상호접속부로 그리고 상호접속부로부터 전달될 패킷 데이터의 핸들링으로 시프트한다.
본 발명의 상기 양태 및 다수의 부수적인 장점은, 달리 지시되지 않으면 유사한 도면 부호가 다양한 도면 전체에 걸쳐 유사한 부분을 나타내는 첨부 도면과 함께 취할 때, 이하의 상세한 설명을 참조하여 더 양호하게 이해됨에 따라 더 즉시 이해될 수 있을 것이다.
도 1은 일 실시예에 따른 호스트 패브릭 인터페이스(Host Fabric Interface: HFI)를 포함하는 시스템의 개략도이다.
도 2는 일 실시예에 따른 PIO 송신 메모리 및 SDMA 메모리의 다양한 양태를 도시하는 개략도이다.
도 3은 PIO 송신 물리적 어드레스 공간의 예를 도시하는 블록도이다.
도 4는 가상 어드레스 공간, 디바이스 물리적 어드레스 공간, 및 PIO 송신 메모리 어드레스 공간 사이의 예시적인 어드레스 맵핑을 도시하는 블록도이다.
도 5는 일 실시예에 따른 송신 버퍼의 레이아웃을 도시하는 블록도이다.
도 6a는 도 1의 시스템의 선택적 요소의 추가의 상세를 도시하는 개략도이다.
도 6b는 저장 버퍼에 기록되고, PIO 송신 메모리 내의 송신 버퍼에 포워딩되는 패킷 데이터의 2개의 블록을 도시하는 개략도이다.
도 7a 내지 도 7f는 패킷 이그레스(egress)를 통한 메모리로부터 PIO 송신 메모리로의 패킷 데이터의 예시적인 전달에 대응하는 송신 시간프레임을 도시하는 개략도이다.
도 8a 내지 도 8e는 512-비트 기록 인스트럭션을 사용하여 패킷 이그레스를 통한 메모리로부터 PIO 송신 메모리로의 패킷 데이터의 예시적인 전달에 대응하는 송신 시간프레임을 도시하는 개략도이다.
도 9a 및 도 9b는 각각 sfence를 갖고 갖지 않는 PIO 송신 기록을 위한 데이터 전달 지연시간의 비교를 도시하는 시간흐름도이다.
도 10은 일 실시예에 따른 이그레스 블록의 개략도이다.
도 11은 HFI에 결합된 패브릭 링크 상의 이그레스 아웃바운드를 위한 패킷 데이터를 준비하는데 구현된 동작, 페이즈, 및 상태를 도시하는 흐름도이다.
도 12는 일 실시예에 따른, PIO 송신 어드레스 FIFO 및 크레딧 리턴 FIFO를 도시하는 도면이다.
도 13은 일 실시예에 따른, HFI를 포함하는 시스템 노드의 개략도이다.
도 14는 2개의 HFI를 포함하는 ASIC의 개략도이다.
도 1은 일 실시예에 따른 호스트 패브릭 인터페이스(Host Fabric Interface: HFI)를 포함하는 시스템의 개략도이다.
도 2는 일 실시예에 따른 PIO 송신 메모리 및 SDMA 메모리의 다양한 양태를 도시하는 개략도이다.
도 3은 PIO 송신 물리적 어드레스 공간의 예를 도시하는 블록도이다.
도 4는 가상 어드레스 공간, 디바이스 물리적 어드레스 공간, 및 PIO 송신 메모리 어드레스 공간 사이의 예시적인 어드레스 맵핑을 도시하는 블록도이다.
도 5는 일 실시예에 따른 송신 버퍼의 레이아웃을 도시하는 블록도이다.
도 6a는 도 1의 시스템의 선택적 요소의 추가의 상세를 도시하는 개략도이다.
도 6b는 저장 버퍼에 기록되고, PIO 송신 메모리 내의 송신 버퍼에 포워딩되는 패킷 데이터의 2개의 블록을 도시하는 개략도이다.
도 7a 내지 도 7f는 패킷 이그레스(egress)를 통한 메모리로부터 PIO 송신 메모리로의 패킷 데이터의 예시적인 전달에 대응하는 송신 시간프레임을 도시하는 개략도이다.
도 8a 내지 도 8e는 512-비트 기록 인스트럭션을 사용하여 패킷 이그레스를 통한 메모리로부터 PIO 송신 메모리로의 패킷 데이터의 예시적인 전달에 대응하는 송신 시간프레임을 도시하는 개략도이다.
도 9a 및 도 9b는 각각 sfence를 갖고 갖지 않는 PIO 송신 기록을 위한 데이터 전달 지연시간의 비교를 도시하는 시간흐름도이다.
도 10은 일 실시예에 따른 이그레스 블록의 개략도이다.
도 11은 HFI에 결합된 패브릭 링크 상의 이그레스 아웃바운드를 위한 패킷 데이터를 준비하는데 구현된 동작, 페이즈, 및 상태를 도시하는 흐름도이다.
도 12는 일 실시예에 따른, PIO 송신 어드레스 FIFO 및 크레딧 리턴 FIFO를 도시하는 도면이다.
도 13은 일 실시예에 따른, HFI를 포함하는 시스템 노드의 개략도이다.
도 14는 2개의 HFI를 포함하는 ASIC의 개략도이다.
패킷 송신을 위한 최적화된 크레딧 리턴 메커니즘을 구현하기 위한 방법 및 장치의 실시예가 본 명세서에 설명된다. 이하의 설명에서, 수많은 특정 상세가 본 발명의 실시예의 철저한 이해를 제공하기 위해 설명된다. 그러나, 당 기술 분야의 숙련자는 본 발명이 특정 상세 중 하나 이상 없이, 또는 다른 방법, 구성요소, 재료 등을 갖고 실시될 수 있다는 것을 인식할 수 있을 것이다. 다른 경우에, 공지의 구조, 재료, 또는 동작은 본 발명의 양태를 불명료하게 하는 것을 회피하기 위해 상세히 도시되거나 설명되지 않는다.
명료화를 위해, 본 출원의 도면 내의 개별 구성요소는 또한 특정 도면 부호에 의해서보다는, 도면 내의 이들의 라벨에 의해 나타낼 수도 있다. 부가적으로, 특정 유형의 구성요소(특정 구성요소에 대조적으로)를 나타내는 도면 부호는 "전형적인(typical)"을 의미하는 "(typ)"에 이어지는 도면 부호를 갖고 도시될 수도 있다. 이들 구성요소의 구성은 간단화 및 명료화를 위해 표기되지 않은 도면에 도시된 유사한 구성요소의 전형일 것이다. 역으로, "(typ)"는 구성요소, 요소 등이 그 개시된 기능, 구현, 목적 등을 위해 전형적으로 사용되는 것을 의미하는 것으로서 해석되어서는 안된다.
도 1은 시스템 메모리와 패브릭 인터페이스 사이의 증가된 패킷 데이터 처리량을 용이하게 하는 패킷 데이터 핸들링 기술의 양태를 도시하기 위해 본 명세서에 사용된 예시적인 시스템(100)을 도시한다. 시스템(100)은 주변기기 구성요소 인터넷 익스프레스(Peripheral Component Internet Express: PCIe) 상호접속부(105)를 거쳐 호스트 프로세서(104)에 결합된 호스트 패브릭 인터페이스(HFI)(102)를 포함하고, 이 PCIe 상호접속부는 이어서 메모리 상호접속부(107)를 거쳐 메모리(106)(또한 통상적으로 시스템 메모리라 칭함)에 결합된다. HFI(102)는 패브릭 포트(112)의 전송 포트(110)에 결합된 전송 엔진(108), 및 패브릭 포트(112)의 수신 포트(116)에 결합된 수신 엔진(114)을 포함한다. 전송 엔진(108) 및 수신 엔진(114)의 각각은 또한 PCIe 상호접속부(105)를 거쳐 HFI(102)와 프로세서(104) 사이의 통신을 용이하게 하는 PCIe 인터페이스(I/F)(118)에 결합된다.
전송 엔진(108)은 송신 메모리(120), 복수의 송신 DMA(SDMA) 엔진(123)을 포함하는 송신 직접 메모리 액세스(Send Direct Memory Access: Send DMA) 블록(122), 버퍼(124), 이그레스 블록(126), 및 크레딧 리턴 메커니즘(127)을 포함한다. 수신 엔진(114)은 Rx 수신 블록(128), 수신 버퍼(130), DMA 엔진(132), 중앙 제어 엔진(Central Control Engine: CCE)(134), 파서(parser)(136), 파이프라인 블록의 세트(138) 및 수신 레지스터 어레이(RevArray)(140)를 포함한다. "송신" 엔진이라 또한 칭하는 전송 엔진(108)은 패브릭 링크(예를 들어, 전송 포트(110)에 결합된 패브릭 링크, 도시 생략)로의 이그레스를 위한 패킷을 발생한다. 송신 엔진에 의해 제공된 2개의 상이한 메커니즘은 PIO 송신 및 송신 DMA이다.
PIO 송신은 "프로그램된 입출력(Programmed Input/Output)" 송신의 약어이다. PIO는 또한 "메모리-맵핑된 입출력(Memory-mapped Input/Output: MMIO)"으로서 공지되어 있다. PIO 송신 호스트 프로세서(104)는 저장 명령을 사용하여 패킷의 헤더 및 페이로드를 메모리-맵핑된 송신 버퍼 내로 기록함으로써 패킷을 발생한다. PIO 송신은 프로세서가 패킷을 HFI(102)에 푸시하는 개념에서 패킷 "푸시"로서 고려될 수 있다. 송신 메모리(120) 내에 구현된 송신 버퍼는 어댑터의 물리적 어드레스 공간 내에 있어, 송신 버퍼로의 프로세서 기록이 PCIe 상호접속부(105) 및 PCIe 인터페이스(118)를 거쳐 송신 메모리(120)에 전달된 PCIe 기록 트랜잭션으로 전환되게 된다.
송신 메모리(120) 내의 다수의 송신 버퍼에 더하여 송신 버퍼 크레딧을 호스트 프로세서(104)에 재차 리턴하는데 사용된 메커니즘은 "송신 콘텍스트(context)"라 칭한다. 일 실시예에서, 최대 160개의 독립적인 송신 콘텍스트가 HFI(102)에 의해 제공되어, PIO 송신 메커니즘의 최대 160명의 동시의 독립적인 사용자를 허용한다. PIO 송신은 송신 콘텍스트를 직접 사용자 프로세스의 가상 어드레스 맵 내로 맵핑함으로써 사용자-모드 소프트웨어로부터 직접 사용될 수 있다.
PIO 송신은 송신 패킷을 위한 낮은 지연시간 및 높은 메시지 레이트를 전달하는 매우 낮은 오버헤드 송신 메커니즘을 제공한다. 호스트 프로세서(104)의 기록-조합 및 저장 버퍼 특징이 적절한 경우에, 대역폭을 향상시키기 위해 PCIe 상호접속부 및 인터페이스에 걸쳐 64 B(바이트) 기록 내로 더 소형의 기록을 집성하는데 사용된다. 호스트 프로세서(104)는 송신 버퍼에 패킷의 바이트를 기록하는데(본질적으로 메모리 카피) 연관되기 때문에, PIO 송신 메커니즘은 프로세서 집약적이다. 이들 성능 특징은 PIO 송신을 소형 내지 중형 크기의 메시지에 대해 고도로 최적화되게 한다.
송신 DMA 또는 SDMA로 약칭되는 송신 직접 메모리 액세스는 프로세서 메모리 카피를 제거하여, 패킷이 상당히 더 낮은 프로세서 이용을 갖고 전송 엔진(108)에 송신될 수 있게 한다. PIO 송신 메커니즘에서와 같이 프로세서 기록을 사용하여 HFI(102)에 패킷을 푸시하는 대신에, 송신 DMA 블록(122) 내의 SDMA 엔진(123)은 호스트 메모리(106)로부터 패킷 헤더 및 페이로드를 직접 풀링하여(pull) 패브릭 링크로 이그레스하는 패킷을 형성한다. 일 실시예에서, 송신 DMA 블록(122)은 16개의 독립적인 SDMA 엔진(123)을 지원하고, 그 각각은 그 자신의 SDMA 대기열(queue)과 연계된다.
송신 PIO 및 SDAM의 모두는 패킷을 송신하기 위한 저장 후 포워딩 접근법(store-and-forward approach)을 사용한다. 헤더 및 페이로드는 패킷이 링크에 이그레스하기 시작할 수 있기 전에 전송 엔진(108) 상에 송신 버퍼에 의해 완전히 수신되어야 한다. 송신 버퍼 메모리는 이 목적으로 HFI(102) 상에 제공되고, 개별 송신 버퍼 메모리는 도 1에 도시된 바와 같이, 송신 메모리(120) 및 SDMA 버퍼(124)로서 송신 PIO에 대해 그리고 SDMA에 대해 제공된다. 일 실시예에서, 이 파티셔닝은 HFI 디자인 내로 유선 접속되고 소프트웨어 구성가능하지 않다. 그러나, 송신 PIO를 위한 송신 메모리(120)는 송신 버퍼 크레딧의 입도(granularity)에서 소프트웨어 제어 하에서 콘텍스트를 송신하도록 할당될 수 있다. 유사하게, SDMA 버퍼(124) 내의 송신 버퍼 메모리는 동일한 입도에서 SDMA 엔진(123)에 할당될 수 있다.
수신 엔진(114)의 기본 기능은 수신 포트(116)에서 수신된 인바운드(패브릭으로부터) 패킷의 헤더 및 페이로드를 분리하고, 패킷 헤더 및 페이로드 데이터를 호스트 메모리(106) 내로 기록하는 것이다. 일 실시예에서, HFI(102)를 위해 예정된 패킷 데이터는 수신 포트(116)에서 수신된 "플릿(flit)"(플릿 스트림)을 포함하는 데이터 유닛의 스트림으로서 패브릭의 링크를 거쳐 전달되고, 여기서 플릿은 이후에 수신 엔진(114)으로 포워딩되는 패킷 내로 재조합된다. 착신 패킷 데이터는 먼저 Rx 수신 블록(128)에서 프로세싱되고, 여기서 패킷 헤더 내의 다양한 필드가 추출되고 점검되어 패킷의 유형을 결정한다. 패킷 데이터(그 데이터 페이로드)는 수신 버퍼(130) 내에서 버퍼링되고, 반면에 패킷 헤더는 파서(136)로 포워딩되는데, 이 파서는 추가의 동작이 파이프라인 동작(138)에 의해 수행되는 상태로, 그 목적지 어드레스 및 다른 필드 데이터를 추출하도록 헤더 데이터를 파싱한다. 적용가능한 파이프라인 동작과 함께, 패킷 데이터는 수신 버퍼(130)로부터 판독되고, 패킷 데이터를 PCIe DMA 기록을 거쳐 메모리(106)에 포워딩하도록 구성된 DMA 엔진(132)을 거쳐 포워딩된다.
도 1은 CLK1 및 CLK2에 의해 도시된 바와 같은, 2개의 클럭 도메인의 사용을 도시하는데 사용된 수직 점선(146)을 또한 도시하고 있다. 몇몇 실시예에서, PCIe 인터페이스(118)를 위해 사용된 클럭 주파수는 각각의 클럭 도메인을 위해 사용된 개별 참조 클럭을 갖고, HFI 구성요소의 나머지를 위해 사용된 클럭 주파수와는 상이할 수 있다. 도시되지는 않았지만, 전송 포트(110) 및 수신 포트(116) 내에 사용된 클럭 도메인은 또한 전송 엔진(108) 및 수신 엔진(114)에 의해 채용된 클럭 도메인으로부터 분리될 수 있다.
도 2는 송신 PIO 및 SDMA 동작의 추가의 상세를 도시한다. 도시된 바와 같이, 최대 160개의 송신 콘텍스트가 송신 PIO 패킷 데이터와 관련하여 채용될 수 있다. 각각의 송신 콘텍스트는 그 송신 콘텍스트에 할당된 PIO 송신 메모리(120)의 인접한 슬라이스를 포함한다. 송신 콘텍스트를 위한 송신 버퍼는 따라서 호스트 물리적 어드레스 공간 내에서 인접할 것이다. 사용자 프로세스를 위한 사용자 가상 어드레스 공간 내로의 이 송신 버퍼의 통상의 맵핑은 또한 전형적으로 가상적으로 인접할 것이다. 일 실시예에서, 송신 버퍼 내의 송신 블록은 64 B 블록을 포함하여, 각각의 송신 콘텍스트가 n×64 B를 포함하게 되고, 여기서 n은 >0의 정수이다. 일 실시예에서, 송신 블록은 64 B 경계 상에 정렬되지만, 어떠한 부가의 정렬 제약도 송신 버퍼 할당에 배치되지 않는다. 일 실시예에서, 송신 콘텍스트를 위해 할당된 송신 버퍼의 크기는 한도를 갖는다. 예를 들어, 일 실시예에서, PIO 송신 메모리(120)의 크기는 1 MB(1,048,576 바이트)이고, 최대 송신 버퍼 크기는 64 KB(n=1024)이다.
일 실시예에서, 호스트 프로세서(104)는 4 KB 페이지 입도를 사용하는 메모리 페이징을 채용한다. 그러나, 호스트 가상 어드레스 공간 내로의 송신 버퍼 메모리 맵핑은 4 KB 페이지 입도에 있도록 요구되는 것은 아니다.
이 아키텍처 선택은 호스트 프로세서의 4 KB 페이징 메커니즘이 송신 버퍼가 64 B 입도에 있을 때 2개의 송신 콘텍스트 사이의 보호를 제공하는데 충분하지 않은 것을 의미한다. 간단한 어드레스 공간 리맵핑이 베이스 오프셋 및 송신 콘텍스트당 바운드를 사용하여 HFI(102)에 의해 구현된다. 이는 특정 콘텍스트에 대해 송신 버퍼에 액세스하는데 사용된 물리적 어드레스 내에 송신 콘텍스트 넘버를 포함함으로써 성취된다. 따라서, 송신 콘텍스트 넘버는 드라이버가 사용자 프로세스를 위해 셋업하는 맵핑의 물리적 어드레스 내에 포함된다. HFI(102)는 기록되는 송신 콘텍스트를 식별하기 위해 송신 버퍼 상에 기록에 대해 이 정보를 사용하고, 송신 콘텍스트가 송신 버퍼 메모리 내의 그 특정 송신 블록에 액세스를 갖는 것을 유효화하기 위해 그 송신 콘텍스트에 대한 정보를 룩업하기 위해 그 값을 사용하고, 이어서 인덱스로의 어드레스를 송신 버퍼 메모리 내로 리맵핑한다. 이 접근법은 각각의 송신 버퍼의 시작점이 HFI의 어드레스 맵 내의 4 KB 페이지에 할당되게 하면서, 여전히 64 B 입도에서 송신 버퍼 메모리를 공유하게 한다.
전술된 바와 같이, 송신 버퍼당 송신 버퍼 메모리의 최소량은 하나의 송신 블록(n=1)에 대응하는 64 B이다. 송신 버퍼당 송신 버퍼 메모리의 최대량은 1024개의 송신 블록인 64 KB이다. 일 실시예에서, 이 한도는 PIO 송신 메커니즘에 의해 어드레싱을 위해 사용된 물리적 어드레스 맵의 양을 제한하도록 배치된다. 부가적으로, 하나 이상의 어드레스 비트는 새로운 패킷의 시작점이 아닌 송신 블록에 대한 새로운 패킷의 시작점(SOP)인 송신 블록들을 구별하는데 사용된다. 이 인코딩은 패킷 경계가 묘사되게 하고, PIO 송신 메커니즘의 사용량의 정확도에 대한 세너티 체크(sanity check)를 제공한다. 부가적으로, SOP 송신 블록 내의 처음의 8 B는 버퍼당 제어(Per Buffer Control: PBC) 정보를 HFI(102)에 패스하는데 사용된다. PBC는 패킷 데이터 자체의 부분이 아니라, 패킷에 대한 중요한 제어 정보를 포함하는 64-비트 제어 쿼드워드(quadword: QW)이다. 어드레스 내의 SOP 비트는 어댑터가 송신 버퍼로의 기록의 착신 스트림 내에 PBC 값을 로케이팅하게 한다.
일 실시예에서, PIO 송신 물리적 어드레스 공간의 디코딩은 이하의 표 1에 정의되고 도 3에 도시된다. 도 3에 도시된 실시예에서, PIO 송신 버퍼 메모리에 의해 점유된 물리적 어드레스 공간의 총량은 32 MB이다.
어드레스 비트 | 해석 |
어드레스 [24] | 0 = 패킷의 시작점이 아님, 1 = 패킷의 시작점(SOP) |
어드레스 [23:16] | 송신 콘텍스트 넘버(160개의 콘텍스트에 어드레스 하기 위한 8 비트) |
어드레스 [15:0] | 최대 64 KB 송신 버퍼 내의 바이트 어드레스 송신 버퍼는 0x0000에서 시작하고 이를 넘어 다수의 64 B 송신 블록에 대해 연장함 |
어드레스 맵핑 프로세스의 3개의 예가 도 4에 도시되어 있다. 3개의 예시적인 콘텍스트는 송신 버퍼 메모리 내에 인접해 있고 4 KB 페이지 정렬되지 않지만, 콘텍스트 넘버에 의해 디바이스 물리적 어드레스 공간 내에서 분리되어, 송신 콘텍스트를 가로질러 공유하지 않고 호스트 가상 어드레스 공간 내로 맵핑될 수 있게 된다는 것을 주목하라. 이러한 것의 극단적인 예는 PIO 송신 메모리(120) 내의 송신 버퍼 메모리의 동일한 4 KB 가치 상에 각각 맵핑된 하나의 64 B 송신 블록의 64개의 상이한 송신 콘텍스트를 사용하는 64개의 사용자 프로세스일 것이다.
예로서, 송신 콘텍스트 0의 어드레스 맵핑을 고려한다. 이 송신 콘텍스트는 사용자 프로세스 가상 어드레스 공간의 64개의 블록 또는 4 KB를 포함한다. 콘텍스트는 디바이스 물리적 어드레스 공간의 비트 [23:16] 내에 인코딩되고, 반면에 가상 어드레스 비트 [11:0]은 가상-대-물리적 어드레스 변환에서 보존된다. 송신 콘텍스트가 새로운 패킷의 시작점에 대응하면, 비트 24는 ('1')로 설정되고, 그렇지 않으면 비트 24는 소거된다는('0') 것이 또한 주목된다. 물리적 어드레스-대-PIO 송신 메모리 어드레스 맵핑은 콘텍스트 어드레스 비트 [24:16]를 어드레스의 콘텍스트 베이스 비트 [15:0]에 가산한다. 또한 도시된 바와 같이, 송신 콘텍스트의 크기는 가상 메모리, 물리적 메모리, 및 PIO 송신 메모리의 각각 내에서 동일하다. 유사한 어드레스 맵핑이 송신 콘텍스트 1 및 송신 콘텍스트 2에 대해 채용된다.
PIO 송신을 위한 패킷 충전(packet fill)은 호스트 어드레스 공간 내로 맵핑된 송신 버퍼 내로 기록된다. 맵핑은 전형적으로 프로세서 기록이 캐싱되지 않고 대신에 PCIe를 거쳐 HFI(102)에 포스팅된 기록 트랜잭션으로서 푸시아웃되기 전에 최대 64 B 프로세서 저장 버퍼 크기로 시기적절하게 집성되도록 기록-결합으로서 구성된다.
일 실시예에서, HFI 아키텍처는 8 B 입도에서 PIO 송신 기록 트랜잭션을 채용한다. 이에 따라, 각각의 트랜잭션은 8 B의 배수의 크기이고, 8 B 정렬된 어드레스에서 시작한다. 일 실시예에서, 각각의 기록이 64 B 송신 블록 내에 포함되는 것을 보장하기 위해 각각의 기록이 64 B 경계를 교차하지 않는 요구가 존재한다. 이에 따라, 일 실시예에서, PIO 송신은 64 B 크기이고 64 B 정렬된 PCIe 기록을 채용한다.
최선의 성능을 위해, 소프트웨어는 오름차순 어드레스 순서로 송신 버퍼를 충전하고 64 B 전달을 위해 최적화한다. 일 실시예에서, 소프트웨어는 PIO 송신 동작을 위해 사용된 모든 송신 블록이 정확하게 충전되도록 64 B의 배수로 기록 시퀀스를 발생하도록 패딩(적용가능한 바와 같이)을 채용한다. 따라서, 인스트럭션 관점으로부터, 소프트웨어는 다음의 64 B 송신 블록에 기록을 시작하고 최종 64 B 송신 블록으로 계속하기 전에 모든 하나의 64 B 송신 블록에 기록해야 한다. 프로세서 기록 결합 메커니즘은 이들 기록을 재순서화할 수 있고, 따라서 HFI 하드웨어는 PCIe에 걸쳐 이 순서로 도달하는 이들 기록 시퀀스에 의존하지 않는다. HFI 하드웨어는 8 B 레벨에서 기록 시퀀스의 임의의 재순서화를 지원한다. sfence 인스트럭션이 기록 시퀀스에 순서화를 부여하기 위해 소프트웨어에 의해 사용될 수 있다. 그러나, sfence는 고비용의 동작이기 때문에, HFI 하드웨어는 후술되는 바와 같이 sfence의 필요성을 제거하기 위해 최적화를 제공한다.
각각의 송신 콘텍스트는 호스트 메모리 내에 맵핑된 기록 전용 송신 버퍼를 제공한다. 전술된 바와 같이, 송신 버퍼는 4 KB 정렬된 어드레스에서 시작하고, 최대 64 KB 크기이고, 64 B 블록의 단위에 있다. PIO 송신 메커니즘은 FIFO 순서로 송신 버퍼 내에 패킷을 기록함으로써 속행한다. 일 실시예에서, 각각의 패킷은 증가하는 어드레스 순서로 8 B PBC, 이어서 헤더 및 그 후에 페이로드를 기록함으로써 충전된다. 이 시퀀스에 의해 점유된 송신 버퍼의 양은 인접한 64 B 송신 블록의 정수배까지 어림되고(송신 버퍼 메모리 주위에 인접한 모듈로 방식), 소프트웨어는 모든 이들 64 B 송신 블록을 정확하게 충전하도록 그 기록 시퀀스를 패드업하도록 구성된다.
PBC는 각각의 PIO 송신에서 첫 번째 64 B 송신 블록의 첫 번째 8 B이다. 최소 PIO 송신은 하나의 송신 블록이고, 반면에 최대 지원된 패킷 크기는 128 B + 10 KB MTU(최대 전송 단위)에 대응하는 162개의 송신 블록을 요구한다. 와이어 상의 패킷 크기는 4 B의 배수이고, 따라서 어떻게 더 입상의 64 B 송신 블록이 사용되는지에 탄력성이 제공된다.
· 4 B 배수의 와이어 상의 패킷 길이는 PBC 내에 PbcLengthDWs에 지정된다.
· 64 B 배수의 충전 크기는 64 B 배수까지 PbcLengthDWs를 어림함으로써 결정된다.
· 충전 크기는 8 B PBC와 패킷 길이와 64 B 배수까지 기록 시퀀스를 유도하기 위한 임의의 요구된 패딩을 더한 값을 커버한다. 64 B 패딩 요구는 모든 송신 블록이 완전히 충전되기 때문에 하드웨어 구현예를 간단화한다. 부가적으로, 이 접근법은 패킷의 마지막 부분을 위한 기록 결합 저장 버퍼가 64 B로 충전되어 명시적 sfence 인스트럭션을 사용하지 않고 HFI로 이를 자동으로 드레인하게 하는 것을 보장함으로써 성능을 향상시킨다. 패딩 바이트는 와이어에 이그레스되는 패킷에 기여하지 않는다.
일 실시예에 따른, 송신 버퍼의 레이아웃이 도 5에 도시되어 있다. 송신 버퍼 메모리는 FIFO형 시맨틱(sematic)과 함께 사용된다. FIFO 순서는 송신 버퍼 맵핑에서 각각의 패킷을 위해 사용된 송신 블록의 어드레스 순서에 의해 규정된다. 송신 버퍼는 랩어라운드(wrap-around) 방식으로 사용된다는(예를 들어, 원형 FIFO로서 구현됨) 것을 주목하라. 이는 일단 소프트웨어가 송신 버퍼 내에 마지막 64 B를 기록하면, 송신 버퍼의 베이스에 어드레스를 재차 업데이트할 필요가 있다는 것을 의미한다. 송신 버퍼 내로의 기록은 호스트 프로세서가 패브릭에 아직 이그레스되지 않은 이전의 패킷으로부터 여전히 사용중인 송신 버퍼 블록을 덮어쓰지 않는 것을 보장하도록 크레딧 한계 및 크레딧 리턴 정책을 받게 된다. FIFO형 시맨틱스는 다음과 같다:
· 패킷이 FIFO 순서로 충전되지만, 기록 결합 구현에서 고유적인 기록의 재순서화에 대처하는 재조합 특징이 존재함.
· 패킷은 이후에 FIFO 순서로 런칭됨. 런칭 후에, 패킷은 VL 중재를 위해 적격이다.
· 패킷은 이후에 퍼-VL 런치 FIFO로부터 이그레스되고, 동일한 VL을 갖는 동일한 콘텍스트로부터 패킷에 대해 순차적(in-order)일 것이지만, 상이한 VL 상의 동일한 송신 콘텍스트로부터 패킷에 대해 비순차적(out-of-order)일 수도 있다.
· 크레딧 리턴은 원래 FIFO 순서에 있다. 이는 그 송신 콘텍스트 상의 모든 이전의 패킷이 미리 이그레스될 때까지 비순차적으로 이그레스하는 패킷을 위한 크레딧이 복구되지 않는다는 것을 의미한다.
기록 결합 맵핑은 호스트 프로세서가 패킷을 구축하는데 사용된 기록을 재순서화하게 한다. 통상의 접근법 하에서, 순서를 부여하기 위한 프로세서 아키텍처 메커니즘은 sfence 인스트럭션이다. 이는 sfence 인스트럭션 이전의 모든 기록이 sfence 인스트럭션 후의 모든 기록에 앞서 HFI에 가시화되게 되는 것을 보장한다. 그러나, 이 순서화는 집적 입출력 블록(IIO) 내의 순서화점에 저장을 발행하는 CPU 코어로부터 호스트 프로세서 내의 라운드트립(round-trip)을 필요로 하기 때문에 상당한 비용을 수반한다. 이는 상당한 지연시간을 추가하고, 더욱이 sfence 순서화가 확인응답될(acknowledged) 때까지 CPU 코어 내에서 모든 다른 저장이 완료하는 것을 방지한다. CPU의 비순차적 기능은 인스트럭션 상의 몇몇 포워드 진행이 이 지연시간을 커버하게 하지만, 이들 리소스는 곧 고갈될 수 있고, 복구를 위한 미완료된(unretired) 인스트럭션의 상당한 백로그(backlog)가 존재할 것이다. HFI 아키텍처는 기록 결합 시퀀스를 순서화하기 위해 sfence 인스트럭션을 위한 요구를 최소화하거나 제거하도록 추구한다.
제 1 최적화는 패킷 내의 sfence의 제거이다. 여기서, 일 패킷을 위한 PIO 송신 동작을 포함하는 기록은 프로세서에 의해 재순서화될 수 있고 HFI는 정확한 순서를 재조합하고, 패킷 충전이 완료되고 패킷이 런칭될 수 있도록 모든 기록이 도달할 때를 검출하기 위한 메커니즘을 제공한다. 이 최적화는 패킷 내의 송신 블록의 수에 따라 증가하는 이익을 제공한다. 제 2 최적화는 패킷들 사이의 sfence의 제거인데, 이는 HFI가 상이한 패킷 PIO 송신으로부터 인터리빙된 기록을 이들의 각각의 패킷 내로 재조합하는 것을 요구한다. 이 최적화는 단일의 64 B 송신 블록 내로 피팅하는 패킷의 통상의 예와 같은 짧은 패킷에 대해 매우 중요하다. HFI에 의해 제공된 메커니즘은 양 최적화를 커버한다.
HFI는 어드레스를 디코딩함으로써 임의의 PIO 송신 기록의 정확한 데이터 배치를 결정한다. 콘텍스트는 더 고차 어드레스 비트에서 이용가능하고, 이는 송신 콘텍스트가 전술된 베이스 및 바운드 리맵핑을 사용하는 것에 액세스를 갖는 송신 버퍼부를 결정한다. 어드레스의 최하위 16 비트는 그 송신 버퍼 내의 기록된 데이터의 배치를 결정한다. 이 접근법은 8 B 입도에서 기록이 8 B 입도로 감소된 이들 기록의 재순서화/분할/병합에 무관하게 송신 버퍼 메모리 내의 패킷 내로 항상 정확하게 재조합되는 것을 보장한다.
도 6a는 실시예에 따른 시스템(100)의 추가의 상세를 도시하고 있다. 프로세서(104)는 비순차적 실행을 지원하는 다수의 프로세서 코어를 포함하는 CPU(600)를 포함한다. 일 실시예에서, 각각의 물리적 프로세서 코어는 Intel® Corporations Hyperthreading™ 아키텍처 하에서 지원되는 것과 같은 2개의 논리적 코어로서 구현될 수 있다. 일 실시예에서, 프로세서(104)는 64-비트 프로세서이고, 각각의 코어는 복수의 64-비트(64 b) 레지스터를 포함한다. 프로세서(104)는 각각의 코어에 대해 인스트럭션 캐시(604) 및 데이터 캐시(606)로 분할되는 레벨 2(L2) 캐시(602) 및 레벨 1(L1) 캐시를 또한 포함한다. 간단화를 위해 도시되지는 않았지만, 프로세서(104)는 또한 프로세서 코어를 가로질러 공유되는 라스트 레벨 캐시(LLC)를 채용할 수 있다. 프로세서(104)는 저장 버퍼 제어 로직(609)을 거쳐 제어된 저장 버퍼(608), IIO 블록(610), 및 PCIe 인터페이스(612)를 추가로 포함한다. 프로세서(104)의 내부 구조의 일 실시예의 추가의 상세가 도 17에 도시되어 있고 후술된다.
일 실시예에서, 각각의 메모리(106), 및 L2 캐시(602)는 64-바이트 캐시라인을 채용하고, 반면에 저장 버퍼(608)는 64-바이트 저장 블록을 채용한다. 또한 도시된 바와 같이, 일 실시예에서 데이터는 "mov" 인스트럭션을 사용하여 64-비트(8-바이트) 단위로 CPU(600) 내에 64 b 레지스터로부터 저장 버퍼(608)에 기록된다. 간단화를 위해, mov 인스트럭션은 본 출원의 도면에서 "mov.q"라 표기되어 있다. 선택적으로, 데이터는 16 B 및 32 B와 같은, 다른 크기를 갖는 저장 단위를 사용하여 저장 버퍼(608)에 기록될 수도 있다. 더 상세히 후술되는 바와 같이, 일 실시예에서, 512-비트 기록 인스트럭션이 64 B 저장 블록에 64 B의 데이터를 기록하는데 사용되고, 여기서 각각의 64 B 기록은 저장 블록을 충전한다.
PIO 송신 메모리(120)는 2개의 송신 콘텍스트(송신 콘텍스트 1 및 송신 콘텍스트 2)를 포함하는 것으로서 도시되어 있지만, 실제 구현예 하에서 PIO 송신 메모리(120)는 일반적으로 다수의 더 많은 송신 콘텍스트(최대 160)를 가질 것이라는 것이 인식될 수 있을 것이다. 송신 콘텍스트는 소프트웨어 애플리케이션에 할당된다(또는 그렇지 않으면 소프트웨어 애플리케이션에 의한 사용을 위해 송신 콘텍스트의 할당을 위한 요청에 응답하여). 본 예에서, 소프트웨어 애플리케이션 'A'는 송신 콘텍스트 1에 할당되고, 반면에 소프트웨어 애플리케이션 'B'는 송신 콘텍스트 2에 할당된다. 송신 콘텍스트 1 및 2의 크기는 각각 x 및 y 64 B 송신 블록이다. 송신 콘텍스트의 초기 할당시에, 송신 콘텍스트 내의 각각의 송신 블록은 비어 있거나 또는 "프리(free)"(예를 들어, 데이터를 추가하기 위해 이용가능함)일 것이다. 진행중인 동작 중에, 송신 콘텍스트는 원형 FIFO로서 동작되고, FIFO 내의 64 B 송신 블록이 저장 버퍼(608)로부터 충전되고 패킷이 이그레스 블록(126)으로 포워딩됨에 따라 FIFO로부터 제거되고(후술되는 바와 같이, 송신 블록을 이그레스하는 것으로서 칭함), 이그레스된 송신 블록을 재사용을 위해 프리하게 한다. FIFO 콘텍스트 하에서, 각각의 송신 블록은 FIFO 슬롯에 대응하고, 데이터가 추가되는 슬롯은 PIO 송신 메모리(120) 내에 대응 메모리-맵핑된 어드레스를 갖는다.
각각의 패킷(614)은 PBC 필드, 다양한 헤더 필드(간단화를 위해 조합되어 도시되어 있음), PSM(Performance Scale Messaging: 성능 스케일 메시징) 헤더 및 PSM 데이터, 및 ICRC(불변 CRC) 필드를 포함하는 다수의 헤더 필드를 포함한다. 도시된 바와 같이, 패킷(614)의 최소 크기는 64 B인데, 이는 저장 버퍼(608) 내의 저장 블록 크기에 정합하고 송신 콘텍스트 FIFO 내의 각각의 슬롯에 대해 사용된 64 B 송신 블록 크기에 정합한다.
진행중인 동작 중에, 소프트웨어 인스트럭션은 CPU(600) 내의 코어 상에서 실행되어 메모리(106) 내의 패킷 데이터의 카피가 PIO 송신 메모리(120) 내의 송신 콘텍스트에 기록되게 한다. 먼저, 대응 인스트럭션과 함께 패킷 데이터가 메모리(106)로부터 L2 캐시(602) 내로 카피될 것이고, 인스트럭션 및 데이터는 L2 캐시(602)로부터 인스트럭션 캐시(604) 및 데이터 캐시(606)로 카피된다. 선택적으로, 패킷 데이터 및 인스트럭션은 L2 캐시(602)에 또는 인스트럭션 캐시(604) 및 데이터 캐시(606)에 미리 상주할 수 있다. CPU(600) 내의 레지스터로부터 저장 버퍼(608) 내에 8 B 저장 단위로 패킷 데이터를 기록하기 위한 mov 인스트럭션의 시퀀스는 패킷 내에 그룹화되는 것으로서 본 출원의 도면에 도시되어 있지만, 프로세서 코어는 연속적으로 mov 인스트럭션을 포함하는 인스트럭션 스레드를 실행하는 것이 인식될 수 있을 것이다. 도 6b에 도시된 바와 같이, 프로세서 코어 레지스터로부터 저장 버퍼(608) 내에 8 B 저장 단위로 데이터를 카피(기록)하기 위한 mov 인스트럭션이 프로세싱됨에 따라, 64 B 저장 블록이 충전된다. 일 실시예에서, 저장 버퍼(608)는 랜덤 액세스 방식으로 동작하고, 그 랜덤 액세스 동작 하에서, 저장 블록의 어드레스는 PIO 송신 메모리(120) 내에 데이터를 저장하기 위해 사용되는 어드레싱에 관련되지 않는다. 저장 버퍼 블록 충전 검출 메커니즘이 소정의 64 B 저장 블록이 충전될 때를 결정하기 위해 저장 버퍼 제어 로직(609) 내에 구현된다. 저장 블록이 충전된 것을 검출시에, 저장 블록은 PIO 송신 메모리(120) 내의 적절한 FIFO 슬롯에서 저장 버퍼(608)로부터 64 B 송신 블록으로 64 B PCIe 포스팅된 기록을 수행함으로써 "드레인"된다. 용어 "드레인됨"은 일반적으로 소프트웨어 인스트럭션을 통해 구현되는 버퍼의 "플러싱(flushing)"에 대조적으로, 64 B PCIe 포스팅된 기록이 하드웨어(예를 들어, 저장 버퍼 제어 로직(609))에 의해 발생되는 것을 시사하도록 본 명세서에 사용된다. 도 6b에 도시된 바와 같이, 시간(Tm)에, 저장 블록(616)은 가득찬 것으로서 검출되어, 저장 블록(616)이 64 B PCIe 포스팅된 기록을 거쳐 송신 콘텍스트 1에 대해 할당된 PIO 송신 메모리(120) 내의 송신 버퍼 내의 송신 블록(618)에 드레인되게 한다. 유사하게, 후속 시간(Tn)에, 저장 버퍼(608) 내의 저장 블록(620)은 가득찬 것으로서 검출되어, 저장 블록(620)이 제 2 64 B PCIe 포스팅된 기록을 거쳐 PIO 송신 메모리(120) 내의 송신 블록(622)에 드레인되게 한다. 원문자 '1' 및 '2'의 사용은 PCIe 포스팅된 기록이 본 출원의 도 6b 및 다른 도면에서 발생하는 순서를 지시하기 위한 것이다. 64 B 저장 블록을 드레인하는 것과 관련하여, 그 저장 공간은 재사용을 위해 프리하게 된다. 일 실시예에서, 저장 버퍼(608)는 프로세서/코어가 기록을 위해 이용가능한 프리한 저장 블록(64 B 경계 상의 8개의 순차적인 8 B 블록)을 식별하는 것을 가능하게 하기 위해 프로세서(또는 프로세서 코어)에 가시화되는 저장 블록 사용량 정보를 포함한다. 부가적으로, 예에서, 본 출원에서의 도면에서, 저장 블록은 순차적인 순서로 충전되는 것으로서 도시되어 있을 수도 있다. 그러나, 이는 저장 버퍼가 그 하에서 데이터를 저장하는데 사용된 특정 저장 블록이 데이터가 기록되어야 하는 PIO 송신 메모리 어드레스에 관련되지 않는 랜덤 액세스를 사용하여 동작할 수도 있기 때문에, 어떻게 데이터가 이동되는지의 표현을 간단화한다.
도 7a 내지 도 7f는 어떻게 패킷 데이터가 PIO 송신 메모리(120)에 추가되고 이후에 8 B 기록을 사용하여 8 B 저장 단위로 이그레스되는지를 도시하는 예시적인 시간 경과 시퀀스를 도시한다. 도 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와 같이 단지 한번에 단일의 인스트럭션을 실행할 수 있지만, 다수의 인스트럭션 스레드가 동시에 실행되어, 도 7a 내지 도 7f에 도시된 것들에 유사한 데이터 전달이 송신 콘텍스트 3 및 4 뿐만 아니라 도시되지 않은 송신 콘텍스트와 같은 다른 송신 콘텍스트에 대해 채용되게 된다. 이들 동시의 비동기식 데이터 전달을 지원하기 위해, 저장 버퍼는 다수의 코어 사이에 공유되도록 구성될 수 있고, 또는 개별 저장 버퍼가 특정 프로세서 아키텍처에 따라 각각의 코어에 대해 할당될 수 있다.
도 7a는 그 하에서 제 1 64 B 저장 블록(700)에 대응하는 모든 8개의 8 B 저장 단위에 데이터가 추가되어 있는 제 1 시간프레임(T1)에 대응하는데, 이는 64 바이트의 데이터가 송신 콘텍스트 1 내의 제 3 FIFO 슬롯에서 송신 블록에 기록되게 한다. 데이터가 기록될 것인 송신 블록은 도 4에 도시되어 있고 전술되는 것과 같은, PIO 기록 인스트럭션 및 가상-대-물리적-대-PIO 송신 메모리 어드레스 변환에 기초하는 그 송신 블록의 메모리 맵핑된 어드레스에 기초할 것이다. 이 송신 블록은 j 블록 길이(적용가능한 바와 같이, 패딩을 포함함)인 충전 크기를 갖는 패킷 내의 제 1 블록에 대응한다. 전술된 바와 같이, PBC 헤더는 4 B 배수의 패킷 길이를 지정하는 PbcLengthDWs 필드를 포함한다. 송신 콘텍스트 내의 패킷에 의해 점유된 공간의 양(패킷의 충전 크기)은 n 64 B 송신 블록(및 따라서 n FIFO 슬롯)을 포함하고, 여기서 n은 최대 다음의 64 B 배수로 PbcLengthDWs 필드를 어림함으로써 결정된다. 도 7a에 도시된 예에서, PbcLengthDWs 필드값으로부터 결정된 바와 같이, j=n이다.
패킷의 충전 크기를 결정하는 것과 관련하여, 패킷 데이터가 PIO 송신 메모리(120) 내의 송신 콘텍스트 내로의 패킷의 데이터의 전체(풀 패킷)의 전달을 완료하기 위해 추가되어야 하는 최종 송신 블록을 식별하기 위해 제어 정보가 발생되고, 본 출원의 도면에서, 아직 수신되지 않은 패킷 데이터의 부분을 저장하는데 사용되는 것으로서 식별되는 송신 블록은 "충전을 위한"(충전될의 의미임)으로 표시되어 있다. 저장 및 포워드 구현예 하에서, 패킷을 위한 데이터는 전체 패킷 콘텐트가 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 인스트럭션 이전의 모든 저장(예를 들어, 본 예에서 mov) 인스트럭션이 SFENCE 인스트럭션 이후의 임의의 저장 인스트럭션 이전에 전역적으로 가시화되는 SFENCE 또는 sfence(저장 펜스, 또는 도면에 SFence로서 도시되어 있음)의 사용을 통해 용이해진다. 그 결과, 종래의 접근법 하에서, SFENCE 후에 mov 인스트럭션에 참조된 패킷 데이터는 진행 패킷을 위한 모든 데이터가 저장 버퍼에 기록될 때까지 저장 버퍼에 기록될 수 없다. 이 로직을 시행하기 위해, 인스트럭션의 실행이 정지될 수 있어, 패킷 포워딩 성능의 감소를 야기한다. 게다가, SFENCE 인스트럭션은 유사한 방식으로 패킷 내의 기록 순서화를 시행하는데 사용될 수 있다. sfence를 갖고 갖지 않는 PIO 기록을 비교하는 예시가 후술되는 바와 같이, 도 9a 및 도 9b에 도시되어 있다.
본 명세서에 개시된 실시예의 양태에 따르면, SFENCE 인스트럭션의 통상의 사용이 제거되어, 개별 패킷으로부터의 저장 인스트럭션이 비순차적으로 실행될 수 있게 하여, 저장 버퍼 내의 제 2 패킷을 위한 저장이 이전의(수신된 인스트럭션 순서로) 제 1 패킷을 위한 저장의 완료 전에 시작할 수도 있다. 이러한 것의 예는 도 7a에 도시되어 있고, 여기서 패킷(P1-2)을 위한 제 1 "mov.q" 인스트럭션은 패킷(P1-1)을 위한 최종 2개의 "mov.q" 인스트럭션에 앞서 비순차적으로 실행되어, 저장 블록(706) 내의 제 1 8 B 저장 단위를 위한 데이터가 저장 버퍼(608)에 기록되게 한다. 제 1 시간프레임의 종료시에, 패킷 데이터는 j-1 64 B PCIe 포스팅된 기록을 사용하여 제 1 j-1 송신 블록(패킷(P1-1)을 위한 저장 블록(700) 및 저장 블록(702)에 의해 도시된 바와 같이)을 위한 송신 콘텍스트 1에 기록되어 있다. 전술된 바와 같이, 각각의 64 B PCIe 포스팅된 기록과 함께, 드레인되는 저장 버퍼(608) 내의 대응 블록이 프리하게 되고, 이 프리하게 된 상태는 제 2 시간프레임(T2)을 도시하는 도 7b에 도시되어 있다. 본 출원의 도면에서, 64 B PCIe 포스팅된 기록의 순서는 원문자 숫자로서 도시되어 있다. 편의상, 64 B PCIe 포스팅된 기록의 데이터 전달은 도 7a에서 숫자 '2'와 같이, 단일의 원문자 숫자에 의해 도시되어 있다.
이 제 2 시간프레임 중에, 저장 블록(704)(본 예에서 패딩을 포함함)을 위한 2개의 나머지 저장 유닛에 대응하는 데이터가 패킷(P1-1)에 대해 추가되고, 저장 블록(704)으로부터의 데이터는 64 B PCIe 포스팅된 기록을 거쳐 송신 콘텍스트 1에 기록되는데, 이는 PIO 송신 메모리로 풀 패킷 데이터를 기록하는 것을 완료한다. 이는 패킷 완료 상태를 야기하고, 이 시점에 패킷은 도 10 및 도 11에 도시되고 더 상세히 후술되는 바와 같이 패킷 런치 중재의 준비가 된다. 게다가, 시간프레임(T2) 중에, 데이터는 각각의 저장 블록(706, 708, 710)에 기록되어, 저장 블록(706, 708)을 충전하고, 반면에 저장 블록(708)의 최종 저장 단위를 충전하기 위한 mov 인스트럭션은 도시된 바와 같이, 비순차적 실행을 거쳐 일시적으로 스킵된다. 도시된 바와 같이, PBC 헤더 내의 PbcLengthDWs 값은 패킷 충전 크기가 3개의 64 B 송신 블록일 것이라는 것을 지시한다. 각각의 저장 블록(706, 710)을 충전할 때, 이들 저장 블록은 드레인되고, 대응 데이터는 64 B PCIe 포스팅된 기록을 거쳐 PIO 송신 메모리(120) 내의 송신 콘텍스트 1에 기록되어, 패킷(P1-2)의 최종 64 B 블록이 중간 송신 블록에 앞서 기록되게 한다.
클러터(clutter)를 감소시키기 위해, 각각의 mov 인스트럭션 또는 mov 인스트럭션의 세트의 결과를 도시하는 화살표의 일부는 도 7c 내지 도 7f에는 포함되어 있지 않고, 오히려 포함된 화살표는 단지 새로운 저장 버퍼 블록으로의 제 1 기록 및 기록되는 최종 블록만을 도시할 수 있다. 도 7c에 도시된 바와 같이, 제 3 시간프레임(T3) 중에, 패킷(P1-2)을 위한 나머지 데이터가 저장 블록(708)에 기록되어, 이 저장 블록 데이터가 드레인되어 PIO 송신 메모리(12) 내의 패킷(P1-2)의 중간 송신 블록에 기록되게 한다. 이는 PIO 송신 메모리로의 패킷(P1-2)의 전달을 완료하고, 따라서 패킷(P1-2)은 런치 중재를 위한 준비가 된다. 게다가, 송신 콘텍스트 2에 추가될 제 1 패킷(2개의 64 B 송신 블록의 충전 크기 및 길이를 갖는 패킷(P2-1))에 대응하는 데이터는 저장 블록(712, 714)에 기록되기 시작하고, 반면에 송신 콘텍스트 2에 대한 제 3 패킷(P1-3)을 위한 데이터는 비순차적 실행을 사용하여 저장 블록(716)에 기록되기 시작한다.
도 7d는 시간프레임(T4) 중에 데이터 전달의 상태를 도시한다. 이 시간프레임 중에, 패킷(P2-1)의 최종 16 바이트는 저장 버퍼(608)에 기록되어, 저장 블록(714)이 64 B PCIe 포스팅된 기록을 거쳐 드레인되게 하는데, 이는 PIO 송신 메모리(120) 내에 패킷(P2-1)의 제 2 송신 블록을 충전하여, 패킷(P2-1)이 런치 중재를 위해 이용가능하게 한다. 패킷(P1-3) 데이터는 저장 블록(716, 718)의 모두를 충전하도록 추가되어, 양 저장 블록을 2개의 64 B PCIe 포스팅된 기록을 거쳐 PIO 송신 메모리(120) 내의 패킷(P1-3) 데이터에 드레인하고, 또한 패킷(P1-3)을 런치 중재를 위해 이용가능하게 한다. 2개의 부가의 패킷(P2-2, P1-4)을 위한 mov 인스트럭션은 또한 시간프레임(T4)에 추가되어 있다. 패킷(P2-2)은 송신 콘텍스트 2에 추가될 제 2 패킷이고, k 64 B 블록의 크기를 갖고, 어떠한 패딩도 요구하지 않는다. 패킷(P1-4)은 송신 콘텍스트 1에 추가된 제 4 패킷이고, 64 B의 최소 크기를 가질 것이다. 저장 블록(720, 722)에 의해 도시된 바와 같이, 패킷(P2-2)의 제 1 k-1 저장 블록은 저장 버퍼(608)에 추가되고 k-1 64 B PCIe 포스팅된 기록을 거쳐 PIO 송신 메모리(120)에 기록된다. 패킷(P2-2)의 최종 8 바이트를 제외한 모두가 저장 블록(724)에 추가되어 있다. 이들 최종 8 바이트가 저장 블록(724)의 최종 8 B 저장 유닛에 기록되기 전에, 패킷(P1-4)의 제 1 8 바이트를 기록하기 위한 비순차적 mov 인스트럭션이 실행되는데, 이는 저장 블록(726)을 충전하기 시작한다. 마지막으로, 패킷(P1-2)은 VL 중재기에 의한 이그레스를 위해 선택되어 있고, 그 데이터는 FIFO 순서로 그 송신 블록을 위해 이그레스된다. 이는 동일한 송신 콘텍스트를 위한 송신 버퍼 내의 이전의 패킷을 위한 패킷 데이터가 이전의 패킷에 앞서 이그레스를 위해 선택될 수 있게 된 후에 그 데이터가 추가되고, 따라서 패킷이 송신 콘텍스트 내에 충전되어 있는 비순차적으로 이그레스되는 예를 예시하고 있다.
도 7e는 시간프레임(T5) 중에 전달의 상태를 도시한다. 패킷(P2-2)의 최종 8 바이트는 저장 블록(724)에 기록되고, 이 저장 블록은 64 B PCIe 포스팅된 기록을 거쳐 PIO 송신 메모리(120) 내의 패킷(P2-2)을 위한 최종 송신 블록에 드레인되어, 따라서 패킷(P2-2) 데이터의 기록을 완료하고 패킷(P2-2)이 런치 중재를 위해 이용가능하게 한다. 패킷(P1-4)의 나머지 56 바이트는 저장 버퍼(608) 내의 저장 블록(726)에 기록되고, 이후에 64 B PCIe 포스팅된 기록을 거쳐 PIO 송신 메모리(120)에 저장 블록 데이터를 기록한다. 수신시에, PCB PbcLengthDWs 필드가 점검되고, 이 패킷이 하나의 64 B 송신 블록의 길이를 갖는 것으로 판정되는데, 패킷(P1-4)을 위한 데이터의 전체가 이 블록 내에 포함되기 때문에, 패킷(P1-4)은 또한 충전된 상태로 마킹되고 런치 중재의 준비가 된다.
본 예에서 추가될 최종 패킷은 패킷(P2-3)인데, 이는 192 B(3×64 B)의 길이를 갖고 어떠한 패딩도 요구하지 않는다. 이 전달은 저장 버퍼(608) 내의 3개의 저장 블록(728, 730, 732)에 192 B의 패킷 데이터를 먼저 기록함으로써 실행된다. 각각의 저장 블록을 위한 8개의 mov 인스트럭션의 완료시에, 저장 블록은 PIO 송신 메모리(120)의 송신 콘텍스트 2 내의 패킷(P2-3)을 위해 할당된 각각의 송신 블록 내로 64 B PCIe 포스팅된 기록과 함께 드레인된다. 최종 64 B PCIe 포스팅된 기록의 완료시에, 패킷 기록 완료 메커니즘은 전체 패킷(P2-3)이 PIO 송신 메모리(120)에 기록되어 있다는 것을 검출하고, 따라서 패킷(P2-3)은 또한 충전 완료되고 런치 중재를 위해 이용가능한 것으로 마킹된다. 또한, 패킷(P1-1)은 이그레스를 위해 VL 중재기에 의해 선택되어 있고, 그 송신 블록은 FIFO 순서로 이그레스된다.
도시된 실시예에서, SFENCE 인스트럭션은 패킷(P2-3)을 위한 최종 mov.q 인스트럭션 후에 추가된다. 이는 패킷(P2-3)을 위한 모든 데이터가 이들 중 임의의 하나가 플러싱되기 전에 저장 블록(728, 730, 732)에 기록되는 것을 보장하기 위한 것이다. 후속의 패킷을 위한 기록 인스트럭션이 인스트럭션 스레드 내에서 바로 이어지면, 인스트럭션은 각각의 가용 저장 블록을 충전해야 하기 때문에, SFENCE 인스트럭션의 사용은 요구되지 않아, 저장 블록이 플러싱되기 전에 드레인되게 한다.
상기에 추가하여, 시간프레임(T5) 중에 각각의 패킷(P1-2) 및 패킷(P2-1)은 완전히 이그레스되어 있고, 이들의 대응 송신 블록은 소거되어 있다(시간프레임(T5)의 조기 부분 중에, 패킷(P2-1)이 또한 이그레스를 위해 선택되어 있음). 도 11 및 도 14를 참조하여 후술되는 바와 같이, 송신 블록 상태가 소거될 때, 소거된 상태에 도달하지 않은 더 하위의 FIFO 슬롯을 점유하는 어떠한 송신 블록도 존재하지 않으면 소거된 송신 블록에 대응하는 송신 콘텍스트를 위한 크레딧이 복귀될 것이다. 본 예에서, 이 조건은 송신 콘텍스트 2에 대해 사실이지만, 패킷(P1-1)이 여전히 이그레싱하고 소거된 상태에 도달하지 않았기 때문에 송신 콘텍스트 1에 대해서는 사실이 아니다. 그 결과, 2개의 크레딧이 송신 콘텍스트 2에 대해 복귀되고, 어떠한 크레딧도 이 시점에 송신 콘텍스트 1에 대해 복귀되지 않는다. 상세히 후술되는 바와 같이, 일 실시예에서 11-비트 실행 카운트를 포함하는 절대 크레딧 값이 리턴되고, 도 7e의 예에서, 송신 콘텍스트 2를 위한 실행 카운트는 패킷(P2-1)이 소거되기 전에 0에 있었고, 따라서 리턴되는 실행 카운트 절대 크레딧 값은 2인 것으로 가정된다.
도 7f는 시간프레임(T6) 중에 전달의 상태를 도시한다. 이 시간프레임 중에, 패킷(P1-3, P2-2)이 이그레스하기 시작하고, 반면에 패킷(P1-1)은 이그레스를 완료하고 그 송신 블록이 소거된다. 이 시점에, 양 패킷(P1-1, P1-2)을 위한 크레딧은 송신 콘텍스트 1에 대해 리턴되어, 총 y+3 크레딧이 되고, 여기서 실행 카운터 값은 송신 콘텍스트 1에 대해 리턴되었던 최종 시간 크레딧에 대해 j+3만큼 증가될 것이다. 도시된 예에서, 이전의 실행 카운트는 2(송신 콘텍스트 1에 대해 제 1 2개의 비어 있는 FIFO 슬롯에 대응함)였고, 따라서 복귀된 실행 카운트 절대 크레딧 값은 2+j+3이다. 부가적으로, 시간프레임(T5) 중에 송신된 패킷(P2-1)을 위한 송신 블록을 위한 2개의 크레딧이 수신되고 프로세싱되어 있고, 대응 FIFO 슬롯이 프리한 것으로 마킹된다.
일 실시예에 따르면, PIO 기록 인스트럭션은 한번에 512-비트(64 B)를 저장 버퍼(608)에 기록하여 단일의 PIO 기록 인스트럭션이 저장 블록의 완전한 충전을 야기하게 하도록 채용될 수 있다. 일 실시예에서, 이는 Intel® Corporation의 Advanced Vector Extension 512(Intel® AVX-512)에 의해 지원되는 512 b 기록 인스트럭션의 사용을 통해 용이해진다. Intel AVX-512는 512 비트의 데이터가 이들 레지스터로부터 저장 블록(608) 내로 이동되는 것을 가능하게 하는 512 비트폭인 32개의 벡터 레지스터를 특징으로 한다. Intel AVX-512의 사용은 단지 예시일 뿐이고, 512-비트 기록을 지원하는 다른 기존의 및 미래의 프로세서가 사용될 수 있기 때문에 한정이 되는 것은 아니라는 것이 주목된다.
도 8a 내지 도 8e는 어떻게 패킷 데이터가 PIO 송신 메모리(120)에 추가되고 이후에 512-비트 기록을 사용하여 저장 블록에 이그레스되는지를 도시하는 예시적인 시간 경과 시퀀스를 도시한다. 본 예에서, 각각의 패킷을 위한 기록 인스트럭션의 시퀀스는 512-비트의 데이터가 CPU(600a) 내의 512 b 레지스터로부터 이동되는 것을 지시하기 위한 mov512.q 인스트럭션으로서 도시되어 있다. 512 b mov가 수행됨에 따라, 인스트럭션의 수는 8 B mov를 사용하는 것보다 상당히 작다. 상기와 같이, SFENCE는 이것이 SFENCE 인스트럭션이 종래의 접근법 하에 배치될 경우라는 것을 지시하기 위해 "X"를 갖고 도시되어 있다.
도 8a에서, 시간프레임(T1) 중에 수행된 동작이 도시되어 있다. 게다가, 패킷(P1-1, P1-2, P2-1, P1-3, P2-2, P1-4)의 시퀀스를 위한 mov512.q 인스트럭션은 수신되는 것으로서 도시되지만, 이들 인스트럭션의 일부가 시간프레임(T1) 중에 수신되지 않을 것이고 오히려 데이터가 저장 버퍼(608)에 기록되는 것으로서 도시될 때에 근접한 이후의 시간프레임에 수신되기 때문에 이는 인스트럭션의 스트림을 예시하기 위한 것이다. 예시 및 비교의 목적으로, 동일한 패킷 시퀀스가 도 7a 내지 도 7f 및 도 8a 내지 도 8e에 도시되어 있지만, 송신 블록의 일부가 기록되는 순서는 이들 2개의 예 사이에서 상이하다.
시간프레임(T1) 중에, 패킷(P1-1)을 위한 j mov512.q 인스트럭션은 CPU(600a) 상에서 프로세서 코어에 의해 실행되어, 각각의 인스트럭션에 대해 64 B의 데이터가 저장 블록에 기록되게 하는데, 이 저장 블록은 이어서 도 6b 및 도 7a 내지 도 7f에 도시된 것과 유사한 방식으로 64 B PCIe 포스팅된 기록을 거쳐 드레인된다. 이는 패킷(P1-1)을 위한 풀 패킷 데이터가 PIO 송신 메모리(120)에 기록되게 하고, 이 패킷을 위한 헤드 패킷 상태가 런치 중재를 위해 마킹된다. 게다가, 패킷(P1-2)을 위한 제 1 2개의 mov512.q 인스트럭션이 수신되지만 비순차적으로 실행된다. 그 결과, 패킷 데이터가 기록되는 중간 송신 블록은 64 B PCIe 포스팅된 기록 '4' 및 '5'에 의해 도시된 바와 같이, 제 1 송신 블록에 앞서 PIO 송신 메모리에 기록될 것이다. 중간 송신 블록을 위한 데이터의 수신시에, 전송 엔진 로직에 의해 채용된 제어 정보는 헤드 패킷(및 따라서 PBC 헤더)이 아직 수신되지 않았기 때문에, 패킷(P1-2)을 위해 충전될 필요가 있는 블록의 수를 인지하지 못할 것이다. 헤드 패킷의 수신은 2개의 방식 중 하나로, 즉 PBC 헤더를 검출하기 위해 송신 블록의 제 1 부분의 검사를 거쳐 또는 기록이 패킷을 위한 제 1 송신 블록을 포함하는 것을 지시하는 64 B PCIe 포스팅된 기록 내의 패킷의 시작(SOP) 비트를 거쳐 검출될 수 있다. 패킷(P1-2)을 위한 제 1 송신 블록의 수신시에, 그 PBC 헤더가 검사되고 이 패킷의 충전 크기는 3개의 송신 블록인 것으로 결정된다.
시간프레임(T2) 중에, 도 8b에 도시된 바와 같이, 패킷(P1-2)을 위한 최종 mov512.q 인스트럭션이 실행되어, 데이터를 먼저 저장 블록(710)에 이동시키는데, 이 저장 블록은 이어서 64 B PCIe 포스팅된 기록 '6'을 거쳐 드레인되고, 이는 패킷(P1-2)을 위한 송신 블록의 충전을 완료한다. 그 결과, 헤드 패킷 상태가 런치 중재를 위해 마킹된다. 각각의 패킷(P2-1, P1-3)을 위한 인스트럭션은 64 B PCIe 포스팅된 기록 '7', '8' 및 '9'의 순서에 의해 도시된 바와 같이, 비순차적으로 실행되는데, 이들 중 마지막은 진행중이고 아직 완료되지 않은 것으로 도시되어 있다. 패킷(P2-1)의 제 1 송신 블록을 위한 mov512.q는 아직 실행되지 않았다. 상기와 같이, 제 1 송신 블록(및 따라서 대응 64 B PCIe 포스팅된 기록 내에 SOP 비트 세트를 포함하고 PBC 헤드를 포함할 것인 송신 블록)은 아직 기록되지 않았기 때문에, 제어 로직은 패킷(P2-1)의 크기를 인지하지 못한다. 패킷(P2-1)을 위한 제 1 송신 블록이 점유된 FIFO 슬롯은 또한 여전히 프리인 것으로서 마킹된다. 고려가능하게, 송신 콘텍스트 2 FIFO 내의 최종 블록이 프리인 것 이외의 무엇인가로서 마킹되어 있으면, 로직은 이 FIFO 슬롯이 패킷(P2-1)을 위한 제 1 송신 블록에 대응하는 것으로(이것이 거기로 진행해야 하기 때문에) 결정하도록 구성될 수 있지만, 이는 제 1 송신 블록이 도달하는 것을 대기하는 것에 비해 실제로 이익을 제공하지 않는다.
도 8c에 도시된 시간프레임(T3) 중에, 제 1 송신 블록을 기록하기 위한 mov512.q 인스트럭션이 실행되어, 저장 블록(715)이 64 B PCIe 포스팅된 기록 '10'을 거쳐 충전 및 드레인되게 한다. 제어 로직은 이것이 패킷(P2-1)의 시작점에 대응하는 것을 검출하고, PBC 헤더의 PbcLengthDWs 필드를 감시하고, 패킷 충전 크기가 2개의 송신 블록인 것을 결정한다. 제 2 송신 블록이 미리 충전되어 있기 때문에, 이 제 1 송신 블록을 충전하는 것은 전체 패킷이 충전되게 하고, 따라서 헤드 패킷 상태가 런치 중재를 위해 마킹된다. 게다가, 패킷(P2-2)을 위한 k mov512.q 인스트럭션이 실행되어, 저장 블록(718), k-2 저장 블록(719)의 충전 및 드레인, 및 저장 블록(720)을 위한 프로세스에서 드레인과 함께 충전을 야기한다. 패킷(P2-2)을 위한 PBC 헤더의 검사시에, 이 패킷의 충전 크기는 k 송신 블록인 것으로 결정된다. 또한 시간프레임(T3) 중에, 패킷(P1-1)은 프로세스에서 패킷(P1-1)의 이그레스를 갖고, 이그레스를 위해 선택되어 있다.
도 8d에 도시된 시간프레임(T4) 중에, 패킷(P1-4)에 대응하는 단일의 mov512.q가 실행되어, 모든 이 패킷의 데이터를 먼저 저장 블록(714)에, 그리고 이어서 64 B PCIe 포스팅된 기록 '14'를 거쳐 PIO 송신 메모리(120) 내의 단일 송신 블록에 기록한다. 전체 패킷(P2-3)은 또한 저장 블록(727, 728, 730) 및 64 B PCIe 포스팅된 기록 '15', '16' 및 '17'을 거쳐 PIO 송신 메모리(120)에 기록된다. 패킷(P1-4, P2-3)을 위한 각각의 헤드 패킷은 런치 중재를 위해 마킹된다. 게다가, 각각의 패킷(P1-2, P2-1)은 이그레스를 위해 선택되어 있고, 이들 패킷의 대응 송신 블록 내의 패킷 데이터는 현재 이그레스되고 있다.
전술된 바와 같이, 시간프레임(T3) 중에, 패킷(P1-1)을 위한 패킷 데이터는 이그레스를 시작하였다. 시간프레임(T4) 중에, 이그레스가 완료되었고, 송신 블록은 소거된 것으로서 마킹된다. 전술된 실시예에 따르면, 2+j의 절대 크레딧 리턴 카운트가 이 시점에 리턴될 것이다(도시되지 않은 송신 콘텍스트 1을 위한 모든 이전의 패킷을 위한 크레딧은 미리 리턴되어 있는 것으로 가정함). 그러나, 크레딧 리턴 메커니즘의 설명에서 후술되는 바와 같이, 몇몇 실시예에서, 크레딧은 다수의 패킷을 가로질러 집성되고 최종 크레딧 리턴이 도달된 이후로 크레딧의 임계치까지 리턴되지 않는다. 본 예에서, 임계치는 아직 도달되지 않아, 이 시점에 리턴 크레딧을 야기하지 않는다. 도 8e에 도시된 시간프레임(T5) 중에, 각각의 패킷(P1-2, P2-1)은 이그레스를 완료하였고 소거된 것으로서 마킹되고, 반면에 패킷(P2-2)은 이그레스를 위해 선택되었고 이그레싱을 시작한다. 집성된 크레딧 리턴은 송신 콘텍스트당 기초로 구성될 수 있어, 몇몇 송신 콘텍스트에 대해 채용되고 다른 것에 대해 채용되지 않을 수도 있게 된다. 게다가, 집성된 크레딧 임계치는 송신 콘텍스트당 기초로 구성될 수 있다. 이에 따라, 본 예에서, 송신 콘텍스트 1을 위한 집성된 크레딧 임계치가 도달되어 있고, 따라서 2+j+3의 실행 리턴 크레딧 카운트 값이 크레딧 리턴 블록(127)을 거쳐 리턴된다. 게다가, 송신 콘텍스트 2는 집성된 크레딧 임계치를 채용하지 않고, 따라서 2개의 크레딧의 실행 리턴 크레딧 카운트 값이 리턴된다. 일 실시예에서, 다수의 송신 콘텍스트를 위한 실행 크레딧 카운트 값이 PCIe를 거쳐 메모리에 단일 DMA 기록으로 송신될 수 있다.
도 9a 및 도 9b는 각각 SFENCE 인스트럭션을 갖고 갖지 않는 64 B PCIe 포스팅된 기록을 사용하는 패킷 데이터의 전달에 대응하는 데이터 흐름 타임라인을 도시한다. 프로세서 코어의 부분인 저장 버퍼(608)로부터 드레인될 때, 이는 도 6a 및 도 6b에 도시된 바와 같이, 먼저 IIO(610)로 포워딩된다. 본 명세서에 설명된 PCIe 포스팅된 기록 요청에 추가하여 다른 IO 요청을 핸들링해야 하기 때문에, IIO에 소정의 부가의 지연시간이 존재한다. 특히, IIO는 각각의 sfence 인스트럭션을 위한 sfence 확인응답(ack)을 리턴한다. 이는 비순차적 인스트럭션이 sfence를 가로질러 실행되는 것을 방지하여, 잠재적으로 sfence 이전의 패킷을 위한 모든 인스트럭션이 실행될 때까지 지연을 야기한다. sfence의 사용을 제거하는 본 명세서의 실시예 하에서, 이들 잠재적인 지연이 발생하는 것이 방지되어, PIO 송신 블록 기록 효율을 최적화한다.
도 10은 실시예에 따른 이그레스 블록(126)의 추가의 상세를 도시한다. 각각의 (최대) 160개의 송신 콘텍스트로부터의 헤드 패킷 상태가 블록 1000에서 트래킹되고, 반면에 16개의 SDMA 대기열의 각각을 위한 헤드 패킷 상태가 블록 1002에서 트래킹된다. 블록 1000 및 1002는 그 출력이 VL 중재기(1008)에 입력으로서 수신되는 복수의 퍼-VL 런치 FIFO(1006)에 출력을 제공하는 라운드 로빈 런치 중재기(1004)에 입력을 제공한다. VL 중재기는 PIO 송신 메모리(120) 및 SDMA 메모리(124)의 각각에 결합된 멀티플렉서(Mux)(1010)에 입력 제어를 제공한다. 이그레스 블록(126)은 프로세스 블록(1012, 1014, 1018) 및 이그레스 FIFO(1016)를 추가로 포함한다.
이그레스 블록(126)은 160개의 송신 콘텍스트 및 16개의 SDMA 엔진으로부터 패킷을 중재하고 다음의 이용가능한 것을 선택하는 것을 담당하고, 그 송신 버퍼 메모리로부터 퍼-VL 런치 FIFO(1006) 내로 패킷의 런치를 완료한다. 퍼-VL 런치 FIFO는 VL들 사이의 차단을 최소화하기 위해 깊고, PIO 송신 메모리(120) 및 SDMA 메모리(124) 내의 패킷으로의 포인터를 포함하는 패킷을 위한 제어 정보만을 포함한다. 실제 패킷 데이터경로는 퍼-VL 런치 FIFO(1006)를 통해 흐르지 않고, 오히려 이들 FIFO는 퍼-VL 입력을 VL 중재기(1008)에 제공하는데 사용되고, 이 VL 중재기는 이그레스하기 위한 다음의 패킷을 선택하도록 런치 FIFO를 가로지르는 VL 중재를 수행한다. 이는 이그레스 블록(126)이 mux(1010)를 거쳐 PIO 송신 메모리(120) 또는 SDMA 메모리(124)로부터 그 패킷을 위한 데이터를 페치하기 시작하게 하고, 이어서 패킷 무결성 검사(integrity check)가 프로세스 블록(1012)에서 적용된다. 마지막으로, 패킷 이그레스 파이프라인은 패킷으로의 임의의 필수 수정(예를 들어, 프로세스 블록(1014)에서 HCRC/ICRC 삽입, 이그레스 FIFO(1016)에서 FIFO 버퍼링, 및 프로세스 블록(1018)에서 이그레스를 위한 패킷 프레이밍)을 수행하고, 패킷을 패브릭점(112)에 제시한다.
일 실시예에서, 전송 엔진(108)은 8개의 데이터 VL, 및 1개의 관리 VL을 지원한다. 그러나, 이는 단지 예시일 뿐이고 비한정적이다. 패킷은 패킷이 PBC 헤더 내의 VL 필드를 사용하여 구성될 때 소프트웨어에 의해 가상 래인(VL)에 할당된다.
일 실시예에서, PIO 송신을 사용하여 송신 콘텍스트에 송신된 패킷은 송신 콘텍스트의 송신 버퍼 내로의 이들 패킷의 배치에 의해 규정되는 순서로 런치될 것이다. 이는 "원래 프로그램 순서"라 칭한다. 본질적으로, 이는 송신 버퍼가 FIFO로서 거동하지만, 프로세서의 기록 결합 특징에 의해 제공된 루즈 순서화 시맨틱스(loose ordering semantics)를 사용할 때에도 프로그램의 원래 패킷 순서를 재조합하기 위한 송신 버퍼의 충전시에 탄력성이 존재한다. 이 순서화 설명의 목적으로, 요점은 소프트웨어가 송신 콘텍스트 상에 패킷 순서를 선택하는 것이고, 송신 콘텍스트가 패킷 런치를 통해 그 패킷 순서를 유지한다.
일단 완전한 패킷이 PIO 송신 또는 SDMA에 의해 송신 버퍼 내로 충전되면, 패킷은 전송 엔진에 의해 런치될 수 있다. 송신 버퍼로부터 패킷의 런치는 퍼-VL FIFO 상에 패킷을 배치한다. 동일한 VL을 갖는 패킷의 런치 순서는 그 VL을 갖는 패킷이 링크에 이그레스될 것인 순서를 지정한다. 퍼-VL FIFO의 헤드에서 패킷이 선택되는 순서는 VL 중재 알고리즘에 의해 결정된다.
소프트웨어는 일 송신 콘텍스트 상의 PIO 송신에 의해 상이한 VL을 갖는 패킷을 송신할 수 있다. 유사하게, 하나의 SDMA 대기열 상의 SDMA에 의해 상이한 VL을 갖는 패킷을 송신할 수 있다. 구현예는 패킷이 상이한 VL 상에 있을 때에도 런치점까지 송신 콘텍스트 또는 SDMA 대기열을 통해 패킷 순서를 보존할 것이다. 그러나, 런치를 넘어, 퍼-VL 런치 FIFO에 기인하여 어떠한 보장된 순서화도 존재하지 않고, 링크로의 실제 이그레스 순서는 VL 중재의 상세에 의존할 것이다.
일 실시예 하에서, 동일한 VL을 사용하여 전송될 동일한 송신 콘텍스트에 대한 패킷은 원래 프로그램 순서로 이그레스될 것이다. 한편, 상이한 VL을 사용하여 전송될 패킷은 비순차적으로 이그레스될 수도 있어, 이후에 기록된 패킷이 상이한 VL을 거쳐 전송되어야 하면 이전에 기록된 패킷을 진행할 수 있게 된다.
일 실시예에서, HFI는 상기에 규정된 순서화를 넘어 런치 순서로 어떠한 보장도 제공하지 않는다. 예를 들어, 임의의 SDMA 대기열 상의 패킷의 런치 순서는 임의의 다른 SDMA 대기열 상의 패킷과 관련하여 또는 PIO 송신을 사용하여 송신된 임의의 패킷과 관련하여 HFI에 의해 순서화되지 않는다. 부가적으로, 임의의 송신 콘텍스트 상의 패킷의 런치 순서는 임의의 다른 송신 콘텍스트 상의 패킷과 관련하여 또는 SDMA를 사용하여 송신된 임의의 패킷과 관련하여 HFI에 의해 순서화되지 않는다.
도 11은 HFI에 결합된 패브릭 링크 상의 이그레스 아웃바운드를 위한 패킷 데이터를 준비하는데 구현된 동작, 페이즈, 및 상태를 도시하는 흐름도이다. 패킷 충전 페이즈(1102) 중에, 송신 메모리는 PIO 송신 또는 SDMA 메커니즘을 거쳐 패킷 데이터로 충전된다. 패킷 완료 상태(1104)는 모든 패킷 데이터가 송신 메모리 내에서 버퍼링될 때 발생한다. 이 시점에, 패킷 충전은 완료되고 패킷은 런치를 위해 적격이다. 패킷 런치(1106)는 패킷이 송신 메모리로부터 퍼-VL 런치 FIFO 상에 런치되는 지점이다. 이 페이즈 중에, 패킷 데이터는 여전히 송신 버퍼 상태를 점유하지만, 런치시에 패킷은 이제 이그레스를 위한 준비가 되고, 그 동일한 VL에서 다른 패킷과 관련하여 그 순서가 설정된다.
패킷 VL 중재(1108) 중에, 퍼-VL 런치 FIFO의 헤드에서의 패킷은 그 사이에서 중재되고, 하나는 링크에 이그레스될 VL 중재 알고리즘에 의해 선택된다. 패킷 이그레스(1110) 중에, VL 중재를 거쳐 선택된 패킷을 위한 패킷 데이터는 송신 메모리(적용가능한 바와 같이, PIO 송신 메모리(120) 또는 SDMA 메모리(124))로부터 판독되고, 패킷 무결성 검사가 패킷 데이터가 유효한지 여부를 판정하기 위해 블록 1012에서 수행된다. 무결성 검사를 실패한 패킷은 드롭되고, 반면에 양호한 패킷은 링크에 이그레스되는데, 이는 요구된다면 HCRC 및 ICRC의 삽입 및 이그레스 FIFO(1016) 내의 버퍼링을 포함할 수 있다.
다음의 상태는 패킷 소거된다(1112). 이 상태는 패킷이 송신 버퍼를 소거하고 송신 버퍼가 재사용을 위해 이용가능해질 때 발생한다. 이에 따라, 리턴 크레딧 블록(1114)에서, 송신 버퍼를 위한 하나 이상의 크레딧은 크레딧 리턴 메커니즘(127)을 거쳐 리턴되고, 소거된 송신 블록은 새로운 패킷 데이터로 충전되도록 이용가능해진다. 그러나, 구현예는 전체 패킷이 링크로 이그레스되기 전에 몇몇 송신 블록이 재사용될 수 있도록, 송신 블록 레벨로 감소하여 크레딧 리턴 및 송신 버퍼 재사용을 최적화할 수 있다는 것을 주목하라. 이는 송신 버퍼 리소스가 제한되는 중요한 구현예일 수 있다. 게다가, 전술된 바와 같이, 송신 블록이 소거될 수 있지만, 소거되지 않은 FIFO 내에서 그 아래에 다른 송신 블록이 존재하면, 블록을 위한 크레딧은 이들 블록이 또한 소거될 때까지 리턴되지 않을 것이다.
크레딧 리턴 메커니즘
PIO 송신 메커니즘은 송신 버퍼 블록이 이전의 패킷이 송신 버퍼를 소거하기 전에 소프트웨어에 의해 덮어쓰여지지 않는 것을 보장하도록 크레딧 리턴 메커니즘을 사용한다. 일 실시예에서, 송신 크레딧은 64 B 입도에 있고, 일 송신 크레딧은 일(64 B) 송신 블록에 대응한다. 송신 콘텍스트를 위한 송신 크레딧은 순차적으로 리턴되고, 소프트웨어는 랩어라운드 FIFO 방식으로 송신 버퍼 메모리를 사용한다. 송신 크레딧 어카운팅은 절대 수를 사용하여, HFI가 송신 크레딧의 손실 없이 더 최신 값을 갖고 임의의 시간에 크레딧 리턴 정보를 덮어쓸 수 있게 된다. 크레딧 리턴은 또한 상태 정보를 제공하고, 이는 연속적인 크레딧 리턴 기록에 의해 덮어쓰여진다. 에러가 부닥칠 때, 크레딧 리턴은 에러 지시 세트로 강제되고, 송신 콘텍스트는 에러 상태로 배치되고, 송신 콘텍스트가 호스트 시스템 소프트웨어에 의해 에러 상태로부터 복구될 때까지 어떠한 추가의 크레딧 리턴 기록도 스케쥴링되지 않을 것이다. 이는 크레딧 리턴 위치에서 에러 지시가 관찰되고 덮어쓰여지는 위험성 없이 호스트 소프트웨어에 의해 적절하게 취급될 수 있는 것을 보장한다. 간단히 말하면, 크레딧 트래킹은 소비되어 있는 크레딧의 수의 실행 카운트 및 프리하게 되어 있는 크레딧의 수의 실행 카운트를 유지함으로써 성취된다. 현재 점유되는 크레딧의 수는 이어서 이들 카운트 사이의 델타이다. 전술된 바와 같이, 이들은 크레딧이 소비되거나 프리하게 되기 때문에 적절하게 간단히 증분하는 절대 카운터이다.
초기화 후에, 송신 버퍼는 비어 있고 그 버퍼를 위한 모든 송신 크레딧이 소프트웨어에 이용가능하다. 일 실시예에서, 송신 콘텍스트에 할당될 수 있는 송신 크레딧의 최대 수는 1024이고, 송신 버퍼를 위한 64 KB 최대 크기에 대응한다. 일 실시예에서, 11-비트 카운터가 크레딧 정보를 트래킹하는데 사용된다. 이 접근법은 카운터가 최대 1024 값만큼 값이 상이할 수 있도록 하나의 추가 비트를 사용한다. 이는 또한 0개의 크레딧이 이용가능하고 1024개의 크레딧이 명확하게 하도록 이용가능한 경우를 허용한다. 카운터 매스(counter math)가 모듈로(2048)로 수행된다. 예를 들어, 11-비트 카운터의 증가 및 11-비트 카운터 사이의 차이는 모듈로(2048)로 수행된다.
더 상세하게, 양 소프트웨어 및 하드웨어는 크레딧 사용량을 트래킹하기 위해 송신 콘텍스트당 11-비트 카운터를 각각 유지한다. 소프트웨어 카운터는 충전 카운터라 칭한다. 하드웨어 카운터는 프리 카운터라 칭한다. 하드웨어는 소프트웨어가 크레딧 리턴의 가시성을 갖도록 호스트 메모리 내에 유지된 섀도우 프리 카운터에 적절한 간격으로 그 카운터 값을 DMA한다. 초기에, 양 카운터는 0이고, 어떠한 송신 크레딧도 사용되지 않는다. 사용된 크레딧의 수는 충전 카운터에서 프리 카운터, 모듈로(2048)를 감산함 값으로서 계산된다. 가용 크레딧의 수는 이어서 송신 콘텍스트 내의 크레딧의 총 수에서 사용된 크레딧의 수를 감산한 값이다. 양 카운터가 동일한 값을 가질 때, 콘텍스트는 비워지고, 모든 그 송신 크레딧은 충전을 위해 소프트웨어에 이용가능하다. 소프트웨어는 송신 콘텍스트에 송신 블록을 기록하기 전에 가용 크레딧을 점검한다. 소프트웨어가 송신 블록을 충전함에 따라, 이는 그 충전 카운터, 모듈로(2048)를 증분하여, 소프트웨어가 크레딧을 사용하는 현재 범위를 지시한다. 소프트웨어가 가용 크레딧을 갖지 않을 때, 이는 크레딧이 프리하게 될 때까지 대기할 것이다. 소프트웨어는 크레딧이 프리할 때를 결정하기 위해 호스트 메모리 내의 섀도우 프리 카운터를 모니터링할 수 있다.
크레딧 트래킹의 추상적 모델에 대응하는 의사 코드를 이하에 나타낸다.
일 실시예에서, 송신 크레딧 리턴은 PCIe 및 소비되는 호스트 메모리 대역폭을 감소시키도록 집성된다. 각각의 송신 콘텍스트는 SendCtxtCreditCtrl.Threshold라 칭하는 크레딧 임계값을 갖고 프로그램된다. 송신 콘텍스트는 패브릭에 아직 이그레스되지 않은 가장 오래된 송신 블록(송신 버퍼 내의 어드레스 순서의 견지에서)을 트래킹하는 카운터값을 유지한다. 전술된 바와 같이, 송신 블록의 이그레스는 다수의 VL이 단일의 송신 버퍼 내에 사용될 때 비순차적일 수 있다. 이 상황을 처리하기 위해, 하드웨어 상태가 순차적 크레딧 리턴이 제공될 수 있도록 비순차적 이그레스를 트래킹하도록 채용된다. 이 가장 오래된 송신 블록에 대한 카운터에서 프리 카운터의 하드웨어 카피를 감산한 값 사이의 델타는 소프트웨어에 아직 리턴되지 않은 임박한 프리 크레딧의 수이다. 이 값이 임계치에 일치하거나 초과할 때, 송신 크레딧 리턴은 그 송신 콘텍스트에 대해 개시된다. 이 크레딧 리턴 접근법은 하드웨어 내에 상주하는 임계치까지 크레딧을 남겨두고, 모든 크레딧이 리턴될 수 있다는 것을 보장하기 위한 방법을 제공하지 않는다. 이는 임의의 특정 송신이 송신 버퍼를 소거한 것을 식별하기 위한 문제점이다. 이를 처리하기 위해 제공된 다수의 방식이 존재한다:
· 다수의 경우에, 호스트 소프트웨어는 크레딧 리턴 임계 메커니즘을 사용할 수 있고, 특정 PIO 송신기 송신 버퍼를 소거하였는지 여부를 고려하지 않을 것임.
· 호스트는 SendCtxtCreditStatus 레지스터를 사용하여 어댑터 레지스터로부터 송신 콘텍스트를 위한 현재 크레딧 값을 판독할 수 있음.
· 호스트는 송신 콘텍스트를 위해 스케쥴링될 크레딧 리턴을 가압하기 위해 SendCtxtCreditForce 레지스터에 기록할 수 있음.
· 호스트가 PbcCreditReturn이라 칭하는 PBC 비트를 거쳐 특정 PIO 송신을 위한 크레딧 리턴을 요청하게 함.
부가적으로, 호스트 소프트웨어는 크레딧이 특정 송신 콘텍스트 상에 리턴될 때 중단을 위해 배열될 수 있다.
몇몇 실시예에서, 패킷이 이그레스하도록 위탁되자마자, 그러나 패킷이 실제로 송신 버퍼를 소거하기 전에, 크레딧이 호스트에 더 적극적으로 리턴되게 하는 조기 크레딧 리턴 메커니즘이 구현될 수 있다. 이는 호스트가 다음의 패킷 상에서 시작되게 하여 크레딧 리턴 지연시간을 최적화하고 송신 버퍼링 요구를 감소시킨다. 사상은 이그레스가 그 이전의 점유자를 위해 송신 버퍼를 드레인하는 동안 호스트가 다음의 패킷을 충전하기 시작할 수 있다는 것이다. 하드웨어 인터로크가 이전의 패킷이 덮어쓰여질 수 없는 것을 보장하도록 채용되고, 또한 레이트-정합 이그레스 FIFO는 이전의 패킷이 패브릭 와이어 레이트에서 드레인될 수 있도록 구현된다. 이 메커니즘은 구현 문제의 경우에 콘텍스트당 기초로 디스에이블링될 수 있다. 이는 콘텍스트당 송신 크레딧이 낮은 경우에(예를 들어, 더 많은 수의 콘텍스트 및 더 큰 MTU 크기를 사용할 때) 성능을 향상시키기 위한 중요한 최적화이다.
퍼-송신 콘텍스트 구성 비트(SendCtxtCreditCtrl.EarlyReturn)는 조기 크레딧 리턴을 인에이블링 또는 디스에이블링하도록 제공된다. 인에이블링될 때, 개별 송신 블록은 하드웨어에 의해 조기에(즉, 그 송신 블록을 소거하는 패킷의 이그레스에 앞서) 프리하게 될 수 있고, 이들 조기에 프리하게 된 크레딧은 일반적인 크레딧 리턴 알고리즘을 사용하여 리턴된다. 크레딧 리턴 임계 메커니즘이 또한 적용된다.
소프트웨어는 송신하기를 원하는 패킷을 위한 송신 콘텍스트에 할당된 충분한 크레딧이 존재하는 것을 보장하기 위한 것이라는 것을 주목하라. 특정 패킷을 위한 송신 콘텍스트에 할당된 불충분한 크레딧이 존재하면, 충분한 크레딧이 패킷을 런칭하기 위해 절대 이용가능하지 않을 것이다. 일 접근법은 송신 콘텍스트에 할당된 송신 블록의 수에 기초하여 소프트웨어가 패킷 크기를 제한하는 것이다. 이 계산은 콘텍스트를 위한 크레딧 임계값까지의 크레딧이 하드웨어 내에 상주할 수 있고 미래의 송신 블록이 이그레스될 때까지 자동으로 리턴되지 않을 것이라는 것을 고려해야 한다.
일 실시예에서, 송신 크레딧 리턴은 64 B 캐시 라인 정렬된 어드레스에 호스트 메모리에 64 B 기록으로서 구현된다. 이 이유는 이들 동작이 부가의 지연시간을 추가하고 호스트 메모리로의 액세스의 파이프라이닝에 영향을 줄 수 있기 때문에 IIO로부터 메모리 상의 판독-수정-기록 동작을 회피하기 때문이다. 그러나, 이는 크레딧 리턴이 부가의 PCIe 대역폭을 소비하는 것을 의미한다. 이는 송신 크레딧 리턴 집성에 의해 완화되지만, 가능하면 이를 더 감소시키는 것이 바람직하다. 일 실시예에서, 이는 후술되는 바와 같이, 송신 콘텍스트 그룹을 가로질러 집성 크레딧의 사용을 거쳐 용이해진다.
일 실시예에서, 각각의 11-비트 크레딧 리턴값은 콘텍스트 상황과 조합되고, 64-비트값을 구성하기 위해 예약된 비트와 함께 패딩된다. 일 실시예에서, 64-비트값은 그룹 크레딧 리턴을 위한 64 B 기록 내로 패킹될 최대 8개의 크레딧 리턴을 지원한다.
크레딧 리턴 오버헤드를 감소시키기 위한 일 기술은 송신 콘텍스트 그룹을 가로질러 크레딧 리턴을 집성하는 것이다. 사상은 송신 콘텍스트가 함께 그룹화될 수 있고 이어서 콘텍스트의 그룹을 위한 크레딧 리턴이 호스트 메모리에 대해 단일의 64 B 기록으로 수행된다. 일 실시예에서, 160개의 송신 콘텍스트는 8개의 연속적인 송신 콘텍스트의 세트 내로 집성되어 총 20개의 세트를 제공한다. 그러나, 송신 콘텍스트의 다른 집성이 사용될 수 있다. 8개의 송신 콘텍스트의 세트 크기는 세트당 독립적으로 그룹화를 지정하는 능력을 갖는 20개의 상이한 세트를 허용한다. 세트 넘버(S)는 8S 내지 8S+7(경계값 포함)을 포함한다. 일 실시예에 대한 세트 맵핑을 표 2에 나타낸다. 20개의 세트의 선택은 40, 80, 및 160개의 송신 콘텍스트의 전형적인 구성에서 적당한 탄력성을 제공한다. 감소된 수의 송신 콘텍스트를 갖는 구성에서, 소프트웨어는 어느 송신 콘텍스트가 요구된 그룹화에 따라 사용되는지를 선택할 때 부가의 탄력성을 얻는다. 각각의 세트는 표 3에 나타낸 구성으로 독립적으로 구성될 수 있다.
세트 넘버 | 세트 내의 송신 콘텍스트 |
0 | 0 내지 7 |
1 | 8 내지 15 |
... | ... |
19 | 152 내지 159 |
값(B) | 그룹의 수 | 그룹당 송신 콘텍스트(G) |
0 | 8 | 1(즉, 실제 그룹화가 없음) |
1 | 4 | 2 |
2 | 2 | 4 |
3 | 1 | 8(즉, 최대 그룹화) |
0의 최소값을 갖고, 세트는 그룹당 1개의 송신 콘텍스트를 갖는(즉, 실제 그룹화가 없음) 8개의 그룹을 갖는다. 이는 그 세트 내의 모든 송신 콘텍스트가 독립적인 크레딧 리턴을 가질 것이기 때문에 최대 탄력성을 제공한다. 3의 최대값을 갖고, 세트는 모든 8개의 송신 콘텍스트를 포함하는 1 그룹을 갖고, 크레딧 리턴은 모든 8개의 송신 콘텍스트에 대해 집성된다. 이에 따라, 그 세트의 크레딧 리턴을 위해 사용되는 호스트 메모리 페이지가 이들 8개의 송신 콘텍스트에 의해 공유된다. 소프트웨어는 크레딧 리턴 위치에 기록되지 않기 때문에 단지 그 페이지의 판독 전용 맵핑이 요구된다는 것을 주목하라. 8의 최대 그룹 크기는 이들 8개의 송신 콘텍스트의 크레딧 리턴 알고리즘이 어떻게 서로 상호작용하는지에 따라 크레딧 리턴 대역폭의 최대 8x 감소를 제공한다.
각각의 송신 콘텍스트는 그 송신 콘텍스트에 대한 크레딧 리턴을 위해 사용되는 호스트 물리적 어드레스 및 TPH 정보를 지정하는 SendCtxtCreditReturnAddr 레지스터를 갖는다. 송신 콘텍스트 그룹화가 사용될 때, 크레딧 리턴은 크레딧 리턴을 트리거링한 콘텍스트에 속하는 SendCtxtCreditReturnAddr 레지스터를 사용한다. 일 실시예에서, 소프트웨어는 동일한 어드레스를 갖는 그룹 내의 모든 콘텍스트에 대해 SendCtxtCreditReturnAddr 레지스터를 프로그램하는데 사용된다.
크레딧 리턴이 특정 송신 콘텍스트(N으로 나타냄)에 의해 개시될 때, 송신 콘텍스트는 3만큼 송신 콘텍스트 넘버를 우측으로 시프트함으로써 세트 넘버(S)에 맵핑된다. 세트 넘버는 퍼-세트 구성 상태를 룩업하는데 사용되고, 표 3의 최좌측 열에 나타낸 바와 같이 값 B를 제공한다. B는 동일한 그룹 내의 송신 콘텍스트를 구별하는 송신 콘텍스트 넘버의 최하위 비트의 넘버이다. 그룹 내의 송신 콘텍스트의 넘버는 G이고, 1<<B이고, 표 3의 최우측 열의 값을 취한다. 이 세트에서 최하위 송신 콘텍스트 넘버는 M이라 칭하고, 값 (N>>B)<<B, 즉 최하위 B 비트가 소거된 상태의 N의 값을 갖는다.
일 실시예에서, 크레딧 리턴은 이하와 같이 성취된다. 크레딧 리턴은 하나의 64 B 기록을 사용하여 G 송신 콘텍스트에 대해 집성된다. 리턴을 위한 어드레스는 콘텍스트 넘버 M(그룹 내의 최하위 넘버링된 콘텍스트)에 대한 SendCtxtCreditReturnAddr 레지스터 내에 지정되고, 이 크레딧 리턴을 위한 G 송신 콘텍스트는 M 내지 M+G-1(경계값 포함)로 넘버링된다. 그룹 내의 각각의 송신 콘텍스트를 위한 크레딧 정보는 QW이고, G는 64 B 크레딧 리턴 기록 내로 패킹된 이러한 값이다. [0, G-1]의 범위의 I에 대해, 리턴되는 크레딧은 송신 콘텍스트 넘버 M+1에 대한 것이고, 크레딧은 인덱스 (M+1) 및 0×7 내에 배치된다. 따라서, 인덱스는 송신 콘텍스트 넘버의 최하위 3개의 비트에 의해 간단히 지정되고, 임의의 특정 송신 콘텍스트를 위한 크레딧 리턴값은 G의 값에 무관하게, 항상 64 B 크레딧 리턴값 내의 동일한 위치에 있어, 구현예에서 시프트 동작을 제거한다. 크레딧 리턴값 내의 미사용된 QW는 0×0의 값을 갖고 충전된다.
크레딧 리턴값을 위한 모든 조합이 표 4에 요약되어 있다. 64 B 크레딧 리턴 내로 상이한 인덱스값에 대한 8개의 열이 존재한다. 인덱스 0은 바이트 0 내지 7에 대응하고, 인덱스 1은 바이트 8 내지 15에 대응하는 등이다. 각각의 행은 G의 특정값에 대한 크레딧 리턴값의 일 조합(그룹당 송신 콘텍스트의 수)을 나타낸다. 비어 있는 셀은 미사용된 QW를 지시하고, 이들은 0 값을 갖는다. 표기 CRx(여기서 x는 0 내지 7)는 x에 동일한 최하위 3개의 비트를 갖는 콘텍스트를 위한 크레딧 리턴값을 지시한다. 각각의 CRx QW 값은 표 2에 의해 정의된 포맷을 갖는다. 예를 들어, G가 1일 때 1개의 크레딧 리턴값이 존재하고, 이는 송신 콘텍스트 넘버에 의존하는 8개의 위치 중 하나 내에 있을 것이다. G가 8일 때, 8개의 크레딧 리턴값이 존재하고 모든 8개의 위치가 사용된다.
크레딧이 송신 콘텍스트 그룹에 대해 리턴될 때, 그룹 내의 각각의 송신 콘텍스트를 위한 프리 카운터는 호스트 메모리 내에 유지된 섀도우 카피에 DMA 전달되는 크레딧 카운터 값으로 업데이트된다. 이 접근법은 일 송신 콘텍스트가 그 임계값에 기초하여 그룹을 위해 크레딧 리턴을 트리거링할 때, 그 크레딧 리턴이 가능한 최대 범위로 그 그룹 내의 모든 다른 송신 콘텍스트를 위해 제공된다는 것을 의미한다. 이 접근법은 송신 블록 이그레스가 그룹의 멤버를 가로질러 적당하게 인터리빙되면 전체로서 그룹을 위한 송신 크레딧 업데이트의 주파수를 감소시킨다. 임계값은 이 메커니즘이 효과적이 되게 하기 위해 최대 패킷 내의 송신 블록의 수보다 커야 할 필요가 있다는 것을 주목하라.
도 12는 일 실시예에 따른, 절대 크레딧을 사용하는 PIO 기록 관리를 지원하는데 사용된 PIO 송신 어드레스 FIFO(1200) 및 크레딧 리턴 FIFO(1202)의 예시적인 구성을 도시하고 있다. PIO 송신 어드레스 FIFO(1400)가 PIO 송신 메모리 기록을 발생한 소프트웨어의 관리 하에서 메모리 내의 각각의 송신 콘텍스트에 대해 구현된다. 전술된 바와 같이, 일 실시예에서, 11-비트 실행 카운터는 가용 크레딧(각각의 송신 콘텍스트 내의 가용 송신 블록에 대응함)을 트래킹하기 위해 FIFO 시맨틱스와 조합하여 사용된다. 인스트럭션의 각각의 송신 블록 가치가 발생되어 프로세서 코어에 의한 실행을 위해 포워딩됨에 따라, 소프트웨어는 송신 블록이 기록되는 송신 콘텍스트에 대해 그 실행 카운트를 증가시킨다. 한편, 수신 엔드에서, 크레딧 리턴 메커니즘(127)은 절대 크레딧의 11-비트 실행 카운트를 리턴된 상태로 유지한다. 크레딧이 리턴됨에 따라, 실행 카운트가 증가된다. FIFO는 그 하에서 0으로 리턴되는 카운트가 도달하는(2047) 원형 FIFO 시맨틱스를 사용한다. 소프트웨어는 또한 각각의 송신 콘텍스트를 위한 절대 리턴 크레딧을 계속 트래킹한다. 송신된 절대 실행 카운트와 리턴된 절대 실행 카운트 사이의 차이가 송신 콘텍스트의 크기 미만인 한, 소프트웨어는 부가의 PIO 송신 메모리 기록을 발생할 수 있다. 일단 차이가 송신 콘텍스트에 도달하면, 송신 콘텍스트로의 패킷 데이터의 기록은 업데이트된 절대 실행 카운트가 크레딧 리턴 메커니즘(127)을 거쳐 수신될 때까지 일시정지된다.
예시적인 HFI 구현예 아키텍처
도 13은 이후에 메모리(106)에 결합되는 프로세서(1306)에 결합된 패브릭 포트(112)를 포함하는 호스트 패브릭 인터페이스(102)를 포함하는 예시적인 구성을 갖는 시스템 노드(1300)를 도시한다. 패브릭 포트(112)는 도 1에 도시된 것과 유사한 고레벨 구성을 갖는 전송 포트(110) 및 수신 포트(116)를 포함한다. 전송 포트(110)는 복수의 전송 VL 버퍼 내로 파티셔닝된 전송 버퍼(Tbuf)를 포함하는 Tx 링크 패브릭 서브레이어 회로 및 로직(1310), Tx 링크 전달 서브레이어 회로 및 로직(1312), 및 4개의 송신기(1316), 및 Tx 링크 제어 블록(1317)을 포함하는 Tx PHY 회로 및 로직(1314)을 포함한다. 수신 포트(116)는 복수의 수신 VL 버퍼 내로 파티셔닝된 수신 버퍼(Rbuf)를 포함하는 Rx 링크 패브릭 서브레이어 회로 및 로직(1318), Rx 링크 전달 서브레이어 회로 및 로직(1320), 및 4개의 수신기(1324), 및 Rx 링크 제어 블록(1325)을 포함하는 Rx PHY 회로 및 로직(1322)을 포함한다.
Tx PHY 회로 및 로직(1314)은 4개의 송신기(1316) 및 Tx 링크 제어 블록(2017)의 부분을 포함하는 간단화된 형태로 도시되어 있다. 일반적으로, 송신기(1316)는 링크의 PHY 레이어 구성에 따라, 전기 또는 광학 송신기를 포함할 수 있다. Tx PHY 회로 및 논리 블록은 명료화를 위해 도시되지 않은 전송측 PHY 레이어 동작을 구현하기 위한 부가의 회로 및 로직을 포함할 것이라는 것이 네트워킹 분야의 숙련자들에 의해 이해될 수 있을 것이다. 이는 에러를 감소시키고 전송 특징을 향상시키기 위해 고속 상호접속부와 관련하여 구현된 다양한 특징을 용이하게 하는데 사용되는 PHY 레이어 내의 다양한 서브레이어를 포함한다.
Rx PHY 회로 및 로직(1322)은 4개의 수신기(1324) 및 Rx 링크 제어 블록(2025)의 부분을 포함하는 간단화된 형태로 도시되어 있다. 일반적으로, 수신기(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)를 포함하는 CPU(1326)를 포함한다. 도시된 실시예에서, 저장 버퍼(St.Bf.)는 또한 각각의 코어(1328)에 결합된 것으로 도시되어 있고, 선택적으로, 저장 버퍼는 프로세서 내의 프로세서 코어의 전체 또는 일부를 가로질러 공유될 수 있다. 메모리(106)에 결합된 메모리 인터페이스(1332), 집적 입출력 블록(IIO)(1334), 및 라스트 레벨 캐시(LLC)(1336)가 코히어런트 상호접속부(1330)에 또한 결합된다. IIO(1334)는 프로세서 코어, 메모리, 및 캐시에 의해 채용된 코히어런트 도메인과, 한 쌍의 PCIe 루트 콤플렉스(RC)(1338, 1340)를 포함하는 IO 구성요소 및 IO 인터페이스에 대해 채용된 비-코히어런트 도메인 사이의 인터페이스를 제공한다. 당 기술 분야에 잘 알려진 바와 같이, PCIe RC는 PCIe 인터페이스(1342, 1344, 1346, 1348)에 의해 도시된 바와 같이, 다수의 PCIe 인터페이스 및 PCIe 디바이스가 결합될 수 있는 PCIe 상호접속부 계층의 최상위에 위치한다. 도시된 바와 같이, PCIe(1344)는 HFI(102)의 PCIe 인터페이스(118)에 결합된다.
도 13에 도시된 것과 같은 몇몇 실시예에서, 프로세서(1306)는 SoC 아키텍처를 채용한다. 다른 실시예에서, PCIe-관련 구성요소는 프로세서에 결합된 IO 칩셋 등 내에 집적된다. 또 다른 실시예에서, 프로세서(1306) 및 하나 이상의 HFI(102)는 SoC(1350)의 점선 윤곽에 의해 도시된 바와 같이, SoC 상에 집적된다. 또한, 도시된 바와 같이, 제 2 HFI(102)는 PCIe 인터페이스(1346)에 결합된 것으로 도시되어 있고, 여기서 점선 윤곽은 이것이 선택적인 구성이라는 것을 지시한다. 일 실시예에서, 다수의 HFI는 도 14에 도시된 바와 같이, ASIC(응용 주문형 집적 회로)(1400) 상에서 구현된다. 도 13에 또한 도시된 바와 같이, 소프트웨어 애플리케이션(1352)은 프로세서(1306) 상에서 실행하는 운영 체제에 의해 호스팅된 하나 이상의 가상 기계 또는 프로세서 코어(1328) 중 하나 이상에서 실행하는 소프트웨어 구성요소를 포함한다. 이들 소프트웨어 구성요소에 추가하여, 메모리(106)(적용가능한 캐시 레벨을 포함함)와 전송 엔진(108) 및 수신 엔진(114) 사이의 데이터 전달을 용이하게 하기 위해 메모리(106) 내에 구현된 부가의 소프트웨어 구성요소 및 버퍼가 존재한다.
본 명세서에 설명된 요지의 다른 양태가 이하의 번호 부기된 항에 설명되어 있다.
1. 방법에 있어서,
패킷 데이터를 저장하도록 구성된 복수의 송신 블록을 포함하는 메모리 버퍼를 각각 포함하는 복수의 송신 콘텍스트로 프로그램된 입출력(Programmed Input/Output: PIO) 송신 메모리 내의 메모리 공간을 파티셔닝하는 단계;
그 하에서 각각의 송신 블록이 FIFO 순서를 갖는 FIFO 버퍼 내의 각각의 FIFO 슬롯을 점유하고 소정의 패킷을 위한 데이터가 FIFO 순서 내의 하나 이상의 각각의 순차적인 FIFO 슬롯을 점유하는 하나 이상의 송신 블록 내에 저장되는 각각의 송신 콘텍스트를 위한 선입선출(First-in, First-out: FIFO)을 사용하여 저장 스킴을 구현하는 단계;
상기 패킷의 적어도 일부에 대해 송신 블록이 FIFO 순서와는 상이한 순서로 패킷 데이터로 충전되도록 비순차적으로 송신 블록에 기록된 패킷 데이터를 수신하는 단계;
충전된 패킷 데이터를 포함하는 송신 블록을 이그레스하는 단계;
하나 이상의 송신 블록이 송신 콘텍스트로부터 이그레스되는 것을 검출하는 것에 응답하여,
프리하게 된 하나 이상의 FIFO 슬롯을 검출하는 단계;
프리하게 된 하나 이상의 FIFO 슬롯의 임의의 하나가 크레딧 리턴 표식이 리턴되어 있지 않은 송신 콘텍스트에 대해 FIFO 순서로 최하위 슬롯을 점유하는지를 검출하는 단계; 및 만일 그러하면,
크레딧 정보가 리턴되지 않은 최하위 슬롯을 포함하는 FIFO 순서에서 프리한 슬롯의 시퀀스의 최상위 FIFO 슬롯이 식별될 수 있는 크레딧 리턴 표식을 리턴하는 단계를 포함하는 방법.
2. 항 1에 있어서, 크레딧 리턴 표식은 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트가 초기화되었던 이후로 프리하게 된 송신 콘텍스트를 위한 FIFO 순서로 송신 블록의 합계를 포함하는 절대 크레딧 리턴 카운트를 포함하는 방법.
3. 항 2에 있어서, 각각의 크레딧은 송신 블록에 대응하고,
각각의 송신 콘텍스트에 대해, 절대 크레딧 송신 카운트(absolute credit sent count)가 초기화되었던 이후로 실행을 위해 디스패치되어 있던 PIO 기록 인스트럭션을 통해 충전되어 있거나 충전될 송신 블록의 합계를 식별하는 절대 크레딧 송신 카운트를 유지하는 단계;
송신 콘텍스트를 위한 절대 크레딧 리턴 카운트를 수신하는 단계;
부가의 패킷 데이터가 송신 콘텍스트에 기록될 수 있는지 여부를 판정하기 위해 송신 콘텍스트를 위한 절대 크레딧 리턴된 카운트에 송신 콘텍스트를 위한 절대 크레딧 송신 카운트를 비교하는 단계를 추가로 포함하는 방법.
4. 항 3에 있어서,
송신 콘텍스트 내에 송신 블록을 저장하기 위해 물리적 원형 FIFO를 구현하는 단계;
송신 콘텍스트를 위한 절대 크레딧 리턴 카운트 및 절대 크레딧 송신 카운트를 트래킹하기 위한 논리 원형 FIFO를 구현하는 단계 - 논리 원형 FIFO의 크기는 물리적 원형 FIFO의 크기보다 큼 - 를 추가로 포함하는 방법.
5. 항 3 또는 4에 있어서,
PIO 송신 메모리 내의 송신 콘텍스트에 데이터를 기록하기 위한 PIO 기록 인스트럭션을 원형 FIFO 순서로 프로세서에 디스패치하는 단계 - 원형 FIFO는 송신 콘텍스트를 위한 다수의 송신 블록에 정합하는 다수의 FIFO 슬롯을 갖고, 각각의 PIO 기록 인스트럭션은 각각의 송신 블록에 대응하는 PIO 송신 메모리 어드레스를 규정함 -; 및
절대 크레딧 송신 카운트와 절대 크레딧 리턴 카운트 사이의 차이가 다수의 FIFO 슬롯에 도달하면 프로세서로의 PIO 기록 인스트럭션의 디스패치를 일시정지하는 단계를 추가로 포함하는 방법.
6. 항 2 내지 5 중 어느 하나에 있어서,
최소 크레딧 리턴 임계치를 규정하는 단계; 및
송신 콘텍스트를 위한 절대 크레딧 리턴 카운트와 가장 최근의 리턴된 절대 크레딧 리턴 카운트 사이의 차이가 최소 크레딧 리턴 임계치와 일치하거나 초과하면 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트를 리턴하는 단계; 그렇지 않으면,
송신 콘텍스트를 위한 절대 크레딧 리턴 카운트와 가장 최근의 리턴된 절대 크레딧 리턴 카운트 사이의 차이가 최소 크레딧 리턴 임계치와 일치하거나 초과할 때까지 절대 크레딧 리턴 카운트를 리턴하기를 대기하는 단계를 포함하는 방법.
7. 항 2 내지 6 중 어느 하나에 있어서,
단일 메시지를 거쳐 복수의 각각의 송신 콘텍스트를 위한 복수의 절대 크레딧 리턴 카운트값을 리턴하는 단계를 추가로 포함하는 방법.
8. 상기 항들 중 어느 하나에 있어서, 패킷을 위한 모든 패킷 데이터가 PIO 송신 메모리에 기록될 때까지 소정의 패킷을 위한 데이터를 저장하는 임의의 송신 블록이 이그레스하는 것을 방지하는 단계를 추가로 포함하는 방법.
9. 프로세서 상에서 실행될 때 프로세서를 포함하는 컴퓨터가 상기 항들 중 어느 하나의 방법을 구현하는 것을 가능하게 하도록 구성된 인스트럭션이 그 위에 저장되어 있는 비일시적 기계 판독가능 매체.
10. 장치에 있어서,
입출력(IO) 인터페이스;
IO 인터페이스에 결합된 전송 엔진을 포함하고, 전송 엔진은,
프로그램된 입출력(PIO) 송신 메모리;
PIO 송신 메모리에 작동식으로 결합된 이그레스 블록; 및
회로 및 로직을 포함하고, 회로 및 로직은
복수의 순차적 송신 블록을 각각 포함하는 복수의 송신 콘텍스트 내로 PIO 송신 메모리를 파티셔닝하고;
그 하에서 각각의 송신 블록이 FIFO 순서를 갖는 FIFO 버퍼 내의 각각의 FIFO 슬롯을 점유하고 소정의 패킷을 위한 데이터가 FIFO 순서 내의 하나 이상의 각각의 순차적인 FIFO 슬롯을 점유하는 하나 이상의 송신 블록 내에 저장되는 각각의 송신 콘텍스트를 위한 선입선출(FIFO)을 사용하여 저장 스킴을 구현하고;
패킷의 적어도 일부에 대해 송신 블록이 FIFO 순서와는 상이한 순서로 패킷 데이터로 충전되도록 비순차적으로 송신 블록에 기록된 패킷 데이터를 수신하고;
충전된 패킷 데이터를 포함하는 송신 블록을 이그레스하고;
하나 이상의 송신 블록이 송신 콘텍스트로부터 이그레스되는 것을 검출하는 것에 응답하여,
프리하게 된 하나 이상의 FIFO 슬롯을 검출하고;
프리하게 된 하나 이상의 FIFO 슬롯의 임의의 하나가 절대 크레딧 리턴이 리턴되어 있지 않은 송신 콘텍스트에 대해 FIFO 순서로 최하위 슬롯을 점유하는지를 검출하고; 만일 그러하면,
프리하게 된 FIFO 슬롯의 시퀀스에서 그리고 크레딧 리턴 표식이 리턴되어 있지 않은 송신 콘텍스트에 대해 FIFO 순서로 최하위의 프리하게 된 슬롯으로 시작하여 크레딧 리턴 표식이 리턴되어 있지 않은 최상위 FIFO 슬롯을 결정하고;
결정된 최상위 FIFO 슬롯에 기초하여 절대 크레딧 리턴 카운트를 리턴하는 장치.
11. 항 10에 있어서, 절대 크레딧 리턴 카운트는 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트가 초기화되었던 이후로 프리하게 된 송신 콘텍스트를 위한 FIFO 순서로 송신 블록의 합계를 포함하는 장치.
12. 항 10 또는 11에 있어서, 전송 엔진은
송신 콘텍스트 내에 송신 블록을 저장하기 위한 물리적 원형 FIFO를 구현하고;
각각의 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트를 트래킹하기 위한 논리 원형 FIFO를 구현하기 위한 로직을 추가로 포함하고, 논리 원형 FIFO의 크기는 모든 송신 콘텍스트에 대해 동일하고, 적어도 2개의 송신 콘테스트 및 이들의 연계된 물리적 원형 FIFO의 크기는 상이한 장치.
13. 항 10 내지 12 중 어느 하나에 있어서, 전송 엔진은
송신 콘텍스트를 위한 절대 크레딧 리턴 카운트와 가장 최근의 리턴된 절대 크레딧 리턴 카운트 사이의 차이가 최소 크레딧 리턴 임계치와 일치하거나 초과하면 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트를 리턴하고; 그렇지 않으면,
송신 콘텍스트를 위한 절대 크레딧 리턴 카운트와 가장 최근의 리턴된 절대 크레딧 리턴 카운트 사이의 차이가 최소 크레딧 리턴 임계치와 일치하거나 초과할 때까지 절대 크레딧 리턴 카운트를 리턴하기를 대기하기 위한 로직을 추가로 포함하는 장치.
14. 항 10 내지 13 중 어느 하나에 있어서, 전송 엔진은
동시에 복수의 송신 콘텍스트 내의 FIFO 슬롯의 프리함을 검출하고 복수의 송신 콘텍스트 중의 다수의 송신 콘텍스트의 각각에 대한 절대 크레딧 카운트를 포함하는 복수의 절대 크레딧 카운트를 결정하고;
단일 크레딧 리턴 메시지를 거쳐 복수의 절대 크레딧 리턴 카운트를 리턴하기 위한 로직을 추가로 포함하는 장치.
15. 항 10 내지 14 중 어느 하나에 있어서, IO 인터페이스는 제 1(PCIe) 인터페이스를 포함하고, 장치는
비순차적 실행을 지원하는 복수의 프로세서 코어를 갖고, 메모리 인터페이스, 적어도 하나의 저장 버퍼, 및 PCIe 상호접속부를 거쳐 제 1 PCIe 인터페이스에 결합된 제 2 PCIe 인터페이스를 포함하는 프로세서를 추가로 포함하고,
PIO 송신 메모리로의 메모리 인터페이스에 결합될 때 메모리 내에 저장된 각각의 패킷을 위한 기록 패킷 데이터에 PIO 기록 인스트럭션의 시퀀스를 수신하고,
프로세서 코어 상의 인스트럭션 스레드로서 PIO 기록 인스트럭션의 시퀀스를 실행하고 - PIO 기록 인스트럭션의 실행은 데이터가 저장 버퍼 내의 저장 유닛에 기록되게 하고, 저장 유닛은 저장 유닛의 라인을 포함하는 저장 블록으로 그룹화되고, PIO 기록 인스트럭션의 부분은 비순차적으로 실행되어 저장 블록이 충전되기 전에 데이터가 상이한 저장 블록 내의 저장 유닛에 기록되게 함 -;
저장 블록이 충전될 때를 검출하고;
저장 블록이 충전되는 것을 검출하는 것에 응답하여, PCIe 상호접속부를 거쳐 송신된 PIO 송신 메모리 내의 송신 블록에 PCIe 포스팅된 기록을 거쳐 저장 블록 내의 데이터를 드레인하기 위한 회로 및 로직을 추가로 포함하는 장치.
16. 항 10 내지 15 중 어느 하나에 있어서, 전송 엔진에 결합되고 복수의 송신기를 포함하는 전송 포트를 추가로 포함하고, 장치는 단일의 집적 구성요소를 포함하는 장치.
17. 항 16에 있어서, 장치는 호스트 패브릭 인터페이스를 포함하고, 호스트 패브릭 인터페이스는
IO 인터페이스에 결합된 수신 엔진; 및
수신 엔진에 결합된 수신 포트를 추가로 포함하는 장치.
18. 항 17에 있어서, 장치는 항 17의 호스트 패브릭 인터페이스에 대해 규정된 구성을 갖는 다수의 호스트 패브릭 인터페이스를 포함하는 호스트 패브릭 인터페이스 칩을 포함하는 장치.
19. 시스템에 있어서,
비순차적 실행을 지원하는 복수의 프로세서 코어를 갖고 메모리 인터페이스, 적어도 하나의 저장 버퍼, 및 제 1 PCIe(Peripheral Component Interconnect Express: 주변기기 구성요소 상호접속 익스프레스) 인터페이스를 포함하는 프로세서;
PCIe 상호접속부를 거쳐 프로세서의 제 1 PCIe 인터페이스에 결합된 제 2 PCIe 인터페이스; 및
제 2 PCIe 인터페이스에 작동식으로 결합되고 프로그램된 입출력(PIO) 송신 메모리 및 PIO 송신 메모리에 작동식으로 결합된 이그레스 블록을 포함하는 전송 엔진을 포함하고,
프로세서는
메모리 내에 저장된 각각의 패킷을 위한 패킷 데이터를 PIO 송신 메모리에 기록하기 위해 프로그램된 입출력(PIO) 기록 인스트럭션의 시퀀스를 수신하고 - 각각의 PIO 기록 인스트럭션은 데이터를 포함하는 메모리 내의 캐시 라인의 위치 및 데이터가 기록될 PIO 송신 메모리 내의 송신 블록의 메모리-맵핑된 어드레스를 규정하고, 다수의 패킷을 위한 패킷 데이터를 동일한 송신 콘텍스트에 기록하기 위한 PIO 기록 인스트럭션이 원래 선입선출(FIFO) 순서로 순차적으로 그룹화됨 -;
프로세서 코어 상에 인스트럭션 스레드로서 PIO 기록 인스트럭션의 시퀀스를 실행하기 위한 - PIO 기록 인스트럭션의 부분은 비순차적으로 실행되어 데이터가 인스트럭션이 수신되는 순서와는 상이한 순서로 PIO 송신 메모리 내의 송신 블록에 기록되게 함 -; 회로 및 로직을 포함하고,
전송 엔진은
복수의 순차적 송신 블록을 각각 포함하는 복수의 송신 콘텍스트로 PIO 송신 메모리를 파티셔닝하고;
그 하에서 각각의 송신 블록이 송신 콘텍스트 FIFO 순서로 각각의 FIFO 슬롯을 점유하고 소정의 패킷을 위한 데이터가 하나 이상의 각각의 순차적인 FIFO 슬롯을 점유하는 하나 이상의 송신 블록 내에 저장되는 각각의 송신 콘텍스트를 위한 FIFO 시맨틱스를 사용하여 저장 스킴을 구현하고;
PIO 기록 인스트럭션의 비순차적 실행을 거쳐 송신 블록에 기록된 패킷 데이터를 수신하고;
충전된 패킷 데이터를 포함하는 송신 블록을 이그레스하고;
하나 이상의 송신 블록이 송신 콘텍스트로부터 이그레스되는 것을 검출하는 것에 응답하여,
프리하게 된 하나 이상의 FIFO 슬롯을 검출하고;
프리하게 된 하나 이상의 FIFO 슬롯의 임의의 하나가 절대 크레딧 리턴이 리턴되어 있지 않은 송신 콘텍스트 FIFO 순서로 최하위 슬롯을 점유하는지를 검출하고; 만일 그러하면,
프리하게 된 FIFO 슬롯의 시퀀스에서 그리고 크레딧 리턴 표식이 리턴되어 있지 않은 송신 콘텍스트에 대해 FIFO 순서로 최하위의 프리하게 된 슬롯으로 시작하여 크레딧 리턴 표식이 리턴되어 있지 않은 최상위 FIFO 슬롯을 결정하고;
결정된 최상위 FIFO 슬롯에 기초하여 절대 크레딧 리턴 카운트를 리턴하기 위한 회로 및 로직을 포함하는 시스템.
20. 항 19에 있어서, 절대 크레딧 리턴 카운트는 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트가 초기화되었던 이후로 프리하게 된 송신 콘텍스트를 위한 FIFO 순서로 송신 블록의 합계를 포함하는 시스템.
21. 항 19 또는 항 20에 있어서, 전송 엔진은
송신 콘텍스트 내에 송신 블록을 저장하기 위한 물리적 원형 FIFO를 구현하고;
각각의 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트를 트래킹하기 위한 논리 원형 FIFO를 구현하기 위한 로직을 추가로 포함하고, 논리 원형 FIFO의 크기는 모든 송신 콘텍스트에 대해 동일하고, 적어도 2개의 송신 콘테스트 및 이들의 연계된 물리적 원형 FIFO의 크기는 상이한 시스템.
22. 항 19 내지 21 중 어느 하나에 있어서, 전송 엔진은
절대 크레딧 리턴 카운트와 송신 콘텍스트를 위한 가장 최근의 리턴된 절대 크레딧 리턴 카운트 사이의 차이가 최소 크레딧 리턴 임계치와 일치하거나 초과하면 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트를 리턴하고; 그렇지 않으면,
절대 크레딧 리턴 카운트와 송신 콘텍스트를 위한 가장 최근의 리턴된 절대 크레딧 리턴 카운트 사이의 차이가 최소 크레딧 리턴 임계치와 일치하거나 초과할 때까지 절대 크레딧 리턴 카운트를 리턴하기를 대기하기 위한 로직을 추가로 포함하는 시스템.
23. 항 19 내지 22 중 어느 하나에 있어서, 전송 엔진은
동시에 복수의 송신 콘텍스트 내의 FIFO 슬롯의 프리함을 검출하고 복수의 송신 콘텍스트 중의 다수의 송신 콘텍스트의 각각에 대한 절대 크레딧 카운트를 포함하는 복수의 절대 크레딧 카운트를 결정하고;
단일의 크레딧 리턴 메시지를 거쳐 복수의 절대 크레딧 리턴 카운트를 리턴하기 위한 로직을 추가로 포함하는 시스템.
24. 항 19 내지 23 중 어느 하나에 있어서, 제 2 PCIe 인터페이스 및 전송 엔진은
전송 엔진에 결합되고 복수의 송신기를 포함하는 송신 포트;
제 2 PCIe 인터페이스에 결합된 수신 엔진; 및
수신 엔진에 결합되고 복수의 수신기를 포함하는 수신 포트를 추가로 포함하는 호스트 패브릭 인터페이스에서 구현되는 시스템.
25. 항 24에 있어서, 시스템은 프로세서 및 호스트 패브릭 인터페이스를 포함하는 시스템 온 칩(System on a Chip: SoC)을 포함하는 시스템.
26. 항 19 내지 25 중 어느 하나에 있어서,
메모리 인터페이스에 결합된 메모리를 추가로 포함하고, 상기 메모리에는, 프로세서에 의한 실행시에 이하의 동작,
각각의 송신 콘텍스트에 대해, 절대 크레딧 송신 카운트가 초기화되었던 이후로 실행을 위해 디스패치되어 있던 PIO 기록 인스트럭션을 통해 충전되어 있거나 충전될 송신 블록의 합계를 식별하는 절대 크레딧 송신 카운트를 유지하고;
송신 콘텍스트를 위한 절대 크레딧 리턴 카운트를 수신하고;
부가의 패킷 데이터가 송신 콘텍스트에 기록될 수 있는지 여부를 판정하기 위해 송신 콘텍스트를 위한 절대 크레딧 리턴된 카운트에 송신 콘텍스트를 위한 절대 크레딧 송신 카운트를 비교하는 동작을 수행하도록 구성되는 소프트웨어 애플리케이션을 포함하는 인스트럭션이 저장되는 시스템.
27. 항 26에 있어서, 소프트웨어 애플리케이션은 프로세서에 의해 실행될 때,
PIO 송신 메모리 내의 송신 콘텍스트에 데이터를 기록하기 위한 PIO 기록 인스트럭션을 원형 FIFO 순서로 프로세서 코어에 디스패치하고 - 원형 FIFO는 송신 콘텍스트를 위한 다수의 송신 블록에 정합하는 다수의 FIFO 슬롯을 갖고, 각각의 PIO 기록 인스트럭션은 각각의 송신 블록에 대응하는 PIO 송신 메모리 어드레스를 규정함 -;
절대 크레딧 송신 카운트와 절대 크레딧 리턴 카운트 사이의 차이가 다수의 FIFO 슬롯에 도달하면 프로세서로의 PIO 기록 인스트럭션의 디스패치를 일시정지하는 것을 포함하는
동작을 수행하기 위한 인스트럭션을 추가로 포함하는 시스템.
28. 항 19 내지 27 중 어느 하나에 있어서, PIO 기록 인스트럭션은 512-비트 기록 인스트럭션을 포함하고, 각각의 메모리 캐시 라인 및 송신 블록은 64 바이트의 크기를 갖고, 패킷 데이터는 64-바이트 PCIe 포스팅된 기록을 거쳐 송신 블록에 기록되는 시스템.
29. 장치에 있어서,
입출력(IO) 인터페이스;
IO 인터페이스에 결합된 전송 엔진을 포함하고, 전송 엔진은,
프로그램된 입출력(PIO) 송신 메모리;
PIO 송신 메모리에 작동식으로 결합된 이그레스 블록; 및
복수의 순차적 송신 블록을 각각 포함하는 복수의 송신 콘텍스트로 PIO 송신 메모리를 파티셔닝하고;
그 하에서 각각의 송신 블록이 FIFO 순서를 갖는 FIFO 버퍼 내의 각각의 FIFO 슬롯을 점유하고 소정의 패킷을 위한 데이터가 FIFO 순서 내의 하나 이상의 각각의 순차적인 FIFO 슬롯을 점유하는 하나 이상의 송신 블록 내에 저장되는 각각의 송신 콘텍스트를 위한 선입선출(FIFO)을 사용하여 저장 스킴을 구현하고;
상기 패킷의 적어도 일부에 대해 송신 블록이 FIFO 순서와는 상이한 순서로 패킷 데이터로 충전되도록 비순차적으로 송신 블록에 기록된 패킷 데이터를 수신하고;
충전된 패킷 데이터를 포함하는 송신 블록을 이그레스하고;
하나 이상의 송신 블록이 송신 콘텍스트로부터 이그레스되는 것을 검출하는 것에 응답하여, 프리하게 된 하나 이상의 FIFO 슬롯을 검출하고;
프리하게 된 하나 이상의 FIFO 슬롯의 임의의 하나가 절대 크레딧 리턴이 리턴되어 있지 않은 송신 콘텍스트에 대해 FIFO 순서로 최하위 슬롯을 점유하는지를 검출하고; 만일 그러하면,
프리하게 된 FIFO 슬롯의 시퀀스에서 그리고 크레딧 리턴 표식이 리턴되어 있지 않은 송신 콘텍스트에 대해 FIFO 순서로 최하위의 프리하게 된 슬롯으로 시작하여 크레딧 리턴 표식이 리턴되어 있지 않은 최상위 FIFO 슬롯을 결정하고;
결정된 최상위 FIFO 슬롯에 기초하여 절대 크레딧 리턴 카운트를 리턴하기 위한 수단을 포함하는 장치.
30. 항 29에 있어서, 절대 크레딧 리턴 카운트는 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트가 초기화되었던 이후로 프리하게 된 송신 콘텍스트를 위한 FIFO 순서로 송신 블록의 합계를 포함하는 장치.
31. 항 29 또는 30에 있어서, 전송 엔진은
송신 콘텍스트 내에 송신 블록을 저장하기 위한 물리적 원형 FIFO를 구현하고;
각각의 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트를 트래킹하기 위한 논리 원형 FIFO를 구현하기 위한 수단을 추가로 포함하고, 논리 원형 FIFO의 크기는 모든 송신 콘텍스트에 대해 동일하고, 적어도 2개의 송신 콘테스트 및 이들의 연계된 물리적 원형 FIFO의 크기는 상이한 장치.
32. 항 29 내지 31 중 어느 하나에 있어서, 전송 엔진은
송신 콘텍스트를 위한 절대 크레딧 리턴 카운트와 가장 최근의 리턴된 절대 크레딧 리턴 카운트 사이의 차이가 최소 크레딧 리턴 임계치와 일치하거나 초과하면 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트를 리턴하고; 그렇지 않으면,
절대 크레딧 리턴 카운트와 송신 콘텍스트를 위한 가장 최근의 리턴된 절대 크레딧 리턴 카운트 사이의 차이가 최소 크레딧 리턴 임계치와 일치하거나 초과할 때까지 절대 크레딧 리턴 카운트를 리턴하기를 대기하기 위한 수단을 추가로 포함하는 장치.
33. 항 29 내지 32 중 어느 하나에 있어서, 전송 엔진은
동시에 복수의 송신 콘텍스트 내의 FIFO 슬롯의 프리함을 검출하고 복수의 송신 콘텍스트 중의 다수의 송신 콘텍스트의 각각에 대한 절대 크레딧 카운트를 포함하는 복수의 절대 크레딧 카운트를 결정하고;
단일 크레딧 리턴 메시지를 거쳐 복수의 절대 크레딧 리턴 카운트를 리턴하기 위한 수단을 추가로 포함하는 장치.
34. 항 29 내지 33 중 어느 하나에 있어서, IO 인터페이스는 제 1(PCIe) 인터페이스를 포함하고, 장치는
비순차적 실행을 지원하는 복수의 프로세서 코어를 갖고 메모리 인터페이스, 적어도 하나의 저장 버퍼, 및 PCIe 상호접속부를 거쳐 제 1 PCIe 인터페이스에 결합된 제 2 PCIe 인터페이스를 포함하는 프로세서를 추가로 포함하고,
PIO 송신 메모리로의 메모리 인터페이스에 결합될 때 메모리 내에 저장된 각각의 패킷을 위한 기록 패킷 데이터에 PIO 기록 인스트럭션의 시퀀스를 수신하고,
프로세서 코어 상의 인스트럭션 스레드로서 PIO 기록 인스트럭션의 시퀀스를 실행하고 - PIO 기록 인스트럭션의 실행은 데이터가 저장 버퍼 내의 저장 유닛에 기록되게 하고, 저장 유닛은 저장 유닛의 라인을 포함하는 저장 블록으로 그룹화되고, PIO 기록 인스트럭션의 부분은 비순차적으로 실행되어 저장 블록이 충전되기 전에 데이터가 상이한 저장 블록 내의 저장 유닛에 기록되게 함 -;
저장 블록이 충전될 때를 검출하고;
저장 블록이 충전되는 것을 검출하는 것에 응답하여, PCIe 상호접속부를 거쳐 송신된 PIO 송신 메모리 내의 송신 블록에 PCIe 포스팅된 기록을 거쳐 저장 블록 내의 데이터를 드레인하기 위한 수단을 추가로 포함하는 장치.
35. 항 29 내지 34 중 어느 하나에 있어서, 전송 엔진에 결합되고 복수의 송신기를 포함하는 전송 포트를 추가로 포함하고, 장치는 단일의 집적 구성요소를 포함하는 장치.
36. 항 35에 있어서, 장치는 호스트 패브릭 인터페이스를 포함하고, 호스트 패브릭 인터페이스는
IO 인터페이스에 결합된 수신 엔진; 및
수신 엔진에 결합된 수신 포트를 추가로 포함하는 장치.
37. 항 36에 있어서, 장치는 항 36의 호스트 패브릭 인터페이스에 대해 규정된 구성을 갖는 다수의 호스트 패브릭 인터페이스를 포함하는 호스트 패브릭 인터페이스 칩을 포함하는 장치.
일반적으로, 본 출원의 도면에 도시된 회로, 로직 및 구성요소는 또한 이산 칩, SoC, 멀티칩 모듈, 및 다수의 네트워크 인터페이스를 위한 지원을 포함하는 네트워킹/링크 인터페이스 칩을 포함하는 다양한 유형의 집적 회로(예를 들어, 반도체칩) 및 모듈에서 구현될 수 있다. 또한, 본 명세서에 사용될 때, 다양한 동작을 실행하기 위한 회로 및 로직은 매립형 로직, 매립형 프로세서, 콘트롤러, 마이크로엔진 중 하나 이상을 거쳐, 또는 다르게는 하드웨어, 소프트웨어, 및/또는 펌웨어의 임의의 조합을 사용하여 구현될 수 있다. 예를 들어, 다양한 논리 블록 및/또는 회로에 의해 도시된 동작은 이들에 한정되는 것은 아니지만, ASIC, FPGA, IP 블록 라이브러리를 포함하는 프로그램된 논리 게이트 등을 사용하여, 또는 프로세서, 프로세서 코어, 콘트롤러, 마이크로콘트롤러, 마이크로엔진 등을 포함하는 하나 이상의 프로세싱 요소 상에서 실행된 소프트웨어 또는 펌웨어 인스트럭션의 하나 이상을 통해 실행될 수 있다.
게다가, 본 발명의 실시예의 양태는 반도체칩, SoC, 멀티칩 모듈 등 내에 뿐만 아니라, 비일시적 기계 판독가능 매체 내에 구현될 수 있다. 예를 들어, 전술된 디자인은 반도체 디바이스를 설계하기 위해 사용된 디자인 툴과 연계된 비일시적 기계 판독가능 매체 상에 저장되고 그리고/또는 그 내에 매립될 수 있다. 예는 VHSIC 하드웨어 기술 언어(VHSIC Hardware Description Language: VHDL) 언어, 베릴로그 언어 또는 SPICE 언어, 또는 다른 하드웨어 기술 언어로 포맷된 넷리스트를 포함한다. 몇몇 넷리스트 예는 거동 레벨 넷리스트, 레지스터 전송 레벨(RTL) 넷리스트, 게이트 레벨 넷리스트 및 트랜지스터 레벨 넷리스트를 포함한다. 기계 판독가능 매체는 GDS-II 파일과 같은 레이아웃 정보를 갖는 매체를 또한 포함한다.
더욱이, 반도체 칩 디자인을 위한 넷리스트 파일 또는 다른 기계 판독가능 매체는 전술된 교시의 방법을 수행하도록 시뮬레이션 환경에서 사용될 수 있다. 몇몇 실시예가 특정 구현예를 참조하여 설명되었지만, 다른 구현예가 몇몇 실시예에 따라 가능하다. 부가적으로, 도면에 도시되고 그리고/또는 본 명세서에 설명된 요소 또는 다른 특징부의 배열 및/또는 순서는 도시되고 설명된 특정 방식으로 배열될 필요는 없다. 다수의 다른 배열이 몇몇 실시예에 따라 가능하다.
도면에 도시된 각각의 시스템에서, 요소는 몇몇 경우에 표현된 요소가 상이하고 그리고/또는 유사할 수 있는 것을 제안하기 위해 동일한 도면 부호 또는 상이한 도면 부호를 각각 가질 수 있다. 그러나, 요소는 상이한 구현예를 갖고 본 명세서에 도시되거나 설명된 시스템의 일부 또는 모두와 동작하는데 충분하게 융통성이 있을 수 있다. 도면에 도시된 다양한 요소는 동일하거나 상이할 수 있다. 어느 것을 제 1 요소라 칭하고, 어느 것을 제 2 요소라 칭하는 것은 임의적이다.
상세한 설명 및 청구범위에서, 용어 "결합된" 및 "접속된"이 이들의 파생어와 함께 사용될 수 있다. 이들 용어는 서로에 대한 동의어로서 의도되지는 않는다는 것이 이해되어야 한다. 오히려, 특정 실시예에서, "접속된"은 2개 이상의 요소가 서로 직접 물리적 또는 전기적 접촉하고 있는 것을 지시하는데 사용될 수 있다. "결합된"은 2개 이상의 요소가 직접 물리적 또는 전기적 접촉하는 것을 의미할 수 있다. 그러나, "결합된"은 또한 2개 이상의 요소가 서로 직접 접촉하지 않지만, 또한 여전히 서로 협동하거나 상호작용하는 것을 의미할 수 있다.
실시예는 본 발명의 구현예 또는 예이다. 본 명세서에서 "실시예", "일 실시예", "몇몇 실시예", 또는 "다른 실시예"의 참조는 실시예와 관련하여 설명된 특정 특징, 구조, 또는 특성이 본 발명의 반드시 모든 실시예가 아니라, 적어도 몇몇 실시예에 포함되는 것을 의미한다. "실시예", "일 실시예", 또는 "몇몇 실시예"의 다양한 출현은 반드시 모두 동일한 실시예를 언급하는 것은 아니다.
본 명세서에 설명되고 도시된 모든 구성요소, 특징부, 구조체, 특성 등이 특정 실시예 또는 실시예에 포함되어야 하는 것은 아니다. 명세서가 구성요소, 특징부, 구조체, 또는 특성이 "포함할 수 있는", "포함할 수도 있는", "포함될 수 있는", "포함될 수도 있는" 것으로 언급하면, 예를 들어 특정 구성요소, 특징부, 구조체, 또는 특성은 포함되도록 요구되는 것은 아니다. 명세서 또는 청구범위가 "단수의" 요소를 언급하면, 이는 단지 하나의 요소만이 존재하는 것을 의미하는 것은 아니다. 명세서 또는 청구범위가 "부가의" 요소를 언급하면, 이는 하나 초과의 부가의 요소가 존재하는 것을 배제하는 것은 아니다.
요약서에 설명된 것을 포함하여, 본 발명의 예시된 실시예의 상기 설명은 철저한 것으로 또는 개시된 정확한 형태에 본 발명의 실시예를 한정하도록 의도되는 것은 아니다. 본 발명의 특정 실시예 및 예가 예시의 목적으로 본 명세서에 설명되었지만, 당 기술 분야의 숙련자들이 인식할 수 있는 바와 같이, 다양한 등가의 수정이 본 발명의 범주 내에서 가능하다.
이들 수정은 상기 상세한 설명의 견지에서 본 발명에 이루어질 수도 있다. 이하의 청구범위에 사용된 용어는 본 발명을 명세서 및 도면에 개시된 특정 실시예에 한정하도록 해석되어서는 안된다. 오히려, 본 발명의 범주는 확립된 청구범위 해석의 원리에 따라 해석되어야 하는 이하의 청구범위에 의해 완전히 결정되어야 한다.
100: 시스템 102: 호스트 패브릭 인터페이스(HFI)
104: 프로세서 106: 메모리
107: 메모리 상호접속부 108: 전송 엔진
110: 전송 포트 112: 패브릭 포트
114: 수신 엔진 118: PCIe 인터페이스
120: 송신 메모리 124: 버퍼
136: 파서 140: 수신 레지스터 어레이
104: 프로세서 106: 메모리
107: 메모리 상호접속부 108: 전송 엔진
110: 전송 포트 112: 패브릭 포트
114: 수신 엔진 118: PCIe 인터페이스
120: 송신 메모리 124: 버퍼
136: 파서 140: 수신 레지스터 어레이
Claims (30)
- 방법에 있어서,
복수의 송신 콘텍스트(context)로 프로그램된 입출력(Programmed Input/Output: PIO) 송신 메모리 내의 메모리 공간을 파티셔닝하는 단계 - 상기 복수의 송신 콘텍스트 각각은 패킷 데이터를 저장하도록 구성된 복수의 송신 블록을 포함하는 메모리 버퍼와 연계됨 - ;
각각의 송신 콘텍스트를 위한 선입선출(First-in, First-out: FIFO) 스킴(scheme)을 사용하여 저장 스킴을 구현하는 단계 - 상기 각각의 송신 콘텍스트 하에서 각각의 송신 블록이 FIFO 순서를 갖는 FIFO 버퍼 내의 각각의 FIFO 슬롯을 점유하고 소정의 패킷을 위한 데이터가 FIFO 순서 내의 하나 이상의 각각의 순차적인 FIFO 슬롯을 점유하는 하나 이상의 송신 블록 내에 저장됨 - ;
송신 콘텍스트의 송신 블록을 패킷 데이터로 충전하는(fill) 단계;
송신 콘텍스트로부터 충전된 패킷 데이터를 포함하는 송신 블록을 이그레스하는(egress) 단계;
하나 이상의 송신 블록이 송신 콘텍스트로부터 이그레스되는 것을 검출하는 것에 응답하여,
프리하게 된 하나 이상의 FIFO 슬롯을 검출하는 단계;
상기 프리하게 된 하나 이상의 FIFO 슬롯이 크레딧 리턴 표식이 리턴되어 있지 않은 송신 콘텍스트에 대해 상기 FIFO 순서로 최하위 슬롯을 언제 점유하는지를 검출하는 단계; 및
크레딧 정보가 리턴되어 있지 않은 최하위 슬롯을 포함하는 FIFO 순서에서 프리하게 된 슬롯의 시퀀스 중 최상위 FIFO 슬롯이 식별될 수 있는 크레딧 리턴 표식을 리턴하는 단계를 포함하는
방법.
- 제 1 항에 있어서,
각각의 송신 콘텍스트에 대해, 상기 송신 콘텍스트를 위한 절대 크레딧 송신 카운트(absolute credit sent count)가 초기화되었던 이후로 실행을 위해 디스패치되어 있던 PIO 기록 인스트럭션을 통해 충전되어 있거나 충전될 송신 블록의 합계를 식별하는 절대 크레딧 송신 카운트를 유지하는 단계;
송신 콘텍스트를 위한 절대 크레딧 리턴 카운트를 수신하는 단계;
부가의 패킷 데이터가 송신 콘텍스트에 기록될 수 있는지 여부를 판정하기 위해 송신 콘텍스트를 위한 절대 크레딧 리턴된 카운트에 송신 콘텍스트를 위한 절대 크레딧 송신 카운트를 비교하는 단계를 추가로 포함하는
방법.
- 제 2 항에 있어서,
송신 콘텍스트 내에 송신 블록을 저장하기 위해 송신 메모리 랩어라운드(wrap-around) FIFO를 구현하는 단계;
송신 콘텍스트를 위한 절대 크레딧 리턴 카운트 및 절대 크레딧 송신 카운트를 트래킹하기 위한 호스트 메모리 랩어라운드 FIFO를 구현하는 단계 - 호스트 메모리 랩어라운드 FIFO의 크기는 송신 메모리 랩어라운드 FIFO의 크기보다 큼 - 를 추가로 포함하는
방법.
- 제 2 항에 있어서,
PIO 송신 메모리 내의 송신 콘텍스트에 데이터를 기록하기 위한 PIO 기록 인스트럭션을 랩어라운드 FIFO 순서로 프로세서에 디스패치하는 단계 - 상기 랩어라운드 FIFO는 송신 콘텍스트를 위한 다수의 송신 블록에 정합하는 다수의 FIFO 슬롯을 갖고, 각각의 PIO 기록 인스트럭션은 각각의 송신 블록에 대응하는 PIO 송신 메모리 어드레스를 규정함 -; 및
절대 크레딧 송신 카운트와 절대 크레딧 리턴 카운트 사이의 차이가 다수의 FIFO 슬롯에 도달하면 프로세서로의 PIO 기록 인스트럭션의 디스패치를 일시정지하는 단계를 추가로 포함하는
방법.
- 제 2 항에 있어서,
최소 크레딧 리턴 임계치를 규정하는 단계; 및
송신 콘텍스트를 위한 절대 크레딧 리턴 카운트와 가장 최근의 리턴된 절대 크레딧 리턴 카운트 사이의 차(difference)가 최소 크레딧 리턴 임계치와 일치하거나 초과하면 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트를 리턴하는 단계; 그렇지 않으면,
송신 콘텍스트를 위한 절대 크레딧 리턴 카운트와 가장 최근의 리턴된 절대 크레딧 리턴 카운트 사이의 차이가 최소 크레딧 리턴 임계치와 일치하거나 초과할 때까지 절대 크레딧 리턴 카운트를 리턴하기를 대기하는 단계를 포함하는
방법.
- 제 1 항에 있어서,
상기 패킷을 위한 모든 패킷 데이터가 PIO 송신 메모리에 기록될 때까지 소정의 패킷을 위한 데이터를 저장하는 임의의 송신 블록이 이그레스하는 것을 방지하는 단계를 추가로 포함하는
방법.
- 장치에 있어서,
입출력(IO) 인터페이스;
상기 IO 인터페이스에 결합된 전송 엔진을 포함하고, 상기 전송 엔진은,
송신 메모리;
상기 송신 메모리에 작동식으로 결합된 이그레스 블록; 및
회로를 포함하고, 상기 회로는
복수의 순차적 송신 블록을 각각 포함하는 복수의 송신 콘텍스트 내로 송신 메모리를 파티셔닝하고;
각각의 송신 콘텍스트를 위한 선입선출(FIFO) 저장 스킴을 구현하고 - 상기 각각의 송신 콘텍스트 하에서 각각의 송신 블록은 FIFO 순서를 갖는 FIFO 버퍼 내의 각각의 FIFO 슬롯을 점유하고, 소정의 패킷을 위한 데이터가 FIFO 순서 내의 하나 이상의 각각의 순차적인 FIFO 슬롯을 점유하는 하나 이상의 송신 블록 내에 저장됨 - ;
패킷의 적어도 일부에 대해 송신 블록이 FIFO 순서와는 상이한 순서로 패킷 데이터로 충전되도록 비순차적으로 송신 블록에 기록된 패킷 데이터를 수신하고;
충전된 패킷 데이터를 포함하는 송신 블록을 이그레스하고;
하나 이상의 송신 블록이 송신 콘텍스트로부터 이그레스되는 것을 검출하는 것에 응답하여,
프리하게 된 하나 이상의 FIFO 슬롯을 검출하고;
프리하게 된 하나 이상의 FIFO 슬롯의 임의의 하나가 크레딧 리턴 표식이 리턴되어 있지 않은 송신 콘텍스트에 대해 FIFO 순서로 최하위의 슬롯을 언제 점유하는지를 검출하고;
크레딧 정보가 리턴되어 있지 않은 최하위 슬롯을 포함하는 FIFO 순서에서 프리하게 된 슬롯의 시퀀스 중 최상위 FIFO 슬롯이 식별될 수 있는 크레딧 리턴 표식을 리턴하는
장치.
- 제 7 항에 있어서,
상기 크레딧 리턴 표식은 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트가 초기화되었던 이후로 프리하게 된 송신 콘텍스트를 위한 FIFO 순서로 송신 블록의 합계를 포함하는 절대 크레딧 리턴 카운트인
장치.
- 제 8 항에 있어서,
상기 전송 엔진은
상기 송신 콘텍스트 내에 송신 블록을 저장하기 위한 송신 메모리 랩어라운드 FIFO를 구현하고;
각각의 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트를 트래킹하기 위한 호스트 메모리 랩어라운드 FIFO를 구현하기 위한 회로를 추가로 포함하고,
상기 호스트 메모리 랩어라운드 FIFO의 크기는 모든 송신 콘텍스트에 대해 동일하고, 적어도 2개의 송신 콘테스트 및 이들의 연계된 송신 메모리 랩어라운드 FIFO의 크기는 상이한
장치.
- 제 8 항에 있어서,
상기 전송 엔진은
상기 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트와 가장 최근의 리턴된 절대 크레딧 리턴 카운트 사이의 차이가 최소 크레딧 리턴 임계치와 일치하거나 초과하면 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트를 리턴하고; 그렇지 않으면,
상기 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트와 가장 최근의 리턴된 절대 크레딧 리턴 카운트 사이의 차이가 최소 크레딧 리턴 임계치와 일치하거나 초과할 때까지 절대 크레딧 리턴 카운트를 리턴하기를 대기하기 위한 회로를 추가로 포함하는
장치.
- 제 7 항에 있어서,
상기 전송 엔진은
동시에 복수의 송신 콘텍스트 내의 FIFO 슬롯의 프리함을 검출하고 복수의 송신 콘텍스트 중의 다수의 송신 콘텍스트의 각각에 대한 절대 크레딧 카운트를 포함하는 복수의 절대 크레딧 카운트를 결정하고;
단일 크레딧 리턴 메시지를 통해 복수의 절대 크레딧 리턴 카운트를 리턴하기 위한 회로를 추가로 포함하는
장치.
- 제 7 항에 있어서,
상기 IO 인터페이스는 제 1(PCIe) 인터페이스를 포함하고, 상기 장치는
비순차적 실행을 지원하는 복수의 프로세서 코어를 갖고, 메모리 인터페이스, 적어도 하나의 저장 버퍼, 및 PCIe 상호접속부를 거쳐 상기 제 1 PCIe 인터페이스에 결합된 제 2 PCIe 인터페이스를 포함하는 프로세서를 추가로 포함하고,
상기 송신 메모리로의 상기 메모리 인터페이스에 결합될 때 메모리 내에 저장된 각각의 패킷을 위한 기록 패킷 데이터에 기록 인스트럭션의 시퀀스를 수신하고,
프로세서 코어 상의 인스트럭션 스레드로서 기록 인스트럭션의 시퀀스를 실행하고 - 상기 기록 인스트럭션의 실행은 데이터가 저장 버퍼 내의 저장 유닛에 기록되게 하고, 상기 저장 유닛은 상기 저장 유닛의 라인을 포함하는 저장 블록으로 그룹화되고, 상기 기록 인스트럭션의 부분은 비순차적으로 실행되어 상기 저장 블록이 충전되기 전에 데이터가 상이한 상기 저장 블록 내의 저장 유닛에 기록되게 함 -;
상기 저장 블록이 충전될 때를 검출하고;
상기 저장 블록이 충전되는 것을 검출하는 것에 응답하여, 상기 PCIe 상호접속부를 거쳐 송신된 상기 송신 메모리 내의 송신 블록에 PCIe 포스팅된 기록을 거쳐 저장 블록 내의 데이터를 드레인하기 위한 회로를 추가로 포함하는
장치.
- 제 7 항에 있어서,
상기 전송 엔진에 결합되고 복수의 송신기를 포함하는 전송 포트를 추가로 포함하고, 상기 장치는 단일의 집적 구성요소를 포함하는
장치.
- 제 13 항에 있어서,
상기 장치는 호스트 패브릭 인터페이스를 포함하고, 상기 호스트 패브릭 인터페이스는
상기 IO 인터페이스에 결합된 수신 엔진; 및
상기 수신 엔진에 결합된 수신 포트를 추가로 포함하는
장치.
- 제 14 항에 있어서,
상기 장치는 상기 호스트 패브릭 인터페이스에 대해 규정된 구성을 갖는 다수의 호스트 패브릭 인터페이스를 포함하는 호스트 패브릭 인터페이스 칩을 포함하는
장치.
- 시스템에 있어서,
비순차적 실행을 지원하는 복수의 프로세서 코어를 갖고, 메모리 인터페이스, 적어도 하나의 저장 버퍼, 및 제 1 PCIe(Peripheral Component Interconnect Express: 주변기기 구성요소 상호접속 익스프레스) 인터페이스를 포함하는 프로세서;
PCIe 상호접속부를 거쳐 상기 프로세서의 상기 제 1 PCIe 인터페이스에 결합된 제 2 PCIe 인터페이스; 및
상기 제 2 PCIe 인터페이스에 작동식으로 결합되고, 송신 메모리 및 상기 송신 메모리에 작동식으로 결합된 이그레스 블록을 포함하는 전송 엔진을 포함하고,
상기 프로세서는
상기 메모리 내에 저장된 각각의 패킷을 위한 패킷 데이터를 상기 송신 메모리에 기록하기 위해 기록 인스트럭션의 시퀀스를 수신하고 - 각각의 기록 인스트럭션은 데이터를 포함하는 메모리 내의 캐시 라인의 위치 및 데이터가 기록될 송신 메모리 내의 송신 블록의 메모리-맵핑된 어드레스를 규정하고, 다수의 패킷을 위한 패킷 데이터를 동일한 송신 콘텍스트에 기록하기 위한 기록 인스트럭션이 원래 선입선출(FIFO) 순서로 순차적으로 그룹화됨 -;
프로세서 코어 상에 인스트럭션 스레드로서 기록 인스트럭션의 시퀀스를 실행 - 상기 기록 인스트럭션의 부분은 비순차적으로 실행되어 데이터가 인스트럭션이 수신되는 순서와는 상이한 순서로 상기 송신 메모리 내의 송신 블록에 기록되게 함 - 하기 위한 회로를 포함하고,
상기 전송 엔진은
복수의 순차적 송신 블록을 각각 포함하는 복수의 송신 콘텍스트로 송신 메모리를 파티셔닝하고;
각각의 송신 콘텍스트를 위한 FIFO 시맨틱스를 사용하여 저장 스킴을 구현하고 - 상기 각각의 송신 콘텍스트 하에서 각각의 송신 블록이 송신 콘텍스트 FIFO 순서로 각각의 FIFO 슬롯을 점유하고, 소정의 패킷을 위한 데이터가 하나 이상의 각각의 순차적인 FIFO 슬롯을 점유하는 하나 이상의 송신 블록 내에 저장됨 - ;
상기 기록 인스트럭션의 비순차적 실행을 거쳐 송신 블록에 기록된 패킷 데이터를 수신하고;
충전된 패킷 데이터를 포함하는 송신 블록을 이그레스하고;
하나 이상의 송신 블록이 송신 콘텍스트로부터 이그레스되는 것을 검출하는 것에 응답하여,
프리하게 된 하나 이상의 FIFO 슬롯을 검출하고;
프리하게 된 하나 이상의 FIFO 슬롯의 임의의 하나가 크레딧 리턴 표식이 리턴되어 있지 않은 송신 콘텍스트에 대해 FIFO 순서로 최하위의 슬롯을 점유하는지를 검출하고; 점유하는 경우,
크레딧 정보가 리턴되어 있지 않은 최하위 슬롯을 포함하는 FIFO 순서에서 프리하게 된 슬롯의 시퀀스 중 최상위 FIFO 슬롯이 식별될 수 있는 크레딧 리턴 표식을 리턴하기 위한 회로를 포함하는
시스템.
- 제 16 항에 있어서,
상기 크레딧 리턴 표식은 상기 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트가 초기화되었던 이후로 프리하게 된 송신 콘텍스트를 위한 FIFO 순서로 송신 블록의 합계를 포함하는 절대 크레딧 리턴 카운트인
시스템.
- 제 16 항에 있어서,
상기 전송 엔진은
상기 송신 콘텍스트 내에 송신 블록을 저장하기 위한 송신 메모리 랩어라운드 FIFO를 구현하고;
각각의 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트를 트래킹하기 위한 호스트 메모리 랩어라운드 FIFO를 구현하기 위한 로직을 추가로 포함하고,
호스트 메모리 랩어라운드 FIFO의 크기는 모든 송신 콘텍스트에 대해 동일하고, 적어도 2개의 송신 콘테스트 및 이들의 연계된 송신 메모리 랩어라운드 FIFO의 크기는 상이한
시스템.
- 제 17 항에 있어서,
상기 전송 엔진은
상기 절대 크레딧 리턴 카운트와 상기 송신 콘텍스트를 위한 가장 최근의 리턴된 절대 크레딧 리턴 카운트 사이의 차이가 최소 크레딧 리턴 임계치와 일치하거나 초과하면 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트를 리턴하고; 그렇지 않으면,
상기 절대 크레딧 리턴 카운트와 상기 송신 콘텍스트를 위한 가장 최근의 리턴된 절대 크레딧 리턴 카운트 사이의 차이가 최소 크레딧 리턴 임계치와 일치하거나 초과할 때까지 절대 크레딧 리턴 카운트를 리턴하기를 대기하기 위한 로직을 추가로 포함하는
시스템.
- 제 17 항에 있어서,
상기 전송 엔진은
동시에 복수의 송신 콘텍스트 내의 FIFO 슬롯의 프리함을 검출하고 복수의 송신 콘텍스트 중의 다수의 송신 콘텍스트의 각각에 대한 절대 크레딧 카운트를 포함하는 복수의 절대 크레딧 카운트를 결정하고;
단일의 크레딧 리턴 메시지를 거쳐 복수의 절대 크레딧 리턴 카운트를 리턴하기 위한 로직을 추가로 포함하는
시스템.
- 제 17 항에 있어서,
상기 제 2 PCIe 인터페이스 및 전송 엔진은
상기 전송 엔진에 결합되고 복수의 송신기를 포함하는 송신 포트;
상기 제 2 PCIe 인터페이스에 결합된 수신 엔진; 및
상기 수신 엔진에 결합되고 복수의 수신기를 포함하는 수신 포트를 추가로 포함하는 호스트 패브릭 인터페이스에서 구현되는
시스템.
- 제 21 항에 있어서,
상기 시스템은 상기 프로세서 및 상기 호스트 패브릭 인터페이스를 포함하는 시스템 온 칩(System on a Chip: SoC)을 포함하는
시스템.
- 제 16 항에 있어서,
상기 메모리 인터페이스에 결합된 메모리를 추가로 포함하고, 상기 메모리에는, 상기 프로세서에 의한 실행시에 이하의 동작,
각각의 송신 콘텍스트에 대해, 절대 크레딧 송신 카운트가 초기화되었던 이후로 실행을 위해 디스패치되어 있던 기록 인스트럭션을 통해 충전되어 있거나 충전될 송신 블록의 합계를 식별하는 절대 크레딧 송신 카운트를 유지하고;
송신 콘텍스트를 위한 절대 크레딧 리턴 카운트를 수신하고;
부가의 패킷 데이터가 송신 콘텍스트에 기록될 수 있는지 여부를 판정하기 위해 송신 콘텍스트를 위한 절대 크레딧 리턴된 카운트에 송신 콘텍스트를 위한 절대 크레딧 송신 카운트를 비교하는
동작을 수행하도록 구성되는 소프트웨어 애플리케이션을 포함하는 인스트럭션이 저장되는
시스템.
- 장치에 있어서,
입출력(IO) 인터페이스;
상기 IO 인터페이스에 결합된 전송 엔진을 포함하고, 상기 전송 엔진은,
송신 메모리;
상기 송신 메모리에 작동식으로 결합된 이그레스 블록; 및
수단을 포함하고, 상기 수단은
복수의 순차적 송신 블록을 각각 포함하는 복수의 송신 콘텍스트 내로 송신 메모리를 파티셔닝하고;
각각의 송신 콘텍스트를 위한 선입선출(FIFO) 저장 스킴을 구현하고 - 상기 각각의 송신 콘텍스트 하에서 각각의 송신 블록은 FIFO 순서를 갖는 FIFO 버퍼 내의 각각의 FIFO 슬롯을 점유하고, 소정의 패킷을 위한 데이터가 FIFO 순서 내의 하나 이상의 각각의 순차적인 FIFO 슬롯을 점유하는 하나 이상의 송신 블록 내에 저장됨 - ;
패킷의 적어도 일부에 대해 송신 블록이 FIFO 순서와는 상이한 순서로 패킷 데이터로 충전되도록 비순차적으로 송신 블록에 기록된 패킷 데이터를 수신하고;
충전된 패킷 데이터를 포함하는 송신 블록을 이그레스하고;
하나 이상의 송신 블록이 송신 콘텍스트로부터 이그레스되는 것을 검출하는 것에 응답하여,
프리하게 된 하나 이상의 FIFO 슬롯을 검출하고;
프리하게 된 하나 이상의 FIFO 슬롯의 임의의 하나가 크레딧 리턴 표식이 리턴되어 있지 않은 송신 콘텍스트에 대해 FIFO 순서로 최하위의 슬롯을 언제 점유하는지를 검출하고;
크레딧 정보가 리턴되어 있지 않은 최하위 슬롯을 포함하는 FIFO 순서에서 프리하게 된 슬롯의 시퀀스 중 최상위 FIFO 슬롯이 식별될 수 있는 크레딧 리턴 표식을 리턴하는
장치.
- 제 24 항에 있어서,
상기 크레딧 리턴 표식은 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트가 초기화되었던 이후로 프리하게 된 송신 콘텍스트를 위한 FIFO 순서로 송신 블록의 합계를 포함하는 절대 크레딧 리턴 카운트인
장치.
- 제 25 항에 있어서,
상기 전송 엔진은
상기 송신 콘텍스트 내에 송신 블록을 저장하기 위한 송신 메모리 랩어라운드 FIFO를 구현하고;
각각의 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트를 트래킹하기 위한 호스트 메모리 랩어라운드 FIFO를 구현하기 위한 수단을 추가로 포함하고,
상기 호스트 메모리 랩어라운드 FIFO의 크기는 모든 송신 콘텍스트에 대해 동일하고, 적어도 2개의 송신 콘테스트 및 이들의 연계된 송신 메모리 랩어라운드 FIFO의 크기는 상이한
장치.
- 제 25 항에 있어서,
상기 전송 엔진은
상기 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트와 가장 최근의 리턴된 절대 크레딧 리턴 카운트 사이의 차이가 최소 크레딧 리턴 임계치와 일치하거나 초과하면 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트를 리턴하고; 그렇지 않으면,
상기 송신 콘텍스트를 위한 절대 크레딧 리턴 카운트와 가장 최근의 리턴된 절대 크레딧 리턴 카운트 사이의 차이가 최소 크레딧 리턴 임계치와 일치하거나 초과할 때까지 절대 크레딧 리턴 카운트를 리턴하기를 대기하기 위한 수단을 추가로 포함하는
장치.
- 제 24 항에 있어서,
상기 전송 엔진은
동시에 복수의 송신 콘텍스트 내의 FIFO 슬롯의 프리함을 검출하고 복수의 송신 콘텍스트 중의 다수의 송신 콘텍스트의 각각에 대한 절대 크레딧 카운트를 포함하는 복수의 절대 크레딧 카운트를 결정하고;
단일 크레딧 리턴 메시지를 통해 복수의 절대 크레딧 리턴 카운트를 리턴하기 위한 수단을 추가로 포함하는
장치.
- 제 24 항에 있어서,
상기 IO 인터페이스는 제 1(PCIe) 인터페이스를 포함하고, 상기 장치는
비순차적 실행을 지원하는 복수의 프로세서 코어를 갖고, 메모리 인터페이스, 적어도 하나의 저장 버퍼, 및 PCIe 상호접속부를 거쳐 상기 제 1 PCIe 인터페이스에 결합된 제 2 PCIe 인터페이스를 포함하는 프로세서를 추가로 포함하고,
상기 송신 메모리로의 상기 메모리 인터페이스에 결합될 때 메모리 내에 저장된 각각의 패킷을 위한 기록 패킷 데이터에 기록 인스트럭션의 시퀀스를 수신하고,
프로세서 코어 상의 인스트럭션 스레드로서 기록 인스트럭션의 시퀀스를 실행하고 - 상기 기록 인스트럭션의 실행은 데이터가 저장 버퍼 내의 저장 유닛에 기록되게 하고, 상기 저장 유닛은 상기 저장 유닛의 라인을 포함하는 저장 블록으로 그룹화되고, 상기 기록 인스트럭션의 부분은 비순차적으로 실행되어 상기 저장 블록이 충전되기 전에 데이터가 상이한 상기 저장 블록 내의 저장 유닛에 기록되게 함 -;
상기 저장 블록이 충전될 때를 검출하고;
상기 저장 블록이 충전되는 것을 검출하는 것에 응답하여, 상기 PCIe 상호접속부를 거쳐 송신된 상기 송신 메모리 내의 송신 블록에 PCIe 포스팅된 기록을 거쳐 저장 블록 내의 데이터를 드레인하기 위한 수단을 추가로 포함하는
장치.
- 제 24 항에 있어서,
상기 전송 엔진에 결합되고 복수의 송신기를 포함하는 전송 포트를 추가로 포함하고, 상기 장치는 단일의 집적 구성요소를 포함하는
장치.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/316,689 | 2014-06-26 | ||
US14/316,689 US9477631B2 (en) | 2014-06-26 | 2014-06-26 | Optimized credit return mechanism for packet sends |
PCT/US2015/034437 WO2015199947A1 (en) | 2014-06-26 | 2015-06-05 | Optimized credit return mechanism for packet sends |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020187003052A Division KR20180015285A (ko) | 2014-06-26 | 2015-06-05 | 패킷 송신을 위한 최적화된 크레딧 리턴 메커니즘 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20160147935A KR20160147935A (ko) | 2016-12-23 |
KR102223441B1 true KR102223441B1 (ko) | 2021-03-04 |
Family
ID=54930680
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020167033013A KR102223441B1 (ko) | 2014-06-26 | 2015-06-05 | 패킷 송신을 위한 최적화된 크레딧 리턴 메커니즘 |
KR1020187003052A KR20180015285A (ko) | 2014-06-26 | 2015-06-05 | 패킷 송신을 위한 최적화된 크레딧 리턴 메커니즘 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020187003052A KR20180015285A (ko) | 2014-06-26 | 2015-06-05 | 패킷 송신을 위한 최적화된 크레딧 리턴 메커니즘 |
Country Status (5)
Country | Link |
---|---|
US (3) | US9477631B2 (ko) |
EP (1) | EP3161648B1 (ko) |
KR (2) | KR102223441B1 (ko) |
CN (1) | CN106415513B (ko) |
WO (1) | WO2015199947A1 (ko) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9478274B1 (en) * | 2014-05-28 | 2016-10-25 | Emc Corporation | Methods and apparatus for multiple memory maps and multiple page caches in tiered memory |
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 |
US9535844B1 (en) | 2014-06-30 | 2017-01-03 | EMC IP Holding Company LLC | Prioritization for cache systems |
US9904645B2 (en) * | 2014-10-31 | 2018-02-27 | Texas Instruments Incorporated | Multicore bus architecture with non-blocking high performance transaction credit system |
US10235054B1 (en) | 2014-12-09 | 2019-03-19 | EMC IP Holding Company LLC | System and method utilizing a cache free list and first and second page caches managed as a single cache in an exclusive manner |
US10229076B2 (en) | 2015-09-09 | 2019-03-12 | International Business Machines Corporation | Peripheral component interconnect express (PCIE) pseudo-virtual channels using vendor defined messages |
US10114741B1 (en) * | 2016-11-23 | 2018-10-30 | Levyx, Inc. | Data traffic reservation systems and methods |
JP6654733B2 (ja) * | 2017-03-01 | 2020-02-26 | 日本電信電話株式会社 | データ処理装置、ネットワークシステム、パケット順序制御回路、およびデータ処理方法 |
US10270649B2 (en) * | 2017-04-06 | 2019-04-23 | Quanta Computer Inc. | System and method for improved server module addressing |
CN107861895B (zh) * | 2017-10-23 | 2019-11-19 | 深圳市楠菲微电子有限公司 | 基于分布式仲裁的可编程输入输出pio写合并装置和方法 |
CN109725840B (zh) * | 2017-10-30 | 2022-04-05 | 伊姆西Ip控股有限责任公司 | 利用异步冲刷对写入进行节流 |
US10496285B1 (en) * | 2018-01-18 | 2019-12-03 | EMC IP Holding Company LLC | Techniques for increased I/O performance |
US11048645B2 (en) | 2018-02-01 | 2021-06-29 | Samsung Electronics Co., Ltd. | Memory module, operation method therof, and operation method of host |
US11210248B2 (en) * | 2019-12-20 | 2021-12-28 | Advanced Micro Devices, Inc. | System direct memory access engine offload |
US11356378B2 (en) | 2020-08-31 | 2022-06-07 | Micron Technology, Inc. | Combined write enable mask and credit return field |
US11362939B2 (en) | 2020-08-31 | 2022-06-14 | Micron Technology, Inc. | Flow control for a multiple flow control unit interface |
US11580044B2 (en) | 2020-08-31 | 2023-02-14 | Micron Technology, Inc. | Network credit return mechanisms |
US11588745B2 (en) | 2020-08-31 | 2023-02-21 | Micron Technology, Inc. | Early credit return for credit-based flow control |
US11606316B2 (en) * | 2020-11-20 | 2023-03-14 | Qualcomm Incorporated | System and method for modem stabilization when waiting for AP-driven link recovery |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5444853A (en) * | 1992-03-31 | 1995-08-22 | Seiko Epson Corporation | System and method for transferring data between a plurality of virtual FIFO's and a peripheral via a hardware FIFO and selectively updating control information associated with the virtual FIFO's |
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 |
JP2988443B2 (ja) * | 1997-06-27 | 1999-12-13 | 日本電気株式会社 | データ転送方式 |
US6975629B2 (en) * | 2000-03-22 | 2005-12-13 | Texas Instruments Incorporated | Processing packets based on deadline intervals |
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 |
US7035948B1 (en) * | 2001-03-19 | 2006-04-25 | Transdimension, Inc. | System and method for USB controllers |
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 |
US7380030B2 (en) * | 2004-10-01 | 2008-05-27 | Qlogic, Corp. | Method and system for using an in-line credit extender with a host bus adapter |
US7493426B2 (en) * | 2005-01-31 | 2009-02-17 | International Business Machines Corporation | Data communication method and apparatus utilizing programmable channels for allocation of buffer space and transaction control |
CN100375080C (zh) * | 2005-04-15 | 2008-03-12 | 中国人民解放军国防科学技术大学 | 大规模分布共享系统中的输入输出分组节流方法 |
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 |
US7852867B2 (en) * | 2007-07-06 | 2010-12-14 | Integrated Deoice Technology, Inc. | Integrated memory for storing egressing packet data, replay data and to-be egressed data |
US8484307B2 (en) | 2008-02-01 | 2013-07-09 | International Business Machines Corporation | Host fabric interface (HFI) to perform global shared memory (GSM) operations |
US8566507B2 (en) | 2009-04-08 | 2013-10-22 | Google Inc. | Data storage device capable of recognizing and controlling multiple types of memory chips |
US20100287217A1 (en) * | 2009-04-08 | 2010-11-11 | Google Inc. | Host control of background garbage collection in a data storage device |
US8122177B1 (en) | 2009-05-19 | 2012-02-21 | Xilinx, Inc. | Direct memory access technique for use with PCIe endpoints |
US8032673B2 (en) | 2009-12-14 | 2011-10-04 | Apple Inc. | Transaction ID filtering for buffered programmed input/output (PIO) write acknowledgements |
US9021146B2 (en) | 2011-08-30 | 2015-04-28 | Apple Inc. | High priority command queue for peripheral component |
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 |
-
2014
- 2014-06-26 US US14/316,689 patent/US9477631B2/en active Active
-
2015
- 2015-06-05 WO PCT/US2015/034437 patent/WO2015199947A1/en active Application Filing
- 2015-06-05 KR KR1020167033013A patent/KR102223441B1/ko active IP Right Grant
- 2015-06-05 EP EP15812092.3A patent/EP3161648B1/en active Active
- 2015-06-05 CN CN201580028319.8A patent/CN106415513B/zh active Active
- 2015-06-05 KR KR1020187003052A patent/KR20180015285A/ko active Application Filing
-
2016
- 2016-10-05 US US15/285,825 patent/US9792235B2/en active Active
-
2017
- 2017-10-16 US US15/784,607 patent/US9984020B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US9984020B2 (en) | 2018-05-29 |
KR20160147935A (ko) | 2016-12-23 |
CN106415513B (zh) | 2019-06-04 |
KR20180015285A (ko) | 2018-02-12 |
WO2015199947A1 (en) | 2015-12-30 |
EP3161648A4 (en) | 2018-02-28 |
US20180039593A1 (en) | 2018-02-08 |
US20170235693A1 (en) | 2017-08-17 |
EP3161648B1 (en) | 2020-05-27 |
US9477631B2 (en) | 2016-10-25 |
EP3161648A1 (en) | 2017-05-03 |
US9792235B2 (en) | 2017-10-17 |
US20150378953A1 (en) | 2015-12-31 |
CN106415513A (zh) | 2017-02-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102223441B1 (ko) | 패킷 송신을 위한 최적화된 크레딧 리턴 메커니즘 | |
US10073796B2 (en) | Sending packets using optimized PIO write sequences without SFENCES | |
US9785359B2 (en) | Sending packets using optimized PIO write sequences without sfences and out of order credit returns | |
US10802995B2 (en) | Unified address space for multiple hardware accelerators using dedicated low latency links | |
CN101425966B (zh) | 片上网络以及使用片上网络进行数据处理的方法 | |
US7856026B1 (en) | Configurable central memory buffered packet switch module for use in a PLD | |
US11431653B2 (en) | Packet arbitration for buffered packets in a network device | |
JP2005092630A (ja) | メモリ制御装置及び制御方法 | |
WO2015117096A1 (en) | Method and an apparatus for work request arbitration in a network processor | |
US12099790B1 (en) | High-speed communication between integrated circuits of an emulation system | |
US11770215B2 (en) | Transceiver system with end-to-end reliability and ordering protocols | |
WO2020040873A1 (en) | Link layer data packing and packet flow control scheme | |
Baier et al. | High-Speed Torus Interconnect Using FPGAs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |