如何增加 netdev 类型 erspan 上的 RX 队列大小

如何增加 netdev 类型 erspan 上的 RX 队列大小

由于我还没有资格对现有的类似问题发表评论,因此将其作为新主题提出:
如何更改 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

相关内容