XXV710网卡Target Link Speed探秘

发现

用lspci指令查看PCIe设备,特别是网卡设备经常会查看LnkCap及LnkSta字段,以确保网卡运行在期望的PCIe总线类型/带宽上,从而保证网卡的性能。

最近拿到一块XXV710-DA2,插上之后简单看了一下状态。LnkCap和LnkSta均显示为Speed 8GT/s,Width x8,没太大问题。这时候无意中瞥见LnkCtl2中Target Link Speed显示为2.5GT/s,引发了兴趣。

1
2
3
4
LnkSta:Speed 8GT/s, Width x8, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Range ABCD, TimeoutDis+, LTR-, OBFF Not Supported
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR-, OBFF Disabled
LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-Transmit Margin: Normal Operating Range, EnterModifiedCompliance-ComplianceSOS-Compliance De-emphasis: -6dB

关于Target Link Speed是什么,查找到了Intel Skylake Processor External Design Specification(EDS)中的定义:

For Downstream Ports, this field sets an upper limit on Link operational speed by restricting the values advertised by the Upstream component in its training sequences.

基本上LnkCap表示支持的速度,LnkCtl2设置你需要的速度,LnkSta显示实际Training好的速度,如果想要修改的话,都是改LnkCtl2的值。

现在的问题就是LnkSta和LnkCtl2矛盾。那么我们现在这块网卡的速度到底是多少?只能实际测试一下。

测试

起个pktgen打个性能,是能直接到线速的,也就是说Target Link Speed没有实际起到限制速度的作用。

又查询了一些资料,从这里看到一个帖子:https://communities.intel.com/thread/106568

最终Intel的官方回复是,这个寄存器的值确实和实际速度没有关系。

规范也是你们写的,帖子也是你们回的,现在正话反话都让你说了,搞什么鬼。

最后查到了该寄存器的位置(D0h),暴力修改一下:

setpci -s 0000:18:00.0 d0.B=3

然后就乖乖地显示为8GT/s了,真是个毫无脾气的寄存器,你让别的遵守规范的设备如何自处。

1
2
3
4
LnkSta:Speed 8GT/s, Width x8, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Range ABCD, TimeoutDis+, LTR-, OBFF Not Supported
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR-, OBFF Disabled
LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-Transmit Margin: Normal Operating Range, EnterModifiedCompliance-ComplianceSOS-Compliance De-emphasis: -6dB
© 2020 DecodeZ All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero