KR101727874B1 - 고성능 패브릭 내에서의 qos를 위한 방법, 장치 및 시스템 - Google Patents

고성능 패브릭 내에서의 qos를 위한 방법, 장치 및 시스템 Download PDF

Info

Publication number
KR101727874B1
KR101727874B1 KR1020167013550A KR20167013550A KR101727874B1 KR 101727874 B1 KR101727874 B1 KR 101727874B1 KR 1020167013550 A KR1020167013550 A KR 1020167013550A KR 20167013550 A KR20167013550 A KR 20167013550A KR 101727874 B1 KR101727874 B1 KR 101727874B1
Authority
KR
South Korea
Prior art keywords
fabric
service channel
packet
buffer
port
Prior art date
Application number
KR1020167013550A
Other languages
English (en)
Other versions
KR20160074659A (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 KR20160074659A publication Critical patent/KR20160074659A/ko
Application granted granted Critical
Publication of KR101727874B1 publication Critical patent/KR101727874B1/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/24Traffic characterised by specific attributes, e.g. priority or QoS
    • H04L47/2425Traffic characterised by specific attributes, e.g. priority or QoS for supporting services specification, e.g. SLA
    • 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
    • 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/24Traffic characterised by specific attributes, e.g. priority or QoS
    • H04L47/2408Traffic characterised by specific attributes, e.g. priority or QoS for supporting different services, e.g. a differentiated services [DiffServ] type of service
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/10Packet switching elements characterised by the switching fabric construction
    • H04L49/111Switch interfaces, e.g. port details
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/10Packet switching elements characterised by the switching fabric construction
    • H04L49/112Switch control, e.g. arbitration
    • 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
    • H04L49/00Packet switching elements
    • H04L49/30Peripheral units, e.g. input or output ports
    • H04L49/3045Virtual queuing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/35Switches specially adapted for specific applications
    • H04L49/356Switches specially adapted for specific applications for storage area networks
    • H04L49/358Infiniband Switches
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/70Virtual switches
    • 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/24Traffic characterised by specific attributes, e.g. priority or QoS
    • H04L47/2458Modification of priorities while in transit
    • 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/24Traffic characterised by specific attributes, e.g. priority or QoS
    • H04L47/2491Mapping quality of service [QoS] requirements between different networks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/10Packet switching elements characterised by the switching fabric construction

Abstract

고성능 패브릭 내에서 서비스 품질(QoS)을 구현하기 위한 방법, 장치, 및 시스템. 가상 패브릭, 트래픽 클래스, 서비스 레벨(SL), 서비스 채널(SC) 및 가상 레인(VL)을 포함하는 다중 레벨 QoS 스킴이 구현된다. SL은 패브릭 패킷의 레이어4(전송 레이어) 단대단 전송에 대해 구현되고, 한편 SC는 링크 레이어에서 패브릭 패킷을 구별하기 위해 사용된다. 패브릭 패킷은 플릿으로 분할되고, 패브릭 패킷 데이터는 플릿 스트림으로서 패브릭 링크를 통해 송신된다. 패브릭 스위치 입력 포트 및 디바이스 수신 포트는 수신된 패브릭 패킷에 대한 SC ID를 검출하고 패브릭 패킷 플릿을 내부에 버퍼링하기 위한 VL 버퍼를 결정하기 위해 SC 대 VL 매핑을 구현한다. SL은 다수의 SC를 구비할 수도 있고, SC 대 SC 매핑은, 패브릭 패킷이 패브릭을 통해 포워딩될 때, SC의 SL을 유지하면서, 패브릭 패킷에 대한 SC를 변경하도록 구성될 수도 있다. 트래픽 클래스는 다수의 SL을 포함할 수도 있고, 애플리케이션에 대한 요청 및 응답 트래픽이 SL을 구별하는 것을 가능하게 한다.

Description

고성능 패브릭 내에서의 QOS를 위한 방법, 장치 및 시스템{METHOD, APPARATUS AND SYSTEM FOR QOS WITHIN HIGH PERFORMANCE FABRICS}
고성능 컴퓨팅(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 어레이로 구성된 서버의 랙(rack), 예를 들면 블레이드 서버 및 모듈)에서 컴퓨팅 유닛을 상호 연결하는 것이다. 세계에서 가장 빠른 슈퍼컴퓨터 중 하나인 IBM의 세쿼이아(Sequoia)는 총 1,572,864 코어의 서버 블레이드/모듈의 96 랙의 2D 어레이를 포함하며, 최대 성능으로 동작할 때 7.9 메가와트라는 엄청나게 많은 전력을 소비한다.
HPC에 대한 성능 병목 현상 중 하나는 데이터를 인터커넥트를 통해 계산 노드들 사이에서 전달하는 것 때문에 발생하는 지연이다. 전형적으로, 인터커넥트는 인터커넥트 계층 구조(interconnect hierarchy)에서 구성되는데, 이 때 계층 구조의 최상층부의 프로세서/SoC 내에서는 최고의 속도와 최단의 인터커넥트를 가지는데 반해, 계층 구조 아래쪽으로 진행함에 따라 지연이 증가하게 된다. 예를 들면, 프로세서/SoC 레벨 다음의, 인터커넥트 계층 구조는 개개의 서버들 또는 개개의 서버들의 집합을 다른 랙에 있는 서버들/집합들과 연결하는 인터-프로세서 인터커넥트 레벨, 인터-보드 인터커넥트 레벨, 및 하나 이상의 부가 레벨을 포함할 수 있다.
하나 이상의 레벨의 인터커넥트 계층 구조가 상이한 프로토콜을 채용하는 것은 일반적이다. 예를 들면, SoC 내 인터커넥트는 통상적으로 전용인데 반해, 계층 구조에서 하위 레벨은 전용 인터커넥트 또는 표준화된 인터커넥트를 채용할 수 있다. 상이한 인터커넥트 레벨은 또한 통상적으로 상이한 물리(Physical, PHY) 계층을 구현할 것이다. 결과적으로, 인터커넥트 레벨들 사이를 이어주는 몇 가지 형태의 인터커넥트를 채용하는 것이 필요하다. 또한, 이종의 컴퓨팅 환경이 구현될 때는 주어진 인터커넥트 레벨 내에서 이어주는 것이 필요하다.
인터커넥트 계층 구조의 하위 레벨에서, (각종 IEEE 802.3 표준에서 정의된) 이더넷 및 인피니밴드(InfiniBand)와 같은 표준화된 인터커넥트가 사용된다. PHY 계층에서, 각각의 이러한 표준은 유선 케이블 및 오버 백플레인(over backplane) 뿐만 아니라 광 링크와 같은 유선 연결을 지원한다. 이더넷은 OSI 7 계층 모델에서 링크 계층(계층 2)에서 구현되며, 기본적으로 링크 계층 프로토콜로 간주된다. 인피니밴드 표준은 OSI 계층 1-4를 다루는 인피니밴드의 다양한 OSI 계층 양상을 정의한다.
현대의 고성능 패브릭은, 데드락 회피 기술(deadlock avoidance technique)을 필요로 하는 다양하고 진보된 프로토콜 및 토폴로지를 지원할 필요가 있다. 이들 요건을 충족하는 일반적인 방식은, 각각의 가상의 레인에 대한 크레딧 기반의 플로우 제어(credit based flow control)가 다른 가상의 레인과는 독립적일 수 있도록, 다수의 가상 레인(가상 채널로 또한 알려짐) 상으로 트래픽을 분리하는 것이다. 이들 기본 요건 외에, 다중 프로토콜 및 다중 애플리케이션 네트워크로서의 패브릭의 증가하는 사용은, 증가된 유연성, 구성가능성 및 트래픽 분리 및 서비스 품질(Quality of Service; QoS)에 대한 제어를 요구하고 있다.
이들 증가하는 요구를 충족하기 위해, 패브릭은 그들의 코어에서 많은 수의 레인을 지원하도록 요구되지만, 그러나 패브릭의 에지의 디바이스 또는 패브릭의 특정 서브시스템은 그 만큼 많은 가상 레인을 필요로 하지 않을 수도 있거나 또는 적은 가상 레인에 대한 지원을 가지고 설계된 하드웨어를 사용하여 구현될 수도 있으며, 이것은, 가상 레인의 구성 및 활용이, 이 영역에서의 하드웨어 성능에 관해 이종 패브릭을 허용해야 한다는 것을 의미한다.
본 발명의 상기 양태 및 많은 부수적인 이점은, 첨부의 도면과 연계하여 취해질 때 하기의 상세한 설명을 참조로 본 발명이 더 잘 이해됨에 따라 더 쉽게 식별될 것이며, 도면에서는, 그렇지 않다고 명시되지 않는 한, 동일한 도면 부호는 여러 도면 전체에 걸쳐 동일 부분을 가리키며:
도 1은, 일 실시형태에 따른, 패브릭 아키텍쳐의 다양한 컴포넌트 및 인터커넥트를 포함하는 시스템의 하이 레벨 뷰를 예시하는 개략도이다;
도 2는, 일 실시형태에 따른, 패브릭 링크를 통해 데이터를 전송하기 위한 아키텍쳐의 레이어를 묘사하는 개략도이다;
도 3은 번들로 그룹화되는 복수의 플릿(flit)을 예시하는 개략도이다;
도 4는, 일 실시형태에 따른, 패브릭 패킷(Fabric Packet)의 구조를 예시하는 개략도이다;
도 5는, 일 실시형태에 따른, 표준 검출 LTP의 데이터 구조를 예시하는 도면이다;
도 6은, 일 실시형태에 따른, 14비트의 CRC LTP의 데이터 구조를 예시하는 도면이다;
도 7은, 일 실시형태에 따른, 향상된 검출 LTP의 데이터 구조를 예시하는 도면이다;
도 8은, 일 실시형태에 따른, 표준 검출 널(Null) LTP의 데이터 구조를 예시하는 도면이다;
도 9a는, 일 실시형태에 따른, 링크 패브릭 서브 레이어와 링크 전송 서브 레이어 사이의 인터페이스에서 표준 검출 LTP에 대한 플릿이 한 번에 두 개씩 병렬로 프로세싱되는 4 레인 링크에 대한 송신 스킴(scheme)의 한 실시형태를 예시하는 도면이다;
도 9b는, 일 실시형태에 따른, 링크 패브릭 서브 레이어와 링크 전송 서브 레이어 사이의 인터페이스에서 향상된 검출 LTP에 대한 플릿이 한 번에 두 개씩 병렬로 프로세싱되는 4 레인 링크에 대한 송신 스킴의 한 실시형태를 예시하는 도면이다;
도 10은, 일 실시형태에 따른, 링크 패브릭 서브 레이어와 링크 전송 서브 레이어 사이의 인터페이스에서 두 개의 플릿이 한 번에 두 개씩 병렬로 프로세싱되는 4 레인 링크를 통한 두 개의 제어 비트를 갖는 14비트의 CRC LTP의 송신을 예시하는 개략도이다;
도 11은, 일 실시형태에 따른, 함께 짝을 이루는 두 개의 4 레인 링크를 포함하는 8 레인 데이터 경로를 통한, 두 개의 제어 비트를 갖는 두 개의 14비트의 CRC LTP의 병렬 송신을 예시하는 개략도이다;
도 12는, 일 실시형태에 따른, 4 레인을 활용하는 두 개의 링크 포트 사이에서의 양방향 데이터 송신의 예를 예시하는 개략도이다;
도 13은, 별개의 가상 레인을 통해 전송되는 두 개의 FP로부터의 패브릭 패킷 플릿을 인터리빙하는 한 실시형태의 예를 예시하는 도면이다;
도 14는, 일 실시형태에 따른, 푸시 및 팝 인터리빙(Push and Pop interleaving)의 사용을 예시하는 도면이다;
도 15는, 일 실시형태에 따른, 푸시 및 팝 인터리빙 및 VL 마커 인터리빙의 조합의 사용을 예시하는 도면이다;
도 16은, 일 실시형태에 따른, 별개의 우선순위 레벨(priority level)을 갖는 VL에 대응하는 세 개의 별개의 VL FIFO에서 버퍼링되는 세 개의 패브릭 패킷으로부터의 플릿의 선점 인터리빙(preemptive interleaving)의 예를 예시하는 조합적이고 개략적인 시간 흐름도이다;
도 17은, 일 실시형태에 따른, 두 개의 VL이 우선순위 레벨을 공유하고 나머지 VL이 상위 우선순위 레벨을 갖는 세 개의 별개의 VL FIFO에서 버퍼링되는 세 개의 패브릭 패킷으로부터의 플릿의 버블 인터리빙(bubble interleaving) 및 선점 인터리빙의 예를 예시하는 조합적이고 개략적인 시간 흐름도이다;
도 18a 및 도 18b는, 일 실시형태에 따른, LTP 레인 및 잘못된 레인을 검출하기 위한 레인당(per-lane) CRC 및 LTP CRC의 LTP 송신 스킴 및 사용의 송신을 예시하는 개략도인데, 도 18a는 LTP 송신 스킴에서의 LTP의 원래의(original) 송신을 묘사하고 도 18b는 리플레이 버퍼를 사용하는 LTP 송신 스트림에서의 LTP의 재송신을 묘사한다;
도 18c는, 일 실시형태에 따른, 리플레이 버퍼 LTP가 덮어쓰기되는 것을 방지하기 위해 재시도 마커 및 왕복 마커(roundtrip marker)의 사용을 예시하는 개략도이다;
도 19는, 일 실시형태에 따른, 33개의 전송 그룹(XFR)을 사용하는 표준 검출 LTP의 송신을 예시하는 도면이다;
도 20은, 일 실시형태에 따른, 33개의 32비트 XFR 및 네 개의 LTP 시퀀스 상태를 사용하는 4개의 레인 링크를 통한 LTP의 송신을 예시하는 도면이다;
도 21은, 일 실시형태에 따른, 33개의 32비트 XFR을 사용하여 8바이트의 데이터 플러스 65번째 비트를 포함하는 플릿 데이터가 4개의 레인 링크를 통해 어떻게 전송되는지를 예시하는 도면이다;
도 22a 내지 도 22e는, 일 실시형태에 따른, 리플레이 버퍼로 암시적인 ACK를 사용하여 링크 레벨에서 신뢰가능한 LTP 송신을 용이하게 하기 위한 동작 및 로직을 예시하는, 그리고 잘못된 레인을 검출하기 위한 동작 및 로직을 또한 예시하는 다중 페이지 플로우차트를 일괄적으로 포함한다;
도 23a는, 일 실시형태에 따른, 송신기에 대한 상태도이다;
도 23b는, 일 실시형태에 따른, 수신기에 대한 상태도이다;
도 24는, 일 실시형태에 따른, XFR 그룹 기반으로 계산되고 저장되는 레인당 CRC의 도면이다;
도 25는, 제1 LTP 시퀀스 상태 하에서 불량 LTP의 원래의 송신 및 제3 LTP 시퀀스 상태 하에서 리플레이 버퍼로부터의 불량 LTP의 재송신 동안 레인당 CRC가 계산된 도 18a 및 도 18b의 예에 대한 XFR 그룹 단위 기반으로 저장되는 예시적인 레인당 CRC 계산을 나타내는 도면이다;
도 26은, 일 실시형태에 따른, 레인당 11개의 XFR이 병렬로 송신되는 세 개의 레인을 통한 표준 검출 LTP의 전송을 예시하는 도면이다;
도 27은, 일 실시형태에 따른, 레인 중 하나를 통해 17개의 XFR이 전송되고 나머지 레인을 통해 16개의 XFR이 전송되는 두 개의 레인을 통한 표준 검출 LTP의 전송을 예시하는, 그리고 두 개의 LTP 시퀀스 상태를 활용하는 도면이다;
도 28은, 일 실시형태에 따른, 33개의 32비트 XFR을 사용하는 단일의 레인을 통한 표준 검출 LTP의 송신을 예시하는 도면이다;
도 29는, 일 실시형태에 따른, 스위치에 대한 그리고 HFI에 대한 아키텍쳐 레이어 및 서브 레이어와 포트 사이의 관계를 예시하는 도면이다;
도 30은 송신기와 수신기 피어 사이의 크레딧 편제(organization) 및 크레딧 반환 ACK의 교환을 예시하는 개략도이다;
도 31a, 도 31b, 및 도 31c는, 일 실시형태에 따른, 전용의, 공유된 이단(two-tier), 및 공유된 삼단 버퍼 편제의 예를 예시한다;
도 32는, 일 실시형태에 따른, 증분적 크레딧 ACK에 대한 LF 커맨드 플릿 포맷의 예를 예시하는 도면이다;
도 33은, vAU 및 vCU에 대한 상이한 값을 각각 갖는 두 개의 별개의 디바이스 타입의 예를 예시하는 개략도이다;
도 34는, 일 실시형태에 따른, 선점(preemption)을 지원하는 VL 중재 메커니즘(arbitration mechanism)을 예시하는 개략도이다;
도 35는 5×4 선점 매트릭스의 예를 예시한다;
도 36은, 패브릭 링크를 통해 상호접속되는 상이한 컴포넌트에서 상이한 수의 VL이 지원되는 이종 패브릭 구성의 예를 예시하는 블록도이다;
도 37은, 일 실시형태에 따른, HFI의 L4 레이어에 의해 패브릭 안으로 패킷을 주입하는 것과 관련되는 QoS 매핑의 예를 예시하는 개략도이다;
도 38은, 일 실시형태에 따른, 스위치의 입력 포트에서 수신되는 그리고 스위치의 출력 포트 외부로 송신될 패킷의 내부 전송과 연계하여 수행되는 QoS 매핑을 예시하는 개략도이다;
도 39는, 일 실시형태에 따른, HFI에서 패브릭으로부터 나오는 패킷을 수신하는 것과 관련되는 QoS 매핑의 예를 예시하는 개략도이다;
도 40은, 일 실시형태에 따른, VL 확장 매핑의 예를 예시하는 개략도이다;
도 41은, 일 실시형태에 따른, VL 축소 매핑의 예를 예시하는 개략도이다;
도 42는, 일 실시형태에 따른, 9B 패브릭 패킷을 지원하는 SL 대 VL(SL-to-VL) 레거시 모드를 예시하는 개략적인 블록도이다;
도 43은, 일 실시형태에 따른, 9B, 10B, 및 16B 패브릭 패킷을 지원하는 SL 대 VL 레거시 모드를 예시하는 개략적인 블록도이다;
도 44는, 크레딧 루프 회피를 갖는 토폴로지에서의 TC, SL, 및 SC 사용의 예를 예시하는 도면이다;
도 45는, 일 실시형태에 따른, 일반적인 패브릭 패킷 포맷을 예시하는 도면이다;
도 46은, 일 실시형태에 따른, 패브릭 패킷 8B 헤더 포맷을 예시하는 도면이다;
도 47은, 일 실시형태에 따른, 패브릭 패킷 10B 헤더 포맷을 예시하는 도면이다;
도 48은, 일 실시형태에 따른, 패브릭 패킷 16B 헤더 포맷을 예시하는 도면이다;
도 49는, 일 실시형태에 따른, 패브릭 패킷 9B 헤더 포맷을 예시하는 도면이다;
도 50은, 송신 포트 및 수신 포트를 포함하는 포트의 한 실시형태를 예시하는 개략도이다;
도 51은, 일 실시형태에 따른, 패브릭 스위치의 개략도이다;
도 52는, 일 실시형태에 따른, 패브릭 스위치에 의해 수행되는 동작을 예시하는 플로우차트이다;
도 53은, 일 실시형태에 따른, HFI를 포함하는 시스템의 개략도이다.
고성능 패브릭 내에서 서비스 품질(QoS)을 구현하기 위한 방법 및 장치의 실시형태가 본원에서 설명된다. 하기의 설명에서, 본 발명의 실시형태의 완전한 이해를 제공하기 위해, 다수의 특정 상세가 개시된다. 그러나, 관련 기술분야의 당업자는, 특정 상세 중 하나 이상이 없어도, 또는 다른 방법, 컴포넌트, 재료 등과 함께 본 발명이 실시될 수 있다는 것을 인식할 것이다. 다른 경우에서, 널리 공지된 구조, 재료, 또는 동작은, 본 발명의 양태를 모호하게 하는 것을 방지하기 위해, 도시되지 않거나 또는 상세히 설명되지 않는다.
본 명세서 전반에 걸친 "일 실시형태" 또는 "한 실시형태"에 대한 언급은, 실시형태와 연계하여 설명되는 특정 피쳐, 구조, 또는 특성이 본 발명의 적어도 하나의 실시형태에 포함된다는 것을 의미한다. 따라서, 본 명세서 전체에 걸친 여러 곳에서의 어구 "일 실시형태에서" 또는 "한 실시형태에서"의 출현은 반드시 모두 동일한 실시형태를 지칭하지는 않는다. 또한, 특정 피쳐, 구조, 또는 특성은 하나 이상의 실시형태에서 임의의 적절한 방식으로 결합될 수도 있다.
명확화를 위해, 본원 도면의 개개의 컴포넌트는, 특정한 참조부호 대신, 도면에서의 그들의 라벨에 의해 또한 참조될 수도 있다. 추가적으로, (특정 컴포넌트와는 대조적으로) 특정한 타입의 컴포넌트를 참조하는 참조부호는 "통상적인(typical)"을 의미하는 "(typ)"가 후속하는 참조부호로 도시될 수도 있다. 이들 컴포넌트의 구성은, 도면에서 도시되지만 간략화 및 명확화를 위해 라벨링되지 않는 유사 컴포넌트를 대표할 것이다는 것이 이해될 것이다. 역으로, "(typ)"는, 컴포넌트, 엘리먼트 등이 그것의 개시된 기능, 구현, 목적 등을 위해 통상적으로 사용된다는 것을 의미하는 것으로 간주되지 않아야 한다.
본원에서 설명되는 실시형태의 양태에 따르면, 메시지 전달, 스위칭, 서버 상호접속 네트워크를 정의하는 아키텍쳐가 제공된다. 아키텍쳐는 OSI 네트워크 모델 레이어1 및 레이어2에 걸치고, 레이어3에 대해 IETF 인터넷 프로토콜을 활용하고, 아키텍쳐의 레이어4에 대해 새로운 그리고 활용된 명세(specification)의 조합을 포함한다.
아키텍쳐는, 슈퍼컴퓨터와 같은 공식적인 정의에 의해, 또는, 클라우드 컴퓨팅의 경우에 흔한 바와 같이, 자신이 실행하는 메시지 전달 애플리케이션으로 인해 몇몇 종류의 조화된 방식으로 기능하는 서버의 그룹 또는 클러스터와 같은, 결합에 의해 단순히, 논리적 메시지 전달 구성을 포함하는 다른 서브시스템 및 CPU를 상호접속하도록 구현될 수도 있다. 상호접속된 컴포넌트는 노드로서 칭해진다. 호스트로 칭해지는 노드 중 한 타입은, 유저 모드 소프트웨어가 실행되는 타입이다. 일 실시형태에서, 호스트는, 코히어런트 도메인(coherent domain)에서의 코어 또는 CPU의 수와 무관하게, 단일의 캐시 코히어런트 메모리 도메인을 포함하고, 다양한 로컬 I/O 및 스토리지 서브시스템을 포함할 수도 있다. 호스트가 실행하는 소프트웨어의 타입은 보다 특수화된 기능, 예컨대 유저 애플리케이션 노드, 또는 스토리지 또는 파일 서버를 정의할 수도 있고, 더 상세한 시스템 아키텍쳐를 설명하도록 기능한다.
최상위(top) 레벨에서, 아키텍쳐는 다음의 컴포넌트를 정의한다:
● 호스트 패브릭 인터페이스(Host Fabric Interface; HFI);
● 링크;
● 스위치;
● 게이트웨이; 및
● 종합적인 관리 모델.
호스트 패브릭 인터페이스는, 최소한으로, 아키텍쳐의 물리적 레이어 및 링크 레이어를 구현하기 위한 로직으로 구성되고, 그 결과 노드가 패브릭에 부착될 수 있고 다른 서버 또는 디바이스로 패킷을 전송 및 수신할 수 있다. HFI는, 시스템을 동작시키기 위한 그리고 VMM(Virtual Machine Manager; 가상 머신 매니저) 지원을 위한 적절한 하드웨어 인터페이스와 드라이버를 포함한다. HFI는 또한, 상위 레이어 프로토콜 및/또는 전송 프로토콜의 오프로드를 실행 또는 가속시키기 위한 특수화된 로직을 포함할 수도 있다. HFI는 또한, 네트워크 관리 컴포넌트로부터의 메시지에 응답하기 위한 로직을 포함한다. 각각의 호스트는 HFI를 통해 아키텍쳐 패브릭에 연결된다.
링크는, HFI를 스위치에, 스위치를 다른 스위치에, 또는 스위치를 게이트웨이에 연결하는, 전이중(full-duplex)의 포인트 투 포인트 인터커넥트이다. 링크는, 회로 기판 트레이스, 구리 케이블, 또는 광학 케이블에서, 상이한 물리적 구성을 가질 수도 있다. 구현예의 일 실시형태에서, PHY(물리적 레이어), 케이블, 및 커넥터 전략은 이더넷, 특히 100GbE(초당 100 기가비트 이더넷, 예컨대 IEEE 802.3bj 초안 표준(현재 초안 2.2)에서 정의되는 이더넷 링크)에 대한 것을 따르는 것이다. 아키텍쳐는 유연하며, 100GbE 대역폭을 초과할 수도 있는 미래의 이더넷 또는 다른 링크 기술의 사용을 지원한다. 하이 엔드 슈퍼컴퓨터 제품은 특수 목적(훨씬 더 높은 대역폭)의 PHY를 사용할 수도 있고, 이들 구성을 위해, 아키텍쳐 제품과의 상호운용성은 PHY를 달리하고 있는 포트를 갖는 스위치에 기초할 것이다.
스위치는 OSI 레이어2 컴포넌트이며, 아키텍쳐의 관리 인프라(architecture's management infrastructure)에 의해 관리된다. 아키텍쳐는 인터넷 프로토콜을 자신의 OSI 레이어3, 또는 인터 네트워킹 레이어로서 정의하지만, 아키텍쳐는 IP 도메인에서 어떠한 것도 명시하지 않으며, IP 관련 디바이스를 관리하지도 않는다. 아키텍쳐 패브릭과 외부 네트워크, 특히 이더넷 사이의 연결성을 지원하는 디바이스는 게이트웨이로 칭해진다. 경량의 게이트웨이는 감소된 기능성을 제공하고 엄밀히 이더넷의 레이어2에서 거동할 수도 있다. 완전한 기능을 갖춘(full featured) 게이트웨이는 레이어3 및 그 이상에서 동작할 수도 있고, 따라서 라우터로서 거동할 수도 있다. 아키텍쳐에 의해 제공되는 게이트웨이 명세는, 아키텍쳐의 나머지와 일치하는 이더넷 데이터 센터 네트워크에 대한 유연한 연결성을 허용하기 위해 패브릭 상에서 게이트웨이가 어떻게 거동할 수 있는지 및 이더넷 캡슐화를 위한 메커니즘을 포함한다. 인터 네트워킹 프로토콜로서의 IP의 사용은, 아키텍쳐의 패브릭을 넘어 메시지를 전송 및 수신하기 위해 사용될 IETF 승인 전송, 즉, TCP, UDP, 및 SCTP를 가능하게 한다.
도 1은, 일 실시형태에 따른, 아키텍쳐의 다양한 컴포넌트 및 인터커넥트를 예시하는 시스템(100)의 하이레벨 뷰를 도시한다. 아키텍쳐의 중심적 피쳐는 패브릭(102)인데, 이것은 아키텍쳐 링크 및 스위치를 통해 상호접속되는 HFI와 게이트웨이의 집합체를 포함한다. 도 1에서 묘사되는 바와 같이, 패브릭(102) 컴포넌트는, 각각의 별개의 단일의 노드 플랫폼(106)에 의해 각각 호스팅되는 다수의 HFI(104)(하나가 도시됨), 가상 플랫폼(110)에 의해 호스팅되는 HFI(108), 다중 노드 플랫폼(116)의 각각의 노드(1141 및 114 n )에 의해 호스팅되는 HFI(1121 및 112 n ), 및 통합된 단일의 노드 플랫폼(120)의 HFI(1181 및 118 n ), 하이 래딕스(high radix) 스위치(122), 스위치(124 및 126), 패브릭 매니저(들)(128), 게이트웨이(130), 링크(132, 134, 1361, 136 n , 138, 1401, 140n, 142, 144, 148), 및 클라우드(150)로서 일괄적으로 도시되는 추가적인 링크와 스위치를 포함한다.
상기에서 논의되는 바와 같이, 스위치는 레이어2 디바이스이고 패브릭 내에서 패킷 포워딩 메커니즘으로서 작용한다. 스위치는 중앙에서 프로비저닝되고 패브릭 관리 소프트웨어에 의해 관리되며, 각각의 스위치는 관리 트랜잭션에 응답하기 위한 관리 에이전트를 포함한다. 중앙 프로비저닝은, 라우팅을 적응시키기 위한 대안적인 경로와 같이, 특정 패브릭 토폴로지 및 포워딩 성능을 구현하도록 포워딩 테이블이 패브릭 관리 소프트웨어에 의해 프로그래밍된다는 것을 의미한다. 스위치는 적응적 라우팅 및 부하 밸런싱과 같은 QoS 피쳐를 실행하는 것을 담당하고, 또한 혼잡 관리 기능을 구현한다. 도 2는 패브릭 링크를 통해 데이터를 전송하기 위한 아키텍쳐의 레이어를 묘사한다. 레이어는 물리(PHY) 레이어, 링크 전송 서브 레이어, 링크 패브릭 서브 레이어, 및 전송 레이어를 포함한다. 도 2의 좌측에는, 물리적 레이어가 레이어1(PHY 레이어)에 매핑하고, 링크 전송 서브 레이어 및 링크 패브릭 서브 레이어가 일괄적으로 레이어2(링크 레이어)에 매핑하고, 전송 레이어가 레이어4(전송 레이어)에 매핑하는 OSI 참조 모델에 대한 레이어의 매핑이 있다.
아키텍쳐에서, 신호는 물리적 레이어에서 포트안으로 함께 그룹화되는데, 포트는 모놀리식 엔티티로서 거동하고, 제어될 수 있고, 보고된다. 포트는 하나 이상의 물리적 레인을 포함하는데, 각각의 레인은, 통신의 각 방향에 대해 하나씩의, 물리적 송신 매체에서 구현되는 두 개의 차동 쌍 또는 섬유로 구성된다. 포트를 포함하는 레인의 수는 구현예에 의존적이지만; 그러나, 링크 전송 서브 레이어의 아키텍쳐는 유한한 세트의 포트 폭을 지원한다. 특정 포트 폭은, 케이블 및 칩 설계에 대한 공통 목표를 허용하기 위해, 근본적인 포트 폭으로서 지원된다. 포트 폭은 1x, 4x, 8x, 12x, 및 16x를 포함하는데, 여기서 "x"는 물리적 레인의 수를 식별한다. 몇몇 상황, 예컨대 결함이 있는 레인의 검출 하에서, 링크는 감소된 레인 폭에서 이어질 수도 있다.
링크 전송 서브 레이어는 물리적 레이어와 링크 패브릭 서브 레이어 사이의 인터페이스로서 기능한다. (링크 패브릭 서브 레이어에서의) 링크 패브릭 패킷은 64비트의 플로우 제어 디지트(FLIT, 플릿(Flit), 또는 플릿(flit), 플로우 제어 디지트의 근사 축소)로 분할된다. 도 3은 번들(302)로 그룹화되는 복수의 플릿(300)의 예를 예시한다. 각각의 플릿(300)은 8바이트의 데이터를 포함하는 64의 데이터 비트를 포함한다.
링크 전송 서브 레이어는 다수의 레인을, 플릿 및 그들의 관련 크레딧 반환 정보를 링크를 통해 신뢰가능한 방식으로 전송할 수 있는 팀으로 성형한다. 이것은, 링크 패브릭 서브 레이어와 관련되는, 링크 전송 패킷(Link Transfer Packet; LTP)으로 칭해지는 1056 비트의 번들을 사용하여 달성된다. 도 3은 또한, 데이터의 16개의 플릿을 포함하는 LTP의 데이터부를 묘사한다. 또한, LTP는 플릿 타입 정보, CRC 데이터, 및 옵션사항의 데이터(도 3에서는 도시되지 않음)를 포함한다. LTP의 예는 다양한 도면(예를 들면, 도 5 내지 도 11)에서 예시되며 하기에서 더 상세히 설명된다.
패브릭 패킷은 64비트의 플릿과 각각의 플릿에 대한 플릿 타입 비트로 구성된다. 패브릭 패킷의 최초 데이터 플릿은 헤드 플릿(Head flit)으로 칭해진다. 패브릭 패킷의 최종 데이터 플릿은 테일 플릿(Tail flit)으로 칭해진다. 패브릭 패킷의 임의의 다른 데이터 플릿은 바디 플릿으로 칭해진다. 패브릭 패킷(400)의 예는 도 4에서 예시된다.
플릿 타입 비트는, 바디 플릿을 다른 플릿 타입과 구별하기 위해 각각의 플릿과 함께 제공된다. 하나의 실시형태에서, 바디 플릿은 플릿 타입 비트를 1로 설정하여 인코딩되고, 64비트의 데이터를 포함한다. 모든 다른 플릿은 타입 비트를 0으로 설정하여 마킹된다. 헤드 플릿은 플릿[63]을 1로 설정하여 인코딩된다. 모든 다른 (비(non) 바디) 플릿은 플릿[63]을 0으로 설정하여 인코딩된다. 테일 플릿은 플릿[62]를 1로 설정하여 인코딩된다. 모든 다른 (비 바디/헤드) 플릿은 플릿[62]를 0으로 설정하여 인코딩된다. 플릿 인코딩은 하기의 테이블 1에서 요약된다.
Figure 112016049112345-pct00001
 
제어 플릿은 테이블 2에서 요약된다. 링크 전송 레이어에 의해 전적으로 사용되는 7개의 제어 플릿(LT 제어 플릿)은 널 LTP에서 전송된다. 남아 있는 제어 플릿은 두 개의 그룹으로 분할된다. 패브릭 패킷(Fabric Packet; FP)은 HeadBadPkt, BodyBadPkt 및 TailBadPkt 제어 플릿뿐만 아니라 통상의(normal) 패킷 헤드, 바디, 및 테일 플릿을 포함한다. 링크 패브릭(Link Fabric; LF) 커맨드 플릿은 아이들, VLMrkr 및 CrdtRet 플릿을 포함한다. FP 플릿 및 LF 커맨드 플릿은 링크를 통한 송신을 위해 신뢰가능한 LTP 내에서 함께 혼합될 수 있다.
Figure 112016049112345-pct00002
아이들 커맨드 플릿은, 데이터 스트림에 삽입할 패브릭 패킷 플릿이 존재하지 않는 경우 링크 패브릭 레이어에 의해 사용된다. 데이터 경로의 전체 폭(full width)이 아이들을 포함하면, 링크 전송 레이어는, 입력 버퍼에 삽입되는 플릿 스트림으로부터 그들을 제거할 것이다. 데이터 경로가 아이들 및 비아이들 플릿 둘 다를 포함하면, 아이들은 제거되지 않을 것이다. 이것은, 링크 전송 레이어가 링크의 멀리 떨어진 측 상의 링크 패브릭 레이어에 동일한 데이터 경로 조성을 제공하기 위해, 달성된다. 링크 전송 레이어가 링크 패브릭 레이어로부터의 계류 중인(pendign) 플릿을 갖지 않으면, 그것은 원래의 플릿이 링크를 통해 전송될 때 아이들을 삽입할 것이다. 원래의 플릿은, 재송신된 또는 리플레이된 플릿을 포함하는 리플레이 버퍼로부터 전송되는 것과는 반대로 처음으로 링크를 통해 전송되는 플릿이다.
링크 전송 패킷은 링크를 통한 송신을 위해 열여섯 개의 플릿을 유지한다. 신뢰가능한 LTP는, 재송신 요청이 링크 피어에 의해 성공적으로 수신되었다는 것을 재송신 요청의 결여가 나타내기에 충분히 긴 시간의 기간 동안 리플레이 버퍼에 유지된다. 리플레이 버퍼 위치 포인터는 각각의 LTP에 대해 송신기에서 유지되고(NxtTxLTP) 수신기에서 유지되지만(NxtRxLTP), LTP의 일부로서 교환되지는 않는다. 송신 에러가 수신기에 의해 검출되는 경우, 수신기는, NxtRxLTP 리플레이 버퍼 위치 포인터를 포함하는 RetryReqLTP를 송신기로 전송한다. RetryReqLTP를 수신하는 것에 응답하여, 리플레이 버퍼의 LTP가 원래의 순서로 재송신되는데, RetryReqLTP(피어 NxtRxLTP)로 시작하고 최종 리플레이 버퍼 위치가 기록되는(NxtWrLTP - 1) 것으로 종료한다. 널 LTP는 리플레이 버퍼에서 유지되지 않고 재송신되지 않는다.
링크 패브릭 커맨드 플릿은 LTP에서 FP 플릿과 혼합될 수도 있지만; 그러나, LF 커맨드 플릿은 패브릭 패킷의 일부가 아니다. 그들은 링크의 일단의 링크 패브릭 서브 레이어로부터 링크의 타단의 링크 패브릭 서브 레이어로 제어 정보를 반송한다(carry).
일 실시형태에서, 세 개의 포맷이 존재하며, 표준 검출 LTP, 14비트의 CRC LTP, 및 향상된 검출 LTP를 포함한다. 표준 검출 LTP의 한 실시형태가 도 5에서 도시된다. 열여섯 개의 플릿 외에, 각각의 표준 검출 LTP는, LTP 컨텐츠를 커버하는 16비트의 CRC를 구비한다. 예시적인 목적을 위해, 도 5에서의 플릿은 65비트로 도시되는데, 여기서 비트 64는 플릿 타입 비트이다.
14비트의 CRC LTP의 한 실시형태가 도 6에서 도시된다. 열여섯 개의 플릿 외에, 각각의 14비트의 CRC LTP는 2비트의 크레딧 측파대(sideband) 채널 및 LTP 컨텐츠를 커버하는 14비트의 CRC를 구비한다. 플로우 제어 크레딧은, 특수한 LF 커맨드 플릿에서 또는 LTP 크레딧 측파대 채널에서 LTP 내에서 송신된다.
표준 검출 LTP 외에, 링크는 또한, 열여섯 개의 플릿을 유지하며 네 개의 12비트의 CRC 필드를 구비하는 옵션사항인 향상된 검출 LTP를 지원한다. 도 7은 향상된 검출 LTP의 한 실시형태의 포맷을 도시한다. 네 개의 CRC 필드의 각각은 열여섯 개의 플릿을 커버한다. 네 개의 CRC 중 임의의 것이 불량이면, LTP는 재송신된다. 네 개의 12비트의 CRC에 대해 두 개의 CRC 계산 옵션이 존재한다. 제1의 것(48b 중복(overlapping))은 네 개의 중복 계산을 사용하는데, 여기서 각각의 계산은 LTP 내의 모든 비트를 커버한다. 제2의 것(레인당 12b-16b CRC)은 네 개의 비 중복 계산을 사용하는데, 여기서 각각의 계산은 네 개의 레인 중 하나 상에서 흐르는 비트 전체로 제한된다.
상기에서 논의된 바와 같이, 링크 전송 레이어에 의해 사용되는 LT 제어 플릿은 널 LTP에서 전송된다. 널 LTP는 리플레이 버퍼에서 공간을 소비하지 않으며 재송신되지 않는다. 이들은 상기의 테이블 2에서 요약되는 링크 전송 LT 제어 플릿 중 하나를 사용하여 구별된다. 널 LTP의 대부분은, 두 개 중 적어도 하나가 에러 없이 링크 피어에 의해 수신된다는 것 또는 이들 둘 다가 에러가 없는 경우 RetrainRetryReq가 자동적으로 생성될 것이다는 것 중 어느 하나를 보장하기 위해, 순차적인 쌍에서 전송된다. 표준 검출 널 LTP의 예가 도 8에서 예시된다.
표준 검출 널 LTP는 단일의 구별용 제어 플릿, 975개의 예약 비트 및 표준 검출의 16비트 CRC 필드(standard detection sixteen bit CRC field)를 포함한다. 향상된 검출 널 LTP는 단일의 구별용 제어 플릿, 975개의 예약 비트 및 향상된 검출의 네 개의12비트 CRC 필드(enhanced detection four 12 bit CRC fields)를 포함한다. 두 개의 측파대 비트는, 14비트 CRC를 사용하는 경우 널 LTP에서 무시된다.
네 개의 레인을 갖는 링크와 연결되는 8x 대응 포트 및 4x 대응 포트 둘 다에 대한 링크를 통해 한 번에 하나의 LTP가 송신된다. 이것은, 각각, 도 9a 및 도 9b의 표준 검출 및 향상된 검출 LTP 둘 다에 대한 링크 패브릭 경로 관점을 사용하여 예시되며(CRC 필드는 일정 축척이 아니다는 것을 유의), 한편 대응하는 신호 프로세싱 및 전송 경로의 한 실시형태는 도 10에서 도시된다. 14비트의 CRC LTP는, LCRC[15:0] 필드가 LCRC[13:0] 필드 및 C[1 :0] 필드의 조합으로 대체될 것이다는 것을 제외하면, 도 8에서 예시되는 표준 검출 LTP과 유사할 것이다. 플릿 송신 순서는 플릿0에서 시작하고 플릿15로 종료한다.
일 실시형태에서, 각각의 레인을 통한 데이터의 물리적 송신은 직렬의 2 레벨 비트 비 제로 복귀(non-return to zero; NRZ) 인코딩 비트 패턴을 활용하는데, 각각의 레인에 대응하는 그 데이터는 싸이클마다 레인마다 디코딩되고, 직렬화해제되고(deserialized), 4바이트로 그룹화된다. 이것은 싸이클마다 두 개의 플릿을 포함하는 16바이트의 전송으로 나타나게 된다. 예를 들면, 도 9a 및 도 10의 예시는, 두 개의 플릿 폭의 구현예 고유의 데이터 경로를 가정하는데, 여기서는, 플릿0 및 플릿1은 동시에 송신될 것이고, 플릿2 및 플릿3은 동시에 전송될 것이고, 등등일 것이다. LCRC는 링크 전송 서브 레이어에 의해 계산된다.
도 11은, 두 개의 4 레인 링크가 짝을 이루어, 8 레인을 통해 데이터가 송신되는 8x 데이터경로를 지원하는 LTP 송신 방식을 도시한다. 예시되는 바와 같이, 이 스킴하에서는, 두 개의 LTP로부터의 네 개의 플릿이, 링크 패브릭과 링크 전송 서브 레이어 사이의 인터페이스에서 병렬로 프로세싱된다.
상기에서 논의된 바와 같이, 아키텍쳐는, 데이터 전송을 지원하기 위해 세 개의 레벨의 데이터 단위 세분화(data unit granularity): 패브릭 패킷, 플릿, 및 링크 전송 패킷을 활용한다. 링크 전송 레이어에서의 송신의 단위는 LTP이다. 묘사된 바와 같이, 각각의 LTP는 공칭으로 16 플릿 길이이며, 상기에서 설명되는 바와 같이, LTP의 실제 사이즈는 사용되는 특정한 CRC 스킴에 따라 변할 수도 있고, 16 플릿의 길이를 갖는 LTP를 참조하는 것의 사용은, CRC 비트 및 16 개의 비트 65를 제외한 LTP에 포함되는 데이터의 64 비트 플릿의 수에 대응한다.
네 개의 물리적 레인을 포함하는 링크의 일 실시형태의 물리적 레이어(PHY로 또한 칭해짐) 구조는 도 12에서 예시된다. PHY는 링크 인터커넥트의 물리적 구조를 정의하며, 컴포넌트A 및 컴포넌트B에 의해 묘사되는 바와 같은 두 개의 링크 피어 사이의 특정 링크 상에서의 신호의 동작의 상세를 다루는 것을 담당한다. 이 레이어는, 전기적 레벨, 타이밍 양태, 및 병렬 레인을 통한 정보의 각각의 비트의 전송 및 수신에서 수반되는 논리적 이슈를 포함해서, 신호 와이어 상에서의 데이터의 전송을 관리한다. 도 12에서 도시되는 바와 같이, 각각의 인터커넥트 링크의 물리적 연결성은 신호의 네 개의 차동 쌍(1200)으로 구성되며, 각각의 방향에서의 레인0 내지 레인3을 포함한다. 각각의 포트는, 두 개의 피어 컴포넌트 사이의 연결을 완성하기 위한 두 개의 단방향 링크로 구성되는 링크 쌍을 지원한다. 이것은 양방향에서의 트래픽을 동시에 지원한다. 이해의 용이성 및 예시의 목적을 위해, 도 10에서 예시되는 레인 "뒤섞임(swizzle)"은 도 12에서 도시되지 않지만; 그러나, 몇몇 실시형태에서, 송신 및 수신 레인은 뒤섞인다는 것이 이해될 것이다.
링크 포트를 갖는 컴포넌트는, 도 12에서 도시되는 바와 같이, 링크 피어로서 정의되는 단방향의 포인트 투 포인트 링크의 쌍을 사용하여 통신한다. 각각의 포트는 송신(Transmit; Tx) 링크 인터페이스 및 수신(Receive; Rx) 링크 인터페이스를 포함한다. 예시된 예의 경우, 컴포넌트A는 컴포넌트B Rx 포트(1204)에 연결되는 Tx 포트(1202)를 구비한다. 한편, 컴포넌트B는 컴포넌트B Rx 포트(1208)에 연결되는 Tx 포트(1204)를 구비한다. 하나의 단방향 링크는 컴포넌트A로부터 컴포넌트B로 송신하고, 다른 링크는 컴포넌트B로부터 컴포넌트A로 송신한다. "송신" 링크 및 "수신" 링크는, 어떤 컴포넌트 포트가 송신하고 있고 어떤 것이 데이터를 수신하고 있는지를 기준으로 정의된다. 도 12에서 예시되는 구성에서, 컴포넌트A 송신 링크는 데이터를 컴포넌트A Tx 포트(1202)로부터 컴포넌트B Rx 포트(1204)로 송신한다. 이 동일한 컴포넌트A 송신 링크는 포트B 수신 링크이다. 앞서 언급된 바와 같이, 링크 포트 사이에서의 데이터의 전송을 위한 근본적인 단위는 LTP이다. 각각의 LTP는, 링크의 대향 단의 송신 포트 및 수신 포트에 의해 정의되는 특정 링크를 통한 한 방향에서의 송신에 고유하다. LTP는 단일의 링크 전송의 수명을 가지며, LTP는 적용가능한 VL 버퍼로부터 플릿을 빼내고 그들을, 한 번에 16개로, 각각의 LTP로 모으는 것에 의해 동적으로 생성된다. LTP 송신 스트림(1210 및 1212)에 의해 묘사되는 바와 같이, LTP는, 도 4를 참조로 상기에서 논의되는 바와 같이, 개개의 LTP에 대한 최초 및 최종 플릿이 헤드 및 테일 플릿 비트에 의해 묘사되는 플릿의 스트림으로서 송신된다.
상기에서 논의되는 바와 같이, 아키텍쳐는, 0 바이트 내지 10240 바이트의 레이어4 페이로드 사이즈를 갖는 목적지로 경로 지정된 패브릭 패킷 또는 FP를 주로 포함하는 패킷 전달 메커니즘을 정의한다. 이것은 간단한 ULP 확인응답(acknowledgement)으로부터 캡슐화된 이더넷 점보 프레임(Ethernet Jumbo Frame)까지의 메시지의 범위를 전송하기 위한 효율적인 지원을 제공한다. 패브릭 패킷은 HFI로의 입구(ingress) 및 HFI로부터의 출구(egress)에 대한 페이로드의 논리 단위를 나타낸다. 패브릭 패킷은, 그들이 패브릭에서 단대단(end-to-end)인 수명을 갖기 때문에, 그렇게 명명된다. 더 구체적으로는, 패브릭 패킷의 수명은, FP에 대한 소스 및 목적지 어드레스에 의해 정의되는 바와 같이, 패브릭 엔드 포인트 사이에서의 FP 컨텐츠의 전송에 걸리는 시간이다. FP의 각각의 전송 경로는 적어도 하나의 링크를 통한 전송을 포함할 것이고, 전송 경로가 하나 이상의 스위치를 통과하는 경우 다수의 링크를 통한 전송을 포함할 수도 있다.
FP 및 LTP와 조합한 플릿의 사용은 아키텍쳐에 고유한 데이터 전송 기능성을 가능하게 한다. 특히, FP, 플릿, 및 LTP의 분리는 가상 레인의 사용뿐만 아니라, QoS 및 다양한 양태 및 패브릭 강건성을 지원한다.
상기에서 논의된 바와 같이, 플릿은 단독으로 송신되지 않고, 대신 16개의 플릿의 그룹이 링크 전송 패킷으로 패킹된다(packed)(번들화된다(bundled)). 이것은 플릿이 공통 링크 CRC를 공유하는 것을 허용한다. LTP의 플릿은 많은 상이한 패브릭 패킷으로부터 유래할 수 있는데, 이것은 다른 패브릭에 비해 몇몇 흥미있는 특성을 링크 프로토콜에게 부여한다. 효율적인 패킷 선점 및 인터리빙 메커니즘의 사용을 통해, 아키텍쳐는 상이한 스트림에 대한 데이터 전송의 인터리빙, 헤드 오브 라인(head-of-line) 블로킹 효과의 실질적인 제거, 심지어 큰 단일의 패킷이 물리적 링크 상에서 물리적으로 전송되는 것의 블로킹 효과를 지원한다. 패브릭 패킷, 플릿, 및 LTP 사이의 관계의 예시가 도 15 및 도 16에서 도시되는데, 이들 도면의 추가적인 설명은 하기에서 설명된다.
아키텍쳐는, 링크의 수신기측에서 버퍼 리소스를 관리하기 위해 그리고 송신기가 플릿을 전송할 수도 있는 때를 제어하기 위해 크레딧 기반의 플로우 제어를 사용한다. 이 방식 하에서, 패브릭 포트가 플릿을 전송하기 위해서는, 패브릭 포트는 요구되는 버퍼 공간에 대해 이용가능한 충분한 플로우 제어 크레딧을 수신 포트에서 필요로 한다. 일 실시형태에서, 수신기는 링크 상에서 지원되는 가상 레인(Virtual Lane; VL)에 대해 수신 버퍼의 단일의 풀을 제공한다. 버퍼 풀의 할당은 링크 상의 송신기측 상의 로직에 의해 관리된다. 각각의 지원된 VL에 대해 전용 버퍼가 할당된다. 또한, 송신기는 VL 사이에서 동적으로 할당될 공유 풀로서 공간의 일부를 관리할 수도 있다. 크레딧 기반의 플로우 제어는, 링크 상에서의 데이터 전송이 엄격히 관리된다는 것; 비인가 데이터 전송은 존재하지 않는다는 것을 의미하며, 그것은 또한 패브릭이 소위 "무손실" 패브릭이다는 것을 의미한다. 이 경우, 무손실은, 단순히, 정상 동작(normal operation) 동안, 플릿, 따라서 패킷이 혼잡으로 인해 절대 드랍되지 않는다는 것을 의미한다.
제어 정보, 예컨대 플로우 제어 크레딧은, 링크 패브릭(LF) 커맨드 플릿 및 링크 전송(Link Transfer; LT) 제어 플릿에서 반송된다. LF 커맨드 및 LT 제어 플릿은 송신기의 플릿 스트림의 임의의 포인트에서 삽입될 수도 있다. 또한, 몇몇 LTP 포맷에서의 측파대 정보는 심지어 더 적은 오버헤드를 갖는 크레딧을 전송하기 위해 사용될 수도 있다. LF 커맨드 및 LT 제어 플릿은 링크 송신기에 의해 생성되고 링크 수신기에 의해 소비된다.
아키텍쳐는 데이터 무결성을 보장하기 위해 링크 전송 패킷 및 패브릭 패킷에 대한 CRC를 포함한다. 아키텍쳐는 또한, 정확하게 수신되지 않은 LTP에 대해 링크 레벨 재시도를 제공한다. LTP 재시도는 링크의 유효 비트 에러율을 크게 향상시키고, 낮은 소비 전력을 약간 저하된 물리적 BER과 교환할 수도 있는 PHY 전략의 사용을 가능하게 한다. LTP 재시도는 또한, 허용가능한 시스템 레벨 에러율을 유지하기 위해 패브릭의 많은 수의 링크가 훨씬 더 나은 링크당 BER 특성을 필요로 하게 되는 대형 패브릭에 대해 유용하다.
선점 및 인터리빙
L2 링크 레이어는, 상이한 패킷으로부터의 플릿이, 패킷이 상이한 VL에 있는 한, 이들이 링크를 통해 전송될 때 인터리빙되는 것을 허용한다. 인터리빙에 대한 하나의 동기부여는, 주어진 링크의 사용을 극대화하는 것이다. 어떤 이유 때문이든 전송 패킷이 버블에 의해 인터럽트되면, 제2 패킷을 아이들로 두는 대신 제2 패킷은 채널로 인터리빙될 수 있다. 선점으로 칭해지는 인터리빙에 대한 제2 이유는, 상위 우선순위의 패킷의 레이턴시를 감소시키기 위해, 전송되고 있는 하위 우선순위의 패킷을 인터럽트하는 상위 우선순위의 패킷을 갖는 것이다.
인터리빙 하에서, 패브릭 패킷의 플릿의 전체 또는 일부는, 링크를 통해 송신되는 플릿의 스트림 내에서 다른 FP로부터의 플릿과 함께 인터리빙된다. 송신기는 송신을 위한 플릿을, 포트의 출력 큐에서 전송에 이용가능한 FP 중에서 선택한다. 일 실시형태에서, 단일의 VL 내의 FP는 순서대로 전달되고, 따라서, 가상 레인 내에서, 하나의 패킷으로부터의 플릿의 전체는, (그 VL에서의) 후속하는 패킷으로부터의 임의의 플릿이 송신되기 이전에 송신된다.
상이한 VL에 대해, 특정되는 순서화(ordering)는 없으며, 따라서 상이한 VL의 패킷으로부터의 플릿은 플릿 스트림 내에서(뿐만 아니라, 플릿의 순서화가 각각의 VL 내에서 유지되는 한, 주어진 LTP 내에서) 임의적으로 인터리빙된다. 몇몇 송신기 구현예는 패킷 사이의 인터리빙의 양을 제한할 것을 선택할 수도 있다.
선점 하에서, 상위 우선순위 레벨을 갖는 패브릭 패킷으로부터의 플릿은 하위 우선순위 레벨을 갖는 FP로부터의 플릿보다 우선한다. 일 실시형태에서, 각각의 가상 레인은 각각의 우선순위 레벨과 관련된다. 송신기는 상위 우선순위 VL을, 하위 우선순위 VL로부터의 플릿을 앞서, 링크 LTP 상으로 삽입되도록 구성된다. 송신기는 상위 우선순위 플릿을 단일의 플릿보다 더 큰 경계에 삽입할 것을 결정할 수도 있다. 추가적으로, 송신기는 동일한 우선순위의 VL로부터의 플릿을 인터리빙할 것을 선택할 수도 있거나, 또는 그들은 하나의 패킷으로부터의 플릿의 전체를, 동일한 우선순위의 상이한 VL의 상이한 패킷으로부터의 플릿을 전송하기 이전에, 링크 상으로 주입할 수도 있다. 링크 상의 수신기는 VL에 의한 유입 플릿 스트림을 큐로의 삽입을 위해 그리고 (스위치에서의 수신기에 대한) 다음 홉으로의 포워딩을 위해 분리한다. 일반적으로, 적어도 주어진 링크의 경우, 수신기 구현예는, 송신기에 의해 생성될 수도 있는 인터리빙의 전체 범위를 지원할 것이다. 몇몇 실시형태에서, 인터리빙의 유사한 범위는 패브릭에 대해 구현된다. 옵션적으로, 상이한 링크는 인터리빙의 상이한 레벨을 지원할 수도 있다.
패킷 선점의 양태에 따르면, 제1 우선순위 레벨(예를 들면, 높은 우선순위)을 갖는 VL 상의 패킷 B로부터의 플릿은 하위 우선순위 VL(즉, 제1 우선순위 레벨보다 더 낮은 우선순위 레벨을 갖는 VL) 상의 패킷 A로부터의 플릿의 스트림보다 우선할 수도 있다. 이 경우, 패킷 A의 헤드 플릿 및 패킷 A로부터의 제로 또는 그 이상의 바디 플릿 다음에 패킷 B로부터의 헤드 플릿이 후속할 수도 있다. 이 헤드 플릿은, 새로운 패킷이 시작한다는 것을 나타내고 수신기는 VL 식별자를 결정하기 위해 L2 헤더에 SC 필드를 찾을 것이다. 패킷 B의 헤드 플릿 다음에, 제로 또는 그 이상의 바디 플릿 및 최종적으로 패킷 B를 종료시키는 테일 플릿이 후속할 것이다. 패킷 B의 종료 후에, 테일 플릿이 후속하는 제로 또는 그 이상의 바디 플릿을 가지고 패킷 A의 송신이 재개된다.
패킷 선점은, 패킷이 연속적으로 상위의 우선순위 패킷(연속적으로 상위의 우선순위 VL 상의 패킷)에 의해 선점될 때, 내재될(nested) 수도 있다. 일 실시형태에서, 이것은 리스트의 헤드 상의 활성 패킷을 갖는 링크된 리스트로서 모델링된다. 현재 패킷이 선점되면, 새로운 패킷은 리스트의 헤드에 추가된다. 선점하는 패킷이 종료하면, 그것은 리스트로부터 제거되고 재개할 다음 예상된 패킷은 리스트의 새로운 헤드이다. 리스트 상에서 한 번에 유지될 수도 있는 패킷의 수는 지원된 VL의 수와 동일하다.
앞선 논의가 선점을 설명하기 위해 우선순위 레벨을 사용하지만, 상위 우선순위 패킷에 대해서만 선점이 사용되어야 한다는 요건은 존재하지 않는다. 송신에 이용가능한 현재 패킷으로부터의 플릿이 존재하지 않는 경우가 있을 수도 있지만("버블"로 나타나게 됨), 하위 우선순위 패킷으로부터 이용가능한 헤드 플릿은 존재한다. 하위 우선순위 패킷으로부터의 헤드 플릿 및 연속하는 바디 플릿이 전송될 수도 있다. 새로운 헤드 플릿은 패킷이 리스트의 헤드에서 추가되게 할 것이고 수신기는 새로운 패킷을 정확하게 추적할 것이다.
패킷은, 제1 패킷의 테일 플릿 이전에 제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는 푸시 및 팝 인터리빙의 예를 도시한다. 링크 패브릭 서브 레이어에서의 인터리빙은, 인터럽트하는 헤드 플릿이 인터럽트되고 있는 VL의 푸시 및 테일 플릿이 조우될 때 스택에서의 VL의 팝을 야기하는 푸시 및 팝 스킴을 활용한다. 스택이 어떻게 작동하는지를 시각화 하기 위해, 현재 종이에 대한 작업을 위해 사용되는 데스크 영역과 함께, 인박스(inbox) 안의 페이퍼의 스택을 상상한다. 푸시 및 팝 인터리빙의 맥락에서, 종이의 스택은 "스택"으로 칭해지고 데스크 영역은 활성 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)로 번들화되는 아웃바운드(outbound) 스트림에 플릿이 추가되는 플릿 스트림의 생성에 관한 것이다. 활성 VL을 식별하는 표시는 활성 VL 레지스터(1402)에서 다양한 상태로 묘사된다. 초기 상태 하에서, VL0에 대응하는 표시는 활성 VL 레지스터(1402)에 저장되어, 가상 레인 VL0에 대해 버퍼링되는 다음 패브릭 패킷(VL0 FP로 칭해짐)으로부터 플릿이 추가된다는 것을 나타낸다. 따라서, VL0 FP에 대한 처음 두 플릿은 플릿 송신 스트림에 추가되는데, 이 때, VL0와의 VL1 인터리빙을 개시하는 인터리빙 이벤트가 검출된다. 이 인터리빙 동작을 달성하기 위해, VL1에 대한 표시는 활성 VL 레지스터에서의 VL0를 대체하고, VL0을 스택 상으로 푸시한다. 이것은 활성 가상 레인을 VL1으로 스위칭하고, VL1 FP에 대한 헤드 플릿 및 제1 바디 플릿을 플릿 송신 스트림에 추가한다. 다음에, 제2 인터리빙 이벤트에 응답하여, VL1과의 VL2의 인터리빙이 개시되고, VL2를 활성 VL 레지스터(1402)로 로딩하고 VL1을 스택 상으로 푸시한다. 이것은 FP VL2에 대한 모든 세 개의 플릿을 플릿 송신 스트림에 추가하는 것으로 나타나게 된다. FP VL2 테일 플릿을 추가하는 것은, VL1과의 VL2의 인터리빙을 완료하여, VL1이 스택에서 떨어져 활성 VL 레지스터(1402)로 팝되는 것으로 나타나게 된다. VL1에 대한 다른 바디 플릿이 추가되고, 후속하여 VL1과의 VL7 인터리빙을 개시하는데, 이것은 VL7에 대한 표시를 활성 VL 레지스터(1402)에 추가하고 VL1을 다시 스택으로 푸시하는 것에 의해 달성된다. 전체 VL7 FP에 대응하는 세 개의 플릿이 플릿 송신 스트림에 추가되어, VL1과의 VL7의 인터리빙을 완료하고 스택에서 활성 VL 레지스터(1402) 안으로 VL1을 팝한다. VL1 FP의 테일 플릿이 추가되어, VL1의 인터리빙을 완료하고 VL0을 스택으로부터 떨어져 활성 VL 레지스터(1402) 안으로 팝시킨다. 이것은 활성 VL로서 VL0를 반환하고, VL0 FP에 대한 최종 두 개의 패킷이 LTP 송신 FIFO에 추가된다.
인터럽트되고 있는 암시적인 VL로 복귀하기 위해 팝에 의존하는 대신, 링크 패브릭 서브 레이어는, 어떤 VL이 리스트의 헤드로 이동되는지를 명시적으로 특정하기 위해, "VL 마커"로 칭해지는 특수 LF 커맨드 플릿을 디바이스가 활용하는 것을 허용한다. VL 마커의 사용은, 이 여분의(extra) 마커 플릿으로 인해 덜 효율적이지만, 그것은 인터리빙에 대해 더 많은 유연성을 제공한다. 도 15의 도면은 이 개념을 예시한다.
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 바디 플릿이 추가되고, VL1과의 VL7의 인터리빙의 개시가 후속하는데, 이것은 VL7을 활성 VL 레지스터(1402) 안으로 로딩하고 VL1을 활성 VL 레지스터(1402)로부터 스택으로 푸시한다. 다음으로, 다른 VL 마커(1504)가 플릿 송신 스트림(1500)에 추가되어 활성 가상 레인을 다시 VL1으로 스위칭한다. 이것은 VL7을 스택으로 푸시하고 VL1을 활성 VL 레지스터(1402) 안으로 풀링한다. VL1 FP의 테일 플릿이 추가되는데, 이것은 VL1의 인터리빙을 완료하고, VL7이 스택에서 떨어져 활성 VL 레지스터(1402) 안으로 팝된다. 그 다음, VL7 FP에 대한 최종 두 개의 플릿이 추가된다.
도 14 및 도 15에서 도시되는 인터리빙 예는 예시의 목적을 위해, 그리고 푸시 및 팝 인터리빙 스킴 및 VL 마커 인터리빙 스킴의 더 쉬운 이해를 위해, 인터리빙의 과장된 레벨을 도시한다. 실제 시스템에서, 대부분의 인터리빙은, 두 타입의 인터리빙 이벤트: (A) 선점; 및 (B) 패킷 스트림에서의 버블 중 하나로부터 유래할 것이다. 선점 인터리빙 및 선점 인터리빙과 버블 이벤트로부터 유래하는 이벤트의 조합의 추가적인 세세한 예는, 각각, 도 16 및 도 17에서 도시된다.
상기에서 설명된 바와 같이, 선점 하에서, 상위 우선순위를 갖는 가상 레인에서의 패브릭 패킷에 대한 컨텐츠(플릿)는, 플릿 송신 스트림에 대한 하위 우선순위의 VL에서의 FP의 플릿의 추가보다 우선한다. HFI, 게이트웨이, 또는 다른 타입의 패브릭 엔트포인트에서, 패브릭 패킷이 구축되게 되는 데이터는 일반적으로 최초 어떤 다른 타입의 포맷, 예컨대 패브릭 패킷에 캡슐화될 이더넷 프레임으로 버퍼링될 것이다. 또한, 패브릭 패킷은, IP 패킷 및 UDP 패킷과 같은 레이어3 패킷이 어떻게 생성되는지와 마찬가지로, 네트워킹 스택의 일부로서 생성될 수도 있을 가능성이 있다. 스위치에서, 수신된 그리고 송신된 컨텐츠 둘 다는, 어떤 플릿이 어떤 FP와 관련되는지를, 그리고 플릿이 어떤 스위치 포트를 떠나 그들의 다음 홉 또는 엔드포인트 목적지로 전송되어야 하는지를 결정하기 위해 사용되는 추가적인 메타데이터와 함께, 이미 플릿으로 포맷되어 있다. 상기의 관점에서, 도 16 및 도 17은, FP 아래의 FP 컨텐츠의 플릿 포맷팅과 함께, 패브릭 패킷을 전체적으로 묘사한다.
각각의 FP에 대한 플릿 컨텐츠는, FP가 할당되는 가상 레인에 대해 할당되는 버퍼에 일시적으로 저장된다. 다양한 버퍼 구성 실시형태 하에서, 별개의 버퍼는 각각의 VL에 할당될 수도 있거나, 몇몇 VL은 버퍼 공간을 공유할 수도 있거나, 또는 이들 둘의 조합이 존재할 수도 있는데, 이 경우 VL 버퍼 할당의 제1 부분은 그 VL 전용이고, 한편 다른 부분은 공유된 버퍼 공간이다. 수신 버퍼(Rbuf) 송신 버퍼(Tbuf)에 대한 VL 사용의 할당에 관한 추가 상세가 하기에 설명된다.
가상 레인을 사용하는 근본적인 양태는, 주어진 가상 레인의 컨텐츠가 순서대로 유지된다는 것이다. 이것은, 주어진 가상 레인에 대해, 하나의 FP가 다른 FP를 통과할 수 없다는 것을 의미한다. 게다가, FP에 대한 플릿은 또한 그들이 원래 생성된 순서대로 남아 있다. 동시에, 상이한 가상 레인의 컨텐츠는 다른 가상 레인에 대해 순서대로 남아 있지 않아도 된다. 이것은 상위 우선순위 트래픽이 하위 우선순위 트랙픽에 우선하는 것을 가능하게 한다. 가상 레인은 또한 라우팅 및 프로토콜 데드락을 제거하기 위해, 그리고 트래픽 클래스 사이의 헤드 오브 라인 블로킹을 방지하기 위해 사용된다.
도 16에서 도시되는 바와 같이, 각각의 가상 레인(VL1, VL2, VL3)에 대해 세 개의 버퍼(1602, 1604, 및 1606)가 존재한다. 이들 가상 레인의 각각은 또한 각각의 우선순위를 할당받는다 - VL1에 대해 낮은 우선순위, VL2에 대해 중간 우선순위, 그리고 VL3에 대해 높은 우선순위. 플릿이 LTP2, LTP3, LTP4, LTP5, LTP6, 및 LTP7로 번들화되는 플릿 송신 스트림(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 버퍼로부터 플릿을 제거하는 것은, 특히 스위치에서, 다소 비동기적일 수도 있다. 결과적으로, 임의의 주어진 시점에서, 주어진 VL 버퍼는, 버퍼링되어 송신 준비가 된 컨텐츠를 가질 수도 있거나 또는 가지지 않을 수도 있다. 도 16의 예에서, 시간 T1에서, VL1 버퍼(1602)만이 송신 준비가 된 플릿을 포함하며, 한편 VL2 버퍼(1604) 및 VL3 버퍼(1606)는 비어 있다. FP 패킷에 대한 플릿을 플릿 송신 스트림에 추가하는 것을 개시하기 위해, 적어도 헤드 플릿 또는 플릿들(특정한 FP 포맷에 의존함)이 VL FIFO 버퍼의 헤드에 있어야 할 필요가 있다. (하기에서 더 상세히 설명되는 바와 같이, 일 실시형태에서, VL 버퍼는, FIFO 헤드 포인터에 의해 식별되는 FIFO 헤드를 갖는 원형의 FIFO로 구현된다.) 도 16에서, 헤드 플릿(1610)은 시간 T1에서 VL1 버퍼(1602)의 헤드에서 버퍼링된다.
시간 T1에서, 제1 그룹의 플릿(1612)은, 플릿(1612)의 시작에 있는 헤드 플릿(1610)이 시간 T2에서 추가되는 상태로, 플릿 송신 스트림(1608)의 LTP2에 추가되는데, 시간 T1과 T2 사이의 시간 차이는, 활성 VL이 VL1 버퍼(1602)로 변경되어야 한다는 것을 중재기가 인식하는 데 걸리는 시간 및 플릿 데이터를 버퍼로부터 플릿 송신 스트림(1608)으로 복제하기 위한 시간의 양을 나타낸다. 도 16에서 T1과 T2 사이의 차이는 일정 축척이 아니며; 대신, FP 데이터가 VL 버퍼에 도달하여 송신 준비가 되는 때와 그 데이터가 실제 플릿 송신 스트림에 추가되는 때 사이에 약간의 유한한 시간이 존재할 것이다는 것을 예시하기 위해 사용된다.
시간 T3에서, 패킷2의 제1 부분이 VL2 버퍼(1604)에서 수신되는데, 헤드 플릿(1615)으로 시작한다. VL2가 VL1보다 상위 우선순위를 갖기 때문에, 중재기(또는 다른 로직, 도시되지 않음)에 의해 선점 이벤트가 검출된다. 구현예에 따라서, 선점 이벤트는, 패킷2에 대한 헤드 플릿(들)이 VL2 버퍼(1604) FIFO의 헤드에 도달한 바로 직후에 검출될 수도 있거나, 또는 여분의 인터리빙이 다른 부분에서 버블을 야기하는 것으로 나타나게 되어, 더 많은 인터리빙을 초래할 수도 있기 때문에, 인터리빙의 몇몇 레벨의 발생을 감소시키기 위해 약간의 지연이 존재할 수도 있다. 예를 들면, 플릿 송신 스트림에 플릿을 추가한 현재 패킷이 약간의 플릿만을 남겨두고 있고 선점할 패킷이 크면, 로직은 현재 패킷의 선점이 발생하지 않도록, 현재 패킷이 완료하기를 기다릴 수도 있다. 선점 이벤트에 응답하여, 활성 VL은 푸시 및 팝 인터리빙 방식을 사용하여 VL1으로부터 VL2로 스위칭된다. 옵션적으로는, VL 마커 인터리빙 방식이 사용될 수 있다. 활성 VL이 VL1으로부터 VL2로 스위칭되는 것에 응답하여, VL2에 대한 표시가 활성 VL 레지스터 안으로 로딩되고 VL1이 스택 상으로 푸시된다. 시간 T4에서 묘사되는 바와 같이, 제1 그룹의 플릿(1616)이 VL2 버퍼(1604) FIFO로부터 풀링되어 플릿 송신 스트림(1608)에 추가된다. 이것은 패킷2를 위한 패킷1의 송신의 선점으로 나타나게 되고, 또한 패킷1 및 패킷2로부터의 플릿을 인터리빙하게 된다.
시간 T5에서, 패킷3의 제1 부분이 VL3 버퍼(1604)에서 수신되는데, 헤드 플릿(1618)으로 시작한다. VL3가 VL2보다 상위 우선순위를 갖기 때문에, 중재기(또는 다른 로직, 도시되지 않음)에 의해 제2 선점 이벤트가 검출된다. 이것은 패킷2의 송신이 패킷3의 송신을 위해 선점되는 것으로 나타나게 되는데, 이것은 VL3에 대한 표시를 활성 VL 레지스터 안으로 로딩하고 VL2를 스택 상으로 푸시하는 것에 의해 달성된다. 시간 T6에서 시작하여 묘사되는 바와 같이, 패킷3에 대한 플릿(1620)의 전체는 플릿 송신 스트림(1608)에 추가되고, 따라서 패킷3 플릿을 패킷2 플릿과 인터리빙하게 된다.
테일 플릿(1622)을 플릿 송신 스트림(1608)에 추가하는 것과 연계하여, 중재기(또는 다른 로직)는, 패킷3으로부터 플릿을 추가하는 것이 완료되었다는 것을 검출한다. 따라서, VL3는 활성 VL 레지스터로부터 제거되고, VL2는 스택에서 활성 VL 레지스터 안으로 팝되고, 활성 VL로서 VL2을 반환한다. 이것은 패킷2의 남아 있는 플릿(1624)이 플릿 송신 스트림(1608)에 추가되는 것으로 나타나게 되는데, 시간 T7에서 시작하고, 시간 T8에서 종료하며, 이 시점에서, 테일 플릿(1626)이 추가되었고 따라서 패킷2가 완료되었다는 것이 검출된다. 이것은 VL1이 스택에서 떨어져 활성 VL 레지스터 팝되고, VL1이 활성 VL로서 VL2를 대체하는 것으로 나타나게 된다. 그 다음, 패킷1의 남아 있는 플릿(1628)은 플릿 송신 스트림(1608)에 추가되고, 시간 T9의 테일 플릿(1630)에서 완료한다. 그 다음, 다음 패브릭 패킷에 대한 헤드 플릿이 LTP7에 대한 최종 플릿으로서 추가된다(다음 번 패브릭 패킷은 간략화를 위해 도시되지 않는다).
도 17은 버블 인터리빙 이벤트를 예시하는데, 선점 인터리빙 이벤트가 후속한다. 패브릭 패킷에 대한 플릿이 다수의 홉을 포함하는 라우팅 경로를 통과하는 경우, 플릿의 일부는 하나 이상의 스위치에 의해 선점될 수도 있다. 이것은 주어진 FP에 대한 플릿 스트림의 붕괴로 나타나게 된다. 이렇게 붕괴된 플릿 스트림이 수신 포트에서 수신되는 경우, 선점 이전에 송신되었던 플릿의 부분과 선점 이후에 송신되었던 플릿의 부분 사이에 갭이 존재한다. 이것은 "버블"로 나타나게 된다. 이 버블 예 외에, 버블은 다양한 다른 이유 때문에 발생할 수도 있다. 이러한 버블의 검출에 응답하여, 인터리빙은, 버블을 갖는 FP와 동일한 또는 하위 우선순위 레벨을 갖는 FP로부터의 플릿으로 구현될 수도 있다.
도 16의 예에서와 같이, 시간 T1에서, 헤드 플릿(1700)을 포함하는 패킷1의 적어도 제1 부분은 VL1 FIFO 버퍼(1602)에서 수신되고, 시간 T2에서 시작하여 플릿의 제1 부분(1702)이 플릿 송신 스트림(1704)의 LTP2에 추가된다. 시간 T3에서, 패킷2의 제1 부분이 VL2 버퍼(1604)에서 수신되는데, 헤드 플릿(1706)으로 시작한다. VL1 및 VL2 둘 다는 낮은 우선순위를 할당받고, 따라서 패킷1 및 패킷2의 각각은 동일한 낮은 우선순위 레벨을 할당받는다. FP 및/또는 그들의 플릿이, 동일한 가상 레인에 할당되는 경우, 서로 통과할 수 없지만, FP 및/또는 그들의 플릿은, 그들이 서로 상이한 가상 레인에 할당되는 경우, 서로 통과하도록 허용된다. 이 상황은 또한, 상이한 가상 레인이 동일한 우선순위를 갖는 경우 발생할 수도 있다. 일반적으로, 두 개(또는 그 이상의) 가상 레인이 동일한 우선순위 레벨을 공유하는 경우, FP는 (그들의 플릿을 통해) 그들 전체가 플릿 송신 스트림에 추가된다, 예를 들면, 제1 FP에 대한 모든 플릿이 추가되고, 제2 FP에 대한 모든 플릿이 추가되고, 등등이다. 동일한 우선순위 레벨을 공유하는 다수의 VL로부터 다음에 어떤 FP를 전송할지의 선택은, 중재기 선택 로직의 함수일 것인데, 중재기 선택 로직은 VL에서의 FP의 송신을 균등하게(또는 꽤 균등하게) 처리하도록 설계될 것이다. 예를 들면, 몇몇 실시형태에서, 라운드 로빈 스킴(round-robin scheme)이 구현될 수도 있다. 이러한 라운드 로빈 스킴은 또한, 다수의 VL에 걸친 버퍼 사용 레벨이 몇몇 레벨을 목표로 하도록, FP의 길이를 고려할 수도 있다. 예를 들면, 두 개의 VL 사이에서의 라운드 로빈 유일의 방식은, VL에서의 FP의 전송을 교차시킬 것이지만, 한편, 사용 레벨 방식은, VL 중 하나로부터의 제1 FP가 다른 VL로부터의 제2 및 제3 FP보다 상당히 더 크면, 제1 FP를 송신하고, 후속하여 제2 및 제3 FP를 송신할 수도 있다.
도 17에서 예시되는 예 하에서, 일반적으로 패킷1에 대한 플릿의 전체가 전송될 것이고, 후속하여 패킷2에 대한 플릿의 전체가 전송될 것이다(선점 인터리빙 이벤트가 존재하지 않았고 VL1 및 VL2만이 중재를 위해 고려되고 있었다고 가정함). 그러나, 예시되는 바와 같이, T4에서 시작하는 패킷1에 대한 플릿의 전송에 버블이 존재한다. 중재기 로직은, VL2 FIFO 버퍼(1604)에서의 패킷2에 대한 플릿의 이용가능성과 조합하여 버블의 존재를 고려한다. 응답으로, 버블 인터리빙 이벤트가 검출되는데, 이것은 패킷2 플릿(1708)이 패킷1 플릿과 인터리빙되는 것으로 나타나게 되는데, 시간 T5에서 시작한다. 선점 인터리빙에서와 같이, 인터리빙의 개시는 VL2를 활성 VL 레지스터로 로딩하고 VL1을 스택 상으로 푸시하는 것에 의해 시작한다.
패킷2로부터의 플릿이 플릿 송신 스트림(1704)에 추가되고 있는 동안, 시간 T6에서 패킷1에 대한 플릿의 제2(및 남아 있는) 부분은 VL1 FIFO 버퍼(1602)에서 수신되어 버퍼링되기 시작한다. 이들 플릿이 즉시 송신에 이용가능하지만, 시간 T6에서의 그들의 수신은 인터리빙 이벤트를 생성하지 않는다(또는 다르게는 패킷2로부터의 플릿의 인터리빙을 종료한다). 대신, 패킷2로부터의 플릿은, VL3 FIFO 버퍼(1606)에서의 헤드 플릿(1710)을 포함하는 패킷3 플릿의 이용가능성의 검출에 응답하여, 선점 인터리빙 이벤트가 시간 T7에서 검출될 때까지 플릿 송신 스트림(1704)에 계속 추가된다. 도 16의 예에서와 같이, VL3는, VL1 또는 VL2 중 어느 하나에 대한 우선순위 레벨보다도 더 높은 우선순위 레벨을 갖는다. 결과적으로, 높은 우선순위 패킷3에 대한 플릿의 이용가능성은 패킷2 플릿과의 패킷 3 플릿(1712)의 선점 인터리빙을 개시하는데, 시간 T8에서 시작하고 테일 플릿(1715)의 추가와 함께 시간 T9에서 완료한다. 패킷3의 인터리빙의 완료시, VL2는 스택에서 떨어져 팝되어 활성 VL 레지스터로 로딩되고, 따라서 활성 가상 레인으로서 VL2를 반환한다. 이것은, 패킷2의 남아 있는 플릿(1716)을 플릿 송신 스트림(1704)에 추가하는 것으로 나타나게 된다.
패킷2의 완료시, 시간 T10에서 플릿 송신 스트림(1704)에 테일 플릿(1718)을 추가하는 것에 의해 식별되는 바와 같이, VL1은 스택에서 떨어져 팝되어 활성 VL 레지스터로 로딩되어, 활성 VL로서 VL1을 반환한다. 이것은, 패킷1의 남아 있는 부분에 대응하는 플릿(1720)을 플릿 송신 스트림(1704)에 추가하는 것으로 나타나게 되는데, 패킷1에 대한 플릿의 추가는 테일 플릿(1722)이 시간 T11에서 추가되면 완료된다.
링크 신뢰가능성
상기에서 논의된 바와 같이, 아키텍쳐의 패브릭은 "무손실"이며, 패킷이 수신시 절대로 폐기되지 않거나 또는 송신 동안 절대로 "손실되지" 않는다는 것을 의미한다. 이것은, 크레딧 기반의 플로우 제어의 사용 및 리플레이 버퍼의 사용을 주로 포함하는 메커니즘의 조합을 통해 달성된다. 크레딧 기반의 방식 하에서, 전송 유닛이 플릿 송신을 위한 크레딧을 갖지 않는 한, 전송 유닛(예를 들면, HFI, 스위치, 또는 게이트웨이)은 수신 유닛(예를 들면, 다른 HFI 또는 스위치)으로 플릿을 전송하지 않을 것이고; 크레딧은 VL 단위 기반이며, 플릿에 대해 사용될 VL에 대한 충분한 버퍼 공간을 수신기가 가지고 있다는 것을 나타내기 위해 사용된다.
각각의 LTP는, 표준 검출 LTP가 사용되는지 또는 향상된 검출 LTP가 사용되는지의 여부에 따라, 데이터 무결성을 검증하기 위해 사용되는 하나 이상의 CRC를 포함한다. CRC(들)는 LTP의 데이터 컨텐츠에 대해 계산되고 결과적으로 나타나는 CRC 값(들)은, 도 5 내지 도 8에서 예시되고 상기에서 설명되는 바와 같이, 최종 플릿(플릿15)에 후속하여 LTP의 끝에 부착된다. 수신시, CRC(들)는 재계산되고 CRC(들)와 수신된 LTP와 수신된 데이터에서의 CRC(들) 사이의 비교가 이루어져서 임의의 데이터 에러가 존재하는지의 여부를 결정한다. 송신된 CRC와 수신된 데이터에 대해 계산된 CRC가 일치하지 않으면, 데이터 에러가 검출된다. CRC 불일치의 검출에 응답하여, LTP는 리플레이 버퍼의 사용을 통해 재송신된다.
'신뢰가능한' LTP는, 그것이 링크 피어에 의해 성공적으로 수신되었다는 것을 재송신 요청의 결여가 나타내기에 충분히 긴 시간의 기간 동안 리플레이 버퍼에 유지된다. 이 방식 하에서, 수신기는 패킷이 성공적으로 수신되었다는 것을 확인응답하기 위한 ACK를 전송하지 않고; 대신, 왕복 시간 기간 내에 재송신 요청의 결여가, LTP가 링크를 통해 성공적으로 전송되었다는 암시적인 확인응답을 제공한다. 용어 '신뢰가능한' LTP의 사용은, 리플레이 버퍼에 유지되는 LTP를, 리플레이 버퍼에 유지되지 않는 다른 LTP, 예컨대 널 LTP와 구별하는 것이다. 따라서, 널 LTP는 재송신되지 않는다.
리플레이 버퍼 위치 포인터는 각각의 LTP에 대해 송신기에서 유지되고(NxtTxLTP) 수신기에서 유지되지만(NxtRxLTP), LTP의 일부로서 교환되지는 않는다. 송신 에러가 (CRC 불일치를 통해) 수신기에 의해 검출되는 경우, 수신기는, NxtRxLTP 리플레이 버퍼 위치 포인터를 포함하는 RetryReqLTP를 송신기로 전송한다. 송신기에서, RetryReqLTP의 수신시, 리플레이 버퍼의 LTP는 원래의 순서로 재송신되고, RetryReqLTP(피어 NxtRxLTP)로 시작하고 최종 리플레이 버퍼 위치가 기록되는 것으로 종료한다. 일 실시형태에서, LTP 데이터를 (NxtWrLTP)에 기록할 다음 번 리플레이 버퍼 슬롯이 사용되고, 따라서, 기록되는 최종 리플레이 버퍼 위치는 NxtWrLTP-1이다.
CRC 불일치에 의해 나타내어지는 링크 에러의 검출과 연계하여, 어떤 레인이 잘못되어 있는지를 결정하기 위한 제2 메커니즘이 구현된다. 이 메커니즘은, 수신기에서만 계산되는 레인당 CRC를 활용하고 송신된 데이터에서의 레인당 CRC에 대한 비교를 (전혀 존재하지 않기 때문에) 사용하지 않는다. 대신, 레인당 CRC는, 하기에서 논의되는 바와 같이, CRC 불일치를 갖는 LTP에 대해 계산되는 레인당 CRC를, LTP가 리플레이 버퍼를 통해 재송신될 때 동일한 LTP에 대해 재계산되는 대응하는 레인당 CRC에, 레인 단위 기반 또는 전송 그룹 단위 기반으로, 비교하기 위해 사용된다.
리플레이 버퍼의 사용의 예가 잘못된 레인을 검출하기 위한 레인당 CRC의 사용과 함께 도 18a 및 도 18b에서 예시된다. 이 예에서, LTP 송신 스트림(1604)의 LTP2, LTP3, LTP4, LTP5, LTP6, 및 LTP7을 포함하는 LTP 송신 스트림은, 디바이스A의 링크 인터페이스A로부터, 링크의 타단의 피어 디바이스B의 링크 인터페이스B로 송신되고 있다. 더 구체적으로는, LTP 송신 스트림은, 상기에서 논의된 도 17에서 도시된 것과 유사한 4 레인 링크 인터커넥트를 사용하여, 링크 인터페이스A의 송신 포트(1800)로부터 링크 인터페이스B의 수신 포트로 송신된다. 아키텍쳐의 링크 하에서, LTP 컨텐츠는 다수의 레인을 통해 병렬로 순차적으로 전송된다. 상기에서 논의된 바와 같이, 레인의 수는 특정한 링크 구성에 따라 변할 수도 있고; 게다가, 감소된 수의 레인을 갖는 링크 상에서의 전송도 또한 지원된다. 예로서 그리고 제한 없이, 단일의 비트가 단위 간격(Unit Interval; UI)으로 칭해지는 시간 기간 동안 각각의 레인을 통해 송신된다. 일 실시형태에서, LTP 데이터의 전송은 전송 단위(XFR)로 칭해지는 데이터 단위로 분할된다. 일 실시형태에서, 각각의 XFR은 32비트의 양이다. 일 실시형태에서, XFR의 모든 비트는 동일한 레인을 사용하여 송신된다. 몇몇 실시형태에서, 몇몇 XFR은 다수의 레인을 통해 송신될 수도 있다.
도 19는, 1056 비트의 길이를 갖는 표준 검출 LTP에 대한 XFR의 매핑을 예시한다. 각각의 XFR은 32비트의 길이이며 단일의 레인을 통해 전송된다. 따라서, 각각의 LTP에 대해 33개의 XFR이 존재한다. 도 20은, 일 실시형태에 따른, 4 레인 링크에 대한 레인당 XFR 매핑을 도시한다. 일반적으로, 예시된 목적 및 간략화를 위해, 각각의 플릿은 64비트이다. 그러나, 도 3에서 예시되는 바와 같이, 각각의 플릿은, 자신의 플릿 타입을 식별하기 위해 전체적으로(바디 플릿의 경우) 또는 부분적으로(헤드 및 테일 플릿과 제어 플릿의 경우) 사용되는 여분의 65번째 비트를 구비한다. 송신 동안, 65번째 비트는 인라인으로(in-line) 송신되고, 직렬화 해제(deserialization)시 또는 다수의 레인을 통해 병렬로 송신되는 순차적으로 전송된 비트 스트림의 재조립시, 65번째 비트는 1056 비트의 표준 검출 LTP에서 65번째 비트 위치마다 존재한다는 것을 의미한다.
4 레인 링크의 일 실시형태에서, 두 개의 플릿에 대한 데이터 비트는, 네 개의 XFR을 포함하는 128비트가 (논리적으로) 함께 전송되도록, 32개의 UI에 걸쳐 병렬로 링크를 통해 전송된다. 그러나, 상기에서 언급된 바와 같이, 모든 65번째 위치는 플릿 타입 비트에 의해 점유된다. 결과적으로, XFR은 플릿과 정확히 2:1로 매핑하지 않는다. 대신, 여분의 65번째 비트의 인라인의 존재는, 도 21에서 예시되는 바와 같이, 행갈이가 된(wrapped) 전송으로 나타나게 된다.
추가 상세에서, 일 실시형태에서, 여분의 두 비트는 각각의 128개의 UI에 대해 행갈이가 되고, 4 레인 XFR의 8개의 그룹이 완료된 이후 16비트의 집합체로 나타나게 된다. 이들 8개의 그룹은, 플릿15의 최종 16비트(플러스 자신의 65번째 비트)와 후속하여 16비트의 CRC(또는 옵션적으로, 14비트의 CRC 플러스 CRC-14 LTP에 대한 2개의 제어 채널 비트)를 포함하는 33번째 XFR과 함께, 처음 32개의 XFR을 포함한다. 예시적은 목적 및 이해의 용이성을 위해, 플릿은 본원에서 64비트의 단위로 전송되는 것으로 예시될 수도 있지만; 그러나, 일 실시형태에서, 플릿은 실제로 65비트의 단위로 전송된다는 것이 이해될 것이다.
도 20의 4 레인 XFR 매핑으로 돌아가면, 1056 비트의 표준 검출 LTP마다 33개의 XFR의 사용은 각각의 LTP에 대해 하나의 XFR의 행갈이로 나타나게 된다. 이것은, 결국에는, 각각의 후속하는 LTP의 시작 포인트를, 레인0, 레인1, 레인2, 레인 3, 다시 레인0, 레인 1 등등의 LTP 시작 레인 시퀀스에 따라, 다음 레인으로 시프트한다. 이것은 (본원에서 예시되고 설명되는 4 레인을 통한 표준 검출 LTP 전송에 적용될 때) 4 레인 표준 검출 LTP '시퀀스', 또는 단순히 생략하여 LTP 시퀀스로 본원에서 칭해진다. 편의상, LTP 시퀀스 상태는 제1, 제2, 제3, 및 제4로 예시되지만, 일 실시형태에서, 그것은 두 개의 비트를 사용하여 0, 1, 2, 3으로 추적된다.
도 18a에서 도시되는 바와 같이, LTP 송신 스트림(1604)에서의 플릿의 직렬화 및 매핑은, 송신 링크 제어 블록(1804)에 의해 수행된다(또는 다르게는, 이 동작의 일부는 도시되지 않은 다른 블록에 의해 수행된다). 송신 링크 제어 블록(1804)에 의해 프로세싱되기 이전에, 각각의 신뢰가능한 LTP에 대한 데이터 컨텐츠는 리플레이 버퍼(1806)의 LTP 슬롯 중 하나로 복제되는데, 슬롯은 NxtWrLTP 포인터(1807)에 의해 식별된다. 일반적으로, 리플레이 버퍼는 가변 사이즈, 또는 미리 결정된 사이즈를 가질 수도 있다. 일 실시형태에서, 리플레이 버퍼는 다수의 미리 결정된 사이즈 중 하나로 선택적으로 구성될 수도 있다.
예시된 바와 같이, 일 실시형태에서, 리플레이 버퍼는, 다음 번 송신 LTP(NxtTxLTP) 포인터(1808)가 최종 FIFO 슬롯으로부터 다시 최초 FIFO 슬롯으로 행갈이를 하는(이 예에서는 슬롯7에서 슬롯0으로 행갈이를 하는) 값을 갖는 원형 FIFO로서 구현된다. 원형 FIFO의 사용은, 이전 LTP 데이터(이전에 송신된 LTP에 대응함)가 새로운(다음에 송신될) LTP 데이터에 의해 덮어쓰기되는 것으로 나타나게 되지만; 하기에서 설명되는 바와 같이, LTP 데이터가 성공적으로 전송되었다는 암시적인 확인응답이 검출될 때까지, 어떠한 LTP 데이터도 덮어쓰기되지 않는다. 이 스킴은, 명시적인 ACK의 사용을 필요로 하지 않으면서, 링크를 통한 데이터의 신뢰가능한 송신을 가능하게 하고, 따라서 ACK의 사용과 관련되는 오버헤드를 감소시키게 된다. 이것은 또한, 링크 레이어 위의 프로토콜(예컨대 TCP)에 대해 사용되는 ACK 기반의 신뢰가능한 송신 스킴을 지원하는 데 필요한 송신 포트에서의 버퍼링을 감소시킨다. 도 22a 내지 도 22e의 플로우차트(2200a 내지 2200e) 및 도 23a 및 도 23b의 송신기 및 수신기 상태 머신 도면(2370 및 2350)을 참조하면, 일 실시형태에 따른, 잘못된 링크 레인의 검출을 포함하는 링크 에러의 핸들링은 다음의 방식으로 구현된다. 링크 초기화 프로세스 동안, 링크 인터페이스의 피어 송신 포트와 피어 수신 포트 사이에서 다양한 정보가 교환되고, 양방향 통신 링크를 확립하게 된다. 이 프로세스 동안, 리플레이 버퍼의 NxtTxLTP 포인터(1808) 및 수신측 상의 대응하는 다음 번 수신 LTP(NxtRxLTP) 포인터(1810)는 0으로 초기화된다. 성공적인 링크 초기화시, 링크 전송 모드는 시작 블록(2202)에 의해 묘사되는 바와 같이 "정상"으로 설정되고, 도 23a 및 도 23b에서의 송신기 및 수신기에 대한 LinkTransferActive.normal 상태, 및 LTP는 링크를 통해 전송될 준비가 된다. 명확화를 위해, 하기에서는, 데이터가 한 방향으로 전송되는 것에 초점을 맞추며; 링크를 통한 양방향 통신을 지원하기 위해, 유사한 동작이 (레인의 별개의 세트를 사용하여) 반대 방향에서 수행된다.
LTP 송신 스트림(1604)에서의 LTP가 순차적으로 송신됨에 따라, LTP의 데이터는, NxtTxLTP 포인터(1808)가 LTP마다 한 슬롯 앞서면서(또는 최종 슬롯(MyLTPmax)이 도달되면 0으로 다시 행갈이를 하면서), 리플레이 버퍼(1806)로 순차적으로 복제된다. 도 18a에서의 예시된 예시적인 상태의 경우, LTP2-LTP6는, 송신 포트(1800)로부터 이미 송신되었고 LTP2 및 LTP3가 수신 포트(1802)에 의해 이미 수신되었으며, Rx 링크 제어 블록(1805)에 의해 프로세싱되었으며, LTP CRC 일치에 기초하여 양호한 LTP인 것으로 결정되었다. LTP4가 수신될 즈음에, LTP5 및 LTP6는 비행 중이다(이들 LTP에 대한 데이터는 송신기 포트(1800)로부터 아웃바운드로 전송되었지만, 수신 포트(1802)에서 아직 수신되지 않았다). 플로우차트(2200a)로 돌아가면, 메인 플로우차트 루프는, LTP가 수신 포트에서 수신되는 블록(2204)에서 시작한다. 도 18a의 예에서, 이 동작은 LTP4가 수신 포트(1802)에서 수신되는 것에 의해 묘사된다. 블록(2206)에서 묘사되는 바와 같이, 각각의 레인에 대해, 적용가능한 LTP 시퀀스 상태 동안 그 레인을 통해 수신되는 데이터에 기초하여 CRC가 계산되고, CRC는, CRC 레인 레지스터(CRC-L0, CRC-L1, CRC-L2, 및 CRC-L3)에 의해 묘사되는 바와 같은 레인마다의 CRC 레지스터에 기록된다. 일 실시형태에서, 이들 레지스터의 데이터는, CRC 레인 레지스터가 가장 최근에 프로세싱된 LTP에 대한 데이터만을 저장하도록, 현재 LTP에 대한 CRC 계산 결과에 의해 덮어쓰기된다. 일 실시형태에서, 4 레인 링크에 대한 레인당 CRC는, 각각의 레인에 대한 비트가 수신될 때 동적으로 계산되는 12비트 CRC이다.
블록(2208)에서, 수신된 LTP 데이터에 대한 CRC(Rx CRC)가 계산되고, 송신된 LTP에서의 Tx CRC에 비교된다. Tx CRC는, 수신기로 송신될 LTP 데이터를 사용하여 송신 포트(1800)에 의해 계산되고, 본원의 다양한 LTP 포맷에서 예시되는 바와 같이, LTP의 끝에 부착된다. 수신기는 수신된 LTP 데이터로부터 TX CRC를 추출하고 Tx CRC를, 수신된 LTP 데이터에 대해 계산되는 Rx CRC와 비교한다. 결정 블록(2210)에서, 수신된 Tx CRC 및 계산된 Rx CRC가 일치하는지의 여부에 대한 결정이 이루어진다. 이들이 일치하면, LTP는 양호한 것으로 간주되고, 블록(2212)에서 묘사되는 바와 같이, LTP 데이터의 정상 프로세싱이 수행되고, 로직은 블록(2204)으로 복귀하여 다음 번 수신된 LTP를 프로세싱한다.
도 18a에서 도시되는 예에서, Tx CRC 및 Rx CRC는 LTP4에 대해 일치하지 않는데(CRC 불일치), 이것은 LTP 데이터 에러를 나타낸다. 링크 데이터 에러는 다양한 링크 상태로부터 유래하며, 이 때, 에러를 야기하는 특정 링크 상태는 미지이다(unknown); 알려져 있는 것은, 수신되는 LTP 데이터가 송신되었던 것과는 상이하다는 것이고, 따라서 수신된 LTP는 잘못된 데이터를 가지며 더 이상 프로세싱되지 않을 것이다. 불일치된 LTP CRC는 결정 블록(2210)에 대한 아니오 결과에 대응하고, 수신기 상태 도면(2350)에서 RcvBadLTP에 의해 또한 묘사되는 바와 같이, 로직으로 하여금 LTP가 불량인 것으로 묘사되는 블록(2214)으로 진행하게 한다. 불량인 LTP의 검출에 응답하여, 블록(2216)(도 22a), 블록(2218 및 2220)(도 22b)에서의 동작에 의해 묘사되는 바와 같이, 다수의 동작이 초기화되고 실질적으로 병렬로 수행된다.
블록(2216)에서 묘사되는 바와 같이, 불량 LTP에 대해 계산되었던 레인당 CRC 값은 레인 단위 기반 또는 XFR 그룹 단위 기반으로 저장된다. LTP 당 XFR의 수가 레인의 수에 의해 균등하게 나눌 수 있으면, 레인당 CRC 값은 레인 단위 기반으로 저장되고; 그렇지 않으면, 이들은 XFR 그룹 단위 기반으로 저장된다. 예를 들면, 세 개의 활성 레인 및 33개의 XFR을 갖는 링크의 경우, 33/3=11이기 때문에, 레인당 CRC 값은 저장된다. 역으로, 4 레인 또는 2 레인 중 어느 한 경우, 레인당 CRC 값은 XFR 그룹 단위 기반으로 저장된다(33/4=7.5 그리고 33/2=16.5). 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가 활용된다. XRF 그룹당 CRC는, 동일한 XFR에 대해 계산된 CRC를 비교하는 것으로 나타날 것이고, 반면 레인당 CRC 스킴이 사용되었다면, 이것은, 4 레인(25%의 동일할 확률) 또는 2 레인(50%의 동일할 확률)을 갖는 링크를 동작시킬 때 동일한 XFR에 대한 CRC 계산으로 나타날 수도 있거나 또는 나타나지 않을 수도 있다.
도 24에서 도시되는 바와 같이, XFR 그룹당 CRC는 CRC-G0, CRC-G1, CRC-G2, 및 CRC-G3으로 라벨링된다. 이들 CRC가 계산되는 전송은 레인 및 LTP 시퀀스 상태 둘 다에 의존할 것이다. 예를 들면, 제1 LTP 시퀀스 상태의 경우, CRC-G0는 레인0 상에서 수신되는 9개의 XFR(XFR0, XFR4, XFR8, XFR12, XFR16, XFR20, XFR24, XFR28, 및 XFR32)로부터 계산되고, 한편 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 상에서 LTP4에 대해 수신되는 데이터로부터 각각 계산된다. 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)에서 계속하면, 재송신 요청(RetryReq LTP(1812))이 수신기로부터 송신기로 반환되고, NxtRxLTP 포인터(1810)에 대한 현재 값을 통해 불량 LTP를 식별한다. 일 실시형태에서, RetryReq LTP의 순차 쌍이 전송되고, 한편 다른 실시형태에서는, 단일의 RetrReq LTP가 전송된다. 이 예에서, NxtRxLTP 포인터 값은 리플레이 버퍼 슬롯4를 가리키며, 이것은 불량 LTP인 LTP4에 대한 값을 저장한다. RetryReq LTP를 수신하는 것에 응답하여 개시되는 리플레이 모드에 있을 때의 송신기측 동작의 상세는 도 22c의 플로우차트(2200c)에서 도시된다.
블록(2216)에서, 불량 LTP의 검출시 또한, LTP 수신 모드는 블록(2220)에서 'LTP 버림(LTP-tossing)'으로 설정되고, 불량 LTP를 포함해서, 수신된 LTP가 버려지는(tossed)(폐기되는) 것으로 나타나게 된다. LTP 버림 모드(LTP-tossing mode)는 수신기 상태 도면(2350)에서 LTA.RxTossing 상태로서 묘사된다. 수신기가 LTP 버림 모드에서 동작하고 있는 동안, LTP가 수신되고, 레인당 CRC가 계산되고 레지스터가 업데이트되고, 순차적인 LTP CRC 에러를 검출하기 위해 LTP CRC 에러 체크가 수행되고, LTP는 폐기된다. 이들 동작은, 블록(2222)에서 LTP를 수신하는 것으로 시작하는 루프 단위 방식(loop-wise manner)으로 수행된다. 이전과 같이, 블록(2206 및 2208)의 동작이 수행되고, 후속하여 수신된 LTP가 CRC 에러를 갖는지(Tx CRC와 Rx CRC 불일치)의 여부에 대한 결정이 결정 블록(2224)에서 이루어진다. 수신기가 LTP 버림 모드에서 동작하고 있는 동안, 로직은 순차적인 LTP CRC 에러의 발생을 체크하도록 구성된다. 예를 들면, 제1 수신된 LTP가 LTP 버림 모드에 진입한 이후 에러를 가지면, 순차적인 에러가 발생하였다. 순차적인 에러를 검출하기 위한 결정은 결정 블록(2226)에 의해 묘사되는데, 결정 블록(2224)에 대한 대답이 예이면, 이 블록으로 로직이 진행한다. 또한, 총계 LTP CRC 에러 카운트가 블록(2225)에서 증가된다. (총계 LTP CRC 에러 카운트는, 정상 모드에 있든 또는 버림 모드에 있든 간에, 각각의 LTC CRC 에러의 검출에 응답하여 증가된다는 것을 또한 유의한다.)
CRC는, 송신된 데이터 단위, 예컨대 패킷, 프레임 등등에서 에러를 검출하도록 구성되는 데이터 무결성 체크이다. CRC의 수학 공식은 CRC가 비트 송신 에러를 검출하도록 선택되고, 또한 디지털 데이터의 이진 성질을 이용하여, CRC가 이진 양을 통해 재빨리 계산되는 것을 가능하게 한다. 그러나, CRC는 100% 절대 안전한 것은 아니다. CRC 체크는, 비트 에러의 수가 CRC의 해밍 거리(Hamming distance)와 동일하거나 초과하는 경우 에러를 검출하지 못할 수 있다. 네트워크 패브릭에서 사용되는 CRC의 해밍 거리는 통상적으로 4인데, 에러가 검출되지 않을 가능성(극도로 낮은 가능성)을 여는 데 적어도 4비트의 에러가 필요로 한다는 것을 의미한다. 검출되지 않은 링크 에러는, "잘못된 패킷 수락(false packet acceptance)"으로 칭해지는 것으로 나타나게 되는데, 에러를 갖는 패킷이 (잘못하여) 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 에러 체크 및 결정 블록(2226)에서의 순차적인 LTP CRC 에러 체크의 사용을 통하는 것이다. 적어도 하나의 에러가 검출되는 것을 식별하기 위해 CRC가 사용될 수 있지만, 이들은 얼마나 많은 에러가 존재하는지를 식별하지 않는다. 그러나, 순차적인 LTP CRC 에러는, 적어도 두 개의 에러가 순차적인 LTP에 존재한다는 것을 나타낸다. 일 실시형태에서, 순차적인 LTP CRC 에러의 검출에 응답하여, RetrainReq LTP의 쌍은, 탈출 블록(exit block; 2232) 및 송신기 상태 머신(2300)에서의 RcvRetrainReq에 의해 묘사되는 바와 같이, 링크를 재훈련하기위해 빠져나가는 플로우차트 로직으로 나타나게 되는 블록(2228)에서 송신기로 전송된다. 일 실시형태에서, 이 재훈련은, 링크를 초기화하거나 또는 재초기화하는 경우에 활용되는 링크 (재)훈련 동작보다 덜 복잡한 경량의 재훈련이다. 훈련 또는 재초기화 동안, 링크의 정상적인 활성 전송 상태는 오프라인인데, 링크 훈련 또는 링크 재초기화의 완료시 링크가 정상적인 활성 전송 상태로 복귀할 때까지, 정상적인 데이터 전송 동작이 일시적으로 이용불가능하게 된다는 것을 의미한다. 또한, 블록(2230)에서, 수신기는 RetrainReq LTP를 전송했다는 것을 나타내기 위해 몇몇 내부 표시를 설정하고, 링크 순차 에러 타이머가 블록(2231)에서 리셋되는데, 링크 순차 에러 타이머 사용의 추가 상세는 도 22e에서 도시되고 하기에서 설명된다. 훈련 시퀀스의 완료시, 로직은 블록(2218 및 2220)에서 플로우차트(2200b)로 복귀하는데, 여기서는 재시도 요청 LTP(들)가 송신측으로 다시 전송되고 LTP 버림 모드가 수신기에서 재진입된다.
재시도 마커 LTP를 수신하는 것에 응답하여 LTP 버림 모드 루프를 빠져나오고, 따라서, 수신된 LTP가 CRC 에러를 갖지 않으면, 로직은, LTP 버림 모드에 있는 동안 각각의 수신된 양호한 LTP가 재시도 마커인지의 여부에 대한 결정이 이루어지는 결정 블록(2234)으로 진행한다. 재송신 요청을 수신하기 이전에, 송신기는 시퀀스에서 LTP를 계속 송신할 것이고, 이들 LTP는 (만약 있다면) 이미 비행 중인 LTP와 함께 수신될 것이다. 도 22c의 플로우차트(2200c)의 블록(2238, 2240, 및 2242)에서 나타내어지는 바와 같이, 재송신 요청(RetryReq LTP)의 수신시, 송신기는 재시도 마커를 전송할 것이고, 후속하여 리플레이 버퍼(1806)의 LTP의 재송신을 전송할 것인데, 재송신 요청을 통해 반환되는 NxtRxLTP 포인터 값에 의해 나타내어지는 슬롯의 LTP로 시작한다. 일 실시형태에서는, 단일의 재시도 마커가 전송되고, 한편 다른 실시형태에서는 재시도 마커의 쌍이 순차적으로 전송된다. 일 실시형태에서, 재시도 마커의 쌍은 그들이 전송되는 순서에 의해 식별된다(예를 들면, RetryMrkr0, RetryMrkr1). 일 실시형태에서, 재시도 마커의 각각은 널 LTP를 포함한다. 단일의 재시도 마커의 사용의 예는, RetryMrkrLTP(1816)에 의해 묘사되어, 도 18b에서 도시된다. 재시도 마커의 쌍이 전송되는 경우, 제2 재시도 마커(RetryMrkr1)는 RetryMrkrLTP(1816)(RetryMrkr0)을 즉시 따를 것이다는 것이 이해될 것이다.
도 18a의 예에서, 재송신 요청의 수신 이전에 LTP 송신의 이 연속성은, 순서대로, LTP5 및 LTP6(비행 중), LTP7(다음 번에 송신됨), 및 LTP0 및 LTP1을 수신하는 것으로 나타나게 된다. LTP5, LTP6, LTP7, LTP0 및 LTP1의 각각이 재시도 마커가 아니기 때문에, 결정 블록(2234)에 대한 대답은 각각에 대해 아니오이고, 로직은, LTP 버림 모드에 남아 있는 동안, 블록(2236)에서 LTP를 폐기하도록 그리고 그 다음 다음 번 LTP를 수신하기 위해 블록(2222)으로 루프백하도록 진행한다. 후속하여 수신되는 LTP의 프로세싱은, 재시도 마커 LTP가 수신되어 결정 블록(2234)에서 검출될 때까지, 동일한 방식으로 계속된다.
도 18b는, RetryMrkrLTP(1816)가 송신되었고, 수신 포트(1802)에 의해 수신되어 프로세싱되었고, LTP4가 재송신되었고 수신 포트(1802)에 의해 수신되고 있으며, 재송신된 LTP5 및 LTP6(비행 중)이 후속하며, LTP7이 재송신되려고 하는 시간프레임을 묘사한다. LTP4, LTP5, 및 LTP6의 각각은 "리플레이된" LTP를 포함한다. 도 18b에서 도시되는 바와 같이, 슬롯0 및 슬롯1(도 18a에서 도시됨)에서의 리플레이 버퍼 데이터는, 그들의 원래의 송신과 관련한 LTP0 및 LTP1에 대한 대응하는 플릿 데이터로 덮어쓰기되는데, 이것은 RetryReqLTP(1812)를 수신하고 RetryMrkrLTP(1816)을 송신하기 이전에 발생했다.
앞서와 같이, 각각의 신뢰가능한 LTP 송신의 경우, LTP의 데이터는, 각각의 신뢰가능한 LTP에 대해 증가되는 NxtTxLTP 포인터(1808)에 의해 식별되는 바와 같은 리플레이 버퍼(1806)의 슬롯에 복제된다. 따라서, NxtTxLTP 포인터(1808)는, LTP7, LTP0, 및 LTP1의 각각의 전송과 관련하여 증가되었을 것이다(NxtTxLTP 포인터는 7에서 다시 0으로 행갈이를 하는 것을 유의한다). LTP1이 송신되고 있는 동안(또는 바로 전에), 송신 포트(1800)는 RetryReqLTP(1812)를 수신했다. 응답으로, 송신 포트(1800)는 RetryMrkrLTP(1816)(또는 RetryMrkr0LTP와 후속하여 RetryMrkr1LTP를 포함하는 재시도 마커의 쌍)를 반환한다. RetryMrkrLTP(1816)가 널 LTP이기 때문에, 그 데이터 컨텐츠는 리플레이 버퍼(1806)로 복제되지 않으며, NxtTxLTP 포인터(1808)가 증가되지도 않는다. 역으로, Tx LTP 시퀀스 상태는 각각의 LTP에 대해, 그것이 신뢰가능한 LTP인지 또는 널 LTP인지의 여부에 관계 없이, 전진된다.
결정 블록(2234)으로 돌아가면, RetryMrkrLTP(1816)의 수신시, 그것은 재시도 마커로서 식별되고, 플로우차트 로직은 도 22d의 플로우차트(2200d)로 진행한다. 블록(2252)에서 도시되는 바와 같이, 재시도 마커가 프로세싱되고, 수신기는 다가오는 리플레이된 불량 LTP의 수신을 준비하도록 카운트다운 값을 설정한다. 일 실시형태에서, 재시도 마커 이후에 불량 LTP의 재송신이 k개의 LTP를 시작할 것이라는 것을 나타내기 위해, 재시도 마커에 대한 불량 LTP 리플레이 오프셋이 활용된다. 재시도 마커의 쌍을 활용하는 일 실시형태에서, 불량 LTP 리플레이 오프셋은 제2 재시도 마커에 대해 1 적다. 블록(2240)에서 또한 묘사되는 바와 같이, 불량 LTP 리플레이 오프셋의 관점에서, 수신기는 LTP 오프셋에 기초하여 불량 LTP 리플레이 카운트다운을 개시한다. 이것은 블록(2256)에서 불량 LTP의 리플레이를 검출하기 위해 사용된다. 또한, 수신기는 블록(2254)에서 왕복 마커 LTP(또는 왕복 마커 LTP의 쌍)을 반환하고 LTP 수신 모드(수신 상태)는 블록(2254)에서 정상으로 복귀하면서, 다음 번 패킷을 수신하기 위해 플로우차트 로직이 블록(2204)으로 복귀한다. 이것은 RndTripMrkr 쌍 전송 상태에 의해 묘사되며 수신기 상태 도면(2350)에서 LinkTransferActive.normal 상태로 복귀한다. 도 18c를 참조로 하기에서 설명되는 바와 같이, 왕복 마커 LTP(들)는, 리플레이 버퍼 LTP가 덮어쓰기될 수 있는지의 여부에 대한 결정을 가능하게 하기 위해, 재시도 마커 LTP(들)에 응답하여 반환된다.
RetryMrkrLTP(1816)(또는 RetryMrkr0LTP 및 RetryMrkr1LTP)의 송신에 후속하여, LTP의 리플레이(재송신)이 개시되는데, RetryReqLTP(1812)에서 반환되는 NxtRxLTP 포인터에 의해 식별되는 불량 LTP(이 예에서는 LTP4)의 재송신으로 시작한다. 송신기가 리플레이 모드에 있는 동안, 송신된 데이터는 리플레이 버퍼(1806)에 저장되어 있는 LTP의 재송신을 포함할 것이다. 재송신된 LTP는 리플레이 버퍼의 FIFO에서의 그들의 순서에 기초하여 그리고 NxtRxLTP 포인터에 의해 가리켜지는 LTP로 시작하여 송신 포트(1800)로부터 순차적으로 전송된다.
각각의 송신된 LTP에 대해, 송신된 데이터는 LTP가 원래 전송되었던 때와 동일하다. 불량 LTP 리플레이 카운트다운(그리고 리플레이된 불량 LTP를 수신하는 것과 관련되는 동작) 밖에서, 수신측 로직은, 수신된 LTP 데이터가 원래 송신된 LTP에 대응하는지 또는 재송신된 LTP에 대응하는지의 여부에 무관하다. 따라서, 블록(2204, 2206, 및 2208) 및 결정 블록(2210)의 동작이 수행되어, 레인당 CRC 계산, 수신된 LTP 데이터에 걸친 Rx LTP CRC의 계산, 및 Tx LTP CRC에 대한 Rx LTP CRC의 비교를 초래하게 된다. 결정 블록(2210)에서의 아니오 결과에 의해 나타내어지는 바와 같이, 에러가 없다면, 불량 LTP가 다시 재송신될 새로운 리플레이 시퀀스를 잘못 재송신된 LTP가 개시하면서, 로직은 블록(2214)으로 복귀한다. 이것은 불량 LTP4 및 리플레이 버퍼(1806)로부터의 그것의 후속하는 LTP의 재송신과 연계하여 상기에서 논의된 동작을 본질적으로 반복할 것이다.
재송신된 불량 LTP4가 양호하다고 가정하면, 로직은 블록(2258)으로 흐른다. 이 블록에서, 레지스터(CRC-G0, CRC-G1, CRC-G2, 및 CRC-G3)에 이미 저장되어 있던 레인당 CRC 값은, 재송신된 LTP4에 대해 각각의 레인을 통해 수신되는 데이터에 대해 계산되는 레인당 CRC에 비교되는데, 비교는, 동작 레인의 수에 따라, 레인 단위 기준 또는 XFR 그룹 단위 기준으로 이루어진다(레인당 비교 및 XFR 그룹당 비교는 전송 그룹의 수가 동일한 경우 등가이며, 다라서 XFR 그룹당 비교는 항상 수행될 수 있을 것이다는 것을 유의한다). 상기로부터, 레인당 CRC는 4 레인 링크에 대해 XFR 그룹 기반으로 비교된다.
각각의 송신된 LTP에 대한 Tx LTP 및 Rx LTP 시퀀스 상태의 계속된 증가와 관련하여, LTP4가 재송신되는 경우, LTP가 원래 송신되었을 때의 1의 LTP 시퀀스 상태와 비교하여, LTP 시퀀스 상태는 3이다. 결과적으로, 각각의 레인을 통해 송신된 XFR 그룹은 변경되었다. 레인 대 XFR 그룹의 이 재매핑은 도 25에서 예시되며, 도 18a 및 도 18b의 각각의 레인을 통해 전송된 XFR을 비교하는 것에 의해 또한 알 수 있다. 상기에서 논의된 바와 같이, LTP4가 원래 송신되었을 때, LTP 시퀀스 상태는 1이었고, 한편 LTP4가 재송신될 때(도 25에서 4R에 의해 묘사됨), LTP 시퀀스 상태는 3이다. 도 18b로 돌아가면, 재송신된 LTP4에 대한 레인당 CRC는 레인0, 레인1, 레인2, 및 레인3에 대해 계산되고, 그 다음, XFR 그룹당 CRC 비교는 플로우차트(2200d)의 블록(2258)에서 수행되며, 불량 레인은, 적용되는 바에 따라, 불일치된 레인당 또는 XFR 그룹당 CRC를 식별하는 것에 의해 블록(2260)에서 식별된다. 도 18a 및 도 18b의 예에서, XFR 그룹당 CRC 비교의 결과는, CRC-G0, CRC-G1 및 CRC-G3에 대한 CRC가 일치하고, 한편 CRC-G1에 대한 CRC가 일치하지 않는다는 것을 나타낸다. 이것은, 잘못된 LTP4가 원래 송신되었을 때 그것에 대해 CRC-G1 값이 계산되었던 XFR 그룹에 레인2가 대응하기 때문에, 레인2가 잘못되어 있다는 것을 나타내는데, 재송신된 LTP4에서 검출되는 LTP CRC 에러가 존재하지 않았기 때문에, 리플레이된 LTP4에 대해 레인2를 통해 송신되는 데이터에서도 또한(아마도) 에러가 존재하지 않는다는 것을 유의한다. 블록(2261)에서, 식별되는 불량 레인에 대한 에러 카운트는 증가된다. 레인이 간헐적으로 잘못되는 시나리오를 고려한다. 상기에서 논의된 바와 같이, 결정 블록(2226) 및 관련 로직 블록의 순차적인 LTP CRC 에러 체크는, 링크를 통해 송신되는 데이터에서의 밀접하게 이격된 에러를 검출하기 위한 하나의 메커니즘이다. 이 메커니즘이 아주 밀접하게 이격된 에러를 검출하지만(순차적인 LTP에서의 에러를 필요로 함), 그것은 어떤 레인이 잘못되어 있는지를 식별할 수 없고, 또한 개개의 레인 상에서 얼마나 자주 순차적인 에러가 발생하고 있는지를 식별할 수 없다.
제2 BER 체크 메커니즘의 실시형태에 따르면, 주어진 레인에 대한 에러 빈도(BER)가 레인당 BER 임계치를 초과하는지의 여부를 결정하기 위해, 레인당 에러 빈도가 모니터링된다. 일 실시형태에서, 이것은, (플로우차트(2200d 및 2200e)에서 묘사되는 그리고 병렬 방식으로 수행되는 다른 동작 및 로직과 연계한) 레인마다의 순차적인 에러 카운터 및 타이머의 사용을 통해 달성된다.
결정 블록(2262)에서, 수신기에 의해 개시되는 링크 재훈련 상태로부터 수신기 상태가 유래하고 있는지의 여부에 대한 결정이 이루어진다. 플로우차트(2200b)에서의 로직에 의해 도시되고 상기에서 설명되는 바와 같이, 순차적인 LTP CRC 에러의 검출은, 수신기가 에러를 검출하는 것에 의해 개시되는 링크 재훈련으로 나타나게 될 것이다. 역으로, 단일의 LTP CRC 에러가 재시도 요청을 마찬가지로 개시할 것이지만, 재시도 마커 수신 시퀀스 그것은 링크 재훈련의 개시로 나타나지 않을 것이다. 리플레이된 LTP가 양호하고 수신 상태가 링크 재훈련으로부터 유래하지 않으면(즉, 단일의 LTP CRC 에러만이 검출되었다면), 결정 블록(2262)에 대한 대답은 아니오이고, 로직으로 하여금, LTP가 마치 그것이 원래 전송된 LTP였던 것처럼 프로세싱되는 블록(2264)으로 흐르게 한다. 그 다음, 로직은 플로우차트(2200a)로 복귀하여, 후속하여 리플레이된 LTP를, (수신기의 관점에서) 그들이 처음 전송되고 있는 것으로, 프로세싱한다.
이제, 두 개의 순차적인 LTP CRC 에러가 수신기에 의해 검출되었다고 가정하면, 수신기에 의해 개시되는 링크 재훈련으로 나타나게 되고, 결정 블록(2262)에 대한 대답은 예이고, 로직이 블록(2266)으로 진행하는 것으로 나타나게 된다. 이 블록에서, 블록(2260)에서 결정되었던 불량 레인에 대한 순차적인 에러 카운터는 증가된다. 결정 블록(2268)에서, 레인에 대한 순차적인 에러 카운트가 임계치에 도달했는지의 여부에 대한 결정이 이루어진다. 일반적으로, 임계치는, 1, 2 등등과 같은 정수일 것이다. 일 실시형태에서, 임계치는 2이고, 따라서 하나의 타이머 기간 내에 하나의 레인 상에서의 2개의 순차적인 에러는, 레인 BER 임계치 검출이 작동되게(tripped) 한다. 응답으로, 일 실시형태에서, 로직은, 불량인 것으로 검출된 레인이 제거되어 링크가 재초기화되는 탈출 블록(2270)으로 진행한다. 결과적으로, 링크에 대한 활성 레인의 수는 하나의 레인만큼 감소될 것인데, 예컨대 4레인 링크가 세 개의 활성 레인으로 저하된다.
레인당 순차 에러 카운트가 임계치에 도달하지 않았다면, 결정 블록(2268)에 대한 대답은 아니오이고, 로직은, 수신기가 자신의 정상 수신 상태에서 동작하고 송신기가 여전히 리플레이 모드에서 동작하는 상태에서, 블록(2204)으로 진행하여 다음 번 LTP를 수신한다.
상기에서 논의된 바와 같이, 일 실시형태에서, 타이머 스킴은 레인당 순차 에러의 빈도를 검출하기 위해 사용된다. 상기로부터, 로직은, 순차적인 불량 LTP의 검출에 응답하여 블록(2231)으로 진행하고, 도 22e의 플로우차트(2200e)에서 나타내는지는 바와 같이, 타이머 스킴을 구현하기 위한 병렬 동작의 세트가 개시된다. 블록(2272)에서, 적용되는 바에 따라, 타이머가 시작되거나(최초) 또는 재시작된다(리셋). 결정 블록(2274)에 의해 묘사되고 그 자체로 루프백하는 바와 같이, 타이머는 그것이 만료되었는지의 여부를 결정하기 위해 주기적으로 체크되거나, 또는 옵션적으로는, 타이머 로직은 그것이 만료되었다는 것을 나타내기 위해 인터럽트 또는 다른 표시를 생성하도록 구성될 수 있다. 타미어의 만료시, 각각의 레인에 대한 불량한 순차적인 에러 카운터는, 블록(2276)에서 묘사되는 바와 같이, 감소된다. 일 실시형태에서, 최소 불량 에러 카운트는 0이고, 따라서 이미 0인 레인 에러 카운트에 대해, 그 카운트는 감소되지 않는다.
병렬 프로세스의 조합은, 다음의 방식으로, 개개의 레인 상의 에러가 빈도 임계치를 초과했다는 것을 검출한다(예를 들면, 밀접하게 이격된 에러를 나타내는 레인을 식별한다). 플로우차트 동작이, 블록(2258, 2260)을 통과하는 로직으로 나타날 때마다, 그리고 결정 블록(2264)의 결과가 예이면, 불량 레인에 대한 순차 에러 카운트는 증가될 것이다. 한편, 병렬 타이머 동작을 고려하여, 매번 타이머가 재시작되지 않고 만료하는 것은, 타이머의 시간 기간이 레인당 에러 없이 경과했다는 것을 나타내며, 따라서 각각의 레인에 대한 레인당 순차 에러 카운트는 1만큼 (0의 최소치까지) 감소된다. 일 실시형태에서, 두 개가 충돌하고 레인은 아웃되는데, 이것은 레인이 타이머 기간 내에 두 개의 순차 에러를 갖는 것에 대응한다.
단일의 타이머 외에, 다수의 타이머가 상이한 시간 기간 및 상이한 관련 카운트 임계치를 가지고 병렬로 사용될 수도 있다. 예를 들면, 이것은 레인당 동작의 더 오랜 기간의 모습(view)이 관측되는 것을 가능하게 할 것이고, 동시에 또한 더 짧은 레인당 BER 임계치 검출을 용이하게 할 것이다. 시간 기간에 필요한 순차 에러의 수의 임계치도 또한 변경될 수도 있다.
플로우차트(2200a-2200e)에서 묘사되는 실시형태 하에서, 불량 레인의 제거와 결합된 링크의 재초기화는, 밀접 이격된 에러를 나타내는 레인의 검출로부터 유래한다.
그러나, 순차적인 LTP CRC 에러의 검출에 후속하여 탈출 블록(2232)을 통해 빠져나올 때와 같은 다른 조건 하에서 링크의 재초기화 및/또는 링크의 재훈련과 연계하여 레인이 제거될 수도 있기 때문에, 이것은 제한적인 것으로 의도되지는 않는다. 예를 들면, 링크가 재초기화되는 경우, 레인당 에러 카운터는, 에러 카운트가 어떤 임계치를 초과했는지를 확인하기 위해 체크된다. 초과 했다면, 레인은 불량으로 마킹되고 링크가 활성 동작으로 복귀할 때 활성화되지 않는다.
암시적인 ACK를 갖는 신뢰가능한 LTP 송신의 다른 양태는, 리플레이 버퍼의 LTP가 그것이 에러 없이 수신되었다는 암시적인 확인 이전에 덮어쓰기되지 않는 것을 보장하기 위한 메커니즘이다. 일 실시형태에서, 이것은 재시도 요청 및 왕복 마커의 사용을 통해 가능하게 된다. 상기에서 논의되는 바와 같이, 몇몇 실시형태에서, 리플라이 버퍼는 고정된 사이즈를 가지거나 또는 다수의 고정된 사이즈 중 하나를 사용하여 동작하게끔 설정되도록 구성될 수 있다. 또한, 링크 피어의 쌍이 상이한 사이즈의 리플레이 버퍼를 활용할 수도 있다.
고정된 사이즈의 리플레이 버퍼의 사용 하에서, 리플레이 버퍼는 일반적으로, 다양한 프로세싱 레이턴시를 추가적으로 고려하여, 링크의 왕복 순회(roundtrip traversal) 동안 전송될 수 있는 LTP의 수보다 더 많은 LTP의 수를 유지하도록 사이즈가 정해질 것이다. 이것은 도 18a 및 도 18b에서 예시되는 경우인데, 여기서는 리플레이 버퍼가 8개의 슬롯을 가지며, 링크 및 링크 경로를 통해 반대 방향으로 동시에 왕복 순회할 수 있는 LTP의 수는 대략 6 또는 7개의 LTP이다. 결과적으로, 수신기에서 검출되는 에러가 존재하면, 송신기는, 리플레이 버퍼에서의 불량 LTP의 사본이 덮어쓰기되기 이전에 재시도 요청을 수신할 것이다.
그러나, 실용적인 이유로, 고정된 사이즈의 리플레이 버퍼는 모든 가능한 링크 길이를 핸들링하도록 사이즈가 정해지지 않는다. 링크의 길이가 길수록, 재시도 요청을 수신하기 이전에 리플레이 버퍼로부터 전송될 수 있는 LTP의 수는 더 많아진다. 어떤 시점에, 링크 길이는, 리플레이 버퍼에서의 불량 LTP의 사본이 그 불량 LTP에 대한 재시도 요청을 수신하기 이전에 덮어쓰기되지 않는다는 것을, 재시도 요청 스킴의 단독의 사용이 보장하지 않을 그런 것일 것이다.
이것은 왕복 마커의 사용이 적합되는 경우이다. 플로우차트(2200c)로 돌아가면 결정 블록(2244)에서, 왕복 마커의 수신 없이 모든 LTP의 리플레이가 완료되었는지의 여부에 대한 결정이 이루어진다. 도 18c에서 예시되는 구성 하에서, 리플레이 버퍼(1806)에 다시 8개의 FIFO 슬롯이 존재하지만, 링크 길이는, 5개의 LTP가 한 번에 "와이어 상에" 있을 수 있는 그러한 것인데, 적어도 10개의 LTP가 왕복 통과 중에 있을 수 있고/있거나 수신기에서 프로세싱 중에 있을 수 있다는 것을 의미한다. 결과적으로, LTP 중 임의의 것에 대한 재시도 요청을 수신하기 이전에 리플레이 버퍼에서의 LTP 사본의 전체가 재송신될 수 있어서, 잠재적으로 불량인 LTP의 사본이 덮어쓰기되는 것으로 나타나게 된다. 이것은 불량 LTP가 재송신되는 것을 방지할 것이고, 리플레이 버퍼의 목적을 억누르게 된다.
이 시나리오를 수용하기 위해, 송신기는, 결정 블록(2244)에서 도시되는 바와 같이, 왕복 마커를 수신하기 이전에, 송신기가 리플레이 LTP의 끝에 도달했는지의 여부를 검출하기 위한 로직을 포함한다. 본질적으로, 이것은, 리플레이 버퍼의 깊이가 왕복 지속시간보다 작은지 또는 큰지의 여부를 결정한다. 리플레이 LTP의 끝에 도달하는 것은, 최초 리플레이된 LTP의 시작(FIFO 슬롯)으로 다시 행갈이를 하는 리플레이 포인터에 의해 검출된다.
도 18c에서, 최초 리플레이된 LTP 슬롯은 슬롯4이며, 슬롯4, 슬롯5, 슬롯6, 슬롯7, 슬롯0, 슬롯1, 슬롯2, 및 슬롯3의 LTP는 순차적으로 재송신되었고, 왕복 마커(1822a 및 1822b)의 쌍의 최초 왕복 마커를 수신하기 이전에, 리플레이 LTP 포인터를 슬롯4로 반환한다. 이것은, 왕복 마커를 수신하기 이전에, 리플레이 LTP의 끝이 도달되는 예를 예시하며, 왕복 지속시간이 리플레이 버퍼의 깊이보다 더 크다는 것을 나타낸다. 이것은 결정 블록(2244)에 대한 대답이 예인 것으로 나타나게 되고, 로직은 블록(2245a)로 진행하는데, 여기서는 송신기에 대한 널 카운터(Nullcount)(n)가 정수 k로 리셋된다. 블록(2246a) 및 아니오 결과가 블록(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)는, 안전 마진(safety margin)을 제공하기 위해 블록(2245)에서 k>0의 값으로 리셋될 수 있고, 그 결과 리플레이 버퍼를 통한 각각의 싸이클의 끝에서 k개의 여분의 널 LTP가 송신될 것이다. Nullcount 방식의 고유의 이점은, 그것이 실질적으로 임의의 길이의 링크를 지원하도록 구현될 수 있다는 것이다(물리적인 링크의 길이에는 실용적 한계가 존재하며, 이 한계를 넘는 길이를 갖는 링크의 제조 및/또는 구현은 가능하지 않거나 또는 현실적이지 않다는 것을 인식한다).
결정 블록(2224)로 돌아가면, 제1 FIFO 슬롯에 도달하기 이전에 왕복 마커가 수신되면, 결정 블록(2244)에 대한 대답은 아니오이고, 로직은, Nullcount(n)가 정수 m으로 리셋되는 블록(2245b)로 진행한다. 블록(2246b) 및 아니오의 결과가 블록(2246b)으로 루프백하는 결정 블록(2249)에 의해 묘사되는 바와 같이, 그 다음, 송신기는, 버퍼 포인터가 행갈이를 하여 자신의 시작 슬롯으로 복귀될 때까지 또는 Nullcount(n)가 제로에 도달할 때까지, LTP를 수신기에 계속 리플레이하도록 진행하는데, 이 경우 Nullcount 카운트다운은 m으로 시작하고 각각의 송신된 신뢰가능한 LTP에 대해 1만큼 감소된다. 결정 블록(2249)에 대한 예 결과에 응답하여, 로직은 이 Nullcount 카운트다운 루프를 빠져나오고 블록(2250)으로 진행한다. Nullcount 카운트다운의 사용은, 버퍼 깊이가 왕복 지속시간보다 더 크지만 왕복 지속시간의 m 개의 LTP 전송 싸이클 내에 있는 구성에 대해 대략 m 개의 LTP 전송 싸이클의 안전 마진으로 나타나게 된다. 예를 들면, 버퍼 깊이가 32 슬롯이고 왕복 지속시간이 30회의 LTP 전송 싸이클과 동등하며, m=5라고 가정한다. 이 경우, 로직이 카운트다운 루프를 빠져나갈 때 m은 3일 것이다. 이것은, 버퍼가 자신의 시작(슬롯0)으로 행갈이를 하는 리플레이마다, 슬롯0의 LTP를 덮어쓰기 이전에, 3개의 여분의 널 LTP가 송신될 것임을 의미한다.
버퍼 깊이가 32 슬롯이기 때문에, 덮어쓰기되는 리플레이 버퍼 슬롯 사이의 LTP 싸이클의 수는 35이거나, 또는 왕복 지속시간보다 5 더 많다.
불량 레인의 검출에 응답하여, 링크는 감소된 수의 활성 레인을 가지고 저하된 상태에서 동작될 수도 있다. 또한, 이 링크 저하된 상태는 캐스케이드식일 수도 있고, 따라서, 링크는, 네 개의 활성 레인으로 시작해서, 제1 불량 레인을 검출하여 그 불량 레인을 제거하고, 세 개의 활성 레인을 갖는 링크 동작으로 이어지고, 제2 불량 레인을 검출하여 그 제2 불량 레인을 제거하고, 두 개의 활성 레인을 갖는 링크 동작으로 이어지는 것과 같은 시퀀스에서 동작될 수도 있다. 이 캐스케이드는 제3 불량 레인의 검출로 계속될 수 있고, 단일의 남아 있는 양호한 레인을 통한 링크 동작으로 이어지게 된다. 링크는 비대칭 구성에서 동작될 수도 있고, 따라서 하나의 송신 방향은 다른 송신 방향과는 상이한 수의 활성 레인을 사용할 수도 있다는 것을 또한 유의한다.
도 26은, 일 실시형태에 따른, 세 개의 활성 레인을 갖는 링크를 동작시키기 위한 XFR 그룹을 묘사한다. 이 경우, 세 개의 XFR 그룹(G0, G1, and G2)이 존재하며, 대응하는 CRC는 CRC-G0, CRC-G1, 및 CRC-G2이다. LTP 시퀀스가, 레인 변경 없이 XFR 패턴이 반복되는 단일의 상태만을 가지기 때문에, 동일한 XFR 그룹은 동일한 각각의 레인을 통해 송신된다. 결과적으로, 레인당 CRC 비교는 레인 단위 기반으로 이루어질 수 있거나, 또는 다르게는 XFR 그룹 단위 기반은 LTP 시퀀스 상태를 고려하지 않는다. 3개의 레인 하에서, 각각의 레인에 대해 11개의 32비트 전송이 존재하며, 표준 검출 LTP마다 각각의 레인을 통해 송신되는 352비트로 나타나게 된다. 일 실시형태에서, 세 개의 활성 레인 하에서 동작할 때 16비트의 레인당 CRC가 사용된다.
도 27은, 일 실시형태에 따른, 두 개의 활성 레인을 갖는 링크를 동작시키기 위한 XFR 그룹을 묘사한다. LTP마다 33개의 32비트 전송이 존재하기 때문에, LTP 송신 스트림에 대해 레인0 및 레인1의 각각을 통해 전송되는 비트의 수는 512비트와 544비트 사이에서 교대할 것이다. 결과적으로, 두 개의 시퀀스 상태를 사용하여 XFR 그룹당 레인당 CRC 비교 방식이 구현된다. 또한, 16비트의 레인당 CRC가 일 실시형태에서 사용된다.
도 28은, 일 실시형태에 따른, 단일의 활성 레인을 갖는 링크를 동작시키기 위한 XFR 그룹을 묘사한다. LTP 데이터가 전송되는 단일의 레인만이 존재하기 때문에, 잘못될 수 있는 유일한 레인이다. 결과적으로, 레인당 CRC 비교를 수행할 필요가 없다.
그러나, 하나보다 많은 레인을 갖는 링크가 단일의 레인 하에서 동작하는 것으로 저하되는 레인 저하(lane degradation) 시나리오 하에서, 단일의 레인에 대해 레인당 CRC 계산이 여전히 계산될 수도 있는데, 이것이 항상 수행되는 방식으로 하드웨어로 구현될 수도 있기 때문이다. 이 경우, 레인당 CRC 계산은 간단히 무시된다.
상기에서 논의된 바와 같이, 본원에서 개시되는 실시형태 하에서, 링크는, 명시적인 ACK의 사용 없이, 신뢰가능한 데이터 송신을 지원한다. LTP가 링크를 통해 송신되고 있을 때 (케이블이 절단되는 것과 같은 이벤트 없이는) 손실될 수는 없지만, 그것은 에러를 포함할 수 있다. 송신기로부터 수신기로 그리고 다시 송신기로 왕복을 완료하는 데 걸리는 시간만큼 적어도 긴 시간 기간 내에서 송신기에서 재시도 요청을 수신하는 것의 결여를 통해 암시적인 확인응답 스킴이 구현된다는 것을 상기한다. 재시도 요청이 송신된 데이터와는 상이한 레인의 세트를 통해 전송되기 때문에, 단일의 재시도 요청이 에러를 가질 수 있고, 따라서 버려질 수 있다는 것이 가능하다. 결과적으로, 수신측 링크 인터페이스는, 송신측 링크 인터페이스에게, 자신이 잘못된 LTP를 수신했다는 것을 통지하도록 시도할 수 있지만, 그 통지(재시도 요청에 의해 나타내어짐)는 버려질 것이다. 이것은, RetryReqLTP의 순차 쌍 및 다른 널 LTP의 쌍(예를 들면, RetryMrkr0, RetryMrkr1)의 전송이 암시적인 ACK 스킴을 가능하게 하는 것을 돕는 경우이다.
먼저, 이들이 널 LTP이기 때문에, 이들은 리플레이 버퍼에 저장되지 않으며, 따라서 재송신에 이용가능하지 않다. 그러나, 널 LTP의 순차 쌍을 전송하는 것에 의해, 두 개의 이벤트 중 하나가, 1) 에러 없이 적어도 하나 또는 두 개의 널 LTP의 성공적인 수신을 초래할 것이다는 것; 또는 2) 두 LTP가 에러를 가지면, 이것은 순차적인 LTP 에러로서 검출될 것이고, 링크의 재훈련을 트리거한다는 것을 초래할 것이다는 것이 보장된다. (재)훈련 동안, 훈련 시퀀스는, 링크 파트너의 송신기-수신기 쌍 둘 다에 의해 수행되며, 따라서 양 방향에서의 링크에 대한 적절한 동작은, 링크를 활성 동작으로 복귀시키기 이전에, 검증된다. 재훈련이 완료되면, 송신측은, 재시도 마커(들)를 전송한 이후 새로운 LTP의 전송을 시작하기(또는 LTP의 리플레이를 계속하기) 이전에 수신측으로부터 보증된 재시도 요청을 대기한다(한 동안 널 LTP를 전송함). 이들 널 패킷의 쌍을 전송하는 것의 다른 이점은, LTP 중 적어도 하나가 양호할 가능성을 증가시키는 것이다.
포트, 버퍼, 및 크레딧 관리
도 29는, 스위치에 대한 그리고 HFI에 대한 아키텍쳐 레이어 및 서브 레이어와 포트 사이의 관계를 예시한다. 스위치는 패킷을 패브릭 엔드포인트로 포워딩하며, 입구(수신) 포트 및 출구(송신 포트)를 각각 포함하는 다수의 물리적 포트를 갖는다. 상기에서 논의된 도 2을 추가로 참조하면, 이들 포트의 각각은, 링크 패브릭 서브 레이어(L2)와 인터페이싱하는 링크 전송 서브 레이어(L1.5)와 인터페이싱하는 물리적 서브 레이어(PHY)(L1)를 포함한다. 이 섹션은, HFI 및 스위치 디바이스 둘 다에 대한 아키텍쳐의 링크 패브릭 서브 레이어와 링크 전송 서브 레이어 사이에서 패킷 데이터를 이동시키는 것을 가능하게 하는 포트의 양태에 관한 것이다. 포트의 컴포넌트는 입구 및 출구 버퍼 관리, SC 및 VL 변환 메커니즘(translation mechanism), 라우팅 방법 및 정의, 크레딧 관리 및 출구 포트 중재이다. HFI 애플리케이션은 패킷을 구축하고 그 다음 링크 전송 서브 레이어로의 송신 이전에 라우팅 및 스케줄링을 위해 그들을 포트로 전송한다. 역 방향에서, 포트는 수신 버퍼로 패킷을 전송하고 출구 포트 목적지를 선택한다. 아키텍쳐는, 송신기 및 수신기 포트의 쌍(송신기-수신기 피어로 또한 칭해짐) 사이에서 크레딧 기반의 플로우 제어 정책이 구현되는 패브릭에 걸친 패킷의 플로우를 제어하기 위해 크레딧 기반의 플로우 제어 스킴을 활용한다. 패킷은, 패킷이 패브릭을 통과하는 동안 일시적인 저장을 제공하는 일련의 버퍼를 통해 디바이스(HFI/스위치)로부터 디바이스(스위치/HFI)로 흐른다. 플로우 제어는, 디바이스A의 패킷이 디바이스B의 버퍼로 포워딩될 수 있는 때를 제어하는 메커니즘이다. 하기에서 설명되는 바와 같이, 버퍼는 VL을 할당받고 VL 기반으로 관리되는데, 각각의 VL은 버퍼 공간의 할당된 단위이다. 크레딧 기반의 플로우 제어 스킴은, VL 버퍼를 버퍼 오버런으로부터 보호하고 또한 링크에 대해 경쟁하는 VL 사이에서 공평성을 제공한다.
플로우 제어의 한 양태에 따르면, 크레딧 관리에 대해 유연한 메커니즘이 제공된다. 신뢰가능한 증분적 크레딧 반환을 가능하게 하는 링크 레이어 재시도의 사용을 통해, 아키텍쳐는 크레딧 관리 및 송신기의 책임 추적을 행할 수 있다. 이것은 트래픽이 비행 중인 동안 크레딧을 이리저리 이동시키기 위한 유연성을 가능하게 한다. 그것은 또한, 주어진 VL 상에서 어떤 크레딧도 이용가능하지 않은 경우 송신기가 패킷을 차단해야 하는지 또는 폐기해야 하는지의 여부를 송신기에게 간단히 알려주는 것에 의해, 플로우 제어가 쉽게 인에이블 또는 디스에이블될 수 있다는 것을 또한 의미한다.
크레딧 기반의 플로우 제어를 위한 유연한 메커니즘은 다음의 특성을 정의한다:
● 많은 가상 레인에 걸친 효율적인 증분적 크레딧 교환을 허용하기 위해 신뢰가능한 전송 프로토콜을 이용함
● 크레딧 할당의 관리가 송신기에 의해 단독으로 수행되는 것을 허용함
● 링크가 수신 거부되는 것을 필요로 하지 않으면서, 트래픽이 흐르고 있는 동안 VL마다의 크레딧의 재구성을 허용함
● 송신기에 의해 구성되는 대로, 플로우 제어와 함께 또는 플로우 제어 없이 동작할 수 있음
● 크레딧 교환 및 할당의 단위가 수신기에 의해 정의되는 것을 허용함, 그래서 상이한 하드웨어 설계 사이에서의 상호운용성을 허용함
● 크레딧이 단일의 VL에 전용되는 것, VL의 그룹에 대해 공유되는 것, 및/또는 모든 VL에 대해 공유되는 것을 허용함
크레딧은 로그 스케일(logarithmic scale)을 사용하여 증분적으로 교환된다. 수신기는 반환되고 있는 크레딧의 수를 다시 송신기로 전달한다. 이 메커니즘은, 모든 교환(크레딧, 패킷, 다른 제어 메시지)이 신뢰성 있게 발생한다는 것을 보장하는 신뢰가능한 링크 전송 메커니즘의 존재로 인해 가능하다.
증분적 크레딧 교환을 사용하는 것은, 송신기가 크레딧의 모든 추적을 행하는 것을 허용한다. 결과적으로, 주어진 VL에 대해 이용가능한 크레딧은, 트래픽 플로우에 영향을 주지 않으면서 그리고 수신기와의 재구성을 조화시킬 필요 없이 재구성될 수도 있다. 이것은, 비행 중인 트래픽에도 송신기에서 큐잉되는 트래픽에도 영향을 주지 않으면서, 이러한 재구성이 발생하는 것을 허용한다. 플로우 제어는 또한 독립적인 VL에 대해 인에이블되거나 디스에이블될 수도 있다. 예를 들면, 일 실시형태에서, 주어진 VL에 대해 플로우 제어가 디스에이블되면, 크레딧 매니저는, 현재 이용가능한 크레딧이 불충분하면, 주어진 VL에 대한 패킷을 폐기할 것이다. 플로우 제어가 인에이블되면, 크레딧 매니저는 VL에 역압을 가하여, 패킷(에 대한 플릿)을 송신하기 이전에 충분한 크레딧이 이용가능하게 되기를 대기할 것이다. 플로우 제어는 관리 프로토콜에 대한 토폴로지 데드락을 방지하기 위해 또는 혼잡을 식별하기 위한 수단으로서 패킷 손실을 사용하는 TCP/IP와 같은 프로토콜을 가능하게 하기 위한 이더넷형 링크 레이어 거동을 제공하기 위해 디스에이블될 수도 있다.
도 30은 한 쌍의 피어 디바이스A와 피어 디바이스B 사이의 링크에 대한 크레딧의 사용의 양태의 일 예를 도시한다. 디바이스A는 크레딧 매니저(3002a)를 포함하는 송신 포트(3000a), 및 초기화 블록(3006a) 및 복수의 VL FIFO 버퍼(3008a)를 포함하는 수신 포트(3004a)를 포함한다. 디바이스B는 동일한 도면부호의 엘리먼트에 의해 묘사되는 바와 같이 마찬가지로 구성되지만, "a" 대신 "b"가 붙어 있다.
일반적으로, 각각의 디바이스 포트는 버퍼 사용을 위해 할당되는 메모리를 포함할 것이다. 주어진 포트에 대한 버퍼 공간의 총 사이즈는, 포트의 호스트 디바이스에 의해 지원되는 VL의 수 및 포트에 연결되는 링크에 대한 예상 케이블 길이와 같은 다양한 인자에 의존할 수도 있다. VL 버퍼의 사이즈 결정은 설계 성능에 큰 영향을 끼칠 수 있다. 버퍼링이 너무 작고 송신기로부터 수신기로의 왕복 시간(Round Trip Time (RTT))을 커버하지 못하면, 최대 대역폭은 달성될 수 없다. 버퍼가 너무 크면, ASIC 면적 및 전력에 영향을 끼칠 수도 있다. 일 실시형태에서, 패브릭 패킷에 대한 플릿은, 전체 FP에 대해 충분한 버퍼 공간이 존재하는 경우에만 다음 홉으로 송신되도록 허용된다. 다른 실시형태에서, FP에 대한 플릿의 초기 전송은, 패킷의 일부를 저장하는 데 이용가능한 약간의 버퍼 공간이 존재하면 전송되도록 허용된다. 일 실시형태에서, VL 버퍼의 사이즈를 결정할 때 다음의 인자가 고려된다: 1) 채널 속도; 2) 케이블 길이; 3) 전파 지연; 및 4) 최대 패브릭 패킷 길이(최대 전송 단위(Maximum Transfer Unit) 또는 MTU). 일 실시형태에서, MTU는 VL마다 구성가능하다. 크레딧 반환 프로세싱 및 크레딧 반환 지연에 대한 프로세싱 레이턴시와 같은 추가 인자가 또한 고려될 수도 있다.
도 31a, 도 31b, 및 도 31c는, 전용의, 공유된 이단(two-tier), 및 공유된 삼단 버퍼 편제의 예를 예시한다. 전용 버퍼 편제(organization) 하에서, 메모리의 각각의 부분은 각각의 VL에 대해 할당되는데, 상이한 VL이 메모리의 상이한 부분을 할당받을 수도 있다는 것을 유의한다. 일 실시형태에서, 각각의 VL에 대한 메모리의 부분은 FIFO로서 구현된다. 일 실시형태에서, FIFO는 헤드 및 테일 포인터를 갖는 원형 FIFO로서 구현된다.
공유된 이단 버퍼 편제 하에서, 버퍼 공간의 제1 부분은 VL에 전용 기반으로 할당되고, 한편 남아 있는 제2 부분은, 그것이 VL에 대해 공유되도록 할당된다. 도 31b에서, 제2 부분은 VL의 전체에 대해 사용되는 공유 풀을 포함한다. 그러나, 이것은 예에 불과하며, 공유된 풀은 VL의 전체보다 적은 것 사이에서 공유될 수도 있다. 예를 들면, 주어진 VL은 관리 목적을 위해 사용될 수도 있고, 다른 VL과는 상이한 사이즈를 갖는 그리고 제2 단 버퍼 풀을 공유하는 LV 사이에 있지 않은 전용 VL FIFO 공간을 활용할 수도 있다.
3단 공유 버퍼 편제 스킴 하에서, 메모리의 제1 부분은 전용 공간으로서 개개의 VL에 할당되고, 메모리의 제2 부분은, VL의 각각의 서브셋에 대해 그 각각이 공유되는 두 개 이상의 공유 풀 사이에서 분할되고, 제3 부분은 VL의 전체 또는 서브셋에 대해 사용되는 공유 풀에 대해 사용된다. 도 31c에서 도시되는 구성에서, 단2는 두 개의 공유 풀을 포함하고, 한편 단3은 모든 VL에 대해 공유되는 버퍼 풀을 포함한다. 공유 풀의 사이즈는 동일할 필요는 없으며, 한편 각각의 서브셋에서의 VL의 수는 마찬가지로 상이할 수도 있다.
진행 중인 링크 동작 동안, 각각의 송신기는 VL 버퍼의 버퍼 구성과 채움 레벨(fill level)(가용 공간) 및 "이웃" 디바이스에 있는 피어 수신기의 수신 버퍼에서의 공유 버퍼 공간(들)(적용되는 경우)의 "모습"을 유지하는데, 이웃 디바이스는 링크의 대향 단 상에 있다. 이것은 다음의 방식의 사용을 통해 가능하게 된다. 먼저, 이웃 디바이스에 있는 피어 송신 및 수신 포트의 각각은, 링크 데이터 전송 동작의 시작 이전에, 수신 포트의 수신 버퍼에 대한 VL 할당 및 초기 수신 버퍼 구성을 통지받는다. 일 실시형태에서, 패브릭 매니저는 수신기의 버퍼 편제를 특정하거나 식별하는 것 중 하나 이상을 담당한다. 그 다음, 그것은 버퍼 편제 및 지원된 데이터 VL의 수를 반영하도록, 송신기의 크레딧 매니저를 프로그래밍할 수 있다. 일 실시형태에서, 패브릭 매니저는 이 동작을, 링크 협상 및 초기화 프로시져 호출(link negotiation and initialization procedure call; LNI)과 연계하여 수행한다.
데이터가 링크를 통해 흐르기 시작하면, 다양한 수신 포트에서의 버퍼 가용성은, 각각의 수신기에서 수신되는 플릿 및 플릿을 다음 홉으로 포워딩하는 것과 연계하여 그 수신기의 버퍼로부터 제거되는 플릿의 함수로서 동적으로 변한다. 이들 변경과 연계하여, 수신 포트는 크레딧 ACK를 자신의 피어 송신 포트로 전송하는데, 크레딧은, 수신 포트의 현재의 버퍼 구성의 송신 포트의 모습을 업데이트하도록, 송신 포트의 크레딧 매니저에 의해 프로세싱된다. 링크 왕복 전송 시간 및 크레딧 프로세싱 레이턴시를 포함하는 레이턴시로 인해, 송신 포트에서의 수신 포트 버퍼 구성의 모습은 수신 포트에서의 실제 현재 버퍼 구성보다 늦을 것이고; 추가적인 버퍼 공간은 이들 레이턴시를 고려하여 제공된다.
링크가 초기화된 이후 그리고 패킷이 그것을 통과할 수 있기 이전에, 각각의 단방향 링크의 대향 단 상의 수신기 및 송신기 피어는 수신기의 버퍼 편제 및 수신기에 의해 구현되는 소망의 크레딧 편제와 관련하여 일관되게 만들어진다. 상기에서 논의된 바와 같이, 일 실시형태에서, 버퍼 편제 정보는 패브릭 매니저에 의해 수신기 및 송신기로 제공된다. 일 실시형태에서, 크레딧 편제는 수신기에서 구현되고, 대응하는 크레딧 편제 정보는 수신기로부터 그것의 피어 송신기로 전송된다.
추가 상세에서, 수신기에 의해 구현되는 크레딧 편제는, 버퍼 할당 단위(allocation unit; AU) 및 그 수신기에 대한 크레딧 ACK를 반환하는 것과 연계하여 활용되는 크레딧 반환 AKC 단위(credit return ACK unit; CU) 둘 다의 사용을 수반한다. AU는, 수신기에서 버퍼 할당을 위해 사용되는 최소 블록 단위이다. 크레딧 ACK 단위(CU)는 수신기에 의해 반환되는 각각의 크레딧에 의해 표현되는 수신기 AU의 수이다. 일 실시형태에서, 수신기는, 자신이 사용하는 AU 및 CU를 특정하는 대응하는 변수(vAU 및 vCU)를 자신의 피어 송신기로 전송한다. 일 실시형태에서, vAU 및 vCU 변수는 로그 스케일을 사용하는데, 그 예는 하기의 테이블 5 및 테이블 6에서 도시된다.
도 30에서 도시되는 바와 같이, 수신기(3004a 및 3004b)의 각각은, 버퍼 할당 단위 변수(vAU) 및 크레딧 ACK 단위 변수(vCU)를 포함하는 크레딧 편제 정보를 각각의 송신기(3000b 및 3000a)로 전달하는데, 이 경우 이들은, 도 30의 점선에 의해 도시되는 바와 같이, 크레딧 매니저(3002b 및 3002a)에 의해 수신된다. 각각의 송신기의 크레딧 매니저는 또한, 그것의 송신기의 피어 수신기에 의해 구현되는 버퍼 편제를 정의하는 정보를 구비한다. 각각의 송신기의 크레딧 매니저(3000)는, 자신의 피어의 수신 포트로부터 수신되는 현재 가용 크레딧을 추적 유지하고, 자신의 피어로의 패킷의 플로우를 상응하여 제어한다. 패킷이 수신기(3004)에 의해 프로세싱됨에 따라, 버퍼 공간은 비워지고, 수신기는, 실선에 의해 도시된 바와 같이, 자신의 송신기 피어에 대한 크레딧 매니저(3002)로 크레딧 ACK를 다시 제공한다. 패브릭 동작 요구에 기초하여, 중앙집중형 패브릭 매니저는, 런타임 동작 동안 다양한 VL 사이에서의 크레딧의 상대적인 할당에 변경을 가할 수도 있다.
크레딧 매니저가 초기화된 이후, 크레딧 매니저는 수신측 상의 버퍼 공간의 양의 추적을 담당한다. 일 실시형태에서, 전용 및 공유 크레딧의 분포는, 하기의 테이블 4의 구성 레지스터의 세트를 사용하여 구성된다. 이들 레지스터는 모두 피어의 할당 단위(AU) 값의 단위이다.
Figure 112016049112345-pct00003
Dedicated_Limit[VL] 구성 레지스터는, 특정 VL에 대한 수신기의 버퍼의 전용 부분을 예약하기 위해 사용된다. VL 사이의 QoS 분리를 보장하기 위해, 패브릭 매니저가 각각의 활성 VL에 대해 약간의 전용 공간을 구성해야 하는 것이 추천된다.
Global_Shared_Limit 구성 레지스터는 공유 풀 타입 편제에서 사용된다. 그것은, 수신기에서 얼마나 많은 버퍼가 모든 VL에 의해 공유되는지를 나타낸다. 전용 한계 및 전역적(global) 공유 한계의 합은 전체 버퍼 공간을 초과할 수 없다. 추가적으로, 전역적 공유 공간이 사용되지 않으면, 이 레지스터 값은 0으로 설정된다.
Shared_Limit[VL] 구성 레지스터는, 공유 공간 중 개개의 VL이 소비할 수 있는 공간의 양에 대한 한계를 명시한다. 이 레지스터가 0으로 설정되는 경우, 주어진 VL은 공유 공간에 액세스할 수 없다. 패브릭 매니저는, 개개의 VL이 공유 공간 중 너무 많은 것을 소비하는 것이 방지되도록, 따라서 단일의 VL 상의 트래픽의 혼잡 또는 버스트가 다른 VL에 의한 공유 버퍼 공간 빼앗는 것을 방지하도록, 이 레지스터를 구성할 수도 있다. 개개의 VL에 대한 한계는 Global_Shared_Limit을 초과할 수 없지만, 그러나 모든 VL에 대한 한계의 합은 초과할 수도 있다. 예를 들면, Global_Shared_Limit이 10이고 4개의 VL 각각에 대한 Shared_Limit이 5인 것이 유효한데, 이 경우 어떠한 단일의 VL도 공유 공간의 겨우 5 단위 밖에 사용할 수 없을 수도 있다.
송신기에서 크레딧을 소비하는 경우, 크레딧은 VL의 전용 크레딧 풀로부터 먼저 소비된다. 모든 VL 전용 크레딧이 주어진 VL에 대해 소비되면, 크레딧은 주어진 VL이 이용가능한 공유 풀로부터 소비된다. 단일의 패킷이 남아 있는 전용 크레딧보다 더 크면, 패킷은 전용 및 공유 풀 둘 다로부터 크레딧을 소비할 수도 있다.
송신기에서 크레딧을 보충하는 경우, 크레딧은 공유 풀에 먼저 보충된다. 주어진 VL에 의해 소비된 모든 공유 풀이 보충되었다면, 크레딧은 주어진 VL에 대한 전용 풀에 보충된다.
2단 공유 버퍼 구성에 적용되는 상기 내용은, 3단 공유 버퍼 구성으로 확장될 수도 있다. 이 경우, 크레딧은 주어진 VL, 그 다음 주어진 VL을 포함하는 VL의 서브셋에 대해 사용되는 공유 풀, 그 다음 전역적 공유 풀에 기초하여 소비된다. 보충은 역방향으로 진행한다: 전역적 공유 풀, 그 다음 VL의 서브셋에 대해 사용되는 공유 풀, 그리고 마지막으로 주어진 VL에 대한 전용 풀.
패킷이 링크를 통해 흐르는 것을 가능하게 하는 변수 중 하나는, 수신측 상에서 이용가능한 버퍼 공간의 양이다. 상기에서 설명된 바와 같이, 각각의 송신기는 (일 실시형태에서, 자신의 크레딧 매니저를 통해) 버퍼 구성의 모습 및 자신의 수신기 피어에 대한 사용을 유지하는데, 이것은 크레딧 ACK를 통해 (부분적으로) 구현된다. 하나의 실시형태 하에서, 각각의 VL에 대한 크레딧을 관리하는 것은 크레딧 매니저의 책임이다. 가상의 컷스루 정책(virtual cut-thru policy)을 사용하는 경우, 패킷은, 전체 패킷을 싱크하기에 충분한 공간이 수신 버퍼에서 이용가능하지 않는 한, 중재를 위해 경쟁할 수 없다. 웜 홀 라우팅(worm-hole routing)을 사용하는 경우, 이용가능한 공간이 > 0이면 패킷은 중재를 위해 경쟁한다. 하이브리드 방식 하에서, "플릿"의 청크는, 수신기가 청크를 수신하기 위한 충분한 크레딧을 가지면, 링크를 통해 전송되는 것이 허용된다. 이 실시형태 하에서, 청크의 사이즈는 구성가능하고, 사이즈는 링크가 활성인 동안 동적으로 재구성될 수도 있다.
패킷이 중재에서 이기면, 그 개개의 VL에 대한 크레딧의 풀로부터 또는 VL에 적용가능한 공유 풀로부터 다수의 크레딧이 할당된다. 크레딧 풀은, 수신측으로부터 크레딧 ACK가 수신되는 경우 보충된다. 이 크레딧 ACK는, 수신측이 특정한 수의 플릿을 자신이 버퍼로부터 제거하는 경우 발생한다. 크레딧 ACK는 크레딧 반환(CrdRet) LF 커맨드 플릿 상에서 또는 LTP에서 반송되는 측파대 정보를 통해 반환된다.
크레딧 ACK에 포함되는 정보는 VL 및 ACK된 크레딧의 양을 포함하고; 하기에서 설명되는 바와 같이, 단일의 크레딧 LF 커맨드 플릿은 다수의 VL에 대한 크레딧 ACK를 포함할 수도 있다. 디바이스는 CrdRet LF 커맨드 플릿을 통해 크레딧 반환을 수용한다. 14b CRC LTP 포맷이 선택되는 경우, 디바이스는 또한, LTP 측파대 정보를 통해 크레딧 반환을 수용한다. 14b CRC LTP 포맷을 사용하는 경우, 디바이스는 크레딧을 반환하기 위해 LTP 측파대 메커니즘을 사용해야 하지만, 옵션적으로는 CrdRet LF 커맨드 플릿을 또한 사용할 수도 있다.
도 30에서 예시되고 상기에서 논의된 바와 같이, 버퍼 할당 단위 변수(vAU) 및 크레딧 반환 ACK 단위 변수(vCU)는, 링크 데이터 전송 동작의 개시 이전에(예를 들면, LNI 프로세스 동안) 이웃에 의해 교환된다. 일 실시형태에서, 이들 변수는 하기의 테이블 5 및 테이블 6에서 도시되는 방식으로 구현된다. 묘사된 바와 같이, AU 및 CU 둘 다는 로그 스케일을 사용한다.
Figure 112016049112345-pct00004
Figure 112016049112345-pct00005
링크의 양 사이드 상의 이웃이 LNI 동안 상이한 vAU 및/또는 vCU를 보고하면, 일 실시형태에서, 각각의 포트의 송신기는, 크레딧을 관리할 때, 그 이웃의 AU를 사용할 것이다. 추가적으로, 각각의 송신 포트는, 입구 크레딧 ACK를 프로세싱할 때, 그 이웃의 CU를 사용할 것이다.
이 상황의 예는, vAU 및 vCU에 대해 상이한 값을 각각 갖는 두 개의 별개의 디바이스 타입(디바이스A 및 디바이스B로서 도시됨)의 예를 묘사하는 도 33에서 예시된다. 이 예에서, 디바이스A는 vAU=4 및 vCU=1로 부팅한다. vAU는, 128B 할당 단위에 대해 설계되는 디바이스A의 수신 버퍼(Rbuf)의 하드웨어 설계와 일치한다. 디바이스B는 vAU=3 및 vCU=0으로 부팅하는데, vAU는, 64B 할당 단위에 대해 설계되는 디바이스B의 Rbuf와 일치한다. LNI 동안, 각각의 디바이스는 자신의 vAU 및 vCU 변수를 전송한다. 이웃의 vAU 및 vCU의 수신시, 각각의 디바이스는, 크레딧을 관리할 때 이웃의 AU 값을 사용하도록 그리고 이웃의 CU 값을 사용하여 이웃으로부터의 크레딧 반환을 프로세싱하도록, 자기 자신의 송신기를 프로그래밍한다. 한편, 각각의 디바이스에서의 수신기(RX) 및 크레딧 반환 단위는 자기 자신의 네이티브(native) AU 및 CU 값을 사용한다.
일 실시형태에서, 반환된 크레딧 단위는 다중 비트 필드 및 로그 스케일을 사용하여 인코딩된다. 반환되는 크레딧 단위(CR)에 대한 하나의 인코딩의 예가 하기의 테이블 7에서 나타내어진다.
Figure 112016049112345-pct00006
ACK된 크레딧의 수를 결정하기 위한 알고리즘은, LF 측파대를 사용하든 또는 LF 커맨드 플릿을 사용하든 간에 동일하다. 차이는, LF 커맨드 플릿을 통해 크레딧 ACK를 반환하는 경우, VL이 암시된다는 것이다. 일 실시형태에 따른, 증분적 크레딧 ACK에 대한 LF 커맨드 플릿 포맷(3200)의 예가 도 32에서 도시된다. 도시되는 바와 같이, 하위 6바이트는 16개의 3비트 필드로 구획되는데, 각각은 그들이 (비트 55에서의 승수(multiplier) 'i'와 조합하여 고려될 때) 관련되는 VL을 식별하는 (비트 0에 대한) 오프셋을 구비한다. 예를 들면, 'i'가 0이면, LF 커맨드 플릿 포맷(3200)은 VL0 내지 VL15에 대한 반환 크레딧을 명시하기 위해 활용될 수도 있고, 한편 'i'가 1이면 VL16 내지 VL31에 대한 반환 크레딧이 명시된다. 로그 스케일의 사용은, 3비트가 0, 1, 2, 4, 8, 16, 32, 및 64의 크레딧 값을 인코딩하는 것을 가능하게 한다. 따라서, 32개의 VL을 갖는 시스템에서, 모든 VL에 대한 크레딧은 단지 16바이트를 사용하여 반환될 수 있다.
표 8은, vAU=3(AU=64)이고, vCU=0(CU=1)인 경우에 반환되는 크레딧의 한 예를 예시한다. 반환되는 총 크레딧은 CR*AU*CU인데, CR은 크레딧의 수이고, AU는 할당 단위 사이즈이고, CU는 크레딧 단위 값이다. 64바이트의 AU의 경우, '111'의 코드는, 4096바이트의 크레딧이 반환되고 있다는 것을 명시한다.
Figure 112016049112345-pct00007
아키텍쳐의 크레딧 기반의 플로우 제어 메커니즘은 종래의 방식에 비해 상당한 이점을 제공한다. 예를 들면, 패브릭 효율성의 관점에서, 메커니즘은 16개의 VL에 대한 크레딧이 단일의 8바이트 메시지에서 반환되는 것을 허용한다. 각각의 VL에 대한 크레딧은 단지 3비트를 필요로 하며 0과 128 사이에서 반환될 크레딧 교환 단위를 나타낼 수 있다. 또한, 크레딧 교환 단위의 사이즈는 구성가능하다. 대조적으로, 인피니밴드와 같은 패브릭은 필적하는 크레딧의 양을 교환하기 위해 128 바이트(16개의 8바이트 메시지)를 필요로 할 것이다.
크레딧 추적을 송신기에 의해 행하여지게 하는 것에 의해, 가용 크레딧의 재할당은, 단지, 송신기에서 카운터를 조정하는 것에 의해 행해질 수 있다. 송신기는 또한 크레딧을, 그들이 반환될 때, 상이한 VL에 재할당할 수 있다. 이 유연성은 VL의 성능이, 애플리케이션 요구, QoS 요건, 및 패브릭에 대한 작업 부하에서의 다른 변경에 응답하여 튜닝되는 것을 허용한다. 대조적으로, 절대 크레딧(absolute credit)을 사용하는 종래의 솔루션은, 트래픽을 수신 거부하지 않고 그리고 송신기 및 수신기 둘 사이에서의 변경을 조정하지 않고는, 신뢰성 있게 크레딧을 이리저리 이동시킬 수 없다.
VL 중재
각각의 출구 포트는, 상이한 VL의 패킷을 출력 링크를 향해 전송하기 위해 사용되는 중재를 제공한다. 초기화 동안 패브릭 매니저에 의해 프로그래밍되는 VL 중재 테이블은 이 중재 프로세스를 통제하기 위한 규칙의 세트를 포함한다. 이들 규칙은 각각의 VL에 대한 대역폭의 양을 통제하고 또한 VL 사이에서의 선점 우선순위를 정의한다.
VL 우선순위 및 스케줄링이 송신기의 기능이기 때문에, 아키텍쳐의 상이한 구현예는, 상호운용성에 어떠한 영향도 주지 않으면서 이 피쳐에 대해 상당히 상이한 아키텍쳐를 제공할 수도 있다. 예를 들면, 본원에서 개시되는 실시형태 외에, VL 사용에 대한 더 큰 제어와 향상된 스케줄링을 허용하는 더 강력하고 유연한 메커니즘이 정의될 것이다는 것이 기대된다.
아키텍쳐는 링크 레벨 재시도 및 선점과 같은 피쳐를 지원한다. 이들 피쳐는 패킷 플로우에서 "버블"을 야기할 수도 있다(패킷 단편화). (예를 들면, 이전의 선점, 링크 리플레이 등등으로 인해) 현재 VL과 관련되는 패킷 버블이 존재하고 현재 VL을 선점하도록 허용되는 VL에 대해 큐잉된 어떤 다른 패킷도 존재하지 않으면, VL 패킷 데이터 대신 아이들(idle)이 플로우에 삽입된다. 디바이스의 출구 포트에서, 흐르고 있는 VL은, 선점 VL로서 지정되었던 VL이 큐잉된 패킷을 가지지 않는 한, 인터럽트되지 않는다.
도 34는 선점을 지원하는 VL 중재 메커니즘(3400)의 일 실시형태를 도시한다. 메커니즘은 VL 중재 테이블(3402), 선점 구성 레지스터(3403), 선점 매트릭스(3404), 원격 디바이스(3406)에 대한 VL당 크레딧, VL당 출구 FIFO(3408), 및 송신 패킷 중재 로직(3410)을 포함한다. VL 중재 테이블(3402)은 낮은 우선순위 테이블(3412), 높은 우선순위 테이블(3414), 및 선점 테이블(3416), 높은 우선순위의 한계 블록(3418), 및 선점의 한계 블록(3420)을 포함한다.
일 실시형태에서, 데이터 VL에 대해 3 레벨의 중재 스킴이 사용된다. 선점 VL은 다른 선점 VL 사이에서 가중된 공평한 라운드 로빈을 활용하고 두 개의 남아 있는 우선순위 레벨보다 우선권을 갖는다. 이들 남아 있는 VL은 최저 레벨의 우선순위 우선권을 점유하며 다음과 같이 정의된다: 남아 있는 VL의 경우, 2 레벨 스킴이 활용되고, 가중된 공평한 스킴의 최상부 상에 적층되는 듀얼 레벨 스케줄링을 사용한다. 추가적으로 스킴은 낮은 우선순위 VL에 대한 순방향 진행을 보장하기 위한 방법을 제공한다. 일 실시형태에서, 가중치부여(weighting), 우선순위부여(prioritization), 및 최소 순방향 진행 대역폭은 패브릭 매니저에 의해 프로그래밍가능하다.
VL 중재는 VL 중재 테이블(3402)에 의해 제어된다. 예시된 실시형태에서, 이 테이블은 다섯 개의 성분, 선점 테이블(3416), 높은 우선순위 테이블(3414), 낮은 우선순위 테이블(3412), 선점의 한계 블록(3420) 및 높은 우선순위의 한계 블록(3418)으로 구성된다. 선점 테이블(3416), 높은 우선순위 테이블(3414), 및 낮은 우선순위 테이블(3412)의 각각은 VL/가중치 쌍의 리스트를 포함한다. 일 실시형태에서, 선점 리스트는 1의 최소 길이와 32의 최대치를 가지며, 높은 우선순위 리스트는 1의 최소 길이와 128의 최대 길이를 가지며, 낮은 우선순위 리스트는 지원되는 데이터 VL의 수와 동일한 최소 길이와 128의 최대 길이를 갖는다. 높은 우선순위 및 낮은 우선순위 테이블 리스트는 상이한 길이를 갖도록 허용된다. 각각의 리스트 엔트리는 VL 번호(0-31로부터의 값), 및 가중 값(weighting value)(값 0-255)을 포함하고, 중재 싸이클에서 VL의 차례가 발생할 때 그 VL로부터 송신될 수도 있는 64바이트 단위의 수를 나타낸다. 패킷 헤더에서의 길이 필드는 패킷에서의 단위의 수를 결정하기 위해 사용된다. 일 실시형태에서, 이 계산은 4바이트 증가로 유지되고, 한편 다른 실시형태는 다른 세분화, 예컨대 8 및 16 바이트를 활용할 수도 있다. 0의 가중치는, 이 엔트리가 스킵되어야 한다는 것을 나타낸다.
선점, 높은 및/또는 낮은 우선순위 테이블 리스트에서 뿐만 아니라 두 개 또는 전체 세 개의 리스트에서 동일한 데이터 VL은 다수 회 열거될 수도 있다. 구성된 데이터 VL은 테이블 중 적어도 하나에서 열거되어야 한다. 예를 들면, 일 실시형태에서, 낮은 우선순위 테이블(3412)은, 각각의 데이터 VL이 적어도 하나의 엔트리를 구비할 수 있도록 사이즈가 정해진다. 구성된 데이터 VL이 어떠한 리스트에서도 열거되지 않으면, 이 데이터 VL에 대한 패킷은 즉시 드랍되거나, 중재기가 전송할 패킷이 없는 경우 전송되거나, 또는 절대 전송되지 않을 수도 있다. 선점의 한계 블록(3420) 및 높은 우선순위의 한계 블록(3418)은, 각각, 높은 우선순위 또는 낮은 우선순위 패킷을 전송할 기회 없이 송신될 수 있는 선점 또는 높은 우선순위 패킷의 바이트의 수를 나타낸다. 일 실시형태에서, 바이트의 수는, 바이트의 배수로 곱한, 예컨대 16, 32, 64 등등의 바이트로 곱한 한계 값(한계 필드에 저장되는 값)이다. 일 실시형태에서, 카운팅은 가중치에 대해 설명된 유사한 방식으로 행해진다(예를 들면, 계산은 4바이트 증가로 행해지고, 선점/높은 우선순위 패킷은, 현재 바이트 카운트가 선점의 한계/높은 우선순위의 한계 값을 아직 초과하지 않았다면, 전송될 수 있다). 일 실시형태에서, 각각의 한계 필드는 14비트의 사이즈이지만; 그러나 다른 사이즈가 사용될 수도 있다. 14비트 필드를 활용하는 한 실시형태 하에서, 16383의 최대 값은, 바이트 한계가 한정되지 않는다는 것을 나타낸다. (한정되지 않은 바이트 한계의 경우, 하위 우선순위 패킷의 순방향 진행은 이 중재 스킴에 의해 보장되지 않는다는 것을 유의한다.) 일 실시형태에서, 0의 선점/높은 우선순위 한계 값은, 높은 우선순위/낮은 우선순위 테이블에 각각 기회가 주어지기 이전에, 선점/높은 우선순위 테이블로부터의 단일의 패킷만이 전송될 수도 있다는 것을 나타낸다.
일 실시형태에서, VL 중재 테이블(3402a)은 포트가 활성인 경우에 수정될 수도 있다.
추가적으로, 이러한 수정은, 통과 중에 있는 임의의 패킷의 단편화로 나타나지 않을 것이다. 그러나, 중재 규칙은 이 변경 동안 보장되지 않는다.
선점 매트릭스(3404)는, VL이 다른 VL을 선점할 수 있는 규칙을 제공하기 위한 유연한 제어 메커니즘을 지원한다. 일 실시형태에서, VL15는 패브릭 관리를 위해 예약되고 다른 VL에 의해 선점될 수 없다. 일 실시형태에서, 매트릭스는, N개까지의 데이터 VL 및 N개까지의 데이터 VL에 의한 VL15 선점을 지원하는 (N+1)×N 구조이다. 옵션적으로, 선점될 수 없는 미리 정의된 VL이 존재하지 않으면, N×N 매트릭스가 사용될 수도 있다. 바람직하게는, 주어진 구현예는, 구현예가 지원하는 데이터 VL의 최대 수에 기초하여, 선점 매트릭스의 사이즈를 정해야 한다. 어떤 VL이 선점할 수 있는지를 제어하기 위해, 하나 이상의 비트가 행(row)마다 어써트된다('1'). 도 35는, 4 데이터 VL을 갖는 예시적인 디바이스에 대한 5×4 선점 매트릭스(3500)를 예시한다.
VL 선점 자체에 대해 선점 매트릭스에서의 엔트리는 무시된다. 선점 규칙은 선점 매트릭스(3500)에 대해 다음과 같다:
● VL3은 VL2, VL1, 및 VL0보다 우선할 수 있다.
● VL2는 VL1, 및 VL0보다 우선할 수 있다.
● VL1은 VL2, 및 VL0보다 우선할 수 있다.
각각의 우선순위 테이블 내에서, 가중된 공평한 중재가 사용되는데, 각각의 테이블의 엔트리의 순서는 VL 스케줄링의 순서를 명시하고, 가중 값은 그 엔트리에 할당되는 대역폭의 양을 명시한다. 중재는, 테이블의 각각의 엔트리가 순서대로 프로세싱되는 싸이클 기반이다.
우선순위 레벨 사이에서 전이가 존재하는 경우에 저장되는 '현재의' 가중치 및 VL 외에, 우선순위 테이블의 각각의 내에서의 엔트리에 대한 남아 있는 가중치에 대한 스토리지는 존재하지 않는다. 그 다음, 이것은 남아 있는 가중치 및 VL 저장 값의 세 개의 세트: 선점하는 현재 가중치/VL, 높은 현재 가중치/VL 및 낮은 현재 가중치/VL. 우선순위 레벨 사이에 전이가 존재하면, 현재 값은 중단되어 저장되고, 새로운 우선순위 레벨로의 전이가 이루어지고, 중재 싸이클 이전에 새로운 현재 가중치/VL 값이 로딩된다. 원래의 우선순위 레벨로의 전이가 다시 이루어지면, 저장된 현재 가중치 및 VL이 재로딩되고 남겨졌던 곳부터 중재는 계속된다.
세 개의 테이블의 각각에 대해 별개의 포인터 및 가용 가중치 카운트 테이블이 유지된다. 포인터는 테이블에서의 현재 엔트리를 식별하고, 한편 가용 가중치 카운트는 데이터 패킷 송신에 대해 이용가능한 현재 엔트리가 가지는 가중치의 양을 나타낸다. 테이블이 활성이면, 테이블에서의 현재 엔트리는 검사된다. 다음의 조건 전체가 참이면, 이 엔트리에 대응하는 패킷이 송신을 위해 출력 포트로 전송될 것이고 패킷 사이즈(4바이트 증가 단위)는 현재 엔트리에 대한 가용 가중치 카운트로부터 공제될 것이다:
1. 리스트 엔트리에 대한 가용 가중치가 양이고
2. 엔트리의 VL에 대해 이용가능한 패킷이 존재하고
3. 이 패킷에 대해 버퍼 크레딧이 이용가능하다
새로운 패킷의 시작에서의 가용 가중치가 양이면, 패킷이 가용 가중치보다 더 큰 경우에도, 상기의 조건1은 충족된다는 것을 유의한다.
이들 조건 중 임의의 것이 참이 아니면, 테이블의 다음 엔트리는 검사된다. 현재 포인터는 테이블의 다음 엔트리로 이동되고, 가용 가중치 카운트는 이 새로운 엔트리에 대한 가중 값으로 설정되고, 상기 테스트가 반복된다. 이것은, 송신을 위해 포트로 전송될 수 있는 패킷이 발견되는 한, 반복된다. 전체 테이블이 체크되고 상기 기준을 충족하는 어떤 엔트리도 발견될 수 없으면, 다음 하위 우선순위 테이블이 활성으로 된다.
서비스 품질(QoS)
아키텍쳐는 다음과 같은 다수의 성능을 제공하는 QoS 피쳐를 지원한다:
● 작업(job) 분리/리소스 할당
● 서비스 분리/리소스 할당
● 주어진 작업 내에서의 애플리케이션 트래픽 분리
● 프로토콜(예를 들면, 요청/응답) 데드락 회피
● 패브릭 데드락 회피
● 트래픽 우선순위부여 및 대역폭 할당
● 트래픽 선점을 허용하는 것에 의한 레이턴시 지터 최적화
아키텍쳐는, 가상 패브릭(Virtual Fabric; vFabric), 트래픽 클래스(Traffic Class; TC), 서비스 레벨(Service Level; SL), 서비스 채널(Service Channel; SC) 및 가상 레인(Virtual Lane VL)을 통해, QoS에 대한 아주 유연한 성능을 제공한다. QoS의 중심에는 SC 메커니즘이 있는데, 이것은 패브릭 내에서 패킷을 구별하기 위해 사용된다. 일 실시형태에서, 아주 다양한 패브릭 토폴로지 및 구성을 지원하기 위해, SC 할당이 패브릭 매니저에 의해 관리되고 주어진 패킷의 SC는 주어진 패킷이 패브릭을 통과할 때 데드락이 회피될 수 있도록 변할 수도 있다.
애플리케이션 및 시스템관리자(sysadmin) 동작은 vFabrics을 중심으로 한다. vFabric은 패브릭 포트의 세트와 하나 이상의 프로토콜의 교차점이다. 각각의 vFabric에 대해, 보안 정책 및 QoS의 세트가 시스템관리자에 의해 확립된다. 주어진 vFabric은 QoS에 대한 트래픽 클래스 및 보안용 구획(Partition)과 관련된다.
트래픽 클래스는, 주어진 전송 레이어 또는 애플리케이션이 사용할 서비스 레벨의 그룹을 나타낸다. 몇몇 전송 레이어는 (요청 및 응답 트래픽을 분리하는 것과 같이) 데드락을 방지하기 위해 다수의 QoS 레벨을 사용할 수도 있고, 한편 다른 것은 높은 우선순위 제어 트래픽을 하위 우선순위 데이터 트래픽과 분리하기 위해 다수의 QoS 레벨을 이용할 수도 있다. 더 간단한 전송 레이어는 단순히 트래픽 클래스를 단일의 SL과 관련시킬 수도 있다. 일 실시형태에서, 아키텍쳐는 32개까지의 트래픽 클래스를 지원하지만, 4 내지 8개가 보다 가능성이 있는 통상적인 구성이다.
트래픽 클래스는 서비스 레벨의 단대단 개념을 통해 실현된다. 일 실시형태에서, 트래픽 클래스는 다수의 서비스 레벨에 걸쳐질 수도 있지만, 서비스 레벨은 단지 하나의 트래픽 클래스에 할당될 수도 있다. 일 실시형태에서, 32개까지의 서비스 레벨이 지원된다. 서비스 레벨은 패브릭을 통한 패킷 흐름에 우선순위를 부여하는 것에 의해 기능한다. 서비스 레벨은, 아키텍쳐의 레이어4 프로토콜 및 애플리케이션이 볼 수 있는 가장 낮은 레이어 QoS 개념이다.
서비스 레벨의 기초가 되는 것은 서비스 채널(SC)인데, 이것은 상이한 서비스 레벨의 패킷을 이들이 패브릭을 통과할 때 구별한다. SC는 패브릭 패킷에 포함되는 유일한 QoS 식별자이고, 따라서 다른 네트워크보다 더 밀집한 패킷 포맷을 허용하게 된다. 몇몇 패브릭 토폴로지에서, 서비스 레벨은 다수의 서비스 채널에 걸칠 수도 있지만, 서비스 채널은 단지 하나의 서비스 레벨에 할당될 수도 있다. 일 실시형태에서, 아키텍쳐는 32개의 SC를 지원한다. 일 실시형태에서, SC 중 하나 이상은 대역내 패브릭 관리에 전용된다.
일 실시형태에서, 패브릭 매니저는, 각각의 서비스 레벨로부터 단일의 SC로의 매핑을 제공하는 각각의 엔드포인트에서 SL2SC 테이블을 구성한다. 한 측면에서, SL은 QoS 레벨에 대한 정규 ID이고, 따라서 각각의 QoS 레벨은 패브릭에 대해 정확히 하나의 SL 값을 갖는다. SL2SC 테이블의 목적은, 토폴로지를 라우팅하는 데 얼마나 많은 SC가 드는지 그리고 그 라우팅에 대해 정확한 할당 및 유효한 론치 SC가 무엇인지의 상세를 전송 레이어에게 숨기는 것이다. 보다 복잡한 구성에서, 주어진 QoS 레벨에 대해 사용할 유효한 론치 SC는 심지어 센더(sender)마다 변할 수도 있지만, 모든 센더는 QoS 레벨에 대한 동일한 정규 ID를 여전히 가질 수 있다. 몇몇 API(예컨대 Open Fabrics 및 PSM)는 명시적으로 SL을 필요로 할 수도 있다.
몇몇 수신기는 어떤 QoS 레벨 상에서 주어진 패킷이 수신되었는지를 식별하는 것을 필요로 할 수도 있다. 이러한 수신기의 경우, SC 대 SL 테이블이 각각의 엔드포인트에서 또한 구성된다. 이 테이블은 정규 변환을 제공하며 다수의 SC를 사용하는 라우팅 알고리즘으로부터 어떤 문제점도 제거한다.
수신기는 수신된 QoS 레벨을 전체적으로 무시할 수도 있거나, 그것을 API(예컨대 Open Fabrics)까지 전달할 수도 있거나, 그것을 (몇몇 SLA 검증 등등에 대해) 검증할 수도 있거나 또는 심지어 (예컨대 게이트웨이에서 E번째 우선순위 레벨을 선택하는 것을 돕기 위해 QoS 레벨을 사용하여) 보다 복잡한 프로세싱을 행할 수도 있다. 몇몇 수신기는 적절한 응답을 생성하기 위해 수신된 패킷에서의 QoS 레벨을 사용할 수도 있다. 예를 들면, 간단한 서비스는 응답에서 QoS 레벨을 다시 모방할 수도 있다(그리고 응답에 대한 적절한 론치 SC를 보장하기 위해 상기의 전송 측 프로세싱을 받을 수도 있다). 다른 수신기는 응답 패킷을 동일한 트래픽 클래스에서 상이한 QoS 레벨 상에 둘 수도 있다. 어느 경우든, 응답 패킷을 그것이 수신되었던 동일한 SC를 사용하여 단순히 전송하는 것은 유효하지 않은데, 이것이 몇몇 라우팅 알고리즘 및 토폴로지에 대해 문제를 야기할 수 있기 때문이다. 그러므로, 그 문제를 제거할 정규 매핑.
도 44는, 크레딧 루프 회피를 갖는 토폴로지에서의 TC, SL, 및 SC 사용의 예를 예시하는 도면이다. 이 예에서, 두 개의 HFI 엔드포인트는 8개의 스위치 홉 경로를 통한 패브릭을 통해 연결된다. 두 개의 TC가 사용되는데, 하나는 PGAS(TC0)에 대한 것으로 두 개의 SL(요청 및 응답 SL: SL0, SL1)을 필요로 하며, 하나는 스토리지(TC1)에 대한 것으로 1개의 SL(SL2)만을 필요로 한다. 각각의 SL은 패브릭에서의 데드락 회피를 위해 한 쌍의 SC(SC0/SC1, SC2/SC3 또는 SC4/SC5)를 할당받는다. 패킷이 패브릭을 통과함에 따라, SC는 링크별로(link by link) 변할 수도 있지만, 레이어4 및 애플리케이션에 의해 보이는 SL 및 TC는 단대단에서 일관적이다.
주어진 링크 내에서, 서비스 채널은 가상 레인(VL)에 할당된다. VL은 유입하는 패브릭 패킷에 대한 전용 수신 버퍼를 제공한다. VL은 또한 라우팅 데드락을 해결하기 위해 사용된다. 일 실시형태에서, 아키텍쳐는 32개까지의 VL을 지원하지만, 지원되는 실제 수는 일반적으로 구현예에 의존적일 것이다. 아키텍쳐는 VL 상으로의 SC의 매핑을 지원하며, 따라서 이종 패브릭 구성이 지원될 수 있다. 개개의 구현예는 32보다 더 적은 VL을 지원할 것을 선택할 수도 있거나 또는 이용가능한 VL의 전체 수를 감소시키는 것에 의해 VL당 버퍼링의 양을 최적화하도록 구성될 수도 있다.
서비스 채널을 독립적인 VL에 매핑하는 것에 의해, SC는 패브릭을 통해 독립적인 채널을 제공할 수 있고, 하나의 SC에서의 경쟁 및 블로킹이 상이한 SC에서의 트래픽에 대한 진행을 방해하지 않는 것을 보장하게 된다. 서비스 채널은 라우팅 및 프로토콜 데드락을 방지하기 위해 그리고 트래픽 클래스 사이에서의 헤드 오브 라인 블로킹을 방지하기 위해 사용된다.
각각의 SC는 단일의 서비스 레벨의 트래픽을 단일의 트래픽 클래스에서 반송한다. 패브릭 매니저는, 각각의 출구 포트에서, 동일한 포트를 사용하고 있을 수도 있는 다수의 SC 사이에서 VL 리소스가 어떻게 분할되거나 공유되지를 구성한다. SC의 소망의 QoS 특성은 FM에 의해 사용되어 다음을 포함하는 그것에 할당되는 VL에 대한 적절한 설정을 선택한다:
● 가상 레인에 통한 패킷의 송신은, 다수의 VL이 주어진 링크에 대한 큐잉된 트래픽을 가지는 경우 링크가 어떻게 공유되고 스케줄링되어야 하는지를 패브릭 매니저가 구성하는 것을 허용하는 구성가능한 VL 중재 알고리즘을 통해 스케줄링된다.
● 패킷 선점은 상위 우선순위 트래픽이 하위 우선순위 패킷보다 우선하는 것을 허용할 수 있다. 이것은 높은 우선순위 트래픽에 대한 헤드 오브 라인 블로킹의 추가적인 감소를 제공한다.
● VL에 대한 크레딧 반환율의 구성에 의해 이용가능한 출력 포트의 대역폭의 공유.
● 구성가능한 포트당 VL 버퍼링, 그 결과 각각의 스위치 홉에서 허용되는 큐 깊이는 VL마다 제어될 수 있다.
패브릭의 아키텍쳐는, 디바이스의 혼합체가 상이한 수의 VL을 지원하는 이종 환경의 구현을 가능하게 한다. 예는, 제한된 수의 VL을 지원하는 것에 의해 버퍼 공간을 절약하는 스위치, 패브릭 내에서의 토폴로지의 데드락 회피를 위해 의도되는 여분의 VL을 필요로 하지 않는 HFI 엔드포인트, 또는 제한된 수의 VL만 없다면 아주 많은 양의 버퍼링을 제공하는 것에 의해 아주 긴 링크를 지원하는 몇몇 특수 디바이스를 포함한다.
예시적인 이질적 환경은 도 36에서 예시된다. 예시된 바와 같이, 상이한 수의 가상 레인을 지원하는, 패브릭 인터페이스를 갖는 상호접속된 컴포넌트, 예컨대 스위치, HFI, 게이트웨이, 및 스토리지가 구현될 수 있는데, VL 대 VL 매핑 업 또는 매핑 다운은 어떤 컴포넌트가 더 많은 수의 VL을 갖는지에 의존한다.
일반적으로, 서비스 레벨(SL)은 L2 링크 패브릭 패킷 포맷의 별개의 필드로 명시적으로 식별될 필요는 없지만, 예컨대 몇몇 인피니밴드 포맷과 같은 다른 포맷과의 상호운용성을 지원하기 위해, FP 포맷이 SL 필드를 포함하는 경우가 존재할 수도 있다. 대신, 이 QoS 정보는 패브릭 패킷의 SC 필드에 의해 암시된다. 일 실시형태에서, 이 QoS 레벨은, 각각의 패킷이 단에서 단으로 패브릭을 통해 통과할 때, SC 대 SC 매핑을 통해 보존된다. 이종 패브릭의 경우, 상이한 성능을 갖는 디바이스에 의해 지원되고 있는 VL의 최저 분모 상에서 모든 트래픽이 이동하는 것을 요구하는 것에 의해 전체 패브릭을 제한하는 대신, 아키텍쳐는, 헤드 오브 라인 블로킹의 기회를 감소시키는 것을 돕기 위해 패킷이 VL 리소스의 활용을 확대하거나 축소하는 것을 허용하고 동시에 암시된 SL 정보를 보존하는 방법을 제공한다.
도 37은, 한 실시형태에 따른, HFI의 L4 레이어에 의해 패브릭 안으로 패킷을 주입하는 예를 예시한다. HFI의 L4 레이어에 의해 패킷을 패브릭 안으로 주입하는 경우, 먼저 L4 인터페이스에 의해 제공되는 SL을, SL 대 SC 매핑(3700)을 통해, 초기 SC로 매핑하고 패킷의 SC 필드를 이 값으로 설정한다. 생성된 SC 값은 패브릭의 토폴로지에 관련되는 정보 및 SL 둘 다를 임베딩할 수도 있다. 동작 'B'에서, 그 다음, SC에 대해, 이 패킷을 송신하는 출력 VL 리소스를 선택하기 위한 SC 대 VLt 매핑(3702)을 행한다. 출력 리소스는 출력 FIFO 및 그것과 관련하는 크레딧 매니저를 보통 참조한다. 도 37의 도면에서는, 예시적인 목적을 위해 네 개의 VL FIFO(3704)가 존재하며; FIFO의 실제 수는 디바이스에 의해 지원되는 가상 레인의 수에 의존할 것이다. 또한, 이 출력단(output stage)에서의 SC 대 VLt 매핑(3702)은, 로컬 디바이스가 지원하는 VL의 수에 의존할 뿐만 아니라, 원격 디바이스가 지원하는 VL의 수에도 의존한다. 동작 'C'에서 묘사되는 바와 같이, 크레딧은, 이 로컬 디바이스의 VLt에 기초하여 원격 수신 디바이스에 의해 역(back) ACK 되고 대응하는 카운터는 증가된다. SL이 어떻게 SC에 매핑되는지, SC가 어떻게 VLt에 매핑되는지, 그리고 크레딧이 VLt를 사용하여 어떻게 역 매핑되는(mapped back)지의 상세가 하기에서 상세히 설명된다.
VL 리소스의 사용을 극대화하면서 동시에 유입하는 패킷의 SC 필드에 임베딩되는 QoS 레벨을 보존하기 위해, 각각의 스위치는 파이프라인에서의 입력 및 출력 리소스 둘 다를 선택하기 위한 매핑을 수행한다. 스위치(3800)의 선택적인 상세를 예시하는 예시적인 실시형태가 도 38에서 도시된다. 각각의 스위치는 복수의 입력 포트(3802) 및 출력 포트(3804)를 포함할 것인데, 입력 포트의 출력은 크로스바 인터커넥트(3806)을 통해 출력 포트의 입력에 커플링된다. 입력 포트(3802)는, 포워딩 라우팅 테이블(3808), SC 대 SC 매핑 테이블(3810)을 포함해서, 다양한 입력 포트 동작을 달성하기 위한 회로 및 로직을 포함한다. 각각의 입력 포트는 또한, 디멀티플렉서(demultiplexer; demux)(3814) 및 멀티플렉서(multiplexer; mux)(3816) 동작을 달성하기 위한 관련 회로 및 로직이 함께 복수의 VL 입력 FIFO(3812)를 포함한다. 출력 포트(3804)는, 디멀티플렉서(3815) 및 멀티플렉서(3817) 동작을 달성하기 위한 관련 회로 및 로직과 함께 복수의 VL 출력 FIFO(3813)를 포함한다.
도 38에서 도시되는 바와 같이, 패킷(3818)이 들어옴에 따라, 이 패킷을 수용하기 위한 입력 VL 리소스 중 하나를 선택하기 위해 그것은 먼저 (동작 'D'에서) SC 대 VLr 매핑(3820)을 거친다. 입력 리소스는, 입력단(input stage)에서 VL 고유의 FIFO를 보통 참조하고 있다. 이 매핑은, 하기에서 더 상세히 설명되는 바와 같이, 이 로컬 디바이스가 지원하는 VL의 수에 의존한다. 실시형태가 입력단에서 각각의 VL에 대한 개별적인 리소스를 가지지 않기 때문에, SC 대 VLr 매핑(3820)은 필요로 되지 않는다. 병행하여, 포워딩 라우팅 테이블(3808)은, 동작 'E'에서 묘사되는 바와 같이, 패킷(3818)의 목적지 로컬 식별자(Destination Local Identifier; DLID)를, 이 패킷의 출력 포트를 결정하기 위해 사용한다. 패킷의 SC 및 라우팅 결정의 결과에 의존하여, 새로 나가는 SC는 SC 대 SC 매핑 테이블(3810)을 사용하여 결정된다. 팻트리(Fat-Tree)와 같은 토폴로지의 경우, 새로운 SC는 보통 원래의 SC와 동일하다. 토러스(Torus)와 같은 토폴로지의 경우, 새로운 SC는, 출력 포트가 우연히 '날짜선(dateline)'을 가로지르는 경우 잠재적인 데드락을 방지하기 위한 원래의 SC의 증분일 수도 있다. 패킷의 SC 필드는 이 새로운 SC로 대체된다. 그 다음, 새로운 SC는, 패킷(3818)을 송신할 목적지 포트에서 출력 리소스를 선택하기 위한 출구 VLt를 유도하기 위해, 동작 'F'에서 다른 출력 포트 고유의 SC 대 VLt 매핑(3822)을 겪을 수도 있다. 출력 리소스를 선택하기 위한 매핑은, 하기에서 설명되는 바와 같이, 로컬 디바이스가 지원하는 VL의 수에 의존할 뿐만 아니라, 원격 디바이스가 지원하는 VL의 수에도 또한 의존할 수도 있다.
패킷이 특정한 VL 입력 FIFO(3812)로부터 풀링될 때, 이 VL을 사용하여 크레딧을 송신기로 역 ACK하는(ACK back) 대신, 송신단으로부터의 크레딧 관리를 일치시키기 위해, 스위치는 송신 디바이스의 VL, 또는 VLnt에 기초하여 크레딧을 역 ACK한다. 이것은, 입력 FIFO에서 풀링되고 있는 패킷의 SC를 매핑시키는 것에 의해 동작 'H'에 의해 달성되고 그것을, 송신측 상의 VL에 기초하여 패브릭 매니저에 의해 프로그래밍되는 SC 대 VLnt 테이블(3824)를 통해 매핑한다. 마찬가지로, 입구 패킷 및 입구 VLMarker LF 커맨드 플릿을 프로세싱하는 경우, SC 대 VLnt 테이블(3824)은, 송신기에 의해 정의되는 바와 같은 각각의 패킷의 VL 인터리빙을 적절히 추적하기 위해 인바운드 SC 값을 매핑하도록 사용된다. 이 로컬 디바이스 및 송신 디바이스 둘 다가 동일한 수의 VL을 지원하면, 동작 'D' 및 'H' 둘 다에서의 매핑 테이블은 동일할 것이다. 동작 'G'에서 묘사되는 바와 같이, 출력 포트에서, 크레딧은 이 로컬 디바이스의 VL에 기초하여 원격 수신 디바이스에 의해 역 ACK되고 대응하는 크레딧 카운터는 증가된다.
도 39에서 예시되는 바와 같이, 패킷이 HFI(3900)에 도달하면, SC는, 이 패킷을 수신할 입력 소스 중 하나를 선택하기 위한 VL을 선택하기 위해, 동작 'I'에서 제1 SC 대 VLr 매핑(3902)을 겪게 된다. 이 매핑은 스위치의 입력단에서의 매핑(도 38의 동작 'D')과 아주 유사하다. 입력단에서 각각의 VL에 대해 별개의 리소스를 가지지 않는 구현예의 경우, 동작 'I'에서의 이 매핑은 필요되지 않는다. 동작 'J'에서의 SC 대 SL 매핑(3904)의 제2 단계는 SC 값을 디코딩하고, 그것을 L4 레이어로 다시 건네주기 이전에, 그것을 이 패킷에 대한 원래의 SL에 역 매핑한다. 동작 'K'에서 묘사되는 바와 같이, 패킷이 특정 VL 입력 FIFO(3906)로부터 풀링될 때, 크레딧은, (도 38에서의 동작 'H'와 마찬가지로) 스위치에 대한 경우에서처럼 송신 디바이스의 VLnt에 기초하여 송신기로 역 ACK된다. 마찬가지로, 입구 패킷 및 입구 VLMarker LF 커맨드 플릿을 프로세싱하는 경우, SC 대 VLnt 테이블(3908)은, 송신기에 의해 정의되는 바와 같은 각각의 패킷의 VL 인터리빙을 적절히 추적하기 위해 인바운드 SC 값을 매핑하도록 사용된다.
패킷을 HFI에 의해 패브릭에 주입하는 경우, 초기 SC 값을 생성하기 위한 SL이 L4 레이어에 의해 제공된다. 일 실시형태에서, 아키텍쳐는 32 개의 QoS 레벨과 32개의 SC을 지원하는데, 이 매핑 프로세스는 소프트웨어로 또는 HFI 내부에서 행해질 수 있다. 패브릭의 토폴로지에 의존하여, 패브릭에서의 데드락을 방지하기 위해, 다수의 SC가 QoS 레벨마다 필요로 될 수도 있다. 한 예는 토러스 토폴로지에 대한 것일 것인데, 각각의 QoS 레벨은, 패킷이 '날짜선'을 교차하는 경우를 커버하기 위한 2개의 SC를 필요로 할 것이다. 이 경우, 그러면, 16개의 SL은, QoS 레벨을 전달할 뿐만 아니라, 주어진 토폴로지에서 데드락을 방지하기 위한 적절한 SC 설정을 제공하는 32개의 SC 공간으로 매핑될 것이다. 남아 있는 16개의 SL은 L4에 의해 사용되지 않을 수 있거나 또는 32개의 SC에 중복적으로 매핑될 수 있다. QoS 레벨당 단일의 SC만이 필요로 되는 팻트리와 같은 토폴로지의 경우, 32개의 SC는 32개의SC에 1:1 매핑된다.
일반적으로, 실제 SL 대 SC 매핑 값은, 소프트웨어가 패브릭 토폴로지에 대한 데드락 회피 규칙을 준수하는 한, 소프트웨어에 달려 있다.
HFI 안으로 유입하는 패킷의 SC는 SL로 역 매핑된다. 이 역 매핑 프로세스는 소프트웨어로 또는 HFI 내에서 행해질 수 있다. 데드락 회피를 위해 QoS 레벨당 다수의 SC를 사용하는 토폴로지의 경우, 일 실시형태에서, 이들 SC는, 애플리케이션이 패킷을 프로세싱하기 위해 사용할 수도 있는 단일의 SL 값으로 축소된다. 한 예는, 토폴로지의 데드락을 방지하기 위해 각각의 QoS 레벨에 대해 두 개의 SC가 사용되는 토러스 패브릭에 대한 것일 것이며; 그러면 32개의 SC는 16개의 SL 값으로 매핑 다운된다. 개개의 L4는 제공되는 SL을 무시할 것을 선택할 수도 있거나, 트래픽에 응답하여 사용하기 위한 SL을 선택하기 위해 그것을 사용할 수도 있거나, 또는 주어진 SL 값에 기초하여 추가적인 L4 검증 또는 L4 트래픽 분리를 수행할 수도 있다.
패킷이 스위치로 들어 온 이후, 패킷이 어떤 출력 포트로 전달되는지를 결정하기 위한 라우팅 결정이 포워딩 및 라우팅 테이블에 의해 이루어진다. SC가 단에서 단으로 지속하는 팻트리와 같은 토폴로지의 경우, SC는 그것이 어떤 출력 포트를 취하는지에 무관하게 변경되지 않고 남아 있다. 그러나, 토러스와 같은 소정의 토폴로지의 경우, 데드락을 방지하기 위해, 유입하는 패킷의 SC는, 출력 포트가 '날짜선'을 교차하게 되면, 증가될 필요가 있다. 따라서, 입구 SC 및 출력 포트에 기초하여 출구 SC를 생성하기 위한 SC 대 SC 매핑 테이블(예컨대, 도 38의 SC 대 SC 매핑 테이블(3810))이 제공된다. 그러면, 유입하는 패킷의 SC 필드는, 데드락을 방지하기 위해, 이 새로운 SC에 의해 대체된다. 출력 포트에서 이 패킷을 전송하기 위한 출력 리소스를 선택하는 경우, VL 선택은 도 38의 동작 'F'에서 도시되는 바와 같이 이 새로운 SC에 기초한다.
패킷이 들어올 때 입력 리소스를 선택하기 위한 SC 대 VL 매핑이 구현되고, 패킷이 나갈 출력 리소스를 선택하기 위한 다른 매핑이 필요로 된다. HFT에서(도 37의 동작 'B') 그리고 스위치에서(도 38의 동작 'F') 출력 리소스를 선택하기 위한 매핑 메커니즘은 동일하고, 한편 HFI에서(도 39의 동작 'I') 그리고 스위치에서(도 38의 동작 'D') 입력 리소스를 선택하기 위한 매핑 메커니즘도 또한 동등하다. 32개의 최대 수의 VL을 지원하는 디바이스의 경우, 입력 리소스를 선택하기 위한 매핑은 생략될 수 있다. 출력 리소스를 선택하기 위한 매핑은 여전히 요구되는데, 그것이 이웃의 능력에 의존하기 때문이다.
패브릭 내의 모든 디바이스가 동일한 수의 VL을 지원하는 동종(homogeneous) 환경에서, 모든 SC 대 VL 매핑은, 32개의 SC를 이용가능한 VL로 단순히 매핑 다운하기 위해 동일하게 설정될 수 있다. 상이한 디바이스가 상이한 수의 VL을 지원하는 이종 환경에서, SC 대 VL 메커니즘은, 매핑이 "확장"하고 있는지 또는 "축소"하고 있는지에 여부에 따라 상이하다. 하기에서는 이들 두 개념을 설명한다.
확장 매핑은, 수신 디바이스가 송신 디바이스보다 더 많은 VL을 지원하는 경우의 송신 및 수신 쌍에 대한 매핑 메커니즘을 설명한다. 도 40은, 4개의 VL을 포함하며 송신 디바이스로서 동작하는 스위치(4000T)와 8개의 VL을 포함하며 수신 디바이스로서 동작하는 스위치(4000R) 사이의 확장 매핑의 예를 도시한다. 스위치(4000T) 내에서 내부적으로, 패킷에 대한 SC는, 출력 리소스를 선택하기 위한 출구 VLt를 유도하기 위해, 동작 'F'에서 출력 포트 고유의 SC 대 VLt 매핑(3822)을 겪게 된다. 매핑 구성은 수신 디바이스에서의 입력 버퍼 타입에 따라 상이할 수도 있다. 수신 디바이스의 입력 버퍼가 별개의 FIFO이면, 동작 'F'에서의 출력 매핑은 송신측에서 이용가능한 모든 4개의 VL로 매핑한다. 4개의 VL에 대한 크레딧 카운터의 각각은 수신측의 입력 FIFO 중 하나의 사이즈로 설정된다. SC 대 VLt 매핑 결과는, 출구 VLt와 관련되는 적용가능한 VL 출력 FIFO(3813)를 선택하기 위해, 1:4 디멀티플렉서(3815)에 대한 제어 입력을 생성한다. 패킷의 관련 플릿을 아웃바운드로 송신하는 것과 연계하여, 플릿을 어떤 VL 출력 FIFO(3813)로부터 풀링하는지를 선택하기 위해, 입력 제어(도시되지 않은 중재기에 의해 구현됨)가 4:1 멀티플렉서(3817)로 인가된다.
패킷 데이터는 스위치(4000T)로부터 송신되고 스위치(4000R)에서 수신되는데, 그 때 이 패킷을 수용하기 위한 입력 VL 리소스 중 하나(VL 입력 FIFO(3812a) 중 하나)를 선택하기 위해, SC 대 VLr 매핑(3820)(동작 'D')이 수행된다. 'D'에서의 입력 매핑은, 입력 FIFO의 사용을 극대화하기 위해 모든 8개의 VL로 매핑하고 헤드 오브 라인 블로킹을 감소시키는 것을 돕는다. 이 구성 하에서, 버퍼 크레딧의 절반은 활용되지 않고 있다. VL 입력 FIFO의 선택은, 1:8 디멀티플렉서(3814a)에 대한 입력으로서 제공되는 동작 'D'에 의해 생성되는 제어 입력에 의해 달성된다. 8:1 멀티플렉서(3816a)은, 추가 프로세싱 동안 VL 입력 FIFO(3812a)로부터 플릿을 풀링할 때 구현된다. 도 40에서 또한 도시되는 바와 같이, 송신기에 의해 정의되는 바와 같은 각각의 패킷의 VL 인터리빙을 적절히 추적하기 위해, 인바운드 SC 값을 매핑하도록 SC 대 VLnt 테이블(3824)이 동작 'H'에서 사용된다.
수신 디바이스의 입력 버퍼가 공유 버퍼 또는 재구성가능한 버퍼의 풀이면, 동작 'F'에서의 출력 매핑은 송신측에서 이용가능한 모든 4개의 VL로 매핑한다. 4개의 VL에 대한 크레딧 카운터는, 전체 수신 버퍼 공간이 활용되고 있도록 구성된다.
각각은 VL은, 순방향 진행을 보장하기 위해, 하나의 풀 사이즈 패킷을 적어도 전송할 수 있을 충분한 크레딧을 제공받는다. 동작 'D'에서의 입력 매핑은, 입력 FIFO의 사용을 극대화하기 위해 모든 8개의 VL로 매핑하고 헤드 오브 라인 블로킹을 감소시키는 것을 돕는다.
축소 매핑은, 수신 디바이스가 송신 디바이스보다 더 적은 VL을 지원하는 경우의 송신 및 수신 쌍에 대한 매핑 메커니즘을 설명한다. 도 41은, 8개의 VL을 포함하며 송신 디바이스로서 동작하는 스위치(4100T)와 4개의 VL을 포함하며 수신 디바이스로서 동작하는 스위치(4100R) 사이의 축소 매핑의 예를 도시한다. 확장 매핑에서와 같이, 축소 매핑 구성은 수신 디바이스에서의 입력 버퍼 타입에 따라 상이할 수도 있다. 수신 디바이스의 입력 버퍼가 별개의 FIFO이면, 동작 'F'에서의 출력 매핑은, 수신측에 있는 VL에 일치하도록 송신측에서 단지 4개의 VL로 매핑한다. 4개의 VL에 대한 크레딧 카운터의 각각은 수신측의 입력 FIFO 중 하나의 사이즈로 설정된다. 동작 'D'에서의 입력 매핑은 상응하여 모든 4개의 VL로 매핑한다. 이 구성하에서, 8개의 이용가능한 출력 리소스 중 단지 4개만이 사용되고 있다. 수신 디바이스의 입력 버퍼가 공유 버퍼 또는 재구성가능한 버퍼의 풀이면, 동작 'F'에서의 출력 매핑은 송신측에서 이용가능한 모든 8개의 VL로 매핑한다. 8개의 VL에 대한 크레딧 카운터는, 전체 수신 버퍼 공간이 활용되고 있도록 구성된다. 각각은 VL은, 순방향 진행을 보장하기 위해, 하나의 풀 사이즈 패킷을 적어도 전송할 수 있을 충분한 크레딧을 제공받는다. 동작 'D'에서의 입력 매핑은 모든 4개의 VL로 매핑한다. 이 경우, 모든 8개의 이용가능한 출력 리소스가 사용되고 있다.
수신단의 입력 버퍼가 왕복 레이턴시를 커버하기에 충분히 크지 않거나 또는 단지 겨우 그것을 커버하는 때가 존재한다. 그 상황에서, 수신 버퍼가 공유 구조이거나 구성가능한 구조이면, 모든 리소스를 의도적으로 활용하지 않는 것에 의해 버퍼 크레딧을 보존하는 것이 가능하다. 도 40에서 예시되는 구성을 고려한다. 수신단의 공유 버퍼가 링크의 왕복 레이턴시를 가까스로 커버할 수 있으면, 동작 'F'가 송신측의 모든 4개의 VL로 매핑하는 대신, 그것은 단지 2개로(또는 어떠한 프로토콜 또는 토폴로지 데드락 요건도 존재하지 않으면 심지어 1개로) 매핑하도록 구성될 수 있다. 이 구성으로, 크레딧은, 특히 MUT가 크면, 4개 대신 2개의 VL 사이에서 보다 효율적으로 공유될 수 있다. 그러나, 이 방법은 QoS의 전달과 절충된다.
SC 대 VL을 매핑 다운하도록 SC 대 VL 테이블을 구성하는 경우, 상위 레이어 프로토콜이 교차되지 않는 것 및 패브릭 토폴로지에 대한 데드락 회피 규칙이 위배되지 않는 것이 중요하다. PGAS(Partitioned Global Address Space; 구획된 전역적 어드레스 공간)과 같은 레이어4 프로토콜의 경우, 소정의 SC가 요청 클래스에 대해 지정되고 다른 것은 응답 클래스 트래픽에 대해 지정된다. 두 개의 클래스가 우연히 동일한 VL 버퍼로 매핑 다운되면, 프로토콜 데드락이 발생할 수도 있다.
마찬가지로, 패브릭 토폴로지에서 데드락 회피를 위해 SC가 또한 할당될 수도 있다. 한 예는, 토러스 토폴로지의 것일 것인데, 크레딧 루프 의존성을 방지하기 위해, "날짜선"을 교차하는 패킷에 대해 모든 홀수 번째 SC가 할당된다. 이 상황에서, 짝수 번째 및 홀수 번째 SC는 VL 리소스 중 어떤 것에서도 혼합되도록, 또는 패브릭에서 토폴로지의 데드락을 경험하는 위험을 무릅쓰도록 허용되지 않는다. SC 대 VL을 다운 매핑하는 경우, 그것의 불행한 성질은, QoS가 절충되는 것이다. 상이한 QoS 레벨에 속하는 다수의 SC는 동일한 VL 리소스를 공유하도록 매핑 다운된다.
패킷이 입력 버퍼에서 풀링될 때, 크레딧은 수신기로부터 송신기로 역 ACK된다. 도 40 및 도 41에서 그런 것처럼, 두 단 사이에서 SC 대 VL 매핑이 잠재적으로 상이한 상태에서, 크레딧의 ACK하기(ACKing)는 송신측에서의 VLnt에 기초한다. 이것은, 입력 FIFO 중에서 풀링되고 있는 패킷의 SC를 매핑하고 (도 40 및 도 41의 동작 'H'에서) 그것을 SC 대 VLnt 테이블(3824)을 통해 매핑하는 것에 의해 달성된다. 그 다음, 이 생성된 VLnt에 대한 크레딧은, L2 링크 전송 서브 레이어에 의해 제공되는 플로우 제어 메커니즘을 통해 역 ACK된다. 도 40 및 도 41에서 예시되는 양 경우에 대해, 동작 'F' 및 'H'에서의 매핑 테이블은 일치할 것이다.
아키텍쳐는 (예를 들면, 도 38의 동작 E에서) 스위치의 입력 포트에 대한 SC 대 SC 매핑 테이블(3810)의 인스턴스가, 대신, SL 대 SL 매핑 테이블로서 구성되는 것을 허용한다. 이 피쳐는 IB HCA 또는 IB 스위치가 아키텍쳐 패브릭에 바로 연결되는 것을 허용한다. 그것은 또한, 패브릭에 대한 구성 관리 소프트웨어 및 레거시 라우팅의 사용을 허용하는데, 이 경우 SL 필드를 포함하는 L2 패킷 헤더만이 사용되고 있다.
아키텍쳐는 또한 레거시 매핑 모드를 지원한다. 예를 들면, SL 대 VL 매핑은 IBTA와 마찬가지로 작동하는 레거시 매핑 모드이다. 이 모드에서, VL과 SC 사이에는 어떠한 차이도 없다: 이들은 등가이다. 패브릭 전체에 걸친 모든 SC 대 VLt 매핑 및 SC 대 VLnt 매핑은 1:1로 프로그래밍되거나 또는 바이패스될 수도 있다. 스위치의 입력 포트에서의 모든 SC 대 SC 매핑 테이블(예를 들면, 도 38의 동작 E에서의 SC 대 SC 매핑 테이블(3810))은 SL 대 VL 매핑 테이블로 변경된다. 목적지 출력 포트 및 유입하는 패킷의 SC에 기초하여 출구 SC를 생성하는 대신, 출구 VL은 목적지 출력 포트 및 유입하는 패킷의 SL에 기초하여 결정된다. 패킷의 SC 필드는 스위치를 빠져나가기 이전에 이 VL 값으로 태깅된다. 토폴로지의 데드락 회피를 위한 것이며 디바이스가 지원하는 VL 리소스의 수의 지식을 갖지 않는 SC 대 SC 매핑과는 달리, SL 대 VL 매핑은 둘 다의 지식을 갖는다. 그러므로, 후속하는 SC 대 VL 매핑의 필요성을 제거하게 된다.
SL 대 VL 매핑 모드는, SL 필드를 포함하는 L2 링크 패브릭 패킷 포맷으로 작동하며, 그것은 이러한 포맷만을 사용하는 패브릭 환경에 대해 적절하다. 이것은, 모든 HFI가 이러한 포맷을 사용하여 서로 간에 통신만 하도록 허용된다는 것을 의미한다. SL이 패킷 내부에 명시적으로 포함된 상태에서, 단대단으로부터 SL을 보존하는 것은 자동적이다. 이종 환경에서의 축소 매핑 및 확장 매핑은 이제, 태스크를 수행하기 위해 다양한 SC 대 VL 테이블에 의존하는 대신 SL 대 VL 테이블로 구축된다. 이 레거시 모드에서, IB HCA는 아키텍쳐 패브릭에 바로 부착될 수 있다. 이 모드를 검토하는 등가의 방식은, 그것을 SC 대 VLt 및 SC 대 VNnt의 1:1 매핑과 함께 SL 대 SC 테이블로서 간주하는 것이다.
도 42는 이 SL 대 VL 레거시 매핑 모드의 하이 레벨 예를 예시한다. 그 도면은 두 개의 인피니밴드 호스트 채널 어댑터(InfiniBand Host Channel Adapter; IB HCA)(4200 및 4202), 두 개의 HFI(4204 및 4206), 및 두 개의 스위치(4208 및 4210)을 포함한다. L2 링크 패브릭 9B 패킷 포맷은 도 49에서 도시되며 하기에서 설명되는 SL 필드를 포함한다. 이것은, SL 필드 값을 변경시켜야 하지 않고도 IB HCA 및 HFI의 임의의 조합 사이에서 이들 9B 패킷이 단대단으로 전송되는 것을 가능하게 한다.
SL 대 VL 하이브리드 레거시 모드는, IB HCA 및 HFI의 혼합체를 가지며 9B 패킷 포맷 이외의 패킷 포맷을 사용하는 환경을 지원한다. 이러한 환경의 예는 도 43에서 도시되는데, 이것은 9B, 10B, 및 16B 패킷 포맷을 지원하고 두 개의 IB HCA(4300 및 4302), 두 개의 HFI(4304 및 4306), 및 두 개의 스위치(4308 및 4310)를 포함한다. 도 43은 또한, 괄호 안에 동작에 대한 적용가능한 문자의 포함에 의해 도 37 내지 도 32에서 도시되는 다양한 동작을 묘사한다. 이러한 패브릭을 가지고, 모든 포트는, IB HCA 디바이스 연결되는 스위치 포트를 제외하면, 정상 모드에서 연결된다. 이들 포트에 대해, SC 대 SC 매핑 테이블(3810)의 인스턴스(도 38의 동작 'E')가 SL 대 SL 매핑을 구현하도록 구성되는 경우, 하이브리드 모드가 사용된다. IB 포트로부터 패킷이 들어옴에 따라, 그것의 SL 필드는 아키텍쳐에 의해 지원되고 있는 32개의 SC 중 하나로 매핑된다. 패킷의 SC 필드를 이 값으로 설정한 이후, 패킷은, 이 패킷에 대한 출력 리소스를 선택하기 위한, 도 38의 동작 'F'에서 도시된 것과 유사한 SC 대 VL 매핑을 겪는다. 이것은, 상기의 SL 대 VL 레거시 모드에 대해 설명된 바와 같은 SL 대 VL과는 상이하다. 매핑을 두 단계로 디커플링하는 것에 의해, 패킷의 SL 필드는, 연결하는 스위치가 지원하는 VL로 마킹 다운되는 대신 32개의 SC의 최대한의 범위로 매핑된다. 이것은, 패브릭이 이종 패브릭에서 확장 및 축소 매핑을 겪는 것 및 도중에 모든 리소스를 활용하는 것을 허용한다. 9B 패킷 트래픽만을 포함하는 패브릭의 경우, 이 하이브리드 모드는 SL 대 VL 레거시 모드 대신 또한 사용될 수 있다는 것을 유의한다.
링크 패브릭 서브 레이어
상기에서 논의된 바와 같이, 정보는 L2 링크 레이어를 통해 엔드포인트에서 엔드포인트로 송신되는데, 이 경우 각각의 메시지는 하나 이상의 링크 패브릭 패킷에 의해 반송된다. 실시형태에서, 이들 패킷은, 16바이트(2 플릿)만큼 작은 사이즈 내지 16376바이트(2047 플릿)만큼 큰 사이즈를 지원한다. 이 범위는, PGAS 프로그래밍 언어에서 일반적인 작은 메시지에서 캡슐화된 점보(10KB) 이더넷 프레임을 전송하는 데 필요한 큰 메시지 둘 다의 필요성을 충족하도록 의도된다. 일 실시형태에서, 가장 큰 FP의 사이즈는, 10KB인 L4 MTU(maximum transfer unit; 최대 전송 단위)로 제한된다.
도 2에서 예시되는 바와 같이, 이 링크 패브릭 서브 레이어는 전체 L2 레이어의 상위 절반인데, L2 링크 전송 서브 레이어를 포함하는 하위 절반은 물리적 레이어에 더 가깝게 동작한다. 일 실시형태에서, HFI 및 스위치와 같은 아키텍쳐의 디바이스에 대한 로직 파이프라인은 상위 링크 패브릭 서브 레이어에서 패킷을 전송한다. 그러나, 디바이스 사이의 링크에서, 링크 패브릭 패킷은 더 작은 단위(플릿)으로 분할되는데, 이들은 결국에는 (LTP)로 함께 번들화되고, 링크 전송 서브 레이어를 사용하여 반송된다.
도 45에서 예시되는 일반적인 패브릭 패킷 포맷에서 나타내어지는 바와 같이, 패브릭 패킷은 헤드 플릿으로 시작하고, 0 내지 2045의 바디 플릿이 후속하고, 그리고 테일 플릿으로 종료한다. 버블, 또는 아이들 플릿뿐만 아니라 다른 LF 커맨드 플릿은 패브릭 패킷 플릿과 함께 산재되도록 허용된다. 패브릭 패킷 헤더 필드의 세트는, 패킷을 목적지 엔드포인트를 향해 라우팅하는 것을 돕는 다양한 정보를 제공하는 다수의 바이트에 걸친 각각의 패킷의 시작에서 존재한다.
포맷 타입에 따라, 이들 헤더 필드는 하나 이상의 플릿에 걸칠 수도 있는데, 헤드 플릿으로 시작한다. FP의 데이터 페이로드는 헤더 필드를 후속하며, 테일 플릿에 의해 정의되는 바와 같이, FP의 끝까지 계속된다. 도 4 및 테이블 1을 참조로 상기에서 설명된 바와 같이, 플릿 타입 비트(플릿 비트 [64])는 링크 타입(Link Type; LT) 제어 비트(데이터 비트 [63] 및 데이터 비트 [62])와 결합하여, 플릿이 헤드 플릿인지, 바디 플릿인지, 또는 테일 플릿인지의 여부를 식별한다.
일 실시형태에서, 아키텍쳐는 네 개의 상이한 헤더 포맷을 지원한다. 각각의 포맷은 상이한 수의 헤더 필드를 포함하고 상이한 피쳐 세트를 제공한다. L2 패브릭 패킷 포맷 중 하나는 8B 헤더 포맷인데, 이것은 "00"으로 설정되는 L2 타입 헤더 필드를 구비한다. 그것은 다른 것보다 더 컴팩트하게 설계되며, 하위 패킷 오버헤드를 제공한다. 헤더가 단일의 플릿 내에 적합하기 위해, 이 포맷은 감소된 피쳐 세트 및 총 127 플릿의 최대 패킷 사이즈를 반송할 수 있는 짧아진 길이 필드를 갖는다. 이 한계를 초과하는, 또는 생략되는 피쳐를 필요로 하는 페이로드의 경우, 다른 포맷 중 하나가 사용된다. 패브릭 패킷 8B 헤더 포맷의 한 실시형태는 도 46에서 도시된다.
도 47에서 도시되는 바와 같이, 10B 헤더 포맷은 8B 포맷보다 더 긴 길이 필드를 가지며, 그것이 2047 플릿까지의 최대 패킷 사이즈를 반송하는 것을 허용한다. 또한, 그것은 8B가 제공하지 않는 엔트로피 피쳐 및 감소된 P_Key(구획 키)를 제공한다. 일 실시형태에서, 10B 헤더 패킷은 "01"로 설정되는 L2 타입 헤더 필드를 갖는다.
일 실시형태에서, 16B 헤더 포맷은 링크 패브릭 서브 레이어가 지원하는 모든 피쳐를 포함한다. 도 48에서 도시되는 바와 같이, 16B 헤더 패킷은 "10"으로 설정되는 자신의 L2 타입 헤더 필드를 갖는다. 포맷은 3개에서부터 2047개까지의 플릿을 포함하는 패킷에 대해 사용될 수 있다. 헤더는 정확히 16바이트, 또는 두 플릿을 소비하는데, 이것은 후속하는 페이로드에 대한 깔끔한 정렬을 제공한다. 또한, 이 포맷은, 아주 많은 수의 엔드포인트를 지원하는 확장된 24비트 어드레싱 공간(addressing space)을 제공한다.
9B 헤더 포맷의 실시형태가 도 49에서 도시된다. 9B 헤더 포맷은 인피니밴드(IB) 트래픽 반송을 목적으로 한다. 이 패킷 포맷에 대한 L2 타입 헤더 필드는 "11"로 설정되고 비트[60:57]의 "0000"이 바로 후속한다. 헤드 플릿의 이 최상위 바이트 이후에, 네이티브 IB 패킷이 바로 부착된다. 그러나, 네이티브 4비트 IB VL 필드는, 아키텍쳐가 지원하는 5비트 SC 필드와 일치하기 위해 헤드 플릿의 비트[56]으로 1비트 만큼 확장된다. IB와 아키텍쳐 사이의 통합된 패브릭 아키텍쳐로 인해, IB 로컬 라우팅 헤더 및 베이스 전송 헤더에서의 선택된 헤더 필드는, 이 패킷을 라우팅할 때 링크 패브릭 서브 레이어에 의해 바로 사용된다. 이들 필드는 SC, LVer, SL, LNH, DLID, 길이, SLID, P_Key, (F)ECN, 및 (B)ECN을 포함하는데, 이들은 도 49에서 그물눈으로 묘사된다.
L2 패브릭 패킷은, 하나 이상의 플릿에 걸치는 헤더로 시작한다. 헤더를 반송하는 제1 플릿은 헤드 플릿으로 마킹되고, 헤더의 나머지는 제로 또는 그 이상의 바디 플릿에 의해 마킹된다. 패킷 헤더는, 헤더가 제1 플릿 전체, 및 제2 플릿의 2바이트를 차지하는 10B 헤더 포맷에 의해 나타내어지는 바와 같이, 다수의 플릿 사이즈일 필요는 없다. 각각의 헤더는, 라우팅 지시 및 패킷에 관한 다른 정보를 포함하는 다양한 필드로 구성된다. 테이블 3은 각각의 패킷 포맷 내에 포함되는 필드의 개요를 제공한다.
Figure 112016049112345-pct00008
L2 타입 인코딩 필드는 패브릭 패킷을 식별하기 위해 사용된다. 이 필드는, 비트[62:61]이 "00", "01", 또는 "10"으로 설정될 때 2비트 폭이다. 그러나, 그것이 "11"로 설정되는 경우, 그 필드는 비트[62:57]에 위치되는 6비트 폭으로 확장된다. 이 인코딩에 기초하여, 각각의 아키텍쳐 디바이스는, 패킷 포맷의 타입 및 그것의 헤더 필드의 위치를 검출한다.
각각의 패브릭 패킷은 상위 L4 프로토콜 레이어에 대한 페이로드를 반송한다. 특정한 패킷이 어떤 L4 프로토콜을 반송하고 있는지를 엔드포인트가 알기 위해, L4 타입 필드가 각각의 헤더에 포함된다. 이 필드는 8B 및 10B 헤더 포맷에 대해 4비트 폭이며, 한편 그것은 16B 헤더 포맷에서 8비트로 확장되고, 그것이 더 많은 L4 프로토콜에 의해 사용되는 것을 허용한다. 4비트 폭 버전의 경우, [3:0]으로 정의되는 대신, 그것은 비트 7을 반송하며 [7,2:0]으로 정의된다. L4 타입 필드의 4비트 버전 및 8비트 버전 둘 다 하에서, 인코딩 공간의 상당 부분은 아키텍쳐의 L4 네이티브 오프로드 프로토콜(Native Offload Protocol)에 대해 할당된다. 모든 다른 L4 프로토콜은 남아 있는 인코딩 공간을 공유한다. 9B 헤더 포맷은, L4 타입 필드를 포함하지 않는 유일한 포맷인데, 그것이 L4 IB 캡슐화를 구체적으로 목표로 하기 때문이다.
비트[56:52]에서 각각의 헤드 플릿에 포함되는 5비트 SC 필드는, 32개의 서비스 채널 중 패킷이 어떤 것을 사용하고 있는지를 식별한다. 각각의 아키텍쳐 디바이스는, 본원의 그 밖의 곳에서 더 상세히 설명되는 바와 같이, 패킷을 하류로 이동시키기 위해 SC 및 VL 리소스의 어떤 세트가 사용되는지를 결정하기 위한 이 필드를 사용한다.
일 실시형태에서, 아키텍쳐는 32개의 QoS 레벨을 지원한다. 8B, 10B, 및 16B 패킷 포맷의 경우, 이 정보는 SC 필드에 의해 나타내어지며, 따라서 이들 포맷은 명시적인 SL 필드를 포함하지 않는다. 9B 패킷 포맷의 경우, 그것은 캡슐화된 IB 패킷으로부터 이어받은 4비트의 명시적인 SL 필드를 반송한다. 패킷을 패브릭에 주입할 때 레거시 IB HCA가 자신의 VL 필드 내에서 SL 정보를 나타내지 않기 때문에, 패킷에 대한 QoS를 특정하는 데 이 SL 필드가 필요로 된다. IB HC로부터 9B 패킷을 수신하는 에지 스위치는, 상기에서 논의된 SL 대 SC 매핑을 사용하는 것에 의해 이 SL 정보를 SC 필드 안으로 나타내기 위한 옵션을 갖는다. 이 경우, 수신하는 엔드포인트는, 자신의 명시적인 SL 필드를 검사하는 것에 의해, 또는 SC 필드를 디코딩하는 것에 의해, 패킷에 대한 QoS를 검색할 수 있다.
패킷이 전달되어야 하는 엔드포인트를 나타내기 위한 목적지 로컬 ID(DLID) 필드가, 각각의 헤드 플릿에 위치된다. 아키텍쳐 패브릭의 모든 엔드포인트는, 패브릭의 도메인 내에서 고유한 하나 이상의 DLID에 의해 식별된다. 8B 및 10B 포맷의 경우, 20비트의 DLID 필드가 헤드 플릿의 비트[51:32]에 위치된다. 16B 포맷의 경우, 24비트 DLID 필드가 헤드 플릿의 비트[51:32] 및 제2 헤더 플릿의 비트[15:12]에 위치된다. 9B 포맷의 경우, 16비트 DLID는, 다른 포맷보다 더 적은 어드레싱 공간을 제공하는 헤드 플릿의 비트[39:24]에 위치된다. 일 실시형태에서, DLID 공간은 유니캐스트 및 멀티캐스트/집합적 어드레싱 둘 다를 지원하는데, 이 경우 유니캐스트 어드레스는 단일의 엔드포인트 전달을 식별하고 멀티캐스트/집합적 DLID는 전달되어야 하는 엔드포인트의 세트를 식별한다.
패킷이 전송되었던 엔드포인트를 나타내기 위한 소스 로컬 ID(source local ID; SLID) 필드가 각각의 헤드 플릿에 위치된다. 8B 및 10B 포맷의 경우, 20비트의 소스 필드가 헤드 플릿의 비트[19:0]에 위치된다. 16B 포맷의 경우, 24비트 DLID 필드가 헤드 플릿의 비트[19:0] 및 제2 헤더 플릿의 비트[11:8]에 위치된다. 9B 포맷의 경우, 16비트의 SLID가 헤드 플릿의 비트[7:0] 및 제2 플릿의 비트[63:56]에 걸친다. SLID의 할당은 이전 섹션에서 설명된 바와 같은 DLID와 아주 유사하지만, SLID는 절대 멀티캐스트/집합적 어드레스가 아닐 것이라는 예외를 갖는데, 패킷이 하나보다 많은 엔드포인트에 의해 생성될 수 없기 때문이다. 많은 토폴로지는, 비혼잡 환경에서 레이턴시를 감소시키기 위한 시도로 패킷을 그들 목적지까지의 최소의 경로를 통해 라우팅하는 것, 또는 비록 라우팅 경로가 최소가 아닐 수도 있지만, 혼잡을 최소화하기 위해 패브릭 전체에 걸쳐 패킷을 확산시키는 것과 같은 다수의 라우팅 방법을 제공한다. 몇몇은 또한 적응적 라우팅을 제공하는데, 이 경우, 엔드포인트 사이의 패킷은 각각의 패킷이 조우하는 혼잡 레벨에 기초하여 라우팅된다.
라우팅 제어를 가능하게 하기 위해, 라우팅 요건 및 패브릭 전체에 걸쳐 주어진 패킷을 라우팅하기 위한 선호되는 방법 둘 다를 명시하는 RC 필드는 3비트 필드로서 인코딩된다. 특정한 트래픽 또는 애플리케이션에 대해 어떤 라우팅 방법을 사용할지를 결정하고 상응하여 이 필드를 설정하는 것은 L4 전송 레이어의 책임이다. 최상위 비트(top bit)인 RC[2]가 언셋되면, 최하위 비트(bottom bit)인 RC[0]은, 패킷이 순서대로 라우팅될 것인지를 패브릭에게 통지한다. 순서가 맞지 않게 라우팅되도록 허용되는 패킷의 경우, 패브릭의 성능에 따라, 패킷은 랜덤하게 라우팅될 수도 있거나 또는 라우팅 선택의 혼잡 레벨에 기초하여 라우팅될 수도 있다. 중간 비트인 RC[1]은, 패킷이 레이턴시에 대해 최적화하도록 라우팅되어야 하는지 또는 대역폭에 대해 최적화하도록 라우팅되어야 하는지의 여부를 특정한다. 레이턴시에 대해 최적화하는 경우, 패브릭은 목적지로 향하는 홉 카운트를 최소로 한다. 대역폭에 대해 최적화하는 경우, 혼잡을 줄이기 위해 트래픽을 확산시키 위한 최소가 아닌 라우팅이 활용될 수도 있다.
패브릭에 의해 지원되는 라우팅 방법 및 토폴로지에 따라, 각각의 스위치는 RC 필드에서 특정되는 것을 검사하지만, 그러나 보다 제한적인 방식으로 패킷을 라우팅할 것을 선택할 수도 있다. 일 실시형태에서, 이 필드에 대한 설정이 순서에 맞는 라우팅을 특정하면, 패킷은 순서에 맞지 않게 라우팅되도록 허용되지 않는다. 그러나, 순서에 맞지 않는 것이 특정되더라도, 패킷을 순서에 맞게 라우팅하는 것은 허용된다.
9B 헤더 포맷을 제외한 모든 패킷 포맷은 헤드 플릿의 비트[59:57]에서 이 필드를 포함한다. 9B 헤더 포맷이 IB 패킷을 캡슐화하기 위해 사용되기 때문에, 그리고 현존하는 IB 프로토콜이 이 라우팅 제어 필드를 활용할 수 없기 때문에, 필드는 9B 포맷으로부터 생략된다. 일 실시형태에서, 9B 포맷을 사용하는 패킷은 결정적 0 라우팅 방법(Deterministic 0 routing method)을 사용하여 프로세싱된다.
8B, 10B, 및 16B 헤더 포맷의 경우, 길이 필드는, 헤드 및 테일 플릿을 포함해서, 패킷에서의 플릿의 총 수를 명시한다. 각각의 플릿이 64비트 폭인 상태에서, 패킷의 총 사이즈는 따라서 8B에 의해 승산되는 길이와 동일하다. 네이티브 IB 패킷을 캡슐화하기 위해 사용되는 9B 헤더 포맷의 경우, 길이 필드는 캡슐화된 IB 패킷의 일부이고 따라서 플릿의 수를 제공하지 않는다. 대신, 그것은 캡슐화되어 있는 IB 패킷의 사이즈를 4바이트 워드의 단위로 명시한다. IB 패킷을 캡슐화할 때 추가적인 헤드 및 테일 바이트로 인해, 9B 헤더 패킷에서의 플릿의 실제 수는 항상 "길이[11:0]/2+1"와 동일하다.
LVer(Link Version; 링크 버전) 필드는 특히 9B 헤더 포맷에 대한 것이며 비트[51:48]에 위치된다. 이것은 부착된 IB 패킷으로부터 바로 사용되는 필드이다. IBTA 1.2.1에 따라, 이 필드에서의 값은 0일 것이다. 마찬가지로, 링크 넥스트 헤더(Link Next Header; LNH) 필드는 특히 9B 헤더 포맷에 대한 것으로 비트[41:40]에 위치된다. 이것은 부착된 IB 패킷으로부터 바로 사용되는 필드이다. 아키텍쳐는 다양한 혼잡 관리 피쳐를 지원한다. 혼잡 확산을 최소화하기 위한 단대단(End-to-End; E2E) 혼잡 관리 스킴의 일부로서, 패브릭 내에서 혼잡을 조우하는 패킷을 마킹하기 위한 순방향의 명시적 혼잡 통지(Forward Explicit Congestion Notification; FECN 또는 간단히 F) 비트가 사용된다. 이 FECN 비트는 역방향의 명시적 혼잡 통지(Backward Explicit Congestion Notification; BECN 또는 간단히 B) 비트와 연계하여 사용된다. 8B, 10B, 및 16B 포맷의 경우, 이 F 비트는 헤드 플릿의 비트[60]에 위치된다. 그러나, 9B 헤더 포맷의 경우, 이 비트는 부착된 IB 패킷 내부의 FECN 비트와 직접적으로 공유된다. (B)ECN 비트는, 소스 엔드포인트에게 그것이 패브릭 내에서 혼잡의 형성 및 확산을 야기하고 있을 수도 있다는 것을 통지하기 위한 피드백 메커니즘으로서 사용된다. 8B, 10B, 및 16B 포맷의 경우, 이 B 비트는 헤드 플릿의 비트[31]에 위치된다. 그러나, 9B 헤더 포맷의 경우, 이 비트는 부착된 IB 패킷 내부의 BECN 비트와 직접적으로 공유된다.
개념은, 패킷이 소스로부터 자신의 목적지 엔드포인트로 이동하고 있는 경우, 혼잡 기준의 세트에 기초하여 혼잡이 조우될 때 이 비트가 마킹된다는 것이다. 일단 그것이 설정되면, 경로를 따른 패브릭 내의 어떠한 다른 스위치도 그것을 언셋할 수 없다. 목적지에 도달되면, 엔드포인트는, ACK 패킷의 B 비트를 마킹하는 것에 의해 소스 엔드포인트에게 패킷을 통지하거나 또는 명시적인 혼잡 통지(explicit congestion notification; ECN) 패킷을 소스 엔드포인트로 되전송하는 옵션을 갖는다. F 비트의 경우에서와 같이, 패브릭 내의 어떤 스위치도 B 비트를 언셋하도록 허용되지 않는다. 소스가 충분한 B 통지를 수신하면, 소스는 소스가 너무 많은 트래픽을 패브릭 안으로 주입하고 있다는 것을 인식하고 혼잡의 확산을 중지시키기 위해 주입율을 떨어뜨린다.
구획 키 필드 또는 P_Key는 L2 링크 레이어에서의 패브릭의 구획화에 관련된다. 구획은, 서로 통신하도록 허용되는 엔드포인트의 세트를 제한하기 위해 사용될 수도 있다. 또한, 다수의 중첩하는 구획이 정의될 수도 있는데, 이 경우, 엔드포인트는 하나보다 많은 구획의 멤버일 수도 있다. 필드의 MSB는 멤버십 표시자로서 사용되고, 따라서 남아 있는 15 비트는 32767개까지의 구획을 지원한다. '1'의 멤버십 표시자 비트 값은, 전체 멤버를 의미하고 한편 '0'은 제한된 멤버를 의미한다.
분산성 라우팅(dispersive routing)에 대해 엔트로피 필드가 사용되는데, 이 경우 필드의 컨텐츠는 상위 L4 전송 레이어에 의해 제어되고 그것이 패브릭 내에서 단에서 단까지 일정하게 유지된다. 이 필드를 사용하는 것에 의해, 엔드포인트를 향해 주행하는 패킷은, 트래픽의 확산을 돕고 혼잡을 완화하기 위해 모든 유효한 경로에 걸쳐 해싱할 수 있다. 엔트로피는 또한, 수신측 스케일링을 제공하기 위해 L4 구현예에 의해 사용될 수도 있는데, 이 경우 엔트로피 값은, 패킷을 프로세싱하기 위해 어떤 수신 큐 및/또는 수신 프로세싱 스레드가 사용되어야 하는지를 선택하도록 엔드포인트에 의해 사용될 수도 있다. 16B 및 10B 헤더 포맷은, 각각, 제2 헤더 플릿의 비트[47:32] 및 비트[15:8]에 위치되는 16비트 및 8비트 엔트로피를 제공한다. 8B 및 9B 포맷은 이 피쳐를 제공하지 않는다.
반드시 모든 라우팅 모드가 이 엔트로피 필드를 활용하는 것은 아니다. 예로서, 특정한 토폴로지에 대한 적응적 라우팅은 라우팅 선택을 랜덤하게 선택하고 이 필드를 무시할 수도 있다. 그것을 사용하는 다른 라우팅 모드의 경우, 필드의 설정은 SLID 및 DLID 비트의 조합만큼 대략적일 수 있거나, 프로세스 ID만큼 약간 세밀할 수 있거나, 또는 메모리 어드레스 비트의 조합을 이용하여 아주 세밀할 수도 있다.
8비트 연령(Age) 필드는, 패킷이 패브릭을 통과할 때의 패킷의 연령을 의미하며 전역적 공평성을 제공하기 위해 연령 기반의 중재를 대해 사용된다. 소정의 토폴로지, 예컨대 토러스 또는 메시(Mesh)는, 로컬하게 공평한 중재가 사용될 때, 널리 공지된 공평성 문제를 갖는데, 이것은, 특히 대형 사이즈의 네트워크 하에서, 패킷 레이턴시에서의 큰 변동으로 이어질 수 있다. 연령 기반의 중재는 패킷 레이턴시 변동을 감소시킬 뿐만 아니라, 그것은 또한 패킷의 평균 레이턴시도 낮춘다. 연령 필드는, 연령 피쳐를 지원하는 유일한 포맷인 16B 헤더 패킷 포맷에서의 제2 헤더 플릿의 비트[55:48]에 위치된다. 필드의 값은 홉별로(hop-to-hop) 변하는데, 이 경우 각각의 디바이스는 연령을 그것이 빠져나가기 이전에 그 디바이스 내에서 살았던 시간에 비례하는 양에 의해 축적한다. 그 양이 구성가능한 포화 값에 도달하면, 이 연령 필드는 홉 카운트로서 작용하고 각각의 홉에서 1만큼 증가된다. 각각의 디바이스는, 패킷을 하류로 포워딩할 때 중재 프로세스 동안 패킷의 연령을 고려한다. FM에 의해 구성가능한 최대 허용된 한계를 갖는 패킷을 포트가 수신하면, 부정확하게 프로그래밍된 라우팅 테이블로 인해 패킷은 런어웨이 패킷으로 간주되어 드랍된다. 그 다음, 이 잘못된 조건은 에러 카운터를 통해 보고된다.
"R"에 의해 식별되는 필드는 미래의 사용을 위해 예약되는 필드를 포함한다. 일 실시형태에서, 예약 필드 비트는 엔드포인트에 의해 패브릭에 주입될 때 제로로 설정되고, 무시되고 패브릭을 통한 스위치에 의해 변경되지 않고 유지되고, 수신 엔드포인트에 의해 무시된다.
각각의 링크 패브릭 패킷은 상위 L4 레이어 프로토콜에 대한 패킷을 캡슐화하는 페이로드 부분을 반송한다. 수 바이트만큼 작은 것에서 거의 16K 바이트(또는, 적용되는 바에 따라, 10KB MTU)만큼 큰 것일 수 있는 이 페이로드는, 모든 포맷에 대한 헤더 필드 직후에 계속된다. 캡슐화된 L4 패킷은, 헤더 및 페이로드의 자기 고유의 세트를 포함한다. L4 패킷의 포맷은 프로토콜에 고유하다. 아키텍쳐에 의해 지원되는 L4 프로토콜의 예는, 아키텍쳐의 네이티브 오프로드 프로토콜, 이더넷, 인피니밴드, 및 패브릭 관리를 포함한다. 페이로드가 반송하고 있는 L4 프로토콜의 타입은, 상기에서 논의된 바와 같이, 각각의 패브릭 패킷 헤더의 L4 타입 필드에서 특정된다. 이 캡슐화된 L4 패킷의 최종 플릿은, 필요조건은 아니지만, L4 패킷을 보호할 뿐만 아니라, L2 패브릭 패킷의 불변의 헤더 필드를 커버하는 불변의 CRC(invariant CRC; ICRC)를 종종 포함한다.
도 50은, 일 실시형태에 따른, 송신 포트(5000) 및 수신 포트(5002)를 포함하는 링크 인터페이스 포트의 선택된 양태를 예시한다. 도 50에서 도시되는 다양한 엘리먼트는 이전 도면에서 도시되며 본원의 다른 곳에서 상세히 논의된다. 도시되는 엘리먼트 외에, 송신 및 수신 포트 둘 다는, 도면 사이즈 한계로 인해 도시되지 않은 추가적인 컴포넌트를 포함할 것이다.
송신 포트(5000) 및 수신 포트(5002)의 각각은, 본원에서 논의되는 송신 포트 동작을 달성하기 위한 회로 및 로직을 포함한다. 상기에서 제공되고 도 2에서 도시되는 바와 같이, 아키텍쳐는 링크 패브릭 서브 레이어, 링크 전송 서브 레이어, PHY 레이어를 활용한다. 따라서, 송신 포트(5000) 및 수신 포트(5002)의 각각에 대한 회로 및 로직은, 대응하는 서브 레이어 또는 레이어 동작을 가능하게 하는 블록으로 구획되는 것으로 묘사된다. 송신 포트(5000)의 경우, 이들은 Tx 링크 패브릭 서브 레이어 회로 및 로직(5004), Tx 링크 전송 서브 레이어 회로 및 로직(5006) 및 Tx PHY 회로 및 로직(5008)을 포함한다. 마찬가지로, 수신 포트(5002)는 Rx 링크 패브릭 서브 레이어 회로 및 로직(5010), Rx 링크 전송 서브 레이어 회로 및 로직(5012) 및 Rx PHY 회로 및 로직(5014)을 포함한다. 회로 및 로직의 이들 큰 블록 사이에서의 분할은 엄밀하지 않다는 것, 및 회로 및 로직의 주어진 블록 내에서 도시되는 몇몇 기능은 하나보다 많은 블록에 걸쳐 또는 다른 블록에서 구현될 수도 있으며, 도 50에서 예시되는 구성은 예에 불과하고 구현될 수도 있는 다른 구성에 대한 제한이 없다는 것이 이해될 것이다.
Tx PHY 회로 및 로직(5008)은, 네 개의 송신기(5016) 및 Tx 링크 제어 블록(1804)의 일부를 포함하는 단순화된 형태로 예시된다. 일반적으로, 송신기(5016)는, 링크의 PHY 레이어 구성에 따라, 전기적 또는 광학적 송신기를 포함할 수도 있다. Tx PHY 회로 및 로직 블록은, 명확화를 위해 도시되지 않은 송신측 PHY 레이어 동작을 구현하기 위한 추가적인 회로 및 로직을 포함할 것이다는 것이 네트워크 기술분야의 기술을 가진 자에 의해 이해될 것이다. 이것은, 에러를 감소시키고 송신 특성을 향상시키기 위해 고속 인터커넥트와 연계하여 구현되는 다양한 피쳐를 가능하게 하기 위해 사용되는 다양한 서브 레이어를 PHY 레이어 내에 포함한다. 일 실시형태에서, 스크램블링 및 64b/66b 송신측 동작은, PHY 레이어 동작을 가능하게 하는 Tx 링크 제어 블록(1804)의 일부에 의해 수행된다.
Tx 링크 전송 서브 레이어 회로 및 로직(5006)은 본원에서 설명되는 링크 전송 서브 레이어 동작의 송신측 양태를 구현하도록 구성된다. 이들은, 재시도 로직(5018), LTP 번들화 블록(5020), 리플레이 버퍼(1806), 및 NxtWrLTP 및 NxtTxLTP 포인터를 포함해서, LTP를 번들화하기 위한, Tx PHY에 대한 핸드오프용 LTP 스트림을 준비하기 위한, 그리고 RetryReqs에 응답하여 LTP의 리플레이를 지원하기 위한 다양한 컴포넌트 및 로직 블록을 포함한다. 또한, Tx 링크 제어 블록(1804) 및 QoS 기능은, QoS 블록(5022)에 의해 묘사되는 바와 같이, Tx 링크 전송 서브 레이어에 대해 구현된다.
Tx 링크 패브릭 서브 레이어 회로 및 로직(5004)은 본원에서 설명되는 링크 패브릭 서브 레이어 동작의 송신측 양태를 구현하도록 구성된다. 이들 동작을 가능하게 하기 위한 예시된 컴포넌트 및 블록은, 이더넷, 인피니밴드, 및 네이티브 아키텍쳐 패킷의 L4 캡슐화를 수행하도록 구성되는 L4 캡슐화 서브 블록(5026)을 포함하는 패브릭 패킷 구축 블록(5024), 중재 로직(3400), 크레딧 매니저(3002) 및 복수의 출력 FIFO(3704)를 포함한다. 또한, 도시되는 바와 같이, QoS 로직(5022)의 일부는, 링크 패브릭 서브 레이어에서 구현되는 QoS 동작에 대해 사용된다.
Rx PHY 회로 및 로직(5014)은, 네 개의 수신기(5028) 및 Rx 링크 제어 블록(1805)의 일부를 포함하는 단순화된 형태로 예시된다. 일반적으로, 수신기(5028)는, 링크의 PHY 레이어 구성에 따라, 전기적 또는 광학적 송신기를 포함할 수도 있고, 송신기(5016)로부터 링크를 통해 신호를 수신하도록 구성될 것이다. Rx PHY 회로 및 로직 블록은, 명확화를 위해 도시되지 않은 수신측 PHY 레이어 동작을 구현하기 위한 추가적인 회로 및 로직을 포함할 것이다는 것이 네트워크 기술분야의 기술을 가진 자에 의해 이해될 것이다. 이것은, 에러를 감소시키고 송신 특성을 향상시키기 위해 고속 인터커넥트와 연계하여 구현되는 다양한 피쳐를 가능하게 하기 위해 사용되는 다양한 서브 레이어를 PHY 레이어 내에 포함한다. 일 실시형태에서, 디스크램블링 및 64b/66b 수신측 동작은, PHY 레이어 동작을 가능하게 하는 Rx 링크 제어 블록(1805)의 일부에 의해 수행된다.
Rx 링크 전송 서브 레이어 회로 및 로직(5012)은 본원에서 설명되는 링크 전송 서브 레이어 동작의 수신측 양태를 구현하도록 구성된다. 이들은, LTP를 번들화해제(unbundling)를 위한, LTP CRC 및 레인당 CRC 에러, 수신기 버림 모드와 관련 동작, 및 QoS 동작을 검출하기 위한 다양한 컴포넌트 및 로직 블록을 포함한다. 예시된 컴포넌트 및 블록은, QoS 로직(5030), Rx 버림 블록(5034), LTP/레인 에러 검출 블록(5034), LTP 번들화해제 블록(5035), 레인당 및 XFR 그룹당 CRC, Rx LTP 시퀀스 레지스터, 및 NxtRxLTP 포인터를 포함한다.
Rx 링크 패브릭 서브 레이어 회로 및 로직(5010)은 본원에서 설명되는 링크 패브릭 서브 레이어 동작의 수신측 양태를 구현하도록 구성된다. 이들 동작을 가능하게 하기 위한 예시된 컴포넌트 및 블록은, L4 패킷 캡슐화해제 서브 블록(5040)을 포함하는 패브릭 패킷 재조립 블록(5038), 크레딧 반환 블록(5042), 입력 FIFO(3906), 및 QoS 로직(5030)의 일부를 포함한다. 또한, 입력 FIFO(3906)에 대한 버퍼 공간의 편제는, 3단 공유 버퍼 편제 스킴(5044)을 활용하는 것으로 묘사되는데, 도 31a 및 도 31b에서 도시되는 다른 버퍼 편제 방식뿐만 아니라, 본원에서 논의되는 다른 버퍼 편제 방식도 마찬가지로 사용될 수 있다는 것을 유의한다.
HFI 및 다른 엔드포인트 디바이스의 경우, 송신 및 수신 포트는, 다른 외부 컴포넌트에 의해 수행되는 상위 레이어 동작에 인터페이싱하기 위한 추가적인 인터페이스 로직을 포함할 수도 있다. 예시적인 목적을 위해, 이들 인터페이스는 Rx L4 인터페이스(5046) 및 Tx L4 인터페이스(5048)에 의해 묘사되는데, 이들은, 각각, HFI 또는 다른 엔드포인트 디바이스 상의 수신측 및 송신측 레이어4 로직 및/또는 컴포넌트와 인터페이싱하도록 구성된다.
도 51은, 일 실시형태에 따른, 다중 포트 패브릭 스위치(5100)를 예시한다. 패브릭 스위치(5100)는 16개의 패브릭 인터페이스 포트(102)를 포함하는데, 그 각각은 도 50을 참조로 상기에서 설명되는 바와 같이 Rx 포트(5002) 및 Tx 포트(5000)를 포함한다. 각각의 Rx 포트(5002)는 복수의 입력 FIFO(3906)를 포함하고, 한편 각각의 Tx 포트(5000)는 복수의 출력 FIFO(3704)를 포함한다. Rx 포트(5002) 및 Tx 포트(5000)는, 예시되는 바와 같이, 수신 포트의 출력을 송신 포트의 입력에 선택적으로 연결하도록 구성되는 크로스바(5104)에 커플링된다. 도 51에서 예시되는 컴포넌트 외에, 도 38에서 도시되고 상기에서 논의되는 포워딩 및 라우팅 테이블(3808)과 유사한 방식으로 동작하는 포워딩 및 라우팅 테이블(5106)의 사용을 포함해서, 크로스바(5104)의 포트 매핑을 제어하기 위한 다양한 중재 로직 및 QoS 로직이 활용된다.
도 52는, 수신측에서 수신되는 플릿을 핸들링하고 그들을 입력 FIFO에 버퍼링하기 위한 동작 및 로직을 묘사하는 플로우차트(5200)를 도시한다. 블록(5202)에서, 플릿이 LTP 플릿 스트림의 일부로서 수신되고 PHY 레이어 프로세싱이 수행되어 LTP 및 플릿 데이터를 복원하여, 개개의 플릿이 검사되는 것을 가능하게 한다. 결정 블록(5204)에서, 플릿이 아이들 플릿인지 또는 LF 제어 플릿인지의 여부에 대한 결정이 이루어진다. 테이블 1을 참조로 상기에서 논의된 바와 같이, '000'으로 시작하는 플릿(비트 65 플릿 타입 비트를 포함함)은 아이들 플릿이거나, LF 제어 플릿이거나, 또는 잘못된 플릿이다. 플릿이 이들 중 어느 것도 아니라고 가정하면, 결정 블록(5204)에 대한 대답은 아니오이고, 로직은 결정 블록 5206으로 진행하는데, 여기서는 플릿이 헤드 플릿인지, 테일 플릿인지, 또는 바디 플릿인지의 여부에 대한 결정이 이루어진다. 대부분의 플릿은 바디 플릿일 것이고, 블록(5208)에서 플릿은 현재 VL에 의해 식별되는 FIFO 버퍼에 추가되는데, 현재 VL은 일 실시형태에서, 인터리빙 및 선점과 연계하여 상기에서 논의된 바와 같이, 현재 VL 레지스터에 저장되는 표시에 의해 식별된다. 그 다음, 로직은 다음 플릿을 핸들링하기 위해 블록(5202)으로 복귀한다.
상기에서 논의된 바와 같이, 현재 VL은 새로운 헤더 플릿, 헤더 플릿이 이미 수신된 패브릭 패킷에 대응하는 테일 플릿, 또는 VL 마커(VL 마커를 사용하기 위한 지원을 제공하는 실시형태의 경우)에 응답하여 변경될 수도 있다. 블록(5210)에서 도시되는 바와 같이, 블록(5206)에서의 플릿이 헤드 플릿이다는 결정에 응답하여, 패브릭 패킷 헤더 SC(및 IB 캡슐화된 FP에 대한 SL) 필드는, 패브릭 패킷과 관련되는 가상 레인을 결정하기 위해 검사되고, 적용가능한 QoS 로직을 적용한다. 예를 들면, 일 실시형태에서 이들 동작은 도 39에서 도시되고 상기에서 논의된다. 블록(5212)에서, 플릿이 추가되어야 하는 현재 VL을 업데이트하기 위해, 식별된 VLr에 대응하는 표시가 현재 VL 레지스터에 기록된다. 적용가능하면, VL 스택은 또한 푸시된다. 그 다음, 로직은 다음 플릿을 핸들링하기 위해 블록(5202)으로 복귀한다.
인터리빙 및 선점과 연계하여 상기에서 논의된 바와 같이, 헤드 플릿이 현재 VL을 변경하기 위해 사용되지만, 테일 플릿은 스택을 팝하는 것에 의해 현재 VL을 이전 VL로 되돌리기 위해 사용된다. 따라서, 결정 블록(5206)에서 테일 플릿을 검출하는 것에 응답하여, 로직은 블록(5214)로 진행하는데, 여기서는 현재 VL 레지스터를 업데이터하기 위해 VL 스택이 팝된다. 그 다음, 로직은 다음 플릿을 핸들링하기 위해 블록(5202)으로 복귀한다.
결정 블록(5204)으로 돌아가서, 플릿이 아이들 플릿 또는 LF 제어 플릿으로서 식별되면, 로직은, 플릿이 VL 마커인지를 결정할 결정 블록(5216)으로 진행한다. 만약 아니라면, LF 제어 플릿 또는 아이들 플릿에 의해 특정되는 적용가능한 동작(들)이 블록(5220)에서 수행되고, 로직은 다음 플릿을 핸들링하기 위해 블록(5202)으로 복귀한다. 그러나, 플릿이 VL 마커를 포함하는 LF 제어 플릿이면, 로직은 블록(5218)로 진행하는데, 여기서는, VL 마커에 의해 식별되는 VL을 이용하여 현재 VL 레지스터가 업데이트되고 VL 스택이 푸시된다. 그 다음, 로직은 다음 플릿을 핸들링하기 위해 블록(5202)으로 복귀한다.
도 53은, 프로세서(5306)에 커플링되며 패브릭 포트(5304)를 포함하는 호스트 패브릭 인터페이스(5302)를 포함하는 예시적인 구성을 갖는 노드(5300)를 도시하는데, 호스트 패브릭 인터페이스(5302)는 결국에는 메모리(5308)에 커플링된다. 도 1에서 도시되는 바와 같이, 시스템 노드는, 별개의 단일 노드 플랫폼(106), 가상화된 플랫폼(110), 다중 노드 플랫폼(116) 및 통합된 단일 노드 플랫폼(120)에 의해 도시되는 것들과 같은 그러나 이들로 제한되지는 않는 다양한 구성을 가질 수도 있다. 일반적으로, 각각의 노드 구성은 적어도 하나의 프로세서, 메모리, 및 도 53에서 예시되는 유사한 컴포넌트를 구비하는 적어도 하나의 HFI를 포함할 것이다.
패브릭 포트(5304)는, 도 50에서 도시된 것과 유사한 구성을 갖는 송신 포트(5000) 및 수신 포트(5002)를 포함한다. 송신 포트(5000)는, 복수의 송신 VL 버퍼로 구획되는 송신 버퍼를 포함하는 Tx 링크 패브릭 서브 레이어 회로 및 로직(5004), Tx 링크 전송 서브 레이어 회로 및 로직(5006), 및 네 개의 송신기(5016) 및 Tx 링크 제어 블록(1804)을 포함하는 Tx PHY 회로 및 로직(5008)을 포함한다. 수신 포트(5002)는, 복수의 수신 VL 버퍼로 구획되는 수신 버퍼를 포함하는 Rx 링크 패브릭 서브 레이어 회로 및 로직(5010), Rx 링크 전송 서브 레이어 회로 및 로직(5012), 및 네 개의 수신기(5028) 및 Rx 링크 제어 블록(1805)을 포함하는 Rx PHY 회로 및 로직(5028)을 포함한다.
HFI(5302)는, PCIe(Peripheral Component Interconnect Express; 주변장치 컴포넌트 인터커넥트 익스프레스) 인터페이스(interface; I/F)(5314)에 커플링되는 송신 엔진(5310) 및 수신 엔진(5312)을 더 포함한다. 송신 엔진(5310)은, L4 패킷(예를 들면, 캡슐화된 TCP/IP 패킷을 포함하는 이더넷 패킷, 인피니밴드 패킷) 및/또는 패브릭 패킷이 버퍼링되는 송신 버퍼(5316)를 포함한다. 일 실시형태에서, 송신 버퍼(5316)용 메모리의 전체 또는 일부는, 프로그래밍된 IO(programmed IO; PIO) 공간으로도 또한 칭해지는, 메모리 매핑 입/출력(memory-mapped input/output; MMIO) 어드레스 공간을 포함한다. MMIO는 프로세서(5306)가, 예를 들면, 다이렉트 메모리 액세스를 통해 송신 버퍼(5314)에 대한 직접 기록(direct write)을 수행하는 것(DMA 기록)을 가능하게 한다.
수신 엔진(5312)는 수신 버퍼(5318) 및 DMA 엔진(5320)을 포함한다. 수신 버퍼는, 패브릭 패킷 및/또는 L4 패킷을 포함할 수도 있는 수신 포트(5002)의 출력을 버퍼링하기 위해 사용된다. DMA 엔진(5320)은, 수신 버퍼(5318)로부터의 패킷 데이터를 메모리(5308) 및/또는 프로세서(5306)의 메모리 캐시 레벨 중 하나로 복제하기 위해 DMA 기록을 수행하도록 구성된다. 예를 들면, 몇몇 실시형태에서, 패킷 헤더 데이터는 캐시로 DMA되고(DMA'ed), 한편 패킷 페이로드 데이터는 메모리에 DMA된다.
프로세서(5306)는, 복수의 프로세서 코어(5324)를 포함하는 CPU(5322)를 포함하는데, 각각의 코어는 통합된 레벨 1 및 레벨 2(L1/L2) 캐시를 포함하고 코히어런트 인터커넥트(5326)에 커플링된다. 또한, 메모리(5308), 통합된 입/출력 블록(integrated input/output block; IIO)(5330), 및 라스트 레벨 캐시(Last Level Cache; LLC)(5332)에 커플링되는 메모리 인터페이스(5328)도 코히어런트 인터커넥트(5326)에 커플링된다. IIO(5330)는, 프로세서 코어, 메모리, 및 캐시에 의해 활용되는 코히어런트 도메인과, IO 컴포넌트 및 PCIe 루트 컴플렉스(Root Complex; RC)(5334 및 5336)을 포함해서, IO 인터페이스에 대해 활용되는 비코히어런트(non-coherent) 도메인 사이에 인터페이스를 제공한다. 기술분야에서 널리 공지되어 있는 바와 같이, PCIe RC는, PCIe 인터페이스(5338, 5340, 5342, 및 5344)에 의해 예시되는 바와 같이, 다수의 PCIe 인터페이스 및 PCIe 디바이스가 커플링될 수도 있는 PCIe인터커넥트 계층의 최상부에 위치하고 있다. 도시되는 바와 같이, PCIe(5340)는 HFI(302)의 PCIe 인터페이스(5314)에 커플링된다.
몇몇 실시형태에서는, 도 53에서 예시되는 바와 같이, 프로세서(5312)가 시스템 온 칩(SoC) 아키텍쳐를 활용한다. 다른 실시형태에서, PCIe 관련 컴포넌트는 IO 칩셋 등등에 통합된다. 또 다른 실시형태에서, 프로세서(5312) 및 하나 이상의 HFI(5302)는, 예컨대 SoC(5346)의 점선에 의해 묘사되는 SoC 상에 통합된다.
도 53에서 더 예시되는 바와 같이, 소프트웨어 애플리케이션(5348) 및 vNIC(5350)는, 프로세서(5306) 상에서 실행하는 오퍼레이팅 시스템에 의해 호스팅되는 하나 이상의 가상 머신 또는 프로세서 코어(5324) 중 하나 이상 상에서 실행하는 소프트웨어 컴포넌트를 포함한다. 이들 소프트웨어 컴포넌트 외에, 메모리(5308)(적용가능한 캐시 레벨을 포함함)와 송신 엔진(5310) 및 수신 엔진(5312) 사이의 데이터 전송을 가능하게 하기 위한, 메모리(5308)에서 구현되는 추가적인 소프트웨어 컴포넌트 및 버퍼가 존재한다.
일반적으로, 본원의 도면에서 묘사되는 회로, 로직 및 컴포넌트는 또한, 다수의 네트워크 인터페이스에 대한 지원을 포함하는 별개의 칩, SoC, 멀티칩 모듈, 및 네트워킹/링크 인터페이스 칩을 포함해서, 다양한 타입의 집적 회로(예를 들면, 반도체 칩) 및 모듈에서 구현될 수도 있다. 또한, 본원에서 사용되는 바와 같이, 다양한 동작을 실행할 회로 및 로직은, 임베딩된 로직, 임베딩된 프로세서, 컨트롤러, 마이크로엔진을 통해, 또는 다르게는 하드웨어, 소프트웨어, 및/또는 펌웨어의 임의의 조합을 사용하여 구현될 수도 있다. 예를 들면, 다양한 로직 블록 및/또는 회로에 의해 묘사되는 동작은, ASIC, FPGA, IP 블록 라이브러리를 포함하지만 이들로 제한되지는 않는 프로그래밍된 로직 게이트 등등을 사용하여, 또는 프로세서, 프로세서 코어, 컨트롤러, 마이크로컨트롤러, 마이크로엔진 등등을 포함하는 하나 이상의 프로세싱 엘리먼트 상에서 실행되는 소프트웨어 또는 펌웨어 명령어 중 하나 이상을 통해 실행될 수도 있다.
또한, 본 설명의 실시형태의 양태는, 반도체 칩, SoC, 멀티칩 모듈 등등의 내에서 뿐만 아니라, 비일시적 머신 판독가능 매체 내에서도 구현될 수도 있다. 예를 들면, 상기에서 설명되는 설계는, 반도체 디바이스를 설계하기 위해 사용되는 설계 툴과 관련되는 비일시적 머신 판독가능 매체 상에 저장되고/되거나 그 매체 내에 임베딩될 수도 있다. 예는, VHSIC 하드웨어 기술 언어(VHSIC Hardware Description Language; VHDL) 언어 또는 SPICE 언어, 또는 다른 하드웨어 기술 언어에서 포맷되는 넷리스트(netlist)를 포함한다. 몇몇 넷리스트 예는: 거동 레벨 넷리스트, 레지스터 전송 레벨(register transfer level; RTL) 넷리스트, 게이트 레벨 넷리스트 및 트랜지스터 레벨 넷리스트를 포함한다. 머신 판독가능 매체는 또한, GDS-II 파일과 같은 레이아웃 정보를 구비하는 매체를 포함한다.
또한, 반도체 칩 설계를 위한 넷리스트 파일 또는 다른 머신 판독가능 매체는, 상기에서 설명되는 교시의 방법을 수행할 시뮬레이션 환경에서 사용될 수도 있다. 몇몇 실시형태가 특정한 구현예를 참조로 설명되었지만, 몇몇 실시형태에 따른 다른 구현예도 가능하다. 추가적으로, 도면에서 예시되는 및/또는 본원에서 설명되는 엘리먼트 또는 다른 피쳐의 배치 및/또는 순서는 예시되고 설명되는 그 특정한 방식으로 정렬될 필요는 없다. 몇몇 실시형태에 따른 많은 다른 배치예도 가능하다.
도면에서 도시되는 각각의 시스템에서, 몇몇 경우의 엘리먼트 각각은, 표현되는 엘리먼트가 상이하고/하거나 유사할 수도 있을 것이라는 것을 나타내기 위해, 동일한 참조부호 또는 상이한 참조부호를 가질 수도 있다. 그러나, 엘리먼트는, 상이한 구현예를 가지도록 그리고 본원에서 도시되거나 설명되는 시스템의 일부 또는 전체와 함께 작동하도록 충분히 유연할 수도 있다. 도면에서 도시되는 다양한 엘리먼트는 동일하거나 또는 상이할 수도 있다. 어떤 것이 제1의 엘리먼트로 칭해지고 어떤 것이 제2의 엘리먼트로 칭해지는지는 임의적이다.
상기 상세한 설명에서의 'n', 'm', 'k' 등등과 같은 이탤릭체 문자는 정수를 표현하기 위해 사용되며, 특정한 문자의 사용은 특정한 실시형태로 제한되지는 않는다. 또한, 별개의 정수 숫자를 나타내기 위해 동일한 문자가 별개의 청구항에서 사용될 수도 있거나 또는 상이한 문자가 사용될 수도 있다. 또한, 상세한 설명에서의 특정한 문자의 사용은, 상세한 설명의 동일한 주제에 관련되는 청구항에서 사용되는 문자와 일치할 수도 또는 일치하지 않을 수도 있다.
상세한 설명 및 청구범위에서, 용어 "커플링되는" 및 "연결되는"이 그들의 파생어와 함께 사용될 수도 있다. 이들 용어는 서로 동의어로서 의도된 것은 아니다는 것이 이해되어야 한다. 대신, 특정 실시형태에서, "연결되는"은, 2개 이상의 엘리먼트가 서로 물리적으로 또는 전기적으로 직접 접촉하고 있는 것을 나타내기 위해 사용될 수도 있다. "커플링되는"은, 2개 이상의 엘리먼트가 물리적으로 또는 전기적으로 직접 접촉하고 있는 것을 의미할 수도 있다. 그러나, "커플링되는"은, 2개 이상의 엘리먼트가 서로 직접적으로 접촉되지는 않지만, 여전히 서로 함께 동작하거나 또는 상호작용하는 것을 또한 의미할 수도 있다.
한 실시형태는 본 발명의 구현예 또는 예시이다. "한 실시형태", "일 실시형태", "몇몇 실시형태", 또는 다른 실시형태" 에 대한 명세서에서의 언급은, 그 실시형태와 연계하여 설명되는 특정한 피쳐, 구조, 또는 특성이, 본 발명의 적어도 몇몇 실시형태에 포함되지만, 반드시 모든 실시형태에 포함되는 것은 아니다는 것을 의미한다. "한 실시형태", "일 실시형태", 또는 "몇몇 실시형태"의 다양한 출현은 반드시 모두 동일한 실시형태들을 가리키는 것은 아니다.
본원에서 설명되고 예시되는 모든 컴포넌트, 피쳐, 구조, 특성 등이 특정한 실시형태 또는 실시형태들에 반드시 포함될 필요는 없다. 명세서에서 컴포넌트, 피쳐, 구조, 또는 특성이 포함될"수도 있다", 포함될"수도 있을 것이다", 포함될"수 있다" 또는 포함될"수 있을 것이다"라고 언급하면, 그 특정한 컴포넌트, 피쳐, 구조, 또는 특성은 포함되도록 요구되는 것은 아니다. 명세서 또는 청구범위에서 "한(a)" 또는 "한(an)" 엘리먼트를 언급하면, 그것은 단지 하나의 엘리먼트만이 존재한다는 것을 의미하는 것은 아니다. 명세서 또는 청구범위에서 "한 추가적인" 엘리먼트를 언급하면, 그것은 그 추가적인 엘리먼트가 하나보다 많이 존재하는 것을 배제하는 것은 아니다.
요약서에서 설명되는 것을 포함해서, 본 발명의 예시된 실시형태의 상기 설명은 총망라하는 것으로, 또는 본 발명을 개시된 정확한 형태로 제한하도록 의도되는 것은 아니다. 본 발명의 특정 실시형태, 및 본 발명에 대한 예가 예시적인 목적으로 본원에서 설명되지만, 본 발명의 범위 내에서 다양한 등가적인 수정예들이 가능하며, 이러한 사항은 당업자들이 알 수 있을 것이다.
이들 수정예는 상기 상세한 설명의 측면에서 본 발명에 대해 행해질 수 있다. 하기의 청구범위에서 사용되는 용어는 본 발명을, 명세서 및 도면에서 개시되는 특정 실시형태로 제한하도록 간주되어선 안된다. 대신, 본 발명의 범위는, 청구범위 해석의 확립된 원칙에 따라 해석되어야 하는 하기의 청구범위에 의해 전적으로 결정된다.

Claims (25)

  1. 복수의 패브릭 디바이스의 패브릭 포트(fabric ports) 사이에 커플링되는 복수의 패브릭 링크를 포함하는 패브릭에서, 패브릭 엔드포인트(fabric endpoints) 사이에 패브릭 패킷을 전송하기 위해 복수의 서비스 레벨(Service Level; SL)을 구현하는 단계와,
    각각의 서비스 레벨에 하나 이상의 서비스 채널(Service Channel; SC)을 할당하는 단계와,
    상기 패브릭 포트의 적어도 일부에서 각각, 서비스 채널(SC)을 가상 레인(Virtual Lane; VL)에 할당하는 단계와,
    패브릭 패킷 각각을 복수의 플릿으로 분할하고, 상기 패브릭 패킷에 대한 플릿을 서비스 채널(SC)을 사용하여 상기 패브릭 링크를 통해 전송함으로써 패브릭 엔드포인트 사이에서 패브릭 패킷의 전송이 이루어지도록 하는 단계를 포함하고,
    가상 레인(VL) - 상기 가상 레인(VL)은 지정된 패브릭 링크를 통해 전송될 지정된 패브릭 패킷에 대한 플릿을 버퍼링하는 데 사용됨 - 은 상기 패브릭 링크를 통해 상기 플릿을 전송하기 위해 구현되는 서비스 채널(SC)에 기초하여 결정되는
    방법.
  2. 제 1 항에 있어서,
    상기 서비스 레벨은 전송 레이어에서 구현되고, 상기 서비스 채널은 상기 패브릭에 대한 링크 레이어에서 구현되는
    방법.
  3. 제 1 항 또는 제 2 항에 있어서,
    상기 복수의 서비스 레벨(SL)을 구현하는 단계는 복수의 트래픽 클래스를 구현하는 단계를 더 포함하고,
    각각의 트래픽 클래스는 하나 이상의 서비스 레벨을 할당받고, 각각의 트래픽 클래스는 지정된 전송 레이어 또는 전송 레이어에서의 데이터 전송을 관리하는 애플리케이션에 할당되는
    방법.
  4. 제 3 항에 있어서,
    트래픽 클래스에 대해 두 개의 서비스 레벨(SL)이 할당되고,
    상기 두 개의 서비스 레벨(SL)이 할당되는 경우에 상기 트래픽 클래스에 대한 요청 트래픽에는 제1 서비스 레벨(SL)이 할당되고 상기 트래픽 클래스에 대한 응답 트래픽에는 제2 서비스 레벨(SL)이 할당되는
    방법.

  5. 제 4 항에 있어서,
    상기 복수의 트래픽 클래스를 구현하는 단계는 복수의 가상 패브릭(virtual fabric; vFabric)을 구현하는 단계를 포함하고,
    각각의 vFabric은 트래픽 클래스와 관련되고, 적어도 하나의 vFabric은 상기 패브릭에서의 상기 패브릭 포트의 서브셋에 대해 구현되는
    방법.
  6. 제 1 항 또는 제 2 항에 있어서,
    패브릭 패킷이 서비스 채널 식별자(service channel identifier; SC ID)를 포함하고, 상기 패브릭을 통해 상기 패브릭 패킷을 전송하기 위해 구현되는 서비스 레벨(SL)은 상기 패브릭 패킷의 서비스 채널 식별자(SC ID)에 의해 암시되는
    방법.
  7. 제 1 항 또는 제 2 항에 있어서,
    상기 서비스 채널(SC)은 제1 서비스 채널 및 제2 서비스 채널을 포함하고,
    상기 제1 서비스 채널은 제1 패브릭 엔드포인트에서 패브릭 패킷에 할당되고 - 상기 패브릭 패킷은 포워딩 경로를 따라 상기 패브릭을 통해 제2 패브릭 엔드포인트로 전송되고, 상기 포워딩 경로는 복수의 패브릭 링크를 포함하고 적어도 하나의 패브릭 스위치를 통과하는 순회(traversal)를 포함함 - 와,
    상기 제1 서비스 채널은 적어도 하나의 패브릭 링크를 포함하는 상기 포워딩 경로 중 제1 부분을 따라 상기 패브릭 패킷에 대한 플릿을 포워딩하는 데 활용되며,
    패브릭 스위치에서, 상기 패브릭 패킷에 대한 서비스 채널(SC)이 상기 제1 서비스 채널로부터 상기 제2 서비스 채널로 변경되고,
    상기 제2 서비스 채널은 적어도 하나의 패브릭 링크를 포함하는 상기 포워딩 경로 중 제2 부분을 따라 상기 패브릭 패킷에 대한 플릿을 포워딩하는 데 활용되는
    방법.
  8. 제 1 항 또는 제 2 항에 있어서,
    상기 패브릭은 상이한 수의 가상 레인(VL)을 지원하는 패브릭 디바이스를 포함하는 이종 패브릭을 포함하는
    방법.
  9. 제 8 항에 있어서,
    플릿은 제1의 수의 가상 레인(VL)을 구현하는 송신 패브릭 포트로부터, 상기 제1 수의 가상 레인(VL)보다 더 적은 제2 수의 가상 레인(VL)을 구현하는 링크 피어의 수신 패브릭 포트로 송신되고,
    상기 서비스 채널(SC)에 기초하여 가상 레인(VL)을 결정하는 것은, 가상 레인(VL) 축소 매핑을 수행하는 것을 포함하고, 상기 가상 레인(VL) 축소 매핑을 수행하는 경우에 상기 송신 패브릭 포트에서의 가상 레인(VL)은 상기 수신 패브릭 포트에서의 가상 레인(VL)으로 매핑 다운되는
    방법.
  10. 제 8 항에 있어서,
    플릿은 제1의 수의 가상 레인(VL)을 구현하는 송신 패브릭 포트로부터, 상기 제1 수의 가상 레인(VL)보다 더 많은 제2 수의 가상 레인(VL)을 구현하는 링크 피어의 수신 패브릭 포트로 송신되고,
    상기 서비스 채널(SC)에 기초하여 가상 레인(VL)을 결정하는 것은 가상 레인(VL) 확장 매핑을 수행하는 것을 포함하고, 상기 가상 레인(VL) 확장 매핑을 수행하는 경우에 상기 송신 패브릭 포트에서의 가상 레인(VL)은 상기 수신 패브릭 포트에서의 가상 레인(VL)으로 매핑 업되는
    방법.
  11. 제 1 항 또는 제 2 항에 있어서,
    상기 복수의 서비스 레벨(SL)을 구현하는 단계는 트래픽 우선순위화(prioritization)를 구현하는 단계를 포함하고,
    서비스 레벨(SL)은 우선순위 레벨을 할당받고, 상위 우선순위 레벨을 갖는 서비스 레벨(SL)과 관련되는 패브릭 패킷에 대한 플릿의 송신은, 상대적으로 하위 우선순위를 갖는 서비스 레벨(SL)과 관련되는 패브릭 패킷에 대한 플릿의 송신보다 우선할 수 있는
    방법.
  12. 제 1 항 또는 제 2 항에 있어서,
    상기 서비스 채널(SC)은 제1 서비스 채널 및 제2 서비스 채널을 포함하고,
    상기 제1 서비스 채널은 소스 패브릭 엔드포인트에서 패브릭 패킷에 할당되고 - 포워딩 경로를 따라 상기 패브릭을 통해 전송될 상기 패브릭 패킷은 목적지 패브릭 엔드포인트로의 복수의 패브릭 링크를 포함함 - 와,
    상기 제1 서비스 채널에 대한 서비스 채널 식별자(SC ID)는 패브릭 패킷 헤더에 저장되며,
    상기 복수의 플릿은 헤드 플릿, 복수의 바디 플릿, 및 테일 플릿을 포함하고, 상기 헤드 플릿의 데이터는 상기 서비스 채널 식별자(SC ID)를 포함하고,
    상기 방법은, 상기 패브릭 패킷의 전송이 이루어지도록 한 이후에,
    패브릭 스위치에서 플릿을 수신하고, 헤드 플릿을 검출하는 단계와,
    패브릭 패킷의 서비스 채널 식별자(SC ID)를 결정하기 위해 상기 패브릭 패킷의 헤드 플릿을 검사하는 단계와,
    상기 패브릭 패킷에 대한 플릿을, 상기 패브릭 스위치로부터 상기 포워딩 경로를 따라 다음 홉으로 송신하기 위해 어떤 가상 레인(VL)이 선택되는지를 결정하기 위해 서비스 채널 대 가상 레인(SC-to-VL) 맵을 활용하는 단계를 더 포함하는
    방법.
  13. 제 12 항에 있어서,
    각각의 서비스 레벨에 하나 이상의 서비스 채널(SC)을 할당하는 단계 후에,
    서비스 채널(SC)을 상기 제1 서비스 채널로부터 상기 제2 서비스 채널로 변경하기 위해 서비스 채널 대 서비스 채널(SC-to-SC) 맵을 활용하는 단계와,
    상기 헤드 플릿의 상기 서비스 채널 식별자(SC ID)를 상기 제2 서비스 채널에 대한 서비스 채널 식별자(SC ID)로 대체하는 단계와,
    상기 패브릭 링크를 통해 상기 패브릭 패킷에 대한 플릿을 전송하기 위해 사용할 가상 레인(VL) 버퍼를 결정하기 위해 상기 패브릭 패킷에 대한 현재 서비스 채널(SC)을 활용하는 단계를 더 포함하고,
    적어도 하나의 패브릭 패킷에 대해, 상기 패브릭 패킷에 대한 플릿은 적어도 두 개의 상이한 가상 레인(VL)을 사용하여 상기 포워딩 경로를 따라 포워딩되는
    방법.
  14. 송신 버퍼를 포함하는 메모리와,
    패브릭 송신 포트와,
    회로 및 로직을 포함하되,
    상기 회로 및 로직은
    상기 송신 버퍼를 복수의 송신 VL 버퍼로 구획(partition)하고 각각의 송신 VL 버퍼를 상기 송신 포트에 의해 사용되는 각각의 가상 레인(VL)과 관련시키고,
    서비스 채널 대 송신 VL 맵을 구현 - 입력 SC ID는 상기 송신 포트에 의해 사용되는 가상 레인(VL)로 매핑됨 - 하고,
    상기 패브릭 송신 포트에서 나와 패브릭 링크 상으로 송신될 패브릭 패킷에 대응하는 패브릭 패킷 데이터를 수신하고,
    상기 수신된 패브릭 패킷 데이터로부터 서비스 채널 식별자(SC ID)를 검색(retrieve)하고,
    상기 패브릭 송신 포트를 통해 상기 패브릭 패킷 데이터를 송신하기 위한 송신 VL 버퍼를 식별하기 위해 상기 서비스 채널 대 송신 VL 맵에 대한 입력으로서 상기 서비스 채널 식별자(SC ID)를 사용하고,
    식별되는 상기 송신 VL 버퍼에 패브릭 패킷 데이터를 버퍼링하는
    장치.
  15. 제 14 항에 있어서,
    상기 장치는 상기 패브릭에서의 패브릭 패킷의 송신을 위한 서비스 품질(Quality of Service; QoS)을 달성하도록 구성되고, 상기 QoS는 다수의 서비스 레벨(SL)을 포함하고, 적어도 몇몇 서비스 레벨(SL)은 우선순위를 부여받고 서비스 채널(SC)은 암시된 서비스 레벨(SL)을 구비하며,
    상기 장치는,
    상기 가상 레인(VL) 사이에서 중재하고, 상기 송신 포트로부터 송신될 패브릭 패킷 데이터가 풀링되는 가상 레인(VL)을 선택하는 회로 및 로직을 더 포함하되, 상위 우선순위를 갖는 가상 레인(VL)이 하위 우선순위를 갖는 가상 레인(VL)보다 우선하는 것이 가능하게 되는
    장치.
  16. 제 14 항 또는 제 15 항에 있어서,
    수신 버퍼를 포함하는 메모리와,
    수신 포트와,
    회로 및 로직을 더 포함하되,
    상기 회로 및 로직은,
    상기 수신 버퍼를 복수의 수신 가상 레인(VL) 버퍼로 구획하고 각각의 수신 VL 버퍼를 각각의 수신 가상 레인(VL)과 관련시키고,
    서비스 채널 대 수신 VL 맵을 구현 - 입력 SC ID는 수신 VL 버퍼로 매핑됨 - 하고,
    상기 수신 포트에서 패브릭 패킷에 대응하는 패브릭 패킷 데이터를 수신하고,
    상기 수신된 패브릭 패킷 데이터로부터 서비스 채널 식별자(SC ID)를 검색하고,
    상기 서비스 채널 대 수신 VL 맵에 대한 입력으로서 상기 서비스 채널 식별자(SC ID)를 사용하여, 상기 패브릭 패킷 데이터를 상기 수신 버퍼에 버퍼링하기 위해 사용될 가상 레인(VL) 버퍼를 식별하고,
    식별되는 상기 수신 VL 버퍼에 패브릭 패킷 데이터를 버퍼링하는
    장치.
  17. 제 14 항 또는 제 15 항에 있어서,
    서비스 레벨 대 서비스 채널(SL-to-SC) 맵을 구현 - 입력 SL ID는 서비스 채널 식별자(SC ID)로 매핑됨 - 하고,
    전송 레이어로부터 패브릭 패킷을 수신 - 상기 전송 레이어는 상기 패브릭 패킷과 함께 서비스 레벨 식별자(SL ID)를 제공함 - 하고,
    상기 패브릭 패킷에 할당할 서비스 채널(SC)을 식별하기 위해 상기 서비스 레벨 식별자(SL ID)를 상기 서비스 레벨 대 서비스 채널(SL-to-SC) 맵에 입력하고,
    상기 패브릭 패킷에 대한 헤더의 서비스 채널(SC) 필드를, 식별되는 상기 서비스 채널(SC)에 대한 서비스 채널 식별자(SC ID)로 채우는(populate)
    회로 및 로직을 더 포함하는
    장치.

  18. 제 17 항에 있어서,
    상기 장치는 상기 패브릭에서의 패브릭 패킷의 송신을 위한 서비스 품질(QoS)을 달성하도록 구성 - 상기 QoS는 다수의 서비스 레벨(SL)을 포함하고, 적어도 몇몇 서비스 레벨(SL)은 우선순위를 부여받고, 서비스 채널(SC)은 서비스 채널(SC)이 매핑되는 상기 서비스 레벨(SL)에 기초한 암시된 서비스 레벨(SL)을 구비함 - 되고,
    상기 장치는,
    상기 가상 레인(VL) 사이에서 중재하고, 상기 송신 포트로부터 송신될 패브릭 패킷 데이터가 풀링되는 가상 레인(VL)을 선택하는 회로 및 로직을 더 포함하되, 상위 우선순위를 갖는 가상 레인(VL)이 하위 우선순위를 갖는 가상 레인(VL)보다 우선하는 것이 가능하게 되는
    장치.
  19. 제 17 항에 있어서,
    상기 전송 레이어로부터 수신되는 상기 패브릭 패킷은 제1 패브릭 패킷을 포함하고,
    상기 장치는,
    수신 버퍼를 포함하는 메모리와,
    수신 포트와,
    상기 수신 버퍼를 복수의 수신 가상 레인(VL) 버퍼로 구획하고 각각의 수신 VL 버퍼를 각각의 수신 가상 레인(VL)과 관련시키고,
    서비스 채널 대 수신 VL 맵을 구현 - 입력 SC ID는 수신 VL에 매핑됨 - 하고,
    상기 수신 포트에서 제2 패브릭 패킷에 대응하는 제2 패브릭 패킷 데이터를 수신하고,
    상기 수신된 제2 패브릭 패킷 데이터로부터 서비스 채널 식별자(SC ID)를 검색하고,
    상기 서비스 채널 대 수신 VL 맵에 대한 입력으로서 상기 서비스 채널 식별자(SC ID)를 사용하여, 제2 패브릭 패킷 데이터를 상기 수신 버퍼에 버퍼링하기 위해 사용될 가상 레인(VL)을 식별하고,
    제2 패브릭 패킷 데이터를, 식별되는 상기 가상 레인(VL)과 관련되는 상기 수신 VL 버퍼에 버퍼링하는
    회로 및 로직과,
    서비스 채널 대 서비스 레벨((SC-to-SL) 맵을 구현 - 입력 SC ID는 서비스 레벨 식별자(SL ID)로 매핑됨 - 하고,
    상기 수신 VL 버퍼로부터 상기 제2 패브릭 패킷을 검색하고,
    상기 검색된 제2 패브릭 패킷으로부터 서비스 채널 식별자(SC ID)를 검색하고,
    상기 서비스 채널 식별자(SC ID)를 상기 서비스 채널 대 서비스 레벨(SC-to-SL) 맵에 입력하여 서비스 레벨 식별자(SL ID)를 획득하고,
    상기 제2 패브릭 패킷 및 상기 서비스 레벨 식별자(SL ID)를 전송 레이어에 포워딩하는
    회로 및 로직을 더 포함하는
    장치.
  20. 제 19 항에 있어서,
    상기 장치는 호스트 패브릭 인터페이스를 포함하고 상기 제1 패브릭 패킷은 상기 전송 레이어를 구현하고 상기 호스트 패브릭 인터페이스가 구현되는 호스트 상에서 실행하는 소프트웨어 애플리케이션으로부터 수신되고, 상기 제2 패브릭 패킷 및 서비스 레벨 식별자(SL ID)는 상기 소프트웨어 애플리케이션에 제공되는
    장치.
  21. 장치로서,
    복수의 입력 포트와,
    복수의 출력 포트와,
    입력 포트를 출력 포트에 선택적으로 커플링하기 위한 크로스바 인터커넥트 - 출력 포트는 복수의 출력 가상 레인 버퍼(output Virtual Lane(VL) buffers)로 구획되는 출력 버퍼를 포함하고, 각각의 출력 VL 버퍼는 상기 출력 포트에 의해 사용되는 각각의 가상 레인(VL)과 연관되며, 입력 포트는 복수의 입력 가상 레인 버퍼(input Virtual Lane(VL) buffers)로 구획되는 입력 버퍼를 포함하고, 각각의 입력 VL 버퍼는 상기 입력 포트에 의해 사용되는 각각의 가상 레인(VL)과 관련됨- 와,
    회로 및 로직을 포함하되,
    상기 회로 및 로직은,
    서비스 채널 대 수신 VL 맵을 구현 - 입력 서비스 채널 식별자(input Service Channel identifier(SC ID))는 상기 입력 포트에 의해 사용되는 가상 레인(VL)에 매핑됨 - 하고,
    서비스 채널 대 송신 VL 맵을 구현 - 입력 SC ID는 출력 포트에 의해 사용되는 가상 레인(VL)에 매핑됨 - 하고,
    상기 입력 포트에서 패브릭 패킷에 대응하는 패브릭 패킷 데이터를 수신하고,
    상기 수신된 패브릭 패킷 데이터로부터 서비스 채널 식별자(SC ID)를 검색하고,
    상기 서비스 채널 대 수신 VL 맵에 대한 입력으로서 상기 서비스 채널 식별자(SC ID)를 사용하여, 상기 패브릭 패킷 데이터를 상기 입력 버퍼에 버퍼링하기 위해 사용될 가상 레인(VL)을 식별하고,
    패브릭 패킷 데이터를, 식별되는 상기 가상 레인(VL)과 관련되는 상기 입력 VL 버퍼에 버퍼링하고,
    상기 패브릭 패킷 데이터를 패브릭 스위치로부터 아웃바운드로 송신하기 위해 사용될 출력 VL 버퍼를 식별하기 위해 상기 서비스 채널 대 송신 VL 맵에 대한 입력으로서 상기 서비스 채널 식별자(SC ID)를 사용하고,
    상기 패브릭 스위치는, 패브릭 패킷 데이터를 상기 입력 VL 버퍼로부터 상기 크로스바 인터커넥트를 통해, 식별되는 상기 출력 VL 버퍼로 내부적으로 포워딩하는 추가 회로 및 로직을 포함하는
    장치.
  22. 제 21 항에 있어서,
    입력 포트는,
    서비스 채널 대 서비스 채널 맵을 구현 - 입력 SC ID가 새로운 SC ID로 매핑됨 - 하고,
    상기 수신된 패브릭 패킷 데이터로부터 검색되는 상기 서비스 채널 식별자(SC ID)를 상기 서비스 채널 대 서비스 채널 맵에 입력하여, 상기 패브릭 패킷 데이터에 대한 새로운 SC ID를 획득하고,
    상기 새로운 SC ID를, 상기 서비스 채널 대 송신 VL 맵에 대한 상기 입력 SC ID로서 활용하고,
    상기 패브릭 패킷의 헤더의 서비스 채널 필드(SC field)에서 상기 서비스 채널 식별자(SC ID)를 업데이트하는
    추가 회로 및 로직을 포함하고,
    상기 새로운 SC ID 및 상기 입력 SC ID는 동일한 서비스 채널 식별자(SC ID)이거나 상이한 서비스 채널 식별자(SC ID)일 수 있는
    장치.
  23. 제 22 항에 있어서,
    입력 포트는 포워딩 테이블을 구현하는 추가 회로 및 로직을 포함하고,
    상기 포워딩 테이블은, 상기 패브릭 패킷이 포워딩될 패브릭 엔드포인트의 목적지 포트 ID를 검사하고, 상기 패브릭 엔드포인트에 도달하기 위해 상기 패브릭 패킷이 포워딩되어 나올 상기 출력 포트를 결정하고,
    상기 서비스 채널 대 서비스 채널 맵은, 결정되는 상기 출력 포트에 기초하는 입력을 상기 포워딩 테이블로부터 수신하고, 상기 입력은, 상기 새로운 SC가 상기 입력 SC와 상이한지 또는 상기 입력 SC와 동일한지를 결정하기 위해 부분적으로 사용되는
    장치.
  24. 제 21 항 내지 제 23 항 중 어느 한 항에 있어서,
    입력 포트는 이웃 디바이스의 송신 포트로부터 패브릭 패킷 데이터를 수신하도록 구성되고,
    상기 장치는,
    서비스 채널 대 이웃 송신 VL 맵을 구현 - 입력 SC ID는 상기 이웃 디바이스의 송신 포트에 의해 구현되는 가상 레인(VL)으로 매핑됨 - 하고,
    상기 패브릭 패킷 데이터를 송신하기 위해 상기 이웃 디바이스에 의해 사용되는 상기 가상 레인(VL)에 기초하여 상기 이웃 디바이스로 크레딧 ACK를 전송하는
    회로 및 로직을 더 포함하는
    장치.
  25. 제 21 항 내지 제 23 항 중 어느 한 항에 있어서,
    패브릭 패킷에 대한 상기 패브릭 패킷 데이터는 상기 패브릭 패킷으로부터 분할되는 고정된 사이즈를 갖는 복수의 플릿을 포함하고, 상기 수신 VL 및 송신 VL의 각각은 복수의 슬롯을 구비하는 선입선출(First-in, First-out; FIFO) 버퍼를 포함하고, 각각의 슬롯은 플릿과 동일한 사이즈를 갖는
    장치.
KR1020167013550A 2013-12-24 2014-12-17 고성능 패브릭 내에서의 qos를 위한 방법, 장치 및 시스템 KR101727874B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/139,930 US9648148B2 (en) 2013-12-24 2013-12-24 Method, apparatus, and system for QoS within high performance fabrics
US14/139,930 2013-12-24
PCT/US2014/070815 WO2015100102A1 (en) 2013-12-24 2014-12-17 Method, apparatus and system for qos within high performance fabrics

Publications (2)

Publication Number Publication Date
KR20160074659A KR20160074659A (ko) 2016-06-28
KR101727874B1 true KR101727874B1 (ko) 2017-04-17

Family

ID=53401360

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167013550A KR101727874B1 (ko) 2013-12-24 2014-12-17 고성능 패브릭 내에서의 qos를 위한 방법, 장치 및 시스템

Country Status (5)

Country Link
US (2) US9648148B2 (ko)
EP (1) EP3087710B1 (ko)
KR (1) KR101727874B1 (ko)
CN (1) CN105850086B (ko)
WO (1) WO2015100102A1 (ko)

Families Citing this family (72)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10326448B2 (en) * 2013-11-15 2019-06-18 Scientific Concepts International Corporation Code partitioning for the array of devices
US9698791B2 (en) * 2013-11-15 2017-07-04 Scientific Concepts International Corporation Programmable forwarding plane
US9565114B1 (en) 2014-03-08 2017-02-07 Google Inc. Weighted load balancing using scaled parallel hashing
JP6520946B2 (ja) * 2014-07-23 2019-05-29 日本電気株式会社 網検証装置、網検証方法、および、コンピュータ・プログラム
JP6525555B2 (ja) * 2014-11-04 2019-06-05 キヤノン株式会社 情報処理装置、その制御方法及びプログラム
US9923836B1 (en) * 2014-11-21 2018-03-20 Sprint Spectrum L.P. Systems and methods for configuring a delay based scheduler for an access node
US9762491B2 (en) 2015-03-30 2017-09-12 Mellanox Technologies Tlv Ltd. Dynamic thresholds for congestion control
US9699095B2 (en) 2015-05-21 2017-07-04 Mellanox Technologies Tlv Ltd. Adaptive allocation of headroom in network devices
EP3314366A4 (en) * 2015-06-24 2019-02-20 INTEL Corporation Systems and methods for isolating input / output computer resources
US20190372903A1 (en) * 2018-06-04 2019-12-05 Lightfleet Corporation Priority-based arbitration for parallel multicast routing with self-directed data packets
US10491472B2 (en) 2015-09-26 2019-11-26 Intel Corporation Coordinating width changes for an active network link
US10187402B2 (en) * 2015-11-25 2019-01-22 Echostar Technologies International Corporation Network intrusion mitigation
US10069748B2 (en) 2015-12-14 2018-09-04 Mellanox Technologies Tlv Ltd. Congestion estimation for multi-priority traffic
US10069701B2 (en) 2016-01-13 2018-09-04 Mellanox Technologies Tlv Ltd. Flexible allocation of packet buffers
US10666611B2 (en) 2016-01-28 2020-05-26 Oracle International Corporation System and method for supporting multiple concurrent SL to VL mappings in a high performance computing environment
US10630816B2 (en) 2016-01-28 2020-04-21 Oracle International Corporation System and method for supporting shared multicast local identifiers (MILD) ranges in a high performance computing environment
US10333894B2 (en) 2016-01-28 2019-06-25 Oracle International Corporation System and method for supporting flexible forwarding domain boundaries in a high performance computing environment
US10616118B2 (en) 2016-01-28 2020-04-07 Oracle International Corporation System and method for supporting aggressive credit waiting in a high performance computing environment
US10581711B2 (en) 2016-01-28 2020-03-03 Oracle International Corporation System and method for policing network traffic flows using a ternary content addressable memory in a high performance computing environment
US10536334B2 (en) 2016-01-28 2020-01-14 Oracle International Corporation System and method for supporting subnet number aliasing in a high performance computing environment
US10348649B2 (en) 2016-01-28 2019-07-09 Oracle International Corporation System and method for supporting partitioned switch forwarding tables in a high performance computing environment
US10659340B2 (en) 2016-01-28 2020-05-19 Oracle International Corporation System and method for supporting VM migration between subnets in a high performance computing environment
US10355972B2 (en) * 2016-01-28 2019-07-16 Oracle International Corporation System and method for supporting flexible P_Key mapping in a high performance computing environment
US10348847B2 (en) 2016-01-28 2019-07-09 Oracle International Corporation System and method for supporting proxy based multicast forwarding in a high performance computing environment
US10250530B2 (en) * 2016-03-08 2019-04-02 Mellanox Technologies Tlv Ltd. Flexible buffer allocation in a network switch
US10084716B2 (en) 2016-03-20 2018-09-25 Mellanox Technologies Tlv Ltd. Flexible application of congestion control measures
US10205683B2 (en) 2016-03-28 2019-02-12 Mellanox Technologies Tlv Ltd. Optimizing buffer allocation for network flow control
US10237169B2 (en) * 2016-04-01 2019-03-19 Intel Corporation Technologies for quality of service based throttling in fabric architectures
US9985891B2 (en) * 2016-04-07 2018-05-29 Oracle International Corporation Congestion management in distributed systems using autonomous self-regulation
WO2017197281A1 (en) * 2016-05-12 2017-11-16 M2MD Technologies, Inc. Method and system for managing the providing of different classes of wireless communications services from different mobile networks
US10114790B2 (en) * 2016-05-17 2018-10-30 Microsemi Solutions (U.S.), Inc. Port mirroring for peripheral component interconnect express devices
US10387074B2 (en) 2016-05-23 2019-08-20 Mellanox Technologies Tlv Ltd. Efficient use of buffer space in a network switch
US10762030B2 (en) * 2016-05-25 2020-09-01 Samsung Electronics Co., Ltd. Storage system, method, and apparatus for fast IO on PCIE devices
US10713202B2 (en) * 2016-05-25 2020-07-14 Samsung Electronics Co., Ltd. Quality of service (QOS)-aware input/output (IO) management for peripheral component interconnect express (PCIE) storage system with reconfigurable multi-ports
TW201741899A (zh) * 2016-05-31 2017-12-01 創義達科技股份有限公司 設備分配控制器以及資料分享方法
US10601714B2 (en) 2016-06-28 2020-03-24 Mellanox Technologies Tlv Ltd. Adaptive flow prioritization
US9985910B2 (en) 2016-06-28 2018-05-29 Mellanox Technologies Tlv Ltd. Adaptive flow prioritization
US10389636B2 (en) * 2016-07-01 2019-08-20 Intel Corporation Technologies for adaptive routing using network traffic characterization
US10606751B2 (en) * 2016-07-01 2020-03-31 Intel Corporation Techniques for cache delivery
US20190109720A1 (en) 2016-07-26 2019-04-11 Samsung Electronics Co., Ltd. Modular system (switch boards and mid-plane) for supporting 50g or 100g ethernet speeds of fpga+ssd
US10210123B2 (en) 2016-07-26 2019-02-19 Samsung Electronics Co., Ltd. System and method for supporting multi-path and/or multi-mode NMVe over fabrics devices
US10762023B2 (en) 2016-07-26 2020-09-01 Samsung Electronics Co., Ltd. System architecture for supporting active pass-through board for multi-mode NMVe over fabrics devices
US11461258B2 (en) 2016-09-14 2022-10-04 Samsung Electronics Co., Ltd. Self-configuring baseboard management controller (BMC)
US11042496B1 (en) * 2016-08-17 2021-06-22 Amazon Technologies, Inc. Peer-to-peer PCI topology
EP3452909A1 (en) 2016-08-23 2019-03-13 Oracle International Corporation System and method for supporting fast hybrid reconfiguration in a high performance computing environment
US10681128B2 (en) * 2016-10-12 2020-06-09 Cisco Technology, Inc. Deterministic stream synchronization
US10389646B2 (en) * 2017-02-15 2019-08-20 Mellanox Technologies Tlv Ltd. Evading congestion spreading for victim flows
US10645033B2 (en) 2017-03-27 2020-05-05 Mellanox Technologies Tlv Ltd. Buffer optimization in modular switches
US11095560B2 (en) 2017-12-30 2021-08-17 Intel Corporation Technologies for ethernet gateway congestion management in high-performance computing architectures
US10728172B2 (en) * 2018-03-28 2020-07-28 Quanta Computer Inc. Method and system for allocating system resources
KR102536637B1 (ko) * 2018-03-29 2023-05-26 에스케이하이닉스 주식회사 메모리 컨트롤러 및 그 동작 방법
WO2019237130A1 (en) * 2018-06-04 2019-12-12 Lightfleet Corporation Routing and control protocol for high-performance interconnect fabrics
US10977198B2 (en) * 2018-09-12 2021-04-13 Micron Technology, Inc. Hybrid memory system interface
CN113728596A (zh) 2019-05-23 2021-11-30 慧与发展有限责任合伙企业 在网络接口控制器(nic)中促进对幂等操作进行高效管理的系统和方法
US11025544B2 (en) * 2019-06-07 2021-06-01 Intel Corporation Network interface for data transport in heterogeneous computing environments
US11005770B2 (en) 2019-06-16 2021-05-11 Mellanox Technologies Tlv Ltd. Listing congestion notification packet generation by switch
US10999221B2 (en) 2019-07-02 2021-05-04 Mellanox Technologies Tlv Ltd. Transaction based scheduling
CN110661728B (zh) * 2019-09-12 2022-10-04 无锡江南计算技术研究所 多虚通道传输时共享与私有相结合的缓冲设计方法与装置
US10997112B2 (en) * 2019-10-02 2021-05-04 International Business Machines Corporation Link interface
CN110737627B (zh) * 2019-10-11 2023-10-03 苏州盛科通信股份有限公司 一种数据处理方法、装置及存储介质
CN110933001B (zh) * 2019-11-18 2020-11-27 清华大学 一种可扩展的可重构交换机包解析器基本处理单元结构
KR102247446B1 (ko) * 2019-12-26 2021-05-03 상명대학교 산학협력단 통합 플로우와 인터리브드 레귤레이터 기반 네트워크 지연시간 보장 시스템
US11470010B2 (en) 2020-02-06 2022-10-11 Mellanox Technologies, Ltd. Head-of-queue blocking for multiple lossless queues
US11886312B2 (en) 2020-04-07 2024-01-30 Intel Corporation Characterizing error correlation based on error logging for computer buses
US11734105B2 (en) 2020-07-06 2023-08-22 International Business Machines Corporation Efficient error reporting in a link interface
US20210050941A1 (en) * 2020-07-06 2021-02-18 Intel Corporation Characterizing and margining multi-voltage signal encoding for interconnects
US11914903B2 (en) * 2020-10-12 2024-02-27 Samsung Electronics Co., Ltd. Systems, methods, and devices for accelerators with virtualization and tiered memory
US11924112B2 (en) * 2021-03-30 2024-03-05 Cisco Technology, Inc. Real-time data transaction configuration of network devices
US11609878B2 (en) 2021-05-13 2023-03-21 Apple Inc. Programmed input/output message control circuit
JP2022182021A (ja) * 2021-05-27 2022-12-08 キヤノン株式会社 シリアル通信装置及びシリアル通信方法
CN113806258B (zh) * 2021-11-16 2022-02-18 苏州浪潮智能科技有限公司 一种动态自适应的虚拟通道映射方法、装置及存储介质
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 (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040042448A1 (en) 2002-08-30 2004-03-04 Intel Corporation Multi-port high-speed serial fabric interconnect chip in a meshed configuration
US20070140240A1 (en) 1997-08-22 2007-06-21 Dally William J Internet switch router

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7095744B2 (en) 2000-11-22 2006-08-22 Dune Networks Method and system for switching variable sized packets
CN1809029B (zh) * 2001-03-12 2012-01-11 高通股份有限公司 在无线分组数据服务连接中提供多重质量服务等级的方法和设备
US7187688B2 (en) * 2002-06-28 2007-03-06 International Business Machines Corporation Priority arbitration mechanism
FI115100B (fi) * 2003-10-14 2005-02-28 Tellabs Oy Menetelmä ja laitteisto ruuhkanhallinnan sekä siirtoyhteyskapasiteetin vuorottamisen ohjaamiseksi pakettikytkentäisessä tietoliikenteessä
US7496661B1 (en) 2004-03-29 2009-02-24 Packeteer, Inc. Adaptive, application-aware selection of differentiated network services
US7808983B2 (en) * 2004-07-08 2010-10-05 Cisco Technology, Inc. Network device architecture for centralized packet processing
US8144582B2 (en) * 2008-12-30 2012-03-27 International Business Machines Corporation Differentiating blade destination and traffic types in a multi-root PCIe environment
CN101958824B (zh) 2009-07-14 2012-06-27 华为技术有限公司 一种数据交换方法及数据交换结构
US9240981B2 (en) * 2011-06-03 2016-01-19 Oracle International Corporation System and method for authenticating identity of discovered component in an infiniband (IB) network
US9697161B2 (en) * 2013-03-22 2017-07-04 Stmicroelectronics (Grenoble) Sas Method of handling transactions, corresponding system and computer program product
US9385962B2 (en) * 2013-12-20 2016-07-05 Intel Corporation Method and system for flexible credit exchange within high performance fabrics
US9628382B2 (en) * 2014-02-05 2017-04-18 Intel Corporation Reliable transport of ethernet packet data with wire-speed and packet data rate match

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070140240A1 (en) 1997-08-22 2007-06-21 Dally William J Internet switch router
US20040042448A1 (en) 2002-08-30 2004-03-04 Intel Corporation Multi-port high-speed serial fabric interconnect chip in a meshed configuration

Also Published As

Publication number Publication date
EP3087710B1 (en) 2019-11-20
KR20160074659A (ko) 2016-06-28
EP3087710A1 (en) 2016-11-02
US9648148B2 (en) 2017-05-09
WO2015100102A1 (en) 2015-07-02
US20150180782A1 (en) 2015-06-25
EP3087710A4 (en) 2017-09-13
CN105850086A (zh) 2016-08-10
CN105850086B (zh) 2019-07-02
US20170237671A1 (en) 2017-08-17

Similar Documents

Publication Publication Date Title
KR101727874B1 (ko) 고성능 패브릭 내에서의 qos를 위한 방법, 장치 및 시스템
US9917787B2 (en) Method and system for flexible credit exchange within high performance fabrics
US10305802B2 (en) Reliable transport of ethernet packet data with wire-speed and packet data rate match
EP3197081B1 (en) Lane error detection and lane removal mechanism to reduce the probability of data corruption
KR101785310B1 (ko) 링크 패브릭 패킷에 비동기적인 플릿 번들을 이용한 링크 전달, 비트 오류 검출 및 링크 재시도
EP3028421B1 (en) Hierarchical/lossless packet preemption to reduce latency jitter in flow-controlled packet-based networks
US9397792B2 (en) Efficient link layer retry protocol utilizing implicit acknowledgements

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant