网卡丢包问题解决

1、 查看局域网内是否有MAC冲突;

2、 UDP丢包可以先增大协议栈缓存空间:

接收端:

echo 2129999999 > /proc/sys/net/core/rmem_max  # 最大的TCP接收缓冲

echo 2129999999 > /proc/sys/net/core/rmem_default  # 默认接收TCP缓冲

发送端:

echo 2129999999 > /proc/sys/net/core/wmem_default  # 默认TCP发送缓冲

echo 2129999999 > /proc/sys/net/core/wmem_max  # 最大的TCP发送缓冲

注:发送端的wmem_default不能大于接收端的rmem_default。

3、 查看ethtool -S <网口名> | grep -E “error|drop”:

rx_crc_errors: # 计数不为0代表有CRC错误,一般是模块或者网线问题,考虑先更换光纤/网线及光模块。

rx_fifo_errors:# Ring buffer满而导致丢包,通过ethtool -g查看当前值与最大值,ethtool -G ethx rx <rx> tx <tx>修改tx、rx Ring Buffer。

rx_missed_errors:# CPU处理不过来DMA中的ring buffer缓存报文导致的丢包。

# 解决方法是:

a)# 网口中断绑定到不同的CPU;

b)# UDP流量可以开启RSS;

c)ethtool -G ethx rx <rx> # 增加队列深度,注意一般arm平台的OS页大小是64k,增加队列深度会导致内存占用高,可配合修改驱动源码中src/ kcompat.h文件解决。

d)numactl -H # 查看网卡numa node对应的内存使用情况,如内存占用过高会跨节点访问其他内存,导致处理速率慢,可通过绑核及增大物理内存解决。

4、两端开启流控:

开启命令:

ethtool -A enp217s0f0 rx on tx on

查看状态命令:

ethtool -a enp217s0f0

 

posted @ 2025-01-04 09:22  杨灏  阅读(443)  评论(0)    收藏  举报