必须启用rss并精确匹配队列数、cpu绑定与哈希规则才能实现多核并行处理网络流量;需确认硬件驱动支持、bios设置正确,配置队列数等于物理核心数、合理numa绑定,并优化哈希密钥与四元组规则,最后通过iperf3和perfmon验证负载均衡效果。
直接启用 rss 并配准,才能让多核 cpu 真正并行处理入站网络流量。它不是开个开关就完事,关键在于队列数、cpu 绑定、哈希规则三者匹配。
先确认硬件与驱动支持
RSS 必须由网卡硬件和对应驱动共同支撑。Windows 自带驱动常不开放高级功能:
- 以管理员身份运行 PowerShell,执行:
Get-NetAdapter | Where-Object {$_.Status -eq 'Up'} | Get-NetAdapterRss
若返回空或提示“RSS not supported”,说明未就绪。 - 进入设备管理器 → 网络适配器 → 右键网卡 → 属性 → “高级”选项卡,查找 RSS、Receive Side Scaling 或 Indirection Table 等条目。若不可见,需卸载当前驱动,安装厂商官方驱动(如 Intel PROSet、Mellanox OFED 或 Broadcom NetXtreme 驱动包)。
- 同时检查 BIOS:确保 VT-d/AMD-Vi、SR-IOV 已开启,PCIe ASPM 设为 Disabled,电源策略设为 Performance。
启用并设置 RSS 队列与 CPU 绑定
队列数应等于物理核心数,而非逻辑处理器总数(超线程对 RSS 无增益):
- 单路 16 核 CPU(如 Xeon Silver 4314),建议设 16 个队列;双路服务器需按 NUMA 节点分组绑定(如 Node 0 的 CPU 0–15 绑定队列 0–7,Node 1 的 CPU 16–31 绑定队列 8–15)。
- 执行命令(将
"Ethernet"替换为实际网卡名):Enable-NetAdapterRss -Name "Ethernet"Set-NetAdapterRss -Name "Ethernet" -BaseProcessorNumber 0 -MaxProcessors 16 -NumberOfReceiveQueues 16 - 推荐预留 CPU 0 和 1 给系统中断与调度,RSS 使用后续核心(如 CPU 2–17),避免干扰。
优化哈希行为与间接表
默认哈希易导致小流倾斜,尤其在 API 网关、gRPC 等场景:
- 查看当前间接表分布:
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 小包为主,强制启用四元组哈希:
Set-NetAdapterRss -Name "Ethernet" -HashIPv4TcpEnabled $true -HashIPv4Enabled $false -HashIPv6TcpEnabled $true - 禁用 VMQ(虚拟机队列),避免与 RSS 冲突:
Disable-NetAdapterVmq -Name "Ethernet"
验证效果是否真正生效
配置后必须实测,不能只看开关状态:
- 使用 iperf3 多流压测(如
-P 16),对比单流与多流吞吐差异。 - 在 PerfMon 中添加计数器:
-
\Processor(*)\% Processor Time→ 查看各核心负载是否分散 -
\Network Interface(*)\Bytes Total/sec→ 确认总接收速率接近链路理论上限
-
- 若某核心仍长期 >85%,而其他核心闲置,说明间接表未生效或哈希规则不匹配,需回查绑定与密钥设置。
不复杂但容易忽略。










