引用linux内核文档的启动参数:
pcie_bus_perf :根据其父总线将设备 MPS 设置为最大允许的 MPS。还将 MRRS(最大读取请求大小)设置为支持的最大值(不大于设备或总线可以支持的 MPS)以获得最佳性能。
我不明白为什么 MRRS 不应该大于 MPS“以获得最佳性能”。
我的意思是,如果设备可以执行 MPS=X 和 MRRS=4.X,那么读取请求的数量可能会更少,因此与 MRRS=X 情况相比,总线不会那么繁忙,即使需要拆分请求的满足在 4.
分裂会在某个地方引起一些重大的开销吗?
顺便说一句,我知道“公平共享”的概念,也了解大 MRRS 对共享的影响,但我从来不理解公平分享同义于最棒的表演。
答案1
我希望您找到答案,但我找到了一些可以提供帮助的信息。
这内核邮件列表讨论和这个文章提到这个问题,解释是,通过设置 MRRS,您可以确保设备不会发送完成数据包大小(答案)大于发送读取请求的设备的 MPS 的读取请求。如果确保这一点,则每个节点都可以将上面节点的 MPS 作为自己的 MPS(如果低于上面节点的 MPS,则将其设为设备支持的最高 MPS)。因此 MPS 非常低的一个节点无法减慢整个总线的速度。
讨论中的这个示意图帮助我理解了这个问题:
普通的:
root (MPS=128)
|
------------------
/ \
bridge0 (MPS=128) bridge1 (MPS=128)
/ \
EP0 (MPS=128) EP1 (MPS=128)
性能:
root (MPS=256)
|
------------------
/ \
bridge0 (MPS=256) bridge1 (MPS=128)
/ \
EP0 (MPS=256) EP1 (MPS=128)
除 EP1 外,每个节点都能够具有高于 128 字节的 MPS。