이 글은 제가 PCIe를 공부하면서 겪은 시행착오를 바탕으로 정리한 글입니다. PCIe를 처음 접하는 분들에게 좋은 길라잡이가 되었으면 합니다.
이전 글)
Transaction Ordering
transaction ordering의 deadlock 상태를 피해야 할 필요성을 고려하여 만들어졌으며, traffic flow에서 transaction을 ordering 하는 세 가지 일반적인 모델이 있습니다.
Ordering Type
1. Strong Ordering
PCIe는 동일한 traffic class(TC) 할당을 받은 transaction의 strong order를 요구합니다. 동일한 TC값을 할당받은 transaction은 주어진 VC에 매핑되므로, 각 VC내의 트랜잭션에 대해 동일한 규칙이 적용됩니다. 반면에 같은 VC일지라도 다른 TC들 간에는 ordering 관계가 존재하지 않습니다.
위 그림을 통해 좀 더 쉽게 알아봅시다. 현재 송신 측의 Non-posted 유형의 transaction이 첫 번째 transaction인 상황에서 수신측의 Non-posted 수신 버퍼가 꽉 차서(즉, non-posted에 대한 credit이 없을 때) 전송이 될 수 없을 때 strong ordering인 경우 뒤에 오는 모든 transaction이 blocking 되어 시스템이 stall 되는 일이 발생할 것입니다.
2. Relaxed Ordering
특정 제어 조건 하에서만 re-ordering될 수 있습니다. 의존성 문제를 피하기 위해 software에 의해 명시될 때만 허용됩니다. 위 그림과 같은 예시에서 다시 생각하자면, 2번째 transaction의 TLP header에 RO bit가 1로 설정되었다면 해당 transaction은 첫 번째 transaction을 앞서서 수신 측으로 전송할 수 있을 것입니다.
ID-based Ordering
PCIe device에서 각 function은 자신의 transaction에 대해 엄격한 순서를 유지할 수 있어야하지만, 다른 function(BDF)에서 오는 packet에 대해서는 relaxed ordering을 허용할 수 있습니다. 예를 들어서 switch에 두 개의 PCIe device(A, B)가 transaction을 보낸다고 가정해 봅시다. 만약 transaction의 TLP 헤더의 Attr bit에서 IDO(ID-Based Ordering)가 1로 설정되어 있고, transaction 간 서로 다른 requester ID(BDF) 일 때는 뒤에 있는 transaction이 앞에 있는 tranaction을 넘어설 수 있습니다.
Ordering Rules Table
Col은 처음 발행된 transaction, row는 그 다음에 발생하는 transaction을 나타내며, 교차점은 "이 행의 패킷이 열의 패킷을 지나갈 수 있어야 하나?"에 대한 답이라고 생각하시면 됩니다.
Yes는 (데드락을 피하기 위해) 행의 transaction이 열의 transaction을 통과해야함을 의미하며, Y/N은 행의 transaction이 열의 transaction을 통과할 수 있지만 필수는 아님을 의미하며, No는 행의 transaction이 열의 transaction을 통과할 수 없음을 의미합니다.(이는 strong ordering이 적용됨을 알 수 있습니다.)
단순한 예시를 들어 조금 더 이해해봅시다. A2b의 경우 즉, memory write과 같은 posted 유형끼리 RO(Relaxed Ordering) bit이 1로 설정된 경우, 이전의 memory write request를 넘어설 수 있음. 즉, 이전 transaction이 아직 처리되지 않았더라도, RO=1로 설정된 새 transaction이 먼저 처리될 수 있음을 의미합니다.
Next Topic)
이번 글을 마지막으로 PCIe의 transaction layer 부분 설명을 마무리합니다. 다음부터는 DLLP와 Ack/Nak protocol을 중심으로 PCIe의 data link layer에 관련된 설명을 하고자 합니다.
Reference)
- PCI Express® Base Specification Revision 5.0 Version 1.0
- PCI Express Technology 3.0 (minshare)
'Interface Standards > PCIe' 카테고리의 다른 글
[6] PCIe - Physical Layer (PCIe Gen1 & Gen2) - Transmit Logic (0) | 2024.05.26 |
---|---|
[5] PCIe - Data Link Layer (DLLP & Ack/Nak protocol) (0) | 2024.05.13 |
[3] PCIe - Transaction Layer (Quality of Service & Flow Control) (0) | 2024.05.12 |
[2] PCIe - Transaction Layer (TLPs) (0) | 2024.05.12 |
[1] PCIe - Introduction 2 (0) | 2024.05.11 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!