大家好,我使用的硬件平台是:imx6q。Linux操作系统版本是Linux 3.14.52.千兆网卡芯片信号是ksz9031.
在我的开发过程中,发现在千兆网的网速下,接收数据时,存在着严重的丢包。
丢包信息如下:
root@imx6qsabresd:/# ifconfig -a
eth0 Link encap:Ethernet HWaddr FA:B8:00:CF:64:53
inet addr:10.4.5.20 Bcast:10.4.5.255 Mask:255.255.255.0
inet6 addr: fe80::f8b8:ff:fecf:6453/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:252545 errors:19771 dropped:3 overruns:19771 frame:19771
TX packets:113498 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:368780256 (351.6 MiB) TX bytes:8179711 (7.7 MiB)
我们在接收300M收据时,就丢失了19000个包左右。我发现官网的IMX6Q-sabresd开发板,也存在着同样的丢包现象。请问这个问题有解决的办法吗?
我看了一下官网的信息,官网提到了这样一个连接:https://boundarydevices.com/i-mx6-ethernet/
我查看上面的链接后,我发现在我的Linux版本里面。已经存在了pause frame机制。信息如下:
root@imx6qsabresd:/# ethtool eth0
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: Symmetric
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: Symmetric
Advertised auto-negotiation: Yes
Link partner advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Link partner advertised pause frame use: No
Link partner advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: MII
PHYAD: 1
Transceiver: external
Auto-negotiation: on
Supports Wake-on: g
Wake-on: d
Link detected: yes
针对丢包的这个问题,请问有解决的办法吗?
你好,是这样,我们开发板用的是AR8031,开发板测试的话,最大支持400M,所以百兆网不会出现丢包的情况。测试的话最大支持400M,所以千兆网的话,会出现丢包。有客户试过使用pcie的话是没有问题的。千兆网设计,对PCB layout 要求很高,这里建议你查一下PCB layout.