在Windows Server 2012 R2中设置networking中断的关联性

我们有一个应用程序发送和接收大量的networkingstream量 – 但中断导致我们得到低于最大性能。 在20 Mbpsinput和20 Mbps输出(在1 Gbps线路上)时,networking中断使用核心0的100%,操作系统冻结(通过Windows性能分析器检查)。 使用网卡上的RSSfunction(BroadCom)并没有改善这种情况。

我知道你可以通过registry来编辑特定中断的关联 – 我的目标是使用第二个内核来处理networking中断,就像我在linux上做的那样 – 但是不知道如何find正确的关键点来编辑。 任何其他build议是非常受欢迎的。

我将提供部分答案,提供有关如何以及在何处相信您可能会find具体到您的系统的具体答案的线索。

该function与操作系统的NDIS版本密切相关。

早期引用是HKLM\SYSTEM\CurrentControlSet\Services\NDIS\Parameters键的ProcessorAffinityMask参数。 它设置哪些处理器可用于在Windows 2000中为networking适配器驱动程序中断提供服务。

Receive Side Scaling子系统在更高版本中发展,将networking处理队列映射到可用的处理器, 这里描述的Windows 2008。

这里是Windows 2012 R2中的RSS文档(NDIS 6.40,我相信),并在早期提供了一个线索:

为了有效地处理接收到的数据,微型端口驱动程序的接收中断服务函数调度延迟过程调用(DPC)。 没有RSS,一个典型的DPC指示在DPC呼叫内的所有接收的数据。 因此,与中断相关的所有接收处理都在发生接收中断的CPU上运行。

在这个链接的末尾是所有6.x NDIS版本的参考资料的链接。 我相信你可以使用这些参考来为你的特定系统找出一个答案,以及确定谷歌含糊不清的术语。

只是基于问题提供的信息(这不是太详细),我在文档中看到了什么?

处理器中第一个可用于RSS的处理器是使用Windows 2008中的HKEY_LOCAL_MACHINE\\SYSTEM\CurrentControlSet\Services\NDIS\Parameters\RssBaseCpu参数进行设置的,如此处所述。 希望这也适用于Windows 2012 R2。

同样,可用于RSS的处理器的最大数目是使用HKEY_LOCAL_MACHINE\\SYSTEM\CurrentControlSet\Services\Ndis\Parameters\MaxNumRssCpus ,如此处所述。

鉴于此,在Win2008以及Win2012中,如果将RssBaseCpu设置为1并将MaxNumRssCpus设置为1, MaxNumRssCpus应该将RSS处理locking到第二个逻辑CPU,而不是其他设备,假设RSS已成功激活。 可以通过pipe理命令提示符在Windows中检查RSS状态,如下所示:

 netsh int tcp show global 

如此处所述 。

鉴于这种情况下,你的问题很可能只是由于一个写得不好的NIC设备驱动程序。 对于网卡卸载机制(RSS所属的一般类别),特别是戴尔服务器上的Broadcom集成网卡以及相关的驱动程序,我遇到了相当多的麻烦。 如果系统没有按照四重检查configuration预期的行为,我鼓励你也追求这种可能性。