惠普关于其 QLogic (fka Broadcom) NetXtreme II 适配器的白皮书(其中包括我正在测试的特定 NIC)指出(第 7 页),它们对于高达 256 字节/数据包的数据包的小数据包性能高于 5,000,000 数据包/秒。
在我对一个应用程序的测试中,我禁用了除 UDP 接收部分之外的所有处理,我只能达到 120,000 个数据包/秒。数据包均匀分布在 12 个多播组上。
我注意到当我提高 UDP 发送速率并在 120,000 左右达到最大值时,有一个内核(2 个插槽上的每个内核中有 12 个内核)其负载逐渐增加。但我不知道那个核心在做什么以及为什么。这不是我的应用程序中的单线程瓶颈,因为我是否为所有多播组运行应用程序的单个实例或每个处理 1 个多播组的 12 个实例都没有关系。所以瓶颈不是我的接收器应用程序。
MSI 已启用(通过设备管理器中的“资源类型”视图进行验证)并且 RSS 也在 NIC 设置中启用,具有 8 个队列。那么是什么执着于那个核心呢?所有 NIC 卸载功能当前都处于开启状态,但将它们关闭并没有帮助。
那么瓶颈可能在哪里呢?
系统详情:
我有一个用作iperf3客户端的 linux机器,用 Broadcom BCM5721、1Gb 适配器(2 个端口,但只有 1 个用于测试)测试了 2 个配备相同的 Windows 2012 R2 服务器盒。所有机器都通过一个 1Gb 交换机连接。
在例如 300Mbit 测试 UDP
iperf3 -uZVc 192.168.30.161 -b300m -t5 --get-server-output -l8192
Run Code Online (Sandbox Code Playgroud)
导致发送的所有数据包丢失 14%(对于具有完全相同硬件但较旧的 NIC 驱动程序的其他服务器盒,丢失约为 2%),但即使在 50Mbit 时也会发生丢失,尽管不那么严重。使用等效设置的 TCP 性能:
iperf3 -ZVc 192.168.30.161 -t5 --get-server-output -l8192
Run Code Online (Sandbox Code Playgroud)
产生800Mbit以北的传输速度,没有报告重传。
服务器始终使用以下选项启动:
iperf3 -sB192.168.30.161
Run Code Online (Sandbox Code Playgroud)
谁的错?
编辑:
现在我尝试了另一个方向:Windows -> Linux。结果:丢包率始终为 0,而吞吐量最大约为
-l8192,即分片的 IP 数据包-l1472未分片的 …我正在研究是否可以在 Windows 中实现一个 HPC 应用程序,该应用程序使用十几个或最多 200 个多播组(即使用 MSI-X 和 RSS,我可以)以高速率接收小型 UDP 多播数据报(主要是 100-400 字节)扩展到多个内核),对每个数据包进行一些处理,然后将其发送出去。通过 TCP 发送我设法达到了我需要的程度(6.4Gb/秒)而没有撞墙,但是以高 pps 速率接收数据报却成了一个问题。
在最近对 Windows 2012 R2 上带有 2 端口 10Gb 以太网 NIC 的高规格 NUMA 机器进行的测试中,我每秒只能接收数十万个 UDP 数据报(早期丢弃,即没有实际处理数据,使用 2x12 内核从等式中删除我的应用程序的处理开销以查看它的速度有多快,并且测试的 12 个多播组的内核部分似乎分布在一个 NUMA 节点的 8 或 10 个内核上(设置了最大 RSS 队列)到 16) - 尽管使用 .net 应用程序,因此本机应用程序应该能够运行得更快。
但即使是Len Holgate 在他的高性能 Windows RIO 测试中也只能以 500kpps 的速度接收 UDP 数据包,使用 1024 …
networking performance linux-networking windows-server-2012-r2
当要求客户在他们的数据中心启用 RSS 以提高网络性能(每秒 UDP 包的速率非常高)时,我被告知他们通常将其关闭,因为在过去的各种问题之后,微软和硬件供应商(我相信是 HP)经常会要求他们关闭 RSS,因为它可能会破坏稳定。
这个花絮,以及尽管 RSS 在 Windows 2008 中默认全局启用(我在 2008 R2 中验证过),但在 2012 年(在 2012 R2 中验证)默认情况下已更改为“禁用”的额外观察结果,让我相信不稳定的说法可能有一定的道理。但是谷歌在这里似乎不是我的朋友。在有关Windows 2012 中 RSS 改进的 TechNet 页面上,RSS似乎很稳定(我自己在非常高规格的 Win2012R2 系统上对扩展 UDP 接收的测试证实了这一点)并且仍然是扩展的方式。
这里有没有人对 RSS 和稳定性有好的/坏的经验可以分享,或者有一些关于它的问题的指针?
networking windows-server-2008 scalability performance-tuning windows-server-2012