由于我还没有资格对现有的类似问题发表评论,因此将其作为新主题提出:
如何更改 Linux 中网络接口的接收队列长度?
如何增加 netdev 类型 erspan 上的 RX 队列大小,以防止出现 RX 溢出错误?我了解此 netdev 类型在类型上与 gretap 类似(除了 GRE 封装外,它还处理 ERSPAN 封装):
[root@sniffer2 centos]# ip link add dev erspan1 mtu 9100 type erspan seq key 1 erspan_ver 1
[root@sniffer2 centos]# ip link set erspan1 up
[root@sniffer2 centos]# ifconfig erspan1
erspan1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9100
inet6 fe80::14f6:cbff:fecb:46db prefixlen 64 scopeid 0x20<link>
ether 16:f6:cb:cb:46:db txqueuelen 1000 (Ethernet)
RX packets 2235281 bytes 311850140 (297.4 MiB)
RX errors 4042724 dropped 2323 overruns 4042724 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 5 dropped 0 overruns 0 carrier 0 collisions 0
[root@sniffer2 centos]# cat /proc/sys/net/core/netdev_max_backlog
1000
[root@sniffer2 centos]# cat /proc/sys/net/core/rmem_default
212992
[root@sniffer2 centos]# ethtool -g erspan1
Ring parameters for erspan1:
Cannot get device ring settings: Operation not supported
非常感谢...
答案1
ERSPAN 接口不是硬件接口,它没有真正的 RX 队列。显然,您无法更改它的大小。而且您的错误性质还在于其他方面。
您正在使用ifconfig
,它已弃用,并且与最新内核不完全兼容。检查命令输出中的统计信息ip -s -s -d link show dev erspan1
,您将看到您拥有的内容fifo 错误, 不是超支。
如果你对 C 编程语言有一定的了解,你可以查看ip_tunnel_rcv
功能并找出各种错误类型和条件之间的对应关系,在这些错误不断增加的情况下。
fifo 错误是由以下原因引起的:输入序列号不匹配。我自己没有检查过,但在这man ip-tunnel
注意到,seqno 不起作用。因此,尝试使用命令禁用它ip link set dev erspan1 type erspan noiseq
。
答案2
是的。当 ERSPAN 隧道收到镜像数据包时,它会检查镜像数据包是否按顺序排列(基于 erspan 标头中的序列号)。如果不是,则内核会将其丢弃。
添加“noiseq”(无输入序列号)可避免丢失。有关 erspan 的更多详细信息,请参阅 https://github.com/williamtu/lpc18-erspan/blob/master/paper.pdf