KR20230116887A - 네트워크 통신 링크의 요청 패킷들에 대한 태그들 - Google Patents

네트워크 통신 링크의 요청 패킷들에 대한 태그들 Download PDF

Info

Publication number
KR20230116887A
KR20230116887A KR1020237022250A KR20237022250A KR20230116887A KR 20230116887 A KR20230116887 A KR 20230116887A KR 1020237022250 A KR1020237022250 A KR 1020237022250A KR 20237022250 A KR20237022250 A KR 20237022250A KR 20230116887 A KR20230116887 A KR 20230116887A
Authority
KR
South Korea
Prior art keywords
completer
request
requestor
tags
packets
Prior art date
Application number
KR1020237022250A
Other languages
English (en)
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 KR20230116887A publication Critical patent/KR20230116887A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations 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/163Interprocessor communication
    • G06F15/17Interprocessor communication using an input/output type connection, e.g. channel, I/O port
    • 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
    • G06F13/4295Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus using an embedded synchronisation
    • 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/36Handling requests for interconnection or transfer for access to common bus or bus system
    • G06F13/362Handling requests for interconnection or transfer for access to common bus or bus system with centralised access control
    • G06F13/364Handling requests for interconnection or transfer for access to common bus or bus system with centralised access control using independent requests or grants, e.g. using separated request and grant lines
    • 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/40Bus structure
    • G06F13/4063Device-to-bus coupling
    • G06F13/4068Electrical coupling
    • 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/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations 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/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • 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

Abstract

전자 디바이스는 요청자 및 요청자와 링크 사이에 결합된 링크 인터페이스를 포함한다. 요청자는 링크 인터페이스를 통해 링크 상에서 완료자로 요청 패킷을 발신하도록 구성된다. 요청 패킷을 완료자로 발신할 때, 요청자는 요청 패킷이 완료자의 내부 요소들 내에 있기 전에 상기 완료자의 상기 내부 요소들 내에 있을 상기 요청자로부터의 다른 요청 패킷들 내의 태그들에 대해 고유하지 않지만, 상기 요청 패킷이 상기 완료자의 상기 내부 요소들 내에 있는 동안 상기 완료자의 상기 내부 요소들 내에 있을 상기 요청자로부터의 다른 요청 패킷들 내의 태그들에 대해서는 고유한 태그를 갖는 상기 요청 패킷을 상기 링크 인터페이스를 통해 상기 완료자에 발신한다.

Description

네트워크 통신 링크의 요청 패킷들에 대한 태그들
관련 기술
일부 전자 디바이스들에서, 기능 블록들, 디바이스들 및 요소들은 정보(즉, 데이터, 메시지들, 제어 값들 등)를 교환하고 다른 동작들을 수행하기 위해 네트워크 통신 링크들을 사용한다. 예를 들어, 그래픽 처리 유닛(GPU)은 메모리 액세스 요청들을 메모리에 송신하기 위해 네트워크 통신 링크들을 사용할 수 있고, 메모리는(필요한 경우) 데이터를 네트워크 통신 링크들을 통해 GPU 에 리턴할 수 있다. 네트워크 통신 링크를 사용하는 통신은 전형적으로 통신이 네트워크 통신 링크 상에서 수행되는 방법을 지시하는 통신 규격(또는 프로토콜, 표준 등)의 규칙 및 요건에 따라 수행된다. 예를 들어, 통신 사양은 패킷, 메시지 등의 타이밍, 패킷, 메시지 등의 정보의 배열 및 포맷팅, 종단점(예를 들어, 기능 블록, 장치 또는 요소) 또는 중간 디바이스(예컨대, 스위치, 중계기 등)에 의해 지원되어야 하는 동작 등을 지시할 수 있다. 네트워크 통신 링크에 사용되는 잘 알려진 통신 사양 중 하나는 주변 구성 요소 인터페이스 익스프레스(PCI Express 또는 PCIe) 사양으로, OR의 Beverton의 PCI SIG(Peripheral Component Interface Special Interest Group)가 개발되었고 유지 관리된다. PCIe 사양은 PCIe 링크들을 사용할 PCIe 종단점들 및 중간 디바이스들에 대한 동작들에 대한 상세한 규칙들 및 요건들을 포함한다. 예를 들어, PCIe 링크를 사용하기 위한 규칙 중 일부는 2019년 5월 22일에 PCI SIG에 의해 해제된 PCI Express Base Specification Revision 5.0 버전 1.0에 포함된다.
PCIe 사양에서의 규칙들 중에는 완료를 요구하는 요청들을 식별하기 위해 사용될 요청들에(즉, 요청 패킷들의 헤더에) 트랜잭션 기술자가 포함되어야 하는 규칙이 있다. 예를 들어, GPU는 메모리에 발신되고 각각의 요청된 데이터와 함께 메모리로부터 GPU로 발신되는 응답 패킷의 형태로 완료를 요구하는 판독 메모리 액세스 요청에 트랜잭션 기술자를 포함해야 한다. 트랜잭션 기술자는 2개의 상이한 서브-필드, M 비트 요청자 ID 및 N-비트 태그(여기서, M = 16, 20 또는 다른 수이고, N = 10, 16 또는 다른 수)로부터 형성된다. 요청자 ID는 요청자의 버스 번호, 장치 번호 및 기능 번호의 지정된 조합과 같은 종단점 세트 중에서 요청자를 식별하는 고정된 식별자이다. 태그는 요청자에 대한 요청 패킷을 식별하기 위해 각각의 요청 패킷에 대해 주어진 요청자에 의해 생성되는 값이다. PCIe 규격에 따르면, 완료를 요구하는 주어진 요청자로부터의 각각의 미해결 요청 내의 태그(즉, 완료자로부터의 응답 패킷)는 고유해야 한다.
일부 경우들에서, 각각의 미해결 요청에서 요청자들에 의해 포함된 태그들이 고유하다는 전술한 요건은 비효율적인 동작을 초래할 수 있다. 이것은 고속 요청자들(즉, 종단점들 등) 및/또는(예를 들어, 다수의 링크들 또는 중간 디바이스들 등을 갖는) 더 높은 레이턴시 토폴로지들의 요청자들이 태그 값들을 런 아웃하기 위해 충분한 미해결 요청들을 송신할 수 있기 때문에 발생할 수 있다. 즉, 일부 경우들에서, 요청자들은 요청들에 대한 응답들 및 그에 따라 그와 연관된 태그들이 완료자로부터 반환되기 시작하기 전에 태그 값들로부터 실행되기 위해 상이한 N-비트 태그 값들을 갖는 충분한 요청 패킷들을 발신할 수 있다. 이것이 발생할 때, 요청자는 정지하게 된다. 요청자는 각각의 태그들을 갖는 요청들에 대한 응답들이 완료자로부터 반환될 때까지 정지된 채로 있다. 태그들이 응답으로 요청자에게 반환되었을 때, 요청자는 후속 요청들에서 태그들을 재사용함으로써 요청들을 발신하는 것을 재개할 수 있다.
태그들의 런 아웃 시 스톨링은 요청자의 성능을 방해하기 때문에, 설계자들은 워크어라운드들을 제안하였다. 예를 들어, PCIe 사양은, 상술된 요청자 ID들 대신에 트랜잭션 디스크립터들에서 청구되지 않은 기능 번호들을 사용하는 요청자들을 수반하는 "판톰 기능 번호들"을 사용하여 설명한다. 더 많은 수의 요청 패킷들이 송신될 수 있게 하지만, 팬텀 함수 번호들을 사용하는 것은 요청자들이 연관된 제어 및 처리 동작들을 수행하기 위한 회로를 포함할 것을 요구한다. 다른 예로서, 일부 요청자/완료자 쌍은 태그를 "재사용"할 수 있다. 이러한 전자 디바이스들에서, 완료자 및 요청자 모두는 중복 태그들을 인식하고 핸들링하기 위한 회로를 포함해야 한다. 제안된 메커니즘들이 적어도 일부 스톨들의 회피를 가능하게 하지만, 이들은 처리 오버헤드, 설계 복잡성, 및/또는 다른 복잡성들과 연관된다.
도 1은 일부 실시예들에 따른 네트워크 통신 링크를 도시하는 블록도이다.
도 2는 일부 실시예에 따른 토폴로지를 나타내는 블록도이다.
도 3은 일부 실시예들에 따른 요청 패킷을 도시하는 블록도이다.
도 4는 일부 실시예들에 따른 완료자로부터 요청자로 요청 패킷을 태그와 발신하기 위한 프로세스를 도시한 흐름도를 나타낸다.
도 5는 일부 실시예들에 따른 요청자로부터 완료자로 발신된 요청 패킷들을 도시한 블록도를 나타낸다.
도 6은 일부 실시예들에 따른 완료자로부터 요청자로 요청 패킷을 태그와 발신하기 위한 프로세스를 도시한 흐름도를 나타낸다.
도면 및 설명 전체에 걸쳐, 유사한 참조 번호는 동일한 도면 요소를 지칭한다.
하기 설명은 당업자가 설명된 실시형태를 제조하고 사용할 수 있게 하기 위해 제시되며, 특정 응용 및 그 요건의 맥락에서 제공된다. 설명된 실시형태에 대한 다양한 수정은 당업자에게 쉽게 명백할 것이며, 본원에 기재된 일반적인 원리는 다른 실시형태 및 응용에 적용될 수 있다. 따라서, 설명된 실시예들은 도시된 실시예들로 제한되지 않으나, 본원에 설명된 원리들 및 특징들과 일치하는 가장 넓은 범위에 따른다.
용어
하기의 설명에서, 실시형태를 설명하기 위해 다양한 용어가 사용된다. 다음은 용어들 중 하나에 대한 단순화되고 일반적인 설명이다. 이러한 용어는 명확성 및 간결성을 위해 본원에서 언급되지 않은 상당한 추가적인 양태들을 가질 수 있고, 이에 따라 본 설명은 이러한 용어를 제한하는 것으로 의도되지 않는다는 것을 유의한다.
기능적 블록: 기능성 블록은 집적 회로, 개별 회로 등과 같은 관련 회로의 세트를 지칭한다. 회로는 회로 내의 회로 요소들에서 적어도 하나의 특성을 공유한다는 것에서 "상호관련"된다. 예를 들어, 회로는 특정 집적 회로 칩, 기판, 회로 보드, 또는 그 일부에 포함되거나, 그 위에 제조되거나, 또는 다른 방식으로 결합될 수 있고, 특정 동작들(예를 들어, 계산 동작들, 제어 동작들, 메모리 동작들 등)의 수행에 수반될 수 있으며, 공통 제어 요소 및/또는 공통 클록 등에 의해 제어될 수 있다. 기능 블록의 회로는 단일 회로 요소(예를 들어, 단일 집적 회로 로직 게이트 또는 이산 회로 요소)로부터 수백만 또는 수십억 회로 요소들(예를 들어, 집적 회로 메모리)까지의 임의의 수의 회로 요소들을 가질 수 있다. 일부 실시예들에서, 기능 블록들은 프로그램 코드를 실행하지 않고 동작들을 수행하는 회로를 사용하여 "하드웨어에서" 동작들을 수행한다.
주변 구성요소 상호연결 익스프레스(Peripheral Component Interconnect Express): 주변 구성요소 상호연결부 익스프레스(즉, PCI 익스프레스, PCIe 등)는 네트워크 통신 링크, 또는 "PCIe 링크" 상에서의 통신을 위한 사양이다. PCIe 규격(다수의 개별 규격으로 구성됨)은 PCIe 링크 상에서 통신하기 위한 규칙 및 가이드라인, 예컨대 PCIe 링크 상에 통신하는 하드웨어 및/또는 소프트웨어 요소에 요구되는 능력 및 호환성에 관한 규칙, PCIe 링크 상으로 송신되는 요청 및 응답 패킷의 내용 및 배열에 관한 규칙 등을 지시한다. 예를 들어, PCIe 링크에서 통신하기 위한 많은 기본 규칙과 지침이 포함된 PCIe "기본" 사양은 2019년 5월 OR Beverton의 PCI Special Interest Group(PCI SIG)이 발행한 PCI 익스프레스 기본 사양 버전 5.0 버전 1.0에서 확인할 수 있으며, 이 버전은 여기에 참조로 통합되어 있다. 다른 예로서, 드래프트 PCIe 베이스 사양은 PCI Express Base Specification Revision 6.0 버전 0.5에서 발견될 수 있으며, 이는 PCI SIG에 의해 2020년 2월 24일에 공개되었고, 본 명세서에 참조로서 포함된다.
종단점: 종단점은 네트워크 통신 링크를 통해 다른 종단점(들)과 통신할 수 있는 네트워크 통신 링크(예를 들어, PCIe 링크 등) 상의 또는 그에 연결된 실제 또는 가상 기능 블록, 디바이스, 및/또는 다른 요소이다. 예를 들어, 종단점은 네트워크 통신 링크 상의 다른 종단점(들)을 포함하는 트랜잭션의 개시자 또는 완료자일 수 있다. 일부 경우들에서, 단일 기능 블록, 디바이스, 또는 요소는 가능하게는 가상화된 기능들을 포함하는 다수의 기능들을 제공하거나 수행하며, 이들 각각은 그 자신의 종단점으로 고려될 수 있다.
개요
설명된 실시예들에서, 종단점들은 네트워크 통신 링크들, 또는 더 간단히 "링크들"을 사용하여 서로 통신한다. 예를 들어, 일부 실시예들에서, 한 쌍의 종단점들은 단일 PCIe(Peripheral Component Interconnect Express) 링크를 통해 서로 통신한다. 다른 예로서, 일부 실시예들에서, 둘 이상의 종단점들은 둘 이상의 별개의 PCIe 링크들을 통해 통신한다. 또 다른 예로서, 일부 실시예들에서, 둘 이상의 종단점들은 적어도 하나의 PCIe 링크를 포함하는 둘 이상의 별개의 네트워크 통신 링크들을 통해 하나 이상의 중간 기능 블록들 또는 디바이스들(예를 들어, 스위치들, 중계기들, 루트 컴플렉스들 등)을 통해 서로 통신한다. 링크(들)를 사용하여 통신하기 위해, 종단점들은 종단점들 간의 정보 발신에 대한 기초인 "트랜잭션들"을 수행한다. 트랜잭션은 하나 이상의 링크를 통해 완료 종단점 또는 "완료자"에 대한 요청을 발신하는 요청 종단점 또는 "요청자"를 포함하여, 완료자로부터 액션을 요청하거나 및/또는 완료자에게 정보를 통신한다. 트랜잭션은 하나 이상의 링크를 통해 완료 종단점 또는 "완료자"에 대한 요청을 발신하는 요청 종단점 또는 "요청자"를 포함하여, 완료자로부터 액션을 요청하거나 및/또는 완료자에게 정보를 통신한다. 요청이 응답(예를 들어, 반환된 데이터, 확인 응답 등)을 수반할 때, 완료자는 하나 이상의 링크를 통해 요청자에게 응답을 반환한다.
설명된 실시예들에서, 링크(들) 상에서 사용되는 통신 규격(또는 표준, 프로토콜 등)은 요청기들이 요청들이 링크를 통해 완성자들에게 발신되는 특정 요청 패킷들에 태그들을 포함하는 것을 지시한다. 태그는 요청자로부터 발신된 2개 이상의 요청 패킷 중에서 요청 패킷을 식별하는데 사용되는 요청 패킷(예를 들어, 요청 패킷의 헤더)에 요청자가 포함하는 멀티 비트/바이트 값이다. 통신 사양은 또한 요청자로부터의 태그를 갖는 모든 미해결 요청 패킷이 요청자로부터의 다른 미치결 요청 패킷 내의 태그에 대해 고유한 태그를 가져야 함을 지시한다. 즉, 모든 요청 패킷들은 네트워크 링크들 상에서, 중간 디바이스들의 내부 요소들에서(예를 들어, 버퍼들/큐들, 처리 요소들 등에서), 완료자의 내부 요소들 등에서 발신되며, 대응하는 응답 패킷들은 고유한 태그들을 가져야 한다. 따라서, 주어진 태그를 갖는 요청 패킷이 요청자에서 생성될 때부터 응답 패킷이 주어진 태그를 갖고 반환될 때까지, 요청 패킷은 두드러진 것으로 간주되고 통신 표준은 요청자가 주어진 태그를 재사용하지 않아야 함을 지시한다. 일반적으로, 미해결 요청 패킷들 내의 태그들은, 완료자들이 비순차적으로 요청 패킷들을 처리할 수 있고, 대응하는 요청 패킷들이 발신된 순서에 대하여 각각의 요청 패킷들로부터의 태그들을 포함하는 응답 패킷들을 비순서적으로 리턴할 수 있도록 고유할 것이다. 요청자는 요청자로부터 반환된 응답 패킷 내의 태그가 요청자가 동일한 태그를 재사용한 후속 요청 패킷이 아니라 특정 요청 패킷과 연관된다는 것을 보장할 수 있다.
통신 사양에 따라, 임의의 주어진 시간에 요청자로부터의 미해결 요청 패킷들이 고유한 태그들을 가져야 하지만, 동시에 완료자의 내부 요소들에 있을 요청 패킷들에 대한 관심은 더 크다. 요청자들 및/또는 완성자들의 동작 정확성은 요청자와 완성자 사이에서 비행 중인 요청 패킷들이 완성자의 내부 요소들 내의 요청 패킷들에 대해 고유한 태그들을 갖지 않을 때 영향을 받지 않아야 한다. 즉, 요청자 내의 요청 패킷들(예를 들어, 생성되지만 아직 발신되지 않음) 및 요청자와 완료자 사이의 중간 디바이스들 및 링크들(즉, "인 플라이트(in flight)" 요청 패킷들)은 요청자 및/또는 완료자의 부정확한 동작을 야기하지 않고 완료자 내의 요청 패킷들과 동일한 태그들을 가질 수 있다. 이것은, 비행 중에 요청 패킷들이 완료자의 내부 요소들에 존재하지 않고 따라서 완료자의 내부 요소들의 다른 요청 패킷들에 대해 완료자에 의해 재정렬될 수 없기 때문에 사실이다. 따라서, 전술한 재순서화 문제는 이러한 복제된 태그를 갖는 인 플라이트 패킷에 대해서는 발생하지 않는다. 따라서, 요청 패킷들 각각이 서로에 대해 고유한 태그를 가져야 하는 요청자로부터 완료자로 발신되는 요청 패킷들의 임의의 충분히 긴 시퀀스에서 요청 패킷들의 이동 "윈도우"가 존재한다. 요청 패킷들의 윈도우는 완료자의 내부 요소들을 충전/점유하기에 충분한 요청 패킷들을 포함한다. 예를 들어, 완료자가 자신의 내부 요소들에 최대 100개의 요청 패킷들을 보유/저장할 수 있는 경우, 윈도우는 100개 요청 패킷들을 포함할 것이다 - 즉, 100개의 요청 패킷들 "와이드(wide)" 또는 "와이드(long)"이다. 그러나, 주어진 윈도우 외부에 있는 요청 패킷들 내의 태그들은 요청자 및/또는 완료자의 부정확한 동작을 야기하지 않고 주어진 윈도우 내부의 태그들의 복제일 수 있다.
설명된 실시예들에서, 요청자들은 인 플라이트 요청 패킷들의 태그들이 기존 요청자들이 스톨(stall)하도록 강제되는 상황들에서 완료자들로 요청 패킷들을 계속 발신하기 위해 완료자 내의 내부 요소들 내의 태그들의 복제들일 수 있다는 사실, 즉, 이에 대해 고유할 필요가 없다는 사실을 이용한다. 요청자들은, 통신 표준의 규칙들과는 대조적으로, 요청 패킷들이 비행중인 동안, 즉 요청 패킷들 자체가 완료자의 내부 요소들에 있기 전에, 완료자의 내부 요소에 있을 요청자로부터의 요청 패킷들 내의 태그들에 대해 고유하지 않은 태그들을 갖는 요청 패킷들을 컴플리셔너들에게 계속 발신함으로써 이를 행한다. 그러나, 요청 패킷들 내의 태그들에 관한 전술한 통신 사양 규칙에 의해 어드레싱되는 재순서화 문제를 피하기 위해, 요청자들은 요청 패킷들에서의 태그들이 요청 패킷들과 함께 완료자의 내부 요소들에 있을 다른 요청 패킷들의 태그들에 관하여 고유할 것임을 보장한다. 즉, 이동 윈도우 예를 계속하면, 설명된 실시예들에서, 주어진 윈도우 내의 요청 패킷들 내의 태그들은 서로에 대해 고유할 것이지만, 주어진 윈도우의 외부의 요청 패킷들에서의 태그들은 주어진 윈도우의 요청 패킷들의 태그들에 대해 고유한 것이 보장되지 않는다.
일부 실시예들에서, 요청자들은 요청 패킷들 내의 태그들이 요청 패킷들과 동시에 완료자의 내부 요소들에 있을 다른 요청 패킷들의 태그들에 대해 고유할 것임을 보장하기 위해 순차적인 태그들을 사용한다. 이들 실시예에서, 요청자는 태그를 갖는 요청 패킷을 보유/저장하기 위한 완료자의 내부 요소의 용량이 허용가능한 태그의 수보다 작다는 것을 알고 있거나 가정한다. 따라서, 요청 패킷들을 완료자로 발신할 때, 요청자는 요청 패킷들을 각각의 순차적인 태그들과 함께 요청 패킷들의 시퀀스로 발신하고, 가장 높은 허용가능한 태그가 요청 패킷에 포함되면 가장 낮은 허용가능한 태그로 시작하거나, 그렇지 않으면 패킷들에 대한 태그들의 시퀀스를 재시작한다(예를 들어, 그레이 코드들 등을 사용하여). 예를 들어, 3 비트 태그들이 사용되는 실시예에서, 태그들 000, 001, 010, ..., 110, 111을 갖는 요청 패킷들은 요청자에 대해 미결일 수 있지만, 요청자는 000으로부터 시작하는 태그들을 갖는 요청 패킷들을 계속 발신할 수 있다. 즉, 요청자는 각각의 허용가능한 태그가 미해결 요청 패킷에 포함되었음에도 불구하고 요청 패킷의 발신을 중단하지 않고, 대신에 태그가 순서대로 있는 요청 패킷을 자동으로 계속 발신한다. 요청 패킷을 보유/저장하기 위한 완료자의 내부 요소의 용량이 허용가능한 태그의 수보다 작으므로, 이들 실시예는 임의의 주어진 시간에 완료자의 내부 요소 내의 일련의/순차적인 태그가 서로에 대해 고유할 것이라는 것을 보장하거나 가정할 수 있을 것이다.
일부 실시예들에서, 그리고 순차적인 태그들을 사용하는 전술한 실시예들과는 달리, 요청 패킷을 완료자에 발신할 때, 요청자는 어떤 태그들이 요청 패킷에서 사용될 수 있는지를 결정한다. 일반적으로, 이러한 동작을 위해, 요청자는 요청 패킷이 완료자에 도달할 때(즉, 요청 패킷이 완료자의 내부 요소들에 도입되기 바로 전에), 완료자의 내부 요소들은 요청자로부터의 요청 패킷들로 풀인지를 결정한다. 따라서, 이동 윈도우 예를 계속하면, 요청자는 요청 패킷들의 전체 윈도우가 요청 패킷의 도달 시에 보다 완전한 윈도우에 있을 것인지를 결정한다. 그렇다면, 요청자는 요청 패킷이 완료자에 도달할 때 완료자의 내부 요소들에 있을 요청자로부터의 요청 패킷들 내의 태그들에 대해 고유하지 않은 태그를 갖는 요청 패킷을 발신할 수 있다. 그렇지 않은 경우, 요청자는 요청 패킷이 완료자의 내부 요소에 있는 동안 완료자의 내부 요소 내에 있을 요청자로부터의 다른 요청 패킷 내의 태그에 대해 고유한 태그를 갖는 요청 패킷을 발신한다. 즉, 요청자는 주어진 윈도우 내에서 요청 패킷을 생성하고 발신한다.
일부 실시예들에서, 요청 패킷이 완료자에 도달할 때, 완료자의 내부 요소들이 고유한 태그들을 갖는 요청자로부터의 요청 패킷들로 풀인지 여부를 결정하기 위하여, 요청기는 주어진 수의 요청 패킷들이 대응하는 응답 패킷들을 수신하지 않고 완료자에 발신되었는지를 결정한다. 일부 실시예들에서, 요청 패킷이 완료자에 도달할 때, 완료자의 내부 요소들이 고유한 태그들을 갖는 요청자로부터의 요청 패킷들로 풀인지를 결정하기 위해, 요청자는 요청 패킷들에 대한 발신 링크/내부 요소 레이턴시에 관한 정보를 사용한다. 이러한 실시예들에서 발신 링크/내부 요소 레이턴시는, 요청 패킷들이 발신 링크 및 완료자의 내부 요소들을 통해 전달/존재할 것으로 예상되는 가장 높은 총 또는 평균 전형적인 시간이다. 일부 실시예들에서, 요청 패킷이 완료자에 도달할 때, 완료자의 내부 요소들이 고유한 태그들을 갖는 요청자로부터의 요청 패킷들로 풀인지를 결정하기 위해, 요청자는 완료자 내의 내부 요소들 및/또는 중간 네트워크 디바이스들의 배열 또는 구성에 관한 정보를 사용한다. 예를 들어, 요청자는 요청 패킷을 중간 네트워크 디바이스 및/또는 완료자의 내부 요소(즉, 요청 패킷이 중간 네트워크 디바이스에 저장될 수 있는 회로)에 저장하거나 버퍼링하기 위한 최대 용량 또는 현재/현재 용량에 관한 정보를 사용할 수 있다.
일부 실시예들에서, 요청자들은 본 명세서에 기술된 바와 같이 요청 패킷들에서 태그들을 사용하도록 선택적으로 구성될 수 있다. 즉, 요청 패킷들에서 비-고유 태그들의 상술된 사용은, 예를 들어, 설치 시간에, 제조 시간에, 런타임에, 및/또는 다른 시간에 인에이블 및 디스에이블될 수 있다. 이들 실시예에서, 요청자는 요청 패킷에서 이러한 태그의 사용을 인에이블 또는 디스에이블하는 하드웨어 또는 소프트웨어 스위치 또는 구성 설정을 제공한다. 예를 들어, 일부 실시예들에서, 하드웨어 스위치는 스위치 회로, 퓨즈 등을 포함하거나 포함한다. 하드웨어 또는 소프트웨어 스위치 또는 구성 설정이 디스에이블될 때, 요청자는 기존의 디바이스들에서와 같이 요청 패킷들에 대한 태그들을 사용하고, 따라서 미해결 상태로 유지되는 요청 패킷들에서 허용가능한 태그들 모두를 사용할 때 요청 패킷들을 발신하는 것을 정지시킨다. 대조적으로, 하드웨어 또는 소프트웨어 스위치가 인에이블될 때, 요청자는 본 명세서에 설명된 바와 같이 미해결 요청 패킷에 대한 비-고유 태그를 사용할 수 있다.
일부 실시예들에서, 요청자들은 충분히 높은 레이트로 요청 패킷들을 발신하고 및/또는 요청자와 완료자들 사이의 링크(들)의 레이턴시(latency)는 충분히 길고(예를 들어, 더 많은 수의 중간 디바이스들, 더 긴 물리적 링크 길이들 등으로 인해), 본 명세서에 설명된 바와 같이 비-고유 태그들을 사용하여 요청 패킷들을 계속 발신하기 위해 인 플라이트 패킷들을 이용하는 것은 요청자가 발신할 수 있는 요청 패킷들의 수의 증가를 초래할 수 있다. 요청자가 더 많은 요청 패킷들을 발신할 수 있는 경우(그리고 따라서 메모리로부터 데이터를 획득하고, IO 디바이스들로 데이터를 발신하거나 IO 디바이스들로부터 데이터를 더 신속하게 수신할 수 있는 등), 요청자의 성능이 증가한다. 요청자의 성능의 증가는 요청자가 포함된 전자 장치의 전체 성능을 증가시킬 수 있고, 이에 의해 사용자 만족을 증가시킨다.
네트워크 통신 링크
설명된 실시예들에서, 요청자 및 완료자는 네트워크 통신 링크를 통해 트랜잭션들을 수행한다. 도 1은 일부 실시예들에 따른 네트워크 통신 링크(100)를 도시한 블록도를 나타낸다. 도 1에서 알 수 있는 바와 같이, 네트워크 통신 링크(100)는 링크(106)를 통해 연결되는 요청자(102) 및 완료자(104)를 포함한다. 요청자(102) 및 완료자(104)는 링크(106) 상에서 트랜잭션들을 수행하는 기능 블록들, 디바이스들, 및/또는 다른 요소들에 통합되거나 통합되는 종단점들이다. 예를 들어, 일부 실시예들에서, 요청자(102)는 그래픽 처리 유닛(GPU) 또는 중앙 처리 유닛(CPU)과 같은 기능 블록이고, 완료자(104)는 메모리 제어기 또는 네트워크 인터페이스와 같은 기능 블록도이다. 이들 실시예들 중 일부에서, 요청자(102) 및 완료자(104)는 동일한 또는 별개의 반도체 칩들 상의 집적 회로에서 구현된다. 다른 예로서, 일부 실시예들에서, 요청자(102)는 전자 디바이스(예를 들어, 데스크톱 컴퓨터, 서버 컴퓨터 등) 내의 버스 또는 인터페이스에 플러그 인되거나 연결되는 그래픽 카드 또는 주변 카드이고, 완료자(104)는 또한 버스 또는 인터페이스로 플러그 인하거나 연결되는 메모리 제어기이다.
설명된 실시예들에서, 요청자(102) 및 완료자(104)는 링크(106)를 통해 요청 패킷들 및/또는 응답 패킷들과 같은 패킷들을 발신 및 수신하기 위한 내부 요소들, 즉 회로, 디바이스들 등을 포함한다. 예를 들어, 내부 요소는 요청 및/또는 응답 패킷을 수신하기 위한 수신 요소, 요청 및/또는 응답 패킷을 처리하기 위한 처리 요소, 및 요청 및 또는 응답 패킷의 발신을 위한 발신 요소를 포함할 수 있다. 내부 요소에 포함되는 특정 회로, 디바이스 등은 내부 요소에 의해 핸들링되고 처리되는 패킷의 성질 및 내부 요소들에 의해 수행되는 동작에 의존한다. 예를 들어, 일부 실시예들에서, 요청 및/또는 응답 패킷들을 수신하기 위한 수신 요소들은 패킷들을 저장하기 위한 버퍼 또는 메모리 회로, 패킷 정보를 검사하고 후속 처리 동작들을 위해 패킷들을 준비하기 위한 처리 회로, 패킷들(또는 그 부분들)을 그 안에서 처리하기 위한 처리 회로로 향하게 하기 위한 스티어링 회로(steering circuitry), 패킷들의 처리 또는 핸들링(handling)을 위한 처리 회로를 포함할 수 있다.
링크(106)는 요청자(102)와 완료자(104) 사이에서 패킷들을 발신하기 위해 사용되는 신호 경로들(예를 들어, 와이어들, 가이드들, 버스들 등)을 포함한다. 예를 들어, 일부 실시예들에서, 요청자(102) 및 완료자(104)는 집적 회로들을 사용하여 반도체 칩 상에 구현되는 기능 블록들이고, 링크(106)는 반도체 칩 상에 구현되는 와이어들, 가이드들, 또는 트레이스들을 포함한다. 다른 예로서, 일부 실시예들에서, 요청자(102) 및 완료자(104)는 데이터 센터 내의 기능 블록들 또는 디바이스들이고, 링크(106)는 하나 이상의 회로 보드들 및/또는 패키지들 상의 와이어들, 가이드들, 또는 트레이스들, 그리고/또는 회로 보드들과 패키지들 사이의 와이어, 가이드, 또는 트레이스를 포함한다.
도 1에 도시된 실시예에서, 링크(106)는 송신 방향으로 패킷들을 송신하고 수신 방향으로 패킷들을 수신하기 위한 개별 단방향 시그널링 경로들을 포함한다(각 방향으로 단방향 신호 경로가 존재하기 때문에, 2개의 시그널링 경로들 중 어느 것이 송신/수신 방향에 있는지는 관점이 요청자(102) 또는 완료자(104)로부터 온 것인지에 의존한다). 예를 들어, 일부 실시예들에서, 신호 경로들 각각은 단방향 차동 링크이다. 요청자(102) 및 완료자(104) 각각은 각각의 발신 또는 수신 링크 상에서 패킷들을 발신 또는 수신하기 위한 회로(예를 들어, 버퍼들, 드라이버들, 감지 증폭기들 등)를 포함하는 각각의 링크 인터페이스(108 또는 110)를 포함한다.
네트워크 통신 링크(100)가 특정 요소들을 갖는 것으로 도 1에 도시되어 있지만, 일부 실시예들에서, 네트워크 통신 링크(100)의 구성 요소는 상이하거나 상이하게 배열된다. 예를 들어, 단일 송신 및 수신 링크 쌍을 갖는 것으로 도시되어 있지만, 일부 실시예들에서, 링크(106)는 요청자(102)와 완료자(104) 사이에서 패킷들을 송신하기 위해 함께 또는 개별적으로 사용될 수 있는 2개 이상의 송신 및 송신 링크 쌍들(각각의 송신과 수신 링크 쌍은 "레인(lane)"으로 지칭될 수 있음)을 포함한다. 다른 예로서, 일부 실시예들에서, 도 1에서 요청자 및 완료자로서 라벨링되었지만, 요청자(102)는 또한 완료자일 수 있고, 완료자(104, completer)는 또한 요청자일 수도 있다. 일반적으로, 설명된 실시예들에서, 네트워크 통신 링크(100)는 본 명세서에 설명된 동작들을 수행하도록 적절하게 배열된 충분한 기능 블록들 및 요소들을 포함한다.
네트워크 통신 링크(100)는 본 명세서에 설명된 동작들을 수행하는 임의의 디바이스에 전체적으로 또는 부분적으로 포함될 수 있다. 예를 들어, 네트워크 통신 링크(100)의 일부 또는 전부는 데스크톱 컴퓨터, 랩톱 컴퓨터, 웨어러블 컴퓨팅 디바이스, 태블릿 컴퓨터, 네트워크, 통신 서브시스템 또는 채널, 가상 현실 또는 증강 현실 장비, 스마트폰, 인공 지능(AI) 또는 기계 학습 디바이스, 서버, 네트워크 어플라이언스, 장난감, 오디오-비주얼 장비, 홈 어플라이언스, 차량 등, 및/또는 이들의 조합들일 수 있거나 이들에 포함될 수 있다. 즉, 이들 디바이스들은 전적으로 네트워크 통신 링크(100)(예를 들어, 반도체 칩들 내에 또는 반도체 칩들 사이에)를 포함할 수 있거나 또는 네트워크 통신 링크(100)의 요청자 및/또는 완료자일 수 있다.
토폴로지
일부 실시예에서, 종단점(즉, 기능 블록, 장치 및 다른 요소)은 다수의 종단점을 포함하는 네트워크 토폴로지의 일부이고, 종단점들 중 적어도 일부는 토폴로지 내의 다른 종단점에 대한 요청자 및/또는 완성자로서 기능한다. 토폴로지는 또한 종단점들 및/또는 다른 중간 디바이스들 사이의 다수의 중간 디바이스들을 포함할 수 있다. 도 2는 일부 실시예들에 따른 토폴로지(200)를 도시한 블록도를 나타낸다. 도 2에서 알 수 있는 바와 같이, 토폴로지(200)는 계산, 제어, 메모리 액세스, 입력-출력, 및 다른 동작들을 수행하는 마이크로프로세서 또는 마이크로프로세서 코어와 같은 기능 블록 또는 디바이스인 중앙 처리 유닛(CPU)(202)을 포함한다. 토폴로지(200)는 또한 데이터(여기서, "데이터"는 실제 데이터, 명령어들, 제어 값들 등을 설명하기 위한 일반적인 용어임)를 저장하기 위한 동적 랜덤 액세스 메모리(DRAM)와 같은 메모리 회로뿐만 아니라 메모리 회로에서 데이터의 액세스들을 제어하기 위한 제어 회로를 포함하는 기능 블록 또는 디바이스인 메모리(204)를 포함한다.
토폴로지(200)는 그래픽 처리 장치(GPU) 또는 그래픽 처리 유닛 코어, 입력-출력(IO) 장치 또는 그에 대한 인터페이스(예를 들어, 네트워크 인터페이스, 디스크 제어기 등), 레거시 장치 등과 같은 기능 블록, 장치 또는 요소를 포함하는 종단점(206-214)을 추가로 포함한다("레거시" 장치는 토폴로지(200) 내의 다른 링크 상에서 사용되는 통신 사양과 상이한 통신 사양(또는 표준, 프로토콜 등)을 사용할 수 있다는 점에 유의한다). 일부 실시예들에서, 종단점들(206-214) 중 일부 또는 전부는 다른 디바이스들(예를 들어, USB 제어기들 등)(도시되지 않음)을 대신하여 또는 단독으로 트랜잭션들의 요청자 및/또는 완료자일 수 있는 "기능들"로 간주된다. 이들 실시예들 중 일부에서, 단일 기능 블록, 디바이스, 또는 요소는(가상화된 기능들을 포함하는) 다수의 기능들을 제공하거나 수행할 수 있고, 이들 각각은 그 자신의 종단점으로 고려될 수 있다.
토폴로지(200)는, 중앙 처리 유닛(202) 및 메모리(204)가 토폴로지(200) 내의 각각의 종단점들(206-214) 및 다른 디바이스들을 포함하는 다양한 도메인들에 연결되는 계층의 "루트" 또는 최하위 레벨에 있는 기능 블록 또는 디바이스인 루트 컴플렉스(216)를 더 포함한다. 일부 실시예들에서, 루트 컴플렉스(216)는(종단점들(208-214)에 대한 스위치들(218-220) 중 하나 또는 둘 모두를 통해) 중앙 처리 유닛(202), 메모리(204), 및 종단점들(206-214) 사이에서 또는 그 반대로 스위치 또는 라우터의 동작들을 수행하고, 패킷들을 라우팅하고 그렇지 않으면 제어/핸들링한다. 일부 실시예들에서, 루트 컴플렉스(216)는 순방향 발신을 위해 패킷들을 세분하는 것과 같은 다른 중간 디바이스들(즉, 스위치들, 라우터들, 중계기들 등)에 의해 수행되도록 허용되지 않는 동작들을 수행하도록 허용된다. 일부 실시예들에서, 루트 컴플렉스(216)는 메모리를 대신하여 메모리 액세스 트랜잭션들을 처리하는 메모리에 대한 완료자이다.
토폴로지(200)는 중앙 처리 장치(202), 메모리(204), 및 종단점들(206-214) 사이에서 패킷들을 스위칭 또는 라우팅하기 위한 동작들을 수행하는 기능 블록들, 디바이스들, 또는 다른 요소들인 스위치들(218 및 220)을 더 포함한다. 일부 실시예들에서, 스위칭/라우팅 동작들을 수행하는 것과 함께, 스위치들(218 및 220) 중 하나 또는 둘 모두는, 레거시 및/또는 비호환성 종단점들로부터의 패킷들, 메시지들, 또는 다른 네트워크 트래픽이 루트 컴플렉스(216)에서 사용되는 통신 규격으로 변환되는 브리징 또는 변환 동작들을 수행한다. 예를 들어, 일부 실시예들에서, 종단점(208)은 레거시 주변 구성요소 상호연결 디바이스이고, 루트 컴플렉스(216)는 PCIe를 사용하고, 스위치(218)는 종단점(208)과 루트 컴플렉스(216) 사이의 통신을 위해 주변 구성요소 상호연결부 패킷들을 PCIe 패킷들로 그리고 그 반대로 변환하거나 브리징한다.
토폴로지(200)는 토폴로지(200) 내의 각각의 기능 블록, 디바이스, 또는 요소 사이에 링크(222)를 더 포함한다(도 2에서 양방향 화살표들을 사용하여 도시된 링크들(222) 중 단지 2개만이 명료성을 위해 라벨링됨). 각각의 링크(222)는 링크(106)에 도시된 것과 같은 단방향 송신 및 수신 링크들의 적어도 하나의 쌍, 및 가능하게는 다수의 개별 쌍들을 포함한다. 예를 들어, 일부 실시예들에서, 종단점(206)은 16 레인 링크(222)에 의해 루트 컴플렉스(216)에 연결되고 따라서 16개의 개별 단방향 송신-수신 쌍들을 갖는 GPU이다.
일부 실시예들에서, 토폴로지(200)에서 발신될 때, 통신(즉, 요청 패킷들, 응답 패킷들 등)은 요청자로부터 완료자로 그리고 그 반대로 이동할 때 다수의 링크들(222)을 가로지를 수 있다. 예를 들어, 요청자로서의 종단점(212)이 메모리(204)로부터 메모리 액세스를 요청하고 있을 때, 완료자로서, 요청 패킷은 종단점(212)과 스위치(220), 스위치(220)와 스위치(218), 스위치(218)와 루트 컴플렉스(216), 및 루트 컴플리트(216)와 메모리(204) 사이의 링크들(222)을 가로지른다. 메모리 액세스가 메모리 판독이고 따라서 메모리(204)로부터 데이터의 리턴을 요청할 때, 메모리(204)로부터의 응답 패킷은 종단점(212)과 반대로 링크(222)를 통과한다. 일부 실시예들에서, 다수의 링크들을 트래버싱하기 위한 레이턴시는 비교적 길다. 예를 들어, 종단점(212)과 메모리(204) 사이와 같은 요청자와 완료자 사이에 몇 개의 중간 디바이스가 있을 수 있다. 다른 예로서, 요청자와 완료자 사이의 링크들 중 일부 또는 전부는 패킷들이(예를 들어, 더 큰 서버 팜에서의 서버 박스들/종단점들 사이 등) 이동해야 하는 더 긴 와이어, 케이블 등을 갖는 것과 같이 물리적으로 길 수 있다. 일부 실시예들에서, 요청자들은 요청 패킷들이 본 명세서에 설명된 바와 같이 비-고유 태그들을 갖는 완성자들에게 요청 패킷들을 계속 발신하기 위해 비교적 긴 시간 동안 인 플라이트(즉, 중간 디바이스들 및/또는 링크들에서)일 수 있다는 사실을 이용한다.
토폴로지(200)는 기능 블록들, 디바이스들, 및/또는 다른 요소들의 특정 배열을 갖는 것으로 도시되지만, 일부 실시예들에서, 토폴로지(200)는 상이한 기능 블록, 디바이스들, 및/또는 다른 요소들 및/또는 상이하게 배열되는 기능 블록들, 디바이스들, 및/또는 다른 요소들을 포함한다. 예를 들어, 일부 실시예들에서, 토폴로지(200)는 도 1에 도시된 것과 같은 종단점들 간의 간단한 종단점-대-종단점 연결이거나,(도 2의 생략을 통해 도시된 바와 같이) 더 많은 종단점들 및/또는 중간 디바이스들을 갖는 복잡한 토폴로지이다. 다른 예로서, 일부 실시예들에서, 토폴로지(200)는 다수의 계층들 및/또는 스위치들의 다른 배열 또는 더 큰 크로스바 스위치 등을 갖는 다른 중간 디바이스들을 포함한다. 일반적으로, 설명된 실시예들에서, 토폴로지(200)는 본 명세서에 설명된 바와 같이, 요청 패킷들에 태그들을 포함하는 동작들을 수행하는 하나 이상의 요청자 종단점들을 포함한다.
트랜잭션들
설명된 실시예에서, 요청자(예를 들어, 요청기(102), 종단점(206) 등)는 완료자(예를 들면, 완료자(104), 종단점들(212) 등)와의 링크(예를 같은 링크(106), 링크(222) 등)를 통해 트랜잭션들을 개시하고 완료자는 트랜잭션들을 수행 또는 "컴플리트"한다. 일반적으로, 트랜잭션은 요청자와 완료자 사이에서 정보를 발신하기 위한 동작이다. 예를 들어, 일부 실시예들에서, 요청자들 및 완료자들은 메모리 트랜잭션들을 수행하고, 이를 위해 요청자는 완료자 내의 또는 그와 연관된 메모리(예를 들어, 동적 랜덤 액세스 메모리 또는 DRAM)로부터 데이터를 판독하거나 그에 데이터를 기록한다. 다른 예로서, 일부 실시예들에서, 요청자들 및 완료자들은 입력-출력(IO) 트랜잭션들을 수행하고, 이를 위해 요청자는 완료자 내의 또는 완료자와 연관된 IO 기능 블록 또는 디바이스(예를 들어, 디스크 제어기, 네트워크 인터페이스 등)로부터 데이터를 획득하거나 데이터를 IO 기능 블록 또는 디바이스에 발신한다. 또 다른 예들로서, 일부 실시예들에서, 요청자들 및 완료자들은 구성 및/또는 메시징 트랜잭션들을 수행하고, 이를 위해 요청자는 완료자에게 구성 정보 및/또는 메시지 정보를 통신한다.
트랜잭션에 대해, 요청자는 하나 이상의 링크를 통해, 완료자로부터 액션을 요청하고/하거나 완료자에 정보를 통신하기 위한 요청을 완료자에 발신한다. 예를 들어, 요청자가 그래픽 처리 유닛이고, 완료자가 메모리와 연관된 메모리 제어기이고, 트랜잭션이 메모리 액세스라고 가정하면, 그래픽 처리 유닛은 메모리 내의 위치로부터 특정 데이터를 판독하거나 메모리 내의 위치에 특정 데이터를 기입하기 위한 메모리 액세스 요청을 포함하는 요청 패킷을 하나 이상의 링크를 통해 메모리 제어기에 송신할 수 있다. 일부 실시예들에서, 요청 패킷을 완료자에 송신하는 것은 하나 이상의 중간 디바이스들(예를 들어, 종단점(210)으로부터 메모리(204)로의 요청 패킷에 대한 루트 컴플렉스(216) 및 스위치(218) 등) 및 각각의 링크들을 통과하는(즉, 이들에 의해 수신되고 포워딩되는) 요청 패킷을 포함한다. 요청이 응답을 수반할 때, 완료자는 하나 이상의 링크를 통해 요청자에게 응답을 리턴한다. 그래픽 처리 유닛/메모리 제어기 예를 계속하고, 메모리 액세스 요청이 메모리 내의 위치로부터 특정 데이터를 판독하기 위한 요청이라고 가정하면, 메모리 제어기는 메모리로부터의 요청된 데이터를 포함하는 응답 패킷을 하나 이상의 링크를 통해 그래픽 처리 유닛에 송신할 수 있다.
요청 및 응답 패킷들 내의 태그들
설명된 실시예들에서, 토폴로지(예를 들어, 토폴로지 200)에서 링크(들) 상에서 사용되는 통신 사양(또는 표준, 프로토콜 등)은 요청자들이 요청들을 완성자들에게 통신하기 위해 사용되는 특정 요청 패킷들에 태그들을 포함하는 것을 지시한다. 예를 들어, 일부 실시예들에서, 요청자들은(예를 들어, 메모리 액세스들, IO 데이터 액세스들 등에 대해) 완료자가 응답을 요청자에게 발신할 요청 패킷들에 태그들을 포함시킬 것이다. 이들 실시예들 중 일부에서, 요청 패킷들로부터의 태그들의 카피들은 요청자들에 발신된 대응하는 응답 패킷들에서 완료자들에 의해 포함된다. 태그들은 응답 패킷이 연관된 요청 패킷을 식별하는 것, 둘 이상의 상이한 응답 패킷들 사이의 순서 또는 다른 관계를 결정하는 것, 응답 패킷들이 수신된 요청 패킷들을 결정하는 것 등과 같은 동작들을 위해 요청자들 및/또는 완료자들에 의해 사용될 수 있다.
도 3은 일부 실시예들에 따른 요청 패킷(300)을 도시한 블록도를 나타낸다. 도 3에서 알 수 있는 바와 같이, 요청 패킷(300)은 헤더 정보(INFO)(304) 및 태그(306)를 갖는 헤더(302)를 포함한다. 요청 패킷(300)의 제1 부분에 포함될 수 있는 헤더(302)(예를 들어, 요청 패킷(300)의 제1 바이트로부터 시작함)는 일반적으로 완료자들에 의해 사용되는 정보, 즉, 기능 블록들, 디바이스들, 및/또는 요소들, 및 다른 네트워크 디바이스들에 의해 사용되어 요청 패킷(300)의 유형 및 특성들을 식별하는 정보를 포함한다. 헤더 정보(304)는 요청 패킷들의 가능한 유형들의 세트 중에서 요청 패킷의 유형, 요청 패킷을 처리 또는 핸들링하기 위한 제어 값들, 통신 규격 버전 값들, 서비스 품질 값들 등과 같은 요청 패킷(300)의 유형 및 특성들을 식별하는 정보를 포함한다. 요청 패킷(300)을 생성할 때, 요청자는 요청 패킷(300)의 유형 및 특성을 식별하는 정보를 생성, 결정, 또는 다른 방식으로 획득하고, 헤더 정보(304) 내의 대응하는 필드/특정 비트에 정보를 저장한다. 예를 들어, 요청 패킷의 유형은 헤더 정보(304)의 제1 바이트로부터 시작하는 하나 이상의 연속적인 또는 비-연속적인 바이트에 저장될 수 있고, 따라서 완료자 또는 다른 네트워크 장치에 의해 헤더 정보(304)로부터 판독된 제1 또는 초기 정보일 수 있다.
태그(306)는 주어진 요청자로부터 완료자에게 발신되는 다수의 요청 패킷들 중에서 요청 패킷을 식별하는데 사용되는 값이거나 이를 포함한다. 예를 들어, 일부 실시예들에서, 태그(306)는 헤더(302) 내의 바이트들 및/또는 비트들의 연속 또는 비연속 시퀀스에 포함되는 허용가능한 N-비트 값들의 세트(여기서, N = 10, 16, 또는 다른 수) 중에서의 N- 비트 값이다. 예를 들어, 일부 실시예들에서, 요청 패킷(300)은 PCIe 요청 패킷이고, 태그(306)는 트랜잭션 기술자의 일부로서 헤더(302)에 포함되고, 트랜잭션 기술자는 네트워크 토폴로지 내의 종단점들 중에서 요청자를 식별하는 태그(306) 및 요청자 식별자(ID)를 포함한다. 요청 패킷(300)을 생성할 때, 요청자는 태그(306)에 대한 값을 생성, 결정 또는 획득하고, 헤더(302) 내의 대응하는 바이트 및/또는 비트에 태그(306)를 저장한다. 태그(306)가 도 3에서 단일 블록 또는 필드로서 도시되지만, 태그(306) 또는 그 부분들은 헤더(302) 내의 다른 블록들 또는 필드들 사이에 분배 또는 인터리빙될 수 있다는 것에 유의한다.
요청 패킷(300)은 또한 페이로드(308)를 포함하며, 페이로드는 완료 디바이스로 향하는 데이터 및/또는 정보가 포함되는 요청 패킷(300)의 일부 또는 섹션이다. 예를 들어, 요청 패킷(300)이 메모리 제어기 완료자로 향하는 메모리 기록에 대한 요청이라면, 페이로드(308)는 메모리에 기록될 데이터의 하나 이상의 바이트들을 포함할 수 있다. 요청 패킷(300)이 페이로드(308)와 함께 도시되지만, 특정 패킷들은 페이로드를 포함하지 않는다. 예를 들어, 헤더(302)가 완료자가 요청 패킷(300)을 처리 또는 핸들링하는 데 필요한 모든 정보를 포함하는 요청 패킷(300)은 페이로드가 없을 수 있다.
요청 패킷들과 함께, 일부 실시예들에서, 통신 사양은 완료자들이 요청자들에게 응답들을 통신하기 위해 사용되는 특정 응답 패킷들에 태그들을 포함하는 것을 지시한다. 예를 들어, 일부 실시예들에서,(예를 들어, 메모리 액세스들, IO 데이터 액세스들 등을 위해) 주어진 요청 패킷에 응답하여 요청자에게 응답 패킷을 송신할 때, 완료자는 주어진 요청 패킷(또는 그에 기초한 정보)으로부터 획득되는 태그의 사본을 응답 패킷에 포함시키는 것이다. 전술한 바와 같이, 이것은 요청자가 응답 패킷/응답을 요청 패킷/요청과 연관시킬 수 있게 한다. 응답 패킷이 도 3에 도시되지 않았지만, 일부 실시예들에서, 응답 패킷들은 요청 패킷(300)과 유사하게 배열된다. 즉, 응답 패킷들은 요청 패킷(300)에 도시된 동일한 필드들 및 정보 및/또는 필드들 및 정보의 배열 중 일부 또는 전부를 포함한다. 예를 들어, 일부 실시예들에서, 응답 패킷은 도 3에 도시된 것과 유사한 헤더 내의 태그, 페이로드 등을 포함할 수 있다.
이제 통신 사양에 의해 지시된 바와 같은 태그의 사용으로 돌아가면, 설명된 실시예에서, 통신 사양은 요청자로부터의 태그를 포함하는 모든 미해결 요청 패킷이 그 요청자로부터의 다른 미해칭 요청 패킷 내의 태그에 대해 고유한 태그를 가져야 한다는 것을 더 지시한다. 예를 들어, 4 비트 태그들이 요청 패킷들에서 사용되는 경우, 0110의 태그(또는 임의의 다른 허용가능한 4 비트 값)를 갖는 요청 패킷이 미해결될 때, 다른 미결된 요청 패킷은 0110의 태그를 갖지 않아야 한다. 즉, 임의의 주어진 시간에, 통신 사양에 따라, 요청자로부터의 각각의 미해결 요청 패킷은 요청자로부터의 다른 요청 패킷들 내의 태그들과 상이한 태그를 가져야 한다. 본 명세서에서 사용되는 바와 같이, 요청 패킷은 요청자가 요청 패킷을 생성할 때(즉, 요청 패킷에 태그를 포함할 때)와 태그가 응답 패킷에서 완료자로부터 요청자에게 반환될 때 사이에 "아웃스탠딩(outstanding)"된다. 이는 요청 패킷이 요청자에 의해 생성되고 요청자의 내부 요소(예를 들어, 발신 대기)에 있는 후, 요청자와 완료자 사이의 링크 상에서 비행하고, 중간 장치의 내부 요소, 완료자의 내부 요소에 있는 등을 포함한다. 또한, 본 명세서에 사용되는 바와 같이, "내부 요소"는 요청 패킷을 수신하기 위한 수신 요소/회로, 요청 패킷을 처리, 지향 또는 다른 방식으로 처리하기 위한 처리 요소/회로의 일부 또는 전부, 및 응답 패킷을 발신하기 위한 송신 요소/회로를 포함한다(예를 들어, 인터페이스 회로, 버퍼링 회로, 라우팅 회로, 스케줄링 회로, 처리 회로 등).
설명된 실시예들에서, 요청자로부터 완료자의 내부 요소들 내의 패킷들을 요청하는 통신 사양의 전술한 요건은 서로에 대해 고유한 태그들을 갖는 것이 어떤 잘못된/부정확한 동작들을 피하기 위해 사용된다. 예를 들어, 일부 실시예에서, 완료자는 비순차적으로 패킷을 요청하고 이에 따라 응답할 수 있다. 따라서, 동일한 태그들을 갖는 2개의 요청 패킷들이 완료자의 내부 요소들에 존재하면, 완료자는 요청 패킷들 중 제1 요청 패킷에 대해 비순차적으로 요청 패킷들의 제2/후기를 처리하는 것이 가능하다. 이 경우, 완료자는 응답 패킷들에 요청 패킷들로부터의 태그들을 포함하기 때문에, 요청자는 제2 요청 패킷에 대한 응답 패킷을 제1 요청 패킷과 부정확하게 연관시킬 수 있다. 그러나, 요청자와 완료자 사이에 "비행 중인(in flight)" 요청 패킷들 및 대응하는 응답 패킷들은 완료자의 내부 요소들에 아직 존재하지 않고 따라서 완료자에 의한 재순서화의 가능성에 노출되지 않는다. 따라서, 비행중인 요청 패킷들은 완료자의 내부 요소들 내의 요청 패킷들에 대해 고유한 태그들을 가질 필요가 없다. 요청 패킷들은 요청 패킷들이 생성되지만 요청자에 의해 아직 송신되지 않거나 요청 패킷들이 링크들을 통해 송신되고/되거나 요청자와 완료자 사이의 발신 경로의 링크들을 통해 중간 디바이스들의 내부 요소들에 있을 때 비행중인 것으로 간주된다. 따라서, 상술된 재순서화 문제를 피하기 위해 요청 패킷들 각각이 다른 요청 패킷들에 대해 고유한 태그를 가져야 하는 요청자로부터 발신된 요청 패킷들의 충분히 긴 시퀀스에서 요청 패킷들의 이동 "윈도우"(또는 세트, 블록, 부분 등)가 존재한다. "윈도우"는 완료자의 내부 요소들을 채우기에 충분한 주어진 수의 요청 패킷들을 포함한다. 예를 들어, 완료자의 내부 요소들이 25개의 요청 패킷들을 보유할 수 있다고 가정하면, 윈도우는 크기가 25개 요청 패킷들이다. 따라서, 250개의 요청 패킷들의 시퀀스에서, 윈도우는 시퀀스의 대략 10%를 차지한다. 윈도우는 "이동"인데, 그 이유는 요청 패킷이 결국 완료자에 의해 처리되고(태그를 갖는) 대응하는 응답 패킷이 요청자에게 반환되기 때문이다. 일단 윈도우 내의 요청 패킷이 처리되고, 따라서 더 이상 완료자의 내부 요소에 있지 않으면, 완료자는 다른 윈도우 내에서 - 그 위치에서 - 후속 요청 패킷을 수신할 수 있다. 그러나, 각각의 윈도우 외부의 요청 패킷들의 태그들은 그 윈도우 내부의 태그들에 대해 고유할 필요는 없다.
설명된 실시예들에서, 요청자들은, 기존의 요청자들이 태그들로부터 실행되고 스톨(stall)하도록 강제되는 상황들에서 요청 패킷들을 계속 발신하기 위해 인 플라이트 요청 패킷들의 태그들이 완료자 내의 내부 요소들 내의 태그들에 대해 비-유일할 수 있다는 사실을 이용한다. 기존의 요청자들에서, 예를 들어, 각각의 허용가능한 태그(예를 들어, 10 비트 태그들에 대한 1024 요청 패킷들 등)를 포함하는 요청 패킷들의 시퀀스가 완료자로 발신되었고, 어떠한 대응하는 응답들도 수신되지 않았을 때, 요청자는 후속 요청 패킷들을 발신할 때 재사용하기 위해 태그 값들을 자유롭게 하기 위해 요청자로부터의 응답들의 리턴을 기다리도록 정지한다. 대조적으로, 설명된 실시예에서, 각각의 허용가능한 태그를 포함하는 요청 패킷의 시퀀스가 완료자로 발신되었을 때, 요청자는 요청 패킷이 초기에 완료자에 도달할 때(즉, 요청 패킷 자체가 완료자의 내부 요소에 있기 직전에) 완료자의 내부 요소 내에 있을 요청자로부터의 요청 패킷 내의 태그에 대해 고유하지 않은 태그를 갖는 요청 패킷을 완료자로 계속 발신할 수 있다. 그러나, 요청자들이 완성자에게 발신하는 요청 패킷들의 태그들은 요청 패킷이 완성자의 내부 요소들에 있을 때 완성자의 내부의 요소들에 있게 될 요청자로부터의 다른 요청 패킷들에서의 태그들에 대해 고유하다. 즉, 위로부터 이동 윈도우 예를 계속하면, 임의의 주어진 윈도우 내의 요청 패킷들 내의 태그들은 서로에 대해 고유한 반면, 주어진 윈도우 외부의 태그들은 그 주어진 윈도우에서의 태그들에 대해 고유한 것이 보장되지 않는다. 통신 표준의 규칙을 반대로 하는 동안, 요청자는 중복된 태그를 갖는 요청 패킷의 재순서화의 문제를 회피하고, 요청 패킷이 추가적인 요청 패킷을 발신하기 위한 인 플라이트 타임(in flight time)(즉, 요청자 및 링크 및 중간 장치의 레이턴시)을 이용한다.
일부 실시예들에서, 요청 패킷을 완료자에 발신하기 전에, 요청자는 통신 사양에 따라 다양한 정보(예를 들어, 헤더 정보, 페이로드(필요한 경우) 등)를 포함하는 요청 패킷을 생성한다. 요청자는 요청 패킷을 생성하는 부분으로서 요청 패킷에 포함될 태그를 선택한다. 예를 들어, 태그를 선택하는 것은 요청자에 의해 유지되는 태그 카운터를 다음 값으로 전진시키고 태그 카운터의 값을 태그로서 사용하거나, 그렇지 않으면 태그들에 대한 값들의 시퀀스에서 다음 값(예를 들어, 그레이 코드 등)을 사용하는 것을 의미할 수 있다. 다른 예로서, 태그를 선택하는 것은 하나 이상의 규칙들 또는 알고리즘들(예를 들어, 가장 낮은 이용가능한 태그 값 등)에 따라 이용가능한 "풀" 또는 태그들의 세트로부터 태그를 획득하는 것을 의미할 수 있다. 태그들의 풀이 사용되는 실시예들에서, 응답 패킷들에서 요청자들에게 반환된 태그들은 태그들의풀로 반환되고, 그에 의해 후속 요청 패킷들에서의 사용을 위해 자유롭게 이용가능하게 된다(즉, 모든 요청 패킷들에서 사용을 위해 이용가능하게 된다).
일부 실시예들에서, 태그를 선택하기 위한 프로세스의 일부로서, 요청자는 태그가 요청 패킷에서의 사용을 위해 허용되는지를 결정한다. 태그가 허용되는지 여부를 결정하기 위해, 요청자는 요청 패킷이 완료자에 도달할 때(즉, 요청 패킷 자체가 완료자의 내부 요소들로 취해지기 직전에), 완료자의 내부 요소들은 완료자의 내부 요소들의 요청자로부터의 다른 요청 패킷들 내의 태그들에 대해 고유한 태그들을 갖는 요청자로부터의 요청 패킷들로 가득 차 있는지 여부를 결정한다. 이동 윈도우 예를 계속하면, 요청자는 요청 패킷들의 전체 윈도우가 요청 패킷의 도달 시간에 보다 완전한 윈도우에 있을 것인지를 결정한다. 완료자의 내부 요소들이 고유한 태그들을 갖는 요청자로부터의 요청 패킷들로 가득차게 될 것이라면, 요청자는 완료자의 내부 요소에 있을 요청자로부터 요청 패킷들 내의 태그들에 대해 고유하지 않은 태그를 갖는 요청 패킷을 발신할 수 있다. 따라서, 요청자는 후속 윈도우에 대한 태그를 갖는 요청 패킷을 생성하고 발신한다. 한편, 다른 요청 패킷이 완료자에 도달할 때, 완료자의 내부 요소가 요청자로부터의 요청 패킷으로 가득차지 않을 경우, 요청자는 완료자의 내부 요소에 있을 요청자로부터의 다른 요청 패킷 내의 태그에 대해 고유한 태그를 갖는 요청 패킷을 발신한다. 즉, 요청자는 주어진 윈도우에 있는 태그를 갖는 요청 패킷을 생성하여 발신한다.
요청 패킷들에서 태그들을 사용하기 위한 프로세스들
설명된 실시예들에서, 요청자들은 요청자들과 완료자들 사이의 트랜잭션들을 개시 또는 계속하기 위한 요청 패킷들을 완료자들에 발신한다. 요청자들은 요청 패킷들에, 요청자들에 의해 완성자들에게 발신된 요청 패킷들 중에서 요청 패킷들을 식별하기 위해 사용되는 태그들을 포함한다. 도 4는 일부 실시예들에 따른 완료자로부터 요청자로 요청 패킷을 태그와 발신하기 위한 프로세스를 도시한 흐름도를 나타낸다. 도 4는 일부 실시예들에서 요청자들에 의해 수행되는 동작들의 일반적인 예로서 제시된다. 그러나, 일부 실시예들에서, 요청자들은 상이한 동작들을 수행하고/하거나 동작들을 상이한 순서로 수행한다.
도 4에서의 동작은 요청 패킷이 완료자의 내부 요소들 내에 있기 전에 상기 완료자의 상기 내부 요소들 내에 있을 상기 요청자로부터의 요청 패킷들 내의 태그들에 대해 고유하지 않지만, 상기 요청 패킷이 상기 완료자의 상기 내부 요소들 내에 있는 동안 상기 완료자의 상기 내부 요소들 내에 있을 상기 요청자로부터의 요청 패킷들 내의 태그들에 대해서는 고유한 태그를 갖는 상기 요청 패킷을 요청자가 완료자로 발신하는 단계(단계 400)를 포함한다. 이러한 동작을 위해, 요청자, 예를 들어, 요청자에 의해 실행되는 하드웨어 회로 및/또는 소프트웨어/펌웨어는, 완료자와의 트랜잭션을 개시하기 위해 요청 패킷이 완료자로 발신될 것이라고 결정한다. 예를 들어, 요청자는 그래픽 처리 유닛 또는 입력-출력 디바이스일 수 있고 요청자는 완료자 내의 또는 그와 연관된 메모리에 저장된 데이터에 액세스할 필요가 있을 수 있다. 따라서, 요청자는 트랜잭션을 식별하고 수행하기 위해 완료자에 의해 사용될 정보를 포함하는 요청 패킷(예를 들어, 요청 패킷 300)을 생성한다. 그 후, 요청자는 요청 패킷을 요청자와 완료자 사이의 네트워크 링크(들)를 통해 완료자에 발신한다.
단계(400)에서 설명된 바와 같이, 요청자에 의해 요청 패킷에 포함되는 태그는 요청 패킷과 동시에 완료자의 내부 요소에 있을 다른 요청 패킷 내의 태그에 대해 고유하지만, 요청 패킷이 완료자의 내부 요소 내에 있기 전에 완료자의 내부 요소의 다른 요청 패킷의 태그에 대해서는 고유하지 않다. 도 5는 일부 실시예들에 따른 요청자(500)로부터 완료자(502)로 발신된 요청 패킷들을 도시한 블록도를 나타낸다. 요청 패킷들을 저장/보유하기 위한 특정 태그 값들, 디바이스들/요소들, 및 내부 용량들이 도 5에서 예로서 도시되지만, 일부 실시예들에서, 요청 패킷들을 저장하고/보수하기 위한 상이한 태그 값들(tag values), 디바이스들/요소들, 및/또는 내부 용량들이 사용된다.
도 5의 예에서, 3개의 비트 태그가 사용된다고 가정한다. 즉, 각각의 요청 패킷은 3비트 길이의 태그를 포함하고, 따라서 8개의 가능한 태그 값들이 존재한다. 또한, 완료자(502)의 내부 요소는 7개의 요청 패킷을 동시에 보유/저장하기 위한 용량을 갖는 것으로 가정한다. 즉, 완료자(502) 내의 버퍼들, 처리 회로, 및/또는 다른 회로는 최대 7개의 요청 패킷들(즉, 본 명세서에 설명된 바와 같이 완료자(502)에 의해 순서 없이 처리될 수 있는/재순서화될 수 있는 7개의 요청 패킷)을 동시에 보유할 수 있다. 따라서, 서로에 대해 고유한 태그를 갖는 요청 패킷에 대한 이동 윈도우는 길이가 7개의 요청 패킷이다.
도 5에서 알 수 있는 바와 같이, 요청자(500)는 이미 8개의 요청 패킷들을 태그들 000-111(명료화를 위해, 요청 패킷들 중 단지 몇 개만이 도 5에 라벨링됨)을 갖는 완료자(502)에 발신하였고, 모든 8개의 요청 패킷들은 미해결 상태를 유지한다. 8개의 요청 패킷들 중 5개, 즉, 태그들 000-100을 갖는 요청 패킷들은 완료자의 내부 요소들에 보유/저장된다(내부 요소들에 2개의 부가적인 패킷들을 저장하기 위한 용량은 완료자(502)에서 점선 박스들에 의해 도시된 바와 같이 현재 사용되지 않는다). 태그들(101-110)을 갖는 요청 패킷들은 중간 디바이스(504)의 내부 요소들에 보유/저장되거나, 또는 이를 통과한다 - 예를 들어, 버퍼 내에 있고, 이 버퍼는 중간 디바이스(504)에 의한 포워딩을 대기한다. 태그(111)를 갖는 요청 패킷은 링크(506)를 통해 발신된다. 요청자(500)는 태그 000을 갖는 제9 요청 패킷을 생성하고, 링크(506)를 통해 제10 요청 패킷을 완성자(502)로 발신할 준비를 한다. 상술한 바와 같이, 제9 요청 패킷은 제9 요구 패킷과 동시에 완료자의 내부 요소들에 있을 다른 태그들에 대해 고유하지만, 현재 완료자(502)에 있는 요구 패킷들 내의 태그들에 대해서는 고유하지 않은 태그(000)를 갖는다. 즉, 완료자(502)의 내부 요소들이 7개의 요청 패킷들을 저장하는 것으로 제한되기 때문에, 태그 000을 갖는 제1 요청 패킷은, 태그 000을 갖는 제2 요청 패킷이 완료자(502)의 내부 요소들에 저장될 수 있기 전에, 처리될 필요가 있을 것이고, 그에 의해 완료자(502)의 내부 요소들로부터 제거될 필요가 있을 것이다. 그러나, 그 내부 요소의 용량이 주어지면, 완료자(502)는 태그 000을 갖는 제2 요청 패킷이 완료자(502)의 내부 요소에 도달할 때 기껏해야 태그 010-111을 갖는 요청 패킷을 저장할 것이다. 이러한 방식으로 태그를 갖는 요청 패킷을 발신하는 것은 사용중인 통신 규격의 구술과는 반대로 실행되지만, 요청자(500) 및 완료자(502)는 정확한 동작을 계속할 것인데, 그 이유는 본 명세서의 다른 곳에서 설명되는 재순서화 문제가 000개의 태그 값을 갖는 제1 및 제2 요청 패킷에 영향을 미치지 않기 때문이다.
도 5에 도시된 실시예를 포함하는 일부 실시예들에서, 요청자들은 요청 패킷들 내의 태그들이 요청 패킷들과 동시에 완료자의 내부 요소들에 있을 다른 요청 패킷들 내의 태그들에 대해 고유할 것임을 보장하기 위해 순차적인 태그들을 사용한다. 이들 실시예에서, 요청자는 태그를 갖는 요청 패킷을 보유/저장하기 위한 완료자의 내부 요소의 용량이 허용가능한 태그의 수보다 작다는 것을 알고 있거나 가정한다. 예를 들어, 요청자는 요청 패킷을 보유/저장하기 위한 완료자의 내부 요소의 용량에 관한 정보를 가지거나 획득할 수 있다. 예를 들어, 요청자는 설계자, 설치자, 다른 기능 블록 등에 의해 완성자의 내부 요소의 용량에 관한 정보를 프로그래밍하거나 제공받을 수 있다. 또 다른 예로, 요청자는 요청 패킷을 보유/저장하기 위한 완료자의 내부 요소의 용량에 대한 가정을 하도록 프로그래밍, 설계 또는 다른 방식으로 구성될 수 있다(예를 들어, 16비트 태그, 32비트 태그)는 실제 완료자가 각 허용가능한 태그가 포함된 요청 패킷을 유지/해제하기에 충분한 내부 요소를 가질 가능성이 거의 없을 정도로 충분히 크다. 따라서, 요청 패킷들을 완료자로 발신할 때, 요청자는 각각의 순차적인 태그들을 갖는 요청 패킷들의 시퀀스로 요청 패킷들을 발신하고, 시퀀스의 끝에 도달할 때 시퀀스의 시작으로부터 시퀀스를 시작한다(예를 들어, 가장 높은 허용가능한 태그가 요청 패킷에 포함되면 가장 낮은 허용가능한 태그로 시작한다). 이것은 도 5의 예에서 도시되며, 여기서 완료자(502)의 내부 요소들이 현재 태그 000을 갖는 요청 패킷을 보유/저장/포함함에도 불구하고, 즉, 태그 000을 갖는 요청 패킷이 여전히 미해결임에도 불구하고, 요청자(500)는 태그 000을 갖는 요청 패킷을 발신할 준비를 한다. 즉, 요청자는 각각의 허용가능한 태그가 미해결 요청 패킷에 포함되었음에도 불구하고 요청 패킷의 발신을 중단하지 않고, 대신에 태그가 순서대로 있는 요청 패킷을 자동으로 계속 발신한다. 요청 패킷을 보유/저장하기 위한 완료자의 내부 요소의 용량이 허용가능한 태그의 수보다 작으므로, 이들 실시예는 임의의 주어진 시간에 완료자의 내부 요소 내의(즉, 대응하는 윈도우 내의) 태그의 시퀀스/순차적인 태그가 서로에 대해 고유할 것이라는 것을 보장하거나 또는 가정한다. 이러한 실시예들 중 일부에서, 요청자는 태그들을 순차적으로 생성하기 위해 카운터를 사용하고, 가장 높은 값(예를 들어, 4 비트 태그들에 대해 1111)을 포함하는 요청 패킷이 완료자에 발신되면 카운터를 가장 낮은 값(예를 들어, 4 비트 태그들에 대해 0000)으로 리턴한다.
도 6은 일부 실시예들에 따른 완료자로부터 요청자로 요청 패킷을 태그와 발신하기 위한 프로세스를 도시한 흐름도를 나타낸다. 요청자가 순차적으로 태그들을 갖는 요청 패킷들을 자동으로 발신하는 도 4-5에 도시된 예와는 다르게, 도 6의 실시예에 대해, 요청자는 먼저 완료자의 내부 요소들이 풀인지 여부를 결정하고, 그 후 그에 따라 태그를 갖는 요청 패킷을 발신한다. 도 6은 일부 실시예들에서 요청자들에 의해 수행되는 동작들의 일반적인 예로서 제시된다. 그러나, 일부 실시예들에서, 요청자들은 상이한 동작들을 수행하고/하거나 동작들을 상이한 순서로 수행한다.
도 6의 동작은 요청자가 요청 패킷이 완료자에 도달할 때, 완료자의 내부 요소가 완료자의 내부 요소 내의 요청자로부터의 다른 요청 패킷 내의 태그에 대해 고유한 태그를 갖는 요청자로부터의 요청 패킷으로 가득 차 있는지 여부를 판정할 때 시작한다(단계 600). 이러한 동작을 위해, 일부 실시예들에서, 요청자는 완료자 내의 버퍼들, 처리 회로 등과 같은 내부 요소들이 고유 태그들을 갖는 요청 패킷들로 풀인지를 결정한다. 즉, 요청자는 완료자가 이전의 요청 패킷을 처리하는 것으로 완전히 점유될 것인지의 여부를 판정하고, 따라서 내부 요소 내의 공간을 자유롭게 하기 위해 이전의 요청 패킷을 처리하는 것을 완료할 필요가 있어서, 요청 패킷은 완료자에 의한 처리를 위해 수락될 수 있다. 이러한 방식으로, 요청자는 요청 패킷에 포함될 수 있는 태그의 속성을 결정한다. 즉, 요청자는 요청 패킷이 완료자의 내부 요소 내의 요청 패킷의 세트에 포함될 것인지, 따라서 완료자의 내부 요소의 요청 패킷의 "윈도우"에 포함될 것인지, 또는 요청 패킷의 윈도우 밖에 있을 것인지를 결정한다.
일부 실시예들에서, 요청 패킷이 완료자에 도달할 때, 완료자의 내부 요소들이 고유한 태그들을 갖는 요청자로부터의 요청 패킷들로 풀인지 여부를 결정하기 위하여, 요청기는 주어진 수의 요청 패킷들이 대응하는 응답 패킷들을 수신하지 않고 완료자에 발신되었는지를 결정한다. 예를 들어, N-비트 태그가 사용되고 있다고 가정하면, 요청자는 대응하는 응답 패킷을 아직 수신하지 않고 2N개의 요청 패킷이 완료자에 송신되었는지를 판정할 수 있다. 이 경우, 모든 이용가능한 태그들이 미해결/계류중인 요청 패킷들에서 사용되었을 때, 요청자는 완성자의 내부 요소들이 요청 패킷들로 풀일 것이라고 결정할 수 있다.
일부 실시예들에서, 요청 패킷이 완료자에 도달할 때, 완료자의 내부 요소들이 고유한 태그들을 갖는 요청자로부터의 요청 패킷들로 풀인지를 결정하기 위해, 요청자는 요청 패킷들에 대한 발신 링크/내부 요소 레이턴시에 관한 정보를 사용한다. 이러한 실시예들에서 발신 링크/내부 요소 레이턴시는, 요청 패킷들이 발신 링크 및 완료자의 내부 요소들을 통해 전달 및/또는 발신될 것으로 예상되는 총 또는 평균 시간이다. 이러한 실시예들에서, 요청자는, 완료자의 내부 요소들이 풀인지를 결정하기 위해, 미해결 요청 패킷들(즉, 대응하는 응답 패킷이 아직 수신되지 않은 요청 패킷들)의 수에 관한 정보와 함께 요청 패킷들에 대한 발신 링크/내부 요소 레이턴시에 관한 정보를 사용한다. 예를 들어, 일부 실시예들에서, 요청자는 요청 패킷들에 대한 발신 링크/내부 요소 레이턴시를 미해결 요청 패킷들의 수(예를 들어, 비행 시간에 의해 곱해짐)와 비교하여, 완성자의 내부 요소들이 풀인지를 결정할 수 있다. 이들 실시예들 중 일부에서, 요청자는 얼마나 긴 패킷들이 비행중인지를 추적하고 이 정보를 비교에 사용한다.
일부 실시예들에서, 요청 패킷이 완료자에 도달할 때, 완료자의 내부 요소들이 고유한 태그들을 갖는 요청자로부터의 요청 패킷들로 풀인지를 결정하기 위해, 요청자는 완료자 내의 내부 요소들 및/또는 중간 네트워크 디바이스들의 배열 또는 구성에 관한 정보를 사용한다. 예를 들어, 요청자는 중간 네트워크 디바이스들 및/또는 완료자의 내부 요소들에 요청 패킷들을 저장 또는 버퍼링하기 위해 최대 용량 또는 현재/현재 용량, 또는 "운반 용량"에 관한 정보를 사용할 수 있다. 이러한 실시예들에서, 요청자는, 완료자의 내부 요소들이 풀인지 여부를 결정하기 위해 미해결 요청 패킷들의 수에 관한 정보와 함께, 중간 네트워크 디바이스들 및/또는 완료자 내의 내부 요소들의 배열 또는 구성에 관한 정보를 사용한다. 예를 들어, 일부 실시예에서, 요청자는 완성자의 내부 요소가 풀인지를 결정하기 위해 미해결 요청 패킷의 수의 운반 용량을 비교할 수 있다. 이들 실시예들 중 일부에서, 요청자는 얼마나 긴 패킷들이 비행중인지를 추적하고 이 정보를 비교에 사용한다.
완료자의 내부 요소들이 고유한 태그들을 갖는 요청자로부터의 요청 패킷들로 풀일 때(단계 602), 요청자는 패킷이 완료자에 도달할 때 요청 패킷이 완료자의 내부의 요소들 내의 태그들에 대해 고유한 태그를 가질 필요가 없음을 인식한다. 따라서, 요청자는 요청 패킷이 완성자에게 도달할 때 완성자의 내부 요소에 있을 요청자로부터의 요청 패킷 내의 태그에 대해 고유하지 않은 태그를 갖는 요청 패킷을 완성자에게 발신한다(단계 604). 이러한 동작을 위해,(간단한 예로서) 2개의 비트 태그가 사용되고, 완료자의 내부 요소가 4개의 요청 패킷을 보유할 수 있다고 가정하면, 요청자가 도 6에 설명된 요청 패킷을 발신하기 직전에 태그 00, 01, 10 및 11을 갖는 요청 패킷을 순차적으로 발신했을 때, 완료자는, 예를 들어 완료자 내의 요소의 배열 및 발신된 요청 패킷의 수(및 요청 패킷이 발신된 때)에 기초하여, 요청 패킷이 완료자에 도달할 때, 서로에 대해 고유한 태그를 갖는 요청 패킷으로 완료자의 내부 요소들이 가득 찬 것으로 결정할 수 있다. 그 후, 요청자는 단계(604)에서 요청 패킷이 완료자에 도달할 때 완료자의 내부 요소들에 있을 요청자로부터의 요청 패킷들 내의 태그들에 대해 고유하지 않은 태그를 갖는 패킷을 발신할 수 있다. 예를 들어, 일부 실시예들에서, 요청자는 11에서 00으로 리턴하고 태그 00과 함께 요청 패킷을 발신한다.
상기 예에서, 완료자에 요청 패킷이 도달하기 전에, 태그 00은 완료자의 내부 요소들에서 이전에 발신된 요청 패킷, 즉 요청자로부터 완료자로 이전에 발신된 4개의 요청 패킷들 중 제1 패킷의 태그에 의해 복제될 것이다. 그러나, 태그 00을 갖는 이전에 발신된 요청 패킷은 요청 패킷이 완료자의 내부 요소들로 수락될 수 있기 전에 처리를 완료한다. 따라서, 00 태그를 갖는 요청 패킷이 완료자의 내부 요소들에 있는 것과 동시에, 00 태그와 함께 이전에 발신된 요청 패킷은 완료자의 내부 요소에 존재하지 않을 것이다.
단계(604)에서, 요청자는 요청 패킷이 완성자에게 도달할 때 완성자의 내부 요소들에 있을 요청자로부터의 요청 패킷들 내의 태그들에 대해 고유하지 않은 태그를 갖는 요청 패킷을 완성자에게 발신하지만, 요청 패킷 내의 태그는 요청 패킷이 완성된자의 내부 요소에 있는 동안 완성자의 외부 요소들에 있는 요청자로부터의 다른 요청 패킷들에 대해 고유하다. 위로부터 이동 윈도우 예를 계속하면, 요청 패킷 내의 태그는 요청 패킷과 동일한 윈도우 내의 다른 요청 패킷들 내의 태그들에 대해 고유하다. 이러한 방식으로 태그를 갖는 요청 패킷을 발신하는 것은 사용 중인 통신 사양의 구술과는 반대로 실행되지만, 본 명세서에 설명된 바와 같은 재순서화 문제는 중복 태그 값을 갖는 요청 패킷에 영향을 미치지 않기 때문에 요청자 및 완성자는 정확한 동작을 계속할 것이다.
완료자의 내부 요소들이 고유한 태그들을 갖는 요청자로부터의 요청 패킷들로 가득차지 않을 경우(단계 602), 요청자는 요청 패킷이 완료자에 도달할 때 요청 패킷이 그 완료자의 내부 요소들 내의 다른 요청 패킷들 내의 태그들에 대해 고유한 태그를 가져야 함을 인식한다. 따라서, 요청자는 요청 패킷이 완성자에게 도달할 때 완성자의 내부 요소에 있을 요청자로부터의 요청 패킷 내의 태그에 대해 고유한 태그를 갖는 요청 패킷을 완성자에게 발신한다(단계 606). 이 동작을 위해, 다시 2 비트 태그가 사용되고, 완료자의 내부 요소가 4개의 요청 패킷을 보유할 수 있다고 가정하면, 요청자가 도 6에 기술된 요청 패킷을 발신하기 직전에 태그 00, 01, 및 10을 갖는 요청 패킷을 순차적으로 발신했을 때, 예를 들어, 완료자 내의 요소의 배열 및 발신된 요청 패킷의 수에 기초하여(그리고 요청 패킷이 발신된 때), 완료자는 요청 패킷이 완료자에 도달할 때 완료자의 내부 요소는 요청 패킷으로 가득차지 않을 것으로 결정할 수 있다. 그 후, 완료자는 단계(606)에서 요청 패킷이 완료자에 도달할 때 완료자의 내부 요소들에 있을 요청자로부터의 요청 패킷들 내의 태그들에 대해 고유한 태그를 갖는 패킷을 발신할 수 있다. 예를 들어, 일부 실시예에서, 요청자는 태그 11과 함께 요청 패킷을 발신한다.
일부 실시예에서, 도 4 및 도 6에는 도시되지 않았지만, 요청자는 이어서 도 4와 도 6에 설명된 태그를 포함하는 완료자로부터 응답 패킷을 수신한다. 응답 패킷을 수신하면, 요청자는 응답 패킷으로부터의 태그를 이용하여 응답 패킷이 도 4 및 도 6에 도시된 요청 패킷과 연관되어 있는지를 판정하고, 그에 따라 후속 동작을 수행한다. 예를 들어, 요청 패킷이 IO 디바이스로부터 데이터를 취득하기 위한 요청인 경우, 응답 패킷은 데이터를 포함한다. 요청자는 응답 패킷으로부터 데이터를 획득하고 후속 동작들(예를 들어, IO 디바이스로부터 데이터를 처리 또는 저장하는 등)을 수행하기 위해 데이터를 사용한다.
태그 사용 활성화 및 비활성화
일부 실시예들에서, 요청자들은 위에서 설명된 바와 같이 요청 패킷들에서 태그들을 사용하도록 구성되거나 인에이블될 수 있다. 즉, 요청자들은 기존의 디바이스들에서와 같은 태그들을 사용하는 것(이는 예를 들어, 태그들이 요청자에서 런 아웃될 때 스톨링(stalling)을 의미할 수 있음) 또는 도 4 및 도 6 등에 도시된 바와 같은 인 플라이트 요청 패킷들에 대한 태그들로 계속하는 것 사이에서 스위칭될 수 있다. 이러한 구현에서 요청자는 요청 패킷에 고유하지 않은 태그를 사용하거나 사용하지 않도록 설정하는 하드웨어 또는 소프트웨어 스위치 또는 구성 설정을 제공한다. 하드웨어 또는 소프트웨어 스위치 또는 구성 설정이 디스에이블, 디어서트(deassert)될 때, 요청자는 기존의 장치에서와 같이 요청 패킷에 대해 태그를 사용한다. 대조적으로, 하드웨어 또는 소프트웨어 스위치 또는 구성 설정이 인에이블될 때, 요청자는 전술한 바와 같이 요청 패킷에 대한 태그를 사용할 수 있다.
일부 실시예들에서, 전술한 스위치는 제조시 또는 설치시와 같이 요청 패킷들에서 비-고유 태그들의 사용을 인에이블 또는 디스에이블하도록 영구적으로 설정된다. 예를 들어, 이들 실시예들 중 일부에서, 스위치는 퓨즈, ROM 스트랩, 및/또는 상술된 바와 같이 요청자가 비-고유 태그들을 사용하는 것을 인에이블(또는 디스에이블)하도록 한 번 구성되는 다른 디바이스와 같은 회로를 포함하는 하드웨어 스위치이다. 예를 들어, 퓨즈는 비-고유 태그들의 사용이 인에이블되도록 전체적으로 남겨질 수 있거나, 또는(예컨대, 퓨즈를 가로질러 특정 전류를 통과시킴으로써) 비-고유 태그의 사용이 디스에이블되도록 버닝 아웃될 수 있다. 그러나, 일부 실시예에서, 전술한 스위치는 재구성 가능하고, 따라서, 예를 들어, 제조 또는 설치 시에, 시동 시에, 런타임 시에 등에, 1회 이상 설정 및 리셋될 수 있다. 예를 들어, 이러한 실시예들 중 일부에서, 요청자는 집적 회로 칩에 구현될 수 있고, "스위치"는 집적 회로 칩이 패키징되는 패키지의 핀 또는 입력에 배선되는 활성화 회로(예: 볼 그리드 어레이 패키지 등)를 포함할 수 있습니다, 핀 또는 입력에 신호가 있는 경우 요청 패킷에서 비선택 태그의 사용을 활성화하거나 비활성화한다.
일부 실시예들에서, 적어도 하나의 전자 디바이스(예를 들어, 요청자(102) 등)는 본원에 설명된 동작들 중 일부 또는 전부를 수행하기 위해 비일시적 컴퓨터 판독가능 저장 매체에 저장된 코드 및/또는 데이터를 사용한다. 보다 구체적으로, 적어도 하나의 전자 디바이스는 컴퓨터 판독가능 저장 매체로부터 코드 및/또는 데이터를 판독하고, 기술된 동작들을 수행할 때 코드를 실행하고/하거나 데이터를 사용한다. 컴퓨터 판독 가능 저장 매체는 전자 디바이스에 의해 사용하기 위한 코드 및/또는 데이터를 저장하는 임의의 디바이스, 매체, 또는 이들의 조합일 수 있다. 예를 들어, 컴퓨터 판독 가능 저장 매체는 플래시 메모리, 랜덤 액세스 메모리(예를 들어, eDRAM, RAM, SRAM, DRAM, DDR4 SDRAM 등), 비휘발성 RAM(예를 들어, 위상 변화 메모리, 강유전체 랜덤 액세스 메모리, 스핀 전달 랜덤 액세스 메모리, 자기저항 랜덤 액세스 메모리 등)을 포함하는 휘발성 및/또는 비휘발성 메모리, 판독 전용 메모리(ROM), 및/또는 자기 또는 광학 저장 매체(예를 들어, 디스크 드라이브, 자기 테이프, CD, DVD 등)를 포함할 수 있지만, 이에 제한되지 않는다.
일부 실시예에서, 하나 이상의 하드웨어 모듈은 여기에 설명된 동작을 수행한다. 예를 들어, 하드웨어 모듈은 하나 이상의 중앙 처리 유닛(CPU)/CPU 코어, 그래픽 처리 유닛(GPU)/GPU 코어, 주문형 집적 회로(ASIC) 칩, 필드 프로그래밍 가능 게이트 어레이(FPGA), 압축기 또는 인코더, 계산 유닛, 내장된 프로세서, 가속 처리 유닛(APU), 제어기, 요청자, 완료자, 네트워크 통신 링크, 및/또는 다른 기능 블록을 포함할 수 있지만, 이에 제한되지는 않는다. 이러한 하드웨어 모듈들 내의 회로(예를 들어, 집적 회로 요소들, 별개의 회로 요소들 등)가 활성화될 때, 회로는 동작들 중 일부 또는 전부를 수행한다. 일부 실시예들에서, 하드웨어 모듈들은, 명령들(프로그램 코드, 펌웨어 등)을 실행할 때, 동작들을 수행하는 실행 파이프라인들, 계산 또는 프로세싱 유닛들 등과 같은 범용 회로를 포함한다. 일부 실시예들에서, 하드웨어 모듈들은 동작들을 수행하는 목적-특정 또는 전용 회로를 포함하며, 가능하게는 "하드웨어에서" 및 명령들을 실행하지 않고 동작들 중 일부 또는 전부를 수행하는 회로를 포함한다.
일부 실시예들에서, 본원에서 설명되는 기능 블록들 및 회로 요소들 중 일부 또는 전부를 나타내는 데이터 구조(예를 들어, 요청자(102), 완료자(104), 네트워크 통신 링크(100), 또는 이들의 일부 부분)는 전자 디바이스에 의해 판독될 수 있고 기능 블록들과 회로 요소들을 포함하는 하드웨어를 제조하기 위해 직접 또는 간접적으로 사용될 수 있는 데이터베이스 또는 다른 데이터 구조를 포함하는 비일시적 컴퓨터 판독가능 저장 매체 상에 저장된다. 예를 들어, 데이터 구조는 Verilog 또는 VHDL과 같은 고레벨 설계 언어(HDL)에서의 하드웨어 기능의 거동 레벨 설명 또는 레지스터-전송 레벨 (RTL) 설명일 수 있다. 설명은 전술한 기능 블록들 및 회로 요소들을 포함하는 하드웨어의 기능을 나타내는 합성 라이브러리로부터 트랜지스터들/회로 요소들의 목록을 포함하는 넷리스트를 생성하기 위해 설명을 합성할 수 있는 합성 도구에 의해 판독될 수 있다. 이어서 네트리스트는 마스크들에 적용될 기하학적 형상들을 설명하는 데이터 세트를 생성하도록 배치 및 라우팅될 수 있다. 그 후, 마스크는 전술한 기능 블록 및 회로 요소에 대응하는 반도체 회로 또는 회로(예를 들어, 집적 회로)를 생성하기 위해 다양한 반도체 제조 단계에서 사용될 수 있다. 대안적으로, 컴퓨터 액세스 가능 저장 매체 상의 데이터베이스는, 원하는 바에 따라, 네트리스트(합성 라이브러리를 갖거나 갖지 않음) 또는 데이터 세트, 또는 그래픽 데이터 시스템(GDS) II 데이터일 수 있다.
이 설명에서, 변수 또는 비특정 값 (즉, 특정 값의 특정 인스턴스 없이 값의 일반적인 설명) 은 N, M 및 X와 같은 문자로 표시된다. 본 명세서에서 이러한 설명에서 상이한 위치에서 유사한 문자를 사용하는 것에도 불구하고, 각각의 경우의 변수 및 비특정 값은 반드시 동일하지는 않으며, 즉, 일반적인 변수 및 명시되지 않은 값의 일부 또는 전부에 대해 의도된 상이한 가변 양 및 값이 있을 수 있다. 즉, 이 설명에서 변수들 및 명시되지 않은 값들을 나타내기 위해 사용되는 N의 특정 인스턴스들 및 임의의 다른 문자들은 반드시 서로 관련되는 것은 아니다.
본 명세서에서 사용된 바와 같은 표현 "등(et cetera, etc.)"은 그리고/또는 케이스를 제시하도록 의도되며, 즉, 그 등이 연관된 목록 내의 요소들의 "적어도 하나"를 제시한다. 예를 들어, "전자 디바이스가 제1 동작, 제2 동작 등을 수행한다"라는 문장에서, 전자 디바이스는 제1 동작, 제2 동작 및 기타 동작 중 적어도 하나를 수행할 수 있다. 또한, 등(etc.)과 연관된 목록 내의 요소들은 단지 예들의 세트 중에서의 예들일 뿐이며, 예들 중 적어도 일부는 일부 실시예들에서 나타나지 않을 수 있다.
실시형태의 전술한 설명은 예시 및 설명의 목적으로만 제시되었다. 이들은 총망라하거나 실시형태를 개시된 형태로 제한하려는 것이 아니다. 따라서, 많은 수정 및 변경이 당업자에게 명백할 것이다. 또한, 상기 개시내용은 실시형태를 제한하려는 의도가 아니다. 실시형태의 범위는 첨부된 청구범위에 의해 정의된다.

Claims (20)

  1. 전자 디바이스로서,
    요청자; 및
    상기 요청자와 링크 사이에 결합된 링크 인터페이스를 포함하며, 상기 요청자는:
    요청 패킷이 완료자의 내부 요소들 내에 있기 전에 상기 완료자의 상기 내부 요소들 내에 있을 상기 요청자로부터의 다른 요청 패킷들 내의 태그들에 대해 고유하지 않지만, 상기 요청 패킷이 상기 완료자의 상기 내부 요소들 내에 있는 동안 상기 완료자의 상기 내부 요소들 내에 있을 상기 요청자로부터의 다른 요청 패킷들 내의 태그들에 대해서는 고유한 태그를 갖는 상기 요청 패킷을 상기 링크 인터페이스를 통해 상기 완료자에 발신함으로써, 상기 링크 인터페이스를 통해 상기 링크 상에서 완료자로 요청 패킷을 발신하도록 구성된 것인, 전자 디바이스.
  2. 제1항에 있어서, 상기 요청자는 또한:
    태그 값 레코드로부터, 상기 태그에 대한 값을 획득하고, 상기 요청 패킷 내에, 상기 태그에 대한 값을 갖는 상기 태그를 포함시키도록; 그리고
    상기 태그 값 레코드를 다음 값으로 전진시키도록 ― 상기 전진시키는 것은 상기 태그값 레코드를 시퀀스에서의 다음 값으로 설정하는 것, 그리고 상기 태그 값 레코드가 상기 시퀀스에서의 최종 태그 값에 있을 때, 상기 시퀀스에서의 첫 번째 값으로 리턴시키는 것을 포함함 ― 구성된 것인, 전자 디바이스.
  3. 제2항에 있어서,
    상기 완료자의 상기 내부 요소들은 상기 태그 값 카운터에 대한 가장 높은 허용가능한 값보다 적은 수의 요청 패킷들을 보유하기 위한 용량을 갖는 것인, 전자 디바이스.
  4. 제1항에 있어서, 상기 요청자는 또한:
    상기 요청 패킷이 상기 완료자에 도달할 때, 상기 요청자의 내부 요소들이 상기 완료자의 내부 요소들 내의 상기 요청자로부터의 다른 요청 패킷들 내의 태그들에 대해 고유한 태그들을 갖는 상기 요청자로부터의 요청 패킷들로 풀(full)일 것이라는 결정에 기초하여 상기 요청 패킷을 발신하도록 구성된 것인, 전자 디바이스.
  5. 제4항에 있어서,
    상기 요청자는, 상기 완료자로부터 응답 패킷들이 아직 수신되지 않은 상기 요청자에 의해 상기 완료자로 발신되었던 인 플라이트(in flight) 요청 패킷들의 수에 적어도 부분적으로 기초하여, 상기 완료자의 상기 내부 요소들이 풀일 것이라고 결정하도록 구성된 것인, 전자 디바이스.
  6. 제4항에 있어서,
    상기 요청자는 상기 링크 상의 네트워크 디바이스들의 유형 및/또는 배열 및/또는 상기 요청자 내의 내부 요소들의 유형 및/또는 배열에 적어도 부분적으로 기초하여 상기 완료자의 상기 내부 요소들이 풀일 것이라고 결정하도록 구성된 것인, 전자 디바이스.
  7. 제6항에 있어서, 상기 완료자의 상기 내부 요소들은:
    요청 패킷들을 수신하기 위한 수신 요소들;
    요청 패킷들을 처리하기 위한 처리 요소들; 및
    응답 패킷들을 발신하기 위한 송신 요소들 중 일부 또는 전부를 포함하는 것인, 전자 디바이스.
  8. 제1항에 있어서, 상기 요청자는:
    상기 태그를 포함하는 응답 패킷을 상기 완료자로부터 상기 링크 인터페이스를 통해 수신하도록; 그리고
    상기 응답 패킷으로부터의 상기 태그를 사용하여, 상기 응답 패킷이 상기 응답 패킷의 후속 처리를 위해 상기 요청 패킷과 연관된다고 결정하도록 구성된 것인, 전자 디바이스.
  9. 제1항에 있어서,
    상기 링크 상에서 사용 중인 통신 사양은 PCIe(peripheral component interface express) 표준이고;
    상기 태그는 PCIe 태그들인 것인, 전자 디바이스.
  10. 제1항에 있어서, 상기 요청자는 또한:
    비고유 태그들이 사용될 것이 허용된다는 것을 표시하는 입력을 수신하는 것에 기초하여 결정 및 발신 동작들을 수행하도록 구성된 것인, 전자 디바이스.
  11. 요청자에서의 링크 인터페이스를 통해 링크 상에서 요청자로부터 완료자로 요청 패킷을 발신하기 위한 방법으로서, 상기 방법은,
    요청 패킷이 완료자의 내부 요소들 내에 있기 전에 상기 완료자의 상기 내부 요소들 내에 있을 상기 요청자로부터의 다른 요청 패킷들 내의 태그들에 대해 고유하지 않지만, 상기 요청 패킷이 상기 완료자의 상기 내부 요소들 내에 있는 동안 상기 완료자의 상기 내부 요소들 내에 있을 상기 요청자로부터의 다른 요청 패킷들 내의 태그들에 대해서는 고유한 태그를 갖는 상기 요청 패킷을 상기 요청자에 의해 발신하는 단계를 포함하는, 방법.
  12. 제11항에 있어서,
    상기 요청자에 의해, 태그 값 레코드로부터, 상기 태그에 대한 값을 획득하고, 상기 요청 패킷 내에, 상기 태그에 대한 값을 갖는 상기 태그를 포함시키는 단계; 및
    상기 요청자에 의해, 상기 태그 값 레코드를 다음 값으로 전진시키는 단계 ― 상기 전진시키는 것은 상기 태그값 레코드를 시퀀스에서의 다음 값으로 설정하는 것, 그리고 상기 태그 값 레코드가 상기 시퀀스에서의 최종 태그 값에 있을 때, 상기 시퀀스에서의 첫 번째 값으로 리턴시키는 것을 포함함 ― 를 더 포함하는, 방법.
  13. 제12항에 있어서,
    상기 완료자의 상기 내부 요소들은 상기 태그 값 카운터에 대한 가장 높은 허용가능한 값보다 적은 수의 요청 패킷들을 보유하기 위한 용량을 갖는 것인, 방법.
  14. 제11항에 있어서,
    상기 요청자에 의해, 상기 요청 패킷이 상기 완료자에 도달할 때, 상기 요청자의 내부 요소들이 상기 완료자의 내부 요소들 내의 상기 요청자로부터의 다른 요청 패킷들 내의 태그들에 대해 고유한 태그들을 갖는 상기 요청자로부터의 요청 패킷들로 풀일 것이라는 결정에 기초하여 상기 요청 패킷을 발신하는 단계를 더 포함하는, 방법.
  15. 제14항에 있어서,
    상기 요청자에 의해, 상기 완료자로부터 응답 패킷들이 아직 수신되지 않은 상기 요청자에 의해 상기 완료자로 발신되었던 인 플라이트 요청 패킷들의 수에 적어도 부분적으로 기초하여, 상기 완료자의 상기 내부 요소들이 풀일 것이라고 결정하는 단계를 더 포함하는, 방법.
  16. 제14항에 있어서,
    상기 요청자에 의해, 상기 링크 상의 네트워크 디바이스들의 유형 및/또는 배열 및/또는 상기 요청자 내의 내부 요소들의 유형 및/또는 배열에 적어도 부분적으로 기초하여 상기 완료자의 상기 내부 요소들이 풀일 것이라고 결정하는 단계를 더 포함하는, 방법.
  17. 제16항에 있어서, 상기 완료자의 상기 내부 요소들은:
    요청 패킷들을 수신하기 위한 수신 요소들;
    요청 패킷들을 처리하기 위한 처리 요소들; 및
    응답 패킷들을 발신하기 위한 송신 요소들 중 일부 또는 전부를 포함하는 것인, 방법.
  18. 제11항에 있어서,
    상기 요청자에 의해, 상기 태그를 포함하는 응답 패킷을 상기 완료자로부터 상기 링크 인터페이스를 통해 수신하는 단계; 및
    상기 요청자에 의해, 상기 응답 패킷으로부터의 상기 태그를 사용하여, 상기 응답 패킷이 상기 응답 패킷의 후속 처리를 위해 상기 요청 패킷과 연관된다고 결정하는 단계를 더 포함하는, 방법.
  19. 제11항에 있어서,
    상기 링크 상에서 사용 중인 통신 사양은 PCIe(peripheral component interface express) 표준이고;
    상기 태그는 PCIe 태그들인 것인, 방법.
  20. 제11항에 있어서,
    상기 요청자에 의해, 비고유 태그들이 사용될 것이 허용된다는 것을 표시하는 입력을 수신하는 것에 기초하여 결정 및 발신 동작들을 수행하는 단계를 더 포함하는, 방법.
KR1020237022250A 2020-12-13 2021-12-06 네트워크 통신 링크의 요청 패킷들에 대한 태그들 KR20230116887A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/120,208 2020-12-13
US17/120,208 US11301410B1 (en) 2020-12-13 2020-12-13 Tags for request packets on a network communication link
PCT/US2021/062063 WO2022125467A1 (en) 2020-12-13 2021-12-06 Tags for request packets on a network communication link

Publications (1)

Publication Number Publication Date
KR20230116887A true KR20230116887A (ko) 2023-08-04

Family

ID=81123881

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237022250A KR20230116887A (ko) 2020-12-13 2021-12-06 네트워크 통신 링크의 요청 패킷들에 대한 태그들

Country Status (6)

Country Link
US (1) US11301410B1 (ko)
EP (1) EP4260197A1 (ko)
JP (1) JP2024500477A (ko)
KR (1) KR20230116887A (ko)
CN (1) CN116745753A (ko)
WO (1) WO2022125467A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021240662A1 (ja) * 2020-05-26 2021-12-02 パナソニック インテレクチュアル プロパティ コーポレーション オブ アメリカ 異常検知装置、異常検知システムおよび異常検知方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5542078A (en) * 1994-09-29 1996-07-30 Ontos, Inc. Object oriented data store integration environment for integration of object oriented databases and non-object oriented data facilities
GB2392742B (en) * 2002-09-04 2005-10-19 Advanced Risc Mach Ltd Synchronisation between pipelines in a data processing apparatus
US8141052B2 (en) * 2003-05-09 2012-03-20 Microsoft Corporation Instrumenting software for enhanced diagnosability
US7487274B2 (en) * 2005-08-01 2009-02-03 Asic Architect, Inc. Method and apparatus for generating unique identification numbers for PCI express transactions with substantially increased performance
US20090070336A1 (en) * 2007-09-07 2009-03-12 Sap Ag Method and system for managing transmitted requests
US9344489B2 (en) * 2011-07-10 2016-05-17 Blendology Limited Electronic data sharing device and method of use
US10031932B2 (en) * 2011-11-25 2018-07-24 International Business Machines Corporation Extending tags for information resources
US9250954B2 (en) * 2013-01-17 2016-02-02 Xockets, Inc. Offload processor modules for connection to system memory, and corresponding methods and systems
US10223371B2 (en) * 2014-11-21 2019-03-05 Vmware, Inc. Host-based deduplication using array generated data tags
US10110474B2 (en) * 2016-09-21 2018-10-23 Arista Networks, Inc. Updating interface list of multi-link group

Also Published As

Publication number Publication date
US11301410B1 (en) 2022-04-12
WO2022125467A1 (en) 2022-06-16
JP2024500477A (ja) 2024-01-09
CN116745753A (zh) 2023-09-12
EP4260197A1 (en) 2023-10-18

Similar Documents

Publication Publication Date Title
US11843691B2 (en) Technologies for managing a flexible host interface of a network interface controller
TWI249671B (en) Method and system for controlling memory accesses to memory modules having a memory hub architecture
US9025495B1 (en) Flexible routing engine for a PCI express switch and method of use
US20080155145A1 (en) Discovery of a Bridge Device in a SAS Communication System
JP2021530813A (ja) 専用低レイテンシリンクを使用した複数のハードウェアアクセラレータのための統合されたアドレス空間
JP4621604B2 (ja) バス装置、バスシステムおよび情報転送方法
TW201033896A (en) Systems, methods, and devices for configuring a device
CN103647807A (zh) 一种信息缓存方法、装置和通信设备
JP2011505038A (ja) チェーン化デバイスシステムにおいてパラメータを設定し待ち時間を決定する方法
JP2016033823A (ja) トランザクション属性を修正するためのメモリ領域オーダリング要求に関するコンプリータ知識の使用
JP2008310832A (ja) 高レベル・データ・リンク・コントローラから多数個のディジタル信号プロセッサ・コアに信号を分配するための装置と方法
KR20230116887A (ko) 네트워크 통신 링크의 요청 패킷들에 대한 태그들
CN116583823A (zh) 使用长向量仲裁的异步管线合并
US20210382841A1 (en) Directing control data between semiconductor packages
JP2008015876A (ja) データアクセスシステム、データアクセス装置、データアクセス集積回路及びデータアクセス方法
US20200192842A1 (en) Memory request chaining on bus
US10684965B2 (en) Method to reduce write responses to improve bandwidth and efficiency
JP4193746B2 (ja) マトリックス状バス接続システム
CN116483259A (zh) 一种数据处理方法以及相关装置
US20180165240A1 (en) Interconnect network supporting multiple consistency mechanisms, multiple protocols, and multiple switching mechanisms
US7882322B2 (en) Early directory access of a double data rate elastic interface
US10515173B2 (en) Input-output processing on a remote integrated circuit chip
US11023390B1 (en) Resizing circuitry
KR100737904B1 (ko) 마스터/슬레이브 디바이스간의 인터페이스 장치 및 그 방법
KR20220113515A (ko) 전력 절감을 위한 클록 인에이블로서의 바이트 인에이블의 용도 변경