首页/系统/Linux 内核与性能调优速查/ethtool 流哈希与 RSS 分布
网络栈调优98 条

ethtool 流哈希与 RSS 分布

多队列网卡按四元组做 RSS 哈希分流; 检查与调整流哈希输入字段, 可排查流分布不均与单队列热点。

流哈希与 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目的端口参与哈希同一服务的连接可按端口分布到不同队列
哈希配置只影响之后新建的连接,已建立的流仍按原来的结果走。验证时要先新建连接,再观察各队列的包数与软中断分布是否变化。
间接表支持非等比例分配,可以把流量按权重导向不同队列;但这依赖驱动实现,并非所有网卡都暴露可调整的间接表。

易错点

  • 修改哈希字段前未确认驱动能力,参数被静默忽略而误以为已生效
  • 把哈希分布直接当成业务负载分布,忽略同一条连接始终固定走一个队列
  • 队列数远小于 CPU 数时只调哈希,分流收益有限,问题仍在队列本身
  • 在虚拟网卡上照搬物理网卡的哈希参数,实际由后端驱动决定分流方式

数据来源与参考

  • man ethtool
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌