CXL spec이 매우 방대한 내용을 담고 있기 때문에 본 블로그에서는 CXL spec을 이해하기 위해 도움이 될 만한 것들을 골라서 간략히 정리하였습니다. 자세한 내용은 PCIe/CXL spec을 참고해주세요.
이전 글)
CXL.mem 개요
CXL.mem 프로토콜은 CPU와 메모리 간의 트랜잭셔널 인터페이스로, Compute Express Link (CXL)의 물리적 및 링크 계층을 사용하여 다이 간 통신을 합니다. 이 프로토콜은 호스트 CPU, 가속기 장치 또는 메모리 버퍼 칩 내에 위치한 메모리 컨트롤러 등 여러 메모리 연결 옵션에 사용될 수 있습니다. CXL.mem은 휘발성 및 비휘발성 메모리 등 다양한 메모리 유형과 플랫, 계층적 구성 등을 포함한 다양한 구성에 적용될 수 있습니다.
CXL.mem 트랜잭션의 구성
CXL.mem 트랜잭션은 Master에서 Subordinate로 전송되는 M2S 트랜잭션과 Subordinate에서 Master로 전송되는 S2M 트랜잭션으로 구분됩니다. 각각의 트랜잭션은 데이터 유무에 따라 다르게 구성됩니다.
M2S 트랜잭션
- Request without data (Req): 데이터 없이 읽기, 무효화, 신호 전송 등의 요청을 포함합니다.
- Request with Data (RwD): 데이터를 포함한 쓰기 요청을 포함합니다.
S2M 트랜잭션
- No Data Response (NDR): 데이터 없이 완료 및 상태 표시 응답을 포함합니다.
- Data Response (DRS): 메모리 읽기 데이터 응답을 포함합니다.
CXL.mem 메시지 클래스 및 Opcode
M2S Request (Req)
M2S 요청 메시지는 읽기, 무효화, 신호 전송 등의 작업을 수행합니다. 주요 필드는 다음과 같습니다:
- Valid: 유효한 요청임을 나타냅니다.
- MemOpcode: 수행할 메모리 작업을 지정합니다.
- MetaField: 최대 3개의 Meta Data 필드를 지정할 수 있습니다.
- MetaValue: MetaField가 No-Op가 아닐 경우 필드를 업데이트할 값을 지정합니다.
- SnpType: 필요한 snoop 유형을 지정합니다.
- Address: 호스트 물리적 주소를 지정합니다.
- Tag: CXL.mem 트랜잭션 기간 동안 할당된 소스 항목을 지정합니다.
- TC: 품질 서비스를 지정합니다.
- LD-ID: 여러 논리적 장치 내의 논리적 장치를 식별합니다.
M2S Request with Data (RwD)
RwD 메시지는 주로 Master에서 Subordinate로 쓰기를 포함합니다. 주요 필드는 다음과 같습니다:
- Valid: 유효한 요청임을 나타냅니다.
- MemOpcode: 수행할 메모리 작업을 지정합니다.
- MetaField: 최대 3개의 Meta Data 필드를 지정할 수 있습니다.
- MetaValue: MetaField가 No-Op가 아닐 경우 필드를 업데이트할 값을 지정합니다.
- SnpType: 필요한 snoop 유형을 지정합니다.
- Address: 호스트 물리적 주소를 지정합니다.
- Tag: CXL.mem 트랜잭션 기간 동안 할당된 소스 항목을 지정합니다.
- TC: 품질 서비스를 지정합니다.
- Poison: 데이터에 오류가 포함되었음을 나타냅니다.
- LD-ID: 여러 논리적 장치 내의 논리적 장치를 식별합니다.
S2M No Data Response (NDR)
NDR 메시지는 Subordinate에서 Master로의 완료 및 상태 표시 응답을 포함합니다. 주요 필드는 다음과 같습니다:
- Valid: 유효한 요청임을 나타냅니다.
- Opcode: 수행할 메모리 작업을 지정합니다.
- MetaField: Meta Data 상태를 인코딩합니다.
- MetaValue: Meta Data 값을 지정합니다.
- Tag: 관련된 M2S 요청 또는 RwD와 함께 전송된 Tag를 반영합니다.
- LD-ID: 여러 논리적 장치 내의 논리적 장치를 식별합니다.
- DevLoad: 장치 로드를 나타냅니다.
S2M Data Response (DRS)
DRS 메시지는 Subordinate에서 Master로의 메모리 읽기 데이터를 포함합니다. 주요 필드는 다음과 같습니다:
- Valid: 유효한 요청임을 나타냅니다.
- Opcode: 수행할 메모리 작업을 지정합니다.
- MetaField: Meta Data 상태를 인코딩합니다.
- MetaValue: Meta Data 값을 지정합니다.
- Tag: 관련된 M2S 요청 또는 RwD와 함께 전송된 Tag를 반영합니다.
- Poison: 데이터에 오류가 포함되었음을 나타냅니다.
- LD-ID: 여러 논리적 장치 내의 논리적 장치를 식별합니다.
- DevLoad: 장치 로드를 나타냅니다.
결론
CXL.mem 트랜잭션 레이어는 CPU와 메모리 간의 효율적인 데이터 전송 및 일관성 유지를 위한 중요한 역할을 합니다. 다양한 메시지 클래스와 Opcode를 통해 트랜잭션을 관리하며, 각 채널의 독립성과 크레딧 기반 흐름 제어는 높은 성능과 확장성을 보장합니다. CXL.mem 프로토콜은 다양한 메모리 구성과 유형에 최적화되어 고성능 컴퓨팅 환경에서 중요한 역할을 합니다.
Reference)
- Compute Express Link Specification
'Interface Standards > CXL' 카테고리의 다른 글
[6] CXL - Link layer - Flit Packing (0) | 2024.08.30 |
---|---|
[5] CXL - Transaction layer - Transaction Flow (0) | 2024.07.07 |
[3] CXL - Transaction layer - CXL.cache protocol (0) | 2024.07.07 |
[2] CXL - Transaction layer - CXL.io protocol (0) | 2024.07.07 |
[1] CXL Architecture (0) | 2024.07.07 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!