windws server 2008 udp 多播性能问题

dwe*_*ves 7 performance multicast windows-server-2008-r2

我在 2008 R2 Enterprise SP1 上遇到了一个奇怪的性能问题。

这是设置:

  • 许多进程侦听绑定在单个 NIC 上的不同组播 UDP 流(按进程侦听 5 个组播)
  • 跨进程,所有多播使用相同的端口范围但不同的多播 IP(重要的细节,因为给定端口的每个多播接收器都将是 REUSED 服务器套接字的服务器)
  • 每个进程组播侦听带宽为 10Mbits
  • 在 NIC 上设置 RSS,在 NIC 和 OS 上设置最大卸载设置,激活 MSI

行为:

  • 在 17 个侦听进程(大约 85 个加入的 UDP 多播)下,内核 CPU 影响可以忽略不计。
  • 在 17 和 22 个侦听器之间(大约 110 个加入的 UDP 多播),内核 CPU 使用率开始缓慢增长但可以接受
  • 超过 25,每个加入的多播开始对内核 CPU 时间产生巨大影响,这会影响所有 RSS 绑定的 CPU
  • 每个监听进程使用的 CPU 时间接近 0(正常,因为进程除了读取多播之外什么都不做),所以真正的问题在于操作系统组件

我们发现了什么:

  • 更改 NIC 硬件对行为没有影响(在 HP NC382i、基于 Broadcom 的 NIC 和 HP NC365T、Quad Gigabit、基于 Intel 的测试)
  • 全局接收带宽不是限制因素(单个 500Mbits 流不会触发 CPU 负载)
  • 在多播套接字上读取似乎不是限制因素(我们仅在多播流上使用哑 JOIN 进程执行测试并重现 CPU 负载问题)
  • 在两个 NIC 上拆分多播流量似乎可以限制 CPU 负载并更好地传播。然而,这对我们来说不是一个用例。

问题:

  • 我们至少需要能够收听大约 500 个多播流,也许多达 750 个
  • 相同的硬件,运行 XP OS 在 CPU Kernel 时间没有这种行为

疑似成分:

  • NDIS.sys 似乎是解释 CPU 使用率增加的一个很好的候选者。

大家有没有遇到过这样的问题,可以给一些调查的方向。我已经阅读了有关 win server 2008 网络性能增强的所有内容,但似乎所有内容都与 TCP 流量有关。我还测试了可以通过注册表或 netsh 命令完成的所有可能的优化。

Ste*_*e-o 2

这是大量的多播流,通常 NIC 对硬件过滤有一个下限,当超过该限制时,它们要么丢弃所有内容(廉价 NIC 上的实施效果不佳),要么将所有内容转发给操作系统以供其过滤。当操作系统执行过滤时,您的处理器使用率将会飙升。

除了研究不同的硬件(您列出了一些)之外,您也可以扩展到基于 10GigE 的硬件,唯一的选择是使用代理服务器。

通过实验找到许多可以可靠管理的多播流,然后通过 TCP 将流转发到中央服务器或一组服务器。然后,该中央服务器可以使用 TCP 分段加速或完整 ToE 来使传入网络负载对处理器而言无关紧要。

由于 Windows 驱动程序非常差,我根本无法使用 Broadcom 硬件获得像样的多播速率。了解 Linux 在相同硬件上的执行情况会很有趣,这应该能让您很好地了解硬件和 IP 堆栈的质量。

您将 Windows XP 列为工作正常,Windows Server 和 Windows XP 之间的主要区别在于量子时间。Windows Server 提供更长的量子时间,因此可能值得研究强制缩短量子时间(如果您甚至可以设置它)。