CXL spec이 매우 방대한 내용을 담고 있기 때문에 본 블로그에서는 CXL spec을 이해하기 위해 도움이 될 만한 것들을 골라서 간략히 정리하였습니다. 자세한 내용은 PCIe/CXL spec을 참고해주세요.
이전 글)
CXL.io 개요
CXL.io는 non-coherent load/store 인터페이스를 제공하며, I/O 장치에 사용됩니다. CXL.io transaction layer는 Flex Bus 계층 구조에서 중요한 역할을 하며, 이 계층은 transaction types, transaction packet formatting, credit-based flow control, virtual channel management, transaction ordering rules 등을 관리합니다. 이러한 요소들은 PCIe 정의를 따르며, 더 자세한 내용은 PCI Express Base Specification의 "Transaction Layer Specification" 챕터를 참고하면 됩니다. 이 블로그 글에서는 CXL.io에 대해 특별히 주목해야 할 PCIe 운영 모드와 기능을 강조합니다.
CXL.io Endpoint
CXL 장치는 CXL 1.1과 CXL 2.0 모드에서 모두 작동할 수 있어야 합니다. CXL Alternate Protocol 협상은 작동 모드를 결정합니다. CXL 1.1 모드로 구성된 경우, CXL.io endpoint는 소프트웨어에 PCIe RCiEP(PCI Express Root Complex Integrated Endpoint)로 노출되어야 하며, CXL 2.0 모드로 구성된 경우에는 PCI Express Endpoint로 노출되어야 합니다. 더 자세한 내용은 PCIe 5.0 Base Specification을 참고하시기 바랍니다.
CXL Power Management VDM Format
CXL 전력 관리 메시지는 PCIe Vendor Defined Type 0 메시지로 전송되며, 4 DW(32비트 단위)의 데이터 페이로드를 포함합니다. 여기에는 PMREQ, PMRSP, PMGO 메시지가 포함됩니다. 이 메시지들의 형식은 다음과 같은 특성을 가집니다:
- Fmt 및 Type 필드: 메시지와 데이터를 나타내도록 설정됩니다. 모든 메시지는 "Local-Terminate at Receiver" 라우팅을 사용하며, Message Code는 Vendor Defined Type 0으로 설정됩니다.
- Vendor ID 필드: 1E98h로 설정됩니다.
- Byte 15: 메시지 헤더의 Byte 15에는 VDM Code가 포함되며, 이는 "CXL PM Message"(68h)로 설정됩니다.
- 4 DW 데이터 페이로드: CXL PM Logical Opcode(e.g., PMREQ, GPF)와 CXL PM 메시지와 관련된 기타 정보를 포함합니다.
CXL 구성 요소가 poison(EP=1)이 설정된 PM VDM을 수신하면 해당 메시지를 삭제해야 하며, 이 경우 수신자는 경고 비치명적 오류로 처리해야 합니다. 수신자 전력 관리 장치(PMU)가 PM VDM 페이로드의 내용을 이해하지 못하면 해당 메시지를 조용히 삭제하고 비치명적 오류로 신호를 보내지 않아야 합니다.
CXL Error VDM Format
CXL Error 메시지는 PCIe Vendor Defined Type 0 메시지로 전송되며, 데이터 페이로드가 없습니다. 현재 이 클래스에는 Memory Error Firmware Notification(MEFN) 메시지가 포함됩니다. MEFN 메시지의 특성은 다음과 같습니다:
- Fmt 및 Type 필드: 데이터가 없는 메시지를 나타내도록 설정됩니다.
- 라우팅: "Routed to Root Complex"를 사용하며, 항상 장치에 의해 시작됩니다.
- Vendor ID 필드: 1E98h로 설정됩니다.
- Byte 15: 메시지 헤더의 Byte 15에는 VDM Code가 포함되며, 이는 "CXL Error Message"(00h)로 설정됩니다.
Optional PCIe Features Required for CXL
CXL을 활성화하기 위해 필요한 PCIe 사양의 선택적 기능은 다음과 같습니다:
- Data Poisoning by Transmitter
- Address Translation Services (ATS): CXL.cache가 존재하는 경우에만 필요(예: Type 1 및 Type 2 장치에만 해당되며 Type 3 장치에는 해당되지 않음).
- Additional VCs and TCs: QoS를 위한 선택적 VC1과 함께 기본 VC0/TC0.
- Advanced Error Reporting (AER)
Error Propagation
CXL.cache 및 CXL.mem에서 장치가 감지한 오류는 CXL.io 트래픽 스트림을 통해 Upstream Port로 전파됩니다. 이러한 오류는 PCIe AER(Advanced Error Reporting) 레지스터에 올바르게 수정 가능한 내부 오류와 수정할 수 없는 내부 오류로 기록됩니다.
Memory Type Indication on ATS
특정 메모리 영역에 대한 요청은 CXL.io에서만 발행될 수 있으며, CXL.cache에서는 발행될 수 없습니다. 호스트는 이러한 메모리 영역을 ATS(주소 번역 서비스) 완료 시 표시합니다. 예를 들어, x86 시스템에서는 호스트가 Uncacheable(UC) 유형 메모리에 대한 접근을 CXL.io에서만 제한할 수 있습니다.
Deferrable Writes
CXL 사양에서 정의된 Deferrable Writes는 CXL 1.1 모드에서만 적용됩니다. CXL 2.0 모드에서는 PCIe 사양을 참조하십시오. Deferrable Writes는 여러 소프트웨어 엔티티가 명시적 잠금이나 소프트웨어 동기화 없이 CXL 장치에 작업을 제출할 수 있도록 합니다.
결론
CXL.io의 transaction layer는 PCIe 사양을 기반으로 하며, 다양한 장치와의 효율적인 상호작용을 가능하게 합니다. CXL 2.0 사양에서는 Power Management, Error Handling, Deferrable Writes 등 여러 기능이 추가되어 CXL.io의 성능과 유연성을 향상시킵니다. 이러한 기능들은 차세대 고성능 컴퓨팅 환경에서 중요한 역할을 할 것으로 기대됩니다.
Reference)
- Compute Express Link Specification
'Interface Standards > CXL' 카테고리의 다른 글
[5] CXL - Transaction layer - Transaction Flow (0) | 2024.07.07 |
---|---|
[4] CXL - Transaction layer - CXL.mem protocol (0) | 2024.07.07 |
[3] CXL - Transaction layer - CXL.cache protocol (0) | 2024.07.07 |
[1] CXL Architecture (0) | 2024.07.07 |
[0] CXL Introduction: why CXL? (0) | 2024.05.11 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!