2. 网卡Bonding基础:Linux Bonding模式概述(mode 0-6)

网卡Bonding(亦称网卡绑定、链路聚合)是将多块物理网卡虚拟成一块逻辑网卡的技术,在DPDK主备切换延迟测试中,Bonding模式直接决定了故障检测与切换的底层行为。Linux内核自2.4.12起原生支持Bonding驱动,共定义7种工作模式(mode 0~6)。理解每种模式的收发策略、故障切换机制和适用场景,是后续进行DPDK Bonding故障注入与延迟测量的前提。

关键概念:Bonding模式的核心差异在于“出站流量分发策略”和“入站流量接收方式”。主备切换延迟测试重点关注mode 1(主动备份)和mode 4(802.3ad动态聚合),但其他模式在特定场景下也会影响切换行为。

2.1 模式总览与对比

下表汇总了Linux Bonding七种模式的基本特性、是否需要交换机支持、以及故障切换行为。建议在阅读后续详细说明前先建立整体认知。

模式编号 模式名称 出站策略 需交换机支持 故障切换行为 典型场景
mode 0 balance-rr 轮询(Round-Robin) 否(需静态聚合) 逐包切换,切换快但可能乱序 负载均衡,吞吐优先
mode 1 active-backup 仅主端口发送 否 主备切换,切换延迟关键 DPDK主备切换测试首选
mode 2 balance-xor XOR哈希(MAC/IP) 否(需静态聚合) 按哈希重选端口 简单负载均衡
mode 3 broadcast 所有端口广播 否 冗余发送,无切换延迟 高可靠性,低带宽
mode 4 802.3ad (LACP) 动态协商+哈希 是(必须LACP) LACP协商切换 数据中心标准聚合
mode 5 balance-tlb 自适应发送负载 否 发送端切换,接收端不变 发送负载均衡
mode 6 balance-alb 自适应收发负载 否 收发独立切换 全双工负载均衡
DPDK测试提示:在DPDK环境中,Bonding PMD(Poll Mode Driver)仅支持mode 0、mode 1、mode 2、mode 4四种模式。mode 3/5/6在DPDK中未实现,若需测试这些模式,必须依赖内核Bonding驱动,并通过KNI或virtio-user间接接入DPDK应用。

2.2 各模式详细解析

2.2.1 mode 0 — balance-rr(轮询模式)

数据包按顺序依次从每个slave端口发出。例如有2块网卡,第1个包走eth0,第2个包走eth1,第3个包走eth0,以此类推。接收端无特殊策略,由交换机根据MAC地址或端口转发。

  • 优点:理论上可实现N倍线速吞吐(N为slave数量),负载最均衡。
  • 缺点:同一TCP流的数据包可能走不同路径,导致接收端乱序,TCP性能下降。
  • 故障切换:链路故障时,Bonding驱动立即将故障端口从轮询列表移除,切换延迟极低(微秒级),但乱序风险依然存在。

2.2.2 mode 1 — active-backup(主备模式)

同一时刻只有一块网卡(active slave)负责收发数据,其余网卡处于备份状态。当active slave链路故障时,Bonding驱动自动切换到下一个可用的backup slave。

  • 优点:实现简单,无需交换机特殊配置;不会出现乱序;切换逻辑清晰。
  • 缺点:总带宽受限于单块网卡,无法利用多网卡并行吞吐。
  • 故障切换:切换延迟由链路检测机制决定(MII监控或ARP监控),默认100ms轮询间隔,可调至10ms甚至更低。这是DPDK主备切换延迟测试的核心关注点。
测试陷阱:在DPDK Bonding PMD中,mode 1的切换延迟不仅取决于链路检测间隔,还受DPDK轮询线程调度、内存屏障、以及硬件链路状态寄存器读取延迟的影响。实测值往往比内核Bonding的理论值高10~50微秒。

2.2.3 mode 2 — balance-xor(XOR哈希模式)

根据源MAC、目的MAC、源IP、目的IP或端口号的XOR哈希值,选择固定的slave端口发送数据包。同一TCP流的所有包始终走同一端口,避免乱序。

  • 优点:无乱序问题,负载均衡粒度适中。
  • 缺点:哈希冲突可能导致负载不均;交换机需配置静态链路聚合(或支持EtherChannel)。
  • 故障切换:链路故障时,哈希表重新计算,受影响流切换到新端口,切换延迟取决于哈希重算时间。

2.2.4 mode 3 — broadcast(广播模式)

每个数据包在所有slave端口上同时发送。接收端会收到多份相同数据包,由上层协议去重。

  • 优点:极高的冗余可靠性,单链路故障不影响数据送达。
  • 缺点:带宽浪费严重,总吞吐受限于最慢链路。
  • 故障切换:无切换延迟概念——所有端口始终在发送,故障仅意味着少一份副本。

2.2.5 mode 4 — 802.3ad(LACP动态聚合模式)

通过LACP(Link Aggregation Control Protocol)与交换机动态协商聚合组,使用XOR哈希分发数据包。这是数据中心最常用的标准聚合模式。

  • 优点:标准化、与交换机自动协商、支持动态增减链路。
  • 缺点:交换机必须支持LACP;配置复杂度高;切换依赖LACP协商时间(通常3~5秒)。
  • 故障切换:链路故障后,LACP协议需重新协商聚合组,切换延迟通常在秒级,不适合对切换时间敏感的场景。

2.2.6 mode 5 — balance-tlb(自适应发送负载均衡)

发送流量根据各slave的实时负载动态分配,接收端仍由当前active slave处理。无需交换机特殊支持。

  • 优点:发送端自动负载均衡,适应流量变化。
  • 缺点:接收端存在单点瓶颈;驱动层实现复杂。
  • 故障切换:发送端切换由驱动动态调整,接收端切换需ARP协商。

2.2.7 mode 6 — balance-alb(自适应收发负载均衡)

在mode 5基础上增加了接收端负载均衡,通过ARP协商使不同对端将数据发送到不同slave的MAC地址。

  • 优点:收发双向负载均衡,无需交换机支持。
  • 缺点:ARP协商增加网络开销;对端设备必须响应ARP。
  • 故障切换:收发切换独立进行,逻辑复杂,切换延迟可能不一致。

2.3 Bonding模式选择与切换延迟关系

在DPDK主备切换延迟测试中,模式选择直接影响测试方法和结果解读。下图展示了三种典型模式在链路故障时的切换路径差异。

Bonding模式切换延迟对比图 三种典型Bonding模式故障切换路径对比 正常链路 故障链路 切换后链路 mode 1 active-backup eth0 (主) eth1 (备) eth0 (故障) eth1 (备) 切换 eth0 (故障) eth1 (主) mode 4 802.3ad (LACP) eth0 eth1 eth2 eth0 (故障) eth1 eth2 LACP重新协商 (3~5s) eth0 (故障) eth1 eth2 切换延迟对比说明 • mode 1:切换延迟 = 链路检测间隔 + 驱动切换时间(典型值 10ms~100ms) • mode 4:切换延迟 = LACP协商超时(短超时3s,长超时90s) • mode 0/2:切换延迟 = 哈希表更新 + 驱动重映射(微秒级,但可能丢包) • DPDK Bonding PMD中,mode 1切换延迟需额外考虑DPDK轮询延迟(约10~50μs)

2.4 内核Bonding配置示例

在Linux系统中,可通过sysfs或ifenslave工具配置Bonding。以下示例展示如何创建mode 1(active-backup)绑定,并设置MII监控间隔为50ms。

# 加载Bonding内核模块,指定模式与监控参数
modprobe bonding mode=1 miimon=50

# 创建bond0接口并绑定两块物理网卡
ip link add bond0 type bond mode 1 miimon 50
ip link set eth0 master bond0
ip link set eth1 master bond0

# 配置bond0 IP地址并启用
ip addr add 192.168.1.100/24 dev bond0
ip link set bond0 up

# 查看当前active slave
cat /sys/class/net/bond0/bonding/active_slave

# 手动触发主备切换(将eth0设为备用)
echo "eth1" > /sys/class/net/bond0/bonding/active_slave
DPDK环境差异:在DPDK中,Bonding PMD不依赖内核模块,而是通过rte_eth_bond_create() API创建。但理解内核Bonding的配置逻辑有助于对比DPDK Bonding的行为差异,尤其是在链路检测和切换触发机制上。

2.5 模式选择对DPDK测试的影响

针对本课程的核心目标——主备切换延迟测试,给出以下模式选择建议:

测试目标 推荐模式 原因
最小切换延迟测量 mode 1 (active-backup) 切换逻辑最简单,延迟可预测,便于精确测量
负载均衡下切换影响 mode 4 (802.3ad) LACP协商延迟是主要瓶颈,适合测试长超时场景
乱序与切换联合测试 mode 0 (balance-rr) 切换后可能引发乱序,适合测试应用层容忍度
DPDK PMD兼容性验证 mode 0/1/2/4 DPDK Bonding PMD仅支持这四种模式