流哈希与 RSS 分布
多队列网卡用 RSS 把收到的报文按哈希结果分到不同接收队列,哈希的输入字段可以用 ethtool 指定,例如是否把源地址、目的地址、源端口、目的端口纳入计算。字段不同,分流结果差别很大。ethtool -x 则展示间接表,说明各个队列实际分到的流量比例。
基本信息
| 查看当前配置 | ethtool -n eth0 rx-flow-hash tcp4 |
|---|---|
| 修改配置 | ethtool -N eth0 rx-flow-hash tcp4 sdfn |
| 关键字含义 | s 源地址,d 目的地址,f 源端口,n 目的端口 |
| 间接表 | ethtool -x eth0 展示各队列的分配比例 |
| 驱动依赖 | 部分网卡不支持全部关键字,修改可能被忽略 |
典型使用场景
- 少数 CPU 软中断饱和而其他核空闲,确认哈希分布是否不均
- 排查同一来源的大流量是否全部集中到一个队列
- 验证网卡是否按四元组分流,而不是只看地址
- 多队列与中断亲和联合调优时,核对分流是否符合预期
- 对比不同网卡的哈希能力,为选型与压测提供依据
查看与设置
查看与设置
ethtool -n eth0 rx-flow-hash tcp4 # 查看 tcp4 当前的哈希输入字段
ethtool -N eth0 rx-flow-hash tcp4 sdfn # 按源/目的地址与端口参与哈希
ethtool -x eth0 | head -20 # 查看间接表与各队列分配比例
ethtool -n eth0 rx-flow-hash udp4 # UDP 需要单独查看与设置关键字含义
| 关键字 | 含义 | 影响 |
|---|---|---|
| s | 源地址参与哈希 | 同一来源的流量更容易落在同一队列 |
| d | 目的地址参与哈希 | 多目标场景下分布更均匀 |
| f | 源端口参与哈希 | 客户端端口随机会带来更好的分散度 |
| n | 目的端口参与哈希 | 同一服务的连接可按端口分布到不同队列 |
哈希配置只影响之后新建的连接,已建立的流仍按原来的结果走。验证时要先新建连接,再观察各队列的包数与软中断分布是否变化。
间接表支持非等比例分配,可以把流量按权重导向不同队列;但这依赖驱动实现,并非所有网卡都暴露可调整的间接表。