我最近注意到网络有时会突然断联数秒, 而Intel 2.5Gbps网卡断流臭名远扬, 故怀疑到此.
网卡: i226-v rev04
系统: PVE
内核: Linux 6.8
解决方案#
更新相关组件#
通过更新相关组件以一定程度上缓解问题
1
|
sudo apt update && sudo apt full-upgrade -y && sudo apt install intel-microcode
|
这样会更新可更新的组件并安装微码, 执行上述操作后需要重启以使更新生效
关闭部分功能#
- 关闭功能前, 我们需要确认网卡名
预期返回以下结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
root@pve:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 60:be:b4:0d:43:ba brd ff:ff:ff:ff:ff:ff
3: enp2s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 60:be:b4:0d:43:bb brd ff:ff:ff:ff:ff:ff
4: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1480 qdisc mq master vmbr1 state UP group default qlen 1000
link/ether 60:be:b4:0d:43:bc brd ff:ff:ff:ff:ff:ff
altname enp3s0
5: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master vmbr0 state UP group default qlen 1000
link/ether 60:be:b4:0d:43:bd brd ff:ff:ff:ff:ff:ff
6: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 60:be:b4:0d:43:bd brd ff:ff:ff:ff:ff:ff
inet 10.10.20.100/8 scope global vmbr0
valid_lft forever preferred_lft forever
inet6 fe80::62be:b4ff:fe0d:43bd/64 scope link
valid_lft forever preferred_lft forever
7: vmbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1480 qdisc noqueue state UP group default qlen 1000
link/ether 60:be:b4:0d:43:bc brd ff:ff:ff:ff:ff:ff
inet6 fe80::62be:b4ff:fe0d:43bc/64 scope link
valid_lft forever preferred_lft forever
8: vmbr1.100@vmbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1480 qdisc noqueue master vmbr2 state UP group default qlen 1000
link/ether 60:be:b4:0d:43:bc brd ff:ff:ff:ff:ff:ff
9: vmbr2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 60:be:b4:0d:43:bc brd ff:ff:ff:ff:ff:ff
inet6 fe80::62be:b4ff:fe0d:43bc/64 scope link
valid_lft forever preferred_lft forever
|
其中的enp
eno
eth
开头的即为物理网卡设备对于的网卡名
- 操作这些功能, 需要使用
ethtool
1
|
sudo apt update && sudo apt install ethtool
|
关闭 EEE#
Energy Efficient Ethernet (EEE),由 IEEE 802.3az 标准定义 ,是一项旨在降低以太网设备在低数据活动期间功耗的技术 。传统的以太网设备即使在没有数据传输时也会保持链路活跃,持续消耗电力
EEE 通过允许物理层设备 (PHY) 在链路空闲时进入 低功耗空闲 (Low Power Idle, LPI) 状态来实现节能 。在 LPI 状态下,网卡的部分电路会被关闭,从而显著降低功耗。当需要传输数据时,网卡会迅速从 LPI 状态唤醒并恢复正常工作 。
EEE 的主要优点在于节能,尤其是在数据流量不稳定的环境中。这有助于降低设备的整体功耗,减少热量产生,并可能延长设备的寿命 。
然而,EEE 的实现需要网卡和与之相连的网络设备 (如交换机) 都支持并成功协商。协商过程和 LPI 状态的进出可能会引入一定的延迟 。
i225和i226断流和EEE存在关联, 但并不是所有断流都是EEE导致, 而是网卡的设计缺陷。i225和i226断流的一部分原因是无法从EEE的LPI状态中被快速唤醒而导致的断流.
- 检查EEE状态
1
|
ethtool --show-eee <网卡名>
|
若为以下输出, 则代表EEE已关闭
1
2
3
4
5
6
|
EEE settings for enp1s0:
EEE status: disabled
Tx LPI: disabled
Supported EEE link modes: Not reported
Advertised EEE link modes: Not reported
Link partner advertised EEE link modes: Not reported
|
- 关闭EEE
1
|
sudo ethtool --set-eee <网卡名> eee off
|
关闭TSO和LSO#
当 TSO/LSO 启用时,操作系统可以将一个非常大的数据块(可能远大于 MTU,最高可达 64 KB)直接传递给网卡驱动程序 。网卡硬件接收到这个大块数据后,会负责将其分割成符合 MTU 大小的 TCP 报文段,并为每个报文段添加正确的 TCP、IP 等协议头,然后发送出去
有部分案例表明是此功能造成了部分短暂断流
- 检查相关状态
- 关闭
1
|
sudo ethtool -K enp1s0 tso off lso off
|
如上操作后即可缓解断流, 若还有断流出现, 可能是更严重的硬件缺陷问题