2. PCIe基础概念

要理解PCIe读写性能基准测试的结果,必须先看清PCIe协议栈的分层结构。PCIe并不是一条“透明的高速导线”,而是一套分层协议:上层软件发出的读写请求,会依次经过事务层、数据链路层和物理层,最终变成链路上的差分电信号;对端设备再逐层还原,完成一次事务。性能测试中看到的带宽、延迟、完成时间,本质上都是这三层协同工作的结果。

核心结论:PCIe性能 = 事务层效率 × 数据链路层可靠性开销 × 物理层链路能力。任何一层出现瓶颈,基准测试的读写带宽和延迟都会直接反映出来。

一、PCIe协议三层结构总览

PCIe采用类似网络协议的分层设计,从高到低依次为事务层(Transaction Layer)、数据链路层(Data Link Layer)和物理层(Physical Layer)。发送方向是逐层封装,接收方向是逐层解封装。每一层只关心自己的职责,层与层之间通过标准接口传递数据包。

PCIe 协议分层与数据封装/解封装路径 发送端(Requester) 软件 / 驱动 发起 Memory Read/Write 事务层 TLP Header + Data + ECRC 路由 / 属性 / 流量类别 数据链路层 DLLP Sequence + LCRC ACK/NAK 重传 物理层 PHY 8b/10b 或 128b/130b 串行差分信号 PCIe Link(Lane 0..N) 差分对 TX+/TX- 与 RX+/RX- 链路训练 LTSSM · 速率协商 · 均衡 Gen1 2.5 / Gen2 5.0 / Gen3 8.0 / Gen4 16.0 GT/s 接收端(Completer) 软件 / 驱动 返回 Completion 事务层 TLP 解析 Header / 校验 生成 CplD 数据链路层 DLLP 校验 LCRC 回 ACK/NAK 物理层 PHY 时钟恢复 / 解码 串并转换 测试关注点: TLP 大小与数量决定事务层效率;DLLP 重传与 ACK 延迟影响有效带宽;PHY 速率与 Lane 宽度决定链路理论上限。

二、事务层:读写请求的“业务逻辑层”

事务层是PCIe协议栈中最贴近软件的一层,负责把读写请求封装成事务层包(TLP,Transaction Layer Packet)。一次Memory Read或Memory Write请求,在事务层被组织为Header、可选Data Payload以及可选的端到端CRC(ECRC)。Header中携带请求类型、目标地址、长度、请求者ID、标签(Tag)等关键字段。

事务层还负责流量类别(TC)、虚拟通道(VC)和排序规则。对于性能测试而言,最需要关注的是有效载荷大小(Payload Size)和未完成请求数量(Outstanding Requests)。Payload越大,Header开销占比越低,带宽效率越高;Outstanding越多,越能掩盖往返延迟,提升吞吐。但Outstanding受限于设备能力与系统配置,并非越大越好。

# 查看PCIe设备事务层相关能力(Linux示例)
lspci -vvv -s 01:00.0 | grep -i -E "DevCap|DevCtl|MaxPayload|MaxReadReq"
# 典型输出关注:
# DevCap: MaxPayload 256 bytes, PhantFunc 0
# DevCtl: MaxPayload 256 bytes, MaxReadReq 512 bytes

三、数据链路层:可靠传输的“保险层”

数据链路层位于事务层和物理层之间,核心职责是保证TLP在链路上可靠传输。它为每个TLP添加序列号(Sequence Number)和链路CRC(LCRC),接收端校验通过后返回ACK DLLP,校验失败则返回NAK DLLP,发送端据此重传。此外,数据链路层还负责流控信用(Flow Control Credit)管理,防止接收端缓冲区溢出。

在基准测试中,数据链路层的影响常被忽视。当链路误码率升高或重传频繁时,有效带宽会明显下降,而延迟抖动也会增大。使用lspci -vvv查看链路状态时,若发现Correctable Error计数持续增长,说明物理层信号质量或链路训练参数可能存在问题,需要结合误码率测试进一步定位。

流控信用不足会直接限制发送端可发出的TLP数量。测试高吞吐场景时,应确认接收端Advertised Credit是否足够,避免因信用耗尽导致发送端空等。

四、物理层与链路训练:速率协商的“地基”

物理层负责将数据链路层的包转换为串行差分信号,并通过Lane发送。PCIe采用8b/10b(Gen1/Gen2)或128b/130b(Gen3及以上)编码,前者有20%编码开销,后者仅约1.5%。物理层还包含发送均衡、接收均衡、时钟恢复等模拟电路,直接影响信号完整性。

链路训练与速率协商由LTSSM(Link Training and Status State Machine)状态机控制。上电或复位后,链路依次经历Detect、Polling、Configuration、Recovery、L0等状态。在Configuration阶段,两端设备交换Link Capabilities,协商出共同支持的最高速率和最大Lane宽度。若协商失败,会回退到更低速率或更少Lane。

协议层 核心单元 关键字段/机制 对性能测试的影响
事务层 TLP Header、Payload、Tag、TC/VC Payload大小、Outstanding数量决定带宽效率
数据链路层 DLLP Sequence、LCRC、ACK/NAK、Credit 重传与流控影响有效带宽和延迟抖动
物理层 PHY / Lane 编码、均衡、LTSSM、速率协商 决定链路理论上限与信号质量

五、案例与误区复盘

某次NVMe SSD读写基准测试中,顺序读带宽始终只有约3.2 GB/s,而SSD标称PCIe Gen4 x4理论带宽接近8 GB/s。排查发现,链路实际协商为Gen3 x4,原因是主板BIOS中该插槽被限制为Gen3。将插槽速率改为Auto后,链路重新训练为Gen4 x4,带宽提升至约6.8 GB/s。这说明速率协商结果必须作为测试前置检查项。

另一个常见误区是只关注物理层速率,忽略事务层Payload设置。若MaxPayload被限制为128字节,即使链路是Gen4 x4,有效带宽也会因Header开销而明显低于理论值。测试前应确认MaxPayload和MaxReadReq是否已优化到设备支持的最大值。

不要用“理论带宽 = 速率 × Lane数”直接判断测试结果是否正常。必须扣除编码开销、TLP Header开销、DLLP开销和流控/重传损耗,才能得到可预期的有效带宽范围。

掌握这三层结构和链路训练机制后,后续进行PCIe读写性能基准测试时,就能从“链路是否训练到预期速率”“Payload与Outstanding是否合理”“是否有重传或流控瓶颈”三个方向快速定位问题,而不是盲目更换硬件或反复调整测试参数。