逐流哈希与乱序
聚合口的哈希有两种粒度:逐流(同一会话固定走同一条成员)与逐包(每个包各自散列)。逐流保证会话内不乱序,代价是单条会话受单成员带宽限制;逐包分布更均匀,但同一会话的报文从不同路径抵达会产生乱序,接收端要重排。主流实现默认逐流,就是为了避开乱序带来的性能损失。
基本信息
| 逐流(默认) | 按会话散列,会话内不乱序 |
|---|---|
| 逐包 | 分布更均匀,可能乱序,需要接收端重排 |
| 关键约束 | 单流速率上限 = 单成员带宽 |
| 验收方法 | 统计各成员速率差异,或抽样核对会话归属 |
| 调优方向 | 分布明显偏斜时评估更换哈希因子 |
典型使用场景
- 业务卡顿排查:判断是否为哈希极化导致的单成员拥塞
- 备份与迁移:大流无法靠聚合提速,需要拆流或提速率
- 成员增删影响评估:明确会话重分布会带来 TCP 短暂重传
- 验收测试:统计各成员流量比例是否符合预期
- 方案设计:判断逐包模式是否适合当前业务类型
验收与验证
验收与验证
display eth-trunk 1 verbose # 华为:成员与流量分布
display interface Eth-Trunk 1 # 聚合口整体速率
display interface GigabitEthernet0/0/1 # 单成员速率(逐个对比)
# Cisco
show etherchannel summary
show interfaces | include rate
# 验收口径:各成员速率差异在可接受范围内,无长期偏斜两种方式对比
| 方式 | 分布特点 | 顺序特性 |
|---|---|---|
| 逐流(默认) | 按会话散列,会话数少时可能偏斜 | 会话内不乱序 |
| 逐包 | 分布更均匀 | 可能乱序,需要接收端重排 |
| 单会话大流 | 始终落在一条成员上 | 受单成员带宽限制 |
单流受单成员带宽限制是逐流方案的固有特性,不是故障:一台服务器与另一台服务器之间只有一个大会话时,聚合口的带宽用不上,解决方案是拆成多会话或提高单口速率。
成员增删会触发哈希重算:部分会话换到别的成员,TCP 表现为短暂重传。变更前把这一现象标注为预期行为,避免业务侧误判为故障。