이전글)
Link Layer를 통한 신뢰성있는 데이터 전송
Link Layer는 CXL (Compute Express Link)에서 신뢰성 있는 데이터 전송을 보장하기 위해 중요한 역할을 합니다. 이 계층은 데이터 전송의 기본 단위인 flit을 패킹하고 언패킹하며, 전송된 데이터의 무결성을 확인하고 오류가 발생했을 때 이를 처리하는 메커니즘을 제공합니다. 이를 통해 CXL 장치 간의 안정적인 통신이 가능해집니다.
PCIe에서의 Retry
PCIe(Peripheral Component Interconnect Express)에서 retry 메커니즘은 데이터 전송의 신뢰성을 보장하기 위해 사용됩니다. PCIe는 데이터 전송 중 오류가 발생했을 때, 데이터 패킷(TLP: Transaction Layer Packet)이 손실되거나 손상된 경우 해당 패킷을 재전송하도록 설계되어 있습니다. 이러한 재전송 과정은 ack/nak 프로토콜에 의해 제어됩니다.
Ack/Nak Protocol
PCIe에서 ack/nak 프로토콜은 수신된 데이터 패킷이 제대로 전달되었는지를 확인하는 데 사용됩니다. 송신자는 수신자로부터 ack(승인) 신호를 수신하면 데이터가 정상적으로 전송되었음을 확인하고, nak(부인) 신호를 받으면 해당 패킷을 다시 전송(retry)합니다. 이 프로토콜은 데이터의 무결성을 보장하고, 오류 발생 시 자동으로 문제를 해결하도록 도와줍니다. PCIe에서는 이러한 ack/nak 신호를 주고받기 위해 전용 DLLP(Data Link Layer Packet)를 사용합니다.
참고글)
CXL에서의 Retry
CXL에서의 retry 메커니즘도 PCIe와 유사하게 오류가 발생한 데이터 전송을 복구하는 역할을 합니다. 그러나 CXL에서는 PCIe와 달리 flit이라는 전송 단위에 ack 필드를 포함시켜, 추가적인 패킷 없이도 데이터 전송의 성공 여부를 확인할 수 있습니다. 이는 데이터 전송 중 추가적인 오버헤드를 줄이고, 더 효율적인 통신을 가능하게 합니다. 다음 그림 처럼 flit의 LSB부터 시작해서 3번째 위치하는 필드인 것을 볼 수 있습니다.
LLCRD Forcing
만약 주고 받을 flit이 없다면 어떻게 될까요? CXL 스펙에서는 이때를 대비해 LLCRD라는 flit 유형을 따로 두고 있습니다. LLCRD는 이전 글에서 간략히 언급한 control flit의 한 종류라고 생각하시면 됩니다. 주고 받을 flit이 없어 ack 전송을 할 수 없을 때, LLCRD control flit을 생성하여 ack 받은 flit의 수를 명시적으로 기록하여 전송할 수 있습니다.
CXL Retry와 PCIe Retry의 차이점
CXL과 PCIe의 retry 메커니즘은 기본적인 개념에서는 유사하지만, 구현 방식에서 차이가 있습니다. PCIe에서는 ack/nak 신호를 전송하기 위해 별도의 DLLP 패킷을 사용해야 하지만, CXL에서는 flit 내에 포함된 ack 필드를 통해 이러한 신호를 주고받습니다. 이는 CXL에서의 데이터 전송이 더 간결하고 효율적으로 이루어지게 하는 특징입니다. CXL의 이러한 설계는 데이터 전송의 속도와 효율성을 높이며, 통신 지연(latency)을 줄이는 데 기여합니다.
다음 글에서는 CXL.io 도메인과 CXL.cache/.mem 도메인을 muxing하는 계층인 ARB/MUX 계층에 대해 소개하도록 하겠습니다.
Reference)
- Compute Express Link Specification
- PCI Express Technology 3.0 [mindshare]
'Interface Standards > CXL' 카테고리의 다른 글
[9] CXL 관련 논문들 (5) | 2024.08.31 |
---|---|
[8] CXL - ARB/MUX Layer (0) | 2024.08.30 |
[6] CXL - Link layer - Flit Packing (0) | 2024.08.30 |
[5] CXL - Transaction layer - Transaction Flow (0) | 2024.07.07 |
[4] CXL - Transaction layer - CXL.mem protocol (0) | 2024.07.07 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!