启用RSS需确保网卡与系统支持,合理设置队列数、CPU绑定及哈希规则:先验证驱动与硬件支持,再按物理核数配置队列并绑定对应逻辑处理器,优化间接表与哈希密钥,禁用VMQ,最后通过iperf3和PerfMon验证负载均衡。
直接启用并调好 rss,能让多核 cpu 真正“一起干活”,而不是让一个核扛下所有入站包处理。关键不是开或不开,而是队列数量、cpu 绑定、哈希规则三者对得准。
确认网卡与系统支持 RSS
先验证硬件和驱动是否就绪:
- 打开 PowerShell(管理员权限),运行:
Get-NetAdapter | Where-Object {$_.Status -eq 'Up'} | Get-NetAdapterRss
若返回空或提示“RSS not supported”,说明驱动未启用 RSS 或网卡不支持(常见于 Windows Update 自带驱动) - 去设备管理器 → 网络适配器 → 右键网卡 → “属性” → “高级”选项卡,查找RSS、Receive Side Scaling、Indirection Table等条目;若不可见,需卸载当前驱动,安装厂商官方驱动(如 Intel PROSet 或 Mellanox OFED)
- 确保 BIOS 中已开启 SR-IOV、VT-d/AMD-Vi、PCIe ASPM 控制设为 Disabled,电源策略为 Performance
设置 RSS 队列数量与 CPU 映射
队列数 ≠ 逻辑核数,要兼顾 NUMA 和超线程特性:
在 Windows 上执行终端命令,或对比 Windows 与 Linux 的 Shell 语法时使用。建议先检测当前 Shell 是 PowerShell 还是 cmd.exe,再给出相应命令……
- 单路 Xeon Silver 4314(16 核 / 32 线程)建议设 16 个 RSS 队列(跳过超线程,只用物理核)
- 运行命令分配队列到前 16 个逻辑处理器(假设编号 0–15):
Set-NetAdapterRss -Name "Ethernet" -BaseProcessorNumber 0 -MaxProcessors 16 -NumberOfReceiveQueues 16 - 若为双路服务器且启用 NUMA,需按节点分组设置(例如 Node 0 的 CPU 0–15 绑定队列 0–7,Node 1 的 CPU 16–31 绑定队列 8–15),避免跨 NUMA 访问内存
检查并优化间接表与哈希密钥
默认间接表常导致流量倾斜,尤其在小流、端口复用场景下:
- 导出当前间接表:
netsh int ipv4 show rss "Ethernet"
观察各队列接收字节数是否均衡(可用 PerfMon 添加 Network Interface\Bytes Received/sec 按实例筛选) - 重置哈希密钥(提升四元组散列均匀性):
Set-NetAdapterRss -Name "Ethernet" -HashSecretKey ([byte[]](1..40 | ForEach-Object { Get-Random -Min 0 -Max 255 })) - 如业务以 IPv4 TCP 小包为主(如 API 网关),可强制使用四元组哈希:
Set-NetAdapterRss -Name "Ethernet" -HashIPv4TcpEnabled $true -HashIPv4Enabled $false -HashIPv6TcpEnabled $true
验证与持续监控
配置不是一劳永逸,压测中看真实分布:
- 用 iperf3 多流测试(如 -P 32),同时打开任务管理器 → “性能” → “CPU” → 右键图表 → “将图形更改为” → “逻辑处理器”,观察各核负载是否趋近
- 在 PerfMon 中添加计数器:
• Network Interface\Bytes Total/sec(总吞吐)
• Processor(_Total)\% Processor Time 与 Processor(0)\% Processor Time 对比
• Network Interface\IPSec Extended Operations/sec(若启用 IPsec,可能干扰 RSS) - 若仍出现某核持续 >85%,检查是否启用了 VMQ(虚拟机队列)——物理机上应禁用:
Set-NetAdapterVmq -Name "Ethernet" -Enabled $false

















