美文网首页
Max Payload Size

Max Payload Size

作者: 小学究鑫鑫 | 来源:发表于2021-06-30 16:21 被阅读0次

1. 概述

1.1 什么是max payload size

我们都知道,PCIe设备是以TLP的形式发送报文的,而max payload size(简称mps)决定了pcie设备实际使用的tlp能够传输的最大字节数。mps的大小是由PCIe链路两端的设备协商决定的,PCIe设备发送TLP时,其最大payload不能超过mps的值。

mps定义在Device control register中。

Device Control register:

同样定义在该寄存器中还有一个Max read request size(简称mrrs)配置,它表示每一个读请求所能够读到的最大字节数。当PCIe设备发送memory读请求TLP时,该TLP所请求的数据的大小不能超过mrrs的值。

1.2 max payload size的作用

pice协议规定有数据的TLP包的传递规则是:按照指定DW长度单位传递数据,发送端的数据承载量不得超过“Device Control Register”中的“Max_Payload_Size”数值,接收端中,所接收到的数据量也不能超过接收端“Device Control Register”中的“Max_Payload_Size”数值。

所以mps主要的作用是:

(1) mps的大小影响pcie设备的传输效率。 对于比较大的数据量,如果mps设置比较小,那么数据只能被分割成多个TLP进行发送,势必会影响pcie链路带宽的利用率。但是mps的值也不是越大越好,一方面mps设置的越大,硬件处理数据包所需的内存和逻辑量也随之增加; 另一方面,mps的值是一个自协商的结果,当前市场上支持较大mps值的ep设备不常见,所以没有必要设置本端的mps值太大。

(2) 不合理的mps设置会导致数据通信时上报"Malformed TLP"错误。 RC设备在与EP设备对接时,对端的EP设备的MPS可能各不相同,需要RC端去适配EP端的mps, 如果EP设备接收的TLP length字段超过了它的mps配置,该设备就会认为该TLP非法。

1.3 mrrs 对mps的影响

mrrs和mps并没有直接的联系,但是有时候mrrs会对mps有影响。

举个例子:一个典型的pcie拓扑结构, 中间的红色数字mps的值。

假设发起一个memory tlp读请求操作:

根据上文的分析,这种情况下,RC和EP的通信会失败,因为他们的mps的值不相等。

但是如果设置各个节点的mrrs的值为128B,那么虽然RC设备的mps为256B,但是实际能够传输的大小却受到mrrs的影响,变成128B,这种情况下,实际上传输的TLP报文最终是128字节,可以满足各节点mps一致的条件,可以传输成功。

总结: mrrs的值不能设置的太小,一方面,如果mrrs设置太小,会影响实际TLP的mps。另一方面,如果我们设定MRRS为128B,我们读64KB数据时,就需要发送512(64KB/128B=512)次读请求,这样的话,就增加了很多额外的开销,对数据传输速率也是一种伤害,所以,为了提高特别是大Block Size data的传输效率,尽量把mrrs设的大一点,用更少的次数传递更多的数据。但是mrrs也不能设置过大,在PCIe链路中,我们不能一直发送TLP,而是需要接受端有足够的接受空间之后,才能继续发送TLP,buffer空间太大的话对于EP的设备而言是比较苛刻的,所以在实际的设计中,也会对mrrs的大小进行限制。

总结

结合Document和代码分析,最终我们可以得出mps的配置规则如下图所示:

绿色对应的是pci_bus_no_tune, 什么都没改。

橙色的对应的是pci_bus_safe, 所有的设备的mps改为最小的那个设备的mps值,即所有的设备的mps设置为256

黄色的对应的pci_bus_perf, 除了根节点以外,比较自己设备的mps和父节点的mps, 选择较小的那一个设为自己的mps, 所以除了rc的mps, 其他节点的mps都设置为256, 此时,还需要更新各个节点mrrs的大小,保证mrrs的值不大于自身的mps的值,否则会出现1.3章节介绍的问题。

蓝色的对应的是pci_bus_peer2peer, 保证DMA的通信,所有设备的mps设为128.

相关文章

网友评论

      本文标题:Max Payload Size

      本文链接:https://www.haomeiwen.com/subject/ueahfltx.html