PCIe 中的 MRRS、MPS 和 RCB: 定义、作用、联系、区别、配置位置与作用对象
想象一下,PCIe 总线是一条多车道的高速公路系统,数据包(TLP)就是在上面行驶的车辆,而数据本身则是车辆运输的货物。我们的目标是让这个高速公路系统的通行效率达到最高,避免堵车和资源浪费。
1. MPS - 最大有效载荷大小 (Maximum Payload Size)
- 生动定义: 一辆货车的最大载货容量。它规定了每一辆单独货车(TLP)的货厢最多能装多少货物(数据)。
- 技术定义: 一个 事务层数据包 (TLP) 的“数据部分”(即 Payload)的最大允许大小。
- 作用: 决定了发送方一次性能将多少有效数据封装到一个TLP包中。MPS过小会导致需要更多数量的TLP来传输大量数据,每个TLP的包头(开销)会造成总线带宽浪费。MPS过大会对接收端的缓冲区大小提出更高要求。因此,链路两端必须在支持范围内协商出一个最优值。
- 配置位置:
- 设备能力 (只读): 位于 PCIe 扩展配置空间的
Device Capabilities寄存器的Max_Payload_Size_Supported字段。告诉你该设备硬件最大能支持多大的货车。 - 当前设置 (可读写): 位于 PCIe 扩展配置空间的
Device Control寄存器的Max_Payload_Size字段。在链路训练时,Root Complex (RC) 会选择一个所有下游设备都支持的最小值,写入此处。一条链路上的所有设备,此值最终相同。
- 作用于哪些 TLP: MPS 限制所有携带数据载荷 (Payload) 的 TLP。主要包括:
- 存储器写请求 (MWr, Memory Write Request): 这是最直接受影响的TLP。
- 带有数据的完成包 (CplD, Completion with Data): 响应读请求而返回的数据包。
- 消息信号中断 (MSI, Message Signaled Interrupt): 本质上是一种带数据的写请求TLP。
- 不携带数据的TLP不受影响,例如读请求 (MRd)、配置读写 (CfgRd/CfgWr)、无数据的完成包 (Cpl) 等。
- 查看命令 (Linux):
lspci -vvv -s <BDF> | grep -i "maxpayload" - # 示例输出:
- # MaxPayload 128 bytes, MaxReadReq 512 bytes
- # DevCap: MaxPayload 512 bytes, PhantFunc 0, Latency L0s <4us, L1 <64us
2. MRRS - 最大读请求大小 (Maximum Read Request Size)
- 生动定义: 一张取货单上一次能申请的最大货物量。它限制了采购员(RC/CPU)一次性能申请多少货物,但并不意味着对方会一次性送来。
- 技术定义: 一个 读请求 TLP 所能请求的最大数据量。
- 作用: 当 RC/CPU 需要从设备读取数据时,会发出“读请求”TLP。MRRS 限制了此请求包中“长度”字段的最大值。如果 MRRS 设置过小,而需要读取的数据很大,就需要拆分成多个读请求,每个请求都需要等待对方回应,大大增加了延迟,严重制约读取性能。因此,将其设置为设备和支持的最大值(如4096B)是性能调优的关键步骤。
- 配置位置:
- 当前设置 (可读写): 位于 PCIe 扩展配置空间的
Device Control寄存器的Max_Read_Request_Size字段。此值由系统软件 (BIOS 或操作系统驱动程序) 在初始化时为每个设备独立配置,彼此可以不同。
- 当前设置 (可读写): 位于 PCIe 扩展配置空间的
- 作用于哪些 TLP: MRRS 仅作用于:
- 存储器读请求 (MRd, Memory Read Request)
- 配置读请求 (CfgRd, Configuration Read Request)
- 它不直接限制对方返回数据的方式,对方返回数据时遵守的是 MPS 和 RCB 规则。
- 查看命令 (Linux):
lspci -vvv -s <BDF> | grep -i "maxread" - # 示例输出:
- # MaxPayload 128 bytes, MaxReadReq 512 bytes
3. RCB - 接收端缓存边界 (Receive Completion Boundary)
- 生动定义: 仓库卸货平台的储物箱规格和摆放规则。它要求送来的货物必须从每个储物箱的起始位置开始整齐堆放,以便高效管理。
- 技术定义: 一个固定的硬件设计特性,规定了接收端缓冲区(通常与CPU缓存行对齐)的大小。PCIe协议要求,任何完成包 (Completion TLP) 的起始地址必须对齐到RCB的整数倍上。
- 作用: 优化接收端(通常是CPU/RC)处理数据的方式。如果数据包起始地址对齐在缓存行起始处,CPU可以最高效地写入数据。如果不对齐,一个数据包可能横跨两个缓存行,需要两次内存操作,降低效率。
- 配置位置:
- 硬件固定: 对于 Root Complex (RC),RCB 的值由 CPU 和芯片组设计决定,通常是 64 字节(与常见CPU缓存行大小一致)。这是一个硬件特性,通常对软件不可见或只读。
- 链路提示: 在 PCIe 链路的两个端口之间的
Link Control 2寄存器中,有一个Receive Completion Boundary (RCB)位,用于向上游设备建议 RCB 的值(0 表示 64B,1 表示 128B)。设备会遵循此建议来组织其发出的完成包。
- 作用于哪些 TLP: RCB 仅作用于:
- 带有数据的完成包 (CplD, Completion with Data): 这是最主要的作用对象。
- 它影响了设备在组织Completion TLP时对数据的拆分策略,即使数据量小于MPS,为了满足地址对齐要求,也可能被拆成更小的包。
- 查看命令 (Linux): 查看RCB较为困难,通常需要查阅芯片组文档。有时可通过以下命令窥见链路建议:
lspci -vvv -s <BDF> | grep -A 5 -i "lnkctl2"
三者的联系与区别
| 特性 | 全称 | 层级 | 本质 | 关注方向 | 值 |
|---|---|---|---|---|---|
| MPS | Maximum Payload Size | 事务层 | 链路两端协商的结果 | 发送数据包的大小 | 可变(128B-4096B) |
| MRRS | Maximum Read Request Size | 事务层 | 由软件为设备设置的值 | 请求数据的大小 | 可变(128B-4096B) |
| RCB | Receive Completion Boundary | 物理/链路层 | 硬件固定的设计特性 | 接收数据时的对齐 | 固定(通常64B/128B) |
相互作用与联系:
1. MRRS 与 MPS 的配合:
-
- 当CPU发出一个大的读请求(大小为MRRS)后,设备在返回数据时,会将这个大数据拆分成若干个TLP返回,每个TLP的Payload大小不能超过MPS。
- 例子: MRRS = 2048B, MPS = 512B。一个读请求会被拆成4个Completion TLP返回,每个包带512B数据。
2. MPS 与 RCB 的配合:
-
- 虽然MPS可以很大,但设备在组织Completion TLP时,其起始地址必须遵守RCB对齐规则。这有时会导致一个大的有效载荷被拆成更小的包来满足对齐要求,即使它没有超过MPS。
- 例子: 需要返回的数据从地址0x100开始(0x100是64字节对齐吗?0x100除以64=4,正好是整数倍,是对齐的)。但如果RCB=128B,而0x100除以128=2,也是对齐的。如果地址是0x110,除以128不是整数,就不满足128B的RCB对齐。设备可能需要做一些处理来满足这个对齐要求。
3. 性能调优:
-
- 理想情况: MRRS >= MPS >= RCB。并且MPS是RCB的整数倍。
- 这样能确保大的读请求不会被拆分成过多的子请求,同时返回的数据包既能充分利用链路带宽,又能保证接收端处理的高效性。
- 如果MRRS设置过低,会成为系统读性能的瓶颈。在PCIe设备(尤其是NVMe SSD)调优中,将MRRS设置为最大值(如4096)是提升性能的关键步骤之一。
三者的协同工作流程:一个完整的比喻
假设你(CPU)想从大型仓库(NVMe SSD)调取一批货物(数据)。
- MRRS (你的采购权限): 你查看公司规定,你的权限(MRRS)是一次最多申请 4096件 货物。你于是开出一张最大的“取货单”(读请求TLP),申请4096件货。
- MPS (仓库的货车容量): 仓库收到你的取货单,但他们有自己的规定:一辆货车最多只能装 1024件 货物(MPS)。于是,他们需要把你的大订单拆成4次运输,安排 4辆货车(4个CplD TLP)来送货,每辆车装1024件。
- RCB (你的卸货平台规则): 你的卸货平台(CPU缓存)有严格规定:所有货物必须从 每个64号储物格的开头(RCB = 64B)开始摆放。仓库工人在装车时(组织CplD TLP)就知道这个规矩。他们会检查每批1024件货物的起始地址,确保其符合你的对齐要求。如果某批货的地址不对齐,他们甚至可能把这批货再拆成更小的几批(例如,先送64件对齐的,再送960件),以确保每一辆货车到达时,你都能最高效地卸货。
最终:通过MRRS、MPS、RCB三者的协同,这次大规模的数据传输得以高效、有序地完成。任何一个环节配置不当,都可能成为性能瓶颈。
总结与对比表格
| 特性 | 全称 | 比喻 | 作用对象 | 配置位置 | 本质 |
|---|---|---|---|---|---|
| MPS | Maximum Payload Size | 货车容量 | 带Payload的TLP (MWr, CplD, MSI) | Device Capabilities (能力) Device Control (当前设置) | 链路协商的发送规则 |
| MRRS | Maximum Read Request Size | 取货单权限 | 读请求TLP (MRd, CfgRd) | Device Control (当前设置) | 软件设置的请求规则 |
| RCB | Receive Completion Boundary | 卸货平台规则 | 完成包TLP (CplD) | 硬件固定 / Link Control 2 (建议) | 硬件固定的接收对齐特性 |
理解这三者,尤其是它们的作用对象和配置位置,对于诊断和优化PCIe设备(如高性能SSD、GPU和网卡)的性能至关重要。
1932

被折叠的 条评论
为什么被折叠?



