Windows默认不提供网卡中断亲和力图形设置,FPS游戏需手动绑定网卡IRQ至指定CPU核心以稳定网络延迟:先查中断号(设备管理器或PowerShell),禁用干扰服务,再通过注册表AffinityPolicy=2+PreferredNode或DevCon重载驱动实现绑定,最后用Coreinfo与PerfMon验证效果。

Windows系统默认不提供图形化界面设置网卡中断亲和力(IRQ affinity)的功能,而FPS类游戏对网络延迟极其敏感,软中断在多核CPU上随机调度会导致缓存失效、上下文切换抖动,直接表现为联机时ping忽高忽低、丢包率波动、匹配卡顿。必须手动将网卡硬件中断与特定CPU核心绑定,才能稳定网络处理路径。
确认网卡对应中断号
以管理员身份打开 PowerShell,执行:
Get-NetAdapter | Where-Object {$_.Status -eq 'Up'} | Select-Object Name, InterfaceDescription
记下当前启用的有线网卡名称,例如“Realtek PCIe GbE Family Controller”。
执行:
cat /proc/interrupts 无法在Windows运行——这是Linux命令,Windows下需用资源管理器硬件属性查看。右键“此电脑”→“管理”→“设备管理器”→展开“网络适配器”,右键目标网卡→“属性”→“资源”选项卡→勾选“使用输入/输出范围”→观察“中断请求(IRQ)”行显示的十进制数字,如“IRQ 24”。【若该行灰色不可见,说明启用了MSI(消息信号中断),需改用PowerShell查PCI设备中断】
在PowerShell中执行:
Get-WmiObject -Class Win32_PnPSignedDriver | Where-Object {$_.Name -like "*Realtek*" -and $_.DeviceID -like "*PCI*"} | Select-Object Name, DeviceID, HardWareID
从DeviceID中提取PCI总线号(如PCI\VEN_10EC&DEV_8168&SUBSYS...中的8168为设备ID),再用:
pnputil /enum-devices /class Net | findstr "8168"
定位设备实例ID,最后执行:
Get-PnpDevice -InstanceId "PCI\VEN_10EC&DEV_8168..." | Get-PnpDeviceProperty DEVPKEY_Device_LocationPaths
确认中断路径。实际中断号通常为16–23之间的整数。
禁用irqbalance干扰服务
Windows本身不运行irqbalance,但某些第三方网络优化工具或OEM预装驱动可能自带类似服务。打开任务管理器→“服务”选项卡→查找名为“IntelNetworkService”、“Rt640x64”、“MarvellNetworkService”等驱动配套服务→右键“停止”,并右键“打开服务”→在服务列表中找到对应项→双击→启动类型改为“禁用”。
这一步必须做,否则即使手动绑核,后台服务会在几秒后自动重置中断分配策略,导致绑定失效。
绑定网卡中断到指定CPU核心
方法一:使用Windows内置的处理器关联性设置(仅适用于传统IRQ,非MSI模式)
右键“此电脑”→“属性”→“高级系统设置”→“性能”下的“设置”→“高级”→“处理器计划”→选择“程序”→点击“确定”。此设置无效于硬件中断,仅影响进程线程,【切勿在此处操作,会误导且无效果】。
让 Windows 桌面程序在开机时静默自启并隐藏到系统托盘。特别适用于 Flutter、Electron 等无视 VBS/ProcessStartInfo 窗口样式、难以隐藏的顽固应用。提供「VBS 启动器 + Python ctypes/Win32 API」的隐藏窗口方案,可稳定把窗口收进托盘且不闪控制台。
方法二:通过注册表强制绑定(适用于支持MSI-X的现代网卡)
按Win+R输入regedit,导航至:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesYourNicDriverNameParametersInterruptManagement
其中YourNicDriverName需替换为实际驱动服务名(如rt640x64、e1d65x64、ixgbe等),可通过设备管理器→网卡属性→“驱动程序”→“驱动程序文件详细信息”中查看.sys文件名推断。
在InterruptManagement项下新建DWORD(32位)值:
名称:AffinityPolicy
数值:2(表示启用“首选CPU”策略)
再新建DWORD(32位)值:
名称:PreferredNode
数值:0(表示首选NUMA节点0,对应物理CPU插槽0)
重启生效。
方法三:使用DevCon命令行工具精确控制(推荐)
从Windows Driver Kit (WDK) 获取devcon.exe,放入C:Tools。
管理员PowerShell中执行:
cd C:Tools
devcon findall =net
找到网卡对应硬件ID(如PCIVEN_10EC&DEV_8168...)
执行:
devcon disable "PCIVEN_10EC&DEV_8168*"
devcon enable "PCIVEN_10EC&DEV_8168*"
该操作触发驱动重载,配合注册表AffinityPolicy=2可使中断首次分配即落在首选节点。
验证中断是否已绑定到目标核心
第一步:下载并运行Microsoft的Coreinfo工具(sysinternals套件),执行:
coreinfo -i
观察输出中各逻辑处理器所属的Group、NumaNode、Socket信息,确认你想绑定的目标核心编号(如Group0, Processor0)。
第二步:打开性能监视器(perfmon.msc)→添加计数器→选择“Processor Information”→“% Interrupt Time”→选择具体逻辑处理器(如0,0)→开始监控。
运行FPS游戏并激烈交火,同时用Wireshark抓包观察RX/TX流量峰值时刻,对比各CPU核心的中断时间曲线——目标核心应出现明显高于其他核心的尖峰,且波动平稳;若多个核心同步跳变,说明绑定失败。
第三步:在设备管理器中再次打开网卡属性→“高级”选项卡→查找“Interrupt Moderation”、“RSS Queues”、“Receive Buffers”等选项,将“Interrupt Moderation”设为“Disabled”,关闭接收端缩放(RSS)队列(设为1),确保所有中断集中到单个向量。这能避免多队列分散中断削弱绑定效果。










