我们有一个应用程序,它发送和接收大量网络流量 - 但中断导致我们的性能低于最大性能。在 20 Mbps 输入和 20 Mbps 输出(在 1 Gbps 线路上)下,网络中断使用 100% 的核心 0,操作系统冻结(通过 Windows Performance Analyzer 检查)。使用网卡(BroadCom)上的 RSS 功能并没有改善这种情况。
我知道您可以通过注册表编辑特定中断的亲和性 - 我的目标是使用第二个核心进行网络中断,就像我在 Linux 上所做的那样 - 但不知道如何找到正确的键进行编辑。任何其他建议都欢迎。
答案1
我将提供部分答案,并提供有关如何以及在何处可以找到针对您的系统的具体答案的线索。
NDIS
该功能与操作系统的版本密切相关。
早期的参考资料是 处理器亲和性掩码键的参数HKLM\SYSTEM\CurrentControlSet\Services\NDIS\Parameters
。它设置哪些处理器可用于在 Windows 2000 中处理网络适配器驱动程序中断。
该Receive Side Scaling
子系统在后续版本中发展到将网络处理队列映射到可用的处理器,如下所述这里适用于 Windows 2008。
这里是 Windows 2012 R2(我相信是 NDIS 6.40)的文档RSS
,早期的短语中给出了一条线索:
为了高效处理接收到的数据,微型端口驱动程序的接收中断服务函数会安排延迟过程调用 (DPC)。如果没有 RSS,典型的 DPC 会在 DPC 调用中指示所有接收到的数据。因此,与中断相关的所有接收处理都在发生接收中断的 CPU 上运行。
在......的最后此链接是所有 6.x 版本参考资料的链接NDIS
。我相信您可以使用这些参考资料为您的特定系统找到答案,并确定准确的术语以在 Google 上查找歧义。
仅基于问题提供的信息(不是太详细),我在文档中看到了什么?
处理器集中第一个可用的处理器RSS
是使用HKEY_LOCAL_MACHINE\\SYSTEM\CurrentControlSet\Services\NDIS\Parameters\RssBaseCpu
Windows 2008 中的参数设置的,具体如下:这里。希望这也适用于 Windows 2012 R2。
类似地,可以使用如下命令RSS
设置最大可用处理器数:HKEY_LOCAL_MACHINE\\SYSTEM\CurrentControlSet\Services\Ndis\Parameters\MaxNumRssCpus
这里。
鉴于此,在 Win2008 上,希望在 Win2012 中也是如此,设置RssBaseCpu
为 1 和MaxNumRssCpus
1 应该将RSS
处理锁定到第二个逻辑 CPU,而不是其他 CPU,假设RSS
已成功激活。RSS
可以通过管理命令提示符从 Windows 内部检查状态,如下所示:
netsh int tcp show global
据记载这里。
鉴于这种情况,您的问题很可能也只是由于编写不当的 NIC 设备驱动程序造成的。我在 NIC 卸载机制(RSS 属于这一大类)方面遇到了不少麻烦,尤其是戴尔服务器上的 Broadcom 集成 NIC 和相关驱动程序。如果系统没有根据四重检查的配置按预期运行,我鼓励您也去寻找这种可能性。