Interface Standards/PCIe

[4] PCIe - Transaction Layer (Ordering)

Return 2024. 5. 12. 22:02

이 글은 제가 PCIe를 공부하면서 겪은 시행착오를 바탕으로 정리한 글입니다. PCIe를 처음 접하는 분들에게 좋은 길라잡이가 되었으면 합니다.

 

이전 글)

 

[3] PCIe - Transaction Layer (Quality of Service & Flow Control)

 

returnclass.tistory.com

 

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 관계가 존재하지 않습니다.  

Reference)  PCI Express Technology 3.0 [mindshare]

 위 그림을 통해 좀 더 쉽게 알아봅시다. 현재 송신 측의 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이 적용됨을 알 수 있습니다.)  

Reference) PCI Express® Base Specification Revision 5.0

 단순한 예시를 들어 조금 더 이해해봅시다. 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)