云计算百科
云计算领域专业知识百科平台

25G 双口网卡 bond4(LACP)实测跑满 47.1Gbps

环境:超聚变 V7/V8 + Intel E810 25G 双口 + 华为交换机 + ubuntu 22.04
工具:iperf 2.2.1
结果:-P 8 多流实测 47.1 Gbps,达到 2×25G 理论满速


一、背景

之前测 bond1(active-backup)主备切换,顺带把 VLAN 子接口也跑了一遍。这次换 bond4(802.3ad / LACP),目标是验证双口能不能真正叠加带宽。

bond1 的结论很简单:主备模式,带宽不叠加,交换机侧配独立端口就行。但 bond4 完全是另一套逻辑——两端必须协商,交换机必须配 LACP,配错一个环节就聚合不起来。

这篇记录整个过程,重点写踩过的坑,尤其是那个让 VLAN 完全不通的"静态聚合 vs active-backup"冲突。


二、环境与拓扑

服务器 A1 服务器 A2
bond4 192.168.1.22/24 bond4 192.168.1.11/24
eno80 ──┐ ens3f0 ──┐
eno81 ──┤ ens3f1 ──┤
└── 华为交换机 Eth-Trunk ──┘
25GE1/0/5、6 ← A1
25GE1/0/7、8 ← A2

项目A1A2
测试口 eno80、eno81 ens3f0、ens3f1
bond4 IP 192.168.1.22/24 192.168.1.11/24
交换机口 25GE1/0/5、/6 25GE1/0/7、/8
聚合口 Eth-Trunk4 Eth-Trunk5

三、先搞清楚 bond4 和 bond1 的区别

这是后面所有坑的根源,先列清楚:

bond1(active-backup)bond4(802.3ad / LACP)
链路使用 只有 active 口收发 所有成员口同时收发
带宽 单口,不叠加 多口叠加
交换机侧 独立端口,不配聚合 必须配 Eth-Trunk + LACP
协商 无 双向 LACPDU 协商

一句话:bond1 是"冗余",交换机别配聚合;bond4 是"叠加",交换机必须配 LACP。两端语义必须匹配。


四、交换机配置

4.1 创建 Eth-Trunk(LACP)

system-view

interface Eth-Trunk 4
mode lacp-static
trunkport 25GE1/0/5
trunkport 25GE1/0/6
port link-type access
port default vlan 1
quit

interface Eth-Trunk 5
mode lacp-static
trunkport 25GE1/0/7
trunkport 25GE1/0/8
port link-type access
port default vlan 1
quit

commit
quit
save

无 VLAN 子接口场景,Eth-Trunk 配 access + VLAN 1,收发 Untagged 帧,和服务器侧 bond4 直配 IP 匹配。

4.2 负载分担模式(这个后面会踩坑)

先看默认值:

display eth-trunk 4
# Hash Arithmetic: profile default

profile default 是系统默认哈希模板,对 IP 多流不一定友好。建议改成:

interface Eth-Trunk 4
load-balance src-dst-ip
quit
interface Eth-Trunk 5
load-balance src-dst-ip
quit
commit
save

display eth-trunk 4
# Hash Arithmetic: src-dst-ip

load-balance 是接口级命令,每个 Eth-Trunk 都要单独配,多次执行以最后一次为准。


五、服务器配置(nmcli)

A1

nmcli connection add type bond \\
con-name bond4 ifname bond4 \\
bond.options "mode=802.3ad,miimon=100,lacp_rate=fast,xmit_hash_policy=layer3+4" \\
ipv4.method manual ipv4.addresses 192.168.1.22/24

nmcli connection add type ethernet con-name bond4-slave-eno80 ifname eno80 master bond4
nmcli connection add type ethernet con-name bond4-slave-eno81 ifname eno81 master bond4

nmcli connection up bond4-slave-eno80
nmcli connection up bond4-slave-eno81
nmcli connection up bond4

A2

nmcli connection add type bond \\
con-name bond4 ifname bond4 \\
bond.options "mode=802.3ad,miimon=100,lacp_rate=fast,xmit_hash_policy=layer3+4" \\
ipv4.method manual ipv4.addresses 192.168.1.11/24

nmcli connection add type ethernet con-name bond4-slave-ens3f0 ifname ens3f0 master bond4
nmcli connection add type ethernet con-name bond4-slave-ens3f1 ifname ens3f1 master bond4

nmcli connection up bond4-slave-ens3f0
nmcli connection up bond4-slave-ens3f1
nmcli connection up bond4

关键参数:

参数值说明
mode 802.3ad LACP 动态聚合
lacp_rate fast 每 1 秒发 LACPDU
xmit_hash_policy layer3+4 按 IP + 端口哈希

六、验证 LACP 到底协商成功没有

cat /proc/net/bonding/bond4

重点看这几个字段:

Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer3+4
LACP rate: fast

Slave Interface: eno80
MII Status: up
Aggregator ID: 1 ← 两个 slave 必须相同
Partner Sys Id: f4:79:60:0b:dd:a1 ← 必须有值

Slave Interface: eno81
MII Status: up
Aggregator ID: 1 ← 与上面相同
Partner Sys Id: f4:79:60:0b:dd:a1

判据:

  • Aggregator ID 两个 slave 一致

  • Partner Sys Id 有值(交换机 MAC),不是全 0

交换机侧对照:

display eth-trunk 4
# 成员口必须是 Selected,不是 Unselect
# Partner SystemID 必须有值


七、测试结果

A1 起服务端,A2 打流:

# A1
iperf -s -p 5001 -w 2M -B 192.168.1.22

# A2
iperf -c 192.168.1.22 -w 2M -P 8 -t 300 -i 5

稳定后连续多个采样点:

[ 4] 225.00-230.00 sec 6.85 GBytes 11.8 Gbits/sec
[ 2] 225.00-230.00 sec 6.85 GBytes 11.8 Gbits/sec
[ 6] 225.00-230.00 sec 3.43 GBytes 5.88 Gbits/sec
[ 3] 225.00-230.00 sec 2.28 GBytes 3.92 Gbits/sec
[ 8] 225.00-230.00 sec 2.28 GBytes 3.92 Gbits/sec
[ 1] 225.00-230.00 sec 2.28 GBytes 3.92 Gbits/sec
[ 5] 225.00-230.00 sec 1.71 GBytes 2.94 Gbits/sec
[ 7] 225.00-230.00 sec 1.71 GBytes 2.94 Gbits/sec
[SUM] 225.00-230.00 sec 27.4 GBytes 47.1 Gbits/sec

47.1 Gbps,25 秒零抖动。

把流分个组就明白了:

分组流合计对应链路
组 1 [4]+[2] 11.8×2 = 23.6G 物理口 A
组 2 其余 6 条 5.88 + 3.92×3 + 2.94×2 = 23.5G 物理口 B
总计 8 条 47.1G 双口满载

23.5G 正好是 25G 单口的实际线速(扣掉帧开销)。哈希把 8 条流精确分成两组,两个口各自跑满,这就是 2×25G 的理论满速。


八、踩过的坑(重点)

坑 1:Eth-Trunk 静态聚合 vs bond1 active-backup,VLAN 完全不通

这是之前测 bond1 时踩的,但很有代表性。

现象:交换机侧把两个口配成 Eth-Trunk(静态 manual 聚合),Linux 侧是 bond1 active-backup,VLAN 10 完全不通,arping 0 响应。

根因:

  • 静态聚合按哈希把流量分发到所有成员链路;

  • active-backup 只有 active 口收发,standby 口不响应;

  • ARP 广播被哈希到 standby 口后直接丢弃,对端收不到应答。

解决:bond1 场景下交换机不配 Eth-Trunk,两个口作为独立 Trunk 口加入同一 VLAN。

结论:冗余用独立端口,叠加用 LACP,混用必出问题。

坑 2:多流吞吐在 23.6G / 38G / 47.1G 之间跳

同样的 -P 8,三次结果完全不同:

结果现象原因
23.6G 8 条流均匀,每条 2.3~3.6G 哈希全落到同一个口,单口跑满
38G [8] 独占 15.3G 哈希分成 1:2 两组,不均
47.1G 两组各 23.5G 哈希精确分 2 组,双口满载

根因:LACP 哈希是概率性的。iperf2 的 8 条流源 IP、目的 IP 都一样,只有源端口不同。如果哈希算法对端口不敏感,多条流就可能落到同一个口。

怎么判断是单口还是双口——别看 [SUM],看物理口计数器:

watch -n 1 'cat /sys/class/net/eno80/statistics/tx_bytes; \\
cat /sys/class/net/eno81/statistics/tx_bytes'

  • 两个都在涨 → 双口承载

  • 只有一个涨 → 哈希没分散

优化手段:

  • 交换机 load-balance src-dst-ip(默认 profile default 换掉)

  • 增加流数:-P 16、-P 32

  • 跑多次取最优值,报告里注明哈希概率性

  • 坑 3:ping 通但 iperf 报 No route to host

    现象:ping 192.168.1.22 通,iperf -c 192.168.1.22 报 No route to host。

    根因:不是链路问题,是 A1 防火墙对 5001 做了 REJECT,返回 ICMP host-unreachable。如果只是没启动 iperf 服务端,报的会是 Connection refused(RST),不是 No route to host。

    解决:

    firewall-cmd –add-port=5001/tcp –permanent
    firewall-cmd –reload

    顺便确认服务端在监听:

    ss -tlnp | grep :5001

    坑 4:TCP window WARNING

    TCP window size: 4.00 MByte (WARNING: requested 2.00 MByte)

    内核 socket 缓冲区上限不够,请求的 2MB 窗口被压缩。两端都要调:

    sysctl -w net.core.wmem_max=4194304
    sysctl -w net.core.rmem_max=4194304
    sysctl -w net.ipv4.tcp_wmem="4096 87380 4194304"
    sysctl -w net.ipv4.tcp_rmem="4096 87380 4194304"

    调完重启 iperf 服务端,WARNING 消失。

    坑 5:Eth-Trunk 成员口一直是 Unselect

    display eth-trunk 2
    # 25GE1/0/5 Unselect
    # Partner SystemID 0000-0000-0000

    根因:服务器侧还是 bond1,没跑 LACP,交换机收不到 LACPDU,Partner SystemID 全 0。

    解决:服务器侧改成 mode=802.3ad,交换机侧 mode lacp-static,协商成功后成员口自动变 Selected。


    九、完整配置速查

    位置配置
    交换机 Eth-Trunk mode lacp-static + trunkport + access VLAN 1
    交换机负载分担 load-balance src-dst-ip
    Linux bond4 mode=802.3ad,miimon=100,lacp_rate=fast,xmit_hash_policy=layer3+4
    LACP 验证 Aggregator ID 一致 + Partner Sys Id 有值
    交换机验证 成员口 Selected + Partner SystemID 有值
    双口验证 两个物理口计数器同时增长
    测试命令 iperf -c <IP> -w 2M -P 8 -t 300 -i 5

    十、总结

  • bond4 和 bond1 是两套完全不同的语义:bond1 交换机不配聚合,bond4 交换机必须配 LACP。配错一个环节就聚合不起来。

  • LACP 哈希分布是概率性的:同样的 -P 8 可能跑出 23.6G(单口)、38G(偏斜)、47.1G(满速)。判断是否叠加必须看物理口计数器,不能只看 [SUM]。

  • load-balance src-dst-ip 值得配:默认 profile default 对 IP 多流不友好,改成 src-dst-ip 和 Linux 的 layer3+4 配合,分布更均匀。

  • 47.1 Gbps = 2 × 23.5G 理论满速:这个结果证明双口 LACP 聚合完全生效,E810 双口在 bond4 下能跑满线速。

  • 排障顺序:先看 LACP 协商(Aggregator ID + Partner Sys Id)→ 再看双口计数器 → 最后看防火墙和内核参数。

  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » 25G 双口网卡 bond4(LACP)实测跑满 47.1Gbps
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!