KR101785310B1 - 링크 패브릭 패킷에 비동기적인 플릿 번들을 이용한 링크 전달, 비트 오류 검출 및 링크 재시도 - Google Patents

링크 패브릭 패킷에 비동기적인 플릿 번들을 이용한 링크 전달, 비트 오류 검출 및 링크 재시도 Download PDF

Info

Publication number
KR101785310B1
KR101785310B1 KR1020157036653A KR20157036653A KR101785310B1 KR 101785310 B1 KR101785310 B1 KR 101785310B1 KR 1020157036653 A KR1020157036653 A KR 1020157036653A KR 20157036653 A KR20157036653 A KR 20157036653A KR 101785310 B1 KR101785310 B1 KR 101785310B1
Authority
KR
South Korea
Prior art keywords
link
packets
ltp
data
packet
Prior art date
Application number
KR1020157036653A
Other languages
English (en)
Other versions
KR20160013177A (ko
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 KR20160013177A publication Critical patent/KR20160013177A/ko
Application granted granted Critical
Publication of KR101785310B1 publication Critical patent/KR101785310B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/36Flow control; Congestion control by determining packet size, e.g. maximum transfer unit [MTU]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/30Peripheral units, e.g. input or output ports
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/22Parsing or analysis of headers

Abstract

링크 패브릭 패킷에 비동기적인 플릿 번들을 이용하여 링크 전송, 비트 오류 검출 및 링크 재시도를 위한 방법, 장치, 및 시스템이 개시된다. 패브릭 패킷을 포함하는 제 1 타입의 패킷이 생성되고 그의 데이터 콘텐츠는 "플릿"이라 호칭하는 복수의 데이터 유닛으로 분할된다. 그런 다음 플릿은 링크 전달 패킷(Link Transfer Packet, LTP)을 포함하는 제 2 타입의 패킷으로 묶인다. LTP는 많은 포인트-투-포인트 링크를 포함하는 패브릭에서 단일의 링크 세그먼트를 통해 전송된다. 각각의 LTP는 각각의 링크 세그먼트를 통해 송신된 데이터에 오류가 없음을 보장하는데 사용되는 CRC를 구비하며, 또한 재송신의 유닛을 포함한다. 패브릭 패킷의 크기는 변할 수 있으며, 패브릭 패킷은 LTP보다 크거나 작을 수 있다. 전송 체계는 복수의 패브릭 패킷으로부터의 플릿이 단일의 LTP로 묶이게 해줄 수 있다. 패브릭 엔드포인트에서 수신되면, LTP로부터 플릿이 추출되고 재조립되어 패브릭 패킷으로 재생성된다.

Description

링크 패브릭 패킷에 비동기적인 플릿 번들을 이용한 링크 전달, 비트 오류 검출 및 링크 재시도{LINK TRANSFER, BIT ERROR DETECTION AND LINK RETRY USING FLIT BUNDLES ASYNCHRONOUS TO LINK FABRIC PACKETS}
고성능 컴퓨팅(high-performance computing, HPC)은 최근에 사용과 관심의 관점에서 상당한 진전을 보였다. 역사상, HPC는 일반적으로 소위 "슈퍼 컴퓨터"와 연관되었다. 슈퍼컴퓨터는 1960년대 도입되어, 처음 만들어졌으며, 시모어 크레이(Seymour Cray)에 의해 콘트롤 데이터 코포레이션(Control Data Corporation, CDC), 크레이 리서치(Cray Research) 및 크레이(Cray)라는 이름 또는 상호를 가진 후속 기업에서 주로 수십 년간 만들어졌다. 1970년 대의 슈퍼컴퓨터는 소수 개의 프로세서만을 사용하였지만, 1990년 대에는 수천 개의 프로세서를 가진 머신이 출현하기 시작하였으며, 더 최근에는 수십만의 "규격품(off-the-shelf)" 프로세서를 가진 대규모의 병렬 슈퍼컴퓨터가 구현되었다.
다양한 수준의 규모 및 성능과 함께, 구현 및 연구 중심의 많은 유형의 HPC 아키텍처가 있다. 그러나, 공통적인 맥락은 작업을 병렬 방식으로 협업하여 수행하기 위해 프로세서 및/또는 프로세서 코어와 같은 다수의 컴퓨터 유닛들을 상호 연결하는 것이다. 최근의 시스템 온 칩(System on a Chip, SoC) 설계 및 제안 하에서, 수십 개의 프로세서 코어 등이 2차원(2-dimensional, 2D) 어레이, 토러스(torus), 링(ring), 또는 다른 구성을 이용하여 단일의 SoC 상에서 구현되고 있다. 또한, 100개 또는 심지어 1000 개의 프로세서 코어가 3D 어레이에서 상호 연결되는 3D SoC에 관한 연구가 제안되었다. 별개의 멀티코어 프로세서 및 SoC는 또한 백플레인 등을 통해 통신 가능하게 상호 연결되는 서버 보드들 상에서 밀집하게 이격될 수 있다. 다른 공통적인 접근 방법은 전형적으로 2D 어레이로 구성된 서버의 랙(예를 들면, 블레이드 서버 및 모듈)에서 컴퓨팅 유닛을 상호 연결하는 것이다. 세계에서 가장 빠른 슈퍼컴퓨터일 것으로 주장되는 IBM의 세쿼이아(Sequoia)는 총 1,572,864 코어의 서버 블레이드/모듈의 96 랙의 2D 어레이를 포함하며, 최대 성능으로 동작할 때 7.9 메가와트라는 엄청나게 많은 전력을 소비한다.
HPC에 대한 성능 병목 현상 중 하나는 데이터를 인터커넥트를 통해 계산 노드들 사이에서 전달하는 것 때문에 발생하는 지연이다. 전형적으로, 인터커넥트는 인터커넥트 계층 구조에서 구성되는데, 이 때 계층 구조의 최상층부의 프로세서/SoC내에서는 최고의 속도와 최단의 인터커넥트를 가져야 하는데 반해, 계층 구조 아래 쪽으로 진행함에 따라 지연이 증가하게 된다. 예를 들면, 프로세서/SoC 레벨 다음의, 인터커넥트 계층 구조는 인터-프로세서 인터커넥트 레벨, 인터-보드 인터커넥트 레벨, 및 개개의 서버들 또는 개개의 서버들의 집합을 다른 랙에 있는 서버들/집합들과 연결하는 하나 이상의 부가 레벨을 포함할 수 있다.
하나 이상의 레벨의 인터커넥트 계층 구조가 상이한 프로토콜을 채용하는 것은 일반적이다. 예를 들면, SoC 내 인터커넥트는 통상적으로 전용인데 반해, 계층 구조의 하위 레벨은 전용이거나 표준화된 인터커넥트를 채용할 수 있다. 상이한 인터커넥트 레벨은 또한 통상적으로 상이한 물리(Physical, PHY) 계층을 실행할 것이다. 결과적으로, 인터커넥트 레벨들 사이를 이어주는 몇 가지 형태의 인터커넥트를 채용하는 것이 필요하다. 또한, 이종의 컴퓨팅 환경이 실시될 때는 주어진 인터커넥트 레벨 내에서 이어주는 것이 필요하다.
인터커넥트 계층 구조의 하위 레벨에서, (각종 IEEE 802.3 표준에서 정의된) 이더넷 및 인피니밴드(InfiniBand)와 같은 표준화된 인터커넥트가 사용된다. PHY 계층에서, 각각의 이러한 표준은 유선 케이블 및 오버 백플레인(over backplane) 뿐만 아니라 광 링크와 같은 유선 연결을 지원한다. 이더넷은 OSI 7 계층 모델에서 링크 계층(계층 2)에서 구현되며, 기본적으로 링크 계층 프로토콜로 간주된다. 인피니밴드 표준은 OSI 계층 1-4를 다루는 인피니밴드의 다양한 OSI 계층 양상을 정의한다.
현재의 이더넷 프로토콜은 이더넷 링크를 통한 데이터의 신뢰성 있는 전송을 지원하는 어떠한 고유 설비도 갖고 있지 않다. 이것은 인피니밴드의 링크 계층 구현에 대해서도 유사하다. 각각은 TCP/IP와 같은 상위 계층에서 신뢰성 있는 전송을 처리한다. TCP 하에서, 데이터의 신뢰성 있는 전달은 송신자로부터 전달된 IP 패킷의 수신에 응답하여 (IP 목적지 어드레스에 있는) 수신자로부터 (IP 소스 어드레스에 있는) 송신자에게 반환된 명시적인 확인응답(ACKnowledgement, ACK)을 통해 구현된다. 패킷은 송신자와 수신자 사이의 경로를 따라서 놓인 노드들 중 한 곳에서(또는 심지어는 수신기가 부적당한 버퍼 공간을 가진 경우에는 수신기에서) 드롭될 수 있기 때문에, 명시적인 ACK는 (단일의 ACK 응답으로 복수의 IP 패킷의 전달을 확인할 수 있음을 뜻하는) 각 패킷의 성공적인 전달을 확인하는데 사용된다. 전송-ACK 체계는 (드롭된 패킷 또는 패킷들이 재송신되어야 하는 경우) 소스 디바이스 및 목적지 디바이스 각각에서 상당한 버퍼 공간이 유지되어야 하며, 또한 추가적인 처리 및 복잡도가 네트워크 스택에 부가된다. 예를 들면, ACK가 누락될 수 있으므로, 송신자는 또한 ACK가 타이머의 타임아웃 기간 내에 수신되지 않았던 패킷을 재송신하도록 트리거하는데 사용되는 타이머를 채용한다. 각각의 ACK는 귀중한 링크 대역폭을 소비하며 부가적인 처리 오버헤드를 발생한다. 또한, 타이머가 사용되면 링크 왕복 지연(link round trip delay)에 상한치가 설정된다.
본 발명의 전술한 양태 및 많은 부수적인 장점은 첨부 도면과 함께 읽어볼 때, 다음의 상세한 설명을 참조하여 더 잘 이해되는 것으로 쉽게 인식될 것이며, 전체 도면에서 달리 그렇지 않다고 명시하지 않는 한 동일한 참조 부호는 전체 도면에서 동일한 부품을 지칭한다.
도 1은 일 실시예에 따라서, 패브릭 아키텍처의 각종 컴포넌트 및 인터커넥트를 포함하는 시스템의 하이 레벨 뷰를 예시하는 개략도이다.
도 2는 일 실시예에 따라서, 패브릭 링크를 통해 데이터를 전달하기 위한 아키텍처의 계층을 묘사하는 개략도이다.
도 3은 번들로 그룹화된 복수의 플릿을 예시하는 개략도이다.
도 4는 일 실시예에 따라서, 패브릭 패킷의 구조를 예시하는 개략도이다.
도 5는 일 실시예에 따라서, 표준 검출 LTP의 데이터 구조를 예시하는 다이어그램이다.
도 6은 일 실시예에 따라서, 14-비트 CRC LTP의 데이터 구조를 예시하는 다이어그램이다.
도 7은 일 실시예에 따라서, 강화된 검출 LTP의 데이터 구조를 예시하는 다이어그램이다.
도 8은 일 실시예에 따라서, 표준 검출 널(Null) LTP의 데이터 구조를 예시하는 다이어그램이다.
도 9a는 일 실시예에 따라서, 표준 검출 LTP의 플릿이 링크 패브릭과 링크 전달 서브계층 사이의 인터페이스에서 병렬로 한번에 두 개씩 처리되는 4-레인 링크의 전송 체계의 실시예를 예시하는 다이어그램이다.
도 9b는 일 실시예에 따라서, 강화된 검출 LTP의 플릿이 링크 패브릭과 링크 전달 서브계층 사이의 인터페이스에서 병렬로 한번에 두 개씩 처리되는 4-레인 링크의 전송 체계의 실시예를 예시하는 다이어그램이다.
도 10은 일 실시예에 따라서, 두 플릿이 링크 패브릭과 링크 전달 서브계층 사이의 인터페이스에서 병렬로 한번에 두 개씩 처리되는 4-레인 링크를 통해 두 제어 비트를 가진 14-비트 CRC LTP의 전송을 예시하는 개략도이다.
도 11은 일 실시예에 따라서, 함께 편성된 두 4-레인 링크를 포함하는 8-레인 데이터 경로를 통해 두 제어 비트를 가진 두 14-비트 CRC LTP의 병렬 전송을 예시하는 개략도이다.
도 12는 일 실시예에 따라서, 4-레인을 채용하는 두 링크 포트들 사이에서 양방향 데이터 전송의 예를 예시하는 개략도이다.
도 13은 별개의 가상 레인을 통해 전송된 두 FP로부터의 패브릭 패킷 플릿을 인터리빙하는 실시예의 일 예를 예시하는 다이어그램이다.
도 14는 일 실시예에 따라서, 푸시(Push) 및 팝(Pop) 인터리빙의 사용을 예시하는 다이어그램이다.
도 15는 일 실시예에 따라서, 푸시 및 팝 인터리빙 및 VL 마커 인터리빙의 조합을 사용하는 것을 예시하는 다이어그램이다.
도 16은 일 실시예에 따라서, 개별의 우선순위 레벨을 갖는 VL에 대응하는 세 개의 개별 VL FIFO에 버퍼링된 세 패브릭 패킷으로부터의 플릿의 선점 인터리빙(preemptive interleaving)의 예를 예시하는 조합된 도식적인 타임플로우 다이어그램이다.
도 17은 일 실시예에 따라서, 두 VL이 우선순위 레벨을 공유하고 다른 VL이 더 높은 우선순위 레벨을 갖는 세 개의 개별 VL FIFO에 버퍼링된 세 패브릭 패킷으로부터의 플릿의 버블 인터리빙(bubble interleaving) 및 선점 인터리빙의 예를 예시하는 조합된 도식적인 타임플로우 다이어그램이다.
도 18a 및 도 18b는 LTP 전송 체계의 송신 및 LTP 레인 및 그릇된 레인을 검출하기 위해 레인 별 CRC 및 LTP CRC의 사용을 예시하는 개략도로서,
도 18a는 일 실시예에 따라서, LTP 전송 체계에서 LTP의 원래의 송신을 묘사하고, 도 18b는 일 실시예에 따라서, 반복 버퍼(replay buffer)를 이용한 LTP 송신 스트림에서 LTP의 재송신을 묘사한다.
도 18c는 일 실시예에 따라서, 반복 버퍼 LTP가 중첩 기록되는 것을 방지하기 위해 재시도 마커 및 왕복 마커의 사용을 예시하는 개략도이다.
도 19는 일 실시예에 따라서, 33개의 전달 그룹(transfer group, XFR)을 사용한 표준 검출 LTP의 전송을 예시하는 다이어그램이다.
도 20은 일 실시예에 따라서, 33개의 32-비트 XFR 및 네 가지 LTP 시퀀스 상태를 이용한 4-레인 링크를 통한 LTP의 전송을 예시하는 다이어그램이다.
도 21은 일 실시예에 따라서, 8바이트의 데이터 플러스 65째 비트를 포함하는 플릿 데이터가 33개의 32-비트 XFR을 이용하여 4-레인을 통해 전달되는 방법을 예시하는 다이어그램이다.
도 22a 내지 도 22e는 일 실시예에 따라서, 반복 버퍼를 묵시적 ACK를 사용한 링크 레벨에서 신뢰성 있는 LTP 전송을 가능하게 하는 동작 및 로직을 예시하고 또한, 그릇된 레인을 검출하기 위한 동작 및 로직을 예시하는, 일괄하여 포함하는 다중페이지 플로우차트이다.
도 23a는 일 실시예에 따른 송신기의 상태도이다.
도 23b는 일 실시예에 따라서, XFR-그룹 기반하여 계산되고 저장되는 레인별 CRC의 다이어그램이다.
도 24는 일 실시예에 따라서, 계산되어 XFR-그룹별로 저장된 레인별 CRC의 다이어그램이다.
도 25는 제 1 LTP 시퀀스 상태 하에서 불량 LTP의 원래의 송신 및 제 3 LTP 시퀀스 상태 하에서 반복 버퍼로부터 불량 LTP의 재송신 동안 레인별 CRC가 계산된, 도 18a 및 도 18b의 예에 대해 XFR 그룹 기반으로 저장된 예시적인 레인별 CRC 계산을 도시하는 다이어그램이다.
도 26은 일 실시예에 따라서, 11개의 XFR이 레인별로 병렬로 전달되는 3 레인을 통한 표준 검출 LTP의 전달을 예시하는 다이어그램이다.
도 27은 일 실시예에 따라서, 17개 XFR이 레인 중 하나를 통해 전달되고 16개 XFR이 다른 레인을 통해 전송되는 2 레인을 통한 표준 검출 LTP의 전달을 예시하고, 또한 두 LTP 시퀀스 상태를 채용하는 다이어그램이다.
도 28은 일 실시예에 따라서, 33개의 32-비트 XFR을 이용하여 단일 레인을 통한 표준 검출 LTP의 전송을 예시하는 다이어그램이다.
도 29는 일 실시예에 따라서, HFI를 포함하는 시스템의 개략도이다.
링크 패브릭 패킷에 비동기적인 플릿 번들을 이용하여 링크 전달, 비트 오류 검출 및 링크 재시도를 위한 방법, 장치 및 시스템의 실시예가 본 출원에서 설명된다. 다음의 설명에서, 본 발명의 완전한 이해를 제공하기 위해 많은 구체적인 세부 사항이 언급된다. 그러나 관련 기술에서 통상의 지식을 가진 자라면 본 발명은 구체적인 세부 사항 중 하나 이상이 없이도 또는 다른 방법, 컴포넌트, 재료 등을 가지고도 실시될 수 있다는 것을 인식할 것이다. 다른 사례에서, 불필요하게 본 발명의 양태를 모호하게 하지 않도록 공지의 구조, 재료, 또는 동작은 상세히 도시되거나 설명되지 않는다. 본 명세서의 전체에서 "일 실시예" 또는 "실시예"라고 언급하는 것은 실시예와 함께 설명된 특별한 특징, 구조, 또는 특성이 본 발명의 적어도 하나의 실시예에 포함되어 있다는 것을 의미한다. 그래서, 본 명세서 전체의 여러 위치에서 "일 실시예에서" 또는 "실시예에서"라는 관용구가 출현한다고 하여 반드시 모두가 동일한 실시예를 지칭하는 것은 아니다. 뿐만 아니라, 특별한 특징, 구조 또는 특성은 하나 이상의 실시예에서 임의의 적합한 방식으로 조합될 수 있다.
명료성을 위해, 본 출원의 도면에서 개개의 컴포넌트는 또한 특별한 참조 부호에 의하기 보다는 도면에서 이들의 라벨(label)에 의해 지칭될 수 있다. 또한, (특별한 컴포넌트와 상반되는 것으로서) 특별한 형태의 컴포넌트를 지칭하는 참조 부호는 참조 부호 뒤에 "전형적인(typical)"을 의미하는 "typ"를 붙여 도시될 수 있다. 이러한 컴포넌트의 구성은 존재하지만 간결성과 명료성을 위해 도면에 도시되지 않을 수 있는 유사한 컴포넌트의 전형이 될 것이라는 것이 이해될 것이다. 반대로, "(typ)"는 컴포넌트, 요소 등이 전형적으로 그의 개시된 기능, 구현, 목적 등을 위해 사용되는 것으로 해석되지 않는다.
본 출원에서 설명된 실시예의 양태에 따르면, 아키텍처는 메시지 전달, 교환, 서버 상호접속 네트워크를 정의하는 것으로 제공된다. 아키텍처는 OSI 네트워크 모델 계층 1 및 2을 포괄하고, 계층 3 용도의 IETF 인터넷 프로토콜을 적극 활용하며, 아키텍처의 계층 4 용도의 새롭고 및 활용된 사양의 조합을 포함한다.
아키텍처는 CPU 및 논리적인 메시지 전달 구성을 포함하는 다른 서브시스템을, 슈퍼컴퓨터와 같은 공식적인 정의에 의해, 또는 클라우드 컴퓨팅에서 흔히 있는 것으로, 서버가 구동되는 메시지 전달 애플리케이션이어서 일종의 협업 방식으로 기능하는 서버들의 그룹 또는 클러스터와 같이 연합에 의해 간단히 상호 연결하여 구현될 수 있다. 상호연결된 상호 연결된 컴포넌트는 노드라고 지칭된다. 아키텍처는 또한 상호 연결된 컴포넌트는 노드라고 지칭된다. 아키텍처는 또한 프로세서 노드를 SoC 또는 멀티-칩 모듈 등과 상호 연결하여 구현될 수 있다. 호스트(Host)라고 호칭하는 노드의 한가지 형태는 노드에서 사용자-모드 소프트웨어가 실행되는 형태이다. 일 실시예에서, 호스트는 코히어런트 도메인에서 코어 또는 CPU의 개수에 상관없이, 단일의 캐시-코히어런트 메모리 도메인을 포함하며, 여러 논리적 I/O 및 저장 서브시스템을 포함할 수 있다. 호스트가 구동하는 소프트웨어의 유형은 사용자 애플리케이션 노드 또는 저장 서버나 파일 서버와 같은 더욱 특화된 기능을 정의할 수 있으며, 더욱 세부적인 시스템 아키텍처를 서술하도록 기능한다.
최상단 레벨에서, 아키텍처는 다음과 같은 컴포넌트를 정의한다.
Figure 112015127028886-pct00001
호스트 패브릭 인터페이스(Host Fabric Interface, HFI),
Figure 112015127028886-pct00002
링크,
Figure 112015127028886-pct00003
스위치,
Figure 112015127028886-pct00004
게이트웨이, 및
Figure 112015127028886-pct00005
포괄적 관리 모델.
호스트 패브릭 인터페이스(Host Fabric Interface)는 최소한도로 아키텍처의 물리 계층 및 링크 계층을 구현하는 로직으로 구성되어, 노드가 패브릭에 소속되어 패킷을 다른 서버 또는 디바이스로 전송하고 수신할 수 있도록 한다. HFI는 오퍼레이팅 시스템 및 VMN(Virtual Machine Manager)(가상 머신 매니저) 지원에 적합한 하드웨어 인터페이스 및 드라이버를 포함한다. HFI는 또한 상위 계층 프로토콜 및/또는 전송 프로토콜의 오프로드를 실행하기 위한 또는 가속화하기 위한 특화된 로직을 포함할 수 있다. HFI는 또한 네트워크 관리 컴포넌트로부터의 메시지에 응답하는 로직을 포함한다. 각각의 호스트는 HFI를 통해 아키텍처 패브릭에 연결된다.
링크는 HFI를 스위치에 연결하거나, 스위치를 다른 스위치에 연결하거나, 또는 스위치를 게이트웨이에 연결하는 전 양방(full-duplex)의 포인트-투-포인트 인터커넥트이다. 링크는 회로 기판 트레이스, 구리 케이블, 또는 광 케이블에서 상이한 물리적인 구성을 가질 수 있다. 일 실시예에서, PHY(Physical layer), 케이블, 커넥터 전략은 이더넷의 전략, 구체적으로 100GbE (IEEE 802.3bj 초안 표준(현재 초안 2.2)에서 정의된 이더넷 링크와 같은, 초당 100기가비트 이더넷(100 gigabits per second Ethernet))의 전략을 추종한다. 아키텍처는 100 GbE 대역폭을 상회할 수 있는 미래의 이더넷 또는 다른 링크 기술의 사용을 지원하는 융통성을 가지고 있다. 고가의 슈퍼컴퓨터 제품은 특수 목적 (훨씬 높은 대역폭) PHY를 사용할 수 있으며, 이러한 구성을 위해 아키텍처 제품과의 상호 운용성(interoperability)은 PHY를 달리하는 포트를 가진 스위치를 기초로 할 것이다.
스위치는 OSI 계층 2 컴포넌트이며, 아키텍처의 관리 기반시설에 의해 관리된다. 아키텍처가 IP 도메인에서 아무것도 명시하지도 않고 IP-관련 디바이스를 관리하지도 않을지라도, 아키텍처는 이더넷 프로토콜을 그의 OSI 계층 3 또는 인터-네트워킹 계층으로서 정의한다. 아키텍처 패브릭과 외부 네트워크, 특히 이더넷 사이에서 연결성을 지원하는 디바이스는 게이트웨이라고 지칭된다. 경량의 게이트웨이는 축소된 기능성을 제공할 수 있으며 엄격히 말해서 이더넷의 계층 2에서 동작한다. 전 기능을 갖춘 게이트웨이는 계층 3 및 그 이상 계층에서 동작할 수 있고, 그래서 라우터로서 작용한다. 아키텍처에 의해 제공되는 게이트웨이 사양은 이더넷 캡슐화(Ethernet encapsulation)를 위한 메커니즘을 포함하며 게이트웨이가 패브릭에서 어떻게 동작하여 아키텍처의 나머지 부분과 일관적인 이더넷 데이터 센터 네트워크와의 유연한 연결성을 가능하게 해주는 방법을 포함하고 있다. 인터-네트워킹 프로토콜로서 IP를 사용하면 IETF-승인된 전송 방식, 즉 TCP, UDP, 및 SCTP가 아키텍처의 패브릭의 범위 이상의 메시지를 전송하고 수신하는데 사용될 수 있다.
도 1은 일 실시예에 따라서, 아키텍처의 각종 컴포넌트 및 인터커넥트를 예시하는 시스템(100)의 하이 레벨 뷰를 도시한다. 아키텍처의 중심적인 특징은 패브릭(102)으로, 패브릭은 HFI의 집합 및 아키텍처 링크 및 스위치를 통해 상호연결된 HFI 및 게이트웨이의 집합을 포함한다. 도 1에 도시된 바와 같이, 패브릭(102)은 각기 개개의 이산적인 노드 플랫폼(106)에 의해 호스팅되는 복수의 HFI(104)(하나만 도시됨), 가상 플랫폼(110)에 의해 호스팅되는 HFI(108), 멀티-노드 플랫폼(116)의 각각의 노드(1141 및 114n)에 의해 호스팅되는 HFI(1121 및 112n), 통합된 단일 노드 플랫폼(120)의 HFI(1181 및 118n), 고차 기수 스위치(122), 스위치(124 및 126), 패브릭 매니저(들)(128), 게이트웨이(130), 링크(132, 134, 1361, 136n, 138, 1401, 140n, 142, 144, 148), 및 클라우드(150)로서 일괄 도시된 부가 링크 및 스위치를 포함한다.
전술한 바와 같이, 스위치는 계층 2 디바이스이며 패브릭 내에서 패킷 포워딩 메커니즘으로서 작용한다. 스위치는 패브릭 관리 소프트웨어에 의해 중심에 프로비저닝되어 관리되며, 각각의 스위치는 관리 트랜잭션에 응답하는 관리 에이전트를 포함한다. 중심에 프로비저닝된다는 것은 적응적 라우팅을 위한 대안의 경로처럼, 포워딩 테이블이 패브릭 관리 소프트웨어에 의해 특정한 패브릭 토폴로지 및 포워딩 역량을 구현하도록 프로그램되어 있다는 것을 의미한다. 스위치는 적응적 라우팅 및 로드 밸런싱과 같은 QoS 특징을 실행하는 역할을 수행하며, 또한 혼잡 관리 기능을 실행한다. 도 2는 패브릭 링크를 통해 데이터를 전송하기 위한 아키텍처의 계층을 도시한다. 계층은 물리(PHY) 계층, 링크 전달 서브계층, 링크 패브릭 서브계층, 및 전송 계층을 포함한다. 도 2의 좌측 편에는 계층을 OSI 참조 모델에 맵핑하는 것을 도시하며, OSI 참조 모델 하에서 PHY 계층은 계층 1(PHY 계층)에 맵핑하고, 링크 전달 서브계층 및 링크 패브릭 서브 계층은 일괄적으로 계층 2(링크 계층에 맵핑하며, 전송 계층은 계층 4(전송 계층)에 맵핑한다.
아키텍처에서, 신호는 물리 계층에서 함께 포트로 그룹화되며, 포트는 단일체의 주체로서 작동하고, 제어될 수 있으며, 보고된다. 포트는 하나 이상의 물리 레인을 포함하는데, 각각의 레인은 각 통신 방향마다 하나씩의, 물리적 전송 매체에서 구현되는 두 개의 차동 쌍 또는 섬유로 구성된다. 포트를 포함하는 레인의 개수는 구현에 좌우되지만, 링크 전달 서브계층의 아키텍처는 유한 세트의 포트 폭을 지원한다. 특정 포트의 폭은 케이블 및 칩 설계를 위한 공통 목적을 고려하여 기본적인 포트 폭으로서 지원된다. 포트 폭은 lx, 4x, 8x, 12x, 및 16x를 포함하며, 여기서 "x"는 물리 레인의 개수를 식별한다. 결함을 가진 레인의 검출과 같은 어떤 상황 하에서, 링크는 축소된 레인 폭으로 가동할 수 있다. 링크 전달 서브계층은 물리 계층과 링크 패브릭 서브계층 사이의 인터페이스로서 기능한다. (링크 패브릭 서브계층에서) 링크 패브릭 패킷은 64-비트 흐름 제어 숫자(Flow Control Digit)(FLIT, Flit, 또는 플릿은 흐름 제어 숫자의 근사 약어임)로 분할된다. 도 3은 번들(302)로 그룹화되는 복수의 플릿(300)의 예를 도시한다. 각각의 플릿(300)은 8바이트 데이터를 포함하는 64 데이터 비트를 포함한다.
링크 전달 서브계층은 복수의 레인을 신뢰성 있는 방식으로 링크를 통해 플릿 및 플릿의 연관된 신용 반환 정보(credit return information)를 전송할 수 있는 팀(team)으로 형성한다. 이것은 링크 패브릭 서브계층과 연관된 링크 전달 패킷(Link Transfer Packet, LTP)이라 호칭하는 1056-비트 번들을 이용하여 성취된다. 도 3은 또한 16 데이터 플릿을 포함하는 LTP의 데이터 부분을 도시한다. 또한, LTP는 플릿 타입 정보, CRC 데이터, 및 옵션 데이터(도 3에는 도시되지 않음)를 포함한다. LTP의 예는 여러 도면(예를 들면, 도 5 내지 도 11)에 예시되며 아래에서 더 상세히 설명된다.
패브릭 패킷은 64-비트 플릿 및 각 플립마다 플릿 타입 비트로 구성된다. 패브릭 패킷의 제 1 데이터 플릿은 헤드 플릿(Head flit)이라 호칭된다. 패브릭 패킷의 마지막 데이터 플릿은 테일 플릿(Tail flit)이라 호칭된다. 패브릭 패킷에서 임의의 다른 데이터 플릿은 보디 플릿(body flit)이라 지칭된다. 패브릭 패킷(400)의 예는 도 4에서 예시된다.
플릿 타입 비트는 보디 플릿을 다른 플릿 타입과 구별하는 각각의 플릿을 갖고 있다. 일 실시예에서, 보디 플릿은 1로 설정된 플릿 타입 비트로 인코딩되며 64 데이터 비트를 포함한다. 다른 모든 플릿은 0으로 설정된 타입 비트로 표시된다. 헤드 플릿은 1로 설정된 플릿[63]으로 인코딩된다. 다른 모든 플릿(보디 플릿 제외)은 0으로 설정된 플릿[63]으로 인코딩된다. 테일 플릿은 1로 설정된 플릿[62]로 인코딩된다. 다른 모든 플릿(보디/헤드 플릿 제외)은 0로 설정된 플릿[62]로 인코딩된다. 플릿 인코딩은 아래의 테이블 1에서 요약된다.
[테이블 1]
Figure 112015127028886-pct00006
제어 플릿은 테이블 2에서 요약된다. 순전히 링크 전달 계층에 의해 사용되는 7개의 제어 플릿(LT 제어 플릿)은 널(null) LTP에 실려 전송된다. 나머지 제어 플릿은 두 그룹으로 나누어진다. 패브릭 패킷(Fabric Packet, FP) 플릿은 HeadBadPkt, BodyBadPkt 및 TailBadPkt 제어 플릿뿐만 아니라 정규 패킷 헤드, 보디 플릿, 및 테일 플릿을 포함한다. 링크 패브릭(Link Fabric, LF) 커맨드 플릿은 Idle, VLMrkr 및 CrdtRet 플릿을 포함한다. FP 및 LF 커맨드 플릿들은 신뢰성 있는 LTP 내에서 함께 섞여 링크를 통한 전송될 수 있다.
[테이블 2]
Figure 112015127028886-pct00007
유휴 커맨드 플릿은 데이터 스트림에 삽입할 패브릭 패킷 플릿이 없을 때 링크 패브릭 계층에 의해 사용된다. 만일 데이터 경로의 전체 폭이 유휴 플릿을 포함하고 있으며, 링크 전달 계층은 이를 입력 버퍼에 삽입되는 플릿 스트림으로부터 제거할 것이다. 만일 데이터 경로가 유휴 및 비-유휴(non-idle) 플릿 두 가지를 포함하고 있으면, 유휴 플릿은 제거되지 않을 것이다. 이것은 링크 전달 계층이 동일한 데이터 경로 구성을 링크의 먼 곳에 있는 링크 패브릭 계층에 제공하기 위해 구현된다. 만일 링크 전달 계층이 링크 패브릭 계층으로부터 보류 중인 어떤 플릿도 갖고 있지 않으면, 링크 전달 계층은 원래 플릿(original flit)이 링크를 통해 전송되는 것처럼 유휴 플릿을 삽입할 것이다. 원래 플릿은 재송신된 또는 반복된 파일을 포함하는 반복 버퍼(replay buffer)로부터 전송된 플릿과 상반되는 것으로서 링크를 통해 최초로 전송된 플릿이다.
링크 전달 패킷은 링크를 통해 송신하기 위해 16 플릿을 보유한다. 재송신 요청의 없음이 링크 피어에 의해 성공적으로 수신되었음을 표시하는 것을 충분히 오래도록 보장하는 기간 동안 신뢰성 있는 LTP는 반복 버퍼 내에 보유된다. 반복 버퍼 위치 포인터는 각 LTP마다 송신기(NxtTxLTP) 및 수신기(NxtRxLTP)에서 유지되지만, LTP의 일부로서 교환되지 않는다. 수신기에 의해 송신 오류가 검출될 때, 수신기는 RetryReqLTP를 NxtRxLTP 반복 버퍼 위치 포인터를 가진 송신기로 전송한다. RetryReqLTP를 수신한 것에 대응하여, 반복 버퍼 내의 LTP는 RetryReqLTP (피어 NxtRxLTP)에서 시작하여 (NxtWrLTP - 1)라고 기록된 마지막 반복 버퍼 위치에서 끝나는 원래 순서대로 재송신된다. 널 LTP는 반복 버퍼 내에 보유되지 않으며 재송신되지 않는다.
링크 패브릭 커맨드 플릿은 LTP에서 FP 플릿과 함께 혼합될 수 있지만, LF 커맨드 플릿은 패브릭 패킷의 일부분은 아니다. 이들은 링크의 일 단부에서의 링크 패브릭 서브계층으로부터 링크의 다른 단부에서의 링크 패브릭 서브계층으로 제어 정보를 운반한다.
일 실시예에서, 표준 검출 LTP, 14-비트 CRC LTP, 및 강화된 검출 LTP를 비롯한 세 가지 LTP 포맷이 있다. 표준 검출 LTP의 실시예는 도 5에 도시된다. 16 플릿 이외에, 각 표준 검출 LTP는 LTP 콘텐츠를 다루는 16 비트 CRC를 갖고 있다. 예시적인 목적을 위해, 도 5에서 플릿은 65비트로서 도시되며 여기서 비트 64는 플릿 타입 비트이다.
14-비트 CRC LTP의 실시예는 도 6에 도시된다. 16 플릿 이외에, 각 14-비트 CRC LTP는 2 비트의 신용 반환 채널 및 LTP 콘텐츠를 다루는 14-비트 CRC를 갖고 있다. 흐름 제어 신용은 LTP 내에서 특수한 LF 커맨드 플릿에 실려 또는 LTP 신용 측대역 채널에 실려 송신된다.
표준 검출 LTP 이외에, 링크는 또한 16 플릿을 보유하고 그리고 네 개의 12 비트 CRC 필드를 갖는 옵션의 강화된 검출 LTP를 지원할 수 있다. 도 7은 강화된 검출 LTP의 실시예의 포맷을 도시한다. 네 개의 CRC 필드는 각기 16 플릿을 모두 다룬다. 만일 네 CRC 중 어느 것이 불량이면, LTP는 재송신된다. 네 개의 12 비트 CRC에 대해 두 가지의 CRC 계산 옵션이 있다. 첫 번째 옵션(48b 오버랩핑)은 네 번의 오버랩핑 계산을 사용하며, 여기서 각각의 계산은 LTP 내 모든 비트를 다룬다. 두 번째 옵션(레인별 12b-16b CRC)은 네 번의 논-오버랩핑 계산을 사용하며, 여기서 각각의 계산은 네 개의 레인 중 한 레인에서 흐르는 모든 비트로 한정된다.
앞에서 논의된 것처럼, 링크 전달 계층에 의해 사용되는 LT 제어 플릿은 널 LTP에 실려 전송된다. 널 LTP는 반복 버퍼에서 공간을 사용하지 않으며 재송신되지 않는다. 널 LTP는 상기 테이블 2에서 요약된 링크 전달 LT 제어 플릿 중 하나를 사용하여 구별된다. 대부분의 널 LTP 타입은 연속 쌍으로 전송되는데, 이것은 둘 중 적어도 하나가 오류 없이 링크 피어에 의해 수신되는 것 또는 둘 다 오류를 가질 때 RetrainRetryReq가 자동 생성될 것 중 어느 한 가지를 보장하기 위함이다. 표준 검출 널 LTP의 예는 도 8에 예시된다.
표준 검출 널 LTP는 단일의 구별 제어 플릿, 975개의 예약 비트 및 표준 검출 16 비트 CRC 필드를 포함한다. 강화된 검출 널 LTP는 단일의 구별 제어 플릿, 975개의 예약 비트 및 네 개의 강화된 검출 16 비트 CRC 필드를 포함한다. 14 비트 CRC를 사용할 때 널 LTP에서 두 개의 측대역 비트는 무시된다.
네 개의 레인을 가진 링크에 연결된 4x 가능 포트 및 8x 가능 포트에 맞는 링크를 통해 한번에 하나의 LTP가 송신된다. 이것은 표준 검출 및 강화된 검출 LTP에 대한 링크 패브릭 경로의 관점을 이용하여 (CRC 필드는 조정하지 않는 것을 나타냄) 각기 도 9a 및 도 9b에서 도시되는 한편, 대응하는 신호 처리 및 전송 경로의 실시예는 도 10에서 도시된다. 14-비트 CRC LTP는 LCRC[15:0] 필드가 LCRC[13:0] 필드 및 C[l:0] 필드의 조합으로 대체되는 것을 제외하고는 도 8에 예시된 표준 검출 LTP와 유사할 것이다. 플릿 전송 순서는 플릿0부터 시작하여 플릿 15에서 끝난다.
일 실시예에서, 각 레인을 통한 데이터의 물리적인 전송은 각 레인에 대응하는 데이터가 디코딩되고 역직렬화되어 사이클 당 레인별 4 바이트로 그룹화되는 직렬의 2-레벨 비트 NRZ(non-return to zero) 인코딩된 비트 패턴을 이용한다. 이것은 사이클 당 두 플릿을 포함하는 16 바이트를 전송하는 결과를 가져온다. 예를 들면, 도 9a 및 도 10에서 예시된 것은 플릿 0 및 플릿 1이 동일한 시간에 송신되고, 플릿 2 및 플릿 3이 동일한 시간에 송신되는 등의 두 플릿 폭의 구현-특정의 데이터 경로를 가정한 것이다. CRC는 링크 전달 서브계층에 의해 계산된다.
도 11은 데이터가 8 레인을 통해 송신되는 8x 데이터경로를 지원하도록 두 개의 4-레인 링크가 편성되는 LTP 전송 체계를 도시한다. 예시된 바와 같이, 이러한 체계 하에서 두 LTP로부터의 네 개의 플릿이 링크 패브릭 서브계층과 링크 전달 서브계층 사이의 인터페이스에서 병렬로 처리된다.
앞에서 논의된 것처럼, 아키텍처는 데이터 전달을 지원하는 데이터 유닛 그래뉴러리티의 세 가지 레벨, 즉 패브릭 패킷, 플릿 및 링크 전달 패킷을 채용한다. 링크 전달 계층에서 전송의 단위는 LTP이다. 도시된 바와 같이, LTP의 실제 크기는 사용되는 특정 CRC 체계에 따라 변할 수 있으며 16 플릿 길이를 가진 LTP를 사용하는 것은 CRC 비트 및 16개 비트 65들을 제외한 LTP 내에 포함된 64-비트 데이터 플릿의 개수에 대응한다.
네 개의 물리적 레인을 포함하는 링크의 일 실시예의 물리 계층(또한 "PHY"라고도 지칭함) 구조는 도 17에서 예시된다. PHY는 상호연결된 링크의 물리적 구조를 정의하며 컴포넌트 A 및 B로 묘사된 바와 같이, 두 링크 피어들 사이의 특정 링크 상의 신호의 세부 동작을 다루는 역할을 수행한다. 이 계층은 병렬 레인을 통해 정보의 각 비트를 전송 및 수신할 때 연루되는 전기적 레벨, 타이밍 양상, 및 논리적 문제를 비롯하여, 신호 배선을 통한 데이터 전달을 관리한다. 도 17에서 도시된 바와 같이, 각 인터커넥트 링크의 물리적 연결성은 각 방향에서 레인 0-3을 포함하는, 네 개의 차분 쌍의 신호(1700)로 구성된다. 각각의 포트는 두 피어 컴포넌트들 사이의 연결을 완료하는 두 개의 단방향성 링크로 이루어진 링크 쌍을 지원한다. 이것은 트래픽을 양방향으로 동시에 지원한다. 예시 및 용이한 이해를 목적으로, 도 10에서 예시된 레인의 "뒤섞임(swizzle)"은 도 17에서 도시되지 않지만, 일부 실시예에서 송신 및 수신 레인이 뒤섞이는 것이 이해될 것이다.
링크 포트를 가진 컴포넌트는 도 17에서 도시된 바와 같이 피어 링크라고 정의된 쌍으로 된 단방향성 포인트-투-포인트 링크를 사용하여 통신한다. 각 포트는 송신(Transmit, Tx) 링크 인터페이스 및 수신(Receive, Rx) 링크 인터페이스를 포함한다. 예시된 예에 대해 설명하면, 컴포넌트 A는 컴포넌트 B의 Rx 포트(1704)에 연결된 Tx 포트(1702)를 갖는다. 한편, 컴포넌트 B는 컴포넌트 B의 Rx 포트(1708)에 연결된 Tx 포트(1704)를 갖는다. 하나의 단방향성 링크는 컴포넌트 A에서 컴포넌트 B로 송신하며, 다른 링크는 컴포넌트 B에서 컴포넌트 A로 송신한다. "송신" 링크 및 "수신" 링크는 컴포넌트 포트가 데이터를 송신하는 것 및 컴포넌트 포트가 데이터를 수신하는 것으로 상대적으로 정의된다. 도 17에서 예시된 구성에서, 컴포넌트 A의 송신 링크는 데이터를 컴포넌트 A의 Tx 포트(1702)로부터 컴포넌트 B의 Rx 포트(1704)로 송신한다. 이와 같은 컴포넌트 A의 송신 링크는 포트 B의 수신 링크이다. 앞에서 언급한 바와 같이, 링크 포트들 사이에서 데이터 전송의 기본 단위는 LTP이다. 각각의 LTP는 링크의 마주하는 단부들에서 송신 포트 및 수신 포트로 정의되는 특정 링크를 통한 일 방향의 전송으로 특정된다. LTP는 단일의 링크 전달이라는 수명을 가지며, LTP는 대응하는 VL 버퍼로부터 플릿을 빼내어 이를 한번에 16씩 각각의 LTP로 조립함으로써 역학적으로 생성된다. LTP 송신 스트림(1710 및 1712)으로 묘사된 바와 같이, LTP는 도 4를 참조하여 앞에서 논의된 것처럼, 개개의 LTP 마다 헤드 및 테일 플릿 비트로 설명된 제 1 플릿 및 마지막 플릿으로 구성된 플릿 스트림으로서 송신된다.
앞에서 논의된 것처럼, 아키텍처는 기본적으로 0 바이트 내지 10240 바이트의 계층 4 패이로드 크기를 가진, 목적지-경로 설정된 패브릭 패킷, 또는 FP를 기본적으로 포함하는 패킷 전달 메커니즘을 정의한다. 이것은 간단한 ULP 확인응답으로부터 캡슐화된 이더넷 점보 프레임(encapsulated Ethernet Jumbo Frame)에 이르기까지 범위로 하는 메시지를 전송하기 위한 효과적인 지원을 제공한다. 패브릭 패킷은 HFI로 들어가고 HFI로부터 나오는 패이로드의 논리적 유닛을 나타낸다. 패브릭 패킷은 패브릭에서 단대단(end-to-end)의 수명을 갖기 때문에 그렇게 명명된다. 상세히 말해서, 패브릭 패킷의 수명은 FP의 발원지와 목적지로 정의되는 것처럼 패브릭 엔드 포인트들 사이에서 FP 콘텐츠를 전송하는 데 걸리는 시간이다. FP의 각 전달 경로는 적어도 하나의 링크를 통한 전달을 포함할 것이며, 전달 경로가 하나 이상의 스위치를 통과할 때는 복수의 링크를 통한 전달을 포함할 수 있다.
FP 및 LTP를 병용한 플릿을 사용하면 아키텍처에 고유한 데이터 전달 기능성이 촉진된다. 특히, FP, 플릿, 및 LTP의 구분은 가상 레인의 사용뿐만 아니라 다양한 양상의 QoS 및 패브릭 강건성의 사용을 지원한다.
앞에서 논의된 것처럼, 플릿은 단독으로 송신되지 않고, 오히려 링크 전달 패킷으로 꾸린(묶은) 16 플릿의 그룹으로 송신된다. 이것은 플릿이 공통 링크 CRC를 공유할 수 있게 한다. LTP 내 플릿은 많은 여러 패브릭 패킷으로부터 출처될 수 있고, 이것은 다른 패브릭과 비교하여 몇 가지 흥미로운 특성을 링크 프로토콜에 부여한다. 효과적인 패킷 선점(packet preemption) 및 인터리빙 메커니즘을 사용하여, 아키텍처는 여러 스트림에 대해 데이터 전달의 인터리빙을 지원하여, 단일의 커다란 패킷의 블록킹 효과가 물리 링크에 물리적으로 전해질지라도, 헤드-오브-라인 블록킹 효과(head-of-line blocking effect)가 가상적으로 제거된다. 패브릭 패킷, 플릿, 및 LTP 간의 관계의 예시는 도 15 및 도 16에서 도시되며, 이들 도면의 추가 설명은 아래에서 설명된다.
아키텍처는 신용-기반의 흐름 제어를 사용하여 링크의 수신 측에서 버퍼 자원을 관리하고 송신기가 플릿을 전송할 시점을 제어한다. 이러한 접근 방법 하에서, 플릿을 전송하는 패브릭 포트의 경우, 수신 포트에서 필요한 버퍼 공간에 쓸 수 있기에 충분한 흐름 제어 신용을 필요로 한다. 일 실시예에서, 수신기는 링크에서 지원된 가상 레인(Virtual Lane, VL)에 필요한 수신 버퍼들의 단일 풀(pool)을 제공한다. 버퍼 풀의 할당은 링크의 송신기 측의 로직에 의해 관리된다. 지원된 지원된 VL마다 전용 버퍼가 할당된다. 또한, 송신기는 공간의 일부분을 VL들 사이에 역학적으로 할당되는 공유된 풀처럼 관리할 수 있다. 신용-기반의 흐름 제어는 링크를 통한 데이터 전달이 엄격하게 관리되는 것을 의미하는 것으로, 승인 받지 않은 데이터 전달은 없으며, 이것은 또한 패브릭이 소위 "무손실" 패브릭이라는 것을 의미한다. 이러한 사례에서, 무손실이라는 것은 그야말로 정상적인 동작 동안 플릿 및 고로 패킷이 혼잡으로 인해 결코 드롭되지 않는다는 것을 의미한다.
흐름 제어 신용과 같은 제어 정보는 링크 패브릭(Link Fabric, LF) 커맨드 플릿 및 링크 전달(Link Transfer, LT) 제어 플릿에 실려 운반된다. LF 커맨드 및 LT 제어 플릿은 송신기의 플릿 스트림 내 어느 지점에서건 삽입될 수 있다. 또한, 일부 LTP 포맷의 측대역 정보는 심지어 오버헤드가 적은 신용을 전송하기 위해서도 사용될 수 있다. LF 커맨드 및 LT 제어 플릿은 링크 송신기에 의해 발생되며 링크 수신기에 의해 사용된다.
아키텍처는 데이터 무결성을 보장하기 위해 링크 전달 패킷 및 패브릭 패킷에 대해 CRC를 포함한다. 아키텍처는 또한 정확하게 수신되지 않은 LTP를 위해 링크-레벨의 재시도(retry)를 제공한다. LTP 재시도는 링크의 효과적인 비트 오류 율을 상당히 개선하며, 약간 저하된 물리적 BER과 더 낮은 전력 소모를 맞바꿀 수 있는 PHY 전략을 사용할 수 있게 한다. LTP 재시도는 또한 대형의 패브릭을 만드는데 도움이 되며, 이러한 대형의 패브릭에서, 용인되는 시스템 레벨의 오류 율을 유지하기 위해 패브릭 내 많은 수의 링크가 링크 BER 특성 당 훨씬 더 많이 필요하다.
인터리빙 및 선점 및 인터리빙
L2 링크 계층은 여러 패킷으로부터의 플릿이 한 링크를 통해 전송될 때 패킷이 상이한 VL에 있는 한 인터리빙될 수 있게 한다. 인터리빙하는 한 가지 동기는 주어진 링크의 사용을 극대화하려는 것이다. 만일 무슨 이유이건 전송 중인 패킷이 버블(bubble)로 인해 중단되면, 이를 유휴로 놔두는 대신 제 2의 패킷이 채널 내에 인터리빙될 수 있다. 소위 선점이라 호칭하는 인터리빙의 두 번째 이유는 높은 우선순위 패킷의 지연을 줄이기 위해 높은 우선순위 패킷이 전달 중인 낮은 우선순위 패킷을 중단시키는 것이다.
인터리빙 하에서, 패브릭 패킷의 플릿의 모두 또는 일부분은 링크를 통해 송신되는 플릿 스트림 내에서 다른 FP로부터의 플릿으로 인터리빙된다. 송신기는 포트의 출력 큐에서 송신하는데 사용할 수 있는 가용 FP들 중에서 송신을 위한 플릿을 선택한다. 일 실시예에서, 단일의 VL 내에서 FP는 순서대로 전달되며, 그래서 가상 레인 내에서, 하나의 패킷으로부터의 모든 플릿이 송신된 다음 (그 VL 내) 후속 패킷의 임의의 플릿이 송신된다. 여러 VL 전체에서는 어떠한 순서도 명시되어 있지 않으며, 그래서 여러 VL 내 패킷으로부터의 플릿은 플릿 스트림 내에서 (뿐만 아니라 주어진 LTP 내에서, 플릿의 순서가 각 VL 내에서 유지되는 한) 임의적으로 인터리빙될 수 있다. 일부 송신기 구현예는 패킷들 사이에서 인터리빙 양을 제한하도록 선택할 수 있다.
선점 하에서, 우선순위 레벨이 더 높은 패브릭 패킷으로부터의 플릿은 우선순위 레벨이 더 낮은 FP로부터의 플릿에 선점한다. 일 실시예에서, 각각의 가상 레인은 각각의 우선순위 레벨과 연관된다. 송신기는 더 높은 우선순위 VL로부터의 플릿을 더 낮은 우선순위 VL로부터의 플릿보다 앞쪽의 링크 LTP에 삽입하도록 구성된다. 송신기는 단일 플릿보다 큰 경계선에서는 더 높은 우선순위 플릿을 삽입하도록 선택할 수 있다. 또한, 송신기는 동일한 우선순위를 가진 VL로부터의 플릿을 인터리빙하도록 선택할 수 있거나, 송신기는 하나의 패킷으로부터의 모든 플릿을 링크에 넣은 다음 동일한 우선순위의 다른 VL 내 다른 패킷으로부터의 플릿을 전송한다. 링크 상의 수신기는 VL에 의해 큐에 넣기 위한 그리고 다음 홉으로(스위치 내 수신기를 향해) 포워딩하기 위한 인입 플릿 스트림을 구분한다. 일반적으로, 적어도 주어진 링크에 대해, 수신기의 구현은 송신기에 의해 생성될 수 있는 전체 범위의 인터리빙을 지원할 것이다. 일부 실시예에서, 유사한 범위의 인터리빙은 패브릭 전체에서 구현된다. 옵션으로, 여러 링크들은 여러 레벨의 인터리빙을 지원할 수 있다.
패킷 선점의 양상에 따르면, 제 1 우선순위 레벨(예를 들면, 높은 우선순위)를 가진 VL상의 패킷(B)으로부터 플릿은 더 낮은 우선순위 VL(즉, 제 1 우선순위 레벨보다 낮은 우선순위 레벨을 가진 VL) 상의 패킷(A)로부터의 플릿의 스트림에 선점한다. 이러한 사례에서, 패킷(A)의 헤드 플릿 및 패킷(A)로부터의 0개 이상의 보디 플릿의 다음에는 패킷(B)로부터의 헤드 플릿이 뒤이어 올 수 있다. 이러한 헤드 플릿은 새로운 플릿이 시작하며 그리고 수신기가 L2 헤더 내 SC 필드를 찾아 VL 식별자를 결정할 것이라는 것을 표시한다. 패킷(B)의 헤드 플릿의 다음에는 0개 이상의 보디 플릿이 뒤이어 올 것이며 마지막으로는 패킷(B)을 끝내는 테일 플릿이 뒤이어질 것이다. 패킷(B)의 종료 후, 0개 이상의 보디 플릿부터 시작하여 테일 플릿으로 이어지는 패킷(A)의 전송이 다시 시작될 것이다.
패킷이 연이어 더 높은 우선순위 패킷(연속하여 더 높은 우선순위 VL 상의 패킷)에 의해 선점되는 것처럼 패킷 선점은 내포(nested)될 수 있다. 일 실시예에서, 이것은 액티브 패킷이 연결된 리스트의 선두에 있는 연결된 리스트로서 모델링된다. 현재의 패킷이 선점될 때, 새로운 패킷이 리스트의 선두에 추가된다. 선점하는 패킷이 종료할 때, 이 패킷은 리스트에서 제거되며 다음에 시작하는 것으로 예상된 패킷이 리스트의 새로운 선두에 온다. 리스트에서 한번에 보유될 수 있는 패킷의 최대 개수는 지원된 VL의 개수와 같다.
전술한 논의는 우선순위 레벨을 사용하여 선점을 설명하는 것이지만, 더 높은 우선순위 패킷에만 선점이 사용된다는 요건은 없다. 현재 패킷으로부터 송신할 수 있는 플릿이 하나도 없는 사례(그 결과 "버블"이 됨)가 있을 수 있지만, 더 낮은 우선순위 패킷으로부터 가용한 헤드 플릿이 있다. 더 낮은 우선순위 패킷으로부터의 헤드 플릿 및 이어지는 보디 플릿이 전송될 수 있다. 새로운 헤드 플릿은 리스트의 선두에 패킷이 추가되게 할 것이며 수신기는 정확하게 새로운 패킷을 추적할 것이다.
제 1 패킷의 테일 플릿에 앞서 제 2 패킷의 헤드 플릿이 전송될 때 패킷은 제 2 패킷에 의해 인터리빙되는 것이라고 간주된다. 인터리빙의 가장 간단한 사례에서, 중단되는 헤드 플릿에 뒤이은 모든 보디 플릿은 제 2 패킷의 테일 플릿까지 제 2 패킷에 속하며, 이후 제 1 패킷의 나머지 패킷 플릿이 다시 시작한다. 이러한 간단한 사례는 도 13에서 그래픽으로 묘사된다.
플릿의 그룹은 플릿 스트림 내 플릿의 (위에서 아래로) 순서에 대응한다. 그룹에서 제 1 플릿은 VL0라고 표시되는 가상 레인 0를 통해 전송되는 패브릭 패킷의 헤드 플릿이다. VL0 헤드 플릿은 FP가 4 플릿 길이(헤드 플릿, 두 보디 플릿, 및 테일 플릿)라고 식별한다. 제 2 플릿은 FP VL0의 제 1 보디 플릿이다. 다음 플릿은 VL1 헤드 플릿이라고 표시되며, 이 플릿은 VL1이라 표시되는 가상 레인 1을 통해 전송된 FP의 헤드 플릿이다. 된다. VL1 헤드 플릿은 또한 이 FP가 4플릿 길이라고 식별한다. 한 가지 접근 방법 하에서, 새로운 VL로부터 FP의 플릿이 현재 VL로부터의 플릿으로 인터리빙될 때, 새로운 VL은 링크를 통해 플릿을 전송하기 위한 액티브 가상 레인이 된다. 이것은 VL1의 헤드 플릿을 플릿 스트림에 추가하는 것으로 묘사된다. 결과적으로, FP VL1에는 FP VL0이 인터리빙되며, 이것은 먼저 VL1 헤드 플릿을 추가하고, 두 VL1 보디 플릿 및 VL1 테일 플릿을 추가하는 것으로 묘사된다. 테일 플릿은 FP VL1 FP에 대한 플릿의 끝을 식별하는 것으로, 이것은 또한 FP VL1 인터리빙을 완료하는 것이다. 그런 다음 로직은 VL1을 인터리빙하기 전에 FP 플릿으로 되돌아가며, 그 결과 나머지 FP VL0 보디 플릿 및 테일 플릿이 링크를 통해 전송된다.
링크 패브릭 서브계층이 복수의 패브릭 패킷으로부터의 플릿의 인터리빙을 어떻게 지원하는지를 추가로 예시하기 위하여, 도 14는 푸시(push) 및 팝(pop) 인터리빙의 예를 도시한다. 링크 패브릭 서브계층에서 인터리빙은 중단되는 VL의 푸시를 일으키고 테일 플릿이 나타났을 때 스택에서 VL의 팝을 일으키는 푸시 및 팝 체계를 활용한다. 현재의 지면 상에서 작업하기 위해 사용되는 책상 영역과 함께, 인박스 내에 넣어진 종이들의 적층을 스택 작업이라고 가상하는 방법을 시각화기 위해, 푸시 및 팝 인터리빙이라는 맥락에서, 종이들의 적층은 "스택"이라고 지칭되며 책상 영역은 액티브 VL 레지스터에 해당하며, VL 레지스터에서 데이터는 플릿이 저장되는 액티브 가상 레인을 식별한다. 인터리브에 응답하여 송신 중인 VL이 전환될 때, 인터리빙된 VL은 새로운 액티브 VL이 되는데 반해, 이전의 액티브 VL은 데스크로부터 스택의 맨 위로 밀리며, 그래서 용어로 '푸시'를 사용한다. FP의 VL 플릿이 끝날 때 (예를 들면, VL FP의 테일 플릿이 LTP 전송 FIFO에 추가될 때), VL은 데스크 영역으로부터 제거되고 스택의 맨 위의 VL이 스택으로부터 데스크 영역으로 "팝"되며, 그래서 새로운 액티브 VL이 된다. 이러한 VL의 푸시 및 팝 동작은 내포되는 방식으로 지속될 수 있다. 링크 패브릭 서브계층이 n개 VL을 지원함에 따라, 동시에 중단될 수 있는 최대 개수의 패킷은 n-1이다.
도 14의 예에서, 플릿들의 정렬된 리스트(1400)는 여러 VL에 저장된 패브릭 패킷으로부터의 플릿이 플릿의 전송 스트림에 추가되는 순서를 나타낸다(또는 옵션으로, 수신 포트에서 수신되는 플릿 스트림 내 플릿들의 순서를 도시한다). 아래의 설명은 플릿이 LTP로 꾸려지는 송출 스트림에 추가되는 (즉, LTP가 패브릭 내에 '주입되는") 플릿 스트림의 생성과 관련한다. 액티브 VL을 식별하는 표시는 액티브 VL 레지스터(1402)에서 여러 상태로 묘사된다. 초기 상태 하에서, VL0에 대응하는 표시가 액티브 VL 레지스터(1402)에 저장되어 있으며, 이것은 가상 레인 VL0에 버퍼링된 다음 패브릭 패킷(VL0 FP라고 지칭함)으로부터 플릿이 추가된다는 것을 표시한다. 따라서, VL0 FP의 제 1의 두 플릿은 플릿 송신 스트림에 추가되며, 그 시점에 VL1이 VL0에 인터리빙되기 시작하는 인터리빙 이벤트가 검출된다. 이러한 인터리빙 동작을 달성하기 위해, 액티브 VL 레지스터에서 VL1의 표시가 VL0에 대체되고, VL0를 스택으로 푸시한다. 이것은 액티브 가상 레인을 VL1으로 바꾸고, VL1 FP의 헤드 플릿 및 제 1 보디 플릿을 플릿 송신 스트림에 추가한다. 그 다음, VL2이 VL1에 인터리빙되는 제 2의 인터리빙 이벤트에 응답하여, VL2를 액티브 VL 레지스터(1402)에 로딩하고 VL1을 스택으로 푸시한다. 그 결과 FP VL2의 세 플릿이 모두 플릿 송신 스트림에 추가된다. FP VL2 테일 플릿이 추가되면 VL1에 VL2의 인터리빙이 완료되는 것이며, 이로써 VL1은 스택으로부터 액티브 VL 레지스터(1402)로 팝된다. VL1의 또 다른 보디 플릿이 추가되고, 뒤이어 VL 7이 VL1에 인터리빙되기 시작하는데, 이는 VL7의 표시를 액티브 VL 레지스터(1402)에 추가하고 VL1을 다시 스택으로 푸시함으로써 실행된다. 전체 VL7 FP에 해당하는 세 플릿이 플릿 송신 스트림에 추가되면, VL7이 VL1에 인터리빙되는 것이 끝나고 VL1을 스택으로부터 다시 액티브 VL 레지스터(1402)로 팝한다. VL1 FP의 테일 플릿이 추가되면, VL1의 인터리빙이 끝나고 VL0를 스택으로부터 액티브 VL 레지스터(1402)로 팝한다. 이것은 VL0를 액티브 VL로서 되돌리며, VL0 FP의 마지막 두 패킷이 LTP 전송 FIFO에 추가된다.
중단되는 묵시적인 VL로 되돌리기 위해 팝에 의존하는 대신, 링크 패브릭 서브계층은 디바이스가 "VL 마커(VL Marker)"라고 호칭하는 특수한 LF 커맨드 플릿을 활용하여 어느 VL이 리스트에 선두로 이동되는지를 명시적으로 지정할 수 있게 한다. VL 마커의 사용은 이러한 가외의 마커 플릿으로 인하여 덜 효과적이지만, 이는 인터리빙에 더 많은 융통성을 제공해준다. 도 15의 도면은 이러한 개념을 예시한다.
사실 상 VL 마커는 VL을 디폴트의 스택 순서에서 빼내거나, 스택에서 존재하지 않는 새로운 VL이 스택의 맨 위로 이동되게 한다. 스택에 남아 있는 VL들은 이후 계속하여 푸시 및 팝 규칙을 따른다. 이러한 두 가지 상이한 메커니즘은 섞여 사용될 수 있으며 배타적으로 사용되지 않는다. 특정 VL이 스택으로부터 빼내어진 다음 또 다른 VL에 의해 인터리빙되는 사례에서, 이 VL은 다시 스택으로 푸시된다.
도 15를 참조하면, 동작 순서는 도 14의 푸시 및 팝 예와 유사한 방식으로 시작하는데, 이 방식에서 초기의 액티브 가상 레인은 VL0이며 VL0 FP의 처음 두 플릿이 플릿 송신 스트림(1500)에 추가된다. 앞에서와 유사하게, 다음의 VL1이 두 플릿의 VL0에 인터리빙되고, 그런 다음 VL2가 VL1에 인터리빙된다. 그러나, VL2 FP 테일 플릿에 도달하기 전에, VL 마커(1502)가 플릿 송신 스트림에 삽입되어, VL0가 새로운 액티브 VL이 된 것을 표시한다. 그 결과 VL0가 스택으로부터 빼내어지고 액티브 VL 레지스터(1402)에 로딩되며, VL2 를 스택의 맨 위로 푸시한다. VL0의 남아 있는 두 플릿이 플릿 송신 스트림(1500)에 추가되어 VL0을 마무리하며, 그 결과 VL2는 스택으로부터 액티브 VL 레지스터(1402)로 팝된다. 이것은 VL2의 테일 플릿을 추가하게 되며, VL2를 마무리하고 VL1을 스택으로부터 액티브 VL 레지스터(1402)로 팝하게 된다. 또 다른 VL1 보디 플릿이 추가되고, 뒤이어 VL7이 VL1에 인터리빙되기 시작하여, VL7을 액티브 VL 레지스터(1402)에 로딩하고 VL1을 액티브 VL 레지스터(1402)로부터 스택으로 푸시한다. 그 다음 제 2 VL 마커(1504)가 플릿 송신 스트림(1500)에 추가되어 액티브 가상 레인을 다시 VL1으로 전환한다. 이로써 VL7을 스택으로 푸시하고 VL1을 액티브 VL 레지스터(1402)로 빼내온다. VL1 FP 테일 플릿이 추가되면, VL1의 인터리빙이 끝나고, VL7이 스택으로부터 액티브 VL 레지스터(1402)로 팝된다. 그 다음 VL7 FP의 마지막 두 플릿이 추가된다.
도 14 및 도 15에 도시된 인터리빙의 예는 예시적인 목적과 푸시 및 팝 인터리빙 체계 및 VL 마커 인터리빙 체계의 용이한 이해를 위해 인터리빙을 과장하여 도시한다. 실제 시스템에서, 대부분의 인터리빙은 두 가지 형태의 인터리빙 이벤트, 즉 (A) 선점, 및 (B) 패킷 스트림에서 버블 중 한 가지 형태로 인해 발생한다. 선점 인터리빙 및 선점 인터리빙과 버블 이벤트로부터 인해 발생하는 인터리빙의 조합의 더 상세한 예는 도 16 및 도 17에서 각기 도시된다.
앞에서 설명한 것처럼, 선점 하에서, 우선순위가 더 높은 가상 레인 내 패브릭 패킷의 콘텐츠(플릿)는 우선순위가 더 낮은 VL의 플릿을 플릿 송신 스트림에 추가하는 것에 선점한다. HFI, 게이트웨이, 또는 다른 형태의 패브릭 엔드포인트에서, 패브릭 패킷이 구성된 데이터는 일반적으로 초기에 어떤 다른 형태의 포맷으로, 예를 들면 패브릭 패킷에서 캡슐화되는 이더넷 프레임으로 버퍼링될 것이다. 또한 패브릭 패킷은 IP 패킷 및 UDP 패킷과 같은 계층 3 패킷이 생성되는 방법과 유사하게, 네트워킹 스택의 일부로서 생성될 수 있을 가능성이 높다. 스위치에서, 수신된 콘텐츠 및 송신된 콘텐츠는 이미 모두 플릿으로 포맷되어 있으며, 이 플릿은 어느 플릿이 무슨 FP와 연관되는지, 그리고 어떤 스위치 포트에서 플릿이 그의 다음 홉 또는 엔드포인트 목적지 쪽으로 전송되는지를 결정하는데 사용되는 부가적인 메타데이터를 갖고 있다. 전술한 바를 고려하여, 도 16 및 도 17은 FP에서 FP 콘텐츠의 플릿 구성방식을 갖는 패브릭 패킷을 전체적으로 묘사한다.
각 FP마다 플릿 콘텐츠는 FP가 할당된 가상 레인에 할당된 버퍼에 일시 저장된다. 다양한 버퍼 구성의 실시예 하에서, 별개의 버퍼가 각 VL에 할당될 수 있거나, 일부 VL이 버퍼 공간을 공유할 수 있거나, 이 두 가지의 조합이 있을 수 있는데, 이 경우 VL 버퍼 할당의 제 1 부분은 그 VL에 전용되는 반면, 다른 부분은 공유된 버퍼 공간이 된다.
가상 레인을 사용하는 근본적인 양상은 주어진 가상 레인 내 콘텐츠가 순서대로 유지된다는 것이다. 이것은, 주어진 가상 레인에 대해, 하나의 FP가 또 다른 FP를 추월할 수 없다는 것을 의미한다. 더욱이, FP의 플릿은 또한 이들 플릿이 원래 생성된 순서를 계속 유지한다. 동시에, 여러 가상 레인 내 콘텐츠는 다른 가상 레인에 대해 순서를 계속 유지하지 않아도 된다. 이것은 더 높은 우선순위 트래픽이 더 낮은 우선순위 트래픽에 선점할 수 있게 해준다. 가상 레인은 또한 라우팅 및 프로토콜 교착상태를 없애기 위해, 그리고 트래픽 클래스들 간의 헤드 오브 라인 블록킹을 방지하는 데에도 사용된다.
도 16에 도시된 바와 같이, 각각의 가상 레인(VL1, VL2, VL3)에는 세 개의 버퍼(1602, 1604, 및 1606)가 있다. 이러한 가상 레인에는 각기 우선순위 레벨이 할당된다. 즉, VL1에는 낮은 우선순위, VL2에는 중간 우선순위, 그리고 VL3에는 높은 우선순위가 할당된다. 중재기(도시되지 않음)는 플릿이 LTP 2, 3,4, 5, 6, 및 7로 꾸려진 플릿 송신 스트림(1608)에 추가될 플릿을 어느 VL 버퍼가 빼내오는지를 결정하는데 사용된다. 도 16은 VL(VL1, VL2, 및 VL3)이 도시된 윈도우 타임프레임 동안 링크 트래픽을 처리하는 것을 도시하는 "슬라이딩 윈도우" 다이어그램이다. 일 실시예에서, VL 버퍼는 FIFO(First-in, First-out) 버퍼로서 구현되며, 각각의 FIFO 슬롯은 플릿을 저장하는 크기를 갖는다.
앞에서 논의된 것처럼, 일 양태의 선점 인터리빙 하에서, 더 높은 우선순위 VL에 할당된 FP 콘텐츠는 상대적으로 더 낮은 우선순위 VL에 할당된 FP 콘텐츠에 선점할 수 있다. 일반적으로, 만일 (패브릭 내로 주입될) 복수의 FP에 대응하는 FP 콘텐츠가 각각의 VL 송출 버퍼에 버퍼링되면, 최고 우선순위를 가진 VL에 할당된 FP 콘텐츠가 플릿 송신 스트림에 추가될 것이다. 그러나, 선점이 발생하지 않는 상황이 있을 수 있으므로, 이것은 절대적인 규칙이 아니라는 것을 알아야 한다. 동시에, 만일 FP 콘텐츠가 주어진 VL 또는 동일한 우선순위를 가진 복수의 VL에만 이용 가능하면, 그 FP 콘텐츠는 우선순위 레벨에 무관하게 (현재 어떤 FP 콘텐츠도 버퍼링되어 있지 않은) 다른 VL의 플릿 송신 스트림에 추가될 것이다. 이러한 상황은 아래와 같이 도 16에서 예시된다.
시간 T1에서, 패킷 1의 적어도 제 1 부분은 VL1 버퍼(1602)에 버퍼링되어 전송할 준비가 되어 있다. 아키텍처 하의 데이터 전달의 스트리밍 특성 때문에, 플릿은 VL 버퍼에서 수신(그 버퍼에 추가)될 수 있으며 (전송을 위해) VL 버퍼로부터 제거될 수 있다. 더욱이, 플릿을 VL 버퍼에 추가하고 제거하는 것은 특히 스위치에서 어느 정도 비동기적일 수 있다. 결과적으로, 어느 주어진 시점에서, 주어진 VL 버퍼는 버퍼링되어 송신 준비가 되어 있는 콘텐츠를 가질 수도 있고 갖지 않을 수도 있다. 도 16의 예에서, 시간 T1에서, VL 버퍼(1602)만이 송신 준비가 된 플릿을 갖고 있는데 반해, 두 VL2 버퍼(1604) 및 VL3 버퍼(1606)는 엠프티 상태(empty)이다. FP 패킷의 플릿을 플릿 송신 스트림에 추가하기를 시작하기 위해, (특정 FP 포맷에 따른) 적어도 헤드 플릿 또는 플릿들은 VL FIFO 버퍼의 선두에 있어야 한다. (아래에서 더 상세하게 설명되는 바와 같이, 일 실시예에서 VL 버퍼는 순환 FIFO로 구현되며, 이 때 FIFO 헤드는 FIFO 헤드 포인터에 의해 식별된다.) 도 16에서, 헤드 플릿(1610)은 시간 T1에서 VL1 버퍼(1602)의 선두에 버퍼링된다.
시간 T1에서, 플릿(1612)의 제 1 그룹은 플릿 송신 스트림(1608)의 LTP2에 추가되는데, 이때 헤드 플릿(1610)은 시간 T2에서 플릿(1612)의 처음에 추가되며, 이 때 T1과 T2 간의 시간 차는 중재기가 VL1 버퍼(1602)로 바뀔 액티브 VL을 인식하는데 소요되는 시간 및 플릿 데이터를 버퍼로부터 플릿 송신 스트림(1608)에 복사하는 시간의 양을 나타낸다. 도 16에서 T1과 T2 간의 차는 축척대로 그려진 것은 아니며, 그 보다는 FP 데이터가 VL 버퍼에 도달하여 전송 준비가 될 때와 그 데이터가 실제로 플릿 송신 스트림에 추가될 때와의 어떤 유한 시간이 존재할 것이라는 것을 예시하기 위해 사용된다.
시간 T3에서, 헤드 플릿(1615)에서부터 시작하는 패킷 2의 제 1 부분은 VL2 버퍼(1604)에서 수신되었다. VL2가 VL1보다 높은 우선순위를 갖기 때문에, 중재기(또는 다른 로직, 도시되지 않음)에 의해 선점 이벤트가 검출된다. 구현에 따라서, 선점 이벤트는 패킷 2의 헤드 플릿(들)이 VL2 버퍼(1604) FIFO의 선두에 도달한 직후 검출될 수 있거나, 또는 몇 가지 레벨의 인터리빙이 발생하는 것을 줄이기 위해 약간의 지연을 둘 수 있는데 그 이유는 가외의 인터리빙이 다른 포트에서 버블을 일으켜서 심지어 더 많은 인터리빙이 발생하는 결과를 가져올 수 있기 때문이다. 예를 들면, 만일 플릿 송신 스트림에 추가된 플릿을 갖는 현재 패킷이 몇 개의 플릿만을 남겨두고 있고 장차 선점할 패킷이 크면, 로직은 현재 패킷이 완료되기를 대기하여 현재 패킷의 선점이 발생하지 않도록 한다. 선점 이벤트에 응답하여, 액티브 VL은 푸시 및 팝 인터리빙 체계를 이용하여 VL1에서 VL2로 전환된다. 옵션으로, VL 마커 인터리빙 체계가 사용될 수도 있다. 액티브 VL이 VL1에서 VL2로 전환되는데 대응하여, VL2의 표시가 액티브 VL 레지스터에 로딩되고 VL1이 스택으로 푸시된다. 시간 T4에서 묘사된 바와 같이, 플릿(1616)의 제 1 그룹은 VL2 버퍼(1604) FIFO로부터 빼내져서 플릿 송신 스트림(1608)에 추가된다. 그 결과 패킷 2에 유리하게 패킷 1의 전송의 선점이 일어날 뿐만 아니라, 패킷 1 및 패킷 2로부터의 플릿이 인터리빙된다.
시간 T5에서, 헤드 플릿(1618)에서 시작하는 패킷 3의 제 1 부분이 VL3 버퍼(1604)에서 수신되었다. VL3은 VL2보다 높은 우선순위를 갖기 때문에, 중재기(또는 다른 로직, 도시되지 않음)에 의해 제 2 선점 이벤트가 검출된다. 그 결과 패킷 3에 유리하게 패킷 2의 전송이 선점되며, 이것은 VL3의 표시를 액티브 VL 레지스터에 로딩하고 VL2를 스택으로 푸시함으로써 실행된다. 시간 T6에서 시작하는 것으로 묘사된 바와 같이, 패킷 3의 플릿(1620) 전체가 플릿 송신 스트림(1608)에 추가되며, 그래서 패킷 3 플릿이 패킷 2 플릿에 인터리빙된다.
테일 플릿(1622)을 플릿 송신 스트림(1608)에 추가하는 것과 관련하여, 중재기(또는 다른 로직)는 패킷 3으로부터의 플릿이 종료된 것을 검출한다. 그래서, VL3이 액티브 VL 레지스터로부터 제거되고, VL2가 스택으로부터 액티브 VL 레지스터로 팝되어, VL2를 액티브 VL로 되돌려 놓는다. 그 결과 시간 T7에서 시작하는 패킷 2의 나머지 플릿(1624)이 플릿 송신 스트림(1608)에 추가되어 시간 T8에서 끝나며, 이 시점에서 테일 플릿(1626)이 추가되었고 그래서 패킷 2가 끝난 것이 검출된다. 그 결과 VL1이 스택으로부터 액티브 VL 레지스터로 팝되며, VL1이 액티브 VL로서 VL2를 대체하게 된다. 그런 다음 패킷 1의 나머지 플릿(1628)이 플릿 송신 스트림(1608)에 추가되고, 시간 T9에서 테일 플릿(1630)에서 완료된다. 이후 다음 패브릭 패킷의 헤드 플릿이 LTP7의 마지막 플릿으로서 추가된다(다음 패브릭 패킷은 간략하게 하기 위해 도시되지 않는다).
도 17은 버블 인터리빙 이벤트와 그에 뒤이은 선점 인터리빙 이벤트를 예시한다. 패브릭 패킷의 플릿이 복수의 홉을 포함하는 라우팅 경로를 지나갈 때, 일부의 플릿은 하나 이상의 스위치에서 선점될 수 있다. 이것은 주어진 FP의 플릿 스트림의 분열을 초래할 수 있다. 그렇게 분열된 플릿 스트림이 수신기 포트에서 수신될 때, 일부의 플릿이 선점 이전에 전송되었던 때와 일부의 플릿이 선점 이후에 전송되었던 때 사이에는 갭이 존재한다. 이것은 "버블"을 초래한다. 이러한 버블의 예 이외에, 버블은 또한 다양한 다른 이유 때문에 발생할 수 있다. 그러한 버블이 검출됨에 따라, 버블이 일어난 FP와 동일한 또는 더 낮은 우선순위 레벨의 FP로부터의 플릿을 이용하여 인터리빙이 구현될 수 있다.
도 16의 예처럼, 시간 T1에서, 헤드 플릿(1700)을 포함하는 패킷 1의 적어도 제 1 부분이 VL1 버퍼(1602)에서 수신되며, 시간 T2에서 시작하여 플릿의 제 1 부분(1702)이 플릿 송신 스트림(1704)의 LTP 2에 추가된다. 시간 T3에서, 헤드 플릿(1706)에서 시작하는 패킷 2의 플릿의 제 1 부분이 VL2 FIFO 버퍼(1604)에서 수신된다. VL1 및 VL2에는 둘 다 낮은 우선순위 레벨이 할당되어 있으며, 그래서 각각의 패킷 1 및 패킷 2에는 동일한 낮은 우선순위 레벨이 할당된다. FP 및/또는 이들의 플릿은 동일한 가상 레인에 할당될 때 서로를 추월할 수 없지만, FP 및/또는 이들의 플릿은 이들이 상이한 가상 레인에 할당될 때는 서로를 추월하는 것이 허용된다. 이러한 상황은 또한 상이한 가상 레인이 동일한 우선순위 레벨을 갖고 있을 때 발생할 수 있다. 일반적으로, 둘 (또는 그 이상의) 가상 레인에 있는 FP가 동일한 우선순위 레벨을 공유할 때, FP는 예를 들면, 제 1 FP의 모든 플릿이 추가되고, 제 2 FP의 모든 플릿이 추가되는 등으로 (이들의 플릿을 매개로 하여) 이들 전체가 플릿 송신 스트림에 추가된다. 동일한 우선순위 레벨을 공유하는 복수의 VL 중에서 어느 FP를 다음에 전송할지를 선택하는 것은 중재자 선택 로직의 기능일 것이며, 이 로직은 일반적으로 VL에서 동일하게(또는 똑같이 공정하게) FP를 전송하도록 설계될 것이다. 예를 들면, 일부 실시예에서, 라운드 로빈(round-robin) 방식이 구현될 수 있다. 그러한 라운드 로빈 방식은 또한 FP의 길이를 고려할 수 있고, 그래서 복수의 VL 전체에서 버퍼 사용 레벨은 어떤 레벨을 목표로 하게 된다. 예를 들면, 두 VL 간의 라운드 로빈 단독의 접근 방법은 VL 내 FP를 교번하여 전송할 것이며, 반면 사용 레벨 접근 방법은 제 1 FP가 제 2 및 제 3 FP보다 상당히 크다면, VL 중 하나의 VL로부터 제 1 FP를 송신하고, 뒤이어 다른 VL로부터의 제 2 및 제 3 FP를 송신할 수 있다.
도 17에서 예시된 예에서, (선점 인터리빙 이벤트가 없고 오직 VL1 및 VL2만이 중재 대상으로 고려된다고 가정하면) 정상적으로 패킷 1의 모든 플릿이 전송되고, 뒤이어 패킷 2의 모든 플릿이 전송될 것이다. 그러나, 예시된 바와 같이, 시간 T4에서 시작하는 패킷 1의 플릿의 전달에서 버블이 있다. 중재자 로직은 VL2 FIFO 버퍼(1604) 내 패킷 2의 플릿의 가용성과 조합하여 버블의 존재를 고려한다. 이에 따라, 버블 인터리빙 이벤트가 검출되고, 그 결과 패킷 2의 플릿(1708)이 시간 T5에서 시작하는 패킷 1에 인터리빙된다. 선점 인터리빙과 마찬가지로, 인터리빙의 시작은 VL2를 액티브 VL 레지스터에 로딩하고 VL1을 스택에 푸시함으로써 시작한다.
패킷 2로부터의 플릿이 플릿 송신 스트림(1704)에 추가되지만, 시간 T6에서, 패킷 1의 플릿의 제 2 부분(및 나머지 부분)이 수신되기 시작하고 VL1 버퍼(1602)에 버퍼링된다. 비록 이러한 플릿은 즉시 전송이 가능할지라도, 시간 T6에서 이들 플릿이 수신되어도 인터리빙 이벤트가 생성되지 않는다(또는 그렇지 않으면 패킷 2로부터의 플릿의 인터리빙을 끝낸다). 오히려, VL3 FIFO 버퍼(1606) 내 헤드 플릿(1710)을 포함하는 패킷 3 플릿의 가용성을 검출한 것에 응답하여 선점 인터리빙 이벤트가 시간 T7에서 검출될 때까지 패킷 2로부터의 플릿이 플릿 송신 스트림(1704)에 계속 추가된다. 도 16의 예처럼, VL3는 VL1 또는 VL2 중 어느 하나의 우선순위 레벨보다 높은 높은 우선순위 레벨을 갖고 있다. 결과적으로, 높은 우선순위 패킷 3의 플릿의 가용성은 시간 T8에서 시작하는 패킷 2 플릿에 패킷 3 플릿(1712)의 선점 인터리빙이 시작되게 하고, 시간 T9에서 테일 플릿(1715)이 추가되면서 끝나게 한다. 패킷 3의 인터리빙이 종료될 때, VL2가 스택으로부터 팝되고 액티브 VL 레지스터에 로딩되며, 그래서 VL2를 액티브 가상 레인으로서 되돌려 놓는다. 그 결과 패킷 2의 나머지 플릿(1716)이 플릿 송신 스트림(1704)에 추가된다.
시간 T10에서 테일 플릿(1718)이 플릿 송신 스트림(1704)에 추가되는 것으로 식별되는 것처럼, 패킷 2의 종료 시, VL1이 스택으로부터 팝되고 액티브 VL 레지스터로 로딩되어, VL1을 액티브 VL로 되돌려 놓는다. 그 결과 패킷 1의 나머지 부분에 해당하는 플릿(1720)이 플릿 송신 스트림(1704)에 추가되며, 이 스트림에서 테일 플릿(1722)이 시간 T11에서 추가될 때 패킷 1의 플릿의 추가가 완료된다.
링크 신뢰성(Link Reliability)
앞에서 논의된 것처럼, 아키텍처의 패브릭은 "무손실"이며, 이는 패킷이 수신 시 결코 폐기되지 않거나 그렇지 않으면 전송 중에 "손실"되지 않는다는 것을 의미한다. 이것은 기본적으로 신용 기반 흐름 제어의 사용 및 반복 버퍼의 사용을 포함하는 메커니즘의 조합을 통해 성취된다. 신용 기반 접근 방법 하에서, 전송 유닛(예를 들면, HFI, 스위치 또는 게이트웨이)은 전송 유닛이 플릿을 송신하기 위한 신용을 갖지 않은 한 수신 유닛(예를 들면, 또 다른 HFI 또는 스위치)으로 플릿을 전송하지 않을 것이며, 신용은 VL별 기준이며 수신기가 플릿 전송을 위해 사용되는 VL에 필요한 적당한 버퍼 공간을 갖고 있다는 것을 표시하는데 사용된다.
각각의 LTP는 표준 검출 또는 강화된 검출 LTP가 사용되는지 여부에 따라서, 데이터 무결성을 검증하기 위해 사용되는 하나 이상의 CRC를 포함한다. CRC(들)는 LTP의 데이터 콘텐츠를 통해 계산되며, 도 5 내지 도 8에서 예시되고 앞에서 설명한 바와 같이, 결과의 CRC 값(들)은 마지막 플릿(플릿 15)에 뒤이은 LTP의 말미에 첨부된다. 수신되면, CRC(들)는 재계산되고 수신된 LTP 내 CRC(들)와 수신된 데이터 내 CRC(들) 사이의 비교가 수행되어 임의의 데이터 오류가 있는지를 결정한다. 만일 송신된 CRC와 수신된 데이터를 통해 계산된 CRC가 일치하지 않으면, 데이터 오류가 검출된다. CRC 불일치의 검출에 대응하여, LTP는 반복 버퍼를 사용하여 재전송된다.
'신뢰성 있는' LTP는 재송신 요청의 없음이 피어에 의해 성공적으로 수신되었다고 표시하는 것을 충분히 보장할 만큼 오랜 기간 동안 반복 버퍼에서 보유된다. 이러한 접근 방법 하에서, 수신기는 패킷이 성공적으로 수신되었다는 것을 확인하기 위해 ACK를 전송하지 않으며, 오히려 왕복 기간 내에 재송신 요청의 없음은 LTP가 링크를 통해 성공적으로 전달되었다는 묵시적인 확인을 제공한다. 용어 '신뢰성 있는' LTP를 사용하는 것은 반복 버퍼에 보유된 LTP를 반복 버퍼 내에 보유되지 않은, 널 LTP와 같은 다른 LTP와 구별하려는 것이다. 따라서, 널 LTP는 재송신되지 않는다.
반복 버퍼 위치 포인터는 각 LTP마다 송신기(NxtTxLTP) 및 수신기(NxtRxLTP)에서 유지되지만, LTP의 일부분으로서 교환되지는 않는다. (CRC 불일치를 매개로 하여) 수신기에 의해 송신 오류가 검출될 때, 수신기는 RetryReqLTP를 NxtRxLTP 반복 버퍼 위치 포인터를 가진 송신기에게 전송한다. 송신기에서 RetryReqLTP를 수신하면, 반복 버퍼 내 LTP는 RetryReqLTP(피어 NxtRxLTP)에서 시작하여 기록된 마지막 반복 버퍼 위치에서 끝나는 원래의 순서대로 재송신된다. 일 실시예에서, LTP 데이터를 (NxtWrLTP)에 기록하는 다음 반복 버퍼 슬롯이 사용되며, 그래서 마지막 반복 버퍼 위치에는 NxtWrLTP - 1이 기록된다.
CRC 불일치에 의해 표시된 링크 오류의 검출과 관련하여, 어느 레인이 잘못되었는지를 결정하는 제 2 메커니즘이 실시된다. 이러한 메커니즘은 오직 수신기에서 계산될 뿐인 레인별 CRC(per-lane CRC)를 이용하며 (존재하지 않기 때문에) 송신된 데이터 내 레인별 CRC와의 비교를 사용하지 않는다. 오히려, 아래에서 논의되는 것처럼 반복 버퍼를 통해 레인별로 또는 전달-그룹별로 재송신될 때, 레인별 CRC는 CRC가 불일치한 LTP에 대해 계산된 레인별 CRC를 동일 LTP에 대해 재계산된 대응하는 레인별 CRC와 비교하는데 사용된다.
그릇된 레인을 검출하는 레인별 CRC의 사용과 함께 반복 버퍼를 사용하는 일 예는 도 18a 및 도 18b에서 예시된다. 이 예에서, LTP 송신 스트림(1604)의 LTP 2, 3, 4, 5, 6, 및 7를 포함하는 LTP 송신 스트림은 디바이스(A)의 링크 인터페이스(A)로부터 링크의 다른 단부에 있는 피어 디바이스(B)의 링크 인터페이스(B)로 송신되고 있다. 상세히 말해서, LTP 송신 스트림은 앞에서 논의된 것처럼 도 17에서 도시된 바와 유사한 4-레인 링크 인터커넥트를 이용하여 링크 인터페이스(A)의 전송 포트(1800)로부터 링크 인터페이스(B)의 수신 포트로 송신된다. 아키텍처의 링크 하에서, LTP 콘텐츠는 복수의 레인을 통해 연속하여 병렬로 전송된다. 앞에서 논의된 것처럼, 레인의 개수는 특정한 링크 구성에 따라 변할 수 있으며, 또한 레인 개수가 줄어든 링크를 통해 전송하는 것 또한 지원된다. 제한 없이 예를 들면, 단일의 비트는 단위 간격(Unit Interval, UI)이라고 지칭하는 기간 동안 각각의 레인을 통해 송신된다. 일 실시예에서, LTP 데이터의 전달은 전달 단위(transfer unit, XFR)라고 지칭되는 데이터 유닛으로 분할된다. 일 실시예에서, 각각의 XFR은 32-비트 양이다. 일 실시예에서, XFR의 모든 비트는 동일한 레인을 사용하여 송신된다. 일부 실시예에서, 일부 XFR은 복수의 레인을 통해 송신될 수 있다.
도 19는 1056 비트 길이를 갖는 표준 검출 LTP에 대한 XFR의 맵핑을 예시한다. 각각의 XFR는 32 비트 길이이며 단일의 레인을 통해 전송된다. 따라서, 각 LTP마다 33개 XFR가 있다. 도 20은 일 실시예에 따라서, 4-레인 링크에 대한 레인별 XFR 매핑을 도시한다. 명목상, 예시의 목적 및 간략함을 위해, 각 플릿은 64-비트이다. 그러나, 도 3에 예시된 것처럼, 각 플릿은 플릿 타입을 식별하기 위해 (보디 플릿에 대해) 전체적으로든 또는 (헤드 및 테일 플릿 및 제어 플릿에 대해) 부분적으로든 사용되는 별도의 65번째 비트를 갖고 있다. 송신 동안, 65째 비트는 인-라인으로 송신되는데, 이것은 복수의 레인을 통해 병렬로 송신된 직렬 전송된 비트 스트림이 역직렬화되고 재조립되면, 65째 비트들이 1056 비트 표준 검출 LTP 내 매 65째 비트 위치마다 나타난다는 것을 의미한다.
4-레인 링크의 일 실시예에서, 두 플릿의 데이터 비트는 32 UI 동안 병렬로 링크를 통해 전송되며, 그래서 네 XFR를 포함하는 128 비트가 서로 (논리적으로) 전송된다. 그러나, 앞에서 언급한 것처럼, 매 65째 자리는 플릿 타입 비트에 의해 점유된다. 그 결과로서, XFR는 플릿과 정확하게 2:1 맵핑하지 않는다. 오히려, 도 21에 예시된 것처럼, 추가 65째 비트가 라인에서 출현하면 줄 바꿈 전달이 일어나게 한다.
더 상세히 말해서, 일 실시예에서, 여분의 두 비트가 128 UI마다 줄이 바뀌며, 결과적으로 4-레인 XFR의 8 그룹이 완료된 후 16 비트의 집단이 생긴다. 이들 8 그룹은 제 1의 32개 XFR를 포함하고, 33째 XFR는 플릿 15의 마지막 16 비트(플러스 그의 65째 비트)와 그 뒤이은 16-비트 CRC(또는 옵션으로, CRC-14 LTP의 경우 14-비트 CRC 플러스 2 제어 채널 비트)를 포함한다. 예시적인 목적과 이해의 용이함을 위해, 본 출원에서 플릿은 64-비트의 단위로 전송되는 것으로 예시될 수 있으나, 일 실시예에서 플릿은 실제로 65-비트의 단위로 전송되는 것으로 이해될 것이다.
다시 도 20의 4-레인 XFR 매핑으로 되돌아가면, 1056-비트 표준 검출 LTP 당 33개 XFR의 사용은 각 LTP마다 하나의 XFR가 줄 바뀌어진다. 이것은 결국 레인 0, 레인 1, 레인 2, 레인 3, 복귀하여 레인 0, 레인 1 ...등으로 이루어진 레인 시퀀스를 시작하는 LTP에 따라서, 각각의 다음 LTP의 시작 지점을 다음 레인으로 시프트시킨다. 이것은 본 출원에서 4-레인 표준 검출 LTP '시퀀스' 또는 (본 출원에서 예시되고 논의된 4-레인을 통한 표준 검출 LTP 전송에 적용되는 것으로서) 간략히 짧게 LTP 시퀀스라고 지칭된다. 편의상, 일 실시예에서 LTP 시퀀스가 두 비트를 사용하여 0, 1, 2, 3으로서 추적될지라도 LTP 시퀀스 상태는 제 1, 제 2, 제 3, 및 제 4라고 예시된다.
도 18a에서 도시된 바와 같이, LTP 송신 스트림(1604) 내 플릿의 직렬화 및 맵핑은 전송 링크 제어 블록(1804)에 의해 수행된다(그렇지 않으면 이 동작의 일부분은 도시되지 않은 또 다른 블록에 의해 수행된다). 전송 링크 제어 블록(1804)에 의해 처리되기 전에, 각각의 신뢰성 있는 LTP의 데이터 콘텐츠는 반복 버퍼(1806) 내 LTP 슬롯 중 하나에 복사되는데, 여기서 슬롯은 NxtWrLTP 포인터(1807)에 의해 식별된다. 일반적으로, 반복 버퍼는 가변 크기 또는 고정 크기를 가질 수 있다. 일 실시예에서, 반복 버퍼는 선택적으로 복수의 사전결정된 크기 중 하나의 크기로 구성될 수 있다.
예시된 바와 같이, 일 실시예에서, 반복 버퍼는 다음 전송 LTP(next transmit LTP, NxtTxLTP) 포인터(1808)가 마지막 FIFO 슬롯으로부터 제 1 FIFO으로 줄 바뀌는 (본 예에서는 슬롯 7에서 슬롯 0로 줄 바뀜) 값을 갖는 순환형 FIFO로서 구현된다. 순환형 FIFO를 사용하면 (이미 송신된 LTP에 대응하는) 이전의 LTP 데이터가 새로운(다음으로 송신될) LTP 데이터에 의해 중첩 기록되는 결과를 가져오지만, 아래에서 상세히 설명되는 것처럼, LTP 데이터가 성공적으로 전송되었다는 묵시적인 확인응답이 검출될 때까지 어떠한 LTP 데이터도 중첩 기록되지 않도록 보장하는 대책이 제공된다. 이러한 체계는 명시적인 ACK를 사용하지 않고도 링크를 통한 데이터의 신뢰성 있는 전송을 가능하게 하여, ACK의 사용과 연관된 오버헤드를 줄일 수 있다. 이것은 또한 (TCP와 같은) 링크 계층 상위의 프로토콜에 사용되는 ACK 기반의 신뢰성 있는 전송 체계를 지원하는데 필요한 전송 포트에서 버퍼링하는 작업을 줄여준다. 도 22a 내지 도 22e의 플로우차트(2200a-e)와 도 23a 및 도 23b의 송신기 및 수신기 상태 머신 다이어그램(2370 및 2350)을 참조하면, 그릇된 링크 레인의 검출을 비롯한 링크 오류를 처리하는 것은 일 실시예에 따라서 다음과 같은 방식으로 실시된다. 링크 초기화 프로세스 동안, 링크의 인터페이스의 피어 송신 포트와 피어 수신 포트 사이에서 각종 정보가 교환되어, 양방향 통신 링크를 설정한다. 이러한 프로세스 동안, 반복 버퍼의 NxtTxLTP 포인터(1808) 및 수신 측 상의 대응하는 다음 수신 LTP (next receive LTP, NxtRxLTP) 포인터(1810)가 0으로 초기화된다. 링크 초기화가 성공하면, 링크 전달 모드는 시작 블록(2202) 및 도 23a 및 도 23b에서 송신기 및 수신기의 LinkTransferActive.normal 상태로 묘사된 것처럼 "정상"으로 설정되며, LTP는 링크를 통해 전송될 준비가 된다. 명료성을 위해, 다음의 설명은 데이터가 일 방향으로 전송되는 것에 초점을 맞추며, 링크를 통한 양방향 통신을 지원하기 위해서는 (별도의 레인 세트를 사용하여) 유사한 동작이 역 방향으로 수행된다.
LTP 송신 스트림(1604) 내 LTP가 순차적으로 송신되므로, LTP의 데이터는 순차적으로 반복 버퍼(1806) 내에 복사되고, 따라서 NxtTxLTP 포인터(1808)는 LTP 당 하나의 슬롯씩 전진한다(또는 마지막 슬롯(MyLTPmax) 에 도달되면 다시 0으로 줄 바뀐다). 도 18a에서 예시된 예시적인 상태를 보면, LTP 2 내지 6은 송신 포트(1800)로부터 이미 송신되어 LTP 2 및 3이 이미 수신 포트(1802)에서 수신되었고, Rx 링크 제어 블록(1805)에 의해 처리되었으며, LTP CRC 일치에 기초하여 올바른 LTP라고 결정되었다. LTP 4는 이제 막 수신되는데 반해, LTP 5 및 6은 전송 중이다(이들 LTP의 데이터는 송신기 포트(1800)로부터 송출 전송되었지만, 아직 수신 포트(1802)에서 수신되지 않았다).
플로우차트(2200a)를 참조하면, 주요 플로우차트 루프는 수신 포트에서 LTP가 수신되는 블록(2204)에서 시작한다. 도 18a의 예에서, 이러한 동작은 수신 포트(1802)에서 LTP 4가 수신되는 것으로 묘사된다. 블록(2206)에서 묘사된 바와 같이, 각 레인마다, 적용 가능한 LTP 시퀀스 상태 동안 그 레인을 통해 수신되는 데이터에 기초하여 CRC는 계산되며, CRC는 CRC 레인 레지스터(CRC-L0, CRC-L1, CRC-L2, 및 CRC-L3)로 묘사된 바와 같은 레인별 CRC 레지스터에 기록된다. 일 실시예에서, 이들 레지스터 내 데이터는 현재 LTP의 CRC 계산 결과로 중첩 기록되며, 그래서 CRC 레인 레지스터는 가장 최근에 처리된 LTP의 데이터만을 저장한다. 일 실시예에서, 4-레인 링크의 레인별 CRC는 각 레인마다 비트가 수신될 때 역학적으로 계산되는 12-비트 CRC이다.
블록(2208)에서, 수신된 LTP 데이터의 CRC (Rx CRC)가 계산되고, 송신된 LTP 내 Tx CRC에 비교된다. Tx CRC는 송신기 포트(1800)에 의해 수신기로 송신될 LTP 데이터를 이용하여 계산되며, 본 출원에서 각종 LTP 포맷으로 예시된 것처럼, LTP의 끝 부분에 첨부된다. 수신기는 수신된 LTP 데이터로부터 Tx CRC를 추출하고 Tx CRC를 수신된 LTP 데이터를 통해 계산된 Rx CRC와 비교한다. 판단 블록(2210)에서, 수신된 Tx CRC 및 계산된 Rx CRC가 일치하는지의 여부가 결정된다. 만일 일치하면, 블록(2212)에서 묘사된 것처럼, LTP는 양호한 것으로 간주되고, LTP 데이터의 정상 처리가 수행되며, 로직은 블록(2204)으로 되돌아가서 다음으로 수신되는 LTP를 처리한다.
도 18a에서 도시된 예에서, Tx CRC 및 Rx CRC는 LTP 4에 대해 일치하지 않은데(CRC 불일치), 이것은 LTP 데이터 오류를 나타낸다. 링크 데이터 오류는 각종 링크 조건으로부터 말미암을 수 있으며, 이 점에서 오류를 일으키는 특별한 링크 조건은 알지 못하며, 알고 있는 것은 수신된 LTP 데이터가 송신된 것과 상이하다는 것이고, 그래서 수신된 LTP는 그릇된 데이터이고 더 이상 처리되지 않을 것이다. 불일치한 LTP CRC는 판단 블록(2210)에서 NO 결과에 해당하며, 이에 따라 로직은 수신기 상태 다이어그램(2350)에서 RcvBadLTP로도 묘사된 것처럼, 로직 LTP가 불량인 것으로 묘사되는 블록(2214)으로 진행한다. 불량 LTP의 검출에 대응하여, 각각의 블록(2216)(도 22a), 블록(2218 및 2220)(도 22b)에서의 동작으로 묘사된 것처럼, 복수의 동작이 개시되어 실질적으로 병렬로 수행된다.
블록(2216)에서 묘사된 것처럼, 불량 LTP에 대해 계산된 레인별 CRC 값은 레인별 또는 XFR-그룹별로 저장된다. 만일 LTP 당 XFR의 개수가 레인 개수로 균등하게 나눌 수 있다면, 레인별 CRC 값은 레인별로 저장되며, 그렇지 않으면, 레인별 CRC 값은 XFR-그룹별로 저장된다. 예를 들면, 세 개의 액티브 레인 및 33개 XFR를 가진 링크의 경우, 33/3=11이므로, 레인별 CRC 값이 저장된다. 반대로, 네 레인 또는 두 레인 중 어느 하나인 경우, 레인별 CRC 값은 (33/4=7.5 및 33/2=16.5이므로) XFR-그룹별로 저장된다. 만일 XFR-그룹별 CRC가 저장되면, 수신 LTP 시퀀스 상태는 레지스터(1814)에 저장된다.
XFR-그룹별 CRC의 예는 도 24에서 예시된다. 도시된 바와 같이, 레인별 CRC가 계산되는 XFR의 개수는 4 레인 전체에서 같지 않게 계산되며, 오히려 레인 중 하나의 레인은 표준 검출 LTP 당 9개의 32-비트 XFR(그래서 288 비트)를 수신하는데 반해, 다른 세 레인은 8개의 32-비트 XFR(그래서 256 비트)를 수신할 것이다. 더욱이, 9개 32-비트 XFR를 수신하는 레인은 LTP 시퀀스 상태에 좌우될 것이다. 아래에서 더 자세히 논의되는 바와 같이, 저장된 레인별 CRC는 CRC 불일치의 LTP와 후속하여 재송신된 동일 LTP의 XFR-그룹별 CRC들을 비교함으로써 어느 레인 또는 레인들이 오류를 발생하였는지를 검출하는데 사용된다. 원래의 LTP 송신에 사용된 LTP 시퀀스가 LTP 재송신에 사용된 LTP 시퀀스와 상이할 수 있기 때문에, XFR-그룹별 CRC가 채용된다. 그 결과 XFR-그룹별 CRC가 동일 XFR를 통해 계산된 CRC와 비교될 것이며, 반면에 만일 레인별 CRC 방식이 사용된다면, 4 레인(똑같이 25% 찬스) 또는 두 레인(똑같이 50% 찬스)을 가진 링크를 운영할 때 CRC가 동일한 XFR를 통해 계산되는 결과를 초래하거나 초래하지 않을 수 있다.
도 24에서 도시된 바와 같이, XFR-그룹별 CRC는 CRC-G0, CRC-G1, CRC-G2, 및 CRC-G3라고 표시된다. 이들 CRC가 계산되는 전송은 레인 및 LTP 시퀀스 상태의 둘 다에 좌우될 것이다. 예를 들면, 제 1 LTP 시퀀스 상태의 경우, CRC-G0는 레인 0를 통해 수신되는 9개 XFR(0, 4, 8, 12, 16, 20, 24, 28, 및 32)로부터 계산되는데 반해, CRC-G1, CRC-G2, 및 CRC-G3에 대해 계산된 값은 각기 레인 1, 2, 및 3에 대해 묘사된 8개 XFR에 좌우될 것이다. 제 2 LTP 시퀀스 상태하에서, CRC-G0는 레인 1을 통한 9개 XFR로부터 계산되는데 반해, CRC-G1, CRC-G2, 및 CRC-G3에 대해 계산된 값은 각기 레인 2, 3, 및 1에 대해 묘사된 8개 XFR에 의존할 것이다. 도시된 바와 같이, 제 3 및 제 4 LTP 시퀀스 상태 모두에 유사한 접근 방법이 사용된다.
도 18a에서 묘사된 타임프레임 동안, LTP 시퀀스 상태는 1이며, 그래서 CRC-G0, CRC-G1, CRC-G2, 및 CRC-G3는 각기 레인 0, 1, 2, 및 3을 통해 LTP 4에서 수신된 데이터로부터 계산된다. LTP의 XFR-그룹별 CRC-G0, CRC-G1, CRC-G2, 및 CRC-G3 값의 예시적인 계산은 도 18a 및 도 25에서 도시되며, 각기 428, 556, 208, 및 804을 갖는다. 이러한 XFR-그룹별 CRC 값은 레지스터(CRC-G0, CRC-G1, CRC-G2, 및 CRC-G3)에 저장된다.
계속하여 도 22b의 플로우차트(2200b)를 참조하면, 블록(2218)에서, 재송신 요청(retransmit request, RetryReq LTP)(1812)이 수신기로부터 송신기로 반환되며, 이는 NxtRxLTP 포인터(1810)에 대한 현재 값을 통해 불량 LTP를 식별한다. 일 실시예에서, 연속 쌍의 RetryReq LTP가 전송되는데 반해, 또 다른 실시예에서는 단일의 RetryReq LTP가 전송된다. 이러한 예에서, NxtRxLTP 포인터 값은 LTP 4, 즉 불량 LTP에 대한 데이터를 저장하는 반복 버퍼 슬롯 4를 가리킨다. RetryReq LTP의 수신에 응답하여 반복 모드가 시작될 때 송신기 측의 세부 동작은 도 22c의 플로우차트(2200c)에서 도시된다.
또한 블록(2216)에서 불량 LTP가 검출되면, 블록(2220)에서 LTP 수신 모드는 'LTP-버리기(LTP-tossing)' 모드로 설정되어, 결과적으로 불량 LTP를 비롯하여 수신된 LTP가 버려진다(폐기된다). LTP-버리기 모드는 수신기 상태 다이어그램(2350)에서 LTA.RxTossing 상태로서 묘사된다. 수신기가 LTP-버리기 모드에서 동작하지만, LTP는 수신되고, 레인별 CRC가 계산되어 레지스터가 갱신되며, LTP CRC 오류 검사가 수행되어 순차적 LTP CRC 오류를 검출하고, LTP가 폐기된다. 이러한 동작은 블록(2222)에서 LTP를 수신하는 것부터 시작하는 순환 방식으로 수행된다. 앞에서처럼, 블록(2206 및 2208)의 동작이 수행되고, 뒤이어 판단 블록(2224)에서 수신된 LTP가 CRC 오류를 갖고 있는지(Tx CRC 및 Rx CRC가 불일치 하는지)의 여부가 결정된다. 수신기가 LTP-버리기 모드에서 동작하는 동안, 로직은 순차적 LTP CRC 오류의 발생을 체크하도록 구성된다. 예를 들면, 만일 LTP-버리기 모드에 진입한 다음 일차로 수신된 LTP가 오류를 갖고 있으면, 순차 오류가 발생한 것이다. 순차 오류를 검출하는 결정은 판단 블록(2226)으로 묘사되며, 만일 판단 블록(2224)에 대한 응답이 YES이면 로직은 판단 블록(226)으로 진행한다. 또한, 또한, 블록(2225)에서 총 LTP CRC 오류 카운트가 증분된다. (이것은 또한 정상 모드이든 버리기 모드이든 간에, 각각의 LTP CRC 오류의 검출에 응답하여 총 LTP CRC 오류 카운트가 증분된다는 것이다).
패킷, 프레임 등과 같은 송신된 데이터 유닛에서 오류를 검출하도록 구성된 CRC는 데이터 무결성 검사이다. CRC의 수학 공식은 CRC가 비트 전송 오류를 검출해 내도록, 그리고 디지털 데이터의 이진 특성을 활용하도록 선택되어, 이진 양을 통해 CRC가 빨리 계산될 수 있다. 그러나, CRC는 시스템은 100% 안전장치는 아니다. CRC 검사는 비트 오류의 개수가 CRC의 해밍 거리와 같거나 이를 초과할 때 오류를 검출하지 못할 수 있다. 네트워크 패브릭에서 사용되는 CRC의 해밍 거리는 전형적으로 4이며, 이것은 해밍 거리가 검출되지 않을 확률(극히 낮은 확률)에 이르기 까지 적어도 4비트 오류를 열어둔다는 것이다. 검출되지 않은 링크 오류는 "잘못된 패킷의 수용"이라고 지칭되는 결과를 가져오며, 이것은 오류를 가진 패킷이 CRC 검사를 (잘못) 통과하고, 그래서 추가 처리를 받아야 한다는 것을 의미한다. 이렇게 검출되지 않은 오류는 패킷 침묵 데이터 손상(packet silent data corruption)을 일으킨다.
LTP는 대략 1000 비트 크기를 갖는다. 주어진 평균 비트 오류 율(bit error rate, BER)에서, 만일 오류들이 상관된다면 그리고 그 오류들이 시간적으로 복수의 LTP 전반에 걸쳐 분포되어 균일한 오류 패턴에 비해 단일 링크 전달 패킷 내 (4 또는 그 보다 큰) 버스트에서 발생한다면 누락된 검출의 확률은 더 높아진다.
네트워크 패브릭 링크는 매우 낮지만 제로가 아닌 BER을 제공하도록 설계된다. 링크 전력을 줄이려는 바람은 전력이 줄어듦으로써 증가하는 경향이 있는 BER을 더 높일 수 있는 동기를 부여한다. BER이 증가함으로써, 누락된 오류 검출의 확률이 증가한다. 동시에, 이러한 확률은 받아들이기 어려울 정도로 높아진다. 패브릭 내 많은 링크에서의 BER은 불균일하다. 링크는 통상적으로 복수의 레인으로 구성되며 BER은 주어진 링크 내 레인 전체에서 매우 다양할 수 있다. 통상적인 접근 방법 하에서, 패브릭 관리 소프트웨어가 어떤 문턱치 BER에서 가동하는 링크를 검출할 때, 이 소프트웨어는 패브릭으로부터 링크를 강제로 제거하여 확률은 받아들이기 어려울 정도로 높은 데이터 손상 확률을 회피한다. 이것은 링크 내 오류 분포를 알지 못한 채 수행되며 오류가 상관된다고 가정하여 보수적으로 더 적은 BER 문턱치를 사용하게 한다. 또한, 링크의 BER은 시간 경과에 따라 바뀌고/바뀌거나 낮아질 수 있으며 확률은 받아들이기 어려울 정도로 높아질 수 있다. 패브릭 관리는 모든 링크를 실시간으로 줄곧 계속하여 모니터링할 수 없고, 그 결과 링크가 너무 높은 BER에서 동작하는 것을 검출하는 데는 약간의 시간이 소요될 수 있다. 이러한 시간 동안, 패브릭은 데이터 손상 잠재성에 노출된다.
밀접한 간격의 비트 오류에 대한 한가지 검사는 판단 블록(2224)에서 LTP CRC 오류 검사를 사용하며 순차적 LTP CRC 오류 검사는 판단 블록(2226)에서 수행한다. CRC는 적어도 하나의 오류가 검출된 것을 식별하는데 사용될 수 있지만, CRC는 얼마나 많은 오류가 존재하는지를 식별하지 못한다. 그러나, 순차적 LTP CRC 오류는 순차적 LTP에서 적어도 두 개의 오류가 존재한다는 것을 표시한다. 일 실시예에서, 순차적 LTP CRC 오류의 검출에 대응하여, 블록(2228)에서 한 쌍의 RetrainReq LTP가 송신기로 전송되며, 따라서 출구 블록(2232) 및 송신기 상태 머신(2300)에서 RcvRetrainReq으로 묘사된 것처럼 링크를 재훈련시키기 위해 플로우차트 로직이 종료된다. 일 실시예에서, 이러한 재훈련은 링크를 초기화하거나 다시 초기화할 때 채용되는 링크 (재)훈련 동작보다 복잡도가 낮은 경량급의 재훈련이다. 재훈련 또는 재초기화 동안, 링크의 정상적인 액티브 전송 상태는 오프라인이며, 이것은 링크 재훈련 또는 링크 재초기화의 완료 시 링크가 정상적인 액티브 전송 상태로 되돌아올 때까지 정상적인 데이터 전송 동작이 일시적으로 이용 불가능하다는 것을 의미한다. 또한, 블록(2230)에서 수신기는 RetrainReq LTP를 송신했다고 표시하는 몇 가지 내부 표시를 설정하고, 블록(2231)에서 링크 순차적 오류 타이머가 리셋되는데, 링크 순차 오류 타이머 사용의 더 세부적인 설명은 도 22e에서 도시되고 아래에서 논의된다. 재훈련 시퀀스가 완료되면, 로직은 플로우차트(2200b)로 되돌아가고, 블록(2218 및 2220)에서 재시도 요청 LTP(들)이 다시 송신 측으로 전송되고 수신기에서 LTP-버리기 모드가 재진입된다.
재시도 마커 LTP를 수신함에 응답하여 LTP-버리기 모드 루프가 종료되며, 따라서, 만일 수신된 LTP가 CRC 오류를 갖고 있지 않으면, 로직은 판단 블록(2234)으로 진행하여 LTP-버리기 모드에 있는 동안 각각의 수신된 양호한 LTP가 재시도 마커인지의 여부가 결정된다. 재송신 요청을 수신하기 전에, 송신기는 계속하여 LTP를 차례대로 송신할 것이고, 이들 LTP는 (만일 있다면) 이미 전송 중인 LTP와 함께 수신될 것이다. 도 22의 플로우 차트(2200c)의 블록(2238, 2240, 및 2242)에서 도시된 바와 같이, 재송신 요청(RetryReq LTP)을 수신하면, 송신기는 재시도 마커를 송신한 다음, 반복 버퍼(1806) 내에 있는 LTP를 재송신할 것이며, 이 때 LTP는 재송신 요청을 통해 반환된 NxtRxLTP 포인터 값으로 표시된 슬롯 내 LTP에서부터 시작한다. 일 실시예에서, 단일의 재시도 마커가 송신되는데 반해, 다른 실시예에서는 한 쌍의 재시도 마커가 순차적으로 송신된다. 일 실시예에서, 재시도 마커 쌍은 이들이 송신되는 순서(예를 들면, RetryMrkr0, RetryMrkrl)에 의해 식별된다. 일 실시예에서, 각각의 재시도 마커는 널 LTP를 포함한다. RetryMrkrLTP(1816)로 묘사되는 단일의 재시도 마커의 사용의 일 예는 도 18b에서 도시된다. 한 쌍의 재시도 마커가 전송될 때, 제 2의 재시도 마커(RetryMrkr1)는 RetryMrkrLTP(1816)(RetryMakr0)의 바로 뒤따라올 것이라는 것이 이해될 것이다.
도 18a의 예에서, 송신 요청을 수신하기 전에 이와 같이 LTP를 계속하여 송신하게 되면 (전송 중인) LTP 5 및 6, (다음에 송신되는) 7, 및 LTP 0 및 1을 순서대로 수신하게 된다. 각각의 LTP 5, 6, 7, 0 및 1은 재시도 마커가 아니기 때문에, 판단 블록(2234)에 대한 응답은 각기 NO이며, 로직은 LTP를 폐기하는 블록(2236)으로 진행한 다음, LTP 버리기 모드를 유지하면서 LTP를 수신하는 블록(2222)로 되돌아 간다. 순차적으로 수신되는 LTP의 처리는 판단 블록(2234)에서 재시도 마커 LTP가 수신되고 검출될 때까지 동일한 방식으로 지속된다.
도 18b는 RetryMrkrLTP(1816)가 송신되고, 수신 포트(1802)에 의해 수신되어 처리되었고, LTP 4가 재송신되어 수신 포트(1802)에 의해 수신되고 있고, 뒤이어 LTP 5 및 6(전송 중)가 재송신되고, LTP 7이 이제 막 재송신될 것이라는 타임프레임을 묘사한다. 각각의 LTP 4, 5, 및 6은 "반복된" LTP를 포함한다. 도 18b에서 또한 도시된 바와 같이, (도 18a에서 도시된) 슬롯 0 및 1에 있는 반복 버퍼 데이터는 RetryReq LTP(1812)를 수신하고 RetryMrkrLTP(1816)를 송신하기 전에 발생한 버퍼 데이터의 원래 송신과 관련하여 LTP 0 및 1에 대한 대응하는 플릿 데이터에 중첩 기록된다.
앞에서처럼, 각각의 신뢰성 있는 LTP를 송신할 때마다, LTP의 데이터는 각각의 신뢰성 있는 LTP마다 증분되는 NxtTxLTP 포인터(1808)에 의해 식별된 바와 같이 반복 버퍼(1806) 내 슬롯에 복사된다. 그래서, NxtTxLTP 포인터(1808)는 각각의 LTP 7, 0, 및 1을 전송하는 것과 관련하여 증분되었을 것이다(NxtTxLTP 포인터가 7에서 다시 0으로 줄 바뀜 됨을 나타낸다). LTP 1이 송신되는 (또는 직전에 송신된) 동안, 송신기 포트(1800)는 RetryReq LTP(1812)를 수신하였다. 이에 대응하여, 송신기 포트(1800)는 RetryMrkrLTP(1816)(또는 RetryMrkr0 LTP와 뒤이은 RetryMrkr1 LTP를 포함하는 한 쌍의 재시도 마커)를 반환한다. RetryMrkrLTP(1816)은 널 LTP이기 때문에, 그의 데이터 콘텐츠는 반복 버퍼(1806)에 복사되지 않으며 NxtTxLTP 포인터(1808)도 전진되지 않는다. 반대로, Tx LTP 시퀀스 상태는 전송된 LTP가 신뢰성 있는 LTP인지 또는 널 LTP인지에 무관하게, LTP가 전송될 때마다 전진된다.
다시 판단 블록(2234)을 참조하면, RetryMrkrLTP(1816)를 수신하면, 재시도 마커라고 식별되고, 플로우차트 로직은 도 22d의 플로우차트(2200d)로 진행한다. 블록(2252)에서 도시된 바와 같이, 재시도 마커가 처리되고, 수신기는 카운트다운 값을 설정하여 곧이어 반복된 불량 LTP의 수신을 준비한다. 일 실시예에서, 불량 LTP 반복 옵셋은 재시도 마커에 관련하여 채용되어, 재시도 마커 이후 불량 LTP의 재송신이 k개 LTP를 시작할 것임을 표시한다. 한 쌍의 재시도 마커를 채용하는 일 실시예에서, 불량 LTP 반복 옵셋은 제 2 재시도 마커가 하나 적다. 블록(2240)에서 또한 묘사된 바와 같이, 불량 LTP 반복 옵셋의 관점에서, 수신기는 LTP 옵셋에 기초하여 불량 LTP 반복 카운트다운을 개시한다. 이것은 블록(2256)에서 불량 LTP의 반복을 검출하는데 사용된다. 또한, 수신기는 블록(2254)에서 왕복 마커 LTP(또는 한 쌍의 왕복 마커 LTP)를 반환하고 블록(2254)에서 LTP 수신 모드(수신 상태)는 정상으로 되돌아가며, 이 때 플로우차트 로직은 블록(2204)으로 되돌아 가서 다음 패킷을 수신한다. 이것은 수신기 상태 다이어그램(2350)에서 Send RndTripMrkr Pair 상태로 묘사되며 LinkTransferActive.normal 상태로 되돌아 간다. 도 18c를 참조하여 설명되는 바와 같이, 재시도 마커 LTP(들)에 응답하여 왕복 마커 LTP(들)가 반환되어 반복 버퍼 LTP가 중첩 기록될 수 있는지에 대한 결정을 가능하게 한다.
RetryMrkrLTP(1816)(또는 RetryMrkr0LTP 및 RetryMrkr1LTP)의 송신 후, RetryReq LTP(1812)에서 반환된 NxtRxLTP 포인터에 의해 식별된 불량 LTP(이 예에서는 LTP 4)의 재송신부터 시작하는 LTP의 반복(재송신)이 개시된다. 송신기가 반복 모드에 있는 동안, 송신된 데이터는 반복 버퍼(1806)에 저장된 LTP의 재송신을 포함할 것이다. 재송신되는 LTP는 이들의 반복 버퍼의 FIFO 내 순서에 기초하여 NxtRxLTP 포인터에 의해 지시된 LTP에서 시작하여 송신기 포트(1800)로부터 순차적으로 발송된다.
각각의 재송신되는 LTP마다, 재송신되는 데이터는 LTP가 원래 송신되었던 데이터와 동일하다. 불량 LTP 반복 카운트다운 (및 반복된 불량 LTP를 수신하는 것과 관련된 동작) 이외에, 수신 측의 로직은 수신된 LTP 데이터가 원래 송신된 LTP또는 재송신된 LTP에 대응하는지에 대해서 관용적이다. 따라서, 블록(2204, 2206, 및 2208) 및 판단 블록(2210)의 동작이 수행되어, 레인별 CRC를 계산하고, 수신된 LTP 데이터를 통한 Rx LTP CRC를 계산하고, Rx LTP CRC를 Tx LTP CRC와 비교하게 된다. 만일 오류가 있다면, 판단 블록(2210)에서 NO라는 결과로 표시된 바와 같이, 로직은 블록(2214)으로 되돌아가서, 그릇된 LTP를 재송신하는 새로운 반복 시퀀스를 시작하여 불량 LTP가 다시 재송신되게 할 것이다. 이것은 필수적으로 불량 LTP 4 및 그 뒤를 이은 반복 버퍼(1806)로부터의 LTP의 재송신과 관련하여 앞에서 논의된 동작을 되풀이 할 것이다.
재송신된 불량 LTP 4가 양호하다고 추정하면, 로직은 블록(2258)으로 진행한다. 이 블록에서, 레지스터(CRC-G0, CRC-G1, CRC-G2, 및 CRC-G3)에 이전에 저장된 레인별 CRC 값이 재송신된 LTP 4에 대해 각 레인을 통해 수신된 데이터에 대해 계산된 레인별 CRC과 비교되는데, 이 비교는 레인별 또는 XFR-그룹별로, 가동중인 레인의 개수에 따라서 이루어진다(전송 그룹의 개수가 동일할 때 레인별 및 XFR-그룹별 비교는 동일하고, 그래서 XFR-그룹별 비교는 항시 수행될 수도 있다는 것을 의미한다). 전술한 바로부터, 레인별 CRC는 4-레인 링크에 대해 XFR-그룹별로 비교된다.
각각의 송신된 LTP마다 Tx LTP 및 Rx LTP 시퀀스 상태의 계속되는 증분과 관련하여, LTP 4가 재송신될 때, LTP가 원래 송신되었던 LTP 시퀀스 상태와 비교하여 LTP 시퀀스 상태는 3이다. 결과적으로, 각 레인을 통해 송신된 XFR 그룹은 변경되었다. 레인-XFR 그룹의 이러한 재맵핑은 도 25에서 예시되며, 또한 도 18a 및 도 18b에서 각각의 레인을 통해 전송된 XFR들을 비교함으로써 알 수 있다. 앞에서 논의된 것처럼, LTP 4가 원래대로 송신될 때, LTP 시퀀스 상태는 1이였던데 반해, LTP 4가 재송신될 때(도 25에서 4R로 묘사됨) LTP 시퀀스 상태는 3이다. 도 18b를 다시 참조하면, 플로우차트(2200d)의 블록(2258)에서, 재송신된 LTP 4에 대한 레인별 CRC가 레인 0, 1, 2, 및 3에 대해 계산되며, 그런 다음 플로우차트(2200d)의 블록(2258)에서 XFR-그룹별 CRC 비교가 수행되며, 블록(2260)에서, 해당한다면, 불일치한 레인별 또는 XFR-그룹별 CRC를 식별함으로써 불량 레인이 식별된다. 도 18a 및 도 18b의 예에서, XFR-그룹별 CRC 비교의 결과는 CTC-G0, CRC-G1 및 CRC-G3에 대한 CRC가 일치하는데 반해, CRC-G1에 대한 CRC는 불일치하다는 것을 표시한다. 이것은 레인 2가 그릇된 것으로, 이는 레인 2가 원래대로 송신되었을 때의 CRC-G1 값이 그릇된 LTP 4에 대해 계산되었던 XFR 그룹에 대응하기 때문인 것으로, 재송신된 LTP 4에서 아무런 LTP CRC 오류도 검출되지 않았기 때문에 반복된 LTP 4에 대해 레인 2를 통해 송신된 데이터에서는 (추정적으로) LTP CRC 오류가 없다는 것을 의미한다. 블록(2261)에서, 식별된 불량 레인에 대한 오류 카운터가 증분된다. 레인이 간헐적으로 그릇되는 시나리오를 고려해 보자, 앞에서 논의된 것처럼, 판단 블록(2226) 및 연관된 로직 블록의 순차적 LTP CRC 오류 검사는 링크를 통해 송신된 데이터에서 밀집한 간격의 오류를 검출하기 위한 한 가지 메커니즘이다. 이러한 메커니즘은 (순차적 LTP에서의 오류를 요구하는) 매우 밀집한 간격의 오류를 검출하지만, 이 메커니즘은 어느 레인이 그릇된 것인지도 식별할 수 없고, 개개의 레인에서 얼마나 자주 순차 오류가 일어나는지도 식별할 수 없다.
제 2의 BER 검사 메커니즘의 실시예에 따르면, 레인별 오류 빈도가 모니터링되어 주어진 레인에 대한 오류 빈도(BER)가 레인별 BER 문턱치를 초과하는지를 결정한다. 일 실시예에서, 이것은 (플로우차트(2200d 및 2200e)에서 묘사되고 병렬 방식으로 수행되는 다른 동작 및 로직과 관련하여) 레인별 순차 오류 카운터 및 타이머를 사용하여 성취된다.
블록(2262)에서, 수신기 상태가 수신기에 의해 개시된 링크 재훈련 상태에서 비롯되는지의 여부가 결정된다. 플로우차트(2200b)에서 로직에 의해 도시되고 앞에서 논의된 것처럼, 순차적 LTP CRC의 검출은 오류를 검출하는 수신기에 의해 링크 재훈련이 시작되게 할 것이다. 반대로, 단일의 LTP CRC 오류는 마찬가지로 재시도 요청, 즉 재시도 마커 수신 시퀀스를 개시할 것이지만, 링크 재훈련을 개시하지는 않을 것이다. 만일 반복된 LTP가 양호하며 수신 상태가 링크 재훈련에서 비롯한 것이 아니면(즉, 단일의 LTP CRC 오류만이 검출되었다면), 판단 블록(2262)에 대한 응답은 NO이며, 이는 로직이 블록(2264)으로 진행하여 LTP가 원래 전송된 LTP이었던 것처럼 LTP가 처리된다. 그런 다음 로직은 플로우차트(2200a)로 되돌아가서 (수신기의 관점에서) 원래 송신되는 대로 순차적으로 반복되는 LTP를 처리한다.
이제 두 개의 순차적인 LTP CRC 오류가 수신기에 의해 검출되었다고 추정하면, 수신기에 의해 링크 재훈련이 개시되고 판단 블록(2262)에 대한 응답은 YES이며, 그 결과 로직은 블록(2266)으로 진행한다. 이 블록에서, 블록(2260)에서 결정되었던 불량 레인의 순차 오류 카운터가 증분된다. 판단 블록(2268)에서, 레인의 순차 오류 카운터가 문턱치에 도달하였는지의 여부가 결정된다. 일반적으로, 문턱치는 1, 2 등과 같은 정수일 것이다. 일 실시예에서, 한 번의 타이머 주기 내에서 하나의 레인 상에서 2개의 순차적 오류가 레인 BER 문턱치 검출을 불러일으키도록 문턱치는 2이다. 이에 응답하여, 일 실시예에서, 로직은 출구 블록(2270)으로 진행하여, 링크가 다시 초기화되고 불량으로 검출되는 레인이 제거된다. 결과적으로, 4-레인 링크가 3개의 액티브 레인으로 격하되는 것처럼 링크당 액티브 레인의 개수는 하나의 레인만큼 줄어들 것이다.
만일 레인별 순차 오류 카운터가 문턱치에 도달하지 않았다면, 판단 블록(2268)에 대한 응답은 NO이고, 로직은 다음 LTP를 수신하는 블록(2204)으로 진행하며, 이 때 수신기는 정상 수신 상태에서 동작하고 송신기는 여전히 반복 모드에서 동작한다.
앞에서 논의된 것처럼, 일 실시예에서, 타이머 체계는 레인별 순차적 오류의 빈도를 검출하기 위해 사용된다. 전술한 바로부터, 로직은 순차적 불량 LTP의 검출에 응답하여 블록(2231)으로 진행하며, 도 22e의 플로우차트(2200e)에서 도시된 바와 같이, 타이머 체계를 실시하는 일련의 병렬 동작이 개시된다. 블록(2272)에서, 해당한다면, 타이머가 (처음) 시작되거나 다시 시작(리셋)된다. 블록(2274) 및 이 블록으로 되돌아가는 것으로 묘사된 바와 같이, 타이머는 주기적으로 체크되어 타이머가 만료되었는지를 결정하거나, 또는 옵션으로 타이머 로직은 타이머가 만료되었다는 것을 표시하는 인터럽트 또는 다른 표시를 발생하도록 구성될 수 있다. 타이머의 만료 시, 블록(2276)에서 묘사된 바와 같이, 각 레인마다 불량의 순차 오류 카운터는 감분된다. 일 실시예에서, 최소의 불량 오류 카운터는 0이며, 그래서 이미 0에 도달한 레인 오류 카운터의 경우, 카운터는 감분되지 않는다.
병렬 프로세스들의 조합은 다음과 같은 방식으로 개개 레인 상의 오류가 빈도 문턱치를 초과한 것을 검출한다(예를 들면, 밀집한 간격의 오류를 보이는 레인을 식별한다). 로직이 블록(2258, 2260)을 따라가는 플로우차트 동작이 수행되고, 판단 블록(2264)의 결과가 YES일 때마다, 불량 레인의 순차 오류 카운트는 증분될 것이다. 한편, 병렬 타이머 동작을 고려하면, 타이머가 다시 시작되지 않고 만료될 때마다, 타이머의 기간이 레인별 오류 없이 경과되었음을 나타내며, 그래서, 레인별 순차 오류 카운터는 (최소 제로까지) 1씩 감분된다. 일 실시예에서, 타이머 주기 내에서 두 개의 순차 오류를 가진 레인에 대응하는 두 스트라이크 및 레인이 아웃된다.
단일의 타이머 이외에, 상이한 기간 및 상이한 연관된 카운트 문턱치를 가진 복수의 타이머가 병렬로 사용될 수 있다. 예를 들면, 이것은 레인별 동작의 장기간 전망이 관찰될 수 있게 하면서, 또한 레인별 BER 문턱치를 더 짧게 검출할 수 있게 한다. 기간 내에 요구되는 순차 오류의 개수의 문턱치는 바뀔 수도 있다.
플로우차트(2200a-e)에서 묘사된 실시예 하에서, 불량 레인의 제거와 조합하여 링크를 다시 초기화하면 밀집한 간격의 오류를 보이는 레인을 검출하게 된다. 그러나, 이것은, 순차적 LTP CRC 오류를 검출한 다음 출구 블록(2232)을 통해 종료할 때와 같은 다른 조건 하에서 링크를 다시 초기화하는 것 및/또는 링크를 재훈련하는 것과 관련하여 레인이 제거될 수 있으므로, 한정하는 것으로 의미하지 않는다. 예를 들면, 링크가 다시 초기화될 때, 오류 카운터가 어떤 문턱치를 초과하였는지를 알아보기 위해 레인별 오류 카운터가 검사된다. 초과하였다면, 그 레인은 불량이라 표시되며 링크가 액티브 동작으로 되돌아갈 때 액티브하지 않다.
묵시적 ACK를 수행하는 신뢰성 있는 LTP 송신의 다른 양태는 반복 버퍼 내 LTP가 오류 없이 수신되었다는 묵시적인 확인에 앞서 LTP가 중첩 기록되지 않는 것을 보장하는 메커니즘이다. 일 실시예에서, 이것은 재시도 요청 및 왕복 마커를 사용하여 가능해 진다. 앞에서 논의된 것처럼, 일부 실시예에서, 반복 버퍼는 고정 크기를 갖거나 복수의 고정 크기 중 하나를 이용하여 동작하도록 설정되게 구성될 수 있다. 또한, 한 쌍의 링크 피어는 상이한 크기의 반복 버퍼를 채용할 수 있다.
고정 크기의 반복 버퍼의 사용 하에서, 다양한 처리 지연을 추가로 고려하자면, 반복 버퍼는 일반적으로 링크의 왕복 순회 동안 전송될 수도 있는 LTP 개수보다 많은 복수의 LTP를 보유하는 크기를 가질 것이다. 이것은 도 18a 및 도 18b에서 예시된 사례로서, 이 사례에서 반복 버퍼는 8 슬롯을 가지며, 링크 및 반대 방향의 링크 경로를 통한 왕복을 동시에 순회할 수도 있는 LTP 개수는 대략 6 또는 7 LTP이다. 결과적으로, 만일 수신기에서 검출된 오류가 있다면, 송신기는 반복 버퍼 내 불량 LTP의 복사가 중첩 기록되기 전에 재시도 요청을 수신할 것이다.
그러나, 실제적인 이유 때문에, 고정 크기의 반복 버퍼는 모든 가능한 링크 길이를 다루는 크기를 갖지 않는다. 링크의 길이가 클수록, 재시도 요청을 수신하기 전에 반복 버퍼로부터 발송될 수도 있는 LTP 개수는 많아진다. 몇 가지 관점에서, 재시도 요청 체제를 단독으로 사용하여서는 반복 버퍼 내 불량 LTP의 복사가 그 불량 LTP에 대한 재시도 요청을 수신하기 전에 중첩 기록되지 않는 것을 보장하지 못할 만큼 링크 길이로도 보장하지 못할 것이다.
이것은 왕복 마커의 사용이 적합한 경우이다. 다시 플로우차트(2200c)를 참조하면, 판단 블록(2244)에서, 모든 LTP의 반복이 왕복 마커를 수신하지 않고 완료되는지의 여부가 결정된다. 도 18c에서 예시된 구성 하에서, 반복 버퍼(1806)에는 역시 8 FIFO 슬롯이 있지만, 링크 길이는 5 LTP가 한번에 "발송(on the wire)"될 수 있을 정도인데, 이것은 적어도 10 LTP가 왕복 송신 중에 있을 수 있고/있거나 수신기에서 처리되고 있다는 것을 의미한다. 결과적으로, 잠재적으로 불량 LTP의 사본이 중첩 기록되는 결과를 가져오는 LTP 중 임의의 것에 대한 재시도 요청을 수신하기 전에, 반복 버퍼 내 모든 LTP 사본이 재송신될 수 있다. 이것은 불량 LTP가 재송신되는 것을 방지하여, 반복 버퍼의 목적을 무산시킬 것이다.
이러한 시나리오를 수용하기 위해, 판단 블록(2244)에서 도시된 바와 같이, 송신기는 왕복 마커를 수신하기 전에 반복 LTP의 끝에 도달하였는지를 검출하는 로직을 포함한다. 본질적으로, 이것은 반복 버퍼의 깊이가 왕복 지속기간보다 적거나 큰지를 결정한다. 반복 LTP의 끝에 도달한 것은 제 1의 반복된 LTP의 시작(FIFO 슬롯)으로 다시 줄 바뀌는 반복 포인터에 의해 검출된다.
도 18c에서, 제 1의 반복된 LTP 슬롯은 슬롯 4이고, 슬롯 4, 5, 6, 7, 0, 1, 2 및 3 내 LTP는 차례대로 재송신되었고, 한 쌍의 왕복 마커(1822a 및 1822b) 중 제 1 왕복 마커를 수신하기 전에 반복 LTP 포인터를 슬롯 4로 되돌린다. 이것은 왕복 마커를 수신하기 전에 반복 LTP의 끝이 도달된 예로 예시하며, 이것은 왕복 지속기간이 반복 버퍼의 깊이보다 크다는 것을 표시한다. 그 결과 판단 블록(2244)에 대한 응답은 YES가 되며, 로직은 블록(2245a)으로 진행하며 이 블록에서 송신기에 대한 널 카운터(Nullcount) n가 정수 k로 리셋된다. 블록(2246a) 및 NO 결과에 따라 블록(2246a)으로 되돌아가는 판단 블록(2248)에 의해 묘사된 바와 같이, 송신기는 왕복 마커 또는 재시도 요청이 수신될 때까지 하나 이상의 널 LTP를 수신기에 송신한다. 또한, 각각의 송신된 널 LTP마다, Nullcount n는 1씩 증분된다. 앞에서 논의된 것처럼, 널 LTP는 신뢰성 있는 LTP가 아니며, 그래서 송신된 LTP의 사본은 반복 버퍼에 추가되지 않는다. 그 결과, 재시도 요청을 초래하는 불량 LTP의 사본은 재시도 요청을 수신하기 전에 중첩 기록되지 않는 것이 보장될 것이다.
일단 판단 블록(2248a)에서 왕복 마커의 수신이 결정되면, 로직은 송신기가 정상 전송 모드로 복귀되는 블록(2250)으로 진행하며, 이는 또한 도 23a의 송신기 상태 머신(2300)에서 LinkTransferActive.normal로의 복귀로도 묘사되며, 한편 일단 반복 버퍼의 끝에 도달하면 각 사이클 마다 Nullcount n값을 사용하여 반복 버퍼를 통해 얼마나 많은 널 LTP를 전송하는지를 결정한다. 예를 들면, Nullcount n가 4에 도달하였다고 하자. 그 결과로서, 반복 버퍼 FIFO 슬롯이 슬롯 7에 도달할 때마다, 송신기는 4개 널 LTP를 송출할 것이다. 일 실시예 하에서, 재시도 요청 및 왕복 마커는 최고의 우선순위를 갖고 결코 선점되지 않으며, 그래서 Nullcount n에 의해 정의된 다수의 널 LTP를 전송한다고 사용하는 것은 불량 LTP의 재시도 요청을 수신하기 전에 그 불량 LTP의 사본이 중첩 기록되지 않을 것이라는 것을 보장할 것이다. 옵션으로서, Nullcount n는 안전한 마진을 제공하기 위해 블록(2245)에서 값 k>0으로 리셋될 수 있으며, 그래서 각 사이클의 끝에서 반복 버퍼를 통해 여분의 k개 널 LTP가 송신될 것이다. Nullcount 체계의 근본적인 장점은 (물리 링크의 길이에는 실제로 한계가 있으며, 이러한 한계를 넘어서는 길이를 갖는 링크의 제조자 및/또는 구현예는 가능하지 않거나 아니면 현실적이지 않을 것이라는 것을 인정하는) 실질적으로 임의의 길이를 가진 링크를 지원하도록 구현될 수 있다는 것이다.
다시 판단 블록(2224)을 참조하면, 만일 왕복 마커가 제 1의 FIFO 슬롯에 도달하기 전에 수신되었다면, 판단 블록(2244)에 대한 응답은 NO이며, 로직은 블록(2245b)으로 진행하며 이 블록에서 Nullcount n 는 정수 m 으로 리셋된다. 블록(2246b) 및 NO 결과에 따라 블록(2246b)으로 되돌아가는 판단 블록(2249)으로 묘사된 바와 같이, 송신기는 버퍼 포인터가 줄 바뀌어 그의 시작 슬롯으로 복귀될 때까지 또는 Nullcount n 가 제로에 도달할 때가지 계속하여 수신기에게 LTP를 반복하는데, 여기서 Nullcount카운트다운은 m 부터 시작하여 각각의 신뢰성 있는 LTP의 재송신마다 1씩 증분된다. 판단 블록(2249)의 YES 결과에 응답하여, 로직은 이러한 Nullcount 카운트다운 루프를 종료하고 블록(2250)으로 진행한다. Nullcount 카운트다운의 사용은 버퍼 깊이가 더 크지만 왕복 지속기간의 m LTP 전송 사이클 내에 속하는 구성에 맞는 대략 m LTP 전송 사이클이라는 안전한 마진을 제공하게 된다. 예를 들면, 버퍼 깊이가 32 슬롯이고 왕복 지속기간이 30 LTP 전송 사이클과 같고, m=5라고 가정해 보자. 이 경우, 로직이 카운트다운 루프를 종료하였을 때 m 은 3일 것이다. 이것은 버퍼가 그의 시작(슬롯 0)으로 다시 반복적으로 돌아갈 때마다, 슬롯 0에 LTP를 중첩 기록하기 전에 여분의 3개 널 LTP가 송신될 것이라는 것을 의미한다. 버퍼 깊이가 32 슬롯이기 때문에, 중첩 기록되는 반복 버퍼 슬롯들 간의 LTP 사이클 수는 35이거나, 왕복 지속기간보다 5 개 많다.
불량 레인의 검출에 대응하여, 링크는 액티브 레인의 개수가 줄어든 격하된 상태에서 동작될 수 있다. 더욱이, 이렇게 링크 격하 상태는 링크가 4 액티브 레인에서부터 시작하여, 제 1 불량 레인을 검출하여 그 불량 레인을 제거하고, 3 액티브 레인을 가지고 링크 동작을 이어나가고, 제 2 불량 레인을 검출하여 제 2 불량 레인을 제거하고, 2 액티브 레인을 가지고 링크 동작을 이어나가는 것과 같은 순서로 동작될 수 있도록 계단식일 수 있다. 이러한 계단식은 계속하여 제 3 불량 레인을 검출하여, 남아 있는 단일의 양호한 레인을 통해 링크 동작을 이어나가게 할 수도 있다. 이것은 또한 하나의 송신 방향이 다른 송신 방향과 상이한 개수의 액티브 레인을 사용할 수 있는 비대칭적인 구성으로 링크가 동작될 수 있다는 것을 알 수 있다.
도 26은 일 실시예에 따라서, 3 액티브 레인을 갖는 링크를 운영하는 XFR 그룹을 묘사한다. 이러한 사례에서, 세 개의 XFR 그룹(G0, G1, 및 G2)이 있고, 대응하는 CRC는 CRC-G0, CRC-G1, 및 CRC-G2이다. LTP 시퀀스는 레인 변동 없이 XFR 패턴이 되풀이되는 단일 상태만을 갖기 때문에, 동일한 XFR 그룹은 동일한 각 레인을 통해 송신된다. 결과적으로, 레인별 CRC 비교는 레인별로 이루어질 수 있거나, 그렇지 않으면 XFR-그룹별은 LTP 시퀀스 상태를 고려하지 않는다. 3개 레인 하에서, 각 레인마다 11개 32-비트 전송이 있고, 그 결과 각 레인을 통해 표준 검출 LTP 당 352 비트가 송신된다. 일 실시예에서, 16-비트 레인별 CRC는 3 액티브 레인 하에서 동작할 때 사용된다.
도 27은 일 실시예에 따라서, 2 액티브 레인을 갖는 링크를 운영하는 XFR 그룹을 묘사한다. LTP 당 33개 32-비트 전송이 있기 때문에, LTP 송신 스트림에 대해 각 레인 0 및 1을 통해 전달되는 비트 수는 512비트와 544비트 사이에서 교번할 것이다. 결과적으로, XFR-그룹별 레인별 CRC 비교 체계는 2가지 LTP 시퀀스 상태를 이용하여 구현된다. 또한, 일 실시예서는 16-비트 레인별 CRC가 사용된다.
도 28은 일 실시예에 따라서, 단일의 액티브 레인을 갖는 링크를 운영하는 XFR 그룹을 묘사한다. LTP 데이터가 전송되는 단일의 레인만이 있기 때문에, 이 레인은 그릇될 수 있는 유일한 레인이다. 결과적으로, 레인별 CRC 비교를 수행할 필요가 없다. 그러나, 하나보다 많은 레인을 가진 링크가 격하되어 단일 레인 하에서 동작하는 레인 격하 시나리오 하에서, 레인별 CRC 계산은 여전히 단일 레인에 대해 계산될 수 있는데, 이것은 이 계산이 하드웨어에서 항시 수행되는 방식으로 실시될 수 있기 때문이다. 이러한 사례에서, 레인별 CRC 계산은 간단히 무시된다.
앞에서 논의된 것처럼, 본 출원에 개시된 실시예 하에서, 링크는 명시적인 ACK를 사용하지 않고도 신뢰성 있는 데이터 송신을 지원한다. 비록 링크를 통해 송신될 때 (케이블이 절단되는 것과 같은 이벤트는 없음) LTP가 유실되지 않을 수 있을지라도, 오류가 포함될 수 있다. 묵시적인 확인응답 체계는 송신기로부터 수신기로 왕복을 완료하고 다시 송신기로 되돌려주는데 소요되는 시간만큼 적어도 오랜 기간 내에서 수신기가 재시도 요청을 수신하지 못하는 것을 통해 구현된다는 것을 회상해 보자. 재시도 요청은 송신된 데이터와 상이한 레인 집합을 통해 전송되기 때문에, 단일의 재시도 요청은 (CRC 검사에 의해 식별되는) 오류를 가질 수 있을 가능성이 있고, 그래서 버려질 수 있다. 결과적으로, 수신 측의 링크 인터페이스는 송신 측의 링크 인터페이스에게 그릇된 LTP를 수신하였지만, (재시도 요청에 의해 표시된) 그 통지는 버려질 것이라고 알려주도록 시도할 수도 있다. 이것은 순차적인 쌍의 RetryReqLTP 및 다른 쌍의 널 LTP(예를 들면, RetryMrkr0, RetryMrkrl)가 묵시적 ACK 체계를 가능하게 하는데 도움이 되는 경우이다.
먼저, 이들은 널 LTP이기 때문에, 널 LTP는 반복 버퍼에 저장되지 않으며, 그래서 재송신에 이용할 수 없다. 그러나, 순차적인 쌍의 널 LTP를 전송함으로써 두 이벤트 중 한 이벤트는 결국 1) 적어도 하나 이상의 두 널 LTP를 오류 없이 성공적으로 수신할 것이고, 또는 2) 만일 두 LTP가 모두 오류를 가지면, 이것은 순차적 LTP 오류로 검출될 것이고 그래서 링크의 재훈련을 촉발할 것이라는 것이 보장될 것이다. (재)훈련 동안, 훈련 시퀀스는 링크 파트너인 송신기-수신기 쌍 양측에서 수행되며, 그래서 양 방향에서 링크에 적절한 동작이 검증된 다음 링크를 액티브 동작으로 복귀시킨다. 재훈련이 완료될 때, 송신기 측은 재시도 마커(들)를 송신한 후 새로운 LTP (또는 LTP의 지속적인 반복)를 전송하기 시작하기 전에 수신 측으로부터 보장된 재시도 요청을 기다린다(그러는 동안 널 LTP를 전송한다). 또 다른 이득은 한 쌍의 이러한 널 패킷의 전송은 LTP 중 적어도 하나가 양호할 것이라는 개연성을 증가시킨다는 것이다.
도 29는 메모리(2908)에 결합되는 프로세서(2906)에 결합된 패브릭 포트(2904)를 구비하는 호스트 패브릭 인터페이스(2902)를 포함하는 예시적인 구성을 갖는 노드(2900)를 도시한다. 도 1에 도시된 바와 같이, 시스템 노드는 예를 들어 이산적인 단일의 노드 플랫폼(106), 가상화된 플랫폼(110), 멀티-노드 플랫폼(116), 및 통합된 단일 노드 플랫폼(120)으로 도시된 것으로 한정되지 않고, 다양한 구성을 가질 수 있다. 일반적으로, 각각의 노드 구성은 도 29에 예시된 컴포넌트와 유사한 컴포넌트를 가진 적어도 하나의 프로세서, 메모리 및 적어도 하나의 HFI를 포함할 것이다.
패브릭 포트(2904)는 도 18a 내지 도 18c에서 예시된 구성과 유사한 구성을 갖는 송신기 포트(1800) 및 수신 포트(1802) 이외에, 아래에서 논의되는 것처럼, 도 29에 도시되거나 도시되지 않은 다른 회로 및 로직을 포함한다. 송신 포트(1800)는 복수의 송신 VL 버퍼들로 분할된 송신 버퍼(Tbuf)를 포함하는 Tx 링크 패브릭 서브계층 회로 및 로직(2910), Tx 링크 전달 서브계층 회로 및 로직(2912), 및 네 개의 송신기(2916)와 Tx 링크 제어 블록(1804)를 구비하는 Tx PHY 회로 및 로직(2914)을 포함한다. 수신 포트(1802)는 복수의 수신 VL 버퍼들로 분할된 수신 버퍼(Rbuf)를 구비하는 Rx 링크 패브릭 서브계층 회로 및 로직(2918), Rx 링크 전달 서브계층 회로 및 로직(2920), 및 네 개의 수신기(2924)와 Rx 링크 제어 블록(1805)을 구비하는 Rx PHY 회로 및 로직(2922)을 포함한다.
Tx 링크 패브릭 서브계층 회로 및 로직(2910)은 본 출원에서 설명된 링크 패브릭 서브계층 동작의 송신 측 양태를 구현하도록 구성된다. 도 29에서 예시된 송신 버퍼 및 송신 VL 버퍼 이외에, 예시되지 않은 그러한 동작을 용이하게 하는 컴포넌트 및 블록은 이더넷, 인피니밴드(InfiniBand), 및 기본 아키텍처 패킷, 중재 로직과 신용 매니저의 L4 캡슐화를 수행하도록 구성되는 L4 캡슐화 서브블록을 포함하는 패브릭 패킷 구성 블록을 포함한다. 또한, QoS 동작을 용이하게 하는 로직의 일부분은 링크 패브릭 서브계층(또한 도시되지 않음)에서 구현된다.
Tx 링크 전달 서브계층 회로 및 로직(2912)은 본 출원에서 설명된 링크 전달 서브계층 동작의 송신 측 양태를 구현하도록 구성된다. 이러한 양태는 LTP를 다발로 묶고, Tx PHY로 핸드오프를 위해 LTP 스트림을 준비하고, RetryReq에 응답하여 LTP의 반복을 지원하기 위한, 재시도 로직 LTP 번들링 블록, 반복 버퍼, 및 NxtWrLTP와 NxtTxLTP 포인터(모두 도시되지 않음)를 비롯하여, 다양한 컴포넌트 및 로직 블록을 포함한다. 또한, Tx 링크 제어 블록(1804)의 일부분 및 QoS 기능은 Tx 링크 전달 서브계층을 위해 구현된다.
Tx PHY 회로 및 로직(2914)은 네 개의 송신기(2916) 및 Tx 링크 제어 블록(1804)의 일부분을 포함하는 간략한 형태로 예시된다. 일반적으로, 송신기(2916)는 링크의 PHY 계층 구성에 따라서 전기식 또는 광학식 송신기를 포함할 수 있다. 네트워킹 분야에서 통상의 지식을 가진 자라면 Tx PHY 회로 및 로직 블록은 명료성을 위해 도시되지 않은 송신 측 PHY 계층 동작을 구현하기 위한 부가적인 회로 및 로직을 포함할 것이라는 것을 이해할 것이다. 이러한 부가적인 회로 및 로직은 오류를 줄이고 송신 특성을 강화하기 위해 고속 인터커넥트와 관련하여 구현되는 각종 특징을 가능하게 해주는데 사용되는 PHY 계층 내 각종 서브계층을 포함한다.
Rx 링크 패브릭 서브계층 회로 및 로직(2918)은 본 출원에서 설명되는 링크 패브릭 서브계층 동작의 수신 측 양태를 구현하기 위해 구성된다. 예시된 수신 버퍼 및 수신 VL 버퍼 이외에, 이러한 동작을 용이하게 해주는 예시되지 않은 컴포넌트 및 블록은 L4 패킷 캡슐제거 서브블록, 신용 반환 블록, 및 QoS 수신 측 로직의 일부분을 비롯한 패브릭 패킷 재조립 블록을 포함한다.
Rx 링크 전달 서브계층 회로 및 로직(2920)은 본 출원에서 설명되는 링크 전달 서브계층 동작의 수신 측 양태를 구현하도록 구성된다. 이러한 양태는 도 18a 내지 도 18c에서 도시되고 및 논의된 것과 같은, LTP를 묶음 해제하고, LTP CRC 및 레인별 CRC 오류를 검출하고, 수신기의 버리기 모드와 그와 연관된 동작, 및 QoS 동작을 위한 각종 컴포넌트 및 로직 블록을 포함한다.
Rx PHY 회로 및 로직(2922)은 네 개의 수신기(2924) 및 Rx 링크 제어 블록(1805)의 일부분을 포함하는 간략한 형태로 예시된다. 일반적으로, 수신기(2924)는 링크의 PHY 계층 구성에 따라서 전기식 또는 광학식 송신기를 포함하며, 송신기(2916)로부터 링크를 통해 송신된 신호를 수신하도록 구성될 것이다. 네트워킹 분야에서 통상의 지식을 가진 자라면 Rx PHY 회로 및 로직 블록은 간략성을 위해 도시되지 않은 수신 측 PHY 계층 동작을 구현하기 위한 추가적인 회로 및 로직을 포함할 것이라는 것을 이해할 것이다. 이러한 추가적인 회로 및 로직은 오류를 줄이고 송신 특성을 강화하기 위해 고속 인터커넥트와 관련하여 구현된 각종 특징을 가능하게 해주는데 사용되는 PHY 계층 내 각종 서브계층을 포함한다.
HFI(2902)는 PCIe(Peripheral Component Interconnect Express (주변 컴포넌트 인터커넥트 익스프레스) 인터페이스(I/F)(2930)에 결합된 송신 엔진(2926) 및 수신 엔진(2928)을 더 포함한다. 송신 엔진(2926)은 L4 패킷(예를 들면, 캡슐화된 TCP/IP 패킷, 인피니밴드 패킷을 비롯한 이더넷 패킷) 및/또는 패브릭 패킷이 버퍼링되는 송신 버퍼(2932)를 포함한다. 일 실시예에서, 송신 버퍼(2932) 용도의 모든 메모리 또는 일부 메모리는 프로그램된 IO(programmed IO, PIO) 공간이라고도 지칭하는 메모리-맵 입력/출력(memory-mapped input/output, MMIO) 어드레스 공간을 포함한다. MMIO는 프로세서(2906)가 예를 들어, 직접 메모리 액세스(direct memory access)를 통해 송신 버퍼(2932)에 직접 기록(DMA 기록)을 수행할 수 있게 한다.
수신 엔진(2928)은 수신 버퍼(2934) 및 DMA 엔진(2936)을 포함한다. 수신 버퍼는 패브릭 패킷 및/또는 L4 패킷을 포함할 수 있는 수신 포트(1802)의 출력을 버퍼링하기 위해 사용된다. DMA 엔진(2936)은 DMA 기록을 수행하여 수신 버퍼(2934)로부터의 패킷 데이터를 메모리(2908) 및/또는 프로세서(2906) 내 메모리 캐시 레벨 중 하나에 복사하도록 구성된다. 예를 들면, 일부 실시예에서, 패킷 헤더 데이터는 캐시에 직접 메모리 액세스되는데 반해, 패킷 패이로드 데이터는 메모리에 직접 메모리 액세스된다.
프로세서(2906)는 복수의 프로세서 코어(2940)를 포함하는 CPU(2938)를 포함하며, 각각의 프로세서 코어는 통합된 레벨 1 및 레벨 2(L1/L2) 캐시를 포함하며 코히어런트 인터커넥트(2942)에 결합된다. 또한 코히어런트 인터커넥트(2942)에는 메모리(2908)에 결합된 메모리 인터페이스(2944), 통합된 입력/출력 블록(integrated input/output block, IIO)(2946), 및 최종 레벨 캐시(Last Level Cache, LLC)(2948)가 결합된다. IIO(2946)는 프로세서 코어, 메모리 및 캐시에 의해 채용된 코히어런트 도메인과 한 쌍의 PCIe 루트 콤플렉스(Root Complex, RC)(2950 및 2952)를 비롯한 IO 인터페이스 용도로 채용되는 논-코히어런트 도메인 간의 인터페이스를 제공한다. 본 기술에서 널리 공지된 바와 같이, PCIe RC는 PCIe 인터페이스(2954, 2956, 2958, 및 2960)로 예시된 바와 같은, 복수의 PCIe 인터페이스 및 PCIe 디바이스가 결합될 수 있는 PCIe 인터커넥트 계층구조의 상단에 자리잡는다. 도시된 바와 같이, PCIe(2956)는 HFI(2902)의 PCIe 인터페이스(2930)에 결합된다.
일부 실시예에서, 도 29에서 예시된 바와 같이, 프로세서(2912)는 SoC 아키텍처를 채용한다. 다른 실시예에서, PCIe 관련된 컴포넌트는 프로세서에 결합된 IO 칩셋 등에서 통합된다. 또 다른 실시예에서, 프로세서(2912) 및 하나 이상의 HFI(2902)는 SoC(2962)의 점선 윤곽으로 묘사된 바와 같이, SoC 상에서 통합된다. 도 29에서 추가로 예시된 바와 같이, 소프트웨어 애플리케이션(2964) 및 패브릭 vNIC(2966)는 프로세서 코어(2940) 중 하나 이상 또는 프로세서(2906) 상에서 구동하는 오퍼레이팅 시스템에 의해 호스트되는 하나 이상의 가상 머신 상에서 구동하는 소프트웨어 컴포넌트를 포함한다. 이러한 소프트웨어 컴포넌트 이외에, 메모리(2908) 내에는 (적용 가능한 캐시 레벨을 비롯한) 메모리(2908)와 송신 엔진(2926) 및 수신 버퍼(2934) 사이에서 데이터 전송을 가능하게 해주는 부가적인 소프트웨어 컴포넌트 및 버퍼가 구현된다.
일반적으로, 본 출원의 도면에서 묘사된 회로, 로직 및 컴포넌트는 별개의 칩, SoC, 멀티-칩 모듈, 및 복수의 네트워크 인터페이스를 지원하는 네트워킹/링크 인터페이스 칩을 비롯한 다양한 형태의 집적 회로(예를 들면, 반도체 칩)로도 또한 구현될 수 있다. 또한, 본 출원에서 사용되는 바와 같이, 각종 동작을 실행하는 회로 및 로직은 임베디드 로직, 임베디드 프로세서, 컨트롤러, 마이크로엔진 중 하나 이상을 통해, 또는 그렇지 않고 하드웨어, 소프트웨어 및/또는 펌웨어의 임의의 조합을 사용하여 구현될 수 있다. 예를 들면, 각종 로직 블록 및/또는 회로에 의해 묘사되는 동작은 이것으로 한정되지 않지만, ASIC, FPGA, IP 블록 라이브러리를 비롯한, 프로그램된 로직 게이트 등을 사용하여 실시될 수 있거나, 또는 프로세서, 프로세서 코어, 컨트롤러, 마이크로컨트롤러, 마이크로엔진 등을 비롯한 하나 이상의 처리 요소 상에서 실행되는 소프트웨어 또는 펌웨어 명령어 중 하나 이상을 통해 실시될 수 있다.
또한, 본 설명의 실시예의 양태는 반도체 칩, SoC, 멀티칩 모듈 등의 내부에서뿐만 아니라 비일시적 머신 판독가능한 매체 내부에서도 구현될 수 있다. 예를 들면, 전술한 디자인은 반도체 디바이스를 설계하기 위해 사용되는 디자인 툴과 연관된 비일시적 머신 판독가능한 매체 내에 저장 및/또는 매립될 수 있다. 예를 들자면 VHSIC 하드웨어 서술 언어(Hardware Description Language, VHDL) 언어, 베릴로그 언어(Verilog language) 또는 SPICE 언어, 또는 기타 하드웨어 서술 언어로 포맷된 넷리스트(netlist)를 들 수 있다. 일부 넷리스트 예는, 행동 레벨 넷리스트, 레지스터 전송 레벨(register transfer level, RTL) 넷리스트, 게이트 레벨 넷리스트 및 트랜지스터 레벨 넷리스트를 포함한다. 머신 판독 가능한 매체는 또한 GDS-II 파일과 같은 레이아웃 정보를 갖는 매체를 포함한다.
뿐만 아니라, 반도체 칩 설계용의 넷리스트 파일 또는 다른 머신 판독가능한 매체는 전술한 기술의 방법을 수행하는 시뮬레이션 환경에서 사용될 수 있다. 비록 일부 실시예가 특정한 구현예를 참조하여 설명되었을지라도, 일부 실시예에 따라서 다른 구현예가 가능하다. 또한, 도면에서 예시되고/예시되거나 본 출원에서 설명된 요소들 또는 다른 특징들의 배열 및/또는 순서는 예시되고 설명된 특정한 방식으로 배열되지 않아도 된다. 일부 실시예에 따라서 많은 다른 배열이 가능하다.
도면에 도시된 각각의 시스템에서, 일부 사례에서 각각의 요소는 제시된 요소가 상이한 및/또는 유사할 수도 있다는 것을 제안하기 위해 동일한 참조 부호 또는 상이한 참조 부호를 가질 수 있다. 그러나, 요소는 상이하게 구현될 만큼 충분히 그리고 본 출원에서 도시되거나 설명된 일부 또는 모든 시스템과 함께 동작할 만큼 충분히 유연성을 가질 수 있다. 도면에 도시된 각종 요소는 동일할 수도 또는 상이할 수도 있다. 어느 하나는 제 1 요소로서 지칭되며 이것은 제 2 요소가 임의적이라는 것이라는 것이다.
전술한 상세한 설명 및 청구범위에서 'n', 'm', 'k' 등과 같은 이탤릭체 문자는 정수를 묘사하기 위해 사용되며, 특정한 문자가 사용된다고 하여 특정한 실시예로 한정되지 않는다. 더욱이, 동일한 문자는 개개의 청구항에서 개개의 정수를 표현하기 위해 사용되기도 하고, 또는 상이한 문자가 사용될 수도 있다. 또한, 상세한 설명에서 특정 문자의 사용은 상세한 설명에서 동일한 주제에 관한 청구항에서 사용되는 문자와 일치할 수도 일치하지 않을 수도 있다.
상세한 설명과 청구범위에서, 용어 "결합된" 및 "연결된"과 이들의 파생어가 사용될 수 있다. 이러한 용어는 서로의 동의어로서 의도되지 않는다는 것을 알아야 한다. 오히려, 특정 실시예에서, "연결된"은 둘 이상의 요소가 서로 직접 물리적 또는 전기적 접촉하고 있다는 것을 표시하는데 사용된다. "결합된"은 둘 이상의 요소가 직접 물리적 또는 전기적 접촉하고 있다는 것을 의미할 수 있다. 그러나, "결합된"은 또한 둘 이상의 요소가 서로 직접 접촉하지 않으나, 그래도 여전히 서로 협동 또는 상호작용하고 있다는 것을 의미할 수도 있다.
실시예는 발명의 구현예 또는 예시이다. 명세서에서 "실시예", "일 실시예", "일부 실시예에서", 또는 "다른 실시예에서"는 실시예와 관련하여 설명된 특별한 특징, 구조, 또는 특성이 적어도 일부 실시예에 포함되지만, 반드시 발명의 모든 실시예에 대해 그렇다는 것은 아니다. "실시예", "일 실시예", 또는 "일부 실시예"가 여러 번 출현한다 하여 반드시 모두 동일한 실시예를 언급하는 것은 아니다.
본 출원에서 설명되고 예시된 모든 컴포넌트, 특징, 구조, 특성 등이 특정 실시예 또는 실시예들에 포함될 필요는 없다. 만일 명세서에서 컴포넌트, 특징, 구조, 또는 특성이 언급되는 경우, 예를 들면, 특정한 컴포넌트, 특징, 구조, 또는 특성이 포함될 필요가 있는 것이 아니라는 "일 수 있다", "일수도 있다", "할 수 있다", 또는 "할 수도 있다"가 포함될 수도 있다. 만일 명세서 또는 청구범위에서 "한 개" 또는 "하나의" 요소가 언급되면, 이것은 유일하게 하나라는 것을 의미하지 않는다. 만일 명세서 또는 청구범위에서 "부가적인" 요소가 언급되면, 이것은 하나보다 많은 부가적인 요소가 있다는 것을 배제하지 않는다.
요약서에서 설명되는 것을 비롯하여, 본 발명의 예시된 실시예의 전술한 설명은 본 발명을 배타적인 것으로 의도하거나 개시된 바와 조금도 틀림 없는 형태로 한정하려 의도하지 않는다. 본 출원에서 본 발명의 특정 실시예 및 본 발명의 예가 예시적인 목적을 위해 설명되지만, 관련 기술에서 통상의 지식을 가진 자가 인식하는 것처럼, 본 발명의 범주 내에서 다양한 동등한 수정이 가능하다.
전술한 상세한 설명에 비추어 본 발명에 대해 이러한 수정이 이루어질 수 있다. 다음의 청구범위에서 사용되는 용어는 본 발명을 명세서 및 도면에 개시된 특정 실시예로 한정하는 것으로 해석되지 않아야 한다. 오히려, 본 발명의 범주는 청구범위 해석에 관해 설립된 원칙에 따라서 해석되는 다음의 청구범위에 의해 전적으로 결정될 것이다.

Claims (50)

  1. 회로 및 로직을 포함하는 링크 인터페이스를 포함하는 장치로서,
    상기 회로 및 로직은,
    복수의 패브릭 패킷을 생성하고,
    각각의 패브릭 패킷을 복수의 데이터 유닛으로 분할하고,
    상기 데이터 유닛을 묶어서 복수의 링크 패킷을 형성하고,
    상기 복수의 링크 패킷 중 적어도 하나는 적어도 두 개의 패브릭 패킷으로부터의 데이터 유닛을 포함하는
    장치.
  2. 제 1 항에 있어서,
    상기 복수의 데이터 유닛의 많은 데이터 유닛 중 하나는 고정 크기(fixed-size)를 가진 플릿(flit)을 포함하는
    장치.
  3. 제 2 항에 있어서,
    상기 복수의 링크 패킷의 많은 데이터 유닛 중 하나는 사전결정된 개수의 플릿을 포함하는 고정 크기를 갖는
    장치.
  4. 제 3 항에 있어서,
    상기 패브릭 패킷 중 적어도 하나는 가변 크기를 갖는
    장치.
  5. 제 3 항에 있어서,
    상기 복수의 패브릭 패킷 중 적어도 하나는 상기 사전결정된 개수의 플릿보다 적은 제 1 개수의 플릿으로 구성되며 상기 복수의 패브릭 패킷 중 적어도 하나는 상기 사전결정된 개수의 플릿보다 많은 제 2 개수의 플릿으로 구성되는
    장치.
  6. 제 1 항에 있어서,
    상기 링크 인터페이스는 상기 복수의 링크 패킷 중 적어도 하나의 링크 패킷에 포함된 데이터를 통해 데이터 무결성 검사 값을 계산하고 상기 무결성 검사 값을 상기 적어도 하나의 링크 패킷 내에 포함시키는 회로 및 로직을 더 포함하는
    장치.
  7. 제 1 항에 있어서,
    상기 복수의 패브릭 패킷 중 적어도 하나는 복수의 상이한 타입의 데이터 유닛으로 분할되고, 상기 복수의 상이한 타입의 데이터 유닛은 헤드 플릿을 포함한 제 1 데이터 유닛을 포함하고, 이를 복수의 보디 플릿이 뒤이으며, 테일 플릿을 포함하는 마지막 데이터 유닛으로 끝나는
    장치.
  8. 제 7 항에 있어서,
    링크 패킷 내의 상기 데이터 유닛 중 적어도 하나는 플릿 타입 비트를 포함하는
    장치.
  9. 제 7 항에 있어서,
    상기 복수의 상이한 타입의 데이터 유닛 중 임의의 데이터 유닛은 링크 패킷 내 어느 곳에서도 배치될 수 있는
    장치.
  10. 제 1 항에 있어서,
    상기 복수의 링크 패킷 중 하나의 링크 패킷은 유휴 데이터 유닛(idle data unit)을 포함하는 적어도 하나의 타입의 데이터 유닛을 포함하는
    장치.
  11. 제 10 항에 있어서,
    상기 복수의 링크 패킷 중 하나의 링크 패킷은 헤더 데이터 유닛도 아니고 테일 데이터 유닛도 아닌 제어 데이터 유닛을 포함하는 적어도 하나의 타입의 데이터 유닛을 포함하며,
    상기 링크 인터페이스는,
    수신된 링크 패킷 내 제어 데이터 유닛을 검출하고,
    상기 제어 데이터 유닛에 의해 식별된 제어 동작을 수행하는 회로 및 로직을 더 포함하는
    장치.
  12. 제 1 항에 있어서,
    상기 장치는 송신 포트를 포함하고,
    상기 송신 포트로부터 송신된 상기 복수의 링크 패킷은 제 1의 복수의 패킷을 포함하며,
    상기 링크 인터페이스는,
    제 2의 복수의 패브릭 패킷으로부터 분할된 데이터를 포함하는 데이터 유닛을 구비하는 제 2의 복수의 링크 패킷을 수신하고,
    상기 제 2의 복수의 링크 패킷으로부터 데이터 유닛을 추출하고,
    상기 데이터 유닛을 재조립하여 상기 제 2의 복수의 패브릭 패킷을 재생성하는 회로 및 로직을 포함하며,
    상기 제 2의 복수의 링크 패킷 중 적어도 하나의 링크 패킷은 적어도 두 개의 패브릭 패킷으로부터의 데이터 유닛을 포함하는
    장치.
  13. 제 1 항에 있어서,
    각각의 링크 패킷은 송신되었을 때 상기 링크 패킷에 포함된 데이터를 통해 계산된 송신 데이터 무결성 검사 값을 포함하며,
    상기 링크 인터페이스는,
    각각의 링크 패킷 내에 수신된 데이터를 통해 수신 데이터 무결성 검사 값을 계산하고,
    상기 수신 데이터 무결성 검사 값을 상기 송신 데이터 무결성 검사 값과 비교하여 상기 링크 패킷이 임의의 오류를 갖고 있는지를 검출하고,
    상기 링크 패킷이 임의의 오류를 갖고 있으면 상기 링크 패킷이 송신되었던 링크 피어에게 재송신 요청을 전송하는 회로 및 로직을 더 포함하는
    장치.
  14. 제 13 항에 있어서,
    상기 링크 인터페이스는,
    링크 피어로부터 재송신 요청을 수신하는 것에 응답하여, 상기 재송신 요청이 행하여 졌던 상기 링크 패킷을 식별하고, 상기 링크 패킷을 재송신하는 회로 및 로직을 더 포함하는
    장치.
  15. 복수의 제 1 타입의 패킷을 생성하는 단계와,
    상기 복수의 제 1 타입의 패킷을 복수의 데이터 유닛으로 분할하는 단계와,
    상기 데이터 유닛을 수신기를 향해 송신할 복수의 제 2 타입의 패킷으로 묶는 단계를 포함하며,
    상기 복수의 제 2 타입의 패킷 중 적어도 하나는 적어도 두 개의 제 1 타입의 패킷으로부터의 데이터 유닛을 포함하는
    방법.
  16. 제 15 항에 있어서,
    상기 복수의 데이터 유닛의 많은 데이터 유닛 중 하나는 고정 크기를 갖는
    방법.
  17. 제 16 항에 있어서,
    상기 복수의 제 2 타입의 패킷의 많은 제 2 타입의 패킷 중 하나는 사전결정된 개수의 데이터 유닛을 포함하는
    방법.
  18. 제 17 항에 있어서,
    상기 복수의 제 1 타입의 패킷 중 적어도 하나는 상기 사전결정된 개수의 데이터 유닛보다 적은 제 1 개수의 데이터 유닛으로 구성되며, 상기 복수의 제 1 타입의 패킷 중 적어도 하나는 상기 사전결정된 개수의 데이터 유닛보다 많은 제 2 개수의 데이터 유닛으로 구성되는
    방법.
  19. 제 15 항에 있어서,
    상기 방법은 복수의 링크를 포함하는 패브릭에서 제 1 링크를 통해 패브릭 스위치의 수신 포트에 결합된 제 1 패브릭 엔드포인트의 송신 포트에 의해 수행되며, 적어도 하나의 제 1 타입의 패킷은 상기 제 1 링크를 구비하는 복수의 링크를 포함하는 포워딩 경로를 통해 제 2 패브릭 엔드포인트로 송신되며, 상기 제 2 타입의 패킷은 상기 제 1 링크를 통해 상기 수신 포트로 송신되고 더 이상 포워딩되지 않는
    방법.
  20. 제 15 항에 있어서,
    상기 복수의 제 2 타입의 패킷 중 하나 이상의 제 2 타입의 패킷은 상기 수신기에 의해 수신된 제 2 타입의 패킷 내 데이터에 오류가 없는 것을 확인하는데 사용되는 데이터 무결성 검사 값을 포함하며, 상기 복수의 제 2 타입의 패킷 중 하나 이상의 제 2 타입의 패킷은 원래 송신된 상기 제 2 타입의 패킷에서 오류가 검출될 때 재송신되는 재송신 유닛을 포함하는
    방법.
  21. 제 15 항에 있어서,
    상기 복수의 제 1 타입의 패킷 중 하나 이상은 복수의 상이한 타입의 데이터 유닛으로 분할되고, 상기 복수의 상이한 타입의 데이터 유닛은 헤드 데이터 유닛을 포함한 제 1 데이터 유닛을 포함하고, 이를 복수의 보디 데이터 유닛이 뒤이으며, 테일 데이터 유닛을 포함하는 마지막 데이터 유닛으로 끝나는
    방법.
  22. 제 21 항에 있어서,
    상기 복수의 상이한 타입의 데이터 유닛 중 임의의 데이터 유닛은 제 2 타입의 패킷 내 어느 곳에서도 배치될 수 있는
    방법.
  23. 제 15 항에 있어서,
    상기 제 2 타입의 패킷 중 하나는 헤더 데이터 유닛도 아니고 테일 데이터 유닛도 아닌 제어 데이터 유닛을 포함하는 적어도 하나의 타입의 데이터 유닛을 포함하는
    방법.
  24. 제 15 항에 있어서,
    제 2의 복수의 패브릭 패킷으로부터 분할된 데이터를 포함하는 데이터 유닛을 구비하는 제 2의 복수의 링크 패킷을 수신하는 단계와,
    상기 제 2의 복수의 링크 패킷으로부터 데이터 유닛을 추출하는 단계와,
    상기 데이터 유닛을 재조립하여 상기 제 2의 복수의 패브릭 패킷을 재생성하는 단계를 더 포함하며,
    상기 제 2의 복수의 링크 패킷 중 적어도 하나의 링크 패킷은 적어도 두 개의 패브릭 패킷으로부터의 데이터 유닛을 포함하는
    방법.
  25. 제 1 컴포넌트 및 제 2 컴포넌트를 포함하는 시스템으로서,
    상기 제 1 컴포넌트 및 상기 제 2 컴포넌트는, 링크에 결합되어 다른 링크 인터페이스와의 링크 피어로서 동작하도록 구성되는 링크 인터페이스를 포함하고,
    상기 제 1 컴포넌트의 링크 인터페이스 및 상기 제 2 컴포넌트의 링크 인터페이스는,
    제 1의 복수의 패브릭 패킷을 생성하고,
    상기 제 1의 복수의 패브릭 패킷 중 하나 이상을 복수의 플릿으로 분할하고,
    상기 플릿을 상기 링크를 통해 링크 피어의 링크 인터페이스를 향해 송신할 제 1의 복수의 링크 패킷으로 묶고,
    상기 링크를 통해 링크 피어로부터 송신된 제 2의 복수의 링크 패킷을 수신 - 상기 제 2의 복수의 링크 패킷은 제 2의 복수의 패브릭 패킷으로부터 분할된 플릿을 포함함 - 하고,
    상기 제 2의 복수의 링크 패킷으로부터 플릿을 추출하고,
    상기 플릿을 재조립하여 상기 제 2의 복수의 패브릭 패킷을 재생성하도록 구성되며,
    상기 제 1의 복수의 링크 패킷 및 상기 제 2의 복수의 링크 패킷의 적어도 일부분은 적어도 두 개의 패브릭 패킷으로부터의 플릿을 포함하는
    시스템.
  26. 제 25 항에 있어서,
    상기 복수의 플릿의 많은 플릿 중 하나는 고정 크기를 가지며, 하나 이상의 상기 링크 패킷의 각각은 고정 개수의 플릿을 가지며, 상기 복수의 패브릭 패킷은 크기가 변하는
    시스템.
  27. 제 25 항에 있어서,
    상기 제 1 컴포넌트의 링크 인터페이스 및 상기 제 2 컴포넌트의 링크 인터페이스는,
    송신될 적어도 하나의 링크 패킷에 포함된 데이터를 통해 송신 데이터 무결성 검사 값을 계산하고 상기 무결성 검사 값을 상기 링크 패킷에 포함시키는 회로 및 로직을 갖는 송신 포트와,
    수신되는 적어도 하나의 링크 패킷에서 수신된 데이터를 통해 수신 데이터 무결성 검사 값을 계산하고 상기 수신 데이터 무결성 검사 값을 상기 송신 데이터 무결성 검사 값과 비교하여 상기 링크 패킷이 임의의 오류를 갖고 있는지를 검출하는 회로 및 로직을 갖는 수신 포트를 포함하는
    시스템.
  28. 제 25 항에 있어서,
    상기 제 1 컴포넌트와 상기 제 2 컴포넌트 중 적어도 하나는 링크 인터페이스를 포함하는 호스트 패브릭 인터페이스를 포함하며,
    상기 호스트 패브릭 인터페이스는,
    송신될 상기 복수의 패브릭 패킷 중 적어도 하나의 패브릭 패킷에 포함된 데이터를 통해 송신 순환 중복 검사(cyclic redundancy check; CRC)를 계산하고,
    상기 복수의 재생성된 패브릭 패킷 중 적어도 하나의 재생성된 패브릭 패킷에 포함된 데이터를 통해 수신 CRC를 계산하고,
    상기 송신 CRC와 상기 수신 CRC를 비교하여 상기 재생성된 패브릭 패킷이 임의의 오류를 포함하고 있는지를 결정하는 로직 및 회로를 더 포함하는
    시스템.
  29. 제 27 항에 있어서,
    상기 제 1 컴포넌트와 상기 제 2 컴포넌트 중 적어도 하나는 링크 인터페이스가 통합된 호스트 인터페이스 칩을 포함하며,
    상기 호스트 인터페이스 칩은,
    상기 링크 인터페이스의 상기 송신 포트에 결합되고, 적어도 하나의 송신 버퍼를 포함하는 송신 엔진과,
    상기 링크 인터페이스의 상기 수신 포트에 결합되고, 적어도 하나의 수신 버퍼를 포함하는 수신 엔진과,
    상기 송신 엔진 및 상기 수신 엔진의 각각에 결합된 주변 컴포넌트 인터커넥트 익스프레스(Peripheral Component Interconnect Express; PCIe) 인터페이스를 포함하는
    시스템.
  30. 제 27 항에 있어서,
    상기 제 1 컴포넌트와 상기 제 2 컴포넌트 중 적어도 하나는 시스템 온 칩(System on a Chip; SoC) - 상기 SoC는 링크 인터페이스가 통합된 호스트 패브릭 인터페이스를 포함하되, 상기 호스트 패브릭 인터페이스는, 상기 링크 인터페이스의 상기 송신 포트에 결합되고 적어도 하나의 송신 버퍼를 포함하는 송신 엔진과, 상기 링크 인터페이스의 상기 수신 포트에 결합되고 적어도 하나의 수신 버퍼를 포함하는 수신 엔진과, 상기 송신 엔진 및 상기 수신 엔진의 각각에 결합된 주변 컴포넌트 인터커넥트 익스프레스(Peripheral Component Interconnect Express; PCIe) 인터페이스를 포함함 - 과,
    상기 호스트 패브릭 인터페이스 상의 상기 PCIe 인터페이스에 결합되는 PCIe 인터페이스를 포함하는 프로세서를 포함하는
    시스템.
  31. 제 1 항에 있어서,
    상기 링크 인터페이스의 회로 및 로직은 또한 상기 링크를 통하여 수신기를 향해 상기 복수의 링크 패킷을 송신하는
    장치.
  32. 제 1 항에 있어서,
    상기 링크 인터페이스는 송신 포트 및 수신 포트를 더 포함하는
    장치.
  33. 제 1 항에 있어서,
    상기 장치는 메모리 및 적어도 하나의 프로세서 코어를 더 포함하는
    장치.
  34. 제 33 항에 있어서,
    상기 링크 인터페이스, 상기 적어도 하나의 프로세서 코어 및 상기 메모리는 동일한 칩 패키지 내에 배치되는
    장치.
  35. 제 33 항에 있어서,
    상기 링크 인터페이스, 상기 적어도 하나의 프로세서 코어 및 상기 메모리는 동일한 집적 칩 상에 집적되는
    장치.
  36. 제 15 항에 있어서,
    상기 방법은 링크를 통해 상기 수신기로 상기 복수의 제 2 타입의 패킷을 송신하는 단계를 더 포함하는
    방법.
  37. 명령어를 저장하는 유형의 머신 판독가능 저장 매체로서,
    상기 명령어는, 링크 인터페이스를 포함하는 장치 내의 프로세서와 내장 로직 중 적어도 하나에서 실행되어 상기 장치로 하여금,
    복수의 패브릭 패킷을 생성하고,
    각각의 패브릭 패킷을 복수의 데이터 유닛으로 분할하고,
    상기 데이터 유닛을 묶어서 복수의 링크 패킷을 형성할 수 있게 하도록 구성되고,
    상기 복수의 링크 패킷 중 적어도 하나는 적어도 두 개의 패브릭 패킷으로부터의 데이터 유닛을 포함하는
    머신 판독가능 저장 매체.
  38. 제 37 항에 있어서,
    상기 복수의 데이터 유닛의 많은 데이터 유닛 중 하나는 고정 크기를 가진 플릿을 포함하는
    머신 판독가능 저장 매체.
  39. 제 38 항에 있어서,
    상기 복수의 링크 패킷의 많은 데이터 유닛 중 하나는 사전결정된 개수의 플릿을 포함하는 고정 크기를 갖는
    머신 판독가능 저장 매체.
  40. 제 39 항에 있어서,
    상기 패브릭 패킷 중 적어도 하나는 가변 크기를 갖는
    머신 판독가능 저장 매체.
  41. 제 39 항에 있어서,
    상기 복수의 패브릭 패킷 중 적어도 하나는 상기 사전결정된 개수의 플릿보다 적은 제 1 개수의 플릿으로 구성되며 상기 복수의 패브릭 패킷 중 적어도 하나는 상기 사전결정된 개수의 플릿보다 많은 제 2 개수의 플릿으로 구성되는
    머신 판독가능 저장 매체.
  42. 제 37 항에 있어서,
    상기 명령어의 실행은 또한 상기 장치로 하여금 상기 복수의 링크 패킷 중 적어도 하나의 링크 패킷에 포함된 데이터를 통해 데이터 무결성 검사 값을 계산하고 상기 무결성 검사 값을 상기 적어도 하나의 링크 패킷 내에 포함시킬 수 있게 하는
    머신 판독가능 저장 매체.
  43. 제 37 항에 있어서,
    상기 복수의 패브릭 패킷 중 적어도 하나는 복수의 상이한 타입의 데이터 유닛으로 분할되고, 상기 복수의 상이한 타입의 데이터 유닛은 헤드 플릿을 포함한 제 1 데이터 유닛을 포함하고, 이를 복수의 보디 플릿이 뒤이으며, 테일 플릿을 포함하는 마지막 데이터 유닛으로 끝나는
    머신 판독가능 저장 매체.
  44. 제 43 항에 있어서,
    링크 패킷 내의 상기 데이터 유닛 중 적어도 하나는 플릿 타입 비트를 포함하는
    머신 판독가능 저장 매체.
  45. 제 43 항에 있어서,
    상기 복수의 상이한 타입의 데이터 유닛 중 임의의 데이터 유닛은 링크 패킷 내 어느 곳에서도 배치될 수 있는
    머신 판독가능 저장 매체.
  46. 제 37 항에 있어서,
    상기 복수의 링크 패킷 중 하나의 링크 패킷은 유휴 데이터 유닛을 포함하는 적어도 하나의 타입의 데이터 유닛을 포함하는
    머신 판독가능 저장 매체.
  47. 제 46 항에 있어서,
    상기 복수의 링크 패킷 중 하나의 링크 패킷은 헤더 데이터 유닛도 아니고 테일 데이터 유닛도 아닌 제어 데이터 유닛을 포함하는 적어도 하나의 타입의 데이터 유닛을 포함하며,
    상기 명령어의 실행은 또한 상기 장치로 하여금,
    수신된 링크 패킷 내 제어 데이터 유닛을 검출하고,
    상기 제어 데이터 유닛에 의해 식별된 제어 동작을 수행할 수 있게 하는
    머신 판독가능 저장 매체.
  48. 제 37 항에 있어서,
    상기 장치는 송신 포트를 포함하고,
    상기 송신 포트로부터 송신된 복수의 링크 패킷은 제 1의 복수의 패킷을 포함하며,
    상기 명령어의 실행은 또한 상기 장치로 하여금,
    제 2의 복수의 패브릭 패킷으로부터 분할된 데이터를 포함하는 데이터 유닛을 구비하는 제 2의 복수의 링크 패킷을 수신하고,
    상기 제 2의 복수의 링크 패킷으로부터 데이터 유닛을 추출하고,
    상기 데이터 유닛을 재조립하여 상기 제 2의 복수의 패브릭 패킷을 재생성할 수 있게 하고,
    상기 제 2의 복수의 링크 패킷 중 적어도 하나의 링크 패킷은 적어도 두 개의 패브릭 패킷으로부터의 데이터 유닛을 포함하는
    머신 판독가능 저장 매체.
  49. 제 37 항에 있어서,
    각각의 링크 패킷은 송신되었을 때 상기 링크 패킷에 포함된 데이터를 통해 계산된 송신 데이터 무결성 검사 값을 포함하며,
    상기 명령어의 실행은 또한 상기 장치로 하여금,
    각각의 링크 패킷 내에 수신된 데이터를 통해 수신 데이터 무결성 검사 값을 계산하고,
    상기 수신 데이터 무결성 검사 값을 상기 송신 데이터 무결성 검사 값과 비교하여 상기 링크 패킷이 임의의 오류를 갖고 있는지를 검출하고,
    상기 링크 패킷이 임의의 오류를 갖고 있으면 상기 링크 패킷이 송신되었던 링크 피어에게 재송신 요청을 전송할 수 있게 하는
    머신 판독가능 저장 매체.
  50. 제 49 항에 있어서,
    상기 명령어의 실행은 또한 상기 장치로 하여금,
    링크 피어로부터 재송신 요청을 수신하는 것에 응답하여,
    상기 재송신 요청이 행하여 졌던 상기 링크 패킷을 식별하고,
    상기 링크 패킷을 재송신할 수 있게 하는
    머신 판독가능 저장 매체.
KR1020157036653A 2013-12-06 2014-12-05 링크 패브릭 패킷에 비동기적인 플릿 번들을 이용한 링크 전달, 비트 오류 검출 및 링크 재시도 KR101785310B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/099,291 US9306863B2 (en) 2013-12-06 2013-12-06 Link transfer, bit error detection and link retry using flit bundles asynchronous to link fabric packets
US14/099,291 2013-12-06
PCT/US2014/068889 WO2015085231A1 (en) 2013-12-06 2014-12-05 Link transfer, bit error detection and link retry using flit bundles asynchronous to link fabric packets

Publications (2)

Publication Number Publication Date
KR20160013177A KR20160013177A (ko) 2016-02-03
KR101785310B1 true KR101785310B1 (ko) 2017-10-17

Family

ID=53272305

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157036653A KR101785310B1 (ko) 2013-12-06 2014-12-05 링크 패브릭 패킷에 비동기적인 플릿 번들을 이용한 링크 전달, 비트 오류 검출 및 링크 재시도

Country Status (6)

Country Link
US (1) US9306863B2 (ko)
EP (1) EP3028411B1 (ko)
JP (1) JP6367326B2 (ko)
KR (1) KR101785310B1 (ko)
CN (1) CN105359468B (ko)
WO (1) WO2015085231A1 (ko)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9397792B2 (en) 2013-12-06 2016-07-19 Intel Corporation Efficient link layer retry protocol utilizing implicit acknowledgements
US9325449B2 (en) 2013-12-06 2016-04-26 Intel Corporation Lane error detection and lane removal mechanism to reduce the probability of data corruption
US9628382B2 (en) 2014-02-05 2017-04-18 Intel Corporation Reliable transport of ethernet packet data with wire-speed and packet data rate match
US9552253B2 (en) * 2014-09-24 2017-01-24 Intel Corporation Probabilistic flit error checking
US9690576B2 (en) * 2015-02-11 2017-06-27 Dell Software, Inc. Selective data collection using a management system
CN109526255B (zh) * 2016-05-12 2022-05-03 夏普株式会社 从重叠资源池中选择无线电资源以用于车辆(v2x)通信的方法和装置
CN108234343A (zh) * 2016-12-14 2018-06-29 中国航空工业集团公司西安航空计算技术研究所 一种基于优先级的fc分级流量控制实现方法
US10284335B2 (en) 2017-02-22 2019-05-07 International Business Machines Corporation Error detection for wormhole routing
US10784986B2 (en) 2017-02-28 2020-09-22 Intel Corporation Forward error correction mechanism for peripheral component interconnect-express (PCI-e)
US10387242B2 (en) 2017-08-21 2019-08-20 Qualcomm Incorporated Dynamic link error protection in memory systems
US10396944B2 (en) 2017-09-19 2019-08-27 International Business Machines Corporation Low latency corrupt data tagging on a cross-chip link
US10771189B2 (en) 2018-12-18 2020-09-08 Intel Corporation Forward error correction mechanism for data transmission across multi-lane links
US11637657B2 (en) 2019-02-15 2023-04-25 Intel Corporation Low-latency forward error correction for high-speed serial links
US11249837B2 (en) 2019-03-01 2022-02-15 Intel Corporation Flit-based parallel-forward error correction and parity
US10997111B2 (en) 2019-03-01 2021-05-04 Intel Corporation Flit-based packetization
US11296994B2 (en) 2019-05-13 2022-04-05 Intel Corporation Ordered sets for high-speed interconnects
US10997112B2 (en) 2019-10-02 2021-05-04 International Business Machines Corporation Link interface
US11740958B2 (en) 2019-11-27 2023-08-29 Intel Corporation Multi-protocol support on common physical layer
US11734105B2 (en) 2020-07-06 2023-08-22 International Business Machines Corporation Efficient error reporting in a link interface
CN113051111B (zh) * 2021-03-05 2022-06-24 海光信息技术股份有限公司 多芯片模块故障识别处理方法及系统
WO2023170476A1 (en) * 2022-03-11 2023-09-14 Rockport Networks Inc. Method and apparatus for avoiding packet mis-ordering when using virtual channel fifos in a direct interconnect computer network

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020051427A1 (en) * 2000-09-21 2002-05-02 Avici Systems, Inc. Switched interconnection network with increased bandwidth and port count
US20110032947A1 (en) * 2009-08-08 2011-02-10 Chris Michael Brueggen Resource arbitration
US20120079156A1 (en) * 2010-09-24 2012-03-29 Safranek Robert J IMPLEMENTING QUICKPATH INTERCONNECT PROTOCOL OVER A PCIe INTERFACE

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2526681B2 (ja) * 1989-11-16 1996-08-21 日本電気株式会社 可変長混在パケット転送装置
JPH09247132A (ja) * 1996-03-08 1997-09-19 Yazaki Corp 無線パケット通信装置及び送信装置
US6285679B1 (en) * 1997-08-22 2001-09-04 Avici Systems, Inc. Methods and apparatus for event-driven routing
US6628615B1 (en) * 2000-01-18 2003-09-30 International Business Machines Corporation Two level virtual channels
US6973072B1 (en) 2001-02-22 2005-12-06 Cisco Technology, Inc. High performance protocol for an interconnect system of an intermediate network node
US7187307B1 (en) * 2003-06-12 2007-03-06 Silicon Image, Inc. Method and system for encapsulation of multiple levels of communication protocol functionality within line codes
JP5058615B2 (ja) * 2007-01-25 2012-10-24 エヌイーシーコンピュータテクノ株式会社 ノード制御装置および情報処理装置
US7697532B2 (en) * 2007-02-08 2010-04-13 Corrigent Systems Ltd. Frame concatenation with drop precedence assignment
US8599863B2 (en) * 2009-10-30 2013-12-03 Calxeda, Inc. System and method for using a multi-protocol fabric module across a distributed server interconnect fabric
US20110103391A1 (en) * 2009-10-30 2011-05-05 Smooth-Stone, Inc. C/O Barry Evans System and method for high-performance, low-power data center interconnect fabric
US8473567B2 (en) 2010-03-29 2013-06-25 Intel Corporation Generating a packet including multiple operation codes
CN102223217B (zh) * 2010-04-19 2013-05-29 鼎桥通信技术有限公司 一种提升tdd cdma系统单用户峰值速率和吞吐量的方法和系统
US9104793B2 (en) 2010-09-24 2015-08-11 Intel Corporation Method and system of adapting communication links to link conditions on a platform
KR101831550B1 (ko) * 2012-10-22 2018-02-22 인텔 코포레이션 다중슬롯 링크 계층 플릿에서의 제어 메시징
US9667564B2 (en) * 2013-08-28 2017-05-30 International Business Machines Corporation Implementing hierarchical high radix switch with timesliced crossbar

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020051427A1 (en) * 2000-09-21 2002-05-02 Avici Systems, Inc. Switched interconnection network with increased bandwidth and port count
US20110032947A1 (en) * 2009-08-08 2011-02-10 Chris Michael Brueggen Resource arbitration
US20120079156A1 (en) * 2010-09-24 2012-03-29 Safranek Robert J IMPLEMENTING QUICKPATH INTERCONNECT PROTOCOL OVER A PCIe INTERFACE

Also Published As

Publication number Publication date
EP3028411A4 (en) 2017-03-22
US20150163170A1 (en) 2015-06-11
EP3028411A1 (en) 2016-06-08
CN105359468A (zh) 2016-02-24
JP6367326B2 (ja) 2018-08-01
WO2015085231A1 (en) 2015-06-11
EP3028411B1 (en) 2020-04-29
US9306863B2 (en) 2016-04-05
CN105359468B (zh) 2019-03-26
JP2016530764A (ja) 2016-09-29
KR20160013177A (ko) 2016-02-03

Similar Documents

Publication Publication Date Title
KR101785310B1 (ko) 링크 패브릭 패킷에 비동기적인 플릿 번들을 이용한 링크 전달, 비트 오류 검출 및 링크 재시도
KR101955831B1 (ko) 데이터 손상의 확률을 감소시키기 위한 레인 에러 검출 및 레인 제거 메커니즘
KR101913917B1 (ko) 암시적 확인응답을 활용한 효율적인 링크 계층 재시도 프로토콜
KR101727874B1 (ko) 고성능 패브릭 내에서의 qos를 위한 방법, 장치 및 시스템
US9917787B2 (en) Method and system for flexible credit exchange within high performance fabrics
JP6548756B2 (ja) 方法

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