我有几个 Ubuntu 服务器,每个服务器都作为防火墙/路由器运行。我注意到其中一个的 RX-drop 数量比另一个高得多。水滴似乎在跳跃。最后的 netstat 显示下降了约 2.6%:
$ sudo netstat -ni
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 1715434 0 45323 0 672858 0 0 0 BMORU
eth1 1500 7146 0 0 0 18148 0 0 0 BMRU
lo 65536 200950 0 0 0 200950 0 0 0 LRU
wlan0 1500 679702 0 0 0 1315730 0 0 0 BMRU
这比另一个显示的 ~ 0.01% 高得多。我怎样才能找出是什么原因造成的?
到目前为止,我已经尝试增加接口环接收缓冲区大小:
$ sudo ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 256
RX Mini: 0
RX Jumbo: 0
TX: 256
$ sudo ethtool -G eth0 rx 4096 tx 4096
我还认为我可以使用 ntuple 过滤器在物理层丢弃一些数据包,但我无法在此 Intel i210 NIC 上使用 ethtool 修改任何这些规则。
仅供参考,这里有来自 ethtool 的更多信息。 (我也无法更改任何这些参数)
$ sudo ethtool -c eth0
Coalesce parameters for eth0:
Adaptive RX: off TX: off
stats-block-usecs: 0
sample-interval: 0
pkt-rate-low: 0
pkt-rate-high: 0
rx-usecs: 3
rx-frames: 0
rx-usecs-irq: 0
rx-frames-irq: 0
tx-usecs: 0
tx-frames: 0
tx-usecs-irq: 0
tx-frames-irq: 0
rx-usecs-low: 0
rx-frames-low: 0
tx-usecs-low: 0
tx-frames-low: 0
rx-usecs-high: 0
rx-frames-high: 0
tx-usecs-high: 0
tx-frames-high: 0
答案1
经过大量故障排除和阅读后,我意识到这只是因为我禁用了 ipv6 作为内核启动参数。我以为以太网卡上有数据包被丢弃,但这只是表明 ipv6 数据包被丢弃,因为它们在内核中不支持。
这个链接帮助我弄清楚了这一点:https://www.suse.com/support/kb/doc/?id=000017478
因此,我没有在 grub 命令行中禁用 ipv6,而是直接返回到 sysctl.conf 中禁用,例如 (/etc/sysctl.d/20-local.conf)
# disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
现在没有更多的丢弃,并且 ipv6 仍然被禁用。有点奇怪的是,一台服务器比另一台服务器差,但它们现在都可以工作。