对比寄存器解决千兆丢包问题

问题现象

客户反馈在连接局域网的场景下,相同板卡硬件(d2000+ar8035)上,嵌入式系统千兆ping丢包率很高,而ubuntu文件系统+飞腾提供的测试内核正常。

以下将工作异常的系统称为系统A。

问题复现

客户板卡上搭建测试环境,成功复现问题。

连接局域网环境下,在板卡与陪测端抓包分析:
丢了4个包:序号为2、10、13、18

在这里插入图片描述与ping结果可对应上:

在这里插入图片描述
172.30.110.35为陪测机(enx),172.30.110.37为异常板卡(eth0)。eth抓到了那4个包的request,enx没有抓到。说明板卡网口eth0可能没有发出来。

后续测试使板卡与陪测机直连,仍可复现异常现象,说明客户反馈的现象不准确。。。。。后续均以直连方式测试。

异常板卡系统A环回测试

mac环回正常

对mac做环回测试。由于,mac层是由cpu集成的gmac芯片实现的,故查看d2000软件编程手册:

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

手册里查询到,在mac配置寄存器的bit 12控制mac loopback功能。

从启动日志里输出的dts设备树文件可以确认eth0网卡对应的是GMAC0:
在这里插入图片描述

故需要向GMAC0私有寄存器的基地址加上偏移量来写入bit(12),即0x2820c000+0x0 = 0x2820c000地址的bit12。

先搭建环回测试场景,将ip配为非网线网段的ip(10.3.3.1),arp -s 10.3.3.2 本机mac 创建一条arp地址映像避免后续环回时找不到目的主机发不出ping包。

root@KylinV10Embeded 20240301-jingsu# ./mdio eth0 0x0
read phy addr: 0x0 reg: 0x0 value : 0x3100

root@KylinV10Embeded 20240301-jingsu# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 3C:6A:2C:3C:6A:2C
          inet addr:10.3.3.1  Bcast:10.255.255.255  Mask:255.0.0.0
          inet6 addr: fe80::3e6a:2cff:fe3c:6a2c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1165 errors:0 dropped:0 overruns:0 frame:0
          TX packets:493 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:256524 (250.5 KiB)  TX bytes:102132 (99.7 KiB)
          Interrupt:22 Base address:0x2000

root@KylinV10Embeded 20240301-jingsu# arp -n
? (10.3.3.2) at 3c:6a:2c:3c:6a:2c [ether] PERM on eth0
root@KylinV10Embeded 20240301-jingsu#
root@KylinV10Embeded 20240301-jingsu# devmem2 0x0002820c000 w
-/bin/sh: devmem2: not found
root@KylinV10Embeded 20240301-jingsu# ls
devmem2         mdio            phytool.tar.gz
root@KylinV10Embeded 20240301-jingsu# ./devmem2 0x0002820c000 w
/dev/mem opened.
Memory mapped at address 0xffffbe217000.
Memory mapped at address 0xffffbe216000.
Value at address 0x2820C000 (0xffffbe217000): 0x610C8C
root@KylinV10Embeded 20240301-jingsu# ./devmem2 0x0002820c000 w 0x611c8c                //上面读到了mac配置寄存器内容是0x610c8c,将第12bit置1后则是0x611c8c
/dev/mem opened.
Memory mapped at address 0xffffa5e5b000.
Memory mapped at address 0xffffa5e5a000.
Value at address 0x2820C000 (0xffffa5e5b000): 0x610C8C
Written 0x611C8C; readback 0x611C8C
root@KylinV10Embeded 20240301-jingsu# tcpdump -i eth0 &
root@KylinV10Embeded 20240301-jingsu# [ 3810.513776][  0] device eth0 entered promiscuous mode
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

root@KylinV10Embeded 20240301-jingsu# ping 10.3.3.2 -c 1
PING 10.3.3.2 (10.3.3.2): 56 data bytes
09:03:38.456902 IP 10.3.3.1 > 10.3.3.2: ICMP echo request, id 483, seq 0, length 64
09:03:38.456961 IP 10.3.3.1 > 10.3.3.2: ICMP echo request, id 483, seq 0, length 64


--- 10.3.3.2 ping statistics ---
1 packets transmitted, 0 packets received, 100% packet loss
root@KylinV10Embeded 20240301-jingsu#

root@KylinV10Embeded 20240301-jingsu#
root@KylinV10Embeded 20240301-jingsu# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 3C:6A:2C:3C:6A:2C
          inet addr:10.3.3.1  Bcast:10.255.255.255  Mask:255.0.0.0
          inet6 addr: fe80::3e6a:2cff:fe3c:6a2c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX pac
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值