首页/系统/Linux 内核与性能调优速查/多路径 ECMP 哈希策略
网络栈调优98 条

多路径 ECMP 哈希策略

ECMP 场景下哈希字段决定流量分布: L3 哈希对单一大流稳定, 短连接多时评估 L4 哈希改善均衡。

什么是多路径哈希策略

多条等价下一跳(ECMP)时,内核要按流量特征选择出口,net.ipv4.fib_multipath_hash_policy 决定用哪些字段做哈希:取 0 时按三层字段(源/目的地址等)哈希,同一条流的报文始终走同一路径,避免乱序;取 1 时把四层字段(端口、协议)也纳入计算,短连接多、端口分布广的场景下负载更均衡。选择哪一种取决于流量形态与对乱序的容忍度。

基本信息

参数路径net.ipv4.fib_multipath_hash_policy
取值 0按三层字段哈希(源/目的地址)
取值 1按四层字段哈希(含端口与协议)
取值 2按内层字段哈希(隧道场景,视内核版本支持)
观测ip route show、/proc/net/ipv4 相关统计、各路径流量分布
影响面路由选择结果,间接影响负载分布与乱序

典型使用场景

  • 多运营商出口:把单一业务大流分散到不同链路上
  • 负载分布不均:确认哈希策略是否把流量集中到少数成员
  • 短连接服务:四层哈希在大量端口变化的场景下更均衡
  • 大文件传输:三层哈希保证同一流不被拆散,减少乱序重排
  • 与上游设备哈希策略对照,避免叠加放大偏斜

查看与核对

查看与核对
sysctl net.ipv4.fib_multipath_hash_policy
ip route show | grep -i -E 'nexthop|multipath' | head
ip link show                              # 确认各出口链路状态
cat /proc/net/ipv4/rt_cache 2>/dev/null | head   # 部分内核有此缓存视图
tc -s qdisc show dev eth0 | head          # 观测出口队列与丢包
# 变更示例(先记录原值并评估影响):sysctl -w net.ipv4.fib_multipath_hash_policy=1

两种策略对比

策略哈希字段适用与代价
0(三层)源/目的地址等单流稳定、不乱序;短连接多时分布偏斜
1(四层)含端口与协议分布更均匀;同一服务不同连接可能走不同路径
2(内层)隧道内层字段视版本支持,隧道场景使用
不改(默认)按发行版默认跨版本迁移时要重新核对
哈希策略只影响本机出方向的选择,端到端是否均衡还取决于上游设备与运营商侧的哈希算法,评估要放到同一条链路的两端一起看。
改动后现有 ECMP 组内的流分布会重新计算,切换瞬间可能造成已有连接的路径变化;变更应放在可控窗口并观察乱序与重传指标。

易错点

  • 改动后未评估对现有 ECMP 组流分布的影响,可能把均衡问题从一个成员换到另一个成员
  • 把哈希策略与链路带宽差异混为一谈:带宽不对等时再均衡的哈希也解决不了容量缺口
  • 只在本机调整而忽略上游设备策略,出现两侧算法叠加导致的事实上偏斜
  • 切换瞬间不观察乱序与重传指标,把路径切换引起的抖动误判为链路故障

数据来源与参考

  • Linux Documentation/networking/ip-sysctl.txt
  • man ip-route
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌