1.背景
- 操作系统ubuntu server 16.04和ubuntu server 18.04;
- 8个网口,其中7个作为数据输入,1个网口作为数据输出,PHY芯片为82574,1000Mbps全双工;
2.现象
- 1台设备源出500Mbps码率,过交换机后,7个网口接收正常;
- 2台设备源出500Mbps码率,过交换机后,不同的主板可能出现:1>7个网口接收正常;1>其中几个网口接收正常,几个网口(如:eth2,eth7)会丢包,且无论如何重启丢包网口固定;
3.测试验证
- 将在异常网口(如:eth2)上的流用正常网口(如:eth0)进行接收,数据不丢包;
- 进行了帧间隙IFG测试,1台设备时帧间隙都保持到12Byte以上;
- 进行了帧间隙IFG测试,1台设备时大部分数据的帧间隙都保持到12Byte以上,少量数据帧间隙在8Byte;
- 异常网口(如:eth2,eth7)使用/proc/net/dev进行查看fifo和drop字段有溢出和丢包;
- 调试驱动程序:网卡驱动e1000e在进行驱动加载时,配置网卡模式时出问题的网卡配置MSI-X模式失败,而被自动切换到MSI模式;
- 将其他几个网口的驱动禁用,问题网卡一样无法配置MSI-X模式,而被自动切换到MSI模式,数据也会出现丢失;
- 将MSI-X模式的网卡的中断绑定到CPU1,将MSI模式的网卡绑定到CPU0,为问题网卡分配充分的CPU资源,数据也会出现丢失;
4.结论
由于没有能采集这么高PCIE信号的仪器,最终只能不了了之。但基于以上实验,做了针对该现象的个人猜测:PCIE时序问题(偏差,PHY时钟问题等),导致的无法配置MSI-X模式。但丢包的原因可能是两台设备流叠加后,帧间隙出现小于12Byte的情况(实际使用示波器采集也确实出现帧间隙为8Byte的情况),而MIS模式的网卡无法完全接收这种情况的数据。