CXL spec이 매우 방대한 내용을 담고 있기 때문에 본 블로그에서는 CXL spec을 이해하기 위해 도움이 될 만한 것들을 골라서 간략히 정리하였습니다. 자세한 내용은 PCIe/CXL spec을 참고해주세요.
이전 글)
이 글에서는 CXL transaction의 주요 동작을 예시를 통해 자세히 설명하겠습니다.
예시 1: Host의 Cacheable Read 요청
호스트가 캐시 가능한 non-exclusive line의 사본을 요청하는 상황을 고려해봅시다. 요청은 "SnpData" semantics를 사용하여 비독점적 특성을 전달합니다. 이 예에서, 요청은 DCOH(Device Coherency Engine) 내의 snoop 필터에서 히트를 발생시켜 장치 캐시가 snoop됩니다. 장치 캐시는 상태를 Exclusive에서 Shared로 상태 전이를 하고, Shared 데이터 사본을 호스트에 반환합니다. 호스트는 Cmp-S semantics를 통해 라인의 상태를 전달받습니다.
예시 2: Host의 Exclusive Read 요청
호스트가 캐시 가능한 exclusive 라인의 사본을 요청하는 상황입니다. 이 요청은 "SnpInv" semantics를 사용하여 장치의 캐시를 무효화하도록 합니다. 이 예에서는 요청이 DCOH의 snoop 필터에서 히트를 발생시켜 장치 캐시가 snoop됩니다. 장치 캐시는 상태를 Exclusive에서 Invalid로 다운그레이드하고, 독점적 데이터 사본을 호스트에 반환합니다. 호스트는 Cmp-E semantics를 통해 라인의 상태를 전달받습니다.
예시 3: Host의 Non-Cacheable Read 요청
호스트가 (non-cacheable 라인의 사본을 요청하는 상황입니다. 요청은 "SnpCurr" semantics를 사용하여 캐시 불가능한 특성을 전달합니다. 이 예에서는 요청이 DCOH의 snoop 필터에서 히트를 발생시켜 장치 캐시가 snoop됩니다. 장치 캐시는 캐싱 상태를 변경할 필요가 없지만, 현재 데이터의 스냅샷을 제공합니다. 호스트는 Cmp semantics를 통해 라인이 캐시될 수 없음을 전달받습니다.
예시 4: Host의 소유권 요청 (데이터 필요 없음)
호스트가 장치에 데이터를 보내지 않고 라인에 대한 독점적 접근을 요청하는 상황입니다. 이는 MemInv opcode와 MetaValue '10 (Any)'를 사용하여 장치에 전달됩니다. 이와 함께 장치는 SnpInv 명령을 통해 캐시를 무효화하도록 요청받습니다. 장치는 캐시를 무효화하고 Cmp-E semantics를 통해 호스트에게 독점적 소유권을 부여합니다.
예시 5: Host의 캐시 무효화 요청
호스트가 모든 캐시, 포함된 장치의 캐시를 장치 메모리로 flush하려는 상황입니다. 이를 위해 MemInv opcode와 MetaValue '00 (Invalid)' 및 SnpInv 명령을 사용합니다. 장치는 캐시를 flush하고 Cmp semantics를 통해 호스트에 이를 전달합니다.
예시 6: Host의 Weakly Ordered Write 요청
호스트가 부분적 또는 전체 라인의 weakly ordered 쓰기를 수행하는 상황입니다. 임베디드 SnpInv를 통해 weakly ordered semantics를 전달합니다. 이 예에서는 장치가 라인의 사본을 캐시하고 있어 메모리에 쓰기 전에 장치 내에서 데이터를 병합합니다. 그런 다음 Cmp semantics를 통해 호스트에 이를 전달합니다.
예시 7: Device의 메모리 읽기 (Host Bias & Device Bias )
- Host Bias: 장치가 Host bias 상태의 device-attached memory에서 라인을 읽는 상황입니다. 장치는 일관성을 해결하기 위해 요청을 호스트에 보내야 합니다. 호스트는 일관성을 해결한 후 CXL.mem MemRdFwd 명령을 보내 트랜잭션을 완료하며, 장치는 내부적으로 읽기를 완료할 수 있습니다.
- Device Bias: 장치가 Device bias 상태의 device-attached memory에서 라인을 읽는 상황입니다. 이 경우, 장치는 호스트에 요청을 보낼 필요 없이 내부적으로 읽기를 완료할 수 있습니다.
Reference)
- Compute Express Link Specification
'Interface Standards > CXL' 카테고리의 다른 글
[7] CXL - Link layer - Retry (0) | 2024.08.30 |
---|---|
[6] CXL - Link layer - Flit Packing (0) | 2024.08.30 |
[4] CXL - Transaction layer - CXL.mem protocol (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 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!