
神人软件之雷神加速器(万兆网卡跑不满原因之一)
如果有人喜欢和我一样,在主机里装一个雷神加速器,还喜欢插高规格网卡玩文件传输,那你可有的享福了🥵🥵
事情起因:俩月前买了牢英的E810和许多X520网卡,E810是双口25G版本的,X520就是传统万兆

这里我需要提前说明一下,英特尔的网卡驱动挺离谱的,首先X520是老网卡,给的驱动网页说过期了,英特尔将所有网卡驱动相关的东西打包到一起让人下载了,你需要去下载那个😅。这就算了它驱动包里文件分类也不直白,里面的proxgb代表万兆驱动、PROCGB是100Gbps的驱动,我需要分别打开这两个安装E810和X520的驱动。我就问打开这个包谁能一眼知道驱动在哪

将E810插在主机A上,x520插在主机B上,中间一个万兆光纤连接后,显而易见我就开始iperf打流测试了。提前说明,配置上A是14600k+96G内存+4060ti,B是Xeon gold 6230+512G内存+4090,原则上来说几乎不可能有性能瓶颈来干扰网卡发挥

于是乎搞笑了的来了,单路TCP打流测试里(就是iperf默认),A往B传有万兆(10Gbps),但B往A只有3 Gbps。而在多路下倒是都可以跑满10G


这下难绷了难道我e810的接受侧有问题?😰我尝试改了RX策略、RSS队列、电源策略、中断裁决率、接收缓冲以及各种乱七八糟的东西,基本上能在属性里面改的都改了,我甚至以为是主板南桥问题把网卡插在直连CPU的通道、甚至换个x520在主机A上。整整搞了两天一直是这个问题,直接心态爆炸😭
后面把巨型帧同时拉大倒是能解决,但只能解决一点:A的接收仅仅上升到5Gbps左右。这时我回过味来了,打开任务管理器发现有一个小核在测试时跑满了。我在后台设置半天,终于把网卡进程绑在大核上,这下速度倒是能上到6-7Gbps左右,配合巨型帧可以拉满到9.8。显然这就是一个典型CPU负载性能跟不上的问题…..吗?
一般人估计都这么认为,当时包括我也是。找的理由牵强赴会:什么工作站平台有优化、网上说x520上不开巨型帧是跑不满10G的等等。
我觉得诡异的点在于以14600k的性能,单核性能绝对是吊打服务器那些至强的,人家甚至还能睿频。哪怕是E核也不是吃素的,10G说实话真算不上高压负载。但是我排查半天只能把问题定位在主机本身身上。(其实当时应该在虚拟机里再做一次测试,这样可以把问题定位在软件身上,我一直在怀疑硬件问题)
我把问题汇总,受不了了:
codex——启动!
我把所有问题与排查过程喂给它,让他进后台找。第一轮就运行了俩小时,烧完了我所有的token。它排查到了一个关键问题:
“问题在主机 A 的接收侧内核网络处理路径,具体表现为某个 RSS 目标核心上的 DPC 饱和。”
GPT分析后认为是RSC出问题了,我试了一下发现确实:powersell里查找RSC是看不到e810这张网卡的。
算了继续让codex做,这次又找出一个问题:一个叫 NDIS.SYS!ndisInterruptDpc 的东西:占用了目标逻辑处理器约 74.96% 的单核容量,而 icea.sys 自身的独占占用只有约 5.51%。
它是什么
nfwfp.sys 是雷神加速器安装的 WFP 内核网络驱动
WFP在Windows网络栈中提供多个过滤挂载点,第三方 callout 驱动可以检查、分类、阻止、修改或重定向TCP/IP流量。匹配过滤条件时,Windows会调用驱动的分类函数;没有限制条件的过滤规则甚至可能对所有匹配层流量执行处理。
最合理的技术解释是:
- 每个接收数据包进入Windows网络栈时,都经过这个WFP过滤层;
- 在MTU 1500、10Gbps下,每秒需要处理大量数据包;
- 单条TCP连接又主要固定在一个RSS处理器上;
- 额外的过滤、分类、内存访问或路径变化,把单核NDIS DPC推到饱和;
- 接收缓冲区来不及处理,出现Receive Discards,吞吐下降。
WFP callout确实可以在内核中直接处理TCP/IP网络数据,甚至拦截传输层流量并将其排队到其他线程处理。
它还可能通过以下方式产生间接开销:
- 让报文进入额外的WFP分类流程;
- 改变NDIS批量收包方式;
- 增加数据结构和内存访问;
- 破坏或限制某些接收合并、快速路径;
- 触发后续NETIO、TCPIP、NDIS工作。
删掉这个以后再测试马上就好了,网卡啥都不设置,默认状态仅用小核就能跑满!而且超级稳定。😭😭😭😭😭
另外说明,这玩意很难删除,不是简单的卸载或者强制清除的,你需要先阻止它下次加载到内核里,然后重启电脑再删除:
管理员打开powershell
sc.exe config nfwfp start= disabled
重启
sc.exe delete nfwfp
检查:sc.exe query nfwfp,如果输出未安装就对了
雷神的这个东西其实就是监测你的网络流量,发现是你加速的网址就走加速器渠道。但这玩意不能走代理实现吗?非要加在内核里,而且正常卸载也关不掉😅(我不清楚卸载后不输上面这些东西是不是重启后也行)