深入解析PCIe带宽问题
深入解析PCIe带宽问题
PCIe(Peripheral Component Interconnect Express)是一种高速串行计算机扩展总线标准,广泛应用于计算机硬件设备的连接。在讨论PCIe性能时,带宽问题是一个核心话题。本文将从理论带宽、实际带宽、带宽利用率等多个维度,深入分析PCIe的带宽特性及其影响因素。
理论带宽、实际带宽、带宽利用率、单向带宽、双向带宽
PCIe的理论带宽计算公式为:链路速率 x Lane number。如果计算双向带宽,还需要再乘以2(PCIe是双工通信)。例如,PCIe 3.0 x16的理论带宽为:8Gbps x 16 = 16GB/s。
在讨论实际带宽时,更多是一个工程问题。实际带宽定义为单位时间传输的数据量。工程上做带宽评估通常记录发起数据请求的时间和响应返回的时间,然后用:请求的数据量/时间来计算实际带宽。
带宽利用率的计算公式为:实际带宽 / 理论带宽。项目上做带宽优化就是分析系统中影响性能的因素,然后调节这些因素来提高带宽利用率。
在分析带宽时,通常会拆分成读带宽和写带宽两个部分。单独分析时,通常只计算单向带宽。做带宽利用率计算时,也只用实际带宽/单向理论带宽来计算。但有些数据请求者(如DMA)可以同时发出读请求和写请求,此时就需要用双向理论带宽来计算。
协议开销分析
在讨论PCIe带宽时,需要理解开销(Overhead)的概念。PCIe为了高效安全地传输数据,定义了一些额外的命令控制字段与响应字段,这些不属于数据的信息都算作开销。
从协议层引入的开销包括TLP Prefixes、TLP header以及TLP Digest。TLP Header分3DW和4DW两种类型,其中的Length字段定义了Data Payload部分的字节数,PCIe一个请求的最大数据量为4096 bytes。PCIe还定义了MPS(Max_Payload_Size)和RCB(Read_Completion_Boundary)两个因子来限制PCIe一个请求中能携带的最大数据传输量。
链路层开销包括TLP Sequence Number和LCRC,以及Ack/Nak机制和流控机制带来的额外开销。
物理层编码开销在Gen1和Gen2上为1/5,在Gen3/4/5上采用128b/130b编码策略,编码开销影响较小。Gen6和Gen7采用PAM4编码,没有编码开销。
物理层Symbol开销包括STP Frame Symbol、End Frame Symbol、SDP Symbol等。在Gen3以上速率时,传输DLLP时会带两个SDP Symbol,传输TLP时会带4个STP Symbol,End Frame Symbol也会变成4个。
PCIe实际带宽分析
以一个PCIe拓扑结构图为例,讨论PCIe带宽分析。主要考虑Memory到EP的数据搬运过程,通常使用DMA进行数据搬运。带宽分析的思想是定义一批数据量,统计从数据搬运开始到所有数据搬完所花费的时间,然后用数据量/时间计算出带宽。
影响PCIe性能的主要因素包括:
- MPS和RCB值
- DMA工作机制(如LinkList技术、Shadow Register技术、Doolbell技术等)
- PCIe Ack/Nak机制
- PCIe的灵活路由技术
- 缓存大小、DDR性能等其他组件的影响
总结
PCIe的带宽分析是一个系统性问题,需要考虑多个组件和因素的相互影响。对系统方案不熟悉,就无法全面分析PCIe性能。在产品设计中,通常不会给出PCIe实际带宽的具体数值,而是通过内控过程来确保性能达标。