如何在Linux利用Ethtool-H开启网卡哈希字段自定义优化非平衡流量的中断分布

大枫君_4481

大枫君_4481

2026-05-20

459人浏览

原创

ethtool -h 仅操作 rss 哈希表映射,不开启哈希字段;真正决定哈希输入的是 ethtool -n(设字段)和 ethtool -x/-k(设键与类型),需协同配置才能优化流量分散。

如何在linux利用ethtool-h开启网卡哈希字段自定义优化非平衡流量的中断分布

在 Linux 中,使用 ethtool -H(即 ethtool --show-rxfh-indir / --set-rxfh-indir)可查看或修改网卡的接收侧扩展(RSS, Receive Side Scaling)哈希表(indirection table),从而将不同流的网络包更均匀地分发到多个 CPU 队列,缓解单核软中断瓶颈。但需注意:ethtool -H 本身不“开启”哈希字段,它只操作哈希结果映射;真正决定哪些字段参与哈希的是 RSS 哈希键(RSS key)和网卡支持的哈希类型(如 toeplitz、hash function)——这些需通过 ethtool -X 和 ethtool -K 配合设置。

确认网卡是否支持 RSS 及当前配置

执行以下命令检查硬件能力与当前状态:

  • ethtool eth0 | grep -i "receive.*scaling\|rss\|rxfh" —— 查看是否启用 RSS、支持队列数、哈希函数类型
  • ethtool -x eth0 —— 显示当前 RSS 哈希键(key)和哈希类型(如 tcp4, udp4, ip4)
  • ethtool -n eth0 rxflow-hash tcp4 —— 查看 TCPv4 流量当前使用的哈希字段(如 sd 表示源+目的 IP+端口)

调整哈希字段组合以改善流量分散性

非平衡流量(如大量连接来自同一源 IP 或固定端口)常因哈希字段过窄导致所有包落入少数队列。应扩大哈希维度:

Obsidian (Linux)
Obsidian (Linux)

操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。

下载
  • 对 IPv4 TCP 流:用 ethtool -N eth0 rxflow-hash tcp4 sdfn(s=src-ip, d=dst-ip, f=src-port, n=dst-port)
  • 对 IPv4 UDP 流:用 ethtool -N eth0 rxflow-hash udp4 sdfn
  • 若网卡支持 IPv6,对应设为 tcp6/udp6 并指定 sdfn(IPv6 地址字段名相同)
  • 禁用不必要字段(如仅用 sd)会加剧倾斜;启用四元组(sdfn)是多数场景推荐起点

自定义哈希表(Indirection Table)实现负载再均衡

RSS 哈希值对队列数取模后查 indirection table,该表默认常为线性填充(如 0,1,2,3…),但若 CPU 核心负载不均,可手动重分布:

  • 先导出当前表:ethtool -x eth0 > rxfh_current.txt
  • 编辑文件,将索引位置映射到期望的 RX 队列号(如 128 项,每项填 0~7 表示 8 个队列)
  • 写入新表:ethtool -X eth0 weight 0 1 2 3 4 5 6 7(简单轮询)或更精细控制:ethtool -X eth0 equal 8(自动均分)
  • 高级场景下可按 CPU 负载热点,把更多哈希桶映射到空闲核心对应的队列(需配合 /proc/interrupts 观察)

验证与持续观察

修改后必须验证效果,避免误配导致丢包或性能下降:

  • 检查中断分布:watch -n1 'grep eth0 /proc/interrupts',观察各 CPU 的 rx-* 中断计数是否趋近均衡
  • 确认无丢包:ethtool -S eth0 | grep -i "drop\|err\|over",重点看 rx_missed_errors、rx_over_errors
  • 压测对比:用 iperf3 或真实业务流量,对比修改前后 top -H 中软中断(softirq)CPU 占用分布
  • 注意:部分网卡(如某些 Realtek 或老旧 Intel)不支持动态修改哈希字段,需加载驱动时加参数(如 ixgbe.RSS=8)或升级固件

不复杂但容易忽略:哈希字段设置(-N)和哈希表映射(-X)需协同生效;仅调表不扩字段,或仅扩字段不调表,都难以解决本质的哈希碰撞问题。

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4170

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3533

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2753

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6750

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

6382

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3693

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

3185

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3419

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习