Latency
PCIe链路的Latency包含
• Data payload size of a TLP
• Core latency between the Application Layer and the Link (varies between Receive and Transmit transactions)
• Switch latency
• Completer latency, such as SDRAM read latency and SRAM mailbox read latency
• PCI Express to PCI/PCI-X bridge latency and latency inherent to a PCI component
下表列出一些实测典型应用场景下read request transaction的latency
Maximum Effective Bandwidth
有效带宽的计算公式如下:
Maximum Effective Bandwidth = data / (data + overhead)
其中PCIe链路的overhead包括3个方面
1. PHY层编码方案
Gen1/Gen2情况下,数据包按照8b/10b编码,即8bit的数据要编码为10bit的数据,多了2bit的非数据bit,编码效率为80%。例如Gen2x16最大支持 5 * 8 / 10 * 16 = 8 GB/s的带宽。
从Gen3开始,数据包按照128b/130b方式编码,即128bit的数据编码为130bit的数据,编码效率为98%。例如Gen3x16最大支持 8 * 128 / 130 * 16= 15.754 GB/s 的带宽。
一个PCIe 3.0 x2的通道,x2 的可用带宽为 7.877 * 2 = 126.031Gbps = 1.97 GB/s。
2. Trans层TLP包头,CRC,seq number等
每个TLP增加物理层添加的包头(1 Byte)、数据链路层添加的包编号(2 Bytes)、事务层添加的包头(12 or 16 Bytes)、事务层添加的ECRC(4Bytes,可选的)、数据链路层添加的LCRC(4Bytes)和物理层添加的包尾(1 Byte)。
以4DW TLP不增ECRC为例,每个TLP overhead=6DW(24Byte)。
以Max_payload_size=256Byte为例,有效带宽为 256 / ( 256 + 24 ) = 91.4%
3. Data Link层的ACK/NAK以及FCU DLLP
每个DLLP占2DW(DLLP本身只有6Byte,到PHY层会再加上2Byte的STP和END共8Byte),理论上最恶劣的情况是每个TLP都增加一个ACK和FCU。
以Max_payload_size=256Byte为例,有效带宽恶化为 256 / ( 256 + 24 + 8 ) = 88.9%
但该项overhead与控制器设计的微架构有关,通常Rx返回ACK/NAK的频率不会这么高,实际DLLP引入的overhead为1%~5%左右。
综上,PCIe理论带宽利用率上限的最低值如下。比如PCIe设置max_payload_size=256Byte:
• 理论上max_payload_size越大,带宽利用率越高,但是相应地也要增加较多buffer资源,考虑到max_payload_size大于256Byte之后buffer每扩大1倍,带宽利用率增加收益不大。
• max_payload_size确定后根据系统链路常用应用的latency可以确定PCIe的outstanding能力。max_payload_size越大,为了平衡面积考虑,outstanding设置会相应减小。但RC会对read completion在RCB拆包,常见主机的RCB=128Byte,所以max_payload_size越大相当于减少的有效的outstanding能力,导致实际带宽在高latency系统中显著降低。
Actual Link Usage
实际应用中PCIe的带宽如果想达到理论带宽利用率还需要PCIe的outstanding能力匹配链路的latency。比如PCIe中outbound NP outstanding=64,所以如果PCIe有效带宽不下降,需要保证系统读latency最大不能超过
Latency = 8GB/s / (256B * 64) = 2us